From 17f9e9d1e7877d9de9f16c64b1d7e5cbfff0183f Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Mon, 20 Jun 2022 17:15:13 +0300 Subject: [PATCH] Pass testSourceUri to dynamicTest and to dynamicContainer for convenient navigation to tests data in IntelliJ Signed-off-by: Ivan Kochurkin --- .../antlr/v4/test/runtime/CustomDescriptors.java | 14 ++++++++++---- .../v4/test/runtime/RuntimeTestDescriptor.java | 7 ++++++- .../test/runtime/RuntimeTestDescriptorParser.java | 5 +++-- .../org/antlr/v4/test/runtime/RuntimeTests.java | 11 +++++++---- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/CustomDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/CustomDescriptors.java index 1a04a46cd7a..96484a8fc7e 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/CustomDescriptors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/CustomDescriptors.java @@ -6,12 +6,18 @@ package org.antlr.v4.test.runtime; +import java.net.URI; +import java.nio.file.Paths; import java.util.*; public class CustomDescriptors { public final static HashMap descriptors; + private final static URI uri; static { + uri = Paths.get(RuntimeTestUtils.runtimeTestsuitePath.toString(), + "test", "org", "antlr", "v4", "test", "runtime", "CustomDescriptors.java").toUri(); + descriptors = new HashMap<>(); descriptors.put("LexerExec", new RuntimeTestDescriptor[]{ @@ -41,7 +47,7 @@ private static RuntimeTestDescriptor getLineSeparatorLfDescriptor() { "@members {}\n" + "T: ~'\\n'+;\n" + "SEPARATOR: '\\n';", - null, false, false, null); + null, false, false, null, uri); } private static RuntimeTestDescriptor getLineSeparatorCrLfDescriptor() { @@ -63,7 +69,7 @@ private static RuntimeTestDescriptor getLineSeparatorCrLfDescriptor() { "@members {}\n" + "T: ~'\\r'+;\n" + "SEPARATOR: '\\r\\n';", - null, false, false, null); + null, false, false, null, uri); } private static RuntimeTestDescriptor getLargeLexerDescriptor() { @@ -91,7 +97,7 @@ private static RuntimeTestDescriptor getLargeLexerDescriptor() { "", grammarName, grammar.toString(), - null, false, false, null); + null, false, false, null, uri); } private static RuntimeTestDescriptor getAtnStatesSizeMoreThan65535Descriptor() { @@ -142,6 +148,6 @@ private static RuntimeTestDescriptor getAtnStatesSizeMoreThan65535Descriptor() { grammarName, grammar.toString(), null, false, false, - new String[] {"CSharp", "Python2", "Python3", "Go", "PHP", "Swift", "JavaScript", "Dart"}); + new String[] {"CSharp", "Python2", "Python3", "Go", "PHP", "Swift", "JavaScript", "Dart"}, uri); } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java index 3ca9749a721..a4f377b8c24 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java @@ -8,6 +8,7 @@ import org.antlr.v4.runtime.misc.Pair; +import java.net.URI; import java.util.Arrays; import java.util.List; @@ -52,11 +53,14 @@ public class RuntimeTestDescriptor { public final String[] skipTargets; + public final URI uri; + public RuntimeTestDescriptor(GrammarType testType, String name, String notes, String input, String output, String errors, String startRule, String grammarName, String grammar, List> slaveGrammars, - boolean showDFA, boolean showDiagnosticErrors, String[] skipTargets) { + boolean showDFA, boolean showDiagnosticErrors, String[] skipTargets, + URI uri) { this.testType = testType; this.name = name; this.notes = notes; @@ -70,6 +74,7 @@ public RuntimeTestDescriptor(GrammarType testType, String name, String notes, this.showDFA = showDFA; this.showDiagnosticErrors = showDiagnosticErrors; this.skipTargets = skipTargets != null ? skipTargets : new String[0]; + this.uri = uri; } /** Return true if this test should be ignored for the indicated target */ diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptorParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptorParser.java index 31602f23dab..16867cbd41d 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptorParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptorParser.java @@ -8,6 +8,7 @@ import org.antlr.v4.runtime.misc.Pair; +import java.net.URI; import java.util.*; public class RuntimeTestDescriptorParser { @@ -62,7 +63,7 @@ public class RuntimeTestDescriptorParser { a : b {}; b : B; */ - public static RuntimeTestDescriptor parse(String name, String text) throws RuntimeException { + public static RuntimeTestDescriptor parse(String name, String text, URI uri) throws RuntimeException { String currentField = null; StringBuilder currentValue = new StringBuilder(); @@ -162,7 +163,7 @@ else if ( value.indexOf('\n')>=0 ) { } } return new RuntimeTestDescriptor(testType, name, notes, input, output, errors, startRule, grammarName, grammar, - slaveGrammars, showDFA, showDiagnosticErrors, skipTargets); + slaveGrammars, showDFA, showDiagnosticErrors, skipTargets, uri); } /** Get A, B, or C from: diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTests.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTests.java index 4d02a6e56f8..2659e61556a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTests.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTests.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.net.URL; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; @@ -71,7 +72,7 @@ public abstract class RuntimeTests { } catch (IOException e) { throw new RuntimeException(e); } - descriptors.add(RuntimeTestDescriptorParser.parse(name, text)); + descriptors.add(RuntimeTestDescriptorParser.parse(name, text, descriptorFile.toURI())); } testDescriptors.put(groupName, descriptors.toArray(new RuntimeTestDescriptor[0])); @@ -96,17 +97,19 @@ public List runtimeTests() { ArrayList descriptorTests = new ArrayList<>(); RuntimeTestDescriptor[] descriptors = testDescriptors.get(group); for (RuntimeTestDescriptor descriptor : descriptors) { - descriptorTests.add(dynamicTest(descriptor.name, () -> { + descriptorTests.add(dynamicTest(descriptor.name, descriptor.uri, () -> { try (RuntimeRunner runner = createRuntimeRunner()) { String errorMessage = test(descriptor, runner); if (errorMessage != null) { runner.setSaveTestDir(true); - fail(descriptor.name + "; " + errorMessage + "\nDirectory: " + runner.getTempDirPath()); + fail(descriptor.name + "; " + errorMessage + "\nTest directory: " + runner.getTempDirPath()); } } })); } - result.add(dynamicContainer(group, descriptorTests)); + + Path descriptorGroupPath = Paths.get(RuntimeTestUtils.resourcePath.toString(), "descriptors", group); + result.add(dynamicContainer(group, descriptorGroupPath.toUri(), Arrays.stream(descriptorTests.toArray(new DynamicNode[0])))); } return result;