1 package de.fhdw.wtf.parser.test;
2
3 import static org.junit.Assert.assertEquals;
4
5 import java.util.Collection;
6
7 import org.junit.Before;
8 import org.junit.Test;
9
10 import de.fhdw.wtf.common.ast.Group;
11 import de.fhdw.wtf.common.ast.Model;
12 import de.fhdw.wtf.common.ast.Tuple;
13 import de.fhdw.wtf.common.ast.type.ClassType;
14 import de.fhdw.wtf.common.stream.SimpleTokenStream;
15 import de.fhdw.wtf.common.stream.TokenStream;
16 import de.fhdw.wtf.common.token.EndToken;
17 import de.fhdw.wtf.common.token.IdentifierToken;
18 import de.fhdw.wtf.common.token.Position;
19 import de.fhdw.wtf.common.token.keywords.ClassToken;
20 import de.fhdw.wtf.common.token.keywords.GroupToken;
21 import de.fhdw.wtf.common.token.symbols.ColonToken;
22 import de.fhdw.wtf.common.token.symbols.CurlyBracketCloseToken;
23 import de.fhdw.wtf.common.token.symbols.CurlyBracketOpenToken;
24 import de.fhdw.wtf.common.token.symbols.EqualToken;
25 import de.fhdw.wtf.common.token.symbols.SemicolonToken;
26 import de.fhdw.wtf.common.token.symbols.SquareBracketCloseToken;
27 import de.fhdw.wtf.common.token.symbols.SquareBracketOpenToken;
28 import de.fhdw.wtf.parser.Parser;
29
30
31
32
33 public class TestModels {
34
35
36
37
38 private ColonToken colonToken;
39
40
41
42
43 private GroupToken groupToken;
44
45
46
47
48 private EqualToken equalToken;
49
50
51
52
53 private SquareBracketOpenToken squareBracketOpenToken;
54
55
56
57
58 private SquareBracketCloseToken squareBracketCloseToken;
59
60
61
62
63 private SemicolonToken semicolonToken;
64
65
66
67
68 private ClassToken classToken;
69
70
71
72
73 private CurlyBracketOpenToken curlyBracketOpenToken;
74
75
76
77
78 private CurlyBracketCloseToken curlyBracketCloseToken;
79
80
81
82
83 private EndToken endToken;
84
85
86
87
88 @Before
89 public void setUp() {
90 this.colonToken = ColonToken.create(Position.create("", 0 + 1, 0 + 1, 0));
91 this.groupToken = GroupToken.create(Position.create("", 0 + 1, 0 + 1, 0));
92 this.equalToken = EqualToken.create(Position.create("", 0 + 1, 0 + 1, 0));
93 this.squareBracketOpenToken = SquareBracketOpenToken.create(Position.create("", 0, 0, 0));
94 this.squareBracketCloseToken = SquareBracketCloseToken.create(Position.create("", 0, 0, 0));
95 this.semicolonToken = SemicolonToken.create(Position.create("", 0 + 1, 0 + 1, 0));
96 this.classToken = ClassToken.create(Position.create("", 0 + 1, 0 + 1, 0));
97 this.curlyBracketOpenToken = CurlyBracketOpenToken.create(Position.create("", 0, 0, 0));
98 this.curlyBracketCloseToken = CurlyBracketCloseToken.create(Position.create("", 0, 0, 0));
99 this.endToken = EndToken.create(Position.create("", 0 + 1, 0 + 1, 0));
100 }
101
102
103
104
105
106
107
108 @Test
109 public void testModelCalculation() throws Exception {
110 final TokenStream stream = SimpleTokenStream.create();
111 final Parser parser = Parser.create(stream);
112 final IdentifierToken group1Identifier = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
113 final IdentifierToken class1Identifier = IdentifierToken.create("Class1", Position.create("", 1, 1, 0));
114 final IdentifierToken group2Identifier = IdentifierToken.create("Group2", Position.create("", 1, 1, 0));
115 final IdentifierToken class2Identifier = IdentifierToken.create("Class2", Position.create("", 1, 1, 0));
116 final IdentifierToken class3Identifier = IdentifierToken.create("Class3", Position.create("", 1, 1, 0));
117
118 stream.add(group1Identifier);
119 stream.add(this.colonToken);
120 stream.add(this.groupToken);
121 stream.add(this.equalToken);
122 stream.add(this.squareBracketOpenToken);
123 stream.add(class1Identifier);
124 stream.add(this.colonToken);
125 stream.add(this.classToken);
126 stream.add(this.equalToken);
127 stream.add(this.curlyBracketOpenToken);
128 stream.add(this.curlyBracketCloseToken);
129 stream.add(this.semicolonToken);
130 stream.add(this.squareBracketCloseToken);
131 stream.add(this.semicolonToken);
132 stream.add(group2Identifier);
133 stream.add(this.colonToken);
134 stream.add(this.groupToken);
135 stream.add(this.equalToken);
136 stream.add(this.squareBracketOpenToken);
137 stream.add(class2Identifier);
138 stream.add(this.colonToken);
139 stream.add(this.classToken);
140 stream.add(this.equalToken);
141 stream.add(this.curlyBracketOpenToken);
142 stream.add(this.curlyBracketCloseToken);
143 stream.add(this.semicolonToken);
144 stream.add(class3Identifier);
145 stream.add(this.colonToken);
146 stream.add(this.classToken);
147 stream.add(this.equalToken);
148 stream.add(this.curlyBracketOpenToken);
149 stream.add(this.curlyBracketCloseToken);
150 stream.add(this.semicolonToken);
151 stream.add(this.squareBracketCloseToken);
152 stream.add(this.semicolonToken);
153 stream.add(this.endToken);
154
155 final Model model = parser.parse();
156 final Tuple<Collection<ClassType>, Collection<Group>> groupsClasses = model.calcAllGroupsAndClasses();
157 assertEquals(3, groupsClasses.getFirst().size());
158 assertEquals(2, groupsClasses.getSecond().size());
159 }
160
161
162
163
164
165
166
167
168 @Test
169 public void testModelCalculation2() throws Exception {
170 final TokenStream stream = SimpleTokenStream.create();
171 final Parser parser = Parser.create(stream);
172 final IdentifierToken group1Identifier = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
173 final IdentifierToken class1Identifier = IdentifierToken.create("Class1", Position.create("", 1, 1, 0));
174 final IdentifierToken group2Identifier = IdentifierToken.create("Group2", Position.create("", 1, 1, 0));
175 final IdentifierToken class2Identifier = IdentifierToken.create("Class2", Position.create("", 1, 1, 0));
176 final IdentifierToken class3Identifier = IdentifierToken.create("Class3", Position.create("", 1, 1, 0));
177 final IdentifierToken group3Identifier = IdentifierToken.create("Group3", Position.create("", 1, 1, 0));
178 final IdentifierToken class4Identifier = IdentifierToken.create("Class4", Position.create("", 1, 1, 0));
179
180 stream.add(group1Identifier);
181 stream.add(this.colonToken);
182 stream.add(this.groupToken);
183 stream.add(this.equalToken);
184 stream.add(this.squareBracketOpenToken);
185 stream.add(group3Identifier);
186 stream.add(this.colonToken);
187 stream.add(this.groupToken);
188 stream.add(this.equalToken);
189 stream.add(this.squareBracketOpenToken);
190 stream.add(class4Identifier);
191 stream.add(this.colonToken);
192 stream.add(this.classToken);
193 stream.add(this.equalToken);
194 stream.add(this.curlyBracketOpenToken);
195 stream.add(this.curlyBracketCloseToken);
196 stream.add(this.semicolonToken);
197 stream.add(this.squareBracketCloseToken);
198 stream.add(this.semicolonToken);
199 stream.add(class1Identifier);
200 stream.add(this.colonToken);
201 stream.add(this.classToken);
202 stream.add(this.equalToken);
203 stream.add(this.curlyBracketOpenToken);
204 stream.add(this.curlyBracketCloseToken);
205 stream.add(this.semicolonToken);
206 stream.add(this.squareBracketCloseToken);
207 stream.add(this.semicolonToken);
208 stream.add(group2Identifier);
209 stream.add(this.colonToken);
210 stream.add(this.groupToken);
211 stream.add(this.equalToken);
212 stream.add(this.squareBracketOpenToken);
213 stream.add(class2Identifier);
214 stream.add(this.colonToken);
215 stream.add(this.classToken);
216 stream.add(this.equalToken);
217 stream.add(this.curlyBracketOpenToken);
218 stream.add(this.curlyBracketCloseToken);
219 stream.add(this.semicolonToken);
220 stream.add(class3Identifier);
221 stream.add(this.colonToken);
222 stream.add(this.classToken);
223 stream.add(this.equalToken);
224 stream.add(this.curlyBracketOpenToken);
225 stream.add(this.curlyBracketCloseToken);
226 stream.add(this.semicolonToken);
227 stream.add(this.squareBracketCloseToken);
228 stream.add(this.semicolonToken);
229 stream.add(this.endToken);
230
231 final Model model = parser.parse();
232 final Tuple<Collection<ClassType>, Collection<Group>> groupsClasses = model.calcAllGroupsAndClasses();
233 assertEquals(4, groupsClasses.getFirst().size());
234 assertEquals(3, groupsClasses.getSecond().size());
235 }
236
237
238
239
240
241
242
243 @Test
244 public void testModelHashCode() throws Exception {
245 final TokenStream stream1 = SimpleTokenStream.create();
246 final TokenStream stream2 = SimpleTokenStream.create();
247 final Parser parser1 = Parser.create(stream1);
248 final Parser parser2 = Parser.create(stream2);
249 final IdentifierToken group1Identifier = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
250 final IdentifierToken class1Identifier = IdentifierToken.create("Class1", Position.create("", 1, 1, 0));
251 final IdentifierToken group2Identifier = IdentifierToken.create("Group2", Position.create("", 1, 1, 0));
252 final IdentifierToken class2Identifier = IdentifierToken.create("Class2", Position.create("", 1, 1, 0));
253 final IdentifierToken class3Identifier = IdentifierToken.create("Class3", Position.create("", 1, 1, 0));
254 stream1.add(group1Identifier);
255 stream1.add(this.colonToken);
256 stream1.add(this.groupToken);
257 stream1.add(this.equalToken);
258 stream1.add(this.squareBracketOpenToken);
259 stream1.add(class1Identifier);
260 stream1.add(this.colonToken);
261 stream1.add(this.classToken);
262 stream1.add(this.equalToken);
263 stream1.add(this.curlyBracketOpenToken);
264 stream1.add(this.curlyBracketCloseToken);
265 stream1.add(this.semicolonToken);
266 stream1.add(this.squareBracketCloseToken);
267 stream1.add(this.semicolonToken);
268 stream1.add(group2Identifier);
269 stream1.add(this.colonToken);
270 stream1.add(this.groupToken);
271 stream1.add(this.equalToken);
272 stream1.add(this.squareBracketOpenToken);
273 stream1.add(class2Identifier);
274 stream1.add(this.colonToken);
275 stream1.add(this.classToken);
276 stream1.add(this.equalToken);
277 stream1.add(this.curlyBracketOpenToken);
278 stream1.add(this.curlyBracketCloseToken);
279 stream1.add(this.semicolonToken);
280 stream1.add(class3Identifier);
281 stream1.add(this.colonToken);
282 stream1.add(this.classToken);
283 stream1.add(this.equalToken);
284 stream1.add(this.curlyBracketOpenToken);
285 stream1.add(this.curlyBracketCloseToken);
286 stream1.add(this.semicolonToken);
287 stream1.add(this.squareBracketCloseToken);
288 stream1.add(this.semicolonToken);
289 stream1.add(this.endToken);
290
291 final Model model1 = parser1.parse();
292
293 stream2.add(group1Identifier);
294 stream2.add(this.colonToken);
295 stream2.add(this.groupToken);
296 stream2.add(this.equalToken);
297 stream2.add(this.squareBracketOpenToken);
298 stream2.add(class1Identifier);
299 stream2.add(this.colonToken);
300 stream2.add(this.classToken);
301 stream2.add(this.equalToken);
302 stream2.add(this.curlyBracketOpenToken);
303 stream2.add(this.curlyBracketCloseToken);
304 stream2.add(this.semicolonToken);
305 stream2.add(this.squareBracketCloseToken);
306 stream2.add(this.semicolonToken);
307 stream2.add(group2Identifier);
308 stream2.add(this.colonToken);
309 stream2.add(this.groupToken);
310 stream2.add(this.equalToken);
311 stream2.add(this.squareBracketOpenToken);
312 stream2.add(class2Identifier);
313 stream2.add(this.colonToken);
314 stream2.add(this.classToken);
315 stream2.add(this.equalToken);
316 stream2.add(this.curlyBracketOpenToken);
317 stream2.add(this.curlyBracketCloseToken);
318 stream2.add(this.semicolonToken);
319 stream2.add(class3Identifier);
320 stream2.add(this.colonToken);
321 stream2.add(this.classToken);
322 stream2.add(this.equalToken);
323 stream2.add(this.curlyBracketOpenToken);
324 stream2.add(this.curlyBracketCloseToken);
325 stream2.add(this.semicolonToken);
326 stream2.add(this.squareBracketCloseToken);
327 stream2.add(this.semicolonToken);
328 stream2.add(this.endToken);
329
330 final Model model2 = parser2.parse();
331 assertEquals(model1, model2);
332 assertEquals(model1.hashCode(), model2.hashCode());
333 }
334 }