package junitparams.naming;
import org.junit.AfterClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.Description;
import org.junit.runner.Request;
import org.junit.runner.RunWith;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import static org.assertj.core.api.Assertions.*;
@RunWith(JUnitParamsRunner.class)
public class NamingStrategyIsUsedByRunnerTest {
@AfterClass
public static void checkTestCaseNames() {
Description rootDescription = getTestClassDescription();
String className = "(" + NamingStrategyIsUsedByRunnerTest.class.getCanonicalName() + ")";
Description sampleMethodDescription = getChildDescriptionByName(rootDescription, "sampleMethod");
assertThat(sampleMethodDescription.getChildren()).extracting("displayName").containsExactly(
"[0] Well formed name of sampleMethod with param1" + className,
"[1] Well formed name of sampleMethod with param2" + className);
}
// 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({"param1", "param2"})
@TestCaseName("[{index}] Well formed name of {method} with {params}")
public void sampleMethod(String parameter) {
}
private static Description getTestClassDescription() {
return Request.aClass(NamingStrategyIsUsedByRunnerTest.class).getRunner().getDescription();
}
private static Description getChildDescriptionByName(Description parent, String expectedName) {
for (Description childDescription : parent.getChildren()) {
if (expectedName.equals(childDescription.getDisplayName())) {
return childDescription;
}
}
return null;
}
}