/* * Copyright 2011, 2012 Odysseus Software GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.synapse.commons.staxon.core.base; import java.io.StringWriter; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import org.apache.synapse.commons.staxon.core.util.StreamWriterDelegate; import org.apache.synapse.commons.staxon.core.xml.SimpleXMLStreamWriter; public class AbstractXMLStreamWriterTest { boolean jdkStreamWriter = false; XMLStreamWriter createXMLStreamWriter(boolean repairNamespaces) throws XMLStreamException { final StringWriter writer = new StringWriter(); if (jdkStreamWriter) { XMLOutputFactory factory = XMLOutputFactory.newFactory(); factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, repairNamespaces); return new StreamWriterDelegate(factory.createXMLStreamWriter(writer)) { @Override public String toString() { return writer.toString(); } }; } else { return new SimpleXMLStreamWriter(writer, repairNamespaces) { @Override public String toString() { return writer.toString(); } }; } } @Test public void testWriteAttribute0() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeAttribute("bar", "foobar"); writer.flush(); Assert.assertEquals("<foo bar=\"foobar\"", writer.toString()); } @Test @Ignore public void testWriteAttribute0a() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeAttribute("bar", "<>'\"&"); writer.flush(); Assert.assertEquals("<foo bar=\"<>'"&\"", writer.toString()); } @Test public void testWriteAttribute1a() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("foo"); writer.writeAttribute("http://p", "bar", "foobar"); writer.flush(); Assert.assertEquals("<foo p:bar=\"foobar\"", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteAttribute1b() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeAttribute("http://p", "bar", "foobar"); } @Test public void testWriteAttribute2a() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("foo"); writer.writeAttribute("p", "http://p", "bar", "foobar"); writer.flush(); Assert.assertEquals("<foo p:bar=\"foobar\"", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteAttribute2b() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeAttribute("p", "http://p", "bar", "foobar"); writer.writeEndElement(); } @Test public void testWriteAttribute2c() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeAttribute("p", "http://p", "bar", "foobar"); writer.writeNamespace("p", "http://p"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo p:bar=\"foobar\" xmlns:p=\"http://p\"></foo>", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteAttribute2d() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("foo"); writer.writeAttribute("pp", "http://p", "bar", "foobar"); writer.writeEndElement(); } @Test(expected = XMLStreamException.class) public void testWriteAttribute2e() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("foo"); writer.writeAttribute("p", "http://pp", "bar", "foobar"); writer.writeEndElement(); } @Test public void testWriteElement0() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo></foo>", writer.toString()); } @Test public void testWriteElement1a() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("http://p", "foo"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<p:foo></p:foo>", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteElement1b() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("http://p", "foo"); } @Test public void testWriteElement1bRepaired() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(true); writer.writeStartElement("http://p", "foo"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo xmlns=\"http://p\"></foo>", writer.toString()); } @Test public void testWriteElement2a() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("p", "foo", "http://p"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<p:foo></p:foo>", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteElement2b() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("pp", "foo", "http://p"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo xmlns=\"http://p\"></foo>", writer.toString()); } @Test public void testWriteElement2bRepaired() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(true); writer.setPrefix("p", "http://p"); writer.writeStartElement("pp", "foo", "http://p"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<pp:foo xmlns:pp=\"http://p\"></pp:foo>", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteElement2c() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("p", "foo", "http://p"); writer.writeEndElement(); } @Test public void testWriteElement2cRepaired() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(true); writer.writeStartElement("p", "foo", "http://p"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<p:foo xmlns:p=\"http://p\"></p:foo>", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteElement2d() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeStartElement("p", "foo", "http://pp"); writer.writeEndElement(); writer.flush(); } @Test public void testWriteElement2dRepaired() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(true); writer.setPrefix("p", "http://p"); writer.writeStartElement("p", "foo", "http://pp"); writer.writeEndElement(); writer.flush(); } @Test public void testWriteNamespaceAddsPrefixBinding() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("p", "foo", "http://p"); writer.writeNamespace("p", "http://p"); Assert.assertEquals("p", writer.getPrefix("http://p")); Assert.assertEquals("http://p", writer.getNamespaceContext().getNamespaceURI("p")); Assert.assertEquals("p", writer.getNamespaceContext().getPrefix("http://p")); } @Test public void testWriteEmptyElement0() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeEmptyElement("foo"); writer.flush(); Assert.assertEquals("<foo", writer.toString()); } @Test public void testWriteEmptyElement1a() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeEmptyElement("http://p", "foo"); writer.flush(); Assert.assertEquals("<p:foo", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteEmptyElement1b() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeEmptyElement("http://p", "foo"); } @Test public void testWriteEmptyElement1bRepaired() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(true); writer.writeEmptyElement("http://p", "foo"); writer.flush(); Assert.assertEquals("<foo xmlns=\"http://p\"", writer.toString()); } @Test public void testWriteEmptyElement2a() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeEmptyElement("p", "foo", "http://p"); writer.flush(); Assert.assertEquals("<p:foo", writer.toString()); } @Test public void testWriteEmptyElement2b() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.setPrefix("p", "http://p"); writer.writeEmptyElement("pp", "foo", "http://p"); // Assert.fail("expected exception: bound to another prefix"); // according to XMLStreamWriter javadoc writer.flush(); Assert.assertEquals("<pp:foo", writer.toString()); // according to implementations } @Test public void testWriteEmptyElement2c() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeEmptyElement("p", "foo", "http://p"); writer.flush(); Assert.assertEquals("<p:foo", writer.toString()); } @Test(expected = XMLStreamException.class) public void testWriteElementMultipleRoots() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeEndElement(); writer.writeStartElement("foo"); } @Test public void testWriterCharacters() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeCharacters("bar"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo>bar</foo>", writer.toString()); } @Test @Ignore public void testWriterCharacters2() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeCharacters("<>'\"&"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo><>'\"&</foo>", writer.toString()); } @Test public void testWriteCDtata() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeCData("bar"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo><![CDATA[bar]]></foo>", writer.toString()); } @Test public void testWriteCDtata2() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeCData("<>'\"&"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo><![CDATA[<>'\"&]]></foo>", writer.toString()); } @Test public void testWriteComment() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeComment("bar"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo><!--bar--></foo>", writer.toString()); } @Test public void testWriteEntityRef() throws XMLStreamException { XMLStreamWriter writer = createXMLStreamWriter(false); writer.writeStartElement("foo"); writer.writeEntityRef("bar"); writer.writeEndElement(); writer.flush(); Assert.assertEquals("<foo>&bar;</foo>", writer.toString()); } }