diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
commit | 9066cfe9886ac131c34d59ed0e2d287b0e3c0087 (patch) | |
tree | d88beb88001f2482911e3d28e43833b50e4b4e97 /tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java | |
parent | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (diff) | |
download | frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.zip frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.gz frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java')
-rw-r--r-- | tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java new file mode 100644 index 0000000..3e65f03 --- /dev/null +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2008 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 android.app.Activity; +import android.app.Instrumentation; +import android.app.Instrumentation.ActivityMonitor; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Intent; + +import android.util.Log; +import android.view.KeyEvent; + +import android.os.Bundle; +import android.os.Message; +import android.test.ActivityInstrumentationTestCase; +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.LargeTest; + +import com.android.dumprendertree.HTMLHostActivity; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase<Menu> { + + private final static String LOGTAG = "LayoutTests"; + private final static int DEFAULT_TIMEOUT_IN_MILLIS = 6000; + private static String layoutTestDir = null; + private static int mTimeoutInMillis = 0; + + public LayoutTestsAutoTest() { + super("com.android.dumprendertree", Menu.class); + } + + // This function writes the result of the layout test to + // Am status so that it can be picked up from a script. + public void passOrFailCallback(String file, boolean result) { + Instrumentation inst = getInstrumentation(); + Bundle bundle = new Bundle(); + bundle.putBoolean(file, result); + inst.sendStatus(0, bundle); + } + + public static void setTimeoutInMillis(int millis) { + mTimeoutInMillis = (millis > 0) ? millis : DEFAULT_TIMEOUT_IN_MILLIS; + } + + public static void setLayoutTestDir(String name) { + if (name == null) + throw new AssertionError("Layout test directory cannot be null."); + layoutTestDir = HTMLHostActivity.LAYOUT_TESTS_ROOT + name; + Log.v("LayoutTestsAutoTest", " Only running the layout tests : " + layoutTestDir); + } + + // Invokes running of layout tests + // and waits till it has finished running. + public void executeLayoutTests(boolean resume) { + Instrumentation inst = getInstrumentation(); + + { + Activity activity = getActivity(); + Intent intent = new Intent(); + intent.setClass(activity, HTMLHostActivity.class); + intent.putExtra(HTMLHostActivity.RESUME_FROM_CRASH, resume); + intent.putExtra(HTMLHostActivity.SINGLE_TEST_MODE, false); + intent.putExtra(HTMLHostActivity.TEST_PATH_PREFIX, layoutTestDir); + intent.putExtra(HTMLHostActivity.TIMEOUT_IN_MILLIS, mTimeoutInMillis); + activity.startActivity(intent); + } + + ActivityMonitor htmlHostActivityMonitor = + inst.addMonitor("com.android.dumprendertree.HTMLHostActivity", null, false); + + HTMLHostActivity activity = + (HTMLHostActivity) htmlHostActivityMonitor.waitForActivity(); + + while (!activity.hasFinishedRunning()) { + // Poll every 5 seconds to determine if the layout + // tests have finished running + try {Thread.sleep(5000); } catch(Exception e){} + } + + // Wait few more seconds so that results are + // flushed to the /sdcard + try {Thread.sleep(5000); } catch(Exception e){} + + // Clean up the HTMLHostActivity activity + activity.finish(); + } + + public void generateTestList() { + try { + File tests_list = new File(HTMLHostActivity.LAYOUT_TESTS_LIST_FILE); + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tests_list, false)); + findTestsRecursively(bos, layoutTestDir); + bos.flush(); + bos.close(); + } catch (Exception e) { + Log.e(LOGTAG, "Error when creating test list: " + e.getMessage()); + } + } + + private void findTestsRecursively(BufferedOutputStream bos, String dir) throws IOException { + Log.v(LOGTAG, "Searching tests under " + dir); + + File d = new File(dir); + if (!d.isDirectory()) { + throw new AssertionError("A directory expected, but got " + dir); + } + + String[] files = d.list(); + for (int i = 0; i < files.length; i++) { + String s = dir + "/" + files[i]; + if (FileFilter.ignoreTest(s)) { + Log.v(LOGTAG, " Ignoring: " + s); + continue; + } + if (s.toLowerCase().endsWith(".html") + || s.toLowerCase().endsWith(".xml")) { + bos.write(s.getBytes()); + bos.write('\n'); + continue; + } + + File f = new File(s); + if (f.isDirectory()) { + findTestsRecursively(bos, s); + continue; + } + + Log.v(LOGTAG, "Skipping " + s); + } + } + + // Running all the layout tests at once sometimes + // causes the dumprendertree to run out of memory. + // So, additional tests are added to run the tests + // in chunks. + public void startLayoutTests() { + try { + File tests_list = new File(HTMLHostActivity.LAYOUT_TESTS_LIST_FILE); + if (!tests_list.exists()) + generateTestList(); + } catch (Exception e) { + e.printStackTrace(); + } + + executeLayoutTests(false); + } + + public void resumeLayoutTests() { + executeLayoutTests(true); + } +} |