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