1 package org.apache.maven.doxia.module.fml;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.FileReader;
24 import java.io.Reader;
25 import java.io.Writer;
26
27 import java.util.Iterator;
28 import java.util.List;
29
30 import org.apache.maven.doxia.parser.AbstractParserTest;
31 import org.apache.maven.doxia.parser.Parser;
32 import org.apache.maven.doxia.sink.Sink;
33 import org.apache.maven.doxia.sink.SinkEventElement;
34 import org.apache.maven.doxia.sink.SinkEventTestingSink;
35 import org.apache.maven.doxia.sink.XhtmlBaseSink;
36 import org.codehaus.plexus.util.FileUtils;
37 import org.codehaus.plexus.util.IOUtil;
38
39
40
41
42
43 public class FmlParserTest
44 extends AbstractParserTest
45 {
46 private FmlParser parser;
47
48 @Override
49 protected void setUp()
50 throws Exception
51 {
52 super.setUp();
53
54 parser = (FmlParser) lookup( Parser.ROLE, "fml" );
55
56
57
58 String tmpDir = System.getProperty( "java.io.tmpdir" );
59 String excludes = "fml-*.xsd, xml.xsd";
60 List<String> tmpFiles = FileUtils.getFileNames( new File( tmpDir ), excludes, null, true );
61 for ( Iterator<String> it = tmpFiles.iterator(); it.hasNext(); )
62 {
63 File tmpFile = new File( it.next().toString() );
64 tmpFile.delete();
65 }
66 }
67
68
69 protected Parser createParser()
70 {
71 return parser;
72 }
73
74
75 protected String outputExtension()
76 {
77 return "fml";
78 }
79
80
81 public void testFaqEventsList()
82 throws Exception
83 {
84 SinkEventTestingSink sink = new SinkEventTestingSink();
85
86 Reader reader = null;
87 try
88 {
89 reader = getTestReader( "simpleFaq" );
90
91 createParser().parse( reader, sink );
92 }
93 finally
94 {
95 IOUtil.close( reader );
96 }
97
98 Iterator<SinkEventElement> it = sink.getEventList().iterator();
99
100 assertEquals( "comment", ( it.next() ).getName() );
101 assertEquals( "head", ( it.next() ).getName() );
102 assertEquals( "title", ( it.next() ).getName() );
103 assertEquals( "text", ( it.next() ).getName() );
104 assertEquals( "title_", ( it.next() ).getName() );
105 assertEquals( "head_", ( it.next() ).getName() );
106 assertEquals( "body", ( it.next() ).getName() );
107 assertEquals( "section1", ( it.next() ).getName() );
108 assertEquals( "sectionTitle1", ( it.next() ).getName() );
109 assertEquals( "anchor", ( it.next() ).getName() );
110 assertEquals( "text", ( it.next() ).getName() );
111 assertEquals( "anchor_", ( it.next() ).getName() );
112 assertEquals( "sectionTitle1_", ( it.next() ).getName() );
113 assertEquals( "paragraph", ( it.next() ).getName() );
114 assertEquals( "bold", ( it.next() ).getName() );
115 assertEquals( "text", ( it.next() ).getName() );
116 assertEquals( "bold_", ( it.next() ).getName() );
117 assertEquals( "paragraph_", ( it.next() ).getName() );
118 assertEquals( "numberedList", ( it.next() ).getName() );
119 assertEquals( "numberedListItem", ( it.next() ).getName() );
120 assertEquals( "link", ( it.next() ).getName() );
121 assertEquals( "text", ( it.next() ).getName() );
122 assertEquals( "link_", ( it.next() ).getName() );
123 assertEquals( "numberedListItem_", ( it.next() ).getName() );
124 assertEquals( "numberedList_", ( it.next() ).getName() );
125 assertEquals( "section1_", ( it.next() ).getName() );
126 assertEquals( "section1", ( it.next() ).getName() );
127 assertEquals( "sectionTitle1", ( it.next() ).getName() );
128 assertEquals( "text", ( it.next() ).getName() );
129 assertEquals( "sectionTitle1_", ( it.next() ).getName() );
130 assertEquals( "definitionList", ( it.next() ).getName() );
131 assertEquals( "definedTerm", ( it.next() ).getName() );
132 assertEquals( "anchor", ( it.next() ).getName() );
133 assertEquals( "text", ( it.next() ).getName() );
134 assertEquals( "anchor_", ( it.next() ).getName() );
135 assertEquals( "definedTerm_", ( it.next() ).getName() );
136 assertEquals( "definition", ( it.next() ).getName() );
137 assertEquals( "paragraph", ( it.next() ).getName() );
138 assertEquals( "text", ( it.next() ).getName() );
139 assertEquals( "paragraph_", ( it.next() ).getName() );
140 assertEquals( "paragraph", ( it.next() ).getName() );
141 assertEquals( "link", ( it.next() ).getName() );
142 assertEquals( "text", ( it.next() ).getName() );
143 assertEquals( "link_", ( it.next() ).getName() );
144 assertEquals( "paragraph_", ( it.next() ).getName() );
145 assertEquals( "definition_", ( it.next() ).getName() );
146 assertEquals( "definitionList_", ( it.next() ).getName() );
147 assertEquals( "section1_", ( it.next() ).getName() );
148 assertEquals( "body_", ( it.next() ).getName() );
149 assertFalse( it.hasNext() );
150 }
151
152
153 public void testEntities()
154 throws Exception
155 {
156 final String text = "<!DOCTYPE test [<!ENTITY Alpha \"Α\">]>"
157 + "<faqs title=\"&Α\"><part id=\"General\"><title><Α</title>"
158 + "<faq id=\"id\"><question>>Α</question>"
159 + "<answer><p><code><img></code>"Α</p></answer>"
160 + "</faq></part></faqs>";
161
162 SinkEventTestingSink sink = new SinkEventTestingSink();
163
164 parser.setValidate( false );
165 parser.parse( text, sink );
166
167 Iterator<SinkEventElement> it = sink.getEventList().iterator();
168
169 assertEquals( "head", ( it.next() ).getName() );
170 assertEquals( "title", ( it.next() ).getName() );
171
172
173 assertTextEvent( it.next(), "&Α" );
174
175 assertEquals( "title_", ( it.next() ).getName() );
176 assertEquals( "head_", ( it.next() ).getName() );
177 assertEquals( "body", ( it.next() ).getName() );
178 assertEquals( "section1", ( it.next() ).getName() );
179 assertEquals( "sectionTitle1", ( it.next() ).getName() );
180 assertEquals( "anchor", ( it.next() ).getName() );
181
182
183 assertTextEvent( it.next(), "&Α" );
184
185 assertEquals( "anchor_", ( it.next() ).getName() );
186 assertEquals( "sectionTitle1_", ( it.next() ).getName() );
187 assertEquals( "paragraph", ( it.next() ).getName() );
188 assertEquals( "bold", ( it.next() ).getName() );
189
190
191 assertTextEvent( it.next(), "<" );
192 assertTextEvent( it.next(), "\u0391" );
193
194 assertEquals( "bold_", ( it.next() ).getName() );
195 assertEquals( "paragraph_", ( it.next() ).getName() );
196 assertEquals( "numberedList", ( it.next() ).getName() );
197 assertEquals( "numberedListItem", ( it.next() ).getName() );
198 assertEquals( "link", ( it.next() ).getName() );
199
200
201 assertTextEvent( it.next(), ">" );
202 assertTextEvent( it.next(), "\u0391" );
203
204 assertEquals( "link_", ( it.next() ).getName() );
205 assertEquals( "numberedListItem_", ( it.next() ).getName() );
206 assertEquals( "numberedList_", ( it.next() ).getName() );
207 assertEquals( "section1_", ( it.next() ).getName() );
208 assertEquals( "section1", ( it.next() ).getName() );
209 assertEquals( "sectionTitle1", ( it.next() ).getName() );
210
211
212 assertTextEvent( it.next(), "<" );
213 assertTextEvent( it.next(), "\u0391" );
214
215 assertEquals( "sectionTitle1_", ( it.next() ).getName() );
216 assertEquals( "definitionList", ( it.next() ).getName() );
217 assertEquals( "definedTerm", ( it.next() ).getName() );
218 assertEquals( "anchor", ( it.next() ).getName() );
219
220
221 assertTextEvent( it.next(), ">" );
222 assertTextEvent( it.next(), "\u0391" );
223
224 assertEquals( "anchor_", ( it.next() ).getName() );
225 assertEquals( "definedTerm_", ( it.next() ).getName() );
226 assertEquals( "definition", ( it.next() ).getName() );
227 assertEquals( "paragraph", ( it.next() ).getName() );
228
229
230 assertEquals( "monospaced", ( it.next() ).getName() );
231 assertTextEvent( it.next(), "<" );
232 assertTextEvent( it.next(), "img" );
233 assertTextEvent( it.next(), ">" );
234 assertEquals( "monospaced_", ( it.next() ).getName() );
235 assertTextEvent( it.next(), "\"" );
236 assertTextEvent( it.next(), "\u0391" );
237
238 assertEquals( "paragraph_", ( it.next() ).getName() );
239 assertEquals( "paragraph", ( it.next() ).getName() );
240 assertEquals( "link", ( it.next() ).getName() );
241 assertEquals( "text", ( it.next() ).getName() );
242 assertEquals( "link_", ( it.next() ).getName() );
243 assertEquals( "paragraph_", ( it.next() ).getName() );
244 assertEquals( "definition_", ( it.next() ).getName() );
245 assertEquals( "definitionList_", ( it.next() ).getName() );
246 assertEquals( "section1_", ( it.next() ).getName() );
247 assertEquals( "body_", ( it.next() ).getName() );
248
249 assertFalse( it.hasNext() );
250 }
251
252
253
254
255
256 public void testFaqMacro()
257 throws Exception
258 {
259 Writer output = null;
260 Reader reader = null;
261 try
262 {
263 output = getTestWriter( "macro" );
264 reader = getTestReader( "macro" );
265
266 Sink sink = new XhtmlBaseSink( output );
267 createParser().parse( reader, sink );
268 sink.close();
269 }
270 finally
271 {
272 IOUtil.close( output );
273 IOUtil.close( reader );
274 }
275
276 File f = getTestFile( getBasedir(), outputBaseDir() + getOutputDir() + "macro.fml" );
277 assertTrue( "The file " + f.getAbsolutePath() + " was not created", f.exists() );
278
279 String content;
280 try
281 {
282 reader = new FileReader( f );
283 content = IOUtil.toString( reader );
284 }
285 finally
286 {
287 IOUtil.close( reader );
288 }
289
290 assertTrue( content.indexOf( "<a name=\"macro-definition\">Macro Question</a>" ) != -1 );
291 }
292
293 private void assertTextEvent( SinkEventElement textEvt, String string )
294 {
295 assertEquals( "text", textEvt.getName() );
296 assertEquals( string, textEvt.getArgs()[0] );
297 }
298 }