blob: 8c810d9a4605b67fe7709e31833673c2fd7b974a [file] [log] [blame]
// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.android_webview.test;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.AwWebContentsDelegate;
import org.chromium.base.test.util.Feature;
/**
* Tests for the ContentViewClient.addMessageToConsole() method.
*/
public class ClientAddMessageToConsoleTest extends AwTestBase {
// Line number at which the console message is logged in the page returned by the
// getLogMessageJavaScriptData method.
private static final int LOG_MESSAGE_JAVASCRIPT_DATA_LINE_NUMBER = 4;
private static final String TEST_MESSAGE_ONE = "Test message one.";
private static final String TEST_MESSAGE_TWO = "The second test message.";
private TestAwContentsClient mContentsClient;
private AwContents mAwContents;
@Override
public void setUp() throws Exception {
super.setUp();
mContentsClient = new TestAwContentsClient();
final AwTestContainerView testContainerView =
createAwTestContainerViewOnMainSync(mContentsClient);
mAwContents = testContainerView.getAwContents();
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
mAwContents.getSettings().setJavaScriptEnabled(true);
}
});
}
private static String getLogMessageJavaScriptData(String consoleLogMethod, String message) {
// The %0A sequence is an encoded newline and is needed to test the source line number.
return "<html>%0A" +
"<body>%0A" +
"<script>%0A" +
"console." + consoleLogMethod + "('" + message + "');%0A" +
"</script>%0A" +
"<div>%0A" +
"Logging the message [" + message + "] using console." + consoleLogMethod +
" method. " +
"</div>%0A" +
"</body>%0A" +
"</html>";
}
@SmallTest
@Feature({"AndroidWebView"})
public void testAddMessageToConsoleCalledWithCorrectLevel() throws Throwable {
TestAwContentsClient.AddMessageToConsoleHelper addMessageToConsoleHelper =
mContentsClient.getAddMessageToConsoleHelper();
int callCount = addMessageToConsoleHelper.getCallCount();
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getLogMessageJavaScriptData("error", "msg"),
"text/html", false);
addMessageToConsoleHelper.waitForCallback(callCount);
assertEquals(AwWebContentsDelegate.LOG_LEVEL_ERROR ,
addMessageToConsoleHelper.getLevel());
callCount = addMessageToConsoleHelper.getCallCount();
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getLogMessageJavaScriptData("warn", "msg"),
"text/html", false);
addMessageToConsoleHelper.waitForCallback(callCount);
assertEquals(AwWebContentsDelegate.LOG_LEVEL_WARNING ,
addMessageToConsoleHelper.getLevel());
callCount = addMessageToConsoleHelper.getCallCount();
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getLogMessageJavaScriptData("log", "msg"),
"text/html", false);
addMessageToConsoleHelper.waitForCallback(callCount);
assertEquals(AwWebContentsDelegate.LOG_LEVEL_LOG ,
addMessageToConsoleHelper.getLevel());
// Can't test LOG_LEVEL_TIP as there's no way to generate a message at that log level
// directly using JavaScript.
}
@SmallTest
@Feature({"AndroidWebView"})
public void testAddMessageToConsoleCalledWithCorrectMessage() throws Throwable {
TestAwContentsClient.AddMessageToConsoleHelper addMessageToConsoleHelper =
mContentsClient.getAddMessageToConsoleHelper();
int callCount = addMessageToConsoleHelper.getCallCount();
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getLogMessageJavaScriptData("log", TEST_MESSAGE_ONE),
"text/html", false);
Log.w("test", getLogMessageJavaScriptData("log", TEST_MESSAGE_ONE));
addMessageToConsoleHelper.waitForCallback(callCount);
assertEquals(TEST_MESSAGE_ONE, addMessageToConsoleHelper.getMessage());
callCount = addMessageToConsoleHelper.getCallCount();
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getLogMessageJavaScriptData("log", TEST_MESSAGE_TWO),
"text/html", false);
addMessageToConsoleHelper.waitForCallback(callCount);
assertEquals(TEST_MESSAGE_TWO, addMessageToConsoleHelper.getMessage());
}
@SmallTest
@Feature({"AndroidWebView"})
public void testAddMessageToConsoleCalledWithCorrectLineAndSource() throws Throwable {
TestAwContentsClient.AddMessageToConsoleHelper addMessageToConsoleHelper =
mContentsClient.getAddMessageToConsoleHelper();
int callCount = addMessageToConsoleHelper.getCallCount();
String data = getLogMessageJavaScriptData("log", TEST_MESSAGE_ONE);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
data, "text/html", false);
addMessageToConsoleHelper.waitForCallback(callCount);
assertTrue("Url [" + addMessageToConsoleHelper.getSourceId() + "] expected to end with [" +
data + "].", addMessageToConsoleHelper.getSourceId().endsWith(data));
assertEquals(LOG_MESSAGE_JAVASCRIPT_DATA_LINE_NUMBER,
addMessageToConsoleHelper.getLineNumber());
}
}