LayoutTestsAutoTest.java revision 8cd303aec6f11ea9fece70f6e3d82efb607f8637
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.dumprendertree; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19f3d924ca0d3e8225824eb50540962e1890fea6f2Guang Zhuimport com.android.dumprendertree.TestShellActivity.DumpDataType; 20f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhuimport com.android.dumprendertree.forwarder.AdbUtils; 21f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhuimport com.android.dumprendertree.forwarder.ForwardServer; 226bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhuimport com.android.dumprendertree.forwarder.ForwardService; 23f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Instrumentation; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 27ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2; 28b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhuimport android.util.Log; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.BufferedOutputStream; 31ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport java.io.BufferedReader; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 33ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport java.io.FileNotFoundException; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileOutputStream; 35ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport java.io.FileReader; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 3736fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddyimport java.io.InputStream; 3836fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddyimport java.io.OutputStream; 39ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport java.util.Vector; 40ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 41ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project//TestRecorder creates two files, one for passing tests 42ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project//and another for failing tests and writes the paths to 43ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project//layout tests one line at a time. TestRecorder does not 44ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project//have ability to clear the results. 45ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectclass MyTestRecorder { 46ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private BufferedOutputStream mBufferedOutputPassedStream; 47ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private BufferedOutputStream mBufferedOutputFailedStream; 48ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private BufferedOutputStream mBufferedOutputNoresultStream; 494010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu private BufferedOutputStream mBufferedOutputTimedoutStream; 50f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 51ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void passed(String layout_file) { 52ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 53ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputPassedStream.write(layout_file.getBytes()); 54ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputPassedStream.write('\n'); 55ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputPassedStream.flush(); 56ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch(Exception e) { 57ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project e.printStackTrace(); 58ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 59ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 60f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 61ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void failed(String layout_file) { 62ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 63ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputFailedStream.write(layout_file.getBytes()); 64ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputFailedStream.write('\n'); 65ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputFailedStream.flush(); 66ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch(Exception e) { 67ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project e.printStackTrace(); 68ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 69ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 70f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 71ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void noresult(String layout_file) { 72ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 73ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputNoresultStream.write(layout_file.getBytes()); 74ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputNoresultStream.write('\n'); 75ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputNoresultStream.flush(); 76ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch(Exception e) { 77ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project e.printStackTrace(); 78ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 79ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 80f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 814010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu public void timedout(String url) { 824010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu try { 834010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu mBufferedOutputTimedoutStream.write(url.getBytes()); 844010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu mBufferedOutputTimedoutStream.write('\n'); 854010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu mBufferedOutputTimedoutStream.flush(); 864010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu } catch (Exception e) { 874010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu e.printStackTrace(); 884010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu } 894010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu } 90f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 91ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public MyTestRecorder(boolean resume) { 92ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 93ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File resultsPassedFile = new File("/sdcard/layout_tests_passed.txt"); 94ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File resultsFailedFile = new File("/sdcard/layout_tests_failed.txt"); 95ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File noExpectedResultFile = new File("/sdcard/layout_tests_nontext.txt"); 964010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu File resultTimedoutFile = new File("/sdcard/layout_tests_timedout.txt"); 97f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 98ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputPassedStream = 99ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project new BufferedOutputStream(new FileOutputStream(resultsPassedFile, resume)); 100ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputFailedStream = 101ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project new BufferedOutputStream(new FileOutputStream(resultsFailedFile, resume)); 102ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputNoresultStream = 103ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project new BufferedOutputStream(new FileOutputStream(noExpectedResultFile, resume)); 1044010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu mBufferedOutputTimedoutStream = 1054010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu new BufferedOutputStream(new FileOutputStream(resultTimedoutFile, resume)); 106ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch (Exception e) { 107ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project e.printStackTrace(); 108ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 109ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 110f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 111ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void close() { 112ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 113ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputPassedStream.close(); 114ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputFailedStream.close(); 115ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBufferedOutputNoresultStream.close(); 1164010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu mBufferedOutputTimedoutStream.close(); 117ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch (Exception e) { 118ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project e.printStackTrace(); 119ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 120ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 121ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project} 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 124ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectpublic class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestShellActivity> { 125ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 126ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private static final String LOGTAG = "LayoutTests"; 127ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project static final int DEFAULT_TIMEOUT_IN_MILLIS = 5000; 128f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 129ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project static final String LAYOUT_TESTS_ROOT = "/sdcard/android/layout_tests/"; 130ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project static final String LAYOUT_TESTS_RESULT_DIR = "/sdcard/android/layout_tests_results/"; 131ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project static final String ANDROID_EXPECTED_RESULT_DIR = "/sdcard/android/expected_results/"; 132ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project static final String LAYOUT_TESTS_LIST_FILE = "/sdcard/android/layout_tests_list.txt"; 133ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project static final String TEST_STATUS_FILE = "/sdcard/android/running_test.txt"; 13436fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy static final String LAYOUT_TESTS_RESULTS_REFERENCE_FILES[] = { 13536fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy "results/layout_tests_passed.txt", 13636fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy "results/layout_tests_failed.txt", 13736fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy "results/layout_tests_nontext.txt", 13836fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy "results/layout_tests_crashed.txt", 13936fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy "run_layout_tests.py" 14036fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy }; 14136fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy 14236fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy static final String LAYOUT_RESULTS_FAILED_RESULT_FILE = "results/layout_tests_failed.txt"; 14336fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy static final String LAYOUT_RESULTS_NONTEXT_RESULT_FILE = "results/layout_tests_nontext.txt"; 14436fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy static final String LAYOUT_RESULTS_CRASHED_RESULT_FILE = "results/layout_tests_crashed.txt"; 14536fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy static final String LAYOUT_TESTS_RUNNER = "run_layout_tests.py"; 146ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 147ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private MyTestRecorder mResultRecorder; 148ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private Vector<String> mTestList; 149ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private boolean mRebaselineResults; 150ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private String mTestPathPrefix; 151b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu private boolean mFinished; 152f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutTestsAutoTest() { 154ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project super("com.android.dumprendertree", TestShellActivity.class); 155b937ba138fd75116cb773405e34c1312353b6b57Guang Zhu } 156b937ba138fd75116cb773405e34c1312353b6b57Guang Zhu 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This function writes the result of the layout test to 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Am status so that it can be picked up from a script. 159ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void passOrFailCallback(String file, boolean result) { 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation inst = getInstrumentation(); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle bundle = new Bundle(); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.putBoolean(file, result); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inst.sendStatus(0, bundle); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 165f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 166ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void getTestList() { 167ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Read test list. 168ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 169ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project BufferedReader inReader = new BufferedReader(new FileReader(LAYOUT_TESTS_LIST_FILE)); 170ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String line = inReader.readLine(); 171ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project while (line != null) { 172ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (line.startsWith(mTestPathPrefix)) 173ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mTestList.add(line); 174ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project line = inReader.readLine(); 175ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 176ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project inReader.close(); 177ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.v(LOGTAG, "Test list has " + mTestList.size() + " test(s)."); 178ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch (Exception e) { 179ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOGTAG, "Error while reading test list : " + e.getMessage()); 180ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 181ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 182f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 183ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void resumeTestList() { 184ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // read out the test name it stoped last time. 185ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 186f92bd42a702af7047ac4bd7c95b4a82973b7a79dGuang Zhu String line = FsUtils.readTestStatus(TEST_STATUS_FILE); 187ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project for (int i = 0; i < mTestList.size(); i++) { 188ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (mTestList.elementAt(i).equals(line)) { 189ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mTestList = new Vector<String>(mTestList.subList(i+1, mTestList.size())); 190ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project break; 191ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 192ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 193ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch (Exception e) { 194ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOGTAG, "Error reading " + TEST_STATUS_FILE); 195ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 196ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 197f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 198ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void clearTestStatus() { 199ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Delete TEST_STATUS_FILE 200ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 201ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File f = new File(TEST_STATUS_FILE); 202ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (f.delete()) 203ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.v(LOGTAG, "Deleted " + TEST_STATUS_FILE); 204ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project else 205ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOGTAG, "Fail to delete " + TEST_STATUS_FILE); 206ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch (Exception e) { 207ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOGTAG, "Fail to delete " + TEST_STATUS_FILE + " : " + e.getMessage()); 208ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 209ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 210f92bd42a702af7047ac4bd7c95b4a82973b7a79dGuang Zhu 211ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private String getResultFile(String test) { 212ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String shortName = test.substring(0, test.lastIndexOf('.')); 213ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Write actual results to result directory. 214ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return shortName.replaceFirst(LAYOUT_TESTS_ROOT, LAYOUT_TESTS_RESULT_DIR) + "-result.txt"; 215ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 216f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 217ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private String getExpectedResultFile(String test) { 2182a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu int pos = test.lastIndexOf('.'); 2192a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu if(pos == -1) 2202a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu return null; 2212a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu String shortName = test.substring(0, pos); 222f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu return shortName + "-expected.txt"; 223ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 224ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 225ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private String getAndroidExpectedResultFile(String expectedResultFile) { 226ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return expectedResultFile.replaceFirst(LAYOUT_TESTS_ROOT, ANDROID_EXPECTED_RESULT_DIR); 227ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 228ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 229ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Wrap up 230ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void failedCase(String file) { 231ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.w("Layout test: ", file + " failed"); 232f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu mResultRecorder.failed(file); 233ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 235ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void passedCase(String file) { 236ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.v("Layout test:", file + " passed"); 237ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mResultRecorder.passed(file); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 240ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void noresultCase(String file) { 241ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.v("Layout test:", file + " no expected result"); 242ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mResultRecorder.noresult(file); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 244f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 245ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void processResult(String testFile, String actualResultFile, String expectedResultFile) { 246ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.v(LOGTAG, " Processing result: " + testFile); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 248ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File actual = new File(actualResultFile); 249ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File expected = new File(expectedResultFile); 250ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (actual.exists() && expected.exists()) { 251ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project try { 252ea48cd6dd4e64bcb5c840a12fe052f704510e01cGuang Zhu if (FsUtils.diffIgnoreSpaces(actualResultFile, expectedResultFile)) { 253ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project passedCase(testFile); 254ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } else { 255ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project failedCase(testFile); 256ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 257ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch (FileNotFoundException ex) { 258ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOGTAG, "File not found : " + ex.getMessage()); 259ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } catch (IOException ex) { 260ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOGTAG, "IO Error : " + ex.getMessage()); 261ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 262ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return; 263ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 264ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 265ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (!expected.exists()) { 266ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project noresultCase(testFile); 267ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 268ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 269f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 270ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void runTestAndWaitUntilDone(TestShellActivity activity, String test, int timeout) { 271ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project activity.setCallback(new TestShellCallback() { 272ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void finished() { 273ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project synchronized (LayoutTestsAutoTest.this) { 274b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu mFinished = true; 275ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project LayoutTestsAutoTest.this.notifyAll(); 276ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 2774010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu } 278f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 2794010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu public void timedOut(String url) { 2804a40a039c020d339df14896448defa59efcc910dGuang Zhu Log.v(LOGTAG, "layout timeout: " + url); 2814010ac35b1e49d659d7a32cc191302b8e2d8758aGuang Zhu } 282ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project }); 283ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 284ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String resultFile = getResultFile(test); 2852a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu if(resultFile == null) { 2862a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu //simply ignore this test 2872a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu return; 2882a197b128a2317eec6efaa0a21e529cdf534c6f2Guang Zhu } 289ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (mRebaselineResults) { 290ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String expectedResultFile = getExpectedResultFile(test); 291ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File f = new File(expectedResultFile); 292ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (f.exists()) { 293ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return; // don't run test and don't overwrite default tests. 294ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 295ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 296ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project resultFile = getAndroidExpectedResultFile(expectedResultFile); 297ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 298f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 299b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu mFinished = false; 300ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Intent intent = new Intent(Intent.ACTION_VIEW); 301ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project intent.setClass(activity, TestShellActivity.class); 302ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 3036bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu intent.putExtra(TestShellActivity.TEST_URL, FsUtils.getTestUrl(test)); 304ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project intent.putExtra(TestShellActivity.RESULT_FILE, resultFile); 305ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project intent.putExtra(TestShellActivity.TIMEOUT_IN_MILLIS, timeout); 306ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project activity.startActivity(intent); 307f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 308ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Wait until done. 309ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project synchronized (this) { 310b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu while(!mFinished){ 311b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu try { 312b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu this.wait(); 313b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu } catch (InterruptedException e) { } 314b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu } 315ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 316f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 317ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (!mRebaselineResults) { 318ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String expectedResultFile = getExpectedResultFile(test); 319ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File f = new File(expectedResultFile); 320ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (!f.exists()) { 321ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project expectedResultFile = getAndroidExpectedResultFile(expectedResultFile); 322ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 323f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 324ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project processResult(test, resultFile, expectedResultFile); 325ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 326f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu } 327f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Invokes running of layout tests 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // and waits till it has finished running. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void executeLayoutTests(boolean resume) { 331ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner) getInstrumentation(); 332ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // A convenient method to be called by another activity. 333ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 334ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (runner.mTestPath == null) { 335ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOGTAG, "No test specified"); 336ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return; 337ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 338ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 339ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project this.mTestList = new Vector<String>(); 340f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 341ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Read settings 3428cd303aec6f11ea9fece70f6e3d82efb607f8637Guang Zhu this.mTestPathPrefix = (new File(LAYOUT_TESTS_ROOT + runner.mTestPath)).getAbsolutePath(); 343ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project this.mRebaselineResults = runner.mRebaseline; 344f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 345ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project int timeout = runner.mTimeoutInMillis; 346ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (timeout <= 0) { 347ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project timeout = DEFAULT_TIMEOUT_IN_MILLIS; 348ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 349f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 350ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project this.mResultRecorder = new MyTestRecorder(resume); 351f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 352ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (!resume) 353ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project clearTestStatus(); 354f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 355ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project getTestList(); 356ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (resume) 357ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project resumeTestList(); 358ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 359f3d924ca0d3e8225824eb50540962e1890fea6f2Guang Zhu TestShellActivity activity = getActivity(); 360f3d924ca0d3e8225824eb50540962e1890fea6f2Guang Zhu activity.setDefaultDumpDataType(DumpDataType.DUMP_AS_TEXT); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 362ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Run tests. 363f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu int addr = -1; 364f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu try{ 365f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu addr = AdbUtils.resolve("android-browser-test.mtv.corp.google.com"); 366f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu } catch (IOException ioe) { 367f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu Log.w(LOGTAG, "error while resolving test host name", ioe); 368f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu } 369f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu if(addr == -1) { 370f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu Log.w(LOGTAG, "failed to resolve test host. http tests will fail."); 371f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu } 372ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project for (int i = 0; i < mTestList.size(); i++) { 373ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String s = mTestList.elementAt(i); 374f92bd42a702af7047ac4bd7c95b4a82973b7a79dGuang Zhu FsUtils.updateTestStatus(TEST_STATUS_FILE, s); 375ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project // Run tests 376ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project runTestAndWaitUntilDone(activity, s, runner.mTimeoutInMillis); 377ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379f92bd42a702af7047ac4bd7c95b4a82973b7a79dGuang Zhu FsUtils.updateTestStatus(TEST_STATUS_FILE, "#DONE"); 3806bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu ForwardService.getForwardService().stopForwardService(); 381ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project activity.finish(); 382ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 384ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private String getTestPath() { 385ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner) getInstrumentation(); 386ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 387ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String test_path = LAYOUT_TESTS_ROOT; 388ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (runner.mTestPath != null) { 389ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project test_path += runner.mTestPath; 390ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 3918cd303aec6f11ea9fece70f6e3d82efb607f8637Guang Zhu test_path = new File(test_path).getAbsolutePath(); 392ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.v("LayoutTestsAutoTest", " Test path : " + test_path); 393f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 394ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return test_path; 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 396f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void generateTestList() { 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 399ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File tests_list = new File(LAYOUT_TESTS_LIST_FILE); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tests_list, false)); 401f92bd42a702af7047ac4bd7c95b4a82973b7a79dGuang Zhu FsUtils.findLayoutTestsRecursively(bos, getTestPath()); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bos.flush(); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bos.close(); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOGTAG, "Error when creating test list: " + e.getMessage()); 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Running all the layout tests at once sometimes 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // causes the dumprendertree to run out of memory. 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // So, additional tests are added to run the tests 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // in chunks. 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startLayoutTests() { 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 415ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project File tests_list = new File(LAYOUT_TESTS_LIST_FILE); 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!tests_list.exists()) 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project generateTestList(); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project e.printStackTrace(); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 421f4bf552b5a5046e7648f405115ee48917b15b9aaGuang Zhu 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project executeLayoutTests(false); 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void resumeLayoutTests() { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project executeLayoutTests(true); 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42836fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy 42936fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy public void copyResultsAndRunnerAssetsToCache() { 43036fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy try { 43136fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy String out_dir = getActivity().getApplicationContext().getCacheDir().getPath() + "/"; 43236fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy 43336fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy for( int i=0; i< LAYOUT_TESTS_RESULTS_REFERENCE_FILES.length; i++) { 43436fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy InputStream in = getActivity().getAssets().open(LAYOUT_TESTS_RESULTS_REFERENCE_FILES[i]); 43536fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy OutputStream out = new FileOutputStream(out_dir + LAYOUT_TESTS_RESULTS_REFERENCE_FILES[i]); 43636fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy 43736fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy byte[] buf = new byte[2048]; 43836fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy int len; 43936fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy 440b933f669e26afad8a2466edcae8c1ffda6c15721Guang Zhu while ((len = in.read(buf)) >= 0 ) { 44136fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy out.write(buf, 0, len); 44236fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy } 44336fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy out.close(); 44436fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy in.close(); 44536fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy } 44636fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy }catch (IOException e) { 44736fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy e.printStackTrace(); 44836fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy } 44936fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy 45036fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy } 45136fd6d243ee5414618e8bc2cbdc6c0a6f311157fSridhar Gurivireddy 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 453