Index: base/test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerDelegateFactoryTest.java |
diff --git a/base/test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerDelegateFactoryTest.java b/base/test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerDelegateFactoryTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3be81a92692d32fae33d5368515271c6ef6a6a95 |
--- /dev/null |
+++ b/base/test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerDelegateFactoryTest.java |
@@ -0,0 +1,191 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.base.test.params; |
+ |
+import org.junit.Assert; |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+import org.junit.runners.BlockJUnit4ClassRunner; |
+import org.junit.runners.model.FrameworkMethod; |
+import org.junit.runners.model.InitializationError; |
+import org.junit.runners.model.TestClass; |
+ |
+import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter; |
+import org.chromium.base.test.params.ParameterizedRunner.ParameterizedTestInstantiationException; |
+import org.chromium.base.test.params.ParameterizedRunnerDelegateFactory.ParameterizedRunnerDelegateInstantiationException; |
+ |
+import java.lang.reflect.Method; |
+import java.util.ArrayList; |
+import java.util.Collections; |
+import java.util.HashMap; |
+import java.util.List; |
+import java.util.Map; |
+ |
+/** |
+ * Test for org.chromium.base.test.params.ParameterizedRunnerDelegateFactory |
+ */ |
+@RunWith(BlockJUnit4ClassRunner.class) |
+public class ParameterizedRunnerDelegateFactoryTest { |
+ /** |
+ * This RunnerDelegate calls `super.collectInitializationErrors()` and would |
+ * cause BlockJUnit4ClassRunner to validate test classes. |
+ */ |
+ public static class BadExampleRunnerDelegate |
+ extends BlockJUnit4ClassRunner implements ParameterizedRunnerDelegate { |
+ public static class LalaTestClass {} |
+ |
+ private final List<FrameworkMethod> mParameterizedFrameworkMethodList; |
+ |
+ BadExampleRunnerDelegate(Class<?> klass, |
+ List<FrameworkMethod> parameterizedFrameworkMethods) throws InitializationError { |
+ super(klass); |
+ mParameterizedFrameworkMethodList = parameterizedFrameworkMethods; |
+ } |
+ |
+ @Override |
+ public void collectInitializationErrors(List<Throwable> errors) { |
+ super.collectInitializationErrors(errors); // This is wrong!! |
+ } |
+ |
+ @Override |
+ public List<FrameworkMethod> computeTestMethods() { |
+ return mParameterizedFrameworkMethodList; |
+ } |
+ |
+ @Override |
+ public Object createTest() { |
+ return null; |
+ } |
+ } |
+ |
+ static class BadTestClassWithMoreThanOneConstructor { |
+ public BadTestClassWithMoreThanOneConstructor() {} |
+ @SuppressWarnings("unused") |
+ public BadTestClassWithMoreThanOneConstructor(String argument) {} |
+ } |
+ |
+ static class TestClassConstructorWithTwoArguments { |
+ @SuppressWarnings("unused") |
+ public TestClassConstructorWithTwoArguments(int a, int b) {} |
+ } |
+ |
+ static class ExampleTestClass { |
+ @SuppressWarnings("unused") |
+ @UseMethodParameter("A") |
+ @Test |
+ public void testA(String a) {} |
+ |
+ @SuppressWarnings("unused") |
+ @UseMethodParameter("B") |
+ @Test |
+ public void testB(int b) {} |
+ |
+ @Test |
+ public void testByMyself() {} |
+ } |
+ |
+ /** |
+ * This test validates ParameterizedRunnerDelegateFactory throws exception when |
+ * a runner delegate does not override the collectInitializationErrors method. |
+ */ |
+ @Test(expected = ParameterizedRunnerDelegateInstantiationException.class) |
+ public void testBadRunnerDelegateWithIncorrectValidationCall() throws Throwable { |
+ ParameterizedRunnerDelegateFactory factory = new ParameterizedRunnerDelegateFactory(); |
+ TestClass testClass = new TestClass(BadExampleRunnerDelegate.LalaTestClass.class); |
+ factory.createRunner( |
+ testClass, null, Collections.emptyMap(), BadExampleRunnerDelegate.class); |
+ } |
+ |
+ @Test(expected = IllegalArgumentException.class) |
+ public void testCreateTestWithMoreThanOneConstructor() throws Throwable { |
+ TestClass testClass = new TestClass(BadTestClassWithMoreThanOneConstructor.class); |
+ ParameterizedRunnerDelegateFactory.createTest(testClass, new ParameterSet()); |
+ } |
+ |
+ @Test(expected = ParameterizedTestInstantiationException.class) |
+ public void testCreateTestWithIncorrectArguments() throws Throwable { |
+ TestClass testClass = new TestClass(TestClassConstructorWithTwoArguments.class); |
+ ParameterSet pSet = new ParameterSet().value(1, 2, 3); |
+ ParameterizedRunnerDelegateFactory.createTest(testClass, pSet); |
+ } |
+ |
+ @Test |
+ public void testGenerateParameterizedFrameworkMethod() throws Throwable { |
+ Map<String, List<ParameterSet>> map = new HashMap<>(); |
+ List<ParameterSet> listA = new ArrayList<>(); |
+ listA.add(new ParameterSet().value("a").name("testWithValue_a")); |
+ listA.add(new ParameterSet().value("b").name("testWithValue_b")); |
+ |
+ List<ParameterSet> listB = new ArrayList<>(); |
+ listB.add(new ParameterSet().value(1).name("testWithValue_1")); |
+ listB.add(new ParameterSet().value(2).name("testWithValue_2")); |
+ listB.add(new ParameterSet().value(3).name("testWithValue_3")); |
+ map.put("A", listA); |
+ map.put("B", listB); |
+ |
+ List<FrameworkMethod> methods = |
+ ParameterizedRunnerDelegateFactory.generateUnmodifiableFrameworkMethodList( |
+ new TestClass(ExampleTestClass.class), map, ""); |
+ |
+ Assert.assertEquals(methods.size(), 6); |
+ |
+ Map<String, Method> expectedTests = new HashMap<>(); |
+ Method testMethodA = ExampleTestClass.class.getDeclaredMethod("testA", String.class); |
+ Method testMethodB = ExampleTestClass.class.getDeclaredMethod("testB", int.class); |
+ Method testMethodByMyself = ExampleTestClass.class.getDeclaredMethod("testByMyself"); |
+ expectedTests.put("testA__testWithValue_a", testMethodA); |
+ expectedTests.put("testA__testWithValue_b", testMethodA); |
+ expectedTests.put("testB__testWithValue_1", testMethodB); |
+ expectedTests.put("testB__testWithValue_2", testMethodB); |
+ expectedTests.put("testB__testWithValue_3", testMethodB); |
+ expectedTests.put("testByMyself", testMethodByMyself); |
+ for (FrameworkMethod method : methods) { |
+ Assert.assertNotNull(expectedTests.get(method.getName())); |
+ Assert.assertEquals(expectedTests.get(method.getName()), method.getMethod()); |
+ expectedTests.remove(method.getName()); |
+ } |
+ Assert.assertTrue(expectedTests.isEmpty()); |
+ } |
+ |
+ @Test(expected = IllegalArgumentException.class) |
+ public void testEmptyParameterSet() { |
+ Map<String, List<ParameterSet>> map = new HashMap<>(); |
+ List<ParameterSet> listA = new ArrayList<>(); |
+ listA.add(new ParameterSet().value("a").name("testWithValue_a")); |
+ List<ParameterSet> listB = new ArrayList<>(); |
+ listB.add(new ParameterSet()); //Empty parameter set |
+ map.put("A", listA); |
+ map.put("B", listB); |
+ ParameterizedRunnerDelegateFactory.generateUnmodifiableFrameworkMethodList( |
+ new TestClass(ExampleTestClass.class), map, ""); |
+ } |
+ |
+ @Test(expected = AssertionError.class) |
+ public void testMissingParameterSet() { |
+ Map<String, List<ParameterSet>> map = new HashMap<>(); |
+ List<ParameterSet> listA = new ArrayList<>(); |
+ listA.add(new ParameterSet().value("a").name("testWithValue_a")); |
+ map.put("A", listA); |
+ //Missing ParameterSet list under group "B" |
+ ParameterizedRunnerDelegateFactory.generateUnmodifiableFrameworkMethodList( |
+ new TestClass(ExampleTestClass.class), map, ""); |
+ } |
+ |
+ @Test(expected = AssertionError.class) |
+ public void testMissingTestMethod() { |
+ Map<String, List<ParameterSet>> map = new HashMap<>(); |
+ List<ParameterSet> listA = new ArrayList<>(); |
+ listA.add(new ParameterSet().value("a").name("testWithValue_a")); |
+ List<ParameterSet> listB = new ArrayList<>(); |
+ listB.add(new ParameterSet().value(1).name("testWithValue_1")); |
+ List<ParameterSet> listC = new ArrayList<>(); |
+ listC.add(new ParameterSet().value(10).name("extra")); |
+ map.put("A", listA); |
+ map.put("B", listB); |
+ map.put("C", listC); |
+ ParameterizedRunnerDelegateFactory.generateUnmodifiableFrameworkMethodList( |
+ new TestClass(ExampleTestClass.class), map, ""); |
+ } |
+} |