1fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinpackage junitparams.internal; 2fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 3fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.Before; 4fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.Ignore; 5fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.Test; 6fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.runner.Description; 7fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.runner.RunWith; 8fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.runners.model.FrameworkMethod; 9fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.runners.model.TestClass; 10fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 11fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport junitparams.JUnitParamsRunner; 12fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport junitparams.Parameters; 13fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 14fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport static org.assertj.core.api.Assertions.assertThat; 15fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport static org.junit.Assert.*; 16fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 17fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin@RunWith(JUnitParamsRunner.class) 18fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinpublic class TestMethodTest { 19fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin TestMethod plainTestMethod; 20fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin TestMethod arrayTestMethod; 21fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 22fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Before 23fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void setUp() throws Exception { 24fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin plainTestMethod = new TestMethod(new FrameworkMethod(TestMethodTest.class.getMethod("forOthersToWork", new Class[]{String.class})), 25fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin new TestClass(this.getClass())); 26fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin arrayTestMethod = new TestMethod(new FrameworkMethod(TestMethodTest.class.getMethod("forOthersToWorkWithArray", 27fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin new Class[]{(new String[]{}).getClass()})), 28fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin new TestClass(this.getClass())); 29fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 30fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 31fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 32fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Parameters({"a","b"}) 33fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void forOthersToWork(String arg) throws Exception { 34fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertThat(arg).isIn("a","b"); 35fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 36fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 37fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 38fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 39fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Parameters({"a,b","b,a"}) 40fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void forOthersToWorkWithArray(String... arg) throws Exception { 41fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertThat(arg).containsOnlyOnce("a","b"); 42fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 43fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 44fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 45fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Ignore 46fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void flatTestMethodStructure() throws Exception { 47fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin System.setProperty("JUnitParams.flat", "true"); 48fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 49b03560c32573b9057dc1daaf877501dbb4e16f8dPaul Duffin Description description = plainTestMethod.describableFrameworkMethod().getDescription(); 50fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 51fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals("for_others_to_work(junitparams.internal.TestMethodTest)", description.getDisplayName()); 52fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertTrue(description.getChildren().isEmpty()); 53fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin System.clearProperty("JUnitParams.flat"); 54fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 55fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 56fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 572a75dcb2fd1490ace0acf82e948aae2829b87e8dPaul Duffin // Android-changed: CTS and AndroidJUnitRunner rely on specific format to test names, changing 582a75dcb2fd1490ace0acf82e948aae2829b87e8dPaul Duffin // them will prevent CTS and AndroidJUnitRunner from working properly; see b/36541809 592a75dcb2fd1490ace0acf82e948aae2829b87e8dPaul Duffin @Ignore 60fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 61fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void hierarchicalTestMethodStructure() throws Exception { 62fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin System.clearProperty("JUnitParams.flat"); 63b03560c32573b9057dc1daaf877501dbb4e16f8dPaul Duffin Description description = plainTestMethod.describableFrameworkMethod().getDescription(); 64fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 65fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals("forOthersToWork", description.getDisplayName()); 66fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals("[0] a (forOthersToWork)(junitparams.internal.TestMethodTest)", description.getChildren().get(0).getDisplayName()); 67fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals("[1] b (forOthersToWork)(junitparams.internal.TestMethodTest)", description.getChildren().get(1).getDisplayName()); 68fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 69fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 702a75dcb2fd1490ace0acf82e948aae2829b87e8dPaul Duffin // Android-changed: CTS and AndroidJUnitRunner rely on specific format to test names, changing 712a75dcb2fd1490ace0acf82e948aae2829b87e8dPaul Duffin // them will prevent CTS and AndroidJUnitRunner from working properly; see b/36541809 722a75dcb2fd1490ace0acf82e948aae2829b87e8dPaul Duffin @Ignore 73fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 74fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void hierarchicalArrayTestMethodStructure() throws Exception { 75fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin System.clearProperty("JUnitParams.flat"); 76b03560c32573b9057dc1daaf877501dbb4e16f8dPaul Duffin Description description = arrayTestMethod.describableFrameworkMethod().getDescription(); 77fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 78fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals("forOthersToWorkWithArray", description.getDisplayName()); 79fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals("[0] a,b (forOthersToWorkWithArray)(junitparams.internal.TestMethodTest)", 80fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin description.getChildren().get(0).getDisplayName()); 81fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals("[1] b,a (forOthersToWorkWithArray)(junitparams.internal.TestMethodTest)", 82fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin description.getChildren().get(1).getDisplayName()); 83fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 84fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 85fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 86fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Parameters 87fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void testVarargs(String... strings){ 88fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertArrayEquals("Hello world".split(" "), strings); 89fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 90fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 91fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin protected Object[] parametersForTestVarargs(){ 92fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin return new Object[]{ 93fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin new Object[]{"Hello", "world"} 94fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin }; 95fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 96fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 97fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 98fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Parameters 99fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void testVarargsCustomClass(Pair... pairs){ 100fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals(pairs[0].x, pairs[0].y); 101fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals(pairs[1].x, pairs[1].y); 102ea07fbcef796fdacd3110b41eec7a6c6e55044fcPaul Duffin assertNotEquals(pairs[2].x, pairs[2].y); 103fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 104fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 105fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin protected Object[] parametersForTestVarargsCustomClass(){ 106fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin return new Object[]{ 107fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin new Object[]{new Pair(0, 0), new Pair(1, 1), new Pair(2, 3)} 108fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin }; 109fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 110fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 111fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 112fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Parameters 113fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void testVarargsMoreArgs(int sumOfX, int sumOfY, Pair... pairs){ 114fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin int sumOfXFromPairs = 0; 115fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin int sumOfYFromPairs = 0; 116fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin for (Pair pair : pairs) { 117fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin sumOfXFromPairs += pair.x; 118fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin sumOfYFromPairs += pair.y; 119fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 120fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals(sumOfX, sumOfXFromPairs); 121fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals(sumOfY, sumOfYFromPairs); 122fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 123fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 124fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin protected Object parametersForTestVarargsMoreArgs(){ 125fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 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, 126fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 15), new Pair(7, 5)}}; 127fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 128fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 129fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 130fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Parameters 131fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void testVargsMoreArgsOfTheSameType(Pair sum, Pair... pairs) { 132fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals(sum.x, pairs[0].x + pairs[1].x); 133fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals(sum.y, pairs[0].y + pairs[1].y); 134fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 135fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 136fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin protected Object parametersForTestVargsMoreArgsOfTheSameType(){ 137fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 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, 138fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 21), new Pair(2, 19)}}; 139fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 140fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 141fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Test 142fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin @Parameters(method = "nullArray") 143fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public void varargsCheckPassesWithNullArray(boolean isNull, String... array) throws Exception { 144fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin assertEquals(isNull, array == null); 145fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 146fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 147fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin private Object nullArray() { 148fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin return new Object[] { 149fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin new Object[] { false, new String[] { "1", "2" } }, 150fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin new Object[] { true, null }, 151fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin }; 152fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 153fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin 154fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin private class Pair{ 155fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin int x,y; 156fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin public Pair(int x, int y){ 157fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin this.x = x; 158fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin this.y = y; 159fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 160fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin } 161fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin} 162