package junitparams.usage;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import junitparams.FileParameters;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import junitparams.ParametersReaderProvidersTest;
import junitparams.ParamsConverterTest;
import junitparams.converters.Param;
import junitparams.custom.combined.CombinedParameters;
import junitparams.mappers.CsvWithHeaderMapper;
import junitparams.naming.TestCaseName;
import junitparams.usage.person_example.PersonMapper;
import junitparams.usage.person_example.PersonTest;
import junitparams.usage.person_example.PersonType;
import static junitparams.JUnitParamsRunner.*;
import static org.assertj.core.api.Assertions.*;
@RunWith(JUnitParamsRunner.class)
public class SamplesOfUsageTest {
@Test
@Parameters({"AAA,1", "BBB,2"})
public void paramsInAnnotation(String p1, Integer p2) { }
@Test
@Parameters({"AAA|1", "BBB|2"})
public void paramsInAnnotationPipeSeparated(String p1, Integer p2) { }
@Test
@Parameters
public void paramsInDefaultMethod(String p1, Integer p2) { }
private Object parametersForParamsInDefaultMethod() {
return new Object[]{new Object[]{"AAA", 1}, new Object[]{"BBB", 2}};
}
@Test
@Parameters(method = "named1")
public void paramsInNamedMethod(String p1, Integer p2) { }
private Object named1() {
return new Object[]{"AAA", 1};
}
@Test
@Parameters(method = "named2,named3")
public void paramsInMultipleMethods(String p1, Integer p2) { }
private Object named2() {
return new Object[]{"AAA", 1};
}
private Object named3() {
return new Object[]{"BBB", 2};
}
@Test
@Parameters(method = "named4")
public void paramsWithVarargs(String... args) {
assertThat(args).isEqualTo(new String[]{"AAA", "BBB"});
}
private Object named4() { return new Object[]{new String[]{"AAA", "BBB"}}; }
@Test
@Parameters(source = ParametersReaderProvidersTest.OneIntegerProvider.class)
public void paramsFromExternalClass(int integer) { }
@Test
@Parameters
public void paramsInCollection(String p1) { }
private List<String> parametersForParamsInCollection() { return Arrays.asList("a"); }
@Test
@Parameters
public void paramsInIterator(String p1) { }
private Iterator<String> parametersForParamsInIterator() { return Arrays.asList("a").iterator(); }
@Test
@Parameters({"SOME_VALUE", "OTHER_VALUE"})
public void enumsAsParamInAnnotation(PersonType person) { }
@Test
@Parameters
public void enumsAsParamsInMethod(PersonType person) { }
private PersonType[] parametersForEnumsAsParamsInMethod() { return (PersonType[]) new PersonType[] {PersonType.SOME_VALUE}; }
@Test
@Parameters(source = PersonType.class)
public void enumAsSource(PersonType personType) {
}
@Test
@Parameters
public void wrapParamsWithConstructor(PersonTest.Person person) { }
private Object parametersForWrapParamsWithConstructor() {
return new Object[]{new Object[]{"first", 1}, new Object[]{"second", 2}};
}
// Android-changed: does not work when run on device as it does not have access to the file
@Ignore
@Test
@FileParameters("src/test/resources/test.csv")
public void loadParamsFromCsv(int age, String name) { }
// Android-changed: does not work when run on device as it does not have access to the file
@Ignore
@Test
@FileParameters(value = "src/test/resources/test.csv", mapper = PersonMapper.class)
public void loadParamsFromAnyFile(PersonTest.Person person) { }
@Test
@FileParameters("classpath:test.csv")
public void loadParamsFromClasspath(int age, String name) { }
@Test
@FileParameters(value = "classpath:with_header.csv", mapper = CsvWithHeaderMapper.class)
public void loadParamsFromCsvWithHeader(int id, String name) { }
@Test
@Parameters({ "01.12.2012" })
public void convertParams(@Param(converter = ParamsConverterTest.SimpleDateConverter.class) Date date) {}
@Test
@Parameters("please\\, escape commas if you use it here and don't want your parameters to be splitted")
public void commasInParametersUsage(String phrase) { }
// 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
@Parameters({ "1,1", "2,2", "3,6" })
@TestCaseName("factorial({0}) = {1}")
public void customNamesForTestCase(int argument, int result) { }
// 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
@Parameters({ "value1, value2", "value3, value4" })
@TestCaseName("[{index}] {method}: {params}")
public void predefinedMacroForTestCaseNames(String param1, String param2) { }
public Object mixedParameters() {
boolean booleanValue = true;
int[] primitiveArray = {1, 2, 3};
String stringValue = "Test";
String[] stringArray = {"one", "two", null};
return $(
$(booleanValue, primitiveArray, stringValue, stringArray)
);
}
// 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
@Parameters(method = "mixedParameters")
@TestCaseName("{0}, {1}, {2}, {3}")
public void usageOfMultipleTypesOfParameters(
boolean booleanValue, int[] primitiveArray, String stringValue, String[] stringArray) {
}
@Test
@CombinedParameters({"AAA,BBB", "1|2"})
public void combineParamsInAnnotation(String p1, Integer p2) {}
}