// Copyright © 2011-2013, Esko Luontola <www.orfjackal.net> // This software is released under the Apache License 2.0. // The license text is at http://www.apache.org/licenses/LICENSE-2.0 package fi.jumi.core.drivers; import fi.jumi.api.drivers.*; import org.junit.*; import org.junit.rules.ExpectedException; import java.util.concurrent.Executor; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.*; public class CompositeDriverFinderTest { @Rule public final ExpectedException thrown = ExpectedException.none(); private final Class<DummyTest> testClass = DummyTest.class; private final Driver expectedDriver = new DummyDriver(); @Test public void returns_the_driver_from_the_backing_driver_finder() { DriverFinder finder1 = mock(DriverFinder.class, "finder1"); stub(finder1.findTestClassDriver(testClass)).toReturn(expectedDriver); Driver driver = new CompositeDriverFinder(finder1).findTestClassDriver(testClass); assertThat(driver, is(expectedDriver)); } @Test public void returns_the_driver_from_the_first_compatible_backing_driver_finder() { DriverFinder finder1 = mock(DriverFinder.class, "finder1"); DriverFinder finder2 = mock(DriverFinder.class, "finder2"); DriverFinder finder3 = mock(DriverFinder.class, "finder3"); stub(finder1.findTestClassDriver(testClass)).toReturn(null); stub(finder2.findTestClassDriver(testClass)).toReturn(expectedDriver); stub(finder3.findTestClassDriver(testClass)).toReturn(null); Driver driver = new CompositeDriverFinder(finder1, finder2, finder3).findTestClassDriver(testClass); assertThat(driver, is(expectedDriver)); verify(finder1).findTestClassDriver(testClass); verify(finder2).findTestClassDriver(testClass); verifyZeroInteractions(finder3); } @Test public void fails_if_none_of_the_backing_driver_finders_was_compatible() { DriverFinder finder1 = mock(DriverFinder.class, "finder1"); stub(finder1.findTestClassDriver(testClass)).toReturn(null); thrown.expect(IllegalArgumentException.class); thrown.expectMessage(testClass + " was not recognized as a compatible test class"); thrown.expectMessage(finder1.toString()); new CompositeDriverFinder(finder1).findTestClassDriver(testClass); } private static class DummyTest { } private static class DummyDriver extends Driver { @Override public void findTests(Class<?> testClass, SuiteNotifier notifier, Executor executor) { } } }