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.WellformednessCheckingSink;
24
25 import org.apache.maven.doxia.sink.Sink;
26 import org.apache.maven.doxia.sink.SinkEventAttributeSet;
27 import org.apache.maven.doxia.sink.SinkEventElement;
28 import org.apache.maven.doxia.sink.TextSink;
29 import org.codehaus.plexus.util.IOUtil;
30 import org.junit.Assert;
31
32 import java.io.IOException;
33 import java.io.Reader;
34 import java.io.Writer;
35 import java.util.Arrays;
36 import java.util.Iterator;
37
38
39
40
41
42
43
44
45
46
47 public abstract class AbstractParserTest
48 extends AbstractModuleTest
49 {
50
51
52
53
54
55 protected abstract Parser createParser();
56
57
58
59
60
61
62 protected String getOutputDir()
63 {
64 return "parser/";
65 }
66
67
68
69
70
71
72
73
74
75 public final void testParser()
76 throws IOException, ParseException
77 {
78 WellformednessCheckingSink sink = new WellformednessCheckingSink();
79
80 Reader reader = null;
81 try
82 {
83 reader = getTestReader( "test", outputExtension() );
84
85 createParser().parse( reader, sink );
86
87 assertTrue( "Parser output not well-formed, last offending element: "
88 + sink.getOffender(), sink.isWellformed() );
89 }
90 finally
91 {
92 IOUtil.close( reader );
93 }
94 }
95
96
97
98
99
100
101
102
103
104 public final void testDocument()
105 throws IOException, ParseException
106 {
107 Writer writer = null;
108 Reader reader = null;
109
110 try
111 {
112 writer = getTestWriter( "test", "txt" );
113
114 reader = getTestReader( "test", outputExtension() );
115
116 Sink sink = new TextSink( writer );
117
118 createParser().parse( reader, sink );
119 }
120 finally
121 {
122 IOUtil.close( reader );
123 IOUtil.close( writer );
124 }
125 }
126
127 protected void assertEquals( SinkEventElement element, String name, Object... args )
128 {
129 assertEquals( "Name of element doesn't match", name, element.getName() );
130 Assert.assertArrayEquals( "Arguments don't match", args, element.getArgs() );
131 }
132
133 protected void assertAttributeEquals( SinkEventElement element, String name, String attr, String value )
134 {
135 assertEquals( name, element.getName() );
136 SinkEventAttributeSet atts = (SinkEventAttributeSet) element.getArgs()[0];
137 assertEquals( value, atts.getAttribute( attr ) );
138 }
139
140 protected void assertEquals( Iterator<SinkEventElement> it, String... names )
141 {
142 for ( String name: names )
143 {
144 assertEquals( name, it.next().getName() );
145 }
146 }
147
148
149 }