Fix (broken) unit tests which included implicitly defined tokens

This commit is contained in:
Sam Harwell 2012-04-03 16:42:22 -05:00
parent b433c2ae34
commit c3e5c42c51
4 changed files with 54 additions and 44 deletions

View File

@ -9,6 +9,7 @@ public class TestAttributeChecks extends BaseTest {
String attributeTemplate = String attributeTemplate =
"parser grammar A;\n"+ "parser grammar A;\n"+
"@members {<members>}\n" + "@members {<members>}\n" +
"tokens{ID;}\n" +
"a[int x] returns [int y]\n" + "a[int x] returns [int y]\n" +
"@init {<init>}\n" + "@init {<init>}\n" +
" : id=ID ids+=ID lab=b[34] {\n" + " : id=ID ids+=ID lab=b[34] {\n" +
@ -36,8 +37,8 @@ public class TestAttributeChecks extends BaseTest {
"$lab.e", "", "$lab.e", "",
"$ids", "", "$ids", "",
"$c", "error(63): A.g4:4:8: unknown attribute reference c in $c\n", "$c", "error(63): A.g4:5:8: unknown attribute reference c in $c\n",
"$a.q", "error(65): A.g4:4:10: unknown attribute q for rule a in $a.q\n", "$a.q", "error(65): A.g4:5:10: unknown attribute q for rule a in $a.q\n",
}; };
String[] inlineChecks = { String[] inlineChecks = {
@ -58,19 +59,19 @@ public class TestAttributeChecks extends BaseTest {
}; };
String[] bad_inlineChecks = { String[] bad_inlineChecks = {
"$lab", "error(67): A.g4:6:4: missing attribute access on rule reference lab in $lab\n", "$lab", "error(67): A.g4:7:4: missing attribute access on rule reference lab in $lab\n",
"$q", "error(63): A.g4:6:4: unknown attribute reference q in $q\n", "$q", "error(63): A.g4:7:4: unknown attribute reference q in $q\n",
"$q.y", "error(63): A.g4:6:4: unknown attribute reference q in $q.y\n", "$q.y", "error(63): A.g4:7:4: unknown attribute reference q in $q.y\n",
"$q = 3", "error(63): A.g4:6:4: unknown attribute reference q in $q\n", "$q = 3", "error(63): A.g4:7:4: unknown attribute reference q in $q\n",
"$q = 3;", "error(63): A.g4:6:4: unknown attribute reference q in $q = 3;\n", "$q = 3;", "error(63): A.g4:7:4: unknown attribute reference q in $q = 3;\n",
"$q.y = 3;", "error(63): A.g4:6:4: unknown attribute reference q in $q.y = 3;\n", "$q.y = 3;", "error(63): A.g4:7:4: unknown attribute reference q in $q.y = 3;\n",
"$q = $blort;", "error(63): A.g4:6:4: unknown attribute reference q in $q = $blort;\n" + "$q = $blort;", "error(63): A.g4:7:4: unknown attribute reference q in $q = $blort;\n" +
"error(63): A.g4:6:9: unknown attribute reference blort in $blort\n", "error(63): A.g4:7:9: unknown attribute reference blort in $blort\n",
"$a.ick", "error(65): A.g4:6:6: unknown attribute ick for rule a in $a.ick\n", "$a.ick", "error(65): A.g4:7:6: unknown attribute ick for rule a in $a.ick\n",
"$a.ick = 3;", "error(65): A.g4:6:6: unknown attribute ick for rule a in $a.ick = 3;\n", "$a.ick = 3;", "error(65): A.g4:7:6: unknown attribute ick for rule a in $a.ick = 3;\n",
"$b.d", "error(64): A.g4:6:6: cannot access rule d's parameter: $b.d\n", // can't see rule ref's arg "$b.d", "error(64): A.g4:7:6: cannot access rule d's parameter: $b.d\n", // can't see rule ref's arg
"$d.text", "error(63): A.g4:6:4: unknown attribute reference d in $d.text\n", // valid rule, but no ref "$d.text", "error(63): A.g4:7:4: unknown attribute reference d in $d.text\n", // valid rule, but no ref
"$lab.d", "error(64): A.g4:6:8: cannot access rule d's parameter: $lab.d\n", "$lab.d", "error(64): A.g4:7:8: cannot access rule d's parameter: $lab.d\n",
}; };
String[] finallyChecks = { String[] finallyChecks = {
@ -84,20 +85,20 @@ public class TestAttributeChecks extends BaseTest {
"$id.text", "", "$id.text", "",
"$ids", "", "$ids", "",
"$lab", "error(67): A.g4:9:14: missing attribute access on rule reference lab in $lab\n", "$lab", "error(67): A.g4:10:14: missing attribute access on rule reference lab in $lab\n",
"$q", "error(63): A.g4:9:14: unknown attribute reference q in $q\n", "$q", "error(63): A.g4:10:14: unknown attribute reference q in $q\n",
"$q.y", "error(63): A.g4:9:14: unknown attribute reference q in $q.y\n", "$q.y", "error(63): A.g4:10:14: unknown attribute reference q in $q.y\n",
"$q = 3", "error(63): A.g4:9:14: unknown attribute reference q in $q\n", "$q = 3", "error(63): A.g4:10:14: unknown attribute reference q in $q\n",
"$q = 3;", "error(63): A.g4:9:14: unknown attribute reference q in $q = 3;\n", "$q = 3;", "error(63): A.g4:10:14: unknown attribute reference q in $q = 3;\n",
"$q.y = 3;", "error(63): A.g4:9:14: unknown attribute reference q in $q.y = 3;\n", "$q.y = 3;", "error(63): A.g4:10:14: unknown attribute reference q in $q.y = 3;\n",
"$q = $blort;", "error(63): A.g4:9:14: unknown attribute reference q in $q = $blort;\n" + "$q = $blort;", "error(63): A.g4:10:14: unknown attribute reference q in $q = $blort;\n" +
"error(63): A.g4:9:19: unknown attribute reference blort in $blort\n", "error(63): A.g4:10:19: unknown attribute reference blort in $blort\n",
"$a.ick", "error(65): A.g4:9:16: unknown attribute ick for rule a in $a.ick\n", "$a.ick", "error(65): A.g4:10:16: unknown attribute ick for rule a in $a.ick\n",
"$a.ick = 3;", "error(65): A.g4:9:16: unknown attribute ick for rule a in $a.ick = 3;\n", "$a.ick = 3;", "error(65): A.g4:10:16: unknown attribute ick for rule a in $a.ick = 3;\n",
"$b.e", "error(63): A.g4:9:14: unknown attribute reference b in $b.e\n", // can't see rule refs outside alts "$b.e", "error(63): A.g4:10:14: unknown attribute reference b in $b.e\n", // can't see rule refs outside alts
"$b.d", "error(63): A.g4:9:14: unknown attribute reference b in $b.d\n", "$b.d", "error(63): A.g4:10:14: unknown attribute reference b in $b.d\n",
"$c.text", "error(63): A.g4:9:14: unknown attribute reference c in $c.text\n", "$c.text", "error(63): A.g4:10:14: unknown attribute reference c in $c.text\n",
"$lab.d", "error(64): A.g4:9:18: cannot access rule d's parameter: $lab.d\n", "$lab.d", "error(64): A.g4:10:18: cannot access rule d's parameter: $lab.d\n",
}; };
String[] dynMembersChecks = { String[] dynMembersChecks = {
@ -200,6 +201,7 @@ public class TestAttributeChecks extends BaseTest {
@Test public void testTokenRef() throws RecognitionException { @Test public void testTokenRef() throws RecognitionException {
String grammar = String grammar =
"parser grammar S;\n" + "parser grammar S;\n" +
"tokens{ID;}\n" +
"a : x=ID {Token t = $x; t = $ID;} ;\n"; "a : x=ID {Token t = $x; t = $ID;} ;\n";
String expected = String expected =
""; "";

View File

@ -37,6 +37,7 @@ public class TestBasicSemanticErrors extends BaseTest {
"parser grammar U;\n" + "parser grammar U;\n" +
"options { foo=bar; k=\"3\";}\n" + "options { foo=bar; k=\"3\";}\n" +
"tokens {\n" + "tokens {\n" +
" ID;\n" +
" f='fkj';\n" + " f='fkj';\n" +
" S = 'a';\n" + " S = 'a';\n" +
"}\n" + "}\n" +
@ -52,16 +53,16 @@ public class TestBasicSemanticErrors extends BaseTest {
// YIELDS // YIELDS
"warning(83): U.g4:2:10: illegal option foo\n" + "warning(83): U.g4:2:10: illegal option foo\n" +
"warning(83): U.g4:2:19: illegal option k\n" + "warning(83): U.g4:2:19: illegal option k\n" +
"error(60): U.g4:4:8: token names must start with an uppercase letter: f\n" + "error(60): U.g4:5:8: token names must start with an uppercase letter: f\n" +
"error(59): U.g4:4:8: can't assign string value to token name f in non-combined grammar\n" + "error(59): U.g4:5:8: can't assign string value to token name f in non-combined grammar\n" +
"error(59): U.g4:5:8: can't assign string value to token name S in non-combined grammar\n" + "error(59): U.g4:6:8: can't assign string value to token name S in non-combined grammar\n" +
"warning(83): U.g4:8:10: illegal option x\n" + "warning(83): U.g4:9:10: illegal option x\n" +
"error(54): U.g4:9:0: repeated grammar prequel spec (option, token, or import); please merge\n" +
"error(54): U.g4:8:0: repeated grammar prequel spec (option, token, or import); please merge\n" + "error(54): U.g4:8:0: repeated grammar prequel spec (option, token, or import); please merge\n" +
"error(54): U.g4:7:0: repeated grammar prequel spec (option, token, or import); please merge\n" + "warning(83): U.g4:12:10: illegal option blech\n" +
"warning(83): U.g4:11:10: illegal option blech\n" + "warning(83): U.g4:12:21: illegal option greedy\n" +
"warning(83): U.g4:11:21: illegal option greedy\n" + "warning(83): U.g4:15:16: illegal option ick\n" +
"warning(83): U.g4:14:16: illegal option ick\n" + "warning(83): U.g4:16:16: illegal option x\n",
"warning(83): U.g4:15:16: illegal option x\n",
}; };
@Test public void testU() { super.testErrors(U, false); } @Test public void testU() { super.testErrors(U, false); }

View File

@ -501,29 +501,34 @@ public class TestCompositeGrammars extends BaseTest {
ErrorQueue equeue = new ErrorQueue(); ErrorQueue equeue = new ErrorQueue();
String slave = String slave =
"parser grammar T;\n" + "parser grammar T;\n" +
"tokens{T;}\n" +
"x : T ;\n" ; "x : T ;\n" ;
mkdir(tmpdir); mkdir(tmpdir);
writeFile(tmpdir, "T.g4", slave); writeFile(tmpdir, "T.g4", slave);
slave = slave =
"parser grammar S;\n" + "parser grammar S;\n" +
"import T;\n" + "import T;\n" +
"tokens{S;}\n" +
"y : S ;\n" ; "y : S ;\n" ;
mkdir(tmpdir); mkdir(tmpdir);
writeFile(tmpdir, "S.g4", slave); writeFile(tmpdir, "S.g4", slave);
slave = slave =
"parser grammar C;\n" + "parser grammar C;\n" +
"tokens{C;}\n" +
"i : C ;\n" ; "i : C ;\n" ;
mkdir(tmpdir); mkdir(tmpdir);
writeFile(tmpdir, "C.g4", slave); writeFile(tmpdir, "C.g4", slave);
slave = slave =
"parser grammar B;\n" + "parser grammar B;\n" +
"tokens{B;}\n" +
"j : B ;\n" ; "j : B ;\n" ;
mkdir(tmpdir); mkdir(tmpdir);
writeFile(tmpdir, "B.g4", slave); writeFile(tmpdir, "B.g4", slave);
slave = slave =
"parser grammar A;\n" + "parser grammar A;\n" +
"import B,C;\n" + "import B,C;\n" +
"tokens{A;}\n" +
"k : A ;\n" ; "k : A ;\n" ;
mkdir(tmpdir); mkdir(tmpdir);
writeFile(tmpdir, "A.g4", slave); writeFile(tmpdir, "A.g4", slave);
@ -531,12 +536,13 @@ public class TestCompositeGrammars extends BaseTest {
String master = String master =
"grammar M;\n" + "grammar M;\n" +
"import S,A;\n" + "import S,A;\n" +
"tokens{M;}\n" +
"a : M ;\n" ; "a : M ;\n" ;
writeFile(tmpdir, "M.g4", master); writeFile(tmpdir, "M.g4", master);
Grammar g = new Grammar(tmpdir+"/M.g4", master, equeue); Grammar g = new Grammar(tmpdir+"/M.g4", master, equeue);
assertEquals(equeue.errors.toString(), "[]"); assertEquals("[]", equeue.errors.toString());
assertEquals(equeue.warnings.toString(), "[]"); assertEquals("[]", equeue.warnings.toString());
String expectedTokenIDToTypeMap = "{EOF=-1, M=3, S=4, T=5, A=6, B=7, C=8}"; String expectedTokenIDToTypeMap = "{EOF=-1, M=3, S=4, T=5, A=6, B=7, C=8}";
String expectedStringLiteralToTypeMap = "{}"; String expectedStringLiteralToTypeMap = "{}";
String expectedTypeToTokenList = "[M, S, T, A, B, C]"; String expectedTypeToTokenList = "[M, S, T, A, B, C]";

View File

@ -34,7 +34,7 @@ public class TestSymbolIssues extends BaseTest {
static String[] B = { static String[] B = {
// INPUT // INPUT
"parser grammar B;\n" + "parser grammar B;\n" +
"tokens { X='x'; Y; }\n" + "tokens { ID; FOO; X='x'; Y; }\n" +
"\n" + "\n" +
"a : s=ID b+=ID X=ID '.' ;\n" + "a : s=ID b+=ID X=ID '.' ;\n" +
"\n" + "\n" +
@ -42,7 +42,7 @@ public class TestSymbolIssues extends BaseTest {
"\n" + "\n" +
"s : FOO ;", "s : FOO ;",
// YIELDS // YIELDS
"error(59): B.g4:2:9: can't assign string value to token name X in non-combined grammar\n" + "error(59): B.g4:2:18: can't assign string value to token name X in non-combined grammar\n" +
"error(69): B.g4:4:4: label s conflicts with rule with same name\n" + "error(69): B.g4:4:4: label s conflicts with rule with same name\n" +
"error(69): B.g4:4:9: label b conflicts with rule with same name\n" + "error(69): B.g4:4:9: label b conflicts with rule with same name\n" +
"error(70): B.g4:4:15: label X conflicts with token with same name\n" + "error(70): B.g4:4:15: label X conflicts with token with same name\n" +
@ -52,6 +52,7 @@ public class TestSymbolIssues extends BaseTest {
static String[] D = { static String[] D = {
// INPUT // INPUT
"parser grammar D;\n" + "parser grammar D;\n" +
"tokens{ID;}\n" +
"a[int j] \n" + "a[int j] \n" +
" : i=ID j=ID ;\n" + " : i=ID j=ID ;\n" +
"\n" + "\n" +
@ -61,8 +62,8 @@ public class TestSymbolIssues extends BaseTest {
" : ID ;", " : ID ;",
// YIELDS // YIELDS
"error(72): D.g4:3:21: label j conflicts with rule a's return value or parameter with same name\n" + "error(72): D.g4:4:21: label j conflicts with rule a's return value or parameter with same name\n" +
"error(76): D.g4:5:0: rule b's argument i conflicts a return value with same name\n" "error(76): D.g4:6:0: rule b's argument i conflicts a return value with same name\n"
}; };
static String[] E = { static String[] E = {