Add alternative enum assigned name mapping
[mdsal.git] / binding / yang-binding / src / test / java / org / opendaylight / yangtools / yang / binding / BindingMappingTest.java
index 0b91deef0d316784d380d10f98b7d7c64a4f4e59..7ec20f8cda7cdbecdcd70602189e3824ac4f92d4 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.binding;
 
+import static com.google.common.collect.ImmutableList.of;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
@@ -16,6 +17,9 @@ import static org.junit.Assert.fail;
 import java.lang.reflect.Constructor;
 import java.net.URI;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
@@ -56,4 +60,54 @@ public class BindingMappingTest {
             throw e.getCause();
         }
     }
-}
\ No newline at end of file
+
+    @Test
+    public void mapEnumAssignedNamesTest() {
+        // Okay identifier
+        assertEqualMapping("__", "__");
+        assertEqualMapping("True", "true");
+        assertEqualMapping("ĽaľahoPapľuhu", "ľaľaho papľuhu");
+
+        // Contains a '$', but that's okay
+        assertEqualMapping("$", "$");
+        assertEqualMapping("$abc", "$abc");
+        assertEqualMapping("A$bc", "a$bc");
+        assertEqualMapping("Ab$c", "ab$c");
+        assertEqualMapping("Abc$", "abc$");
+
+        // Mostly okay, but numbers need to be prefixed
+        assertEqualMapping(of("AZ", "_09"), of("a-z", "0-9"));
+
+        // Invalid identifier (conflicts with a Java 9 keyword)
+        assertEqualMapping("_", "_");
+
+        // Invalid characters, fall back to bijection
+        assertEqualMapping("$$2A$", "*");
+        assertEqualMapping("$$2E$", ".");
+        assertEqualMapping("$$2F$", "/");
+        assertEqualMapping("$$3F$", "?");
+        assertEqualMapping("$a$2A$a", "a*a");
+
+        // Conflict, fallback to bijection
+        assertEqualMapping(of("_09", "$0$2D$9"), of("_09", "0-9"));
+        assertEqualMapping(of("$09", "$0$2D$9"), of("09", "0-9"));
+        assertEqualMapping(of("aZ", "$a$2D$z"), of("aZ", "a-z"));
+        assertEqualMapping(of("$a2$2E$5", "a25"), of("a2.5", "a25"));
+        assertEqualMapping(of("$a2$2E$5", "$a2$2D$5"), of("a2.5", "a2-5"));
+        assertEqualMapping(of("$ľaľaho$20$papľuhu", "$ľaľaho$20$$20$papľuhu"), of("ľaľaho papľuhu", "ľaľaho  papľuhu"));
+    }
+
+    private static void assertEqualMapping(final String mapped, final String yang) {
+        assertEqualMapping(of(mapped), of(yang));
+    }
+
+    private static void assertEqualMapping(final List<String> mapped, final List<String> yang) {
+        assertEquals(mapped.size(), yang.size());
+        final Map<String, String> expected = new HashMap<>();
+        for (int i = 0; i < mapped.size(); ++i) {
+            expected.put(yang.get(i), mapped.get(i));
+        }
+
+        assertEquals(expected, BindingMapping.mapEnumAssignedNames(yang));
+    }
+}