summaryrefslogtreecommitdiffstats
path: root/tests/DumpRenderTree/src/com/android/dumprendertree/HTMLHostActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/DumpRenderTree/src/com/android/dumprendertree/HTMLHostActivity.java')
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/HTMLHostActivity.java726
1 files changed, 0 insertions, 726 deletions
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/HTMLHostActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/HTMLHostActivity.java
deleted file mode 100644
index 86bfad7..0000000
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/HTMLHostActivity.java
+++ /dev/null
@@ -1,726 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dumprendertree;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.BufferedOutputStream;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.Vector;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.ViewGroup;
-import android.webkit.JsPromptResult;
-import android.webkit.JsResult;
-import android.webkit.WebChromeClient;
-import android.webkit.WebSettings;
-import android.webkit.WebView;
-import android.widget.LinearLayout;
-import android.os.*;
-
-// TestRecorder creates two files, one for passing tests
-// and another for failing tests and writes the paths to
-// layout tests one line at a time. TestRecorder does not
-// have ability to clear the results.
-class TestRecorder {
- public void passed(String layout_file) {
- try {
- mBufferedOutputPassedStream.write(layout_file.getBytes());
- mBufferedOutputPassedStream.write('\n');
- mBufferedOutputPassedStream.flush();
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
-
- public void failed(String layout_file, String reason) {
- try {
- mBufferedOutputFailedStream.write(layout_file.getBytes());
- mBufferedOutputFailedStream.write(" : ".getBytes());
- mBufferedOutputFailedStream.write(reason.getBytes());
- mBufferedOutputFailedStream.write('\n');
- mBufferedOutputFailedStream.flush();
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
-
- public void nontext(String layout_file, boolean has_results) {
- try {
- mBufferedOutputNontextStream.write(layout_file.getBytes());
- if (has_results) {
- mBufferedOutputNontextStream.write(" : has expected results".getBytes());
- }
- mBufferedOutputNontextStream.write('\n');
- mBufferedOutputNontextStream.flush();
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
-
- public TestRecorder(boolean resume) {
- try {
- File resultsPassedFile = new File("/sdcard/layout_tests_passed.txt");
- File resultsFailedFile = new File("/sdcard/layout_tests_failed.txt");
- File resultsNontextFile = new File("/sdcard/layout_tests_nontext.txt");
-
- mBufferedOutputPassedStream =
- new BufferedOutputStream(new FileOutputStream(resultsPassedFile, resume));
- mBufferedOutputFailedStream =
- new BufferedOutputStream(new FileOutputStream(resultsFailedFile, resume));
- mBufferedOutputNontextStream =
- new BufferedOutputStream(new FileOutputStream(resultsNontextFile, resume));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public void close() {
- try {
- mBufferedOutputPassedStream.close();
- mBufferedOutputFailedStream.close();
- mBufferedOutputNontextStream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private BufferedOutputStream mBufferedOutputPassedStream;
- private BufferedOutputStream mBufferedOutputFailedStream;
- private BufferedOutputStream mBufferedOutputNontextStream;
-}
-
-public class HTMLHostActivity extends Activity
- implements LayoutTestController {
-
- public class AsyncHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- if (msg.what == MSG_TIMEOUT) {
- mTimedOut = true;
- requestWebKitData();
- return;
- } else if (msg.what == MSG_WEBKIT_DATA) {
- HTMLHostActivity.this.dump(mTimedOut, (String)msg.obj);
- return;
- }
-
- super.handleMessage(msg);
- }
- }
-
- public void requestWebKitData() {
- Message callback = mHandler.obtainMessage(MSG_WEBKIT_DATA);
-
- if (mRequestedWebKitData)
- throw new AssertionError("Requested webkit data twice: " + mWebView.getUrl());
-
- mRequestedWebKitData = true;
- if (mDumpAsText) {
- mWebView.documentAsText(callback);
- } else {
- mWebView.externalRepresentation(callback);
- }
- }
- // Activity methods
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- LinearLayout contentView = new LinearLayout(this);
- contentView.setOrientation(LinearLayout.VERTICAL);
- setContentView(contentView);
-
- mWebView = new WebView(this);
- mWebView.getSettings().setJavaScriptEnabled(true);
- mWebView.setWebChromeClient(mChromeClient);
- mEventSender = new WebViewEventSender(mWebView);
- mCallbackProxy = new CallbackProxy(mEventSender, this);
- mFinishedRunning = false;
-
- mWebView.addJavascriptInterface(mCallbackProxy, "layoutTestController");
- mWebView.addJavascriptInterface(mCallbackProxy, "eventSender");
- contentView.addView(mWebView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, 0.0f));
-
- mHandler = new AsyncHandler();
- }
-
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- }
-
- private void getTestList() {
- // Read test list.
- try {
- BufferedReader inReader = new BufferedReader(new FileReader(LAYOUT_TESTS_LIST_FILE));
- String line = inReader.readLine();
- while (line != null) {
- if (line.startsWith(mTestPathPrefix))
- mTestList.add(line);
- line = inReader.readLine();
- }
- inReader.close();
- Log.v(LOGTAG, "Test list has " + mTestList.size() + " test(s).");
- } catch (Exception e) {
- Log.e(LOGTAG, "Error while reading test list : " + e.getMessage());
- }
- }
-
- private void resumeTestList() {
- // read out the test name it stoped last time.
- try {
- BufferedReader inReader = new BufferedReader(new FileReader(TEST_STATUS_FILE));
- String line = inReader.readLine();
- for (int i = 0; i < mTestList.size(); i++) {
- if (mTestList.elementAt(i).equals(line)) {
- mTestList = new Vector<String>(mTestList.subList(i+1, mTestList.size()));
- break;
- }
- }
- inReader.close();
- } catch (Exception e) {
- Log.e(LOGTAG, "Error reading " + TEST_STATUS_FILE);
- }
- }
-
- private void clearTestStatus() {
- // Delete TEST_STATUS_FILE
- try {
- File f = new File(TEST_STATUS_FILE);
- if (f.delete())
- Log.v(LOGTAG, "Deleted " + TEST_STATUS_FILE);
- else
- Log.e(LOGTAG, "Fail to delete " + TEST_STATUS_FILE);
- } catch (Exception e) {
- Log.e(LOGTAG, "Fail to delete " + TEST_STATUS_FILE + " : " + e.getMessage());
- }
- }
-
- private void updateTestStatus(String s) {
- // Write TEST_STATUS_FILE
- try {
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(TEST_STATUS_FILE));
- bos.write(s.getBytes());
- bos.close();
- } catch (Exception e) {
- Log.e(LOGTAG, "Cannot update file " + TEST_STATUS_FILE);
- }
- }
-
- protected void onResume() {
- super.onResume();
- if (mTestList == null)
- mTestList = new Vector<String>();
-
- if (mTestList.isEmpty()) {
- // Read settings
- Intent intent = getIntent();
- mTestPathPrefix = intent.getStringExtra(TEST_PATH_PREFIX);
- mSingleTestMode = intent.getBooleanExtra(SINGLE_TEST_MODE, false);
- boolean resume = intent.getBooleanExtra(RESUME_FROM_CRASH, false);
- mTimeoutInMillis = intent.getIntExtra(TIMEOUT_IN_MILLIS, 8000);
-
- mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
-
- if (mTestPathPrefix == null)
- throw new AssertionError("mTestPathPrefix cannot be null");
-
- Log.v(LOGTAG, "Run tests with prefix: " + mTestPathPrefix);
-
- mResultRecorder = new TestRecorder(resume);
-
- if (!resume)
- clearTestStatus();
-
- if (!mSingleTestMode) {
- getTestList();
- if (resume)
- resumeTestList();
- } else {
- mTestList.add(mTestPathPrefix);
- }
-
- if (!mTestList.isEmpty())
- runTestAtIndex(0);
- else
- mWebView.loadUrl("about:");
- }
- }
-
- protected void onStop() {
- super.onStop();
- mWebView.stopLoading();
- }
-
- protected void onDestroy() {
- super.onDestroy();
- mResultRecorder.close();
- mWebView.destroy();
- mWebView = null;
- }
-
- public void onLowMemory() {
- super.onLowMemory();
- // Simulate a crash
- Log.e(LOGTAG, "Low memory, killing self");
- System.exit(1);
- }
-
- public boolean dispatchKeyEvent(KeyEvent event) {
- // Log key strokes as they don't seem to be matched
- //Log.e(LOGTAG, "Event: "+event);
- return super.dispatchKeyEvent(event);
- }
-
- // Run a test at specified index in the test list.
- // Stops activity if run out of tests.
- protected void runTestAtIndex(int testIndex) {
- mTestIndex = testIndex;
-
- resetTestStatus();
-
- if (testIndex == mTestList.size()) {
- if (!mSingleTestMode) {
- updateTestStatus("#DONE");
- }
- finished();
- return;
- }
- String s = mTestList.elementAt(testIndex);
- if (!mSingleTestMode)
- updateTestStatus(s);
-
- Log.v(LOGTAG, " Running test: "+s);
- mWebView.loadUrl("file://"+s);
-
- if (!mSingleTestMode) {
- // Create a timeout timer
- Message m = mHandler.obtainMessage(MSG_TIMEOUT);
- mHandler.sendMessageDelayed(m, mTimeoutInMillis);
- }
- }
-
- // Dump the page
- public void dump(boolean timeout, String webkitData) {
- String currentTest = mTestList.elementAt(mTestIndex);
- String resultFile = currentTest.substring(0, currentTest.lastIndexOf('.'));
-
- // dumpAsText version can be directly compared to expected results
- if (mDumpAsText) {
- resultFile += "-results.txt";
- } else {
- resultFile += "-android-results.txt";
- }
-
- try {
- FileOutputStream os = new FileOutputStream(resultFile);
- if (timeout) {
- Log.w("Layout test: Timeout", resultFile);
- os.write(TIMEOUT_STR.getBytes());
- os.write('\n');
- }
- if (mDumpTitleChanges)
- os.write(mTitleChanges.toString().getBytes());
- if (mDialogStrings != null)
- os.write(mDialogStrings.toString().getBytes());
- mDialogStrings = null;
- os.write(webkitData.getBytes());
- os.flush();
- os.close();
- } catch (FileNotFoundException ex) {
- ex.printStackTrace();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
-
- processResult(timeout, currentTest);
- runTestAtIndex(mTestIndex + 1);
- }
-
- // Wrap up
- public void failedCase(String file, String reason) {
- Log.w("Layout test: ", file + " failed " + reason);
- mResultRecorder.failed(file, reason);
-
- String bugNumber = FileFilter.isKnownBug(file);
- if (bugNumber != null) {
- System.out.println("FAIL known:"+bugNumber+ " "+file+reason);
- return;
- }
- if (FileFilter.ignoreResults(file)) {
- return;
- }
- System.out.println("FAIL: "+file+reason);
- }
-
- public void passedCase(String file) {
- Log.v("Layout test:", file + " passed");
- mResultRecorder.passed(file);
-
- String bugNumber = FileFilter.isKnownBug(file);
- if (bugNumber != null) {
- System.out.println("Bug Fixed: "+bugNumber+ " "+file);
- return;
- }
-
- if (FileFilter.ignoreResults(file)) {
- System.out.println("Ignored test passed: "+file);
- return;
- }
- }
-
- public void nontextCase(String file, boolean has_expected_results) {
- Log.v("Layout test:", file + " nontext");
- mResultRecorder.nontext(file, has_expected_results);
- }
-
- public void setCallback(HTMLHostCallbackInterface callback) {
- mCallback = callback;
- }
-
- public void processResult(boolean timeout, String test_path) {
- Log.v(LOGTAG, " Processing result: " + test_path);
- // remove the extension
- String short_file = test_path.substring(0, test_path.lastIndexOf('.'));
- if (timeout) {
- failedCase(test_path, "TIMEDOUT");
- return;
- }
- // Only check results that we can check, ie dumpAsText results
- String dumpFile = short_file + "-results.txt";
- File f = new File(dumpFile);
- if (f.exists()) {
- try {
- FileInputStream fr = new FileInputStream(short_file+"-results.txt");
- FileInputStream fe = new FileInputStream(short_file+"-expected.txt");
-
- // If the length is different then they are different
- int diff = fe.available() - fr.available();
- if (diff > 1 || diff < 0) {
- failedCase(test_path, " different length");
- fr.close();
- fe.close();
- return;
- }
- byte[] br = new byte[fr.available()];
- byte[] be = new byte[fe.available()];
- fr.read(br);
- fe.read(be);
- boolean fail = false;
- for (int i = 0; i < br.length; i++) {
- if (br[i] != be[i]) {
- failedCase(test_path, " @offset: "+i);
- fr.close();
- fe.close();
- return;
- }
- }
- if (br.length != be.length && be[be.length-1] == '\n') {
- Log.d(LOGTAG, "Extra new line being ignore:" + test_path);
- }
- fr.close();
- fe.close();
- passedCase(test_path);
- } catch (FileNotFoundException ex) {
- // TODO do something here
- } catch (IOException ex) {
- // Failed on available() or read()
- }
-
- return;
- }
-
- File nontext_result = new File(short_file + "-android-results.txt");
- if (nontext_result.exists()) {
- // Check if the test has expected results.
- File expected = new File(short_file + "-expected.txt");
- nontextCase(test_path, expected.exists());
- }
- }
-
- public void finished() {
- if (mCallback != null) {
- mCallback.waitForFinish();
- }
-
- mFinishedRunning = true;
- finish();
- }
-
- // LayoutTestController Functions
- public void dumpAsText() {
- mDumpAsText = true;
- if (mWebView != null) {
- String url = mWebView.getUrl();
- Log.v(LOGTAG, "dumpAsText called: "+url);
- }
- }
-
- public void waitUntilDone() {
- mWaitUntilDone = true;
- String url = mWebView.getUrl();
- Log.v(LOGTAG, "waitUntilDone called: " + url);
- }
- public void notifyDone() {
- String url = mWebView.getUrl();
- Log.v(LOGTAG, "notifyDone called: " + url);
- if (mWaitUntilDone) {
- mWaitUntilDone = false;
- mChromeClient.onProgressChanged(mWebView, 100);
- }
- }
-
- public void display() {
- mWebView.invalidate();
- }
-
- public void clearBackForwardList() {
- mWebView.clearHistory();
-
- }
-
- public void dumpBackForwardList() {
- //printf("\n============== Back Forward List ==============\n");
- // mWebHistory
- //printf("===============================================\n");
-
- }
-
- public void dumpChildFrameScrollPositions() {
- // TODO Auto-generated method stub
-
- }
-
- public void dumpEditingCallbacks() {
- // TODO Auto-generated method stub
-
- }
-
- public void dumpSelectionRect() {
- // TODO Auto-generated method stub
-
- }
-
- public void dumpTitleChanges() {
- if (!mDumpTitleChanges) {
- mTitleChanges = new StringBuffer();
- }
- mDumpTitleChanges = true;
- }
-
- public void keepWebHistory() {
- if (!mKeepWebHistory) {
- mWebHistory = new Vector();
- }
- mKeepWebHistory = true;
- }
-
- public void queueBackNavigation(int howfar) {
- // TODO Auto-generated method stub
-
- }
-
- public void queueForwardNavigation(int howfar) {
- // TODO Auto-generated method stub
-
- }
-
- public void queueLoad(String Url, String frameTarget) {
- // TODO Auto-generated method stub
-
- }
-
- public void queueReload() {
- mWebView.reload();
- }
-
- public void queueScript(String scriptToRunInCurrentContext) {
- mWebView.loadUrl("javascript:"+scriptToRunInCurrentContext);
- }
-
- public void repaintSweepHorizontally() {
- // TODO Auto-generated method stub
-
- }
-
- public void setAcceptsEditing(boolean b) {
- // TODO Auto-generated method stub
-
- }
-
- public void setMainFrameIsFirstResponder(boolean b) {
- // TODO Auto-generated method stub
-
- }
-
- public void setWindowIsKey(boolean b) {
- // This is meant to show/hide the window. The best I can find
- // is setEnabled()
- mWebView.setEnabled(b);
- }
-
- public void testRepaint() {
- mWebView.invalidate();
- }
-
- // Instrumentation calls this to find
- // if the activity has finished running the layout tests
- // TODO(fqian): need to sync on mFinisheRunning
- public boolean hasFinishedRunning() {
- return mFinishedRunning;
- }
-
- private final WebChromeClient mChromeClient = new WebChromeClient() {
- @Override
- public void onProgressChanged(WebView view, int newProgress) {
- if (newProgress == 100) {
- if (!mSingleTestMode && !mTimedOut && !mWaitUntilDone && !mRequestedWebKitData) {
- String url = mWebView.getUrl();
- Log.v(LOGTAG, "Finished: "+ url);
- mHandler.removeMessages(MSG_TIMEOUT);
- requestWebKitData();
- } else {
- String url = mWebView.getUrl();
- if (mSingleTestMode) {
- Log.v(LOGTAG, "Single test mode: " + url);
- } else if (mTimedOut) {
- Log.v(LOGTAG, "Timed out before finishing: " + url);
- } else if (mWaitUntilDone) {
- Log.v(LOGTAG, "Waiting for notifyDone: " + url);
- } else if (mRequestedWebKitData) {
- Log.v(LOGTAG, "Requested webkit data ready: " + url);
- }
- }
- }
- }
-
- @Override
- public void onReceivedTitle(WebView view, String title) {
- if (title.length() > 30)
- title = "..."+title.substring(title.length()-30);
- setTitle(title);
- if (mDumpTitleChanges) {
- mTitleChanges.append("TITLE CHANGED: ");
- mTitleChanges.append(title);
- mTitleChanges.append("\n");
- }
- }
-
- @Override
- public boolean onJsAlert(WebView view, String url, String message,
- JsResult result) {
- if (mDialogStrings == null) {
- mDialogStrings = new StringBuffer();
- }
- mDialogStrings.append("ALERT: ");
- mDialogStrings.append(message);
- mDialogStrings.append('\n');
- result.confirm();
- return true;
- }
-
- @Override
- public boolean onJsConfirm(WebView view, String url, String message,
- JsResult result) {
- if (mDialogStrings == null) {
- mDialogStrings = new StringBuffer();
- }
- mDialogStrings.append("CONFIRM: ");
- mDialogStrings.append(message);
- mDialogStrings.append('\n');
- result.confirm();
- return true;
- }
-
- @Override
- public boolean onJsPrompt(WebView view, String url, String message,
- String defaultValue, JsPromptResult result) {
- if (mDialogStrings == null) {
- mDialogStrings = new StringBuffer();
- }
- mDialogStrings.append("PROMPT: ");
- mDialogStrings.append(message);
- mDialogStrings.append(", default text: ");
- mDialogStrings.append(defaultValue);
- mDialogStrings.append('\n');
- result.confirm();
- return true;
- }
- };
-
- private void resetTestStatus() {
- mWaitUntilDone = false;
- mDumpAsText = false;
- mTimedOut = false;
- mDumpTitleChanges = false;
- mRequestedWebKitData = false;
- mEventSender.resetMouse();
- }
-
- private TestRecorder mResultRecorder;
- private HTMLHostCallbackInterface mCallback = null;
- private CallbackProxy mCallbackProxy;
-
- private WebView mWebView;
- private WebViewEventSender mEventSender;
-
- private Vector<String> mTestList;
- private int mTestIndex;
-
- private int mTimeoutInMillis;
- private String mTestPathPrefix;
- private boolean mSingleTestMode;
-
- private AsyncHandler mHandler;
- private boolean mFinishedRunning;
-
- private boolean mTimedOut;
- private boolean mRequestedWebKitData;
- private boolean mDumpAsText;
- private boolean mWaitUntilDone;
- private boolean mDumpTitleChanges;
-
- private StringBuffer mTitleChanges;
- private StringBuffer mDialogStrings;
-
- private boolean mKeepWebHistory;
- private Vector mWebHistory;
-
- static final String TIMEOUT_STR = "**Test timeout";
-
- static final int MSG_TIMEOUT = 0;
- static final int MSG_WEBKIT_DATA = 1;
-
- static final String LOGTAG="DumpRenderTree";
-
- static final String LAYOUT_TESTS_ROOT = "/sdcard/android/layout_tests/";
- static final String LAYOUT_TESTS_LIST_FILE = "/sdcard/layout_tests_list.txt";
- static final String TEST_STATUS_FILE = "/sdcard/running_test.txt";
-
- static final String RESUME_FROM_CRASH = "ResumeFromCrash";
- static final String TEST_PATH_PREFIX = "TestPathPrefix";
- static final String TIMEOUT_IN_MILLIS = "TimeoutInMillis";
- static final String SINGLE_TEST_MODE = "SingleTestMode";
-}