Snap for 8479413 from 7e97deb1b6e94e0c2a634cc812f6303f23737af2 to tm-release

Change-Id: I8d00fb79aceacec8722fb593d91fc524c3119e2c
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;