81b7e4754850bfe28d80a21252a10defdea25a5a
[yangtools.git] / yang / yang-common / src / test / java / org / opendaylight / yangtools / yang / common / QNameTest.java
1 /*
2  * Copyright (c) 2013 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.common;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13 import static org.junit.Assert.fail;
14
15 import java.net.URI;
16 import java.util.Date;
17 import org.junit.Test;
18
19 public class QNameTest {
20     private final String namespace = "urn:foo", revision = "2013-12-24", localName = "bar";
21     private final URI ns;
22
23     public QNameTest() throws Exception {
24         this.ns = new URI(namespace);
25     }
26
27     @Test
28     public void testStringSerialization() throws Exception {
29         {
30             QName qName = QName.create(namespace, revision, localName);
31             assertEquals(QName.QNAME_LEFT_PARENTHESIS + namespace + QName.QNAME_REVISION_DELIMITER
32                     + revision + QName.QNAME_RIGHT_PARENTHESIS + localName, qName.toString());
33             QName copied = QName.create(qName.toString());
34             assertEquals(qName, copied);
35         }
36         // no revision
37         {
38             QName qName = new QName(ns, localName);
39             assertEquals(QName.QNAME_LEFT_PARENTHESIS + namespace + QName.QNAME_RIGHT_PARENTHESIS
40                     + localName, qName.toString());
41             QName copied = QName.create(qName.toString());
42             assertEquals(qName, copied);
43         }
44         // no namespace nor revision
45         {
46             QName qName = new QName((URI) null, localName);
47             assertEquals(localName, qName.toString());
48             QName copied = QName.create(qName.toString());
49             assertEquals(qName, copied);
50         }
51     }
52
53     @Test
54     public void testIllegalLocalNames() {
55         assertLocalNameFails(null);
56         assertLocalNameFails("");
57         assertLocalNameFails("(");
58         assertLocalNameFails(")");
59         assertLocalNameFails("?");
60         assertLocalNameFails("&");
61     }
62
63     @Test
64     public void testCompareTo() throws Exception {
65         String A = "a";
66         String B = "b";
67
68         QName a = QName.create(A);
69         QName b = QName.create(A);
70         assertTrue(a.compareTo(b) == 0);
71         assertTrue(b.compareTo(a) == 0);
72
73         // compare with localName
74         a = QName.create(A);
75         b = QName.create(B);
76         assertTrue(a.compareTo(b) < 0);
77         assertTrue(b.compareTo(a) > 0);
78
79         // compare with namespace
80         a = QName.create(A, revision, A);
81         b = QName.create(B, revision, A);
82         assertTrue(a.compareTo(b) < 0);
83         assertTrue(b.compareTo(a) > 0);
84
85         // compare with 1 null namespace
86         a = QName.create(null, QName.parseRevision(revision), A);
87         b = QName.create(URI.create(A), QName.parseRevision(revision), A);
88         assertTrue(a.compareTo(b) < 0);
89         assertTrue(b.compareTo(a) > 0);
90
91         // compare with both null namespace
92         b = QName.create(null, QName.parseRevision(revision), A);
93         assertTrue(a.compareTo(b) == 0);
94         assertTrue(b.compareTo(a) == 0);
95
96         // compare with revision
97         a = QName.create(A, "2013-12-24", A);
98         b = QName.create(A, "2013-12-25", A);
99         assertTrue(a.compareTo(b) < 0);
100         assertTrue(b.compareTo(a) > 0);
101
102         // compare with 1 null revision
103         a = QName.create(URI.create(A), null, A);
104         b = QName.create(URI.create(A), QName.parseRevision(revision), A);
105         assertTrue(a.compareTo(b) < 0);
106         assertTrue(b.compareTo(a) > 0);
107
108         // compare with both null revision
109         b = QName.create(URI.create(A), null, A);
110         assertTrue(a.compareTo(b) == 0);
111         assertTrue(b.compareTo(a) == 0);
112     }
113
114     @Test
115     public void testQName() {
116         final QName qName = QName.create(namespace, revision, localName);
117         final QName qName1 = QName.create(namespace, localName);
118         final QName qName2 = QName.create(qName1, localName);
119         assertEquals(qName1, qName.withoutRevision());
120         assertEquals(qName1, qName2);
121         assertTrue(qName.isEqualWithoutRevision(qName1));
122         assertNotNull(QName.formattedRevision(new Date()));
123         assertNotNull(qName.hashCode());
124         assertEquals(qName, qName.intern());
125     }
126
127     @Test
128     public void testQNameModule() {
129         final QNameModule qNameModule = QNameModule.create(ns, new Date());
130         assertNotNull(qNameModule.toString());
131         assertNotNull(qNameModule.getRevisionNamespace());
132     }
133
134     private void assertLocalNameFails(final String localName) {
135         try {
136             new QName((URI)null, localName);
137             fail("Local name should fail:" + localName);
138         } catch (IllegalArgumentException e) {
139         }
140     }
141 }