View Javadoc
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   * Prüft mehrzeilige Scanner-Eingaben, sowie die bestimmten Positionen der Tokens und die Tabulatorlogik.
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  }