xref: /aosp_15_r20/external/junit-params/src/test/java/junitparams/ParametersReaderProvidersTest.java (revision b2c653efad15baf736c94ef04454e05088f2cbb7)
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