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 <a...@apache.org> 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.