1*b2c653efSSorin Basca package junitparams; 2*b2c653efSSorin Basca 3*b2c653efSSorin Basca import junitparams.internal.TestMethod; 4*b2c653efSSorin Basca import org.junit.Rule; 5*b2c653efSSorin Basca import org.junit.Test; 6*b2c653efSSorin Basca import org.junit.rules.ExpectedException; 7*b2c653efSSorin Basca import org.junit.runner.RunWith; 8*b2c653efSSorin Basca import org.junit.runners.model.FrameworkMethod; 9*b2c653efSSorin Basca import org.junit.runners.model.TestClass; 10*b2c653efSSorin Basca 11*b2c653efSSorin Basca import java.lang.reflect.Method; 12*b2c653efSSorin Basca 13*b2c653efSSorin Basca import static org.assertj.core.api.Assertions.assertThat; 14*b2c653efSSorin Basca 15*b2c653efSSorin Basca @RunWith(JUnitParamsRunner.class) 16*b2c653efSSorin Basca public class ParametersReaderProvidersTest { 17*b2c653efSSorin Basca 18*b2c653efSSorin Basca @Rule 19*b2c653efSSorin Basca public ExpectedException exception = ExpectedException.none(); 20*b2c653efSSorin Basca 21*b2c653efSSorin Basca @Test 22*b2c653efSSorin Basca @Parameters(source = SingleParamSetProvider.class) oneParamSetFromClass(String a, String b)23*b2c653efSSorin Basca public void oneParamSetFromClass(String a, String b) { 24*b2c653efSSorin Basca assertThat(a).isEqualTo("a"); 25*b2c653efSSorin Basca assertThat(b).isEqualTo("b"); 26*b2c653efSSorin Basca } 27*b2c653efSSorin Basca 28*b2c653efSSorin Basca public static class SingleParamSetProvider { provideOneParamSetSameTypes()29*b2c653efSSorin Basca public static Object[] provideOneParamSetSameTypes() { 30*b2c653efSSorin Basca return new Object[]{"a", "b"}; 31*b2c653efSSorin Basca } 32*b2c653efSSorin Basca } 33*b2c653efSSorin Basca 34*b2c653efSSorin Basca @Test shouldPutProviderClassNameInExceptionMessageForProviderWithNoValidMethods()35*b2c653efSSorin Basca public void shouldPutProviderClassNameInExceptionMessageForProviderWithNoValidMethods() { 36*b2c653efSSorin Basca TestMethod testMethod = getTestMethodWithInvalidProvider(); 37*b2c653efSSorin Basca 38*b2c653efSSorin Basca exception.expect(RuntimeException.class); 39*b2c653efSSorin Basca exception.expectMessage(ProviderClassWithNoValidMethods.class.getName()); 40*b2c653efSSorin Basca testMethod.parametersSets(); 41*b2c653efSSorin Basca } 42*b2c653efSSorin Basca getTestMethodWithInvalidProvider()43*b2c653efSSorin Basca private TestMethod getTestMethodWithInvalidProvider() { 44*b2c653efSSorin Basca // Bug in original code relied on order of Class.getMethods() which is undefined. 45*b2c653efSSorin Basca try { 46*b2c653efSSorin Basca Method testMethod = TestClassWithProviderClassWithNoValidMethods.class 47*b2c653efSSorin Basca .getDeclaredMethod("shouldDoNothingItsJustToConnectTestClassWithProvider"); 48*b2c653efSSorin Basca return new TestMethod(new FrameworkMethod(testMethod), new TestClass(TestClassWithProviderClassWithNoValidMethods.class)); 49*b2c653efSSorin Basca } catch (NoSuchMethodException e) { 50*b2c653efSSorin Basca throw new RuntimeException("Mismatch between method and test class", e); 51*b2c653efSSorin Basca } 52*b2c653efSSorin Basca } 53*b2c653efSSorin Basca 54*b2c653efSSorin Basca @RunWith(JUnitParamsRunner.class) 55*b2c653efSSorin Basca static class TestClassWithProviderClassWithNoValidMethods { 56*b2c653efSSorin Basca @Test 57*b2c653efSSorin Basca @Parameters(source = ProviderClassWithNoValidMethods.class) shouldDoNothingItsJustToConnectTestClassWithProvider()58*b2c653efSSorin Basca public void shouldDoNothingItsJustToConnectTestClassWithProvider() { 59*b2c653efSSorin Basca } 60*b2c653efSSorin Basca } 61*b2c653efSSorin Basca 62*b2c653efSSorin Basca static class ProviderClassWithNoValidMethods { 63*b2c653efSSorin Basca } 64*b2c653efSSorin Basca 65*b2c653efSSorin Basca @Test 66*b2c653efSSorin Basca @Parameters(source = OneIntegerProvider.class) providedPrimitiveParams(int integer)67*b2c653efSSorin Basca public void providedPrimitiveParams(int integer) { 68*b2c653efSSorin Basca assertThat(integer).isLessThan(4); 69*b2c653efSSorin Basca } 70*b2c653efSSorin Basca 71*b2c653efSSorin Basca public static class OneIntegerProvider { provideTwoNumbers()72*b2c653efSSorin Basca public static Object[] provideTwoNumbers() { 73*b2c653efSSorin Basca return new Object[]{new Object[]{1}, new Object[]{2}}; 74*b2c653efSSorin Basca } 75*b2c653efSSorin Basca provideOneNumber()76*b2c653efSSorin Basca public static Object[] provideOneNumber() { 77*b2c653efSSorin Basca return new Object[]{new Object[]{3}}; 78*b2c653efSSorin Basca } 79*b2c653efSSorin Basca } 80*b2c653efSSorin Basca 81*b2c653efSSorin Basca @Test 82*b2c653efSSorin Basca @Parameters(source = DomainObjectProvider.class) providedDomainParams(DomainClass object1, DomainClass object2)83*b2c653efSSorin Basca public void providedDomainParams(DomainClass object1, DomainClass object2) { 84*b2c653efSSorin Basca assertThat(object1.toString()).isEqualTo("testNameOne"); 85*b2c653efSSorin Basca assertThat(object2.toString()).isEqualTo("testNameTwo"); 86*b2c653efSSorin Basca } 87*b2c653efSSorin Basca 88*b2c653efSSorin Basca public static class DomainObjectProvider { provideDomainObject()89*b2c653efSSorin Basca public static Object[] provideDomainObject() { 90*b2c653efSSorin Basca return new Object[]{new Object[]{ 91*b2c653efSSorin Basca new DomainClass("testNameOne"), 92*b2c653efSSorin Basca new DomainClass("testNameTwo")}}; 93*b2c653efSSorin Basca } 94*b2c653efSSorin Basca } 95*b2c653efSSorin Basca 96*b2c653efSSorin Basca public static class DomainClass { 97*b2c653efSSorin Basca private final String name; 98*b2c653efSSorin Basca DomainClass(String name)99*b2c653efSSorin Basca public DomainClass(String name) { 100*b2c653efSSorin Basca this.name = name; 101*b2c653efSSorin Basca } 102*b2c653efSSorin Basca 103*b2c653efSSorin Basca @Override toString()104*b2c653efSSorin Basca public String toString() { 105*b2c653efSSorin Basca return name; 106*b2c653efSSorin Basca } 107*b2c653efSSorin Basca } 108*b2c653efSSorin Basca } 109