Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1175)

Unified Diff: base/test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerDelegateFactoryTest.java

Issue 2568633002: Create Next Gen Parameter Test Framework for JUnit4 (Closed)
Patch Set: rebase Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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, "");
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698