1 package org.apache.maven.doxia.parser;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.doxia.AbstractModuleTest;
23 import org.apache.maven.doxia.sink.impl.SinkEventAttributeSet;
24 import org.apache.maven.doxia.sink.impl.SinkEventElement;
25 import org.apache.maven.doxia.sink.impl.TextSink;
26 import org.apache.maven.doxia.sink.impl.WellformednessCheckingSink;
27 import org.apache.maven.doxia.sink.Sink;
28 import org.codehaus.plexus.util.IOUtil;
29 import org.junit.Assert;
30
31 import java.io.IOException;
32 import java.io.Reader;
33 import java.io.Writer;
34 import java.util.Iterator;
35
36
37
38
39
40
41
42
43
44
45 public abstract class AbstractParserTest
46 extends AbstractModuleTest
47 {
48
49
50
51
52
53 protected abstract Parser createParser();
54
55
56
57
58
59
60 protected String getOutputDir()
61 {
62 return "parser/";
63 }
64
65
66
67
68
69
70
71
72
73 public final void testParser()
74 throws IOException, ParseException
75 {
76 WellformednessCheckingSink sink = new WellformednessCheckingSink();
77
78 Reader reader = null;
79 try
80 {
81 reader = getTestReader( "test", outputExtension() );
82
83 createParser().parse( reader, sink );
84
85 assertTrue( "Parser output not well-formed, last offending element: "
86 + sink.getOffender(), sink.isWellformed() );
87 }
88 finally
89 {
90 IOUtil.close( reader );
91 }
92 }
93
94
95
96
97
98
99
100
101
102 public final void testDocument()
103 throws IOException, ParseException
104 {
105 Writer writer = null;
106 Reader reader = null;
107
108 try
109 {
110 writer = getTestWriter( "test", "txt" );
111
112 reader = getTestReader( "test", outputExtension() );
113
114 Sink sink = new TextSink( writer );
115
116 createParser().parse( reader, sink );
117 }
118 finally
119 {
120 IOUtil.close( reader );
121 IOUtil.close( writer );
122 }
123 }
124
125 protected void assertEquals( SinkEventElement element, String name, Object... args )
126 {
127 assertEquals( "Name of element doesn't match", name, element.getName() );
128 Assert.assertArrayEquals( "Arguments don't match", args, element.getArgs() );
129 }
130
131 protected void assertAttributeEquals( SinkEventElement element, String name, String attr, String value )
132 {
133 assertEquals( name, element.getName() );
134 SinkEventAttributeSet atts = (SinkEventAttributeSet) element.getArgs()[0];
135 assertEquals( value, atts.getAttribute( attr ) );
136 }
137
138 protected void assertEquals( Iterator<SinkEventElement> it, String... names )
139 {
140 StringBuilder expected = new StringBuilder();
141 StringBuilder actual = new StringBuilder();
142
143 for ( String name : names )
144 {
145 expected.append( name ).append( '\n' );
146 }
147
148 while ( it.hasNext() )
149 {
150 actual.append( it.next().getName() ).append( '\n' );
151 }
152
153 assertEquals( expected.toString(), actual.toString() );
154 }
155
156 protected void assertStartsWith( Iterator<SinkEventElement> it, String... names )
157 {
158 StringBuilder expected = new StringBuilder();
159 StringBuilder actual = new StringBuilder();
160
161 for ( String name : names )
162 {
163 expected.append( name ).append( '\n' );
164 if ( it.hasNext() )
165 {
166 actual.append( it.next().getName() ).append( '\n' );
167 }
168 }
169 assertEquals( expected.toString(), actual.toString() );
170 }
171 }