118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu/* 218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * Copyright (C) 2013 The Android Open Source Project 318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * 418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * Licensed under the Apache License, Version 2.0 (the "License"); 518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * you may not use this file except in compliance with the License. 618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * You may obtain a copy of the License at 718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * 818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * http://www.apache.org/licenses/LICENSE-2.0 918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * 1018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * Unless required by applicable law or agreed to in writing, software 1118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * distributed under the License is distributed on an "AS IS" BASIS, 1218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * See the License for the specific language governing permissions and 1418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * limitations under the License. 1518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu */ 1618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 1718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhupackage com.android.uiautomator.testrunner; 1818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 1918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.test.AndroidTestRunner; 2018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.test.InstrumentationTestRunner; 2118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 2218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport com.android.uiautomator.core.Tracer; 2318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 2418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport junit.framework.AssertionFailedError; 2518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport junit.framework.Test; 2618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport junit.framework.TestListener; 2718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 2818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu/** 2918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * Test runner for {@link UiAutomatorTestCase}s. Such tests are executed 3018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * on the device and have access to an applications context. 3118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu */ 3218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhupublic class UiAutomatorInstrumentationTestRunner extends InstrumentationTestRunner { 3318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 3418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 3518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public void onStart() { 3618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu // process runner arguments before test starts 3718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu String traceType = getArguments().getString("traceOutputMode"); 3818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if(traceType != null) { 3918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Tracer.Mode mode = Tracer.Mode.valueOf(Tracer.Mode.class, traceType); 4018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if (mode == Tracer.Mode.FILE || mode == Tracer.Mode.ALL) { 4118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu String filename = getArguments().getString("traceLogFilename"); 4218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if (filename == null) { 4318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu throw new RuntimeException("Name of log file not specified. " + 4418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu "Please specify it using traceLogFilename parameter"); 4518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 4618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Tracer.getInstance().setOutputFilename(filename); 4718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 4818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Tracer.getInstance().setOutputMode(mode); 4918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 5018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu super.onStart(); 5118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 5218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 5318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 5418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu protected AndroidTestRunner getAndroidTestRunner() { 5518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu AndroidTestRunner testRunner = super.getAndroidTestRunner(); 5618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu testRunner.addTestListener(new TestListener() { 5718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 5818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public void startTest(Test test) { 5918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if (test instanceof UiAutomatorTestCase) { 6018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu ((UiAutomatorTestCase)test).initialize(getArguments()); 6118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 6218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 6318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 6418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 6518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public void endTest(Test test) { 6618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 6718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 6818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 6918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public void addFailure(Test test, AssertionFailedError e) { 7018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 7118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 7218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 7318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public void addError(Test test, Throwable t) { 7418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 7518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu }); 7618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu return testRunner; 7718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 7818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu} 79