1 module ddparser.engine_tests;
2 
3 import ddparser.write_tables;
4 import ddparser.parse;
5 import ddparser.dparse_tables;
6 import ddparser.gramgram;
7 import ddparser.gram;
8 import ddparser.dparse;
9 import ddparser.util;
10 import std.stdio;
11 import std.path;
12 import std.string;
13 
14 
15 unittest
16 {
17     string[] tests = [
18         "g2.test",
19         "g3.test",
20 //      "g4.test",
21         "g5.test",
22         "g6.test",
23 //      "g7.test",
24         "g8.test",
25         "g9.test",
26 //      "g10.test",
27         "g11.test",
28         "g12.test",
29         "g13.test",
30         "g14.test",
31         /* "g15.test", */
32         /* "g16.test", */
33         /* "g17.test", */
34         /* "g18.test", */
35         /* "g19.test", */
36         /* "g20.test", */
37         "g21.test",
38         "g22.test",
39         "g23.test",
40         "g24.test",
41         /* "g25.test", */
42         /* "g26.test", */
43 
44         "g37.test",
45         /* "g38.test", */
46         "g39.test",
47         /* "g40.test", */
48         "g41.test",
49         /* "g42.test", */
50         "g43.test",
51         "g44.test",
52         /* "g45.test", */
53         "g46.test",
54         /* "g47.test", // WHITESPACE */
55         /* "g48.test", */
56         /* "g49.test", */
57         /* "g50.test", */
58         "g51.test",
59     ];
60 
61     enum testFolder = dirName(__FILE__) ~ "/../../d/tests";
62 
63     debug(trace)
64     {
65         pragma(msg, "This test will not be run in debug(trace)");
66     }
67     else
68     {
69         foreach(i; tests)
70         {
71             stderr.writeln(i);
72             D_Grammar* g = createEmptyGrammar();
73             string gram = readContentsOfFile(testFolder ~ "/" ~ i ~ ".g");
74             parseGrammar(g, gram) || assert(false);
75             build_grammar(g) >= 0 || assert(false);
76 
77             auto binaryTables = createTablesFromGrammar(g, null, null);
78 
79             auto parser = new_D_Parser(binaryTables, D_ParseNode_User.sizeof);
80             parser.save_parse_tree = 1;
81 
82             string input = readContentsOfFile(testFolder ~ "/" ~ i ~ ".g.1");
83             auto oldVL = d_verbose_level;
84 
85             string output;
86             logFunc = (s) { output ~= s; };
87             d_verbose_level = 1;
88             D_ParseNode * node = dparse(parser, input);
89             d_verbose_level = oldVL;
90 
91             string expectedOutput = readContentsOfFile(testFolder ~ "/" ~ i ~ ".g.1.check");
92             assert(output == expectedOutput);
93         }
94     }
95 }
96