1 package de.fhdw.wtf.parser.test;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.fail;
5
6 import java.util.Vector;
7
8 import org.junit.Before;
9 import org.junit.Test;
10
11 import de.fhdw.wtf.common.ast.Group;
12 import de.fhdw.wtf.common.ast.GroupElement;
13 import de.fhdw.wtf.common.ast.Model;
14 import de.fhdw.wtf.common.ast.Name;
15 import de.fhdw.wtf.common.ast.QualifiedName;
16 import de.fhdw.wtf.common.ast.UnqualifiedName;
17 import de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException;
18 import de.fhdw.wtf.common.stream.SimpleTokenStream;
19 import de.fhdw.wtf.common.stream.TokenStream;
20 import de.fhdw.wtf.common.token.EndToken;
21 import de.fhdw.wtf.common.token.IdentifierToken;
22 import de.fhdw.wtf.common.token.Position;
23 import de.fhdw.wtf.common.token.keywords.GroupToken;
24 import de.fhdw.wtf.common.token.symbols.ColonToken;
25 import de.fhdw.wtf.common.token.symbols.EqualToken;
26 import de.fhdw.wtf.common.token.symbols.SemicolonToken;
27 import de.fhdw.wtf.common.token.symbols.SquareBracketCloseToken;
28 import de.fhdw.wtf.common.token.symbols.SquareBracketOpenToken;
29 import de.fhdw.wtf.parser.Parser;
30
31
32
33
34 public class TestGroups {
35
36 private TokenStream stream;
37
38 private IdentifierToken idGroup1Token;
39 private IdentifierToken idGroup2Token;
40 private IdentifierToken idGroup3Token;
41
42 private ColonToken colonToken;
43 private GroupToken groupToken;
44 private EqualToken equalToken;
45 private SquareBracketOpenToken squareBracketOpenToken;
46 private SquareBracketCloseToken squareBracketCloseToken;
47 private SemicolonToken semicolonToken;
48 private EndToken endToken;
49
50 private Parser parser;
51
52 @Before
53 public void setUp() throws Exception {
54 this.stream = SimpleTokenStream.create();
55 this.idGroup1Token = IdentifierToken.create("Group1", Position.create("", 0 + 1, 0 + 1, 0));
56 this.idGroup2Token = IdentifierToken.create("Group2", Position.create("", 0 + 1, 0 + 1, 0));
57 this.idGroup3Token = IdentifierToken.create("Group3", Position.create("", 0 + 1, 0 + 1, 0));
58 this.colonToken = ColonToken.create(Position.create("", 0 + 1, 0 + 1, 0));
59 this.groupToken = GroupToken.create(Position.create("", 0 + 1, 0 + 1, 0));
60 this.equalToken = EqualToken.create(Position.create("", 0 + 1, 0 + 1, 0));
61 this.semicolonToken = SemicolonToken.create(Position.create("", 0 + 1, 0 + 1, 0));
62 this.parser = Parser.create(this.stream);
63 this.endToken = EndToken.create(Position.create("", 0 + 1, 0 + 1, 0));
64 this.squareBracketCloseToken = SquareBracketCloseToken.create(Position.create("", 0 + 1, 0 + 1, 0));
65 this.squareBracketOpenToken = SquareBracketOpenToken.create(Position.create("", 0 + 1, 0 + 1, 0));
66 }
67
68 @Test
69 public void testOnlyEndToken() throws Exception {
70 this.stream.add(this.endToken);
71
72 final Model model = Model.create(this.endToken);
73
74 final Model result = this.parser.parse();
75 assertEquals(model, result);
76 assertEquals(0, this.parser.getExceptions().size());
77 }
78
79
80
81
82 @Test
83 public void testSimpleGroupComplete() throws Exception {
84 this.stream.add(this.idGroup1Token);
85 this.stream.add(this.colonToken);
86 this.stream.add(this.groupToken);
87 this.stream.add(this.equalToken);
88 this.stream.add(this.squareBracketOpenToken);
89 this.stream.add(this.squareBracketCloseToken);
90 this.stream.add(this.semicolonToken);
91 this.stream.add(EndToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
92
93 final Vector<GroupElement> group1Vector = new Vector<>();
94 final Name group1Name = UnqualifiedName.create(this.idGroup1Token);
95 final Group group1 = Group.create(group1Name, group1Vector, this.idGroup1Token);
96 final Model expected = Model.create(this.idGroup1Token);
97 expected.addGroup(group1);
98
99 final Model actual = this.parser.parse();
100 assertEquals(expected.getGroups().size(), actual.getGroups().size());
101 assertEquals(0, this.parser.getExceptions().size());
102 assertEquals(expected, actual);
103 }
104
105
106
107
108 @Test
109 public void testSimpleGroupWithoutSemicolon() {
110 this.stream.add(this.idGroup1Token);
111 this.stream.add(this.colonToken);
112 this.stream.add(this.groupToken);
113 this.stream.add(this.equalToken);
114 this.stream.add(this.squareBracketOpenToken);
115 this.stream.add(this.squareBracketCloseToken);
116 this.stream.add(EndToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
117
118 try {
119 this.parser.parse();
120 fail();
121 } catch (final NoValidTokenStreamException e) {
122 assertEquals(1, this.parser.getExceptions().size());
123 }
124 }
125
126
127
128
129 @Test
130 public void testSimpleGroupWithoutClose() {
131 this.stream.add(this.idGroup1Token);
132 this.stream.add(this.colonToken);
133 this.stream.add(this.groupToken);
134 this.stream.add(this.equalToken);
135 this.stream.add(this.squareBracketOpenToken);
136 this.stream.add(this.semicolonToken);
137 this.stream.add(EndToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
138
139 try {
140 this.parser.parse();
141 } catch (final NoValidTokenStreamException e) {
142 assertEquals(1, this.parser.getExceptions().size());
143 }
144 }
145
146
147
148
149 @Test
150 public void testSimpleGroupInGroupComplete() throws Exception {
151 this.stream.add(this.idGroup1Token);
152 this.stream.add(this.colonToken);
153 this.stream.add(this.groupToken);
154 this.stream.add(this.equalToken);
155 this.stream.add(this.squareBracketOpenToken);
156 this.stream.add(this.idGroup2Token);
157 this.stream.add(this.colonToken);
158 this.stream.add(this.groupToken);
159 this.stream.add(this.equalToken);
160 this.stream.add(this.squareBracketOpenToken);
161 this.stream.add(this.squareBracketCloseToken);
162 this.stream.add(this.semicolonToken);
163 this.stream.add(this.squareBracketCloseToken);
164 this.stream.add(this.semicolonToken);
165 this.stream.add(EndToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
166
167 final Model model = Model.create(this.idGroup1Token);
168 final Vector<GroupElement> group1Vector = new Vector<>();
169 final Vector<GroupElement> group2Vector = new Vector<>();
170 final UnqualifiedName group1Name = UnqualifiedName.create(this.idGroup1Token);
171 final QualifiedName group2Name = QualifiedName.create(group1Name, UnqualifiedName.create(this.idGroup2Token));
172 final Group group1 = Group.create(group1Name, group1Vector, this.idGroup1Token);
173 final Group group2 = Group.create(group2Name, group2Vector, this.idGroup2Token);
174 group1Vector.add(group2);
175 model.addGroup(group1);
176
177 final Model result = this.parser.parse();
178 assertEquals(model.getGroups().size(), result.getGroups().size());
179 assertEquals(0, this.parser.getExceptions().size());
180 assertEquals(model, result);
181 }
182
183
184
185
186 @Test
187 public void testSimpleGroupInGroup2GroupCloseMissing() {
188 this.stream.add(this.idGroup1Token);
189 this.stream.add(this.colonToken);
190 this.stream.add(this.groupToken);
191 this.stream.add(this.equalToken);
192 this.stream.add(this.squareBracketOpenToken);
193 this.stream.add(this.idGroup2Token);
194 this.stream.add(this.colonToken);
195 this.stream.add(this.groupToken);
196 this.stream.add(this.equalToken);
197 this.stream.add(this.squareBracketOpenToken);
198 this.stream.add(this.semicolonToken);
199 this.stream.add(this.semicolonToken);
200 this.stream.add(EndToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
201
202 try {
203 this.parser.parse();
204 fail();
205 } catch (final NoValidTokenStreamException e) {
206 System.out.println(this.parser.getExceptions());
207 assertEquals(3, this.parser.getExceptions().size());
208 }
209 }
210
211
212
213
214 @Test
215 public void testSimpleGroupInGroupInGroup2GroupCloseMissing() {
216 this.stream.add(this.idGroup1Token);
217 this.stream.add(this.colonToken);
218 this.stream.add(this.groupToken);
219 this.stream.add(this.equalToken);
220 this.stream.add(this.squareBracketOpenToken);
221 this.stream.add(this.idGroup2Token);
222 this.stream.add(this.colonToken);
223 this.stream.add(this.groupToken);
224 this.stream.add(this.equalToken);
225 this.stream.add(this.squareBracketOpenToken);
226 this.stream.add(this.idGroup3Token);
227 this.stream.add(this.colonToken);
228 this.stream.add(this.groupToken);
229 this.stream.add(this.equalToken);
230 this.stream.add(this.squareBracketOpenToken);
231 this.stream.add(this.squareBracketCloseToken);
232 this.stream.add(this.semicolonToken);
233 this.stream.add(this.semicolonToken);
234 this.stream.add(EndToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
235
236 try {
237 this.parser.parse();
238 fail();
239 } catch (final NoValidTokenStreamException e) {
240 assertEquals(2, this.parser.getExceptions().size());
241 }
242 }
243
244
245
246
247 @Test
248 public void testSimpleGroupInGroupInGroup2Group() throws Exception {
249 this.stream.add(this.idGroup1Token);
250 this.stream.add(this.colonToken);
251 this.stream.add(this.groupToken);
252 this.stream.add(this.equalToken);
253 this.stream.add(this.squareBracketOpenToken);
254 this.stream.add(this.idGroup2Token);
255 this.stream.add(this.colonToken);
256 this.stream.add(this.groupToken);
257 this.stream.add(this.equalToken);
258 this.stream.add(this.squareBracketOpenToken);
259 this.stream.add(this.idGroup3Token);
260 this.stream.add(this.colonToken);
261 this.stream.add(this.groupToken);
262 this.stream.add(this.equalToken);
263 this.stream.add(this.squareBracketOpenToken);
264 this.stream.add(this.squareBracketCloseToken);
265 this.stream.add(this.semicolonToken);
266 this.stream.add(this.squareBracketCloseToken);
267 this.stream.add(this.semicolonToken);
268 this.stream.add(this.squareBracketCloseToken);
269 this.stream.add(this.semicolonToken);
270 this.stream.add(EndToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
271
272 final Model expected = Model.create(this.idGroup1Token);
273 final Vector<GroupElement> group1Vector = new Vector<>();
274 final Vector<GroupElement> group2Vector = new Vector<>();
275 final Vector<GroupElement> group3Vector = new Vector<>();
276 final UnqualifiedName group1Name = UnqualifiedName.create(this.idGroup1Token);
277 final QualifiedName group2Name = QualifiedName.create(group1Name, UnqualifiedName.create(this.idGroup2Token));
278 final Name group3Name = group2Name.addName(this.idGroup3Token);
279 final Group group1 = Group.create(group1Name, group1Vector, this.idGroup1Token);
280 final Group group2 = Group.create(group2Name, group2Vector, this.idGroup2Token);
281 final Group group3 = Group.create(group3Name, group3Vector, this.idGroup3Token);
282 group1Vector.add(group2);
283 group2Vector.add(group3);
284 expected.addGroup(group1);
285
286 final Model actual = this.parser.parse();
287 assertEquals(expected, actual);
288 }
289 }