1   /*
2    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
3    *
4    * This software is open source.
5    * See the bottom of this file for the licence.
6    */
7   
8   package org.dom4j.io;
9   
10  import junit.textui.TestRunner;
11  
12  import java.io.StringReader;
13  import java.io.StringWriter;
14  
15  import org.dom4j.AbstractTestCase;
16  import org.dom4j.Document;
17  
18  /***
19   * A simple test harness to check that the XML Writer works
20   * 
21   * @author <a href="mailto:james.strachan@metastuff.com">James Strachan </a>
22   * @version $Revision: 1.3 $
23   */
24  public class WriteUnmergedTextTest extends AbstractTestCase {
25      protected static final boolean VERBOSE = true;
26  
27      private String inputText = "<?xml version = \"1.0\"?>"
28              + "<TestEscapedEntities><TEXT>Test using &lt; "
29              + "&amp; &gt;</TEXT></TestEscapedEntities>";
30  
31      public static void main(String[] args) {
32          TestRunner.run(WriteUnmergedTextTest.class);
33      }
34  
35      // Test case(s)
36      // -------------------------------------------------------------------------
37      public String readwriteText(OutputFormat outFormat,
38              boolean mergeAdjacentText) throws Exception {
39          StringWriter out = new StringWriter();
40          StringReader in = new StringReader(inputText);
41          SAXReader reader = new SAXReader();
42  
43          // reader.setValidation(true);
44          reader.setMergeAdjacentText(mergeAdjacentText);
45  
46          Document document = reader.read(in);
47  
48          XMLWriter writer = (outFormat == null) ? new XMLWriter(out)
49                  : new XMLWriter(out, outFormat);
50          writer.write(document);
51          writer.close();
52  
53          String outText = out.toString();
54  
55          return outText;
56      }
57  
58      public void testWithoutFormatNonMerged() throws Exception {
59          String outText = readwriteText(null, false);
60  
61          if (VERBOSE) {
62              log("Text output is [");
63              log(outText);
64              log("]. Done");
65          }
66  
67          // should contain &amp; and &lt;
68          assertTrue("Output text contains \"&amp;\"", outText
69                  .lastIndexOf("&amp;") >= 0);
70          assertTrue("Output text contains \"&lt;\"",
71                  outText.lastIndexOf("&lt;") >= 0);
72      }
73  
74      public void testWithCompactFormatNonMerged() throws Exception {
75          String outText = readwriteText(OutputFormat.createCompactFormat(),
76                  false);
77  
78          if (VERBOSE) {
79              log("Text output is [");
80              log(outText);
81              log("]. Done");
82          }
83  
84          // should contain &amp; and &lt;
85          assertTrue("Output text contains \"&amp;\"", outText
86                  .lastIndexOf("&amp;") >= 0);
87          assertTrue("Output text contains \"&lt;\"",
88                  outText.lastIndexOf("&lt;") >= 0);
89      }
90  
91      public void testWithPrettyPrintFormatNonMerged() throws Exception {
92          String outText = readwriteText(OutputFormat.createPrettyPrint(), false);
93  
94          if (VERBOSE) {
95              log("Text output is [");
96              log(outText);
97              log("]. Done");
98          }
99  
100         // should contain &amp; and &lt;
101         assertTrue("Output text contains \"&amp;\"", outText
102                 .lastIndexOf("&amp;") >= 0);
103         assertTrue("Output text contains \"&lt;\"",
104                 outText.lastIndexOf("&lt;") >= 0);
105     }
106 
107     public void testWithoutFormatMerged() throws Exception {
108         String outText = readwriteText(null, true);
109 
110         if (VERBOSE) {
111             log("Text output is [");
112             log(outText);
113             log("]. Done");
114         }
115 
116         // should contain &amp; and &lt;
117         assertTrue("Output text contains \"&amp;\"", outText
118                 .lastIndexOf("&amp;") >= 0);
119         assertTrue("Output text contains \"&lt;\"",
120                 outText.lastIndexOf("&lt;") >= 0);
121     }
122 
123     public void testWithCompactFormatMerged() throws Exception {
124         String out = readwriteText(OutputFormat.createCompactFormat(), true);
125 
126         if (VERBOSE) {
127             log("Text output is [");
128             log(out);
129             log("]. Done");
130         }
131 
132         // should contain &amp; and &lt;
133         assertTrue("Output text contains \"&amp;\"", out
134                 .lastIndexOf("&amp;") >= 0);
135         assertTrue("Output text contains \"&lt;\"",
136                 out.lastIndexOf("&lt;") >= 0);
137     }
138 
139     public void testWithPrettyPrintFormatMerged() throws Exception {
140         String outText = readwriteText(OutputFormat.createPrettyPrint(), true);
141 
142         if (VERBOSE) {
143             log("Text output is [");
144             log(outText);
145             log("]. Done");
146         }
147 
148         // should contain &amp; and &lt;
149         assertTrue("Output text contains \"&amp;\"", outText
150                 .lastIndexOf("&amp;") >= 0);
151         assertTrue("Output text contains \"&lt;\"",
152                 outText.lastIndexOf("&lt;") >= 0);
153     }
154 }
155 
156 /*
157  * Redistribution and use of this software and associated documentation
158  * ("Software"), with or without modification, are permitted provided that the
159  * following conditions are met:
160  * 
161  * 1. Redistributions of source code must retain copyright statements and
162  * notices. Redistributions must also contain a copy of this document.
163  * 
164  * 2. Redistributions in binary form must reproduce the above copyright notice,
165  * this list of conditions and the following disclaimer in the documentation
166  * and/or other materials provided with the distribution.
167  * 
168  * 3. The name "DOM4J" must not be used to endorse or promote products derived
169  * from this Software without prior written permission of MetaStuff, Ltd. For
170  * written permission, please contact dom4j-info@metastuff.com.
171  * 
172  * 4. Products derived from this Software may not be called "DOM4J" nor may
173  * "DOM4J" appear in their names without prior written permission of MetaStuff,
174  * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
175  * 
176  * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
177  * 
178  * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
179  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
180  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
181  * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
182  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
183  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
184  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
185  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
186  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
187  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
188  * POSSIBILITY OF SUCH DAMAGE.
189  * 
190  * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
191  */