Migrate users of deprecated yang.common methods
[mdsal.git] / binding / yang-binding / src / test / java / org / opendaylight / yangtools / yang / binding / contract / NamingTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.binding.contract;
9
10 import static org.junit.Assert.assertEquals;
11
12 import java.util.HashMap;
13 import java.util.List;
14 import org.junit.Test;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.common.QNameModule;
17 import org.opendaylight.yangtools.yang.common.YangDataName;
18
19 public class NamingTest {
20
21     @Test
22     public void testGetModelRootPackageName() {
23         assertEquals("org.opendaylight.yang.gen.v1.test.rev990939",
24             Naming.getModelRootPackageName("org.opendaylight.yang.gen.v1.test.rev990939"));
25     }
26
27     @Test
28     public void testGetMethodName() {
29         assertEquals("testLocalName", Naming.getMethodName(QName.create("testNS", "testLocalName")));
30         assertEquals("testYangIdentifier", Naming.getMethodName("TestYangIdentifier"));
31     }
32
33     @Test
34     public void testGetClassName() {
35         assertEquals("TestClass", Naming.getClassName(QName.create("testNS", "testClass")));
36         assertEquals("TestClass", Naming.getClassName("testClass"));
37         assertEquals("", Naming.getClassName(""));
38         assertEquals("SomeTestingClassName", Naming.getClassName("  some-testing_class name   "));
39         assertEquals("_0SomeTestingClassName", Naming.getClassName("  0 some-testing_class name   "));
40     }
41
42     @Test
43     public void testGetPropertyName() {
44         assertEquals("test", Naming.getPropertyName("Test"));
45         assertEquals("test", Naming.getPropertyName("test"));
46         assertEquals("xmlClass", Naming.getPropertyName("Class"));
47         assertEquals("_5", Naming.getPropertyName("5"));
48         assertEquals("", Naming.getPropertyName(""));
49         assertEquals("someTestingParameterName", Naming.getPropertyName("  some-testing_parameter   name   "));
50         assertEquals("_0someTestingParameterName", Naming.getPropertyName("  0some-testing_parameter   name   "));
51     }
52
53     @Test
54     public void basicTest() {
55         assertEquals("org.opendaylight.yang.gen.v1.test.uri.rev171026",
56             Naming.getRootPackageName(QName.create("test:URI", "2017-10-26", "test")));
57         assertEquals("org.opendaylight.yang.gen.v1.urn.m.o.d.u.l.e.n.a.m.e.t.e.s.t._case._1digit.rev130910",
58             Naming.getRootPackageName(QNameModule.ofRevision(
59                 "urn:m*o+d,u;l=e.n/a-m@e.t$e#s't.case.1digit", "2013-09-10")));
60         assertEquals("_1testpublic", Naming.normalizePackageName("1testpublic"));
61         assertEquals("Test", Naming.getGetterSuffix(QName.create("test", "test")));
62         assertEquals("XmlClass", Naming.getGetterSuffix(QName.create("test", "class")));
63     }
64
65     @Test
66     public void mapEnumAssignedNamesTest() {
67         // Okay identifier
68         assertEqualMapping("__", "__");
69         assertEqualMapping("True", "true");
70         assertEqualMapping("ĽaľahoPapľuhu", "ľaľaho papľuhu");
71
72         // Contains a '$', but that's okay
73         assertEqualMapping("$", "$");
74         assertEqualMapping("$abc", "$abc");
75         assertEqualMapping("A$bc", "a$bc");
76         assertEqualMapping("Ab$c", "ab$c");
77         assertEqualMapping("Abc$", "abc$");
78
79         // Mostly okay, but numbers need to be prefixed
80         assertEqualMapping(List.of("AZ", "_09"), List.of("a-z", "0-9"));
81
82         // Invalid identifier (conflicts with a Java 9 keyword)
83         assertEqualMapping("$_", "_");
84
85         // Invalid characters, fall back to bijection
86         assertEqualMapping("$$2A$", "*");
87         assertEqualMapping("$$2E$", ".");
88         assertEqualMapping("$$2F$", "/");
89         assertEqualMapping("$$3F$", "?");
90         assertEqualMapping("$a$2A$a", "a*a");
91
92         // Conflict, fallback to bijection
93         assertEqualMapping(List.of("_09", "$0$2D$9"), List.of("_09", "0-9"));
94         assertEqualMapping(List.of("$09", "$0$2D$9"), List.of("09", "0-9"));
95         assertEqualMapping(List.of("aZ", "$a$2D$z"), List.of("aZ", "a-z"));
96         assertEqualMapping(List.of("$a2$2E$5", "a25"), List.of("a2.5", "a25"));
97         assertEqualMapping(List.of("$a2$2E$5", "$a2$2D$5"), List.of("a2.5", "a2-5"));
98         assertEqualMapping(List.of("$ľaľaho$20$papľuhu", "$ľaľaho$20$$20$papľuhu"),
99             List.of("ľaľaho papľuhu", "ľaľaho  papľuhu"));
100     }
101
102     private static void assertEqualMapping(final String mapped, final String yang) {
103         assertEqualMapping(List.of(mapped), List.of(yang));
104     }
105
106     private static void assertEqualMapping(final List<String> mapped, final List<String> yang) {
107         assertEquals(mapped.size(), yang.size());
108         final var expected = new HashMap<String, String>();
109         for (int i = 0; i < mapped.size(); ++i) {
110             expected.put(yang.get(i), mapped.get(i));
111         }
112
113         assertEquals(expected, Naming.mapEnumAssignedNames(yang));
114     }
115
116     @Test
117     public void yangDataMapping() {
118         final var ns = QNameModule.of("unused");
119
120         // single ascii compliant non-conflicting word - remain as is
121         assertEquals("single", Naming.mapYangDataName(new YangDataName(ns, "single")));
122         // ascii compliant - non-compliany chars only encoded
123         assertEquals("$abc$20$cde", Naming.mapYangDataName(new YangDataName(ns, "abc cde")));
124         // latin1 compliant -> latin chars normalized, non-compliant chars are encoded
125         assertEquals("$ľaľaho$20$papľuhu", Naming.mapYangDataName(new YangDataName(ns, "ľaľaho papľuhu")));
126         // latin1 non-compliant - all non-compliant characters encoded
127         assertEquals("$привет$20$papľuhu", Naming.mapYangDataName(new YangDataName(ns, "привет papľuhu")));
128     }
129 }