package junitparams.naming; import junitparams.JUnitParamsRunner; import junitparams.Parameters; import junitparams.internal.TestMethod; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.TestClass; import java.lang.reflect.Method; import static org.junit.Assert.assertEquals; @RunWith(JUnitParamsRunner.class) public class MacroSubstitutionNamingStrategyTest { public Object parametersForTestNaming() { return new Object[]{new Object[]{"withoutTestCaseAnnotation", "[0] value (withoutTestCaseAnnotation)"}, new Object[]{"withAnnotationWithoutTemplate", "[0] value (withAnnotationWithoutTemplate)"}, new Object[]{"withEmptyTemplate", "[0] value (withEmptyTemplate)"}, new Object[]{"whenTemplateResultedToEmptyName", "[0] value (whenTemplateResultedToEmptyName)"}, new Object[]{"withoutMacro", "plain name"}, new Object[]{"withIndexMacro", "0"}, new Object[]{"withParamsMacro", "value"}, new Object[]{"withMethodNameMacro", "withMethodNameMacro"}, new Object[]{"withCombinationOfMacros", "0: withCombinationOfMacros(value)"}, new Object[]{"withMacroNameWrittenInDifferentCase", "value value value"}, new Object[]{"withMethodParameterIndexInsideArgumentsArray", "value"}, new Object[]{"withMethodParameterIndexOutsideArgumentsArray", "Here is 100 argument:"}, new Object[]{"whenGivenMacroDoesntExist", "{not_existing_macro}"}}; } // 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 public void testNaming(String methodName, String expectedTestCaseName) throws NoSuchMethodException { TestCaseNamingStrategy strategy = createNamingStrategyForMethod(methodName, String.class); String name = strategy.getTestCaseName(0, new Object[]{"value"}); assertEquals(expectedTestCaseName, name); } public void withoutTestCaseAnnotation(String param1) { } @TestCaseName("plain name") public void withoutMacro(String param1) { } @TestCaseName("{index}") public void withIndexMacro(String param1) { } @TestCaseName("{params}") public void withParamsMacro(String param1) { } @TestCaseName("{method}") public void withMethodNameMacro(String param1) { } @TestCaseName public void withAnnotationWithoutTemplate(String param1) { } @TestCaseName("") public void withEmptyTemplate(String param1) { } @TestCaseName("{index}: {method}({params})") public void withCombinationOfMacros(String param1) { } @TestCaseName("{params} {PARAMS} {PaRams}") public void withMacroNameWrittenInDifferentCase(String param1) { } @TestCaseName("{0}") public void withMethodParameterIndexInsideArgumentsArray(String param1) { } @TestCaseName("Here is 100 argument:{100}") public void withMethodParameterIndexOutsideArgumentsArray(String param1) { } @TestCaseName("{100}") public void whenTemplateResultedToEmptyName(String param1) { } @TestCaseName("{not_existing_macro}") public void whenGivenMacroDoesntExist(String param1) { } private TestCaseNamingStrategy createNamingStrategyForMethod(String name, Class... parameterTypes) throws NoSuchMethodException { TestMethod method = getCurrentClassMethod(name, parameterTypes); return new MacroSubstitutionNamingStrategy(method); } private TestMethod getCurrentClassMethod(String name, Class... parameterTypes) throws NoSuchMethodException { final Method method = MacroSubstitutionNamingStrategyTest.class.getMethod(name, parameterTypes); return new TestMethod(new FrameworkMethod(method), new TestClass(this.getClass())); } }