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

commit 46dc8347c76c8ab9e63f40700ec0ed4ccc4562f6
Author: Andy Seaborne <[email protected]>
AuthorDate: Wed Feb 25 16:57:07 2026 +0000

    Check for missing test manifest entries
---
 .../org/apache/jena/arq/junit/manifest/Manifest.java    | 17 +++++++++++++++--
 .../jena/arq/junit/textrunner/ManifestHolder.java       |  4 ++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git 
a/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/Manifest.java 
b/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/Manifest.java
index bbb422ebd1..92e31fb0f8 100644
--- a/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/Manifest.java
+++ b/jena-arq/src/test/java/org/apache/jena/arq/junit/manifest/Manifest.java
@@ -65,8 +65,7 @@ public class Manifest
         } catch (RuntimeException ex) {
             // Exit on error.
             log.error("Error reading manifest: "+filenameOrURI);
-            System.exit(1);
-            throw ex;
+            throw new TestSetupException("Error reading manifest: 
"+filenameOrURI);
         }
         Manifest manifest = new Manifest(manifestRDF);
         return manifest;
@@ -112,6 +111,20 @@ public class Manifest
         if ( entriesNode == null )
             return;
         List<Node> items = G.rdfList(manifestGraph, entriesNode);
+
+        List<Node> missingEntries = items.stream().filter(entry -> ! 
G.contains(manifestGraph, entry, null, null)).toList();
+        if ( ! missingEntries.isEmpty() ) {
+            missingEntries.forEach(entry->{
+                String x = null;
+                if ( entry.isURI() )
+                    x = 
manifestGraph.getPrefixMapping().shortForm(entry.getURI());
+                if ( x == null )
+                    x = entry.toString();
+               log.error("Can't find entry for "+x);
+            });
+            throw new TestSetupException("Missing manifest entries");
+        }
+
         items.forEach(entry->{
             String testName = getLiteral(entry, TestManifest.name.asNode());
             Node testType = G.getZeroOrOneSP(manifestGraph, entry, 
RDF.Nodes.type);
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 195017c698..b6da50d6f2 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
@@ -31,6 +31,7 @@ import org.apache.jena.arq.junit.Scripts;
 import org.apache.jena.arq.junit.manifest.ManifestProcessor;
 import org.apache.jena.arq.junit.manifest.TestMaker;
 import org.apache.jena.arq.junit.manifest.TestMakers;
+import org.apache.jena.arq.junit.manifest.TestSetupException;
 import org.apache.jena.atlas.lib.StreamOps;
 import org.apache.jena.riot.RiotNotFoundException;
 import org.apache.jena.shared.JenaException;
@@ -69,6 +70,9 @@ class ManifestHolder {
             System.err.println("Not found: "+fn);
             // Exceptions are swallowed by JUnit5.
             throw new RiotNotFoundException("Manifest "+fn);
+        } catch (TestSetupException ex) {
+            System.exit(1);
+            return null;
         } catch (Exception ex) {
             ex.printStackTrace();
             return null;

Reply via email to