| 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | package org.chromium.android_webview.test; |
| 6 | |
| 7 | import android.test.suitebuilder.annotation.SmallTest; |
| 8 | import android.util.Log; |
| 9 | |
| 10 | import org.chromium.android_webview.AwContents; |
| 11 | import org.chromium.android_webview.AwWebContentsDelegate; |
| 12 | import org.chromium.base.test.util.Feature; |
| 13 | |
| 14 | /** |
| 15 | * Tests for the ContentViewClient.addMessageToConsole() method. |
| 16 | */ |
| 17 | public class ClientAddMessageToConsoleTest extends AwTestBase { |
| 18 | |
| 19 | // Line number at which the console message is logged in the page returned by the |
| 20 | // getLogMessageJavaScriptData method. |
| 21 | private static final int LOG_MESSAGE_JAVASCRIPT_DATA_LINE_NUMBER = 4; |
| 22 | |
| 23 | private static final String TEST_MESSAGE_ONE = "Test message one."; |
| 24 | private static final String TEST_MESSAGE_TWO = "The second test message."; |
| 25 | |
| 26 | private TestAwContentsClient mContentsClient; |
| 27 | private AwContents mAwContents; |
| 28 | |
| 29 | @Override |
| 30 | public void setUp() throws Exception { |
| 31 | super.setUp(); |
| 32 | mContentsClient = new TestAwContentsClient(); |
| 33 | final AwTestContainerView testContainerView = |
| 34 | createAwTestContainerViewOnMainSync(mContentsClient); |
| 35 | mAwContents = testContainerView.getAwContents(); |
| 36 | |
| 37 | getInstrumentation().runOnMainSync(new Runnable() { |
| 38 | @Override |
| 39 | public void run() { |
| 40 | mAwContents.getSettings().setJavaScriptEnabled(true); |
| 41 | } |
| 42 | }); |
| 43 | } |
| 44 | |
| 45 | private static String getLogMessageJavaScriptData(String consoleLogMethod, String message) { |
| 46 | // The %0A sequence is an encoded newline and is needed to test the source line number. |
| 47 | return "<html>%0A" + |
| 48 | "<body>%0A" + |
| 49 | "<script>%0A" + |
| 50 | "console." + consoleLogMethod + "('" + message + "');%0A" + |
| 51 | "</script>%0A" + |
| 52 | "<div>%0A" + |
| 53 | "Logging the message [" + message + "] using console." + consoleLogMethod + |
| 54 | " method. " + |
| 55 | "</div>%0A" + |
| 56 | "</body>%0A" + |
| 57 | "</html>"; |
| 58 | } |
| 59 | |
| 60 | @SmallTest |
| 61 | @Feature({"AndroidWebView"}) |
| 62 | public void testAddMessageToConsoleCalledWithCorrectLevel() throws Throwable { |
| 63 | TestAwContentsClient.AddMessageToConsoleHelper addMessageToConsoleHelper = |
| 64 | mContentsClient.getAddMessageToConsoleHelper(); |
| 65 | |
| 66 | int callCount = addMessageToConsoleHelper.getCallCount(); |
| 67 | loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
| 68 | getLogMessageJavaScriptData("error", "msg"), |
| 69 | "text/html", false); |
| 70 | addMessageToConsoleHelper.waitForCallback(callCount); |
| 71 | assertEquals(AwWebContentsDelegate.LOG_LEVEL_ERROR , |
| 72 | addMessageToConsoleHelper.getLevel()); |
| 73 | |
| 74 | callCount = addMessageToConsoleHelper.getCallCount(); |
| 75 | loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
| 76 | getLogMessageJavaScriptData("warn", "msg"), |
| 77 | "text/html", false); |
| 78 | addMessageToConsoleHelper.waitForCallback(callCount); |
| 79 | assertEquals(AwWebContentsDelegate.LOG_LEVEL_WARNING , |
| 80 | addMessageToConsoleHelper.getLevel()); |
| 81 | |
| 82 | callCount = addMessageToConsoleHelper.getCallCount(); |
| 83 | loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
| 84 | getLogMessageJavaScriptData("log", "msg"), |
| 85 | "text/html", false); |
| 86 | addMessageToConsoleHelper.waitForCallback(callCount); |
| 87 | assertEquals(AwWebContentsDelegate.LOG_LEVEL_LOG , |
| 88 | addMessageToConsoleHelper.getLevel()); |
| 89 | |
| 90 | // Can't test LOG_LEVEL_TIP as there's no way to generate a message at that log level |
| 91 | // directly using JavaScript. |
| 92 | } |
| 93 | |
| 94 | @SmallTest |
| 95 | @Feature({"AndroidWebView"}) |
| 96 | public void testAddMessageToConsoleCalledWithCorrectMessage() throws Throwable { |
| 97 | TestAwContentsClient.AddMessageToConsoleHelper addMessageToConsoleHelper = |
| 98 | mContentsClient.getAddMessageToConsoleHelper(); |
| 99 | |
| 100 | int callCount = addMessageToConsoleHelper.getCallCount(); |
| 101 | loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
| 102 | getLogMessageJavaScriptData("log", TEST_MESSAGE_ONE), |
| 103 | "text/html", false); |
| 104 | Log.w("test", getLogMessageJavaScriptData("log", TEST_MESSAGE_ONE)); |
| 105 | addMessageToConsoleHelper.waitForCallback(callCount); |
| 106 | assertEquals(TEST_MESSAGE_ONE, addMessageToConsoleHelper.getMessage()); |
| 107 | |
| 108 | callCount = addMessageToConsoleHelper.getCallCount(); |
| 109 | loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
| 110 | getLogMessageJavaScriptData("log", TEST_MESSAGE_TWO), |
| 111 | "text/html", false); |
| 112 | addMessageToConsoleHelper.waitForCallback(callCount); |
| 113 | assertEquals(TEST_MESSAGE_TWO, addMessageToConsoleHelper.getMessage()); |
| 114 | } |
| 115 | |
| 116 | @SmallTest |
| 117 | @Feature({"AndroidWebView"}) |
| 118 | public void testAddMessageToConsoleCalledWithCorrectLineAndSource() throws Throwable { |
| 119 | TestAwContentsClient.AddMessageToConsoleHelper addMessageToConsoleHelper = |
| 120 | mContentsClient.getAddMessageToConsoleHelper(); |
| 121 | |
| 122 | int callCount = addMessageToConsoleHelper.getCallCount(); |
| 123 | String data = getLogMessageJavaScriptData("log", TEST_MESSAGE_ONE); |
| 124 | loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
| 125 | data, "text/html", false); |
| 126 | addMessageToConsoleHelper.waitForCallback(callCount); |
| 127 | assertTrue("Url [" + addMessageToConsoleHelper.getSourceId() + "] expected to end with [" + |
| 128 | data + "].", addMessageToConsoleHelper.getSourceId().endsWith(data)); |
| 129 | assertEquals(LOG_MESSAGE_JAVASCRIPT_DATA_LINE_NUMBER, |
| 130 | addMessageToConsoleHelper.getLineNumber()); |
| 131 | } |
| 132 | } |