| Index: chrome/android/javatests/src/org/chromium/base/test/util/parameter/ParameterizedTestAnnotationTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/base/test/util/parameter/ParameterizedTestAnnotationTest.java b/chrome/android/javatests/src/org/chromium/base/test/util/parameter/ParameterizedTestAnnotationTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0b37bada139ec43ab7e02def46da405b1dd614bb
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/base/test/util/parameter/ParameterizedTestAnnotationTest.java
|
| @@ -0,0 +1,372 @@
|
| +// Copyright 2015 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.util.parameter;
|
| +
|
| +import android.app.Activity;
|
| +import android.test.MoreAsserts;
|
| +import android.test.suitebuilder.annotation.SmallTest;
|
| +
|
| +import org.chromium.base.test.BaseActivityInstrumentationTestCase;
|
| +import org.chromium.base.test.util.parameter.parameters.MethodParameter;
|
| +
|
| +/**
|
| + * Tester class for the {@link ParameterizedTest} annotation and the {@link ParameterizedTest.Set}
|
| + * annotation.
|
| + *
|
| + * Also, tests the {@link MethodParameter} parameter.
|
| + */
|
| +public class ParameterizedTestAnnotationTest extends
|
| + BaseActivityInstrumentationTestCase<Activity> {
|
| + public ParameterizedTestAnnotationTest() {
|
| + super(Activity.class);
|
| + }
|
| +
|
| + @SmallTest
|
| + public void testNoParameterizedTestAnnotation() {
|
| + assertFalse("This is a parameterized test when it should not be.", getParameterReader()
|
| + .isParameterizedTest());
|
| + assertNull("someParameter should not exist.", getParameterReader()
|
| + .getParameter("someParameter"));
|
| + assertNull("someParameterArgument should not exist.", getParameterReader()
|
| + .getParameterArgument("someParameter", "someParameterArgument"));
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest()
|
| + public void testEmptyParameterizedTestAnnotation() {
|
| + assertTrue("This is not a parameterized test.", getParameterReader()
|
| + .isParameterizedTest());
|
| + assertNull("someParameter should not exist.", getParameterReader()
|
| + .getParameter("someParameter"));
|
| + assertNull("someParameterArgument should not exist.", getParameterReader()
|
| + .getParameterArgument("someParameter", "someParameterArgument"));
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {})
|
| + public void testParameterizedTestWithEmptyParameters() {
|
| + assertTrue("This is not a parameterized test.", getParameterReader()
|
| + .isParameterizedTest());
|
| + assertNull("someParameter should not exist.", getParameterReader()
|
| + .getParameter("someParameter"));
|
| + assertNull("someParameterArgument should not exist.", getParameterReader()
|
| + .getParameterArgument("someParameter", "someParameterArgument"));
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {})
|
| + public void testParameterDoesNotExist() {
|
| + Parameter parameter = getParameterReader().getParameter(MethodParameter.PARAMETER_TAG);
|
| + assertNull("method-parameter should not exist.", parameter);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {@Parameter(tag = MethodParameter.PARAMETER_TAG)})
|
| + public void testGetParameter() {
|
| + String expected = "method-parameter";
|
| + String actual = getParameterReader().getParameter(MethodParameter.PARAMETER_TAG).tag();
|
| + assertEquals("Parameter tag did not match expected.", expected, actual);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {@Parameter(tag = MethodParameter.PARAMETER_TAG)})
|
| + public void testParameterArgumentDoesNotExist() {
|
| + Parameter.Argument actual = getArgument("arg");
|
| + assertNull("arg should not exist.", actual);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {@Parameter.Argument(name = "string", stringVar = "value")})})
|
| + public void testMethodParametersWithOneStringValue() {
|
| + String expected = "value";
|
| + String actual = getArgument("string").stringVar();
|
| + assertEquals(mismatchMessage("string"), expected, actual);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {@Parameter.Argument(name = "int", intVar = 0)})})
|
| + public void testMethodParametersWithOneIntValue() {
|
| + int expected = 0;
|
| + int actual = getArgument("int").intVar();
|
| + assertEquals(mismatchMessage("int"), expected, actual);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "intArray", intArray = {5, 10, -6, 0, -1})})
|
| + })
|
| + public void testMethodParametersWithOneIntArrayValue() {
|
| + int[] expected = new int[] {5, 10, -6, 0, -1};
|
| + int[] actual = getArgument("intArray").intArray();
|
| + assertEquals("Expected length and actual length are different.", expected.length,
|
| + actual.length);
|
| + MoreAsserts.assertEquals(mismatchMessage("intArray"), expected, actual);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {@Parameter.Argument(name = "stringArray", stringArray = {
|
| + "apple", "banana", "orange", "melon", "lemon"})})})
|
| + public void testMethodParametersWithOneStringArrayValue() {
|
| + String[] expected = new String[] {"apple", "banana", "orange", "melon", "lemon"};
|
| + String[] actual = getArgument("stringArray").stringArray();
|
| + assertEquals("Expected length and actual length are different.", expected.length,
|
| + actual.length);
|
| + MoreAsserts.assertEquals(mismatchMessage("stringArary"), expected, actual);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "string1", stringVar = "has vowel"),
|
| + @Parameter.Argument(name = "string2", stringVar = "hs vwl"),
|
| + @Parameter.Argument(name = "stringArray1", stringArray = {
|
| + "apple", "banana", "orange", "melon", "lemon"}),
|
| + @Parameter.Argument(name = "stringArray2", stringArray = {
|
| + "ppl", "bnn", "mln", "lmn"}),
|
| + @Parameter.Argument(name = "int1", intVar = 2),
|
| + @Parameter.Argument(name = "int2", intVar = 10),
|
| + @Parameter.Argument(name = "intArray1", intArray = {
|
| + 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}),
|
| + @Parameter.Argument(name = "intArray2", intArray = {4})})})
|
| + public void testMethodParametersWithMultipleArguments1() {
|
| + String stringVar = getArgument("string1").stringVar();
|
| + assertEquals(mismatchMessage("string1"), "has vowel", stringVar);
|
| +
|
| + stringVar = getArgument("string2").stringVar();
|
| + assertEquals(mismatchMessage("string2"), "hs vwl", stringVar);
|
| +
|
| + int intVar = getArgument("int1").intVar();
|
| + assertEquals(mismatchMessage("int1"), 2, intVar);
|
| +
|
| + intVar = getArgument("int2").intVar();
|
| + assertEquals(mismatchMessage("int2"), 10, intVar);
|
| +
|
| + String[] stringArray = getArgument("stringArray1").stringArray();
|
| + String[] expectedStringArray = new String[] {"apple", "banana", "orange", "melon", "lemon"};
|
| + MoreAsserts.assertEquals("stringArray1 did not match", expectedStringArray, stringArray);
|
| +
|
| + stringArray = getArgument("stringArray2").stringArray();
|
| + expectedStringArray = new String[] {"ppl", "bnn", "mln", "lmn"};
|
| + MoreAsserts.assertEquals("stringArray2 did not match", expectedStringArray, stringArray);
|
| +
|
| + int[] intArray = getArgument("intArray1").intArray();
|
| + int[] expectedIntArray = new int[] {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
|
| + MoreAsserts.assertEquals("intArray1 did not match", expectedIntArray, intArray);
|
| +
|
| + intArray = getArgument("intArray2").intArray();
|
| + expectedIntArray = new int[] {4};
|
| + MoreAsserts.assertEquals("intArray2 did not match", expectedIntArray, intArray);
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "string1", stringVar = "testvalue"),
|
| + @Parameter.Argument(name = "string2", stringVar = "blahblah"),
|
| + @Parameter.Argument(name = "int1", intVar = 4),
|
| + @Parameter.Argument(name = "int2", intVar = 0)})})
|
| + public void testMethodParametersWithMultipleArguments2() {
|
| + assertEquals("bar variable should equals \"testvalue\"", "testvalue",
|
| + getArgument("string1").stringVar());
|
| + assertEquals("foo variable should equals \"blahblah\"", "blahblah",
|
| + getArgument("string2").stringVar());
|
| + assertEquals("intArg1 variable should equals 4", 4,
|
| + getArgument("int1").intVar());
|
| + assertEquals("intArg2 variable should equals 0", 0,
|
| + getArgument("int2").intVar());
|
| + }
|
| +
|
| + @SmallTest
|
| + @ParameterizedTest.Set(tests = {
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "string1", stringVar = "testvalue"),
|
| + @Parameter.Argument(name = "string2", stringVar = "blahblah"),
|
| + @Parameter.Argument(name = "int1", intVar = 4),
|
| + @Parameter.Argument(name = "int2", intVar = 0)})})})
|
| + public void testParameterArgumentsWithParameterSetOfOneTest() {
|
| + assertEquals("bar variable should equals \"testvalue\"", "testvalue",
|
| + getArgument("string1").stringVar());
|
| + assertEquals("foo variable should equals \"blahblah\"", "blahblah",
|
| + getArgument("string2").stringVar());
|
| + assertEquals("intArg1 variable should equals 4", 4,
|
| + getArgument("int1").intVar());
|
| + assertEquals("intArg2 variable should equals 0", 0,
|
| + getArgument("int2").intVar());
|
| + }
|
| +
|
| + /**
|
| + * These next three tests all accomplish the same task but in different ways.
|
| + *
|
| + * testParameterArgumentsWithParameterSetOfMoreThanOneTest tests fib() by having a set for
|
| + * each possible input. While this is fine, it is rather verbose.
|
| + *
|
| + * Continued @ testSingleTestParameterArgumentsWithParameterSet
|
| + */
|
| + @SmallTest
|
| + @ParameterizedTest.Set(tests = {
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 1),
|
| + @Parameter.Argument(name = "output", intVar = 0)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 2),
|
| + @Parameter.Argument(name = "output", intVar = 1)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 3),
|
| + @Parameter.Argument(name = "output", intVar = 1)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 4),
|
| + @Parameter.Argument(name = "output", intVar = 2)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 5),
|
| + @Parameter.Argument(name = "output", intVar = 3)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 6),
|
| + @Parameter.Argument(name = "output", intVar = 5)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 7),
|
| + @Parameter.Argument(name = "output", intVar = 8)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 8),
|
| + @Parameter.Argument(name = "output", intVar = 13)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 9),
|
| + @Parameter.Argument(name = "output", intVar = 21)})}),
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input", intVar = 10),
|
| + @Parameter.Argument(name = "output", intVar = 34)})})})
|
| + public void testParameterArgumentsWithParameterSetOfMoreThanOneTest() {
|
| + int input = getArgument("input").intVar();
|
| + int expected = getArgument("output").intVar();
|
| + int actual = fib(input);
|
| + assertEquals("Output should be the fibonacci number at index input.", expected, actual);
|
| + }
|
| +
|
| + /**
|
| + * This is better than the implementation of
|
| + * testParameterArgumentsWithParameterSetOfMoreThanOneTest. It reduces the number of
|
| + * {@link ParameterizedTest} annotations by using an intArray instead of an intVar.
|
| + * Computationally, this will be faster too because it only has to set up the parameters once
|
| + * for the single ParameterizedTest.
|
| + *
|
| + * Continued @ testSingleTestParameterArgumentsWithParameterSet
|
| + */
|
| + @SmallTest
|
| + @ParameterizedTest.Set(tests = {
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input",
|
| + intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}),
|
| + @Parameter.Argument(name = "expected",
|
| + intArray = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34})})})})
|
| + public void testSingleTestParameterArgumentsWithParameterSet() {
|
| + int[] input = getArgument("input").intArray();
|
| + int[] expected = getArgument("expected").intArray();
|
| + int[] actual = new int[input.length];
|
| + for (int i = 0; i < input.length; i++) {
|
| + actual[i] = fib(input[i]);
|
| + }
|
| + MoreAsserts.assertEquals("Output should be the fibonacci number at each index input.",
|
| + expected, actual);
|
| + }
|
| +
|
| + /**
|
| + * This is the best implementation to test fibonacci.
|
| + *
|
| + * It's computationally the same speed at testSingleTestParameterArgumentsWithParameterSet. But
|
| + * we don't need to actually have a ParameterizedTestSet.
|
| + */
|
| + @SmallTest
|
| + @ParameterizedTest(parameters = {
|
| + @Parameter(
|
| + tag = MethodParameter.PARAMETER_TAG,
|
| + arguments = {
|
| + @Parameter.Argument(name = "input",
|
| + intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}),
|
| + @Parameter.Argument(name = "expected",
|
| + intArray = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34})})})
|
| + public void testSingleTestParameterArgumentsWithoutParameterSet() {
|
| + int[] input = getArgument("input").intArray();
|
| + int[] expected = getArgument("expected").intArray();
|
| + int[] actual = new int[input.length];
|
| + for (int i = 0; i < input.length; i++) {
|
| + actual[i] = fib(input[i]);
|
| + }
|
| + MoreAsserts.assertEquals("Output should be the fibonacci number at each index input.",
|
| + expected, actual);
|
| + }
|
| +
|
| + private static String mismatchMessage(String name) {
|
| + return String.format("The ParameterArgument %s does not match expected value.", name);
|
| + }
|
| +
|
| + private static int fib(int input) {
|
| + if (input <= 0) {
|
| + throw new IllegalArgumentException("Input must be greater than 0.");
|
| + }
|
| + if (input == 1) {
|
| + return 0;
|
| + }
|
| + if (input == 2) {
|
| + return 1;
|
| + }
|
| + int[] temp = new int[input];
|
| + temp[0] = 0;
|
| + temp[1] = 1;
|
| + for (int i = 2; i < input; i++) {
|
| + temp[i] = temp[i - 1] + temp[i - 2];
|
| + }
|
| + return temp[input - 1];
|
| + }
|
| +
|
| + private Parameter.Argument getArgument(String name) {
|
| + return getParameterReader().getParameterArgument(MethodParameter.PARAMETER_TAG, name);
|
| + }
|
| +}
|
|
|