Use Collections.singletonList() instead of Arrays.asList()
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / codec / xml / XmlStreamUtilsTest.java
index a95366ae15f7ac14d6d7f3cf9f1ae0fdbd8900df..3b436236040f90beda2ddbf2875e4b88bca2a224 100644 (file)
@@ -8,8 +8,10 @@
 
 package org.opendaylight.yangtools.yang.data.impl.codec.xml;
 
+import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import com.google.common.base.Optional;
 import com.google.common.collect.Maps;
@@ -18,8 +20,11 @@ import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.AbstractMap;
-import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamWriter;
 import org.custommonkey.xmlunit.Diff;
@@ -35,10 +40,10 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
-import org.opendaylight.yangtools.yang.model.util.InstanceIdentifierType;
+import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
-import org.opendaylight.yangtools.yang.model.util.StringType;
 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
 import org.w3c.dom.Document;
 
@@ -53,7 +58,7 @@ public class XmlStreamUtilsTest {
     public static void initialize() throws URISyntaxException {
         final YangParserImpl yangParser = new YangParserImpl();
         final File file = new File(XmlStreamUtils.class.getResource("/leafref-test.yang").toURI());
-        schemaContext = yangParser.parseFiles(Arrays.asList(file));
+        schemaContext = yangParser.parseFiles(Collections.singletonList(file));
         assertNotNull(schemaContext);
         assertEquals(1,schemaContext.getModules().size());
         leafRefModule = schemaContext.getModules().iterator().next();
@@ -98,22 +103,47 @@ public class XmlStreamUtilsTest {
         assertTrue("Xml differs: " + diff.toString(), identical);
     }
 
+    @Test
+    public void testWriteIdentityRef() throws Exception {
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+        final XMLStreamWriter writer =  XML_OUTPUT_FACTORY.createXMLStreamWriter(out);
+
+        writer.writeStartElement("element");
+        final QNameModule parent = QNameModule.create(URI.create("parent:uri"), new Date());
+        XmlStreamUtils.write(writer, null, QName.create(parent, "identity"), Optional.of(parent));
+        writer.writeEndElement();
+
+        writer.writeStartElement("elementDifferent");
+        XmlStreamUtils.write(writer, null, QName.create("different:namespace", "identity"), Optional.of(parent));
+        writer.writeEndElement();
+
+        writer.close();
+        out.close();
+
+        final String xmlAsString = new String(out.toByteArray()).replaceAll("\\s*", "");
+        assertThat(xmlAsString, containsString("element>identity"));
+
+        final Pattern prefixedIdentityPattern = Pattern.compile(".*\"different:namespace\">(.*):identity.*");
+        final Matcher matcher = prefixedIdentityPattern.matcher(xmlAsString);
+        assertTrue("Xml: " + xmlAsString + " should match: " + prefixedIdentityPattern, matcher.matches());
+    }
+
     /**
      * One leafref reference to other leafref via relative references
      */
     @Test
     public void testLeafRefRelativeChaining() {
-        getTargetNodeForLeafRef("leafname3",StringType.class);
+        getTargetNodeForLeafRef("leafname3", StringTypeDefinition.class);
     }
 
     @Test
     public void testLeafRefRelative() {
-        getTargetNodeForLeafRef("pointToStringLeaf",StringType.class);
+        getTargetNodeForLeafRef("pointToStringLeaf", StringTypeDefinition.class);
     }
 
     @Test
     public void testLeafRefAbsoluteWithSameTarget() {
-        getTargetNodeForLeafRef("absname",InstanceIdentifierType.class);
+        getTargetNodeForLeafRef("absname", InstanceIdentifierTypeDefinition.class);
     }
 
     /**
@@ -122,13 +152,15 @@ public class XmlStreamUtilsTest {
     @Ignore //ignored because this isn't implemented
     @Test
     public void testLeafRefWithDoublePointInPath() {
-        getTargetNodeForLeafRef("lf-with-double-point-inside",StringType.class);
+        getTargetNodeForLeafRef("lf-with-double-point-inside", StringTypeDefinition.class);
     }
 
     @Test
     public void testLeafRefRelativeAndAbsoluteWithSameTarget() {
-        final TypeDefinition<?> targetNodeForAbsname = getTargetNodeForLeafRef("absname",InstanceIdentifierType.class);
-        final TypeDefinition<?> targetNodeForRelname = getTargetNodeForLeafRef("relname",InstanceIdentifierType.class);
+        final TypeDefinition<?> targetNodeForAbsname = getTargetNodeForLeafRef("absname",
+            InstanceIdentifierTypeDefinition.class);
+        final TypeDefinition<?> targetNodeForRelname = getTargetNodeForLeafRef("relname",
+            InstanceIdentifierTypeDefinition.class);
         assertEquals(targetNodeForAbsname, targetNodeForRelname);
     }
 
@@ -138,7 +170,7 @@ public class XmlStreamUtilsTest {
         final LeafrefTypeDefinition leafrefTypedef = findLeafrefType(schemaNode);
         assertNotNull(leafrefTypedef);
         final TypeDefinition<?> targetBaseType = SchemaContextUtil.getBaseTypeForLeafRef(leafrefTypedef, schemaContext, schemaNode);
-        assertEquals("Wrong class found.", clas, targetBaseType.getClass());
+        assertTrue("Wrong class found.", clas.isInstance(targetBaseType));
         return targetBaseType;
     }