| package junit.tests.framework; |
| |
| import junit.framework.Test; |
| import junit.framework.TestCase; |
| import junit.framework.TestFailure; |
| import junit.framework.TestResult; |
| import junit.framework.TestSuite; |
| import junit.tests.WasRun; |
| |
| /** |
| * A test case testing the testing framework. |
| */ |
| public class TestCaseTest extends TestCase { |
| |
| static class TornDown extends TestCase { |
| boolean fTornDown = false; |
| |
| @Override |
| protected void tearDown() { |
| fTornDown = true; |
| } |
| |
| @Override |
| protected void runTest() { |
| throw new Error("running"); |
| } |
| } |
| |
| public void testCaseToString() { |
| // This test wins the award for twisted snake tail eating while |
| // writing self tests. And you thought those weird anonymous |
| // inner classes were bad... |
| assertEquals("testCaseToString(junit.tests.framework.TestCaseTest)", toString()); |
| } |
| |
| public void testError() { |
| TestCase error = new TestCase("error") { |
| @Override |
| protected void runTest() { |
| throw new Error(); |
| } |
| }; |
| verifyError(error); |
| } |
| |
| public void testRunAndTearDownFails() { |
| TornDown fails = new TornDown() { |
| @Override |
| protected void tearDown() { |
| super.tearDown(); |
| throw new Error(); |
| } |
| |
| @Override |
| protected void runTest() { |
| throw new Error(); |
| } |
| }; |
| verifyError(fails); |
| assertTrue(fails.fTornDown); |
| } |
| |
| public void testSetupFails() { |
| TestCase fails = new TestCase("success") { |
| @Override |
| protected void setUp() { |
| throw new Error(); |
| } |
| |
| @Override |
| protected void runTest() { |
| } |
| }; |
| verifyError(fails); |
| } |
| |
| public void testSuccess() { |
| TestCase success = new TestCase("success") { |
| @Override |
| protected void runTest() { |
| } |
| }; |
| verifySuccess(success); |
| } |
| |
| public void testFailure() { |
| TestCase failure = new TestCase("failure") { |
| @Override |
| protected void runTest() { |
| fail(); |
| } |
| }; |
| verifyFailure(failure); |
| } |
| |
| public void testTearDownAfterError() { |
| TornDown fails = new TornDown(); |
| verifyError(fails); |
| assertTrue(fails.fTornDown); |
| } |
| |
| public void testTearDownFails() { |
| TestCase fails = new TestCase("success") { |
| @Override |
| protected void tearDown() { |
| throw new Error(); |
| } |
| |
| @Override |
| protected void runTest() { |
| } |
| }; |
| verifyError(fails); |
| } |
| |
| public void testTearDownSetupFails() { |
| TornDown fails = new TornDown() { |
| @Override |
| protected void setUp() { |
| throw new Error(); |
| } |
| }; |
| verifyError(fails); |
| assertTrue(!fails.fTornDown); |
| } |
| |
| public void testWasRun() { |
| WasRun test = new WasRun(); |
| test.run(); |
| assertTrue(test.fWasRun); |
| } |
| |
| public void testExceptionRunningAndTearDown() { |
| // With 1.4, we should |
| // wrap the exception thrown while running with the exception thrown |
| // while tearing down |
| Test t = new TornDown() { |
| @Override |
| public void tearDown() { |
| throw new Error("tearingDown"); |
| } |
| }; |
| TestResult result = new TestResult(); |
| t.run(result); |
| TestFailure failure = result.errors().nextElement(); |
| assertEquals("running", failure.thrownException().getMessage()); |
| } |
| |
| public void testErrorTearingDownDoesntMaskErrorRunning() { |
| final Exception running = new Exception("Running"); |
| TestCase t = new TestCase() { |
| @Override |
| protected void runTest() throws Throwable { |
| throw running; |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| throw new Error("Tearing down"); |
| } |
| }; |
| try { |
| t.runBare(); |
| } catch (Throwable thrown) { |
| assertSame(running, thrown); |
| } |
| } |
| |
| public void testNoArgTestCasePasses() { |
| Test t = new TestSuite(NoArgTestCaseTest.class); |
| TestResult result = new TestResult(); |
| t.run(result); |
| assertTrue(result.runCount() == 1); |
| assertTrue(result.failureCount() == 0); |
| assertTrue(result.errorCount() == 0); |
| } |
| |
| public void testNamelessTestCase() { |
| TestCase t = new TestCase() { |
| }; |
| TestResult result = t.run(); |
| assertEquals(1, result.failureCount()); |
| } |
| |
| void verifyError(TestCase test) { |
| TestResult result = test.run(); |
| assertTrue(result.runCount() == 1); |
| assertTrue(result.failureCount() == 0); |
| assertTrue(result.errorCount() == 1); |
| } |
| |
| void verifyFailure(TestCase test) { |
| TestResult result = test.run(); |
| assertTrue(result.runCount() == 1); |
| assertTrue(result.failureCount() == 1); |
| assertTrue(result.errorCount() == 0); |
| } |
| |
| void verifySuccess(TestCase test) { |
| TestResult result = test.run(); |
| assertTrue(result.runCount() == 1); |
| assertTrue(result.failureCount() == 0); |
| assertTrue(result.errorCount() == 0); |
| } |
| } |