2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.binding.contract;
10 import static org.junit.Assert.assertEquals;
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;
19 public class NamingTest {
22 public void testGetModelRootPackageName() {
23 assertEquals("org.opendaylight.yang.gen.v1.test.rev990939",
24 Naming.getModelRootPackageName("org.opendaylight.yang.gen.v1.test.rev990939"));
28 public void testGetMethodName() {
29 assertEquals("testLocalName", Naming.getMethodName(QName.create("testNS", "testLocalName")));
30 assertEquals("testYangIdentifier", Naming.getMethodName("TestYangIdentifier"));
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 "));
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 "));
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")));
66 public void mapEnumAssignedNamesTest() {
68 assertEqualMapping("__", "__");
69 assertEqualMapping("True", "true");
70 assertEqualMapping("ĽaľahoPapľuhu", "ľaľaho papľuhu");
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$");
79 // Mostly okay, but numbers need to be prefixed
80 assertEqualMapping(List.of("AZ", "_09"), List.of("a-z", "0-9"));
82 // Invalid identifier (conflicts with a Java 9 keyword)
83 assertEqualMapping("$_", "_");
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");
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"));
102 private static void assertEqualMapping(final String mapped, final String yang) {
103 assertEqualMapping(List.of(mapped), List.of(yang));
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));
113 assertEquals(expected, Naming.mapEnumAssignedNames(yang));
117 public void yangDataMapping() {
118 final var ns = QNameModule.of("unused");
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")));