Allow @TestCaseName to be for names that are compatible with CTS/AJUR am: deb706635e am: a4ec4e26a9 am: 97bb2c51d7 am: 7e97deb1b6 am: cd5c1d11b3

Original change: https://android-review.googlesource.com/c/platform/external/junit-params/+/2059654

Change-Id: I3476c1eae468616a0de36fa95cc5a40a584df024
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/README.google b/README.google
index 47541ba..a1ef97e 100644
--- a/README.google
+++ b/README.google
@@ -18,3 +18,6 @@
                  and prevent use of @TestCaseName.
                  Ignore tests broken by the above change.
       38419944 - Fix sharding on CTS.
+      36541809 - Partially revert 36541809 to allow @TestCaseName to be
+                 used as long as it generates a name that is compatible
+                 with CTS and AJUR.
diff --git a/src/main/java/junitparams/naming/MacroSubstitutionNamingStrategy.java b/src/main/java/junitparams/naming/MacroSubstitutionNamingStrategy.java
index 1bdcafb..3386e51 100644
--- a/src/main/java/junitparams/naming/MacroSubstitutionNamingStrategy.java
+++ b/src/main/java/junitparams/naming/MacroSubstitutionNamingStrategy.java
@@ -23,6 +23,9 @@
         this.method = testMethod;
     }
 
+    // Android-added: allowable test names
+    private static final Pattern ALLOWABLE_TEST_NAMES = Pattern.compile("\\w+(\\[\\d+])?");
+
     @Override
     public String getTestCaseName(int parametersIndex, Object parameters) {
         TestCaseName testCaseName = method.getAnnotation(TestCaseName.class);
@@ -30,6 +33,16 @@
         String template = getTemplate(testCaseName);
         String builtName = buildNameByTemplate(template, parametersIndex, parameters);
 
+        // 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
+        if (!ALLOWABLE_TEST_NAMES.matcher(builtName).matches()) {
+            throw new IllegalStateException(String.format(
+                    "@TestCaseName(\"%s\") not currently supported as it generated a test name of"
+                            + " \"%s\" which will not work properly in CTS, must match \"%s\"",
+                            template, builtName, ALLOWABLE_TEST_NAMES));
+        }
+
         if (builtName.trim().isEmpty()) {
             return buildNameByTemplate(DEFAULT_TEMPLATE, parametersIndex, parameters);
         } else {
@@ -39,12 +52,7 @@
 
     private String getTemplate(TestCaseName testCaseName) {
         if (testCaseName != null) {
-            // 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
-            throw new IllegalStateException(
-                    "@TestCaseName not currently supported as it breaks running tests in CTS");
-            // return testCaseName.value();
+            return testCaseName.value();
         }
 
         return DEFAULT_TEMPLATE;