1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.betwixt;
17
18 import java.io.FileInputStream;
19 import java.io.InputStream;
20 import java.io.StringReader;
21 import java.io.StringWriter;
22 import java.io.Writer;
23 import java.net.URL;
24
25 import junit.framework.Test;
26 import junit.framework.TestSuite;
27 import junit.textui.TestRunner;
28
29 import org.apache.commons.betwixt.io.BeanReader;
30 import org.apache.commons.betwixt.io.BeanWriter;
31 import org.apache.commons.digester.rss.Channel;
32 import org.apache.commons.digester.rss.RSSDigester;
33
34 /*** Test harness which parses an RSS document using Digester
35 * then outputs it using Betwixt, then parses it again with Digester
36 * to check that the document is parseable again.
37 *
38 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
39 * @version $Revision: 1.5 $
40 */
41 public class TestRSSRoundTrip extends AbstractTestCase {
42
43 /***
44 * The set of public identifiers, and corresponding resource names,
45 * for the versions of the DTDs that we know about.
46 */
47 protected static final String registrations[] = {
48 "-//Netscape Communications//DTD RSS 0.9//EN",
49 "/org/apache/commons/digester/rss/rss-0.9.dtd",
50 "-//Netscape Communications//DTD RSS 0.91//EN",
51 "/org/apache/commons/digester/rss/rss-0.91.dtd",
52 };
53
54 public static void main( String[] args ) {
55 TestRunner.run( suite() );
56 }
57
58 public static Test suite() {
59 return new TestSuite(TestRSSRoundTrip.class);
60 }
61
62 public TestRSSRoundTrip(String testName) {
63 super(testName);
64 }
65
66
67
68 public void testRoundTrip() throws Exception {
69
70 RSSDigester digester = new RSSDigester();
71
72 InputStream in = new FileInputStream( getTestFile("src/test/org/apache/commons/betwixt/rss-example.xml") );
73 Object bean = digester.parse( in );
74 in.close();
75
76
77 StringWriter buffer = new StringWriter();
78 write( bean, buffer );
79
80
81 String text = buffer.toString();
82 bean = digester.parse( new StringReader( text ) );
83
84
85
86
87 buffer = new StringWriter();
88 write( bean, buffer );
89
90 String text2 = buffer.toString();
91
92
93
94
95 assertEquals( "Round trip value should remain unchanged", text, text2 );
96 }
97
98 /***
99 * This tests using the both the RSSDigester
100 * and the BeanReader to parse an RSS and output it
101 * using the BeanWriter
102 */
103 public void testBeanWriterRoundTrip() throws Exception {
104
105 RSSDigester digester = new RSSDigester();
106
107 InputStream in = new FileInputStream( getTestFile("src/test/org/apache/commons/betwixt/rss-example.xml") );
108 Object bean = digester.parse( in );
109 in.close();
110
111
112 StringWriter buffer = new StringWriter();
113 write( bean, buffer );
114
115
116
117 BeanReader reader = new BeanReader();
118 reader.registerBeanClass( Channel.class );
119
120
121 for (int i = 0; i < registrations.length; i += 2) {
122 URL url = RSSDigester.class.getResource(registrations[i + 1]);
123 if (url != null) {
124 reader.register(registrations[i], url.toString());
125 }
126 }
127
128
129 String text = buffer.toString();
130 bean = reader.parse( new StringReader( text ) );
131
132
133
134
135 buffer = new StringWriter();
136 write( bean, buffer );
137
138 String text2 = buffer.toString();
139
140
141
142
143 assertEquals( "Round trip value should remain unchanged", text, text2 );
144 }
145
146 public void testRSSRead() throws Exception {
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177 }
178
179 protected void write(Object bean, Writer out) throws Exception {
180
181
182 BeanWriter writer = new BeanWriter(out);
183
184
185
186
187 writer.setWriteEmptyElements(true);
188 writer.getXMLIntrospector().setAttributesForPrimitives(false);
189 writer.setWriteIDs(false);
190 writer.enablePrettyPrint();
191 writer.write( bean );
192 }
193 }
194