153196f43b44ff02da07c243798168d7e5614ec34Brett Chabot/*
253196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * Copyright (C) 2012 The Android Open Source Project
353196f43b44ff02da07c243798168d7e5614ec34Brett Chabot *
453196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * Licensed under the Apache License, Version 2.0 (the "License");
553196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * you may not use this file except in compliance with the License.
653196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * You may obtain a copy of the License at
753196f43b44ff02da07c243798168d7e5614ec34Brett Chabot *
853196f43b44ff02da07c243798168d7e5614ec34Brett Chabot *      http://www.apache.org/licenses/LICENSE-2.0
953196f43b44ff02da07c243798168d7e5614ec34Brett Chabot *
1053196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * Unless required by applicable law or agreed to in writing, software
1153196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * distributed under the License is distributed on an "AS IS" BASIS,
1253196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1353196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * See the License for the specific language governing permissions and
1453196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * limitations under the License.
1553196f43b44ff02da07c243798168d7e5614ec34Brett Chabot */
1653196f43b44ff02da07c243798168d7e5614ec34Brett Chabotpackage com.android.test.runner;
1753196f43b44ff02da07c243798168d7e5614ec34Brett Chabot
1853196f43b44ff02da07c243798168d7e5614ec34Brett Chabotimport android.app.Instrumentation;
1953196f43b44ff02da07c243798168d7e5614ec34Brett Chabot
203604db5bcd124dfd1396fb51434d3f4337690cffBrett Chabotimport com.android.test.runner.junit3.AndroidJUnit3Builder;
213604db5bcd124dfd1396fb51434d3f4337690cffBrett Chabotimport com.android.test.runner.junit4.AndroidJUnit4Builder;
223604db5bcd124dfd1396fb51434d3f4337690cffBrett Chabot
2353196f43b44ff02da07c243798168d7e5614ec34Brett Chabotimport org.junit.internal.builders.AllDefaultPossibilitiesBuilder;
2453196f43b44ff02da07c243798168d7e5614ec34Brett Chabotimport org.junit.runner.Runner;
2553196f43b44ff02da07c243798168d7e5614ec34Brett Chabotimport org.junit.runners.model.RunnerBuilder;
2653196f43b44ff02da07c243798168d7e5614ec34Brett Chabot
2753196f43b44ff02da07c243798168d7e5614ec34Brett Chabot/**
2853196f43b44ff02da07c243798168d7e5614ec34Brett Chabot * A {@link RunnerBuilder} that can handle all types of tests.
2953196f43b44ff02da07c243798168d7e5614ec34Brett Chabot */
3053196f43b44ff02da07c243798168d7e5614ec34Brett Chabotclass AndroidRunnerBuilder extends AllDefaultPossibilitiesBuilder {
3153196f43b44ff02da07c243798168d7e5614ec34Brett Chabot
3253196f43b44ff02da07c243798168d7e5614ec34Brett Chabot    private final Instrumentation mInstr;
3353196f43b44ff02da07c243798168d7e5614ec34Brett Chabot    private final AndroidJUnit3Builder mAndroidJUnit3Builder;
3453196f43b44ff02da07c243798168d7e5614ec34Brett Chabot    private final AndroidJUnit4Builder mAndroidJUnit4Builder;
3553196f43b44ff02da07c243798168d7e5614ec34Brett Chabot
363604db5bcd124dfd1396fb51434d3f4337690cffBrett Chabot    public AndroidRunnerBuilder(boolean canUseSuiteMethod, Instrumentation instr,
373604db5bcd124dfd1396fb51434d3f4337690cffBrett Chabot            boolean skipExecution) {
3853196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        super(canUseSuiteMethod);
3953196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        mInstr = instr;
403604db5bcd124dfd1396fb51434d3f4337690cffBrett Chabot        mAndroidJUnit3Builder = new AndroidJUnit3Builder(mInstr, skipExecution);
413604db5bcd124dfd1396fb51434d3f4337690cffBrett Chabot        mAndroidJUnit4Builder = new AndroidJUnit4Builder(mInstr, skipExecution);
4253196f43b44ff02da07c243798168d7e5614ec34Brett Chabot    }
4353196f43b44ff02da07c243798168d7e5614ec34Brett Chabot
4453196f43b44ff02da07c243798168d7e5614ec34Brett Chabot    @Override
4553196f43b44ff02da07c243798168d7e5614ec34Brett Chabot    public Runner runnerForClass(Class<?> testClass) throws Throwable {
4653196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        Runner runner = mAndroidJUnit3Builder.safeRunnerForClass(testClass);
4753196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        if (runner != null) {
4853196f43b44ff02da07c243798168d7e5614ec34Brett Chabot            return runner;
4953196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        }
5053196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        runner = mAndroidJUnit4Builder.safeRunnerForClass(testClass);
5153196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        if (runner != null) {
5253196f43b44ff02da07c243798168d7e5614ec34Brett Chabot            return runner;
5353196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        }
5453196f43b44ff02da07c243798168d7e5614ec34Brett Chabot        return super.runnerForClass(testClass);
5553196f43b44ff02da07c243798168d7e5614ec34Brett Chabot    }
5653196f43b44ff02da07c243798168d7e5614ec34Brett Chabot
5753196f43b44ff02da07c243798168d7e5614ec34Brett Chabot}
58