blob: 47afd299ebb7d0dcbba94aabaae6be37303c5161 [file] [log] [blame]
/*
* Copyright (C) 2010 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 vogar.target;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import junit.framework.TestCase;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import vogar.Result;
import vogar.monitor.TargetMonitor;
import vogar.target.junit.JUnitRunner;
import vogar.target.junit.JUnitRunnerFactory;
import vogar.target.junit.VogarTest;
import vogar.target.junit3.FailTest;
import vogar.target.junit3.LongTest;
import vogar.target.junit3.LongTest2;
import vogar.target.junit3.SimpleTest;
import vogar.target.junit3.SimpleTest2;
import vogar.target.junit3.SuiteTest;
/**
* Test of {@link JUnitRunner}
*/
public class JUnitRunnerTest extends TestCase {
private static final String[] EMPTY_ARGS = {};
private TargetMonitor monitor;
private TestEnvironment testEnvironment = new TestEnvironment();
private final AtomicReference<String> skipPastReference = new AtomicReference<>();
public void setUp() {
monitor = mock(TargetMonitor.class);
}
public void test_run_for_SimpleTest_should_perform_test() {
Class<?> target = SimpleTest.class;
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, null, EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple");
verify(monitor).outcomeFinished(Result.SUCCESS);
}
public void test_run_for_SuiteTest_should_perform_tests() {
Class<?> target = SuiteTest.class;
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, null, EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
"vogar.target.junit3.SimpleTest#testSimple");
verify(monitor).outcomeStarted(JUnitRunner.class,
"vogar.target.junit3.SimpleTest2#testSimple1");
verify(monitor).outcomeStarted(JUnitRunner.class,
"vogar.target.junit3.SimpleTest2#testSimple2");
verify(monitor).outcomeStarted(JUnitRunner.class,
"vogar.target.junit3.SimpleTest2#testSimple3");
verify(monitor, times(4)).outcomeFinished(Result.SUCCESS);
}
public void test_run_for_SimpleTest2_with_ActionName_should_perform_test() {
Class<?> target = SimpleTest2.class;
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, null, EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple1");
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple2");
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple3");
verify(monitor, times(3)).outcomeFinished(Result.SUCCESS);
}
public void test_run_for_SimpleTest2_limiting_to_1method_should_perform_test() {
Class<?> target = SimpleTest2.class;
List<VogarTest> tests =
JUnitRunnerFactory.createVogarTests(target, null, new String[] { "testSimple2" });
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple2");
verify(monitor).outcomeFinished(Result.SUCCESS);
}
public void test_run_for_SimpleTest2_limiting_to_2methods_should_perform_test() {
Class<?> target = SimpleTest2.class;
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, null,
new String[] { "testSimple2", "testSimple3" });
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple2");
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple3");
verify(monitor, times(2)).outcomeFinished(Result.SUCCESS);
}
public void test_limiting_to_1method_and_run_for_SimpleTest2_should_perform_test() {
Class<?> target = SimpleTest2.class;
List<VogarTest> tests =
JUnitRunnerFactory.createVogarTests(target, "testSimple2", EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple2");
verify(monitor).outcomeFinished(Result.SUCCESS);
}
public void test_limiting_to_wrong_1method_and_run_for_SimpleTest2_should_fail_test() {
Class<?> target = SimpleTest2.class;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
System.setOut(new PrintStream(baos));
List<VogarTest> tests =
JUnitRunnerFactory.createVogarTests(target, "testSimple5", EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple5");
verify(monitor).outcomeFinished(Result.EXEC_FAILED);
String outStr = baos.toString();
assertTrue(outStr
.contains("junit.framework.AssertionFailedError: Method " + '"'
+ "testSimple5" + '"' + " not found"));
}
public void test_run_for_SimpleTest2_limiting_to_1method_with_both_run_should_perform_test() {
Class<?> target = SimpleTest2.class;
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, "testSimple3",
new String[]{"testSimple2"});
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple2");
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSimple3");
verify(monitor, times(2)).outcomeFinished(Result.SUCCESS);
}
public void test_run_for_FailTest_should_perform_test() {
Class<?> target = FailTest.class;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
System.setOut(new PrintStream(baos));
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, null, EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testSuccess");
verify(monitor).outcomeStarted(JUnitRunner.class, target.getName() + "#testFail");
verify(monitor).outcomeStarted(JUnitRunner.class,
target.getName() + "#testThrowException");
verify(monitor).outcomeFinished(Result.SUCCESS);
verify(monitor, times(2)).outcomeFinished(Result.EXEC_FAILED);
String outStr = baos.toString();
assertTrue(outStr
.contains("junit.framework.AssertionFailedError: failed."));
assertTrue(outStr.contains("java.lang.RuntimeException: exception"));
}
public void test_run_for_LongTest_with_time_limit_should_report_time_out() {
Class<?> target = LongTest.class;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
System.setOut(new PrintStream(baos));
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, null, EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 1, tests);
runner.run(null);
verify(monitor).outcomeStarted(JUnitRunner.class, target.getName() + "#test");
verify(monitor).outcomeFinished(Result.EXEC_FAILED);
String outStr = baos.toString();
assertTrue(outStr.contains("java.util.concurrent.TimeoutException"));
}
public void test_run_for_LongTest2_without_time_limit_should_not_report_time_out() {
Class<?> target = LongTest2.class;
List<VogarTest> tests = JUnitRunnerFactory.createVogarTests(target, null, EMPTY_ARGS);
Runner runner = new JUnitRunner(monitor, skipPastReference, testEnvironment, 0, tests);
runner.run(null);
verify(monitor, times(8)).outcomeFinished(Result.SUCCESS);
}
}