1// Copyright 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 5package org.chromium.android_webview.test; 6 7import android.test.suitebuilder.annotation.SmallTest; 8import android.util.Log; 9 10import org.chromium.android_webview.AwContents; 11import org.chromium.android_webview.AwWebContentsDelegate; 12import org.chromium.base.test.util.Feature; 13 14/** 15 * Tests for the ContentViewClient.addMessageToConsole() method. 16 */ 17public 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} 133