diff options
author | Emmanuel Bourg <ebourg@apache.org> | 2016-03-22 17:34:37 +0100 |
---|---|---|
committer | Emmanuel Bourg <ebourg@apache.org> | 2016-03-22 17:34:37 +0100 |
commit | 1a7b7906cbb3c334e0e8fe1dfdb68f16fefa8555 (patch) | |
tree | 2f2cb19f44478cc382321aa59914c1b60a295792 /tool-testsuite | |
parent | 5cd489db342e6cd6968fafc552c5dd2d850d7c3c (diff) |
Imported Upstream version 4.5.2
Diffstat (limited to 'tool-testsuite')
-rw-r--r-- | tool-testsuite/pom.xml | 3 | ||||
-rw-r--r-- | tool-testsuite/test/org/antlr/v4/test/tool/JavaLR.g4 (renamed from tool-testsuite/test/org/antlr/v4/test/tool/Java-LR.g4) | 2 | ||||
-rw-r--r-- | tool-testsuite/test/org/antlr/v4/test/tool/TestATNSerialization.java | 2 | ||||
-rw-r--r-- | tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java | 19 | ||||
-rw-r--r-- | tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java | 54 | ||||
-rw-r--r-- | tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java | 27 |
6 files changed, 95 insertions, 12 deletions
diff --git a/tool-testsuite/pom.xml b/tool-testsuite/pom.xml index e21d6f8..81b4525 100644 --- a/tool-testsuite/pom.xml +++ b/tool-testsuite/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>org.antlr</groupId> <artifactId>antlr4-master</artifactId> - <version>4.5.1</version> + <version>4.5.2-1</version> </parent> <artifactId>antlr4-tool-testsuite</artifactId> <name>ANTLR 4 Tool Tests</name> @@ -76,6 +76,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> + <version>2.12.4</version> <configuration> <systemPropertyVariables> <antlr-python2-runtime>../../antlr4-python2/src</antlr-python2-runtime> diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/Java-LR.g4 b/tool-testsuite/test/org/antlr/v4/test/tool/JavaLR.g4 index 9d38d02..049e283 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/Java-LR.g4 +++ b/tool-testsuite/test/org/antlr/v4/test/tool/JavaLR.g4 @@ -168,7 +168,7 @@ * letter-or-digit is a character for which the method * Character.isJavaIdentifierPart(int) returns true." */ -grammar Java; +grammar JavaLR; // starting point for parsing a java file /* The annotations are separated out to make parsing faster, but must be associated with diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNSerialization.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNSerialization.java index 5aaede3..2c1a2b0 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNSerialization.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNSerialization.java @@ -632,7 +632,7 @@ public class TestATNSerialization extends BaseTest { "lexer grammar L;\n"+ "A : 'a'\n ;\n" + "B : 'b';\n" + - "mode A;\n" + + "mode M;\n" + "C : 'c';\n"+ "D : 'd';\n"); String expecting = diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java index 63a9c40..990cac6 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java @@ -153,7 +153,7 @@ public class TestPerformance extends BaseTest { /** * {@code true} to use the Java grammar with expressions in the v4 - * left-recursive syntax (Java-LR.g4). {@code false} to use the standard + * left-recursive syntax (JavaLR.g4). {@code false} to use the standard * grammar (Java.g4). In either case, the grammar is renamed in the * temporary directory to Java.g4 before compiling. */ @@ -415,10 +415,10 @@ public class TestPerformance extends BaseTest { assertTrue("The JDK_SOURCE_ROOT environment variable must be set for performance testing.", jdkSourceRoot != null && !jdkSourceRoot.isEmpty()); compileJavaParser(USE_LR_GRAMMAR); - final String lexerName = "JavaLexer"; - final String parserName = "JavaParser"; - final String listenerName = "JavaBaseListener"; - final String entryPoint = "compilationUnit"; + final String lexerName = USE_LR_GRAMMAR ? "JavaLRLexer" : "JavaLexer"; + final String parserName = USE_LR_GRAMMAR ? "JavaLRParser" : "JavaParser"; + final String listenerName = USE_LR_GRAMMAR ? "JavaLRBaseListener" : "JavaBaseListener"; + final String entryPoint = "compilationUnit"; final ParserFactory factory = getParserFactory(lexerName, parserName, listenerName, entryPoint); if (!TOP_PACKAGE.isEmpty()) { @@ -1108,9 +1108,10 @@ public class TestPerformance extends BaseTest { } protected void compileJavaParser(boolean leftRecursive) throws IOException { - String grammarFileName = "Java.g4"; - String sourceName = leftRecursive ? "Java-LR.g4" : "Java.g4"; - String body = load(sourceName, null); + String grammarFileName = leftRecursive ? "JavaLR.g4" : "Java.g4"; + String parserName = leftRecursive ? "JavaLRParser" : "JavaParser"; + String lexerName = leftRecursive ? "JavaLRLexer" : "JavaLexer"; + String body = load(grammarFileName, null); List<String> extraOptions = new ArrayList<String>(); extraOptions.add("-Werror"); if (FORCE_ATN) { @@ -1127,7 +1128,7 @@ public class TestPerformance extends BaseTest { } extraOptions.add("-visitor"); String[] extraOptionsArray = extraOptions.toArray(new String[extraOptions.size()]); - boolean success = rawGenerateAndBuildRecognizer(grammarFileName, body, "JavaParser", "JavaLexer", true, extraOptionsArray); + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, body, parserName, lexerName, true, extraOptionsArray); assertTrue(success); } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java index 6934f2c..1c68ba3 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java @@ -116,10 +116,25 @@ public class TestSymbolIssues extends BaseTest { "warning(" + ErrorType.TOKEN_NAME_REASSIGNMENT.code + "): E.g4:3:4: token name A is already defined\n" }; + static String[] F = { + // INPUT + "lexer grammar F;\n" + + "A: 'a';\n" + + "mode M1;\n" + + "A1: 'a';\n" + + "mode M2;\n" + + "A2: 'a';\n" + + "M1: 'b';\n", + + // YIELDS + "error(" + ErrorType.MODE_CONFLICTS_WITH_TOKEN.code + "): F.g4:3:0: mode M1 conflicts with token with same name\n" + }; + @Test public void testA() { super.testErrors(A, false); } @Test public void testB() { super.testErrors(B, false); } @Test public void testD() { super.testErrors(D, false); } @Test public void testE() { super.testErrors(E, false); } + @Test public void testF() { super.testErrors(F, false); } @Test public void testStringLiteralRedefs() throws Exception { String grammar = @@ -169,4 +184,43 @@ public class TestSymbolIssues extends BaseTest { testErrors(test, false); } + + @Test public void testTokensModesChannelsDeclarationConflictsWithReserved() throws Exception { + String[] test = { + "lexer grammar L;\n" + + "channels { SKIP, HIDDEN, channel0 }\n" + + "A: 'a';\n" + + "mode MAX_CHAR_VALUE;\n" + + "MIN_CHAR_VALUE: 'a';\n" + + "mode DEFAULT_MODE;\n" + + "B: 'b';\n" + + "mode M;\n" + + "C: 'c';", + + "error(" + ErrorType.RESERVED_RULE_NAME.code + "): L.g4:5:0: cannot declare a rule with reserved name MIN_CHAR_VALUE\n" + + "error(" + ErrorType.MODE_CONFLICTS_WITH_COMMON_CONSTANTS.code + "): L.g4:4:0: cannot use or declare mode with reserved name MAX_CHAR_VALUE\n" + + "error(" + ErrorType.CHANNEL_CONFLICTS_WITH_COMMON_CONSTANTS.code + "): L.g4:2:11: cannot use or declare channel with reserved name SKIP\n" + + "error(" + ErrorType.CHANNEL_CONFLICTS_WITH_COMMON_CONSTANTS.code + "): L.g4:2:17: cannot use or declare channel with reserved name HIDDEN\n" + }; + + testErrors(test, false); + } + + @Test public void testTokensModesChannelsUsingConflictsWithReserved() throws Exception { + String[] test = { + "lexer grammar L;\n" + + "A: 'a' -> channel(SKIP);\n" + + "B: 'b' -> type(MORE);\n" + + "C: 'c' -> mode(SKIP);\n" + + "D: 'd' -> channel(HIDDEN);\n" + + "E: 'e' -> type(EOF);\n" + + "F: 'f' -> pushMode(DEFAULT_MODE);", + + "error(" + ErrorType.CHANNEL_CONFLICTS_WITH_COMMON_CONSTANTS.code + "): L.g4:2:18: cannot use or declare channel with reserved name SKIP\n" + + "error(" + ErrorType.TOKEN_CONFLICTS_WITH_COMMON_CONSTANTS.code + "): L.g4:3:15: cannot use or declare token with reserved name MORE\n" + + "error(" + ErrorType.MODE_CONFLICTS_WITH_COMMON_CONSTANTS.code + "): L.g4:4:15: cannot use or declare mode with reserved name SKIP\n" + }; + + testErrors(test, false); + } } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java index ceaa570..c411434 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java @@ -455,6 +455,33 @@ public class TestToolSyntaxErrors extends BaseTest { } /** + * This is a regression test for antlr/antlr4#959 "NullPointerException". + * https://github.com/antlr/antlr4/issues/959 + */ + @Test public void testNotAllowedEmptyStrings() { + String grammar = + "lexer grammar T;\n" + + "Error0: '''test''';\n" + + "Error1: '' 'test';\n" + + "Error2: 'test' '';\n" + + "Error3: '';\n" + + "NotError: ' ';"; + String expected = + "error(" + ErrorType.EMPTY_STRINGS_NOT_ALLOWED.code + "): T.g4:2:8: string literals cannot be empty\n" + + "error(" + ErrorType.EMPTY_STRINGS_NOT_ALLOWED.code + "): T.g4:2:16: string literals cannot be empty\n" + + "error(" + ErrorType.EMPTY_STRINGS_NOT_ALLOWED.code + "): T.g4:3:8: string literals cannot be empty\n" + + "error(" + ErrorType.EMPTY_STRINGS_NOT_ALLOWED.code + "): T.g4:4:15: string literals cannot be empty\n" + + "error(" + ErrorType.EMPTY_STRINGS_NOT_ALLOWED.code + "): T.g4:5:8: string literals cannot be empty\n"; + + String[] pair = new String[] { + grammar, + expected + }; + + super.testErrors(pair, true); + } + + /** * This test ensures the {@link ErrorType#UNRECOGNIZED_ASSOC_OPTION} warning * is produced as described in the documentation. */ |