package net.sf.cotta.test; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; public class FixtureRepositoryTest extends junit.framework.TestCase { private static AssertionFactory ensure = new AssertionFactory(); private FixtureRepository repository; protected void setUp() throws Exception { super.setUp(); repository = FixtureRepository.reset(); } protected void tearDown() throws Exception { repository = null; super.tearDown(); } public void testLoadingTestFixtureShouldCheckTypeForBetterMessage() { try { new TestWithAnnotationProblem(); fail("should have thrown IllegalArgumentException"); } catch (IllegalArgumentException e) { ensure.that(e).message().contains(TestFixture.class.getName()); } } public void testFixtureOnlyCallsFirstSetupAndLastTearDown() throws Exception { TestDummy testOne = new TestDummy(); TestDummy testTwo = new TestDummy(); repository = FixtureRepository.reset(); repository.register(testOne); repository.register(testTwo); repository.fixtureSetUp(testOne); assertEquals(1, SampleFixture.count); repository.fixtureTearDown(testOne); assertEquals(1, SampleFixture.count); repository.fixtureSetUp(testTwo); assertEquals(1, SampleFixture.count); repository.fixtureTearDown(testTwo); assertEquals(0, SampleFixture.count); } @Sample private static class TestDummy extends TestCase {} @Fixture(FixtureType.ENVIRONMENT) @Retention(RetentionPolicy.RUNTIME) public @interface Sample { } public static class SampleFixture implements TestFixture { private static int count = 0; public void setUp() { count++; } public void tearDown() { count--; } public void beforeMethod(TestCase testCase) { } public void afterMethod(TestCase testCase) { } } @FixtureClassNotTestFixture private static class TestWithAnnotationProblem extends TestCase {} @Retention(RetentionPolicy.RUNTIME) @Fixture(FixtureType.ENVIRONMENT) public static @interface FixtureClassNotTestFixture { } public static class FixtureClassNotTestFixtureFixture { } }