Allow pbundle_as_map in carrier config.

Bug: 402498716
Change-Id: Ia96e46d8b24f005d267b6a4852bb7420be20a39d
diff --git a/tests/src/com/android/carrierconfig/CarrierConfigTest.java b/tests/src/com/android/carrierconfig/CarrierConfigTest.java
index 4d753a1..3ee0273 100644
--- a/tests/src/com/android/carrierconfig/CarrierConfigTest.java
+++ b/tests/src/com/android/carrierconfig/CarrierConfigTest.java
@@ -34,9 +34,11 @@
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 import junit.framework.AssertionFailedError;
@@ -173,44 +175,63 @@
      */
     public void testVariableNames() {
         final Set<String> varXmlNames = getCarrierConfigXmlNames();
+        ArrayDeque<String> pathStack = new ArrayDeque<String>();
         // organize them into sets by type or unknown
         forEachConfigXml(new ParserChecker() {
             public void check(XmlPullParser parser, String mccmnc) throws XmlPullParserException,
                     IOException {
                 int event;
                 while (((event = parser.next()) != XmlPullParser.END_DOCUMENT)) {
-                    if (event == XmlPullParser.START_TAG) {
-                        switch (parser.getName()) {
-                            case "int-array":
-                            case "string-array":
-                                // string-array and int-array require the 'num' attribute
-                                final String varNum = parser.getAttributeValue(null, "num");
-                                assertNotNull("No 'num' attribute in array: "
-                                        + parser.getPositionDescription(), varNum);
-                            case "int":
-                            case "long":
-                            case "boolean":
-                            case "string":
-                                // NOTE: This doesn't check for other valid Bundle values, but it
-                                // is limited to the key types in CarrierConfigManager.
-                                final String varName = parser.getAttributeValue(null, "name");
-                                assertNotNull("No 'name' attribute: "
-                                        + parser.getPositionDescription(), varName);
-                                assertTrue("Unknown variable: '" + varName
-                                        + "' at " + parser.getPositionDescription(),
-                                        varXmlNames.contains(varName));
-                                // TODO: Check that the type is correct.
-                                break;
-                            case "carrier_config_list":
-                            case "item":
-                            case "carrier_config":
-                                // do nothing
-                                break;
-                            default:
-                                fail("unexpected tag: '" + parser.getName()
-                                        + "' at " + parser.getPositionDescription());
-                                break;
-                        }
+                    switch (event) {
+                        case XmlPullParser.START_TAG:
+                            String elementName = parser.getName();
+                            String pathString = String.join(
+                                "/",
+                                Optional.ofNullable(pathStack.peek()).orElse(""),
+                                elementName);
+                            pathStack.push(pathString);
+
+                            switch (elementName) {
+                                case "int-array":
+                                case "string-array":
+                                    // string-array and int-array require the 'num' attribute
+                                    final String varNum = parser.getAttributeValue(null, "num");
+                                    assertNotNull("No 'num' attribute in array: "
+                                            + parser.getPositionDescription(), varNum);
+                                case "int":
+                                case "long":
+                                case "boolean":
+                                case "pbundle_as_map":
+                                case "string":
+                                    // NOTE: This doesn't check for other valid Bundle values, but
+                                    // it is limited to the key types in CarrierConfigManager.
+                                    final String varName = parser.getAttributeValue(null, "name");
+                                    assertNotNull("No 'name' attribute: "
+                                            + parser.getPositionDescription(), varName);
+                                    if (!pathString.equals(
+                                          "/carrier_config/pbundle_as_map/int-array")) {
+                                        assertTrue("Unknown variable: '" + varName
+                                            + "' at " + parser.getPositionDescription(),
+                                            varXmlNames.contains(varName));
+                                    }
+                                    // TODO: Check that the type is correct.
+                                    break;
+                                case "carrier_config_list":
+                                case "item":
+                                case "carrier_config":
+                                    // do nothing
+                                    break;
+                                default:
+                                    fail("unexpected tag: '" + parser.getName()
+                                            + "' at " + parser.getPositionDescription());
+                                    break;
+                            }
+                        break;
+                    case XmlPullParser.END_TAG:
+                        pathStack.pop();
+                        break;
+                    default:
+                        break;
                     }
                 }
             }