This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new 82f4723057 Improve rdftests
82f4723057 is described below
commit 82f4723057287ca53565ac39ea4eb53152836531
Author: Andy Seaborne <[email protected]>
AuthorDate: Sun Sep 7 20:39:23 2025 +0100
Improve rdftests
---
.../java/org/apache/jena/arq/junit/LibTest.java | 1 +
.../jena/arq/junit/manifest/ManifestProcessor.java | 35 +++----
.../apache/jena/arq/junit/riot/RiotSyntaxTest.java | 27 ++++--
.../jena/arq/junit/sparql/tests/QueryEvalTest.java | 16 +--
.../arq/junit/sparql/tests/QuerySyntaxTest.java | 8 +-
.../jena/arq/junit/textrunner/ExecutionStats.java | 71 ++++++++++++++
.../junit/textrunner/ManifestConfiguration.java | 51 ++++++++++
.../jena/arq/junit/textrunner/ManifestHolder.java | 51 +++++-----
.../junit/textrunner/PrintExecutionListener.java | 107 +++++++++++----------
.../{TextTestRunner5.java => TextTestRunner.java} | 66 +++++++------
jena-arq/testing/DAWG/Syntax/manifest.n3 | 2 +-
jena-cmds/src/test/java/arq/rdftests.java | 26 +++--
12 files changed, 299 insertions(+), 162 deletions(-)
diff --git a/jena-arq/src/test/java/org/apache/jena/arq/junit/LibTest.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/LibTest.java
index 06ec2b567f..f54c730018 100644
--- a/jena-arq/src/test/java/org/apache/jena/arq/junit/LibTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/arq/junit/LibTest.java
@@ -31,6 +31,7 @@ public class LibTest {
for ( int i = 0 ; i < x.length ; i++ ) {
System.out.printf("%2d -- %s\n", i+1, x[i]);
}
+ System.out.println("====");
}
/** Print a (small) file, with line numbers. The file is read into memory.
*/
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/ManifestProcessor.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/ManifestProcessor.java
index 59286e943e..95feb3c14a 100644
---
a/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/ManifestProcessor.java
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/ManifestProcessor.java
@@ -40,12 +40,19 @@ import org.apache.jena.system.G;
* {@link DynamicContainer}.
* <p>
* Manifest files can contain other manifest files.
- *
*/
public class ManifestProcessor {
private static int counterTest = 0;
- private static int counterContainer = 0;
+ private static int counterManifests = 0;
+
+ public static int getCounterTest() {
+ return counterTest;
+ }
+
+ public static int getCounterManifests() {
+ return counterManifests;
+ }
public static Stream<DynamicNode> testFactory(String filename, String
namePrefix, EntryToTest entryToTest) {
DynamicContainer tests = ManifestProcessor.buildFrom(filename,
namePrefix, entryToTest);
@@ -59,7 +66,7 @@ public class ManifestProcessor {
// "visited" is a safety measure to detect loops in included manifests
files.
private static DynamicContainer build(String filenameOrURI, String
namePrefix, EntryToTest entryToTest, Set<String> visited) {
- int x = ++counterContainer;
+ int x = ++counterManifests;
// Cycle detection.
// This must work for URIs and files so converting to Path is not an
option.
// If via a symbolic links, then real link, this catches one step
later because we didn't normalize.
@@ -73,23 +80,12 @@ public class ManifestProcessor {
// One test seems to be treated differently. test runs, but name does
not show up.
List<DynamicTest> tests = buildTests(manifest, namePrefix,
entryToTest);
-
List<DynamicNode> children = new ArrayList<>();
children.addAll(subManifests);
-
- // Add tests
- if ( tests.size() == 1 ) {
- // Otherwise JUnit5 only shows the container name. (this is maybe
an Eclipse thing)
- DynamicTest test = tests.get(0);
- DynamicContainer here =
DynamicContainer.dynamicContainer(test.getDisplayName(), tests);
- children.add(here);
- } else {
- children.addAll(tests);
- }
-
+ children.addAll(tests);
String containerName = manifest.getName();
- //containerName = "{"+x+"} "+containerName;
- //System.out.println("Container of children="+children.size());
+ if ( containerName == null || containerName.isBlank() )
+ containerName = "Manifest [C"+counterManifests+"] "+filenameOrURI;
try {
return DynamicContainer.dynamicContainer(containerName, children);
@@ -166,7 +162,6 @@ public class ManifestProcessor {
// Eclipse used to parse test names and () were special.
// string = string.replace('(', '[');
// string = string.replace(')', ']');
- return string;
- }
-
+ return string;
+ }
}
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java
index 09c442951b..bbfdca44b8 100644
--- a/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java
@@ -72,17 +72,32 @@ public class RiotSyntaxTest extends AbstractManifestTest{
try {
parser.accept(stream);
if (! expectLegalSyntax ) {
+ String reason = "Parsing succeeded in a bad syntax test";
+ outputFailure(reason, fn, null);
String s = IO.readWholeFileAsUTF8(fn);
- System.err.println();
- System.err.println("== "+filename);
- System.err.print(s);
- fail("Parsing succeeded in a bad syntax test");
+ System.out.println();
+ System.out.println("== "+filename);
+ System.out.println(s);
+ fail(reason);
}
} catch(RiotNotFoundException ex) {
throw ex;
} catch(RiotException ex) {
- if ( expectLegalSyntax )
- fail("Parse error: "+ex.getMessage());
+ if ( expectLegalSyntax ) {
+ String reason = "Parsing failed in a good syntax test";
+ outputFailure(reason, fn, ex);
+ fail(reason+" : "+ex.getMessage());
+ }
}
}
+
+ private void outputFailure(String reason, String fn, Throwable th) {
+ String s = IO.readWholeFileAsUTF8(fn);
+ System.err.println();
+ System.err.println("== "+filename+ " -- "+reason);
+ System.err.print(s);
+ if ( !s.endsWith("\n") )
+ System.err.println();
+ fail("Parsing succeeded in a bad syntax test");
+ }
}
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QueryEvalTest.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QueryEvalTest.java
index 3ca205ebc3..c51e2bc72e 100644
---
a/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QueryEvalTest.java
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QueryEvalTest.java
@@ -92,16 +92,17 @@ public class QueryEvalTest extends AbstractManifestTest {
try {
try {
query = SparqlTestLib.queryFromEntry(manifestEntry);
- } catch (QueryException qEx) {
- qEx.printStackTrace(System.err);
- setupFailure("Parse failure: " + qEx.getMessage());
+ } catch (QueryParseException qEx) {
+ System.err.println("Parse failure in eval test: " +
qEx.getMessage());
+ //setupFailure("Parse failure: " + qEx.getMessage());
+ fail("Parse failure: " + qEx.getMessage());
+ // Keep Java quiet!
throw qEx;
}
Dataset dataset = setUpDataset(query, testItem);
if ( dataset == null && !doesQueryHaveDataset(query) )
setupFailure("No dataset for query");
-
if ( dataset != null )
Txn.executeRead(dataset, ()->execute(dataset,query));
else
@@ -133,8 +134,6 @@ public class QueryEvalTest extends AbstractManifestTest {
protected Dataset setUpDataset(Query query, QueryTestItem testItem) {
try {
- // testItem.requiresTextIndex()
-
if ( doesQueryHaveDataset(query) &&
doesTestItemHaveDataset(testItem) ) {
// Only warn if there are results to test
// Syntax tests may have FROM etc and a manifest data file.
@@ -152,9 +151,10 @@ public class QueryEvalTest extends AbstractManifestTest {
// Left to query
return null;
-
} catch (JenaException jEx) {
- setupFailure("JenaException creating data source: " +
jEx.getMessage());
+ // Parser logger will have printed an error
+ //setupFailure("JenaException creating data source: " +
jEx.getMessage());
+ fail("Parse failure on data: " + jEx.getMessage());
return null;
}
}
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QuerySyntaxTest.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QuerySyntaxTest.java
index 47716a6ee0..88078aea3d 100644
---
a/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QuerySyntaxTest.java
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/sparql/tests/QuerySyntaxTest.java
@@ -45,15 +45,19 @@ public class QuerySyntaxTest extends AbstractManifestTest {
public void runTest() {
try {
Query query = SparqlTestLib.queryFromEntry(manifestEntry,
testSyntax);
- if ( !expectLegalSyntax )
+ if ( !expectLegalSyntax ) {
+ String filename = SparqlTestLib.queryFile(manifestEntry);
+ System.out.printf("==== %s\n", "Negative Syntax test");
+ LibTest.printFile(filename);
fail("Expected parse failure");
+ }
} catch (QueryException qEx) {
if ( expectLegalSyntax ) {
String filename = SparqlTestLib.queryFile(manifestEntry);
+ System.out.printf("==== %s\n", "Positive Syntax test");
LibTest.printFile(filename);
throw qEx;
}
- // Expected a failure.
} catch (Exception ex) {
ex.printStackTrace();
fail("Exception: " + ex.getClass().getName() + ": " +
ex.getMessage());
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ExecutionStats.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ExecutionStats.java
new file mode 100644
index 0000000000..3165d9e6fd
--- /dev/null
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ExecutionStats.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.arq.junit.textrunner;
+
+import org.junit.platform.engine.TestExecutionResult;
+import org.junit.platform.launcher.TestExecutionListener;
+import org.junit.platform.launcher.TestIdentifier;
+
+class ExecutionStats implements TestExecutionListener {
+
+ // Skips outer containers:
+ private int skip = 3;
+ private int depth = 0 ;
+
+ private int testCount = 0 ;
+ private int containerCount = 0 ;
+
+ private int errors = 0 ;
+ private int successful = 0 ;
+
+ public ExecutionStats() { }
+
+ @Override
+ public void executionStarted(TestIdentifier testIdentifier) {
+ // Not in walk order
+ if ( testIdentifier.isContainer() ) {
+ depth++;
+ if ( depth > skip )
+ containerCount++;
+ } else {
+ testCount++;
+ }
+ }
+
+ @Override
+ public void executionFinished(TestIdentifier testIdentifier,
TestExecutionResult result) {
+ if ( testIdentifier.isContainer() ) {
+ depth--;
+ } else {
+ // Summary
+ switch(result.getStatus()) {
+ case ABORTED->{}
+ case FAILED -> errors++;
+ case SUCCESSFUL -> successful++;
+ }
+ }
+ }
+
+ //@formatter:off
+ public int getContainerCount() { return containerCount; }
+ public int getTestCount() { return testCount; }
+ public int getTestPasses() { return successful; }
+ public int getTestFailures() { return errors; }
+ //@formatter:on
+}
\ No newline at end of file
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ManifestConfiguration.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ManifestConfiguration.java
new file mode 100644
index 0000000000..6f5a3ec53c
--- /dev/null
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ManifestConfiguration.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.arq.junit.textrunner;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Configuration for one run of TextTestRunner.
+ */
+public class ManifestConfiguration implements
Iterable<ManifestConfiguration.Entry> {
+ public record Entry(String manifestFile, String prefix) {}
+
+ private List<Entry> manifests = new ArrayList<>();
+
+ static ManifestConfiguration singleton = new ManifestConfiguration();
+
+ public static ManifestConfiguration get() {
+ return singleton;
+ }
+
+ public void add(String manifestFile) {
+ add(manifestFile, null);
+ }
+
+ public void add(String manifestFile, String prefix) {
+ manifests.add(new Entry(manifestFile, prefix));
+ }
+
+ @Override
+ public Iterator<Entry> iterator() {
+ return manifests.iterator();
+ }
+}
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ManifestHolder.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ManifestHolder.java
index 7fa66f8001..47e8f21c5f 100644
---
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ManifestHolder.java
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/ManifestHolder.java
@@ -23,51 +23,46 @@ import java.util.stream.Stream;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.DynamicNode;
import org.junit.jupiter.api.TestFactory;
-import org.junit.platform.launcher.LauncherDiscoveryListener;
-import org.junit.platform.launcher.LauncherDiscoveryRequest;
import org.apache.jena.arq.junit.Scripts;
+import org.apache.jena.arq.junit.manifest.ManifestProcessor;
+import org.apache.jena.atlas.lib.FileOps;
+import org.apache.jena.atlas.lib.StreamOps;
+import org.apache.jena.riot.RiotNotFoundException;
import org.apache.jena.shared.JenaException;
-// This class DOES NOT run on its own. It is used by TextTestRunner.
-
+//This class DOES NOT run on its own.
+// It is used by TextTestRunner and gets configuration from
ManifestConfiguration
class ManifestHolder {
- static class INIT implements LauncherDiscoveryListener {
-
- @Override public void
launcherDiscoveryStarted(LauncherDiscoveryRequest request) {
- String fn =
request.getConfigurationParameters().get(MANIFEST).get();
- if ( fn == null ) {
- System.err.println("Manifest not set");
- throw new JenaException("Manifest not set");
- }
- manifest = fn;
- }
- }
-
- public static String MANIFEST = "org.apache.jena.manifest";
- public static String namePrefix = null;
- public static String manifest = null;
-
- public ManifestHolder() {}
+ public ManifestHolder() { }
@TestFactory
@DisplayName("TextTestRunner")
public Stream<DynamicNode> testFactory() {
- //String fn = System.getProperty(MANIFEST);
+ Stream<DynamicNode> tests = null;
+ for ( var entry : ManifestConfiguration.get() ) {
+ Stream<DynamicNode> tests1 = oneManifest(entry.manifestFile(),
entry.prefix());
+ tests = StreamOps.concat(tests, tests1);
+ }
+ return tests;
+ }
- String fn = manifest;
+ private int totalManifestCount = 0 ;
+ private Stream<DynamicNode> oneManifest(String fn, String prefix) {
if ( fn == null ) {
System.err.println("Manifest not set");
throw new JenaException("Manifest not set");
}
-
-// DynamicNode dn = DynamicTest.dynamicTest("Hello!",
()->System.err.println("ManifestHolder: Executable"));
-// return Stream.of(dn);
-
+ if ( ! FileOps.exists(fn) ) {
+ throw new RiotNotFoundException("Manifest "+fn);
+ }
try {
- var x = Scripts.manifestTestFactory(fn, namePrefix);
+ int before = ManifestProcessor.getCounterManifests();
+ Stream<DynamicNode> x = Scripts.manifestTestFactory(fn, prefix);
+ int after = ManifestProcessor.getCounterManifests();
+ totalManifestCount = after-before;
return x;
} catch (Exception ex) {
ex.printStackTrace();
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/PrintExecutionListener.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/PrintExecutionListener.java
index d99f4237b3..2b9d0df669 100644
---
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/PrintExecutionListener.java
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/PrintExecutionListener.java
@@ -27,67 +27,68 @@ import org.apache.jena.atlas.io.IndentedWriter;
class PrintExecutionListener implements TestExecutionListener {
- // Skips outer containers:
- private int skip = 3;
- private int depth = 0 ;
+ // Skips outer containers:
+ private int skip = 3;
+ private int depth = 0 ;
- private int testCount = 0 ;
- private int containerCount = 0 ;
+ // Duplicates ExecutionStats but not exposes and we need the test count
anyway.
+ private int testCount = 0 ;
+ private int containerCount = 0 ;
+ private int errors = 0 ;
+ private int successful = 0 ;
+ private final IndentedWriter out;
- private int errors = 0 ;
- private int successful = 0 ;
- private final IndentedWriter out;
+ public PrintExecutionListener(IndentedWriter out) {
+ this.out = out;
+ }
- public PrintExecutionListener(IndentedWriter out) {
- this.out = out;
- }
+ @Override
+ public void testPlanExecutionStarted(TestPlan testPlan) {
+ out.flush();
+ }
- @Override
- public void testPlanExecutionStarted(TestPlan testPlan) {
- out.flush();
- }
+ @Override
+ public void testPlanExecutionFinished(TestPlan testPlan) {
+ // Another way to print the summary but printed even
+ // for an EARL report so rdftests --earl > earl.ttl does not work.
+ // out.println();
+// out.println("Containers: "+containerCount);
+// out.println("Successes: "+successful);
+// out.println("Errors: "+errors);
+ out.flush();
+ }
- @Override
- public void testPlanExecutionFinished(TestPlan testPlan) {
-// out.println();
-// out.println("Containers: "+containerCount);
-// out.println("Successes: "+successful);
-// out.println("Errors: "+errors);
- out.flush();
- }
+ @Override
+ public void executionStarted(TestIdentifier testIdentifier) {
+ // Container vs Test?
+ // Not in walk order
- @Override
- public void executionStarted(TestIdentifier testIdentifier) {
- // Container vs Test?
- // Not in walk order
-
- if ( testIdentifier.isContainer() ) {
- depth++;
- if ( depth > skip ) {
- containerCount++;
- out.println(testIdentifier.getDisplayName());
- out.incIndent();
- }
- } else {
- testCount++;
+ if ( testIdentifier.isContainer() ) {
+ depth++;
+ if ( depth > skip ) {
+ containerCount++;
+ out.println(testIdentifier.getDisplayName());
+ out.incIndent();
}
+ } else {
+ testCount++;
}
+ }
- @Override
- public void executionFinished(TestIdentifier testIdentifier,
TestExecutionResult result) {
-
- if ( testIdentifier.isContainer() ) {
- if ( depth > skip )
- out.decIndent();
- depth--;
- } else {
- out.printf("%d [%s] %s\n", testCount,
result.getStatus().name().substring(0, 1), testIdentifier.getDisplayName());
- // Or summary
- switch(result.getStatus()) {
- case ABORTED->{}
- case FAILED -> errors++;
- case SUCCESSFUL -> successful++;
- }
+ @Override
+ public void executionFinished(TestIdentifier testIdentifier,
TestExecutionResult result) {
+ if ( testIdentifier.isContainer() ) {
+ if ( depth > skip )
+ out.decIndent();
+ depth--;
+ } else {
+ out.printf("%d [%s] %s\n", testCount,
result.getStatus().name().substring(0, 1), testIdentifier.getDisplayName());
+ // Summary
+ switch(result.getStatus()) {
+ case ABORTED->{}
+ case FAILED -> errors++;
+ case SUCCESSFUL -> successful++;
}
}
- }
\ No newline at end of file
+ }
+}
diff --git
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/TextTestRunner5.java
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/TextTestRunner.java
similarity index 57%
rename from
jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/TextTestRunner5.java
rename to
jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/TextTestRunner.java
index e6d109991c..a84b7f4b23 100644
---
a/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/TextTestRunner5.java
+++
b/jena-arq/src/test/java/org/apache/jena/arq/junit/textrunner/TextTestRunner.java
@@ -18,38 +18,49 @@
package org.apache.jena.arq.junit.textrunner;
+import java.util.List;
import java.util.function.Function;
import org.junit.platform.engine.discovery.DiscoverySelectors;
-import org.junit.platform.launcher.*;
+import org.junit.platform.launcher.Launcher;
+import org.junit.platform.launcher.LauncherDiscoveryRequest;
+import org.junit.platform.launcher.TestPlan;
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
import org.junit.platform.launcher.core.LauncherFactory;
import org.junit.platform.launcher.listeners.LoggingListener;
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
+import org.junit.platform.launcher.listeners.TestExecutionSummary;
import org.apache.jena.arq.junit.EarlReport;
import org.apache.jena.arq.junit.manifest.EarlReporter;
import org.apache.jena.arq.junit.manifest.ManifestEntry;
import org.apache.jena.atlas.io.IndentedWriter;
-public class TextTestRunner5 {
+public class TextTestRunner {
- public static void runOne(String manifestFile, Function<ManifestEntry,
Runnable> testMaker) {
- runInternal(null, manifestFile);
+ public static void run(List<String> manifestFiles, Function<ManifestEntry,
Runnable> testMaker) {
+ runInternal(null, manifestFiles);
}
- public static void runOne(EarlReport report, String manifestFile,
Function<ManifestEntry, Runnable> testMaker) {
- runInternal(report, manifestFile);
+ public static void run(EarlReport report, List<String> manifestFiles,
Function<ManifestEntry, Runnable> testMaker) {
+ runInternal(report, manifestFiles);
}
- static void runInternal(EarlReport earlReport, String filename) {
- try ( IndentedWriter out = IndentedWriter.stdout.clone(); ) {
- runInternal0(out, earlReport, filename);
+ static void runInternal(EarlReport earlReport, List<String> filenames) {
+ try ( IndentedWriter out =
IndentedWriter.stdout.clone().setFlushOnNewline(true) ; ) {
+ // Statics used for configuration so multiple calls would
+ // interfere for both input configuration and output printing.
+ synchronized(TextTestRunner.class) {
+ runInternal0(out, earlReport, filenames);
+ }
}
}
// Either an EARL report xor text output.
- static void runInternal0(IndentedWriter out, EarlReport earlReport, String
filename) {
+ static void runInternal0(IndentedWriter out, EarlReport earlReport,
List<String> filenames) {
+ if ( filenames.isEmpty() )
+ throw new IllegalArgumentException("No manifests");
+
boolean produceEarlReport = earlReport!=null ;
if ( produceEarlReport ) {
EarlReporter.setEarlReport(earlReport);
@@ -61,43 +72,40 @@ public class TextTestRunner5 {
});
- TestExecutionListener testExecListener = new
PrintExecutionListener(out);
-
-// // Unsubtle
-// System.setProperty(ManifestHolder.MANIFEST, filename);
+ ManifestConfiguration config = ManifestConfiguration.get();
+ filenames.forEach(config::add);
- // Best way?
- LauncherDiscoveryListener injectManifest = new ManifestHolder.INIT();
LauncherDiscoveryRequest request =
LauncherDiscoveryRequestBuilder.request()
.selectors(DiscoverySelectors.selectClass(ManifestHolder.class))
- .configurationParameter(ManifestHolder.MANIFEST, filename)
- .listeners(injectManifest)
.build();
Launcher launcher = LauncherFactory.create();
-
TestPlan testPlan = launcher.discover(request);
- //System.err.println("X:
"+testPlan.getConfigurationParameters().get(ManifestHolder.MANIFEST));
+ ExecutionStats executionStats = new ExecutionStats();
+ PrintExecutionListener printExecListener = new
PrintExecutionListener(out);
- if ( ! produceEarlReport ) {
- launcher.registerTestExecutionListeners(testExecListener,
summaryListener);
- } else {
+ if ( produceEarlReport ) {
// Build report, no output.
- //launcher.registerTestExecutionListeners();
+ launcher.registerTestExecutionListeners(executionStats);
+ } else {
+ launcher.registerTestExecutionListeners(executionStats,
printExecListener, summaryListener);
}
+ // Run, which calls the TestFactory which generates the tests from the
manifest.
launcher.execute(request);
- // ----
+ // For skips tests.
+ TestExecutionSummary summary = summaryListener.getSummary();
- var summary = summaryListener.getSummary();
if ( summary != null ) {
//summary.printTo(new PrintWriter(System.out));
out.println();
- out.println("Manifests: "+summary.getContainersFoundCount());
- out.println("Tests pass: "+summary.getTestsSucceededCount());
- out.println("Tests fail: "+summary.getTestsFailedCount());
+// out.println("Containers: "+executionStats.getContainerCount());
+// out.println("Manifests: "+manifestCount);
+ out.println("Manifests: "+executionStats.getContainerCount());
+ out.println("Tests pass: "+executionStats.getTestPasses());
+ out.println("Tests fail: "+executionStats.getTestFailures());
if ( summary.getTestsSkippedCount() > 0 )
out.println("Tests skip: "+summary.getTestsSkippedCount());
}
diff --git a/jena-arq/testing/DAWG/Syntax/manifest.n3
b/jena-arq/testing/DAWG/Syntax/manifest.n3
index 95fb3caa90..dff9ea4bbe 100644
--- a/jena-arq/testing/DAWG/Syntax/manifest.n3
+++ b/jena-arq/testing/DAWG/Syntax/manifest.n3
@@ -19,7 +19,7 @@
@prefix qt: <http://www.w3.org/2001/sw/DataAccess/tests/test-query#> .
<> rdf:type mf:Manifest ;
- rdfs:comment "Some SPARQL test of synta" ;
+ rdfs:comment "Some SPARQL test of syntax" ;
mf:entries
(
[ mf:name "syntax-001" ;
diff --git a/jena-cmds/src/test/java/arq/rdftests.java
b/jena-cmds/src/test/java/arq/rdftests.java
index 487444d9af..357395d472 100644
--- a/jena-cmds/src/test/java/arq/rdftests.java
+++ b/jena-cmds/src/test/java/arq/rdftests.java
@@ -33,7 +33,7 @@ import org.apache.jena.arq.junit.riot.RiotTests;
import org.apache.jena.arq.junit.riot.VocabLangRDF;
import org.apache.jena.arq.junit.sparql.SparqlTests;
import org.apache.jena.arq.junit.sparql.tests.QueryEvalTest;
-import org.apache.jena.arq.junit.textrunner.TextTestRunner5;
+import org.apache.jena.arq.junit.textrunner.TextTestRunner;
import org.apache.jena.atlas.legacy.BaseTest2;
import org.apache.jena.atlas.lib.Lib;
import org.apache.jena.atlas.logging.LogCtl;
@@ -166,13 +166,9 @@ public class rdftests extends CmdGeneral
else
SparqlTests.defaultForSyntaxTests = Syntax.syntaxSPARQL_12;
- for ( String fn : getPositional() ) {
- if ( createEarlReport )
- System.out.println("# Run: "+fn);
- else
- System.out.println("# Run: "+fn);
- exec1(report, fn);
- }
+ List<String> manifests = getPositional();
+ System.out.println("# Run: "+manifests);
+ exec(report, manifests);
if ( createEarlReport ) {
earlOut.println();
@@ -194,19 +190,19 @@ public class rdftests extends CmdGeneral
}
}
- protected void exec1(EarlReport report, String manifest) {
+ protected void exec(EarlReport report, List<String> manifests) {
if ( createEarlReport )
- oneManifestEarl(report, manifest);
+ oneManifestEarl(report, manifests);
else
- oneManifest(manifest);
+ oneManifest(manifests);
}
- static void oneManifest(String testManifest) {
- TextTestRunner5.runOne(testManifest, Scripts.testMaker());
+ static void oneManifest(List<String> manifests) {
+ TextTestRunner.run(manifests, Scripts.testMaker());
}
- static void oneManifestEarl(EarlReport earlReport, String testManifest) {
- TextTestRunner5.runOne(earlReport, testManifest, Scripts.testMaker());
+ static void oneManifestEarl(EarlReport earlReport, List<String> manifests)
{
+ TextTestRunner.run(earlReport, manifests, Scripts.testMaker());
}
// Test subsystems.