RFC8040 'rc:yang-data' support for mdsal binding generator
[mdsal.git] / binding / mdsal-binding-spec-util / src / test / java / org / opendaylight / mdsal / binding / spec / naming / BindingMappingTest.java
index 7d6eb2cc2665b428b1aec4063b502631747fefaa..64299d9dea2c3e3909c9db3f513c30ed9b16e6b8 100644 (file)
@@ -7,16 +7,8 @@
  */
 package org.opendaylight.mdsal.binding.spec.naming;
 
-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;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -24,42 +16,52 @@ import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 
 public class BindingMappingTest {
+    @Test
+    public void testGetModelRootPackageName() {
+        assertEquals("org.opendaylight.yang.gen.v1.test.rev990939",
+            BindingMapping.getModelRootPackageName("org.opendaylight.yang.gen.v1.test.rev990939"));
+    }
 
     @Test
-    public void basicTest() {
-        assertTrue(BindingMapping.getRootPackageName(QName.create(QNameModule.create(URI.create("test:URI"),
-                Revision.of("2017-10-26")), "test")).contains("test.uri"));
-        assertNull(BindingMapping.normalizePackageName(null));
-        assertTrue(BindingMapping.normalizePackageName("1testpublic").contains("_1testpublic"));
-        assertTrue(BindingMapping.getMethodName(QName.create("testNS", "testLocalName")).equals("testLocalName"));
-        assertTrue(BindingMapping.getMethodName("TestYangIdentifier").equals("testYangIdentifier"));
-        assertTrue(BindingMapping.getClassName(QName.create("testNS", "testClass")).equals("TestClass"));
-        assertTrue(BindingMapping.getClassName("testClass").equals("TestClass"));
-        assertTrue(BindingMapping.getGetterSuffix(QName.create("test", "test")).equals("Test"));
-        assertTrue(BindingMapping.getGetterSuffix(QName.create("test", "class")).equals("XmlClass"));
-        assertTrue(BindingMapping.getPropertyName("Test").equals("test"));
-        assertTrue(BindingMapping.getPropertyName("test").equals("test"));
-        assertTrue(BindingMapping.getPropertyName("Class").equals("xmlClass"));
+    public void testGetMethodName() {
+        assertEquals("testLocalName", BindingMapping.getMethodName(QName.create("testNS", "testLocalName")));
+        assertEquals("testYangIdentifier", BindingMapping.getMethodName("TestYangIdentifier"));
+    }
+
+    @Test
+    public void testGetClassName() {
+        assertEquals("TestClass", BindingMapping.getClassName(QName.create("testNS", "testClass")));
+        assertEquals("TestClass", BindingMapping.getClassName("testClass"));
+        assertEquals("", BindingMapping.getClassName(""));
+        assertEquals("SomeTestingClassName", BindingMapping.getClassName("  some-testing_class name   "));
+        assertEquals("_0SomeTestingClassName", BindingMapping.getClassName("  0 some-testing_class name   "));
+    }
+
+    @Test
+    public void testGetPropertyName() {
+        assertEquals("test", BindingMapping.getPropertyName("Test"));
+        assertEquals("test", BindingMapping.getPropertyName("test"));
+        assertEquals("xmlClass", BindingMapping.getPropertyName("Class"));
         assertEquals("_5", BindingMapping.getPropertyName("5"));
         assertEquals("", BindingMapping.getPropertyName(""));
-        assertEquals("", BindingMapping.getClassName(""));
+        assertEquals("someTestingParameterName", BindingMapping.getPropertyName("  some-testing_parameter   name   "));
+        assertEquals("_0someTestingParameterName",
+            BindingMapping.getPropertyName("  0some-testing_parameter   name   "));
     }
 
-    @Test(expected = UnsupportedOperationException.class)
-    @SuppressWarnings({ "checkstyle:illegalThrows", "checkstyle:avoidHidingCauseException" })
-    public void privateConstructTest() throws Throwable {
-        final Constructor<BindingMapping> bindingMappingConstructor = BindingMapping.class.getDeclaredConstructor();
-        assertFalse(bindingMappingConstructor.isAccessible());
-
-        bindingMappingConstructor.setAccessible(true);
-        try {
-            bindingMappingConstructor.newInstance();
-            fail("Expected exception for calling private constructor");
-        } catch (InvocationTargetException e) {
-            throw e.getCause();
-        }
+    @Test
+    public void basicTest() {
+        assertEquals("org.opendaylight.yang.gen.v1.test.uri.rev171026",
+            BindingMapping.getRootPackageName(QName.create("test:URI", "2017-10-26", "test")));
+        assertEquals("org.opendaylight.yang.gen.v1.urn.m.o.d.u.l.e.n.a.m.e.t.e.s.t._case._1digit.rev130910",
+            BindingMapping.getRootPackageName(QNameModule.create(
+                XMLNamespace.of("urn:m*o+d,u;l=e.n/a-m@e.t$e#s't.case.1digit"), Revision.of("2013-09-10"))));
+        assertEquals("_1testpublic", BindingMapping.normalizePackageName("1testpublic"));
+        assertEquals("Test", BindingMapping.getGetterSuffix(QName.create("test", "test")));
+        assertEquals("XmlClass", BindingMapping.getGetterSuffix(QName.create("test", "class")));
     }
 
     @Test
@@ -77,7 +79,7 @@ public class BindingMappingTest {
         assertEqualMapping("Abc$", "abc$");
 
         // Mostly okay, but numbers need to be prefixed
-        assertEqualMapping(of("AZ", "_09"), of("a-z", "0-9"));
+        assertEqualMapping(List.of("AZ", "_09"), List.of("a-z", "0-9"));
 
         // Invalid identifier (conflicts with a Java 9 keyword)
         assertEqualMapping("$_", "_");
@@ -90,16 +92,17 @@ public class BindingMappingTest {
         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"));
+        assertEqualMapping(List.of("_09", "$0$2D$9"), List.of("_09", "0-9"));
+        assertEqualMapping(List.of("$09", "$0$2D$9"), List.of("09", "0-9"));
+        assertEqualMapping(List.of("aZ", "$a$2D$z"), List.of("aZ", "a-z"));
+        assertEqualMapping(List.of("$a2$2E$5", "a25"), List.of("a2.5", "a25"));
+        assertEqualMapping(List.of("$a2$2E$5", "$a2$2D$5"), List.of("a2.5", "a2-5"));
+        assertEqualMapping(List.of("$ľaľaho$20$papľuhu", "$ľaľaho$20$$20$papľuhu"),
+            List.of("ľaľaho papľuhu", "ľaľaho  papľuhu"));
     }
 
     private static void assertEqualMapping(final String mapped, final String yang) {
-        assertEqualMapping(of(mapped), of(yang));
+        assertEqualMapping(List.of(mapped), List.of(yang));
     }
 
     private static void assertEqualMapping(final List<String> mapped, final List<String> yang) {
@@ -111,4 +114,16 @@ public class BindingMappingTest {
 
         assertEquals(expected, BindingMapping.mapEnumAssignedNames(yang));
     }
+
+    @Test
+    public void yangDataMapping() {
+        // single ascii compliant non-conflicting word - remain as is
+        assertEquals("single", BindingMapping.mapYangDataName("single"));
+        // ascii compliant - non-compliany chars only encoded
+        assertEquals("$abc$20$cde", BindingMapping.mapYangDataName("abc cde"));
+        // latin1 compliant -> latin chars normalized, non-compliant chars are encoded
+        assertEquals("$ľaľaho$20$papľuhu", BindingMapping.mapYangDataName("ľaľaho papľuhu"));
+        // latin1 non-compliant - all non-compliant characters encoded
+        assertEquals("$привет$20$papľuhu", BindingMapping.mapYangDataName("привет papľuhu"));
+    }
 }