1 module TTSListenerTest;
2
3 import std.stdio;
4 import std.conv;
5
6 import RuleTranslatorLexer : RuleTranslatorLexer;
7 import RuleTranslatorParser : RuleTranslatorParser;
8 import antlr.v4.runtime.ANTLRInputStream;
9 import antlr.v4.runtime.CommonToken;
10 import antlr.v4.runtime.CommonTokenStream;
11 import antlr.v4.runtime.DiagnosticErrorListener;
12 import antlr.v4.runtime.LexerNoViableAltException;
13 import antlr.v4.runtime.Token;
14 import antlr.v4.runtime.atn.ParserATNSimulator;
15 import antlr.v4.runtime.tree.ParseTreeWalker;
16 import dshould;
17 import std.conv : to;
18 import std.file;
19
20 @("input file missing")
21 unittest
22 {
23 try
24 auto antlrInput = new ANTLRInputStream(File("simple.rule1"));
25 catch (Exception e)
26 e.msg.should.equal("Cannot open file `simple.rule1' in " ~
27 "mode `rb' (No such file or directory)");
28 }
29
30 @("rule")
31 unittest
32 {
33 auto antlrInput = new ANTLRInputStream(File("unittest/complex/complex.rule", "r"));
34 auto lexer = new RuleTranslatorLexer(antlrInput);
35 auto cts = new CommonTokenStream(lexer);
36 cts.getNumberOfOnChannelTokens.should.equal(405);
37 auto f = File("unittest/complex/tokens.cmp");
38 auto charRange = f.byLine();
39 string s;
40 int i;
41 foreach (t; charRange) {
42 s = cts.get(i++).to!string;
43 s.should.equal(t);
44 }
45 f.close;
46 }
47
48 @("simple_rule")
49 unittest
50 {
51 auto antlrInput = new ANTLRInputStream(File("unittest/complex/simple.rule", "r"));
52 auto lexer = new RuleTranslatorLexer(antlrInput);
53 auto cts = new CommonTokenStream(lexer);
54 cts.getNumberOfOnChannelTokens.should.equal(35);
55 auto f = File("unittest/complex/simple_tokens.cmp");
56 auto charRange = f.byLine();
57 string s;
58 int i;
59 foreach (t; charRange) {
60 s = cts.get(i++).to!string;
61 s.should.equal(t);
62 }
63 f.close;
64 auto parser = new RuleTranslatorParser(cts);
65 // Specify entry point
66 auto rootContext = parser.file_input;
67 parser.numberOfSyntaxErrors.should.equal(0);
68 }
69
70 @("simple_rule_syntax_error")
71 unittest
72 {
73 auto antlrInput = new ANTLRInputStream(File("unittest/complex/simple_error.rule", "r"));
74 auto lexer = new RuleTranslatorLexer(antlrInput);
75 auto cts = new CommonTokenStream(lexer);
76 cts.getNumberOfOnChannelTokens.should.equal(36);
77 auto f = File("unittest/complex/simple_tokens_error.cmp");
78 auto charRange = f.byLine();
79 string s;
80 int i;
81 foreach (t; charRange) {
82 s = cts.get(i++).to!string;
83 s.should.equal(t);
84 }
85 f.close;
86 auto parser = new RuleTranslatorParser(cts);
87 parser.addErrorListener(new DiagnosticErrorListener);
88 // Specify entry point
89 auto rootContext = parser.file_input;
90 parser.numberOfSyntaxErrors.should.equal(2);
91 }