1 package de.fhdw.wtf.dsl.scanner.test;
2
3 import static org.junit.Assert.assertEquals;
4
5 import org.junit.Test;
6
7 import de.fhdw.wtf.common.stream.SimpleScannerInput;
8 import de.fhdw.wtf.common.stream.SimpleTokenStream;
9 import de.fhdw.wtf.common.token.EndToken;
10 import de.fhdw.wtf.common.token.IdentifierToken;
11 import de.fhdw.wtf.common.token.Position;
12 import de.fhdw.wtf.common.token.WhitespaceToken;
13 import de.fhdw.wtf.dsl.scanner.common.Scanner;
14 import de.fhdw.wtf.dsl.scanner.modelScanner.ModelDslScanner;
15
16
17
18
19 public class ScannerMultilineTest {
20
21 @Test
22 public void lineIsCountedUp() {
23
24 final VerboseTokenStream output = this.scanOutput("Zeile1\n" + "Zeile2\n" + "Zeile3", 2);
25
26 assertEquals(IdentifierToken.create("Zeile1", Position.create("", 0 + 1, 0 + 1, 0)), output.next());
27 assertEquals(WhitespaceToken.create("\n", Position.create("", 0 + 1, 6 + 1, 6)), output.next());
28 assertEquals(IdentifierToken.create("Zeile2", Position.create("", 1 + 1, 0 + 1, 7)), output.next());
29 assertEquals(WhitespaceToken.create("\n", Position.create("", 1 + 1, 6 + 1, 13)), output.next());
30 assertEquals(IdentifierToken.create("Zeile3", Position.create("", 2 + 1, 0 + 1, 14)), output.next());
31 assertEquals(EndToken.create(Position.create("", 2 + 1, 6 + 1, 20)), output.next());
32 }
33
34 @Test
35 public void lineIsCountedUpWithCarriageReturn() {
36 final VerboseTokenStream output = this.scanOutput("Zeile1\r\n" + "Zeile2\r\n" + "Zeile3", 2);
37
38 assertEquals(IdentifierToken.create("Zeile1", Position.create("", 0 + 1, 0 + 1, 0)), output.next());
39 assertEquals(WhitespaceToken.create("\r\n", Position.create("", 0 + 1, 6 + 1, 6)), output.next());
40 assertEquals(IdentifierToken.create("Zeile2", Position.create("", 1 + 1, 0 + 1, 8)), output.next());
41 assertEquals(WhitespaceToken.create("\r\n", Position.create("", 1 + 1, 6 + 1, 14)), output.next());
42 assertEquals(IdentifierToken.create("Zeile3", Position.create("", 2 + 1, 0 + 1, 16)), output.next());
43 assertEquals(EndToken.create(Position.create("", 2 + 1, 6 + 1, 22)), output.next());
44 }
45
46 @Test
47 public void tabulatorCalculationWorks() {
48 final VerboseTokenStream output = this.scanOutput("ab\tcd\n" + "a\tbcd\n" + "\tabcd\n" + "abcd\tef", 2);
49
50 assertEquals(IdentifierToken.create("ab", Position.create("", 0 + 1, 0 + 1, 0)), output.next());
51 assertEquals(WhitespaceToken.create("\t", Position.create("", 0 + 1, 2 + 1, 2)), output.next());
52 assertEquals(IdentifierToken.create("cd", Position.create("", 0 + 1, 4 + 1, 3)), output.next());
53 assertEquals(WhitespaceToken.create("\n", Position.create("", 0 + 1, 6 + 1, 5)), output.next());
54
55 assertEquals(IdentifierToken.create("a", Position.create("", 1 + 1, 0 + 1, 6)), output.next());
56 assertEquals(WhitespaceToken.create("\t", Position.create("", 1 + 1, 1 + 1, 7)), output.next());
57 assertEquals(IdentifierToken.create("bcd", Position.create("", 1 + 1, 2 + 1, 8)), output.next());
58 assertEquals(WhitespaceToken.create("\n\t", Position.create("", 1 + 1, 5 + 1, 11)), output.next());
59
60 assertEquals(IdentifierToken.create("abcd", Position.create("", 2 + 1, 2 + 1, 13)), output.next());
61 assertEquals(WhitespaceToken.create("\n", Position.create("", 2 + 1, 6 + 1, 17)), output.next());
62
63 assertEquals(IdentifierToken.create("abcd", Position.create("", 3 + 1, 0 + 1, 18)), output.next());
64 assertEquals(WhitespaceToken.create("\t", Position.create("", 3 + 1, 4 + 1, 22)), output.next());
65 assertEquals(IdentifierToken.create("ef", Position.create("", 3 + 1, 6 + 1, 23)), output.next());
66
67 assertEquals(EndToken.create(Position.create("", 3 + 1, 8 + 1, 25)), output.next());
68 }
69
70 private VerboseTokenStream scanOutput(final String s, final int tabWidth) {
71
72 final SimpleScannerInput input = new SimpleScannerInput(s);
73 final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
74 final Scanner scanner = ModelDslScanner.create(tabWidth);
75 scanner.scan(input, output);
76 return output;
77 }
78
79 }