1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.smoketest; 18 19 import android.app.ActivityManager; 20 import android.app.ActivityManager.ProcessErrorStateInfo; 21 import android.content.pm.PackageManager; 22 import android.content.pm.ResolveInfo; 23 import android.test.InstrumentationTestRunner; 24 25 import junit.framework.TestCase; 26 import junit.framework.TestSuite; 27 28 import java.util.Collection; 29 import java.util.HashSet; 30 import java.util.List; 31 import java.util.Set; 32 33 /** 34 * A special test runner which does a test-start for each app in a separate testcase 35 */ 36 public class SmokeTestRunner extends InstrumentationTestRunner { 37 38 private static final String SUITE_NAME = "Smoke Test Suite"; 39 40 /** 41 * Returns a single testcase for each app to launch 42 */ 43 @Override 44 public TestSuite getAllTests() { 45 final TestSuite suite = new TestSuite(SUITE_NAME); 46 47 final PackageManager pm = getTargetContext().getPackageManager(); 48 final List<ResolveInfo> apps = ProcessErrorsTest.getLauncherActivities(pm); 49 50 final TestCase setupTest = new ProcessErrorsTest() { 51 @Override 52 public void runTest() throws Exception { 53 testSetUpConditions(); 54 } 55 }; 56 setupTest.setName("testSetUpConditions"); 57 suite.addTest(setupTest); 58 59 final TestCase postBootTest = new ProcessErrorsTest() { 60 @Override 61 public void runTest() throws Exception { 62 testNoProcessErrorsAfterBoot(); 63 } 64 }; 65 postBootTest.setName("testNoProcessErrorsAfterBoot"); 66 suite.addTest(postBootTest); 67 68 for (final ResolveInfo app : apps) { 69 final TestCase appTest = new ProcessErrorsTest() { 70 @Override 71 public void runTest() throws Exception { 72 final Set<ProcessError> errSet = new HashSet<ProcessError>(); 73 final Collection<ProcessError> errProcs = runOneActivity(app); 74 if (errProcs != null) { 75 errSet.addAll(errProcs); 76 } 77 78 if (!errSet.isEmpty()) { 79 fail(String.format("Got %d errors:\n%s", errSet.size(), 80 reportWrappedListContents(errSet))); 81 } 82 } 83 }; 84 appTest.setName(app.activityInfo.name); 85 suite.addTest(appTest); 86 } 87 88 final TestCase asyncErrorTest = new ProcessErrorsTest() { 89 @Override 90 public void runTest() throws Exception { 91 testZZReportAsyncErrors(); 92 } 93 }; 94 asyncErrorTest.setName("testAsynchronousErrors"); 95 suite.addTest(asyncErrorTest); 96 97 return suite; 98 } 99 } 100 101