Optimize QName.toString() a bit
[yangtools.git] / yang / yang-common / src / test / java / org / opendaylight / yangtools / yang / common / QNameTest.java
index e6a279b32925dd536b07d09173330d74b7127379..90a8e45f39082e5cde0006a4b1c82eb2ffc27bf7 100644 (file)
 package org.opendaylight.yangtools.yang.common;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import java.net.URI;
-import java.util.Date;
+
+import java.net.URISyntaxException;
 import org.junit.Test;
 
 public class QNameTest {
-    private final String namespace = "urn:foo", revision = "2013-12-24", localName = "bar";
-    private final URI ns;
+    private static final String NAMESPACE = "urn:foo";
+    private static final String REVISION = "2013-12-24";
+    private static final String LOCALNAME = "bar";
+    private static final XMLNamespace NS = XMLNamespace.of(NAMESPACE);
 
-    public QNameTest() throws Exception {
-        this.ns = new URI(namespace);
+    @Test
+    public void testStringSerialization() throws Exception {
+        QName qname = QName.create(NAMESPACE, REVISION, LOCALNAME);
+        assertEquals("(urn:foo?revision=2013-12-24)bar", qname.toString());
+        assertEquals(qname, QName.create(qname.toString()));
     }
 
     @Test
-    public void testStringSerialization() throws Exception {
-        {
-            QName qName = QName.create(namespace, revision, localName);
-            assertEquals(QName.QNAME_LEFT_PARENTHESIS + namespace + QName.QNAME_REVISION_DELIMITER
-                    + revision + QName.QNAME_RIGHT_PARENTHESIS + localName, qName.toString());
-            QName copied = QName.create(qName.toString());
-            assertEquals(qName, copied);
-        }
+    public void testStringSerializationNoRevision() throws Exception {
         // no revision
-        {
-            QName qName = new QName(ns, localName);
-            assertEquals(QName.QNAME_LEFT_PARENTHESIS + namespace + QName.QNAME_RIGHT_PARENTHESIS
-                    + localName, qName.toString());
-            QName copied = QName.create(qName.toString());
-            assertEquals(qName, copied);
-        }
-        // no namespace nor revision
-        {
-            QName qName = new QName(null, localName);
-            assertEquals(localName, qName.toString());
-            QName copied = QName.create(qName.toString());
-            assertEquals(qName, copied);
-        }
+        QName qname = QName.create(NS, LOCALNAME);
+        assertEquals("(urn:foo)bar", qname.toString());
+        assertEquals(qname, QName.create(qname.toString()));
     }
 
     @Test
     public void testIllegalLocalNames() {
-        assertLocalNameFails(null);
-        assertLocalNameFails("");
-        assertLocalNameFails("(");
-        assertLocalNameFails(")");
-        assertLocalNameFails("?");
-        assertLocalNameFails("&");
+        assertThrows(NullPointerException.class, () -> QName.create(NS, null));
+        assertThrows(IllegalArgumentException.class, () -> QName.create(NS, ""));
+        assertThrows(IllegalArgumentException.class, () -> QName.create(NS, "("));
+        assertThrows(IllegalArgumentException.class, () -> QName.create(NS, ")"));
+        assertThrows(IllegalArgumentException.class, () -> QName.create(NS, "?"));
+        assertThrows(IllegalArgumentException.class, () -> QName.create(NS, "&"));
     }
 
     @Test
     public void testCompareTo() throws Exception {
-        String A = "a";
-        String B = "b";
-
-        QName a = QName.create(A);
-        QName b = QName.create(A);
-        assertTrue(a.compareTo(b) == 0);
-        assertTrue(b.compareTo(a) == 0);
-
-        // compare with localName
-        a = QName.create(A);
-        b = QName.create(B);
-        assertTrue(a.compareTo(b) < 0);
-        assertTrue(b.compareTo(a) > 0);
+        final String A = "a";
+        final String B = "b";
 
         // compare with namespace
-        a = QName.create(A, revision, A);
-        b = QName.create(B, revision, A);
-        assertTrue(a.compareTo(b) < 0);
-        assertTrue(b.compareTo(a) > 0);
-
-        // compare with 1 null namespace
-        a = QName.create(null, QName.parseRevision(revision), A);
-        b = QName.create(URI.create(A), QName.parseRevision(revision), A);
-        assertTrue(a.compareTo(b) < 0);
-        assertTrue(b.compareTo(a) > 0);
-
-        // compare with both null namespace
-        b = QName.create(null, QName.parseRevision(revision), A);
-        assertTrue(a.compareTo(b) == 0);
-        assertTrue(b.compareTo(a) == 0);
+        QName qa = QName.create(A, REVISION, A);
+        QName qb = QName.create(B, REVISION, A);
+        assertTrue(qa.compareTo(qb) < 0);
+        assertTrue(qb.compareTo(qa) > 0);
 
         // compare with revision
-        a = QName.create(A, "2013-12-24", A);
-        b = QName.create(A, "2013-12-25", A);
-        assertTrue(a.compareTo(b) < 0);
-        assertTrue(b.compareTo(a) > 0);
+        qa = QName.create(A, "2013-12-24", A);
+        qb = QName.create(A, "2013-12-25", A);
+        assertTrue(qa.compareTo(qb) < 0);
+        assertTrue(qb.compareTo(qa) > 0);
 
         // compare with 1 null revision
-        a = QName.create(URI.create(A), null, A);
-        b = QName.create(URI.create(A), QName.parseRevision(revision), A);
-        assertTrue(a.compareTo(b) < 0);
-        assertTrue(b.compareTo(a) > 0);
+        qa = QName.create(XMLNamespace.of(A), A);
+        qb = QName.create(XMLNamespace.of(A), Revision.of(REVISION), A);
+        assertTrue(qa.compareTo(qb) < 0);
+        assertTrue(qb.compareTo(qa) > 0);
 
         // compare with both null revision
-        b = QName.create(URI.create(A), null, A);
-        assertTrue(a.compareTo(b) == 0);
-        assertTrue(b.compareTo(a) == 0);
+        qb = QName.create(XMLNamespace.of(A), A);
+        assertTrue(qa.compareTo(qb) == 0);
+        assertTrue(qb.compareTo(qa) == 0);
     }
 
     @Test
     public void testQName() {
-        final QName qName = QName.create(namespace, revision, localName);
-        final QName qName1 = QName.create(namespace, localName);
-        final QName qName2 = QName.create(qName1, localName);
-        assertEquals(qName1, qName.withoutRevision());
-        assertEquals(qName1, qName2);
-        assertTrue(qName.isEqualWithoutRevision(qName1));
-        assertNotNull(QName.formattedRevision(new Date()));
-        assertNotNull(qName.hashCode());
-        assertEquals(qName, qName.intern());
+        final QName qname = QName.create(NAMESPACE, REVISION, LOCALNAME);
+        final QName qname1 = QName.create(NAMESPACE, LOCALNAME);
+        final QName qname2 = QName.create(qname1, LOCALNAME);
+        assertEquals(qname1, qname.withoutRevision());
+        assertEquals(qname1, qname2);
+        assertTrue(qname.isEqualWithoutRevision(qname1));
+        assertEquals("2000-01-01", QName.formattedRevision(Revision.ofNullable("2000-01-01")));
+        assertEquals(qname, qname.intern());
     }
 
     @Test
-    public void testQNameModule() {
-        final QNameModule qNameModule = QNameModule.create(ns, new Date());
-        assertNotNull(qNameModule.toString());
-        assertNotNull(qNameModule.getRevisionNamespace());
-    }
-
-    private static void assertLocalNameFails(final String localName) {
-        try {
-            new QName(null, localName);
-            fail("Local name should fail:" + localName);
-        } catch (IllegalArgumentException e) {
-        }
+    public void testQNameModule() throws URISyntaxException {
+        final QNameModule qnameModule = QNameModule.create(NS, Revision.of("2000-01-01"));
+        assertEquals("QNameModule{ns=urn:foo, rev=2000-01-01}", qnameModule.toString());
     }
-}
\ No newline at end of file
+}