001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019:
020: package org.apache.synapse.util;
021:
022: import java.io.StringReader;
023: import java.io.StringWriter;
024:
025: import javax.xml.namespace.QName;
026: import javax.xml.stream.XMLOutputFactory;
027: import javax.xml.stream.XMLStreamReader;
028: import javax.xml.stream.XMLStreamWriter;
029:
030: import org.apache.axiom.om.OMElement;
031: import org.apache.axiom.om.impl.builder.StAXOMBuilder;
032: import org.apache.axiom.om.impl.serialize.StreamingOMSerializer;
033: import org.apache.synapse.util.WrappedTextNodeStreamReader;
034: import org.custommonkey.xmlunit.XMLTestCase;
035:
036: public class WrappedTextNodeStreamReaderTest extends XMLTestCase {
037: //
038: // Tests that construct the Axiom tree and check the result
039: //
040:
041: private void testUsingBuilder(QName wrapperElementName,
042: String testString, int chunkSize) {
043: StringReader reader = new StringReader(testString);
044: XMLStreamReader xmlStreamReader = new WrappedTextNodeStreamReader(
045: wrapperElementName, reader, chunkSize);
046: OMElement element = new StAXOMBuilder(xmlStreamReader)
047: .getDocumentElement();
048: assertEquals(wrapperElementName, element.getQName());
049: assertEquals(wrapperElementName.getPrefix(), element.getQName()
050: .getPrefix());
051: assertEquals(testString, element.getText());
052: }
053:
054: public void testShortStringUsingBuilder() {
055: testUsingBuilder(
056: new QName("urn:test", "test"),
057: "This is a test string for WrappedTextNodeStreamReader",
058: 4096);
059: }
060:
061: public void testLongStringUsingBuilder() {
062: // "Long" is relative to the chunk size
063: testUsingBuilder(
064: new QName("urn:test", "test"),
065: "This is a test string for WrappedTextNodeStreamReader",
066: 10);
067: }
068:
069: public void testWrapperElementWithoutNamespaceUsingBuilder() {
070: testUsingBuilder(
071: new QName("test"),
072: "This is a test string for WrappedTextNodeStreamReader",
073: 4096);
074: }
075:
076: public void testWrapperElementWithPrefixUsingBuilder() {
077: testUsingBuilder(
078: new QName("urn:test", "bar", "foo"),
079: "This is a test string for WrappedTextNodeStreamReader",
080: 4096);
081: }
082:
083: //
084: // Test that serialize the stream of XML events to plain XML and compare
085: // with the expected result.
086: //
087:
088: private void testUsingSerializer(QName wrapperElementName,
089: String testString, int chunkSize, String expectedXML)
090: throws Exception {
091: StringReader reader = new StringReader(testString);
092: XMLStreamReader xmlStreamReader = new WrappedTextNodeStreamReader(
093: wrapperElementName, reader, chunkSize);
094: StringWriter writer = new StringWriter();
095: XMLStreamWriter xmlStreamWriter = XMLOutputFactory
096: .newInstance().createXMLStreamWriter(writer);
097: new StreamingOMSerializer().serialize(xmlStreamReader,
098: xmlStreamWriter);
099: xmlStreamWriter.flush();
100: assertXMLEqual(expectedXML, writer.toString());
101: }
102:
103: public void testShortStringUsingSerializer() throws Exception {
104: String testString = "This is a test string for WrappedTextNodeStreamReader";
105: testUsingSerializer(new QName("urn:test", "test"), testString,
106: 4096, "<test xmlns=\"urn:test\">" + testString
107: + "</test>");
108: }
109:
110: public void testLongStringUsingSerializer() throws Exception {
111: String testString = "This is a test string for WrappedTextNodeStreamReader";
112: testUsingSerializer(new QName("urn:test", "test"), testString,
113: 10, "<test xmlns=\"urn:test\">" + testString
114: + "</test>");
115: }
116:
117: public void testStringWithAmpersandUsingSerializer()
118: throws Exception {
119: testUsingSerializer(new QName("urn:test", "test"),
120: "String containing ampersand (&)", 4096,
121: "<test xmlns=\"urn:test\">String containing ampersand (&)</test>");
122: }
123:
124: //
125: // Tests that construct the Axiom tree, serialize it using serializeAndConsume and
126: // compare with the expected result.
127: //
128:
129: private void testUsingSerializeAndConsume(QName wrapperElementName,
130: String testString, int chunkSize, String expectedXML)
131: throws Exception {
132: StringReader reader = new StringReader(testString);
133: XMLStreamReader xmlStreamReader = new WrappedTextNodeStreamReader(
134: wrapperElementName, reader, chunkSize);
135: OMElement element = new StAXOMBuilder(xmlStreamReader)
136: .getDocumentElement();
137: StringWriter writer = new StringWriter();
138: element.serializeAndConsume(writer);
139: assertXMLEqual(expectedXML, writer.toString());
140: }
141:
142: public void testShortStringUsingSerializeAndConsume()
143: throws Exception {
144: String testString = "This is a test string for WrappedTextNodeStreamReader";
145: testUsingSerializeAndConsume(new QName("urn:test", "test"),
146: testString, 4096, "<test xmlns=\"urn:test\">"
147: + testString + "</test>");
148: }
149: }
|