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.Revision;
18 import org.opendaylight.yangtools.yang.common.XMLNamespace;
19 import org.opendaylight.yangtools.yang.common.YangDataName;
21 public class NamingTest {
24 public void testGetModelRootPackageName() {
25 assertEquals("org.opendaylight.yang.gen.v1.test.rev990939",
26 Naming.getModelRootPackageName("org.opendaylight.yang.gen.v1.test.rev990939"));
30 public void testGetMethodName() {
31 assertEquals("testLocalName", Naming.getMethodName(QName.create("testNS", "testLocalName")));
32 assertEquals("testYangIdentifier", Naming.getMethodName("TestYangIdentifier"));
36 public void testGetClassName() {
37 assertEquals("TestClass", Naming.getClassName(QName.create("testNS", "testClass")));
38 assertEquals("TestClass", Naming.getClassName("testClass"));
39 assertEquals("", Naming.getClassName(""));
40 assertEquals("SomeTestingClassName", Naming.getClassName(" some-testing_class name "));
41 assertEquals("_0SomeTestingClassName", Naming.getClassName(" 0 some-testing_class name "));
45 public void testGetPropertyName() {
46 assertEquals("test", Naming.getPropertyName("Test"));
47 assertEquals("test", Naming.getPropertyName("test"));
48 assertEquals("xmlClass", Naming.getPropertyName("Class"));
49 assertEquals("_5", Naming.getPropertyName("5"));
50 assertEquals("", Naming.getPropertyName(""));
51 assertEquals("someTestingParameterName", Naming.getPropertyName(" some-testing_parameter name "));
52 assertEquals("_0someTestingParameterName", Naming.getPropertyName(" 0some-testing_parameter name "));
56 public void basicTest() {
57 assertEquals("org.opendaylight.yang.gen.v1.test.uri.rev171026",
58 Naming.getRootPackageName(QName.create("test:URI", "2017-10-26", "test")));
59 assertEquals("org.opendaylight.yang.gen.v1.urn.m.o.d.u.l.e.n.a.m.e.t.e.s.t._case._1digit.rev130910",
60 Naming.getRootPackageName(QNameModule.create(
61 XMLNamespace.of("urn:m*o+d,u;l=e.n/a-m@e.t$e#s't.case.1digit"), Revision.of("2013-09-10"))));
62 assertEquals("_1testpublic", Naming.normalizePackageName("1testpublic"));
63 assertEquals("Test", Naming.getGetterSuffix(QName.create("test", "test")));
64 assertEquals("XmlClass", Naming.getGetterSuffix(QName.create("test", "class")));
68 public void mapEnumAssignedNamesTest() {
70 assertEqualMapping("__", "__");
71 assertEqualMapping("True", "true");
72 assertEqualMapping("ĽaľahoPapľuhu", "ľaľaho papľuhu");
74 // Contains a '$', but that's okay
75 assertEqualMapping("$", "$");
76 assertEqualMapping("$abc", "$abc");
77 assertEqualMapping("A$bc", "a$bc");
78 assertEqualMapping("Ab$c", "ab$c");
79 assertEqualMapping("Abc$", "abc$");
81 // Mostly okay, but numbers need to be prefixed
82 assertEqualMapping(List.of("AZ", "_09"), List.of("a-z", "0-9"));
84 // Invalid identifier (conflicts with a Java 9 keyword)
85 assertEqualMapping("$_", "_");
87 // Invalid characters, fall back to bijection
88 assertEqualMapping("$$2A$", "*");
89 assertEqualMapping("$$2E$", ".");
90 assertEqualMapping("$$2F$", "/");
91 assertEqualMapping("$$3F$", "?");
92 assertEqualMapping("$a$2A$a", "a*a");
94 // Conflict, fallback to bijection
95 assertEqualMapping(List.of("_09", "$0$2D$9"), List.of("_09", "0-9"));
96 assertEqualMapping(List.of("$09", "$0$2D$9"), List.of("09", "0-9"));
97 assertEqualMapping(List.of("aZ", "$a$2D$z"), List.of("aZ", "a-z"));
98 assertEqualMapping(List.of("$a2$2E$5", "a25"), List.of("a2.5", "a25"));
99 assertEqualMapping(List.of("$a2$2E$5", "$a2$2D$5"), List.of("a2.5", "a2-5"));
100 assertEqualMapping(List.of("$ľaľaho$20$papľuhu", "$ľaľaho$20$$20$papľuhu"),
101 List.of("ľaľaho papľuhu", "ľaľaho papľuhu"));
104 private static void assertEqualMapping(final String mapped, final String yang) {
105 assertEqualMapping(List.of(mapped), List.of(yang));
108 private static void assertEqualMapping(final List<String> mapped, final List<String> yang) {
109 assertEquals(mapped.size(), yang.size());
110 final var expected = new HashMap<String, String>();
111 for (int i = 0; i < mapped.size(); ++i) {
112 expected.put(yang.get(i), mapped.get(i));
115 assertEquals(expected, Naming.mapEnumAssignedNames(yang));
119 public void yangDataMapping() {
120 final var ns = QNameModule.create(XMLNamespace.of("unused"));
122 // single ascii compliant non-conflicting word - remain as is
123 assertEquals("single", Naming.mapYangDataName(new YangDataName(ns, "single")));
124 // ascii compliant - non-compliany chars only encoded
125 assertEquals("$abc$20$cde", Naming.mapYangDataName(new YangDataName(ns, "abc cde")));
126 // latin1 compliant -> latin chars normalized, non-compliant chars are encoded
127 assertEquals("$ľaľaho$20$papľuhu", Naming.mapYangDataName(new YangDataName(ns, "ľaľaho papľuhu")));
128 // latin1 non-compliant - all non-compliant characters encoded
129 assertEquals("$привет$20$papľuhu", Naming.mapYangDataName(new YangDataName(ns, "привет papľuhu")));