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 | } |