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