Parser: Useful error messages when a Python keyword is used.
--
MOS_MIGRATED_REVID=89307831
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
index afca4b3..683f2c7 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
@@ -316,8 +316,16 @@
public void testAssignKeyword() {
syntaxEvents.setFailFast(false);
parseExpr("with = 4");
+ syntaxEvents.assertContainsEvent("keyword 'with' not supported");
syntaxEvents.assertContainsEvent("syntax error at 'with': expected expression");
- syntaxEvents.collector().clear();
+ }
+
+ @Test
+ public void testTry() {
+ syntaxEvents.setFailFast(false);
+ parseExpr("try: 1 + 1");
+ syntaxEvents.assertContainsEvent("'try' not supported, all exceptions are fatal");
+ syntaxEvents.assertContainsEvent("syntax error at 'try': expected expression");
}
@Test
@@ -754,6 +762,21 @@
}
@Test
+ public void testFunctionDefinitionIgnoredEvenWithUnsupportedKeyword() throws Exception {
+ // Parser skips over entire function definitions without reporting error,
+ // when parsePython is set to true.
+ List<Statement> stmts = parseFile(
+ "x = 1;\n"
+ + "def foo(x, y, **z):\n"
+ + " try:\n"
+ + " x = 2\n"
+ + " with: pass\n"
+ + " return 2\n"
+ + "x = 3", true /* parsePython */);
+ assertThat(stmts).hasSize(2);
+ }
+
+ @Test
public void testFunctionDefinitionIgnored() throws Exception {
// Parser skips over entire function definitions without reporting error,
// when parsePython is set to true.