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