1 /* 2 * Copyright (C) 2015 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 vogar.target; 18 19 import org.junit.Test; 20 import org.junit.runner.RunWith; 21 import org.junit.runners.JUnit4; 22 import vogar.target.junit3.WrongSuiteTest; 23 import vogar.target.mixture.NonTestClass; 24 import vogar.target.mixture.junit3.AbstractJUnit3Test; 25 import vogar.target.mixture.junit3.JUnit3Test; 26 import vogar.target.mixture.junit3.NotPublicConstructorTest; 27 import vogar.target.mixture.junit3.TwoConstructorsTest; 28 import vogar.target.mixture.junit4.AbstractJUnit4Test; 29 import vogar.target.mixture.junit4.JUnit4Test; 30 import vogar.target.mixture.main.MainApp; 31 32 import static org.junit.Assert.assertEquals; 33 34 /** 35 * Tests for {@link TestRunner} 36 */ 37 @RunWith(JUnit4.class) 38 public class TestRunnerTest extends AbstractTestRunnerTest { 39 40 /** 41 * Make sure that the {@code --monitorPort <port>} command line option overrides the default 42 * specified in the properties. 43 */ 44 @TestRunnerProperties(testClassOrPackage = "vogar.DummyTest", monitorPort = 2345) 45 @Test testRunner_MonitorPortOverridden()46 public void testRunner_MonitorPortOverridden() throws Exception { 47 TestRunner runner = testRunnerRule.createTestRunner(); 48 assertEquals(2345, (int) runner.monitorPort); 49 50 runner = testRunnerRule.createTestRunner("--monitorPort", "10"); 51 assertEquals(10, (int) runner.monitorPort); 52 } 53 54 @TestRunnerProperties(testClass = Object.class) 55 @Test testRunner_Object()56 public void testRunner_Object() throws Exception { 57 TestRunner runner = testRunnerRule.createTestRunner(); 58 runner.run(); 59 60 expectedResults() 61 .noRunner() 62 .completedNormally(); 63 } 64 65 @TestRunnerProperties(testClass = WrongSuiteTest.class) 66 @Test testRunner_WrongSuiteTest()67 public void testRunner_WrongSuiteTest() throws Exception { 68 TestRunner runner = testRunnerRule.createTestRunner(); 69 runner.run(); 70 71 expectedResults() 72 .noRunner() 73 .completedNormally(); 74 } 75 76 /** 77 * If this fails with a "No classes in package: vogar.target.mixture;" error then the tests are 78 * not being run from a JAR, add {@code -Dvogar-scan-directories-for-tests=true} to the 79 * command line to get it working properly. This is usually only a problem in IDEs. 80 */ 81 @TestRunnerProperties(testClassOrPackage = "vogar.target.mixture") 82 @Test testRunner_Mixture()83 public void testRunner_Mixture() throws Exception { 84 TestRunner runner = testRunnerRule.createTestRunner(); 85 runner.run(); 86 87 String notPublicClassOrConstructorTest 88 = "vogar.target.mixture.junit3.NotPublicClassOrConstructorTest"; 89 String notPublicClassTest 90 = "vogar.target.mixture.junit3.NotPublicClassTest"; 91 expectedResults() 92 .forTestClass(NonTestClass.class) 93 .unsupported() 94 .forTestClass(AbstractJUnit3Test.class) 95 .unsupported() 96 .forTestClass(JUnit3Test.class) 97 .success("testFoo") 98 .forTestClass(notPublicClassOrConstructorTest) 99 .failure("test1", 100 "junit.framework.AssertionFailedError: Class " 101 + notPublicClassOrConstructorTest 102 + " has no public constructor TestCase(String name) or TestCase()\n") 103 .failure("test2", 104 "junit.framework.AssertionFailedError: Class " 105 + notPublicClassOrConstructorTest 106 + " has no public constructor TestCase(String name) or TestCase()\n") 107 .forTestClass(notPublicClassTest) 108 .failure("test1", 109 "junit.framework.AssertionFailedError: Class " 110 + notPublicClassTest + " is not public\n") 111 .failure("test2", 112 "junit.framework.AssertionFailedError: Class " 113 + notPublicClassTest + " is not public\n") 114 .forTestClass(NotPublicConstructorTest.class) 115 .failure("test1", 116 "junit.framework.AssertionFailedError: Class " 117 + NotPublicConstructorTest.class.getName() 118 + " has no public constructor TestCase(String name) or TestCase()\n") 119 .failure("test2", 120 "junit.framework.AssertionFailedError: Class " 121 + NotPublicConstructorTest.class.getName() 122 + " has no public constructor TestCase(String name) or TestCase()\n") 123 .forTestClass(TwoConstructorsTest.class) 124 .success("test") 125 .forTestClass(AbstractJUnit4Test.class) 126 .unsupported() 127 .forTestClass(JUnit4Test.class) 128 .success("testBar") 129 .success("testBaz") 130 .forTestClass(MainApp.class) 131 .success("main", "Main\n") 132 .completedNormally(); 133 } 134 } 135