| package junitparams.internal; |
| |
| import org.junit.Before; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| import org.junit.runner.Description; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.model.FrameworkMethod; |
| import org.junit.runners.model.TestClass; |
| |
| import junitparams.JUnitParamsRunner; |
| import junitparams.Parameters; |
| |
| import static org.assertj.core.api.Assertions.assertThat; |
| import static org.junit.Assert.*; |
| |
| @RunWith(JUnitParamsRunner.class) |
| public class TestMethodTest { |
| TestMethod plainTestMethod; |
| TestMethod arrayTestMethod; |
| |
| @Before |
| public void setUp() throws Exception { |
| plainTestMethod = new TestMethod(new FrameworkMethod(TestMethodTest.class.getMethod("forOthersToWork", new Class[]{String.class})), |
| new TestClass(this.getClass())); |
| arrayTestMethod = new TestMethod(new FrameworkMethod(TestMethodTest.class.getMethod("forOthersToWorkWithArray", |
| new Class[]{(new String[]{}).getClass()})), |
| new TestClass(this.getClass())); |
| } |
| |
| @Test |
| @Parameters({"a","b"}) |
| public void forOthersToWork(String arg) throws Exception { |
| assertThat(arg).isIn("a","b"); |
| } |
| |
| |
| @Test |
| @Parameters({"a,b","b,a"}) |
| public void forOthersToWorkWithArray(String... arg) throws Exception { |
| assertThat(arg).containsOnlyOnce("a","b"); |
| } |
| |
| @Test |
| @Ignore |
| public void flatTestMethodStructure() throws Exception { |
| System.setProperty("JUnitParams.flat", "true"); |
| |
| Description description = plainTestMethod.describableFrameworkMethod().getDescription(); |
| |
| assertEquals("for_others_to_work(junitparams.internal.TestMethodTest)", description.getDisplayName()); |
| assertTrue(description.getChildren().isEmpty()); |
| System.clearProperty("JUnitParams.flat"); |
| } |
| |
| |
| // Android-changed: CTS and AndroidJUnitRunner rely on specific format to test names, changing |
| // them will prevent CTS and AndroidJUnitRunner from working properly; see b/36541809 |
| @Ignore |
| @Test |
| public void hierarchicalTestMethodStructure() throws Exception { |
| System.clearProperty("JUnitParams.flat"); |
| Description description = plainTestMethod.describableFrameworkMethod().getDescription(); |
| |
| assertEquals("forOthersToWork", description.getDisplayName()); |
| assertEquals("[0] a (forOthersToWork)(junitparams.internal.TestMethodTest)", description.getChildren().get(0).getDisplayName()); |
| assertEquals("[1] b (forOthersToWork)(junitparams.internal.TestMethodTest)", description.getChildren().get(1).getDisplayName()); |
| } |
| |
| // Android-changed: CTS and AndroidJUnitRunner rely on specific format to test names, changing |
| // them will prevent CTS and AndroidJUnitRunner from working properly; see b/36541809 |
| @Ignore |
| @Test |
| public void hierarchicalArrayTestMethodStructure() throws Exception { |
| System.clearProperty("JUnitParams.flat"); |
| Description description = arrayTestMethod.describableFrameworkMethod().getDescription(); |
| |
| assertEquals("forOthersToWorkWithArray", description.getDisplayName()); |
| assertEquals("[0] a,b (forOthersToWorkWithArray)(junitparams.internal.TestMethodTest)", |
| description.getChildren().get(0).getDisplayName()); |
| assertEquals("[1] b,a (forOthersToWorkWithArray)(junitparams.internal.TestMethodTest)", |
| description.getChildren().get(1).getDisplayName()); |
| } |
| |
| @Test |
| @Parameters |
| public void testVarargs(String... strings){ |
| assertArrayEquals("Hello world".split(" "), strings); |
| } |
| |
| protected Object[] parametersForTestVarargs(){ |
| return new Object[]{ |
| new Object[]{"Hello", "world"} |
| }; |
| } |
| |
| @Test |
| @Parameters |
| public void testVarargsCustomClass(Pair... pairs){ |
| assertEquals(pairs[0].x, pairs[0].y); |
| assertEquals(pairs[1].x, pairs[1].y); |
| assertNotEquals(pairs[2].x, pairs[2].y); |
| } |
| |
| protected Object[] parametersForTestVarargsCustomClass(){ |
| return new Object[]{ |
| new Object[]{new Pair(0, 0), new Pair(1, 1), new Pair(2, 3)} |
| }; |
| } |
| |
| @Test |
| @Parameters |
| public void testVarargsMoreArgs(int sumOfX, int sumOfY, Pair... pairs){ |
| int sumOfXFromPairs = 0; |
| int sumOfYFromPairs = 0; |
| for (Pair pair : pairs) { |
| sumOfXFromPairs += pair.x; |
| sumOfYFromPairs += pair.y; |
| } |
| assertEquals(sumOfX, sumOfXFromPairs); |
| assertEquals(sumOfY, sumOfYFromPairs); |
| } |
| |
| protected Object parametersForTestVarargsMoreArgs(){ |
| return new Object[]{new Object[]{40, 50, new Pair(17, 21), new Pair(12, 18), new Pair(11, 11)}, new Object[]{10, 20, new Pair(3, |
| 15), new Pair(7, 5)}}; |
| } |
| |
| @Test |
| @Parameters |
| public void testVargsMoreArgsOfTheSameType(Pair sum, Pair... pairs) { |
| assertEquals(sum.x, pairs[0].x + pairs[1].x); |
| assertEquals(sum.y, pairs[0].y + pairs[1].y); |
| } |
| |
| protected Object parametersForTestVargsMoreArgsOfTheSameType(){ |
| return new Object[]{new Object[]{new Pair(10, 30), new Pair(7, 17), new Pair(3, 13)}, new Object[]{new Pair(20, 40), new Pair(18, |
| 21), new Pair(2, 19)}}; |
| } |
| |
| @Test |
| @Parameters(method = "nullArray") |
| public void varargsCheckPassesWithNullArray(boolean isNull, String... array) throws Exception { |
| assertEquals(isNull, array == null); |
| } |
| |
| private Object nullArray() { |
| return new Object[] { |
| new Object[] { false, new String[] { "1", "2" } }, |
| new Object[] { true, null }, |
| }; |
| } |
| |
| private class Pair{ |
| int x,y; |
| public Pair(int x, int y){ |
| this.x = x; |
| this.y = y; |
| } |
| } |
| } |