/* * 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.json.util; import java.io.StringWriter; import java.io.Writer; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.junit.Assert; import org.junit.Test; import org.apache.synapse.commons.staxon.core.json.JsonXMLOutputFactory; public class XMLMultipleStreamWriterTest { XMLStreamWriter createStreamWriter(Writer writer) throws XMLStreamException { return new JsonXMLOutputFactory().createXMLStreamWriter(writer); } /** * <code><alice><bob>charlie</bob></alice></code> */ @Test public void testWriteStartElement_String() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeStartElement("bob"); writer.writeCharacters("charlie"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"bob\":[\"charlie\"]}}", result.toString()); } /** * <code><alice xmlns:p="http://test"><p:bob>charlie</p:bob></alice></code> */ @Test public void testWriteStartElement_String_String() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeNamespace("p", "http://test"); writer.writeStartElement("http://test", "bob"); writer.writeCharacters("charlie"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"@xmlns:p\":\"http://test\",\"p:bob\":[\"charlie\"]}}", result.toString()); } /** * <code><alice><p:bob xmlns:p="http://test">charlie</p:bob></alice></code> */ @Test public void testWriteStartElement_String_String_String() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeStartElement("p", "bob", "http://test"); writer.writeNamespace("p", "http://test"); writer.writeCharacters("charlie"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"p:bob\":[{\"@xmlns:p\":\"http://test\",\"$\":\"charlie\"}]}}", result.toString()); } /** * <code><alice><bob/></alice></code> */ @Test public void testWriteEmptyElement_String() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeEmptyElement("bob"); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"bob\":[null]}}", result.toString()); } /** * <code><alice xmlns:p="http://test"><p:bob/></alice></code> */ @Test public void testWriteEmptyElement_String_String() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeNamespace("p", "http://test"); writer.writeEmptyElement("http://test", "bob"); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"@xmlns:p\":\"http://test\",\"p:bob\":[null]}}", result.toString()); } /** * <code><alice><p:bob xmlns:p="http://test"/></alice></code> */ @Test public void testWriteEmptyElement_String_String_String() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeEmptyElement("p", "bob", "http://test"); writer.writeNamespace("p", "http://test"); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"p:bob\":[{\"@xmlns:p\":\"http://test\"}]}}", result.toString()); } /** * <code><alice><bob>charlie</bob><bob>david</bob></alice></code> */ @Test public void testArrayWithTwoElements() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeStartElement("bob"); writer.writeCharacters("charlie"); writer.writeEndElement(); writer.writeStartElement("bob"); writer.writeCharacters("david"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"bob\":[\"charlie\",\"david\"]}}", result.toString()); } /** * <code><alice><bob>charlie</bob><bob>david</bob></alice></code> */ @Test public void testArrayWithPreviousSibling() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeEmptyElement("edgar"); writer.writeStartElement("bob"); writer.writeCharacters("charlie"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"edgar\":null,\"bob\":[\"charlie\"]}}", result.toString()); } /** * <code><alice><edgar><bob/></edgar><edgar><bob/></edgar></alice></code> */ @Test public void testZombieArray() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "/alice/edgar/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeStartElement("edgar"); writer.writeEmptyElement("bob"); writer.writeEndElement(); writer.writeStartElement("edgar"); writer.writeEmptyElement("bob"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"edgar\":{\"bob\":[null]},\"edgar\":{\"bob\":[null]}}}", result.toString()); } /** * <code><alice><bob>charlie</bob></alice></code> */ @Test public void testMatchRootFalse() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), false, "/bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeStartElement("bob"); writer.writeCharacters("charlie"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"bob\":[\"charlie\"]}}", result.toString()); } /** * <code><alice><bob>charlie</bob></alice></code> */ @Test public void testMatchRelative() throws XMLStreamException { StringWriter result = new StringWriter(); XMLStreamWriter writer = new XMLMultipleStreamWriter(createStreamWriter(result), true, "bob"); writer.writeStartDocument(); writer.writeStartElement("alice"); writer.writeStartElement("bob"); writer.writeCharacters("charlie"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.close(); Assert.assertEquals("{\"alice\":{\"bob\":[\"charlie\"]}}", result.toString()); } }