Author: tilman
Date: Mon Dec 15 12:36:44 2025
New Revision: 1930590

Log:
PDFBOX-5660: expand test coverage

Modified:
   pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java

Modified: 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java   
    Mon Dec 15 12:36:40 2025        (r1930589)
+++ 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java   
    Mon Dec 15 12:36:44 2025        (r1930590)
@@ -28,6 +28,7 @@ import java.util.Calendar;
 import java.util.List;
 
 import org.apache.xmpbox.XMPMetadata;
+import org.apache.xmpbox.schema.AdobePDFSchema;
 import org.apache.xmpbox.schema.DublinCoreSchema;
 import org.apache.xmpbox.schema.PDFAIdentificationSchema;
 import org.apache.xmpbox.schema.PhotoshopSchema;
@@ -555,4 +556,91 @@ class DomXmpParserTest
         assertEquals("Important subject", subjects.get(0));
         assertEquals("Unimportant subject", subjects.get(1));
     }
+
+    @Test
+    void testBadType() throws XmpParsingException
+    {
+        String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>\n" +
+                    "<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>\n" +
+                    "<rdf:RDF 
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n"; +
+                    "         xmlns:iX=\"http://ns.adobe.com/iX/1.0/\";>\n" +
+                    "  <rdf:Description 
xmlns=\"http://ns.adobe.com/pdf/1.3/\"\n"; +
+                    "                   
xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\"\n"; +
+                    "                   about=\"\"\n" +
+                    "                   pdf:Author=\"edocslib\"/>\n" +
+                    "</rdf:RDF>\n" +
+                    "<?xpacket end='r'?>";
+        XmpParsingException ex = assertThrows(
+                XmpParsingException.class,
+                () -> new 
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+        assertEquals("No type defined for 
{http://ns.adobe.com/pdf/1.3/}Author";, ex.getMessage());
+        DomXmpParser xmpParser = new DomXmpParser();
+        xmpParser.setStrictParsing(false);
+        XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
+        AdobePDFSchema adobePDFSchema = xmp.getAdobePDFSchema();
+        TextType tt = (TextType) adobePDFSchema.getProperty("Author");
+        assertEquals("[Author=TextType:edocslib]", tt.toString());
+    }
+
+    @Test
+    void testBadLocalName() throws XmpParsingException
+    {
+        String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>\n" +
+                    "<?xpacket begin='' 
id='W5M0MpCehiHzreSzNTczkc9d'?><?adobe-xap-filters esc=\"CR\"?>\n" +
+                    "<x:xapmeta xmlns:x=\"adobe:ns:meta/\">\n" +
+                    "  <rdf:RDF xmlns:iX=\"http://ns.adobe.com/iX/1.0/\"; 
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";>\n" +
+                    "  </rdf:RDF>\n" +
+                    "</x:xapmeta><?xpacket end='w'?>";
+        XmpParsingException ex = assertThrows(
+                XmpParsingException.class,
+                () -> new 
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+        assertEquals("Expecting local name 'xmpmeta' and found 'xapmeta'", 
ex.getMessage());
+    }
+
+    @Test
+    void testBadXPacketEnd1() throws XmpParsingException
+    {
+        String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>\n" +
+                    "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\" 
?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n" +
+                    "    <rdf:RDF 
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";>\n" +
+                    "        <rdf:Description 
xmlns:dc=\"http://purl.org/dc/elements/1.1/\"; rdf:about=\"\">\n" +
+                    "            <dc:format>application/pdf</dc:format>\n" +
+                    "        </rdf:Description>\n" +
+                    "    </rdf:RDF>\n" +
+                    "</x:xmpmeta><?xpacket ends=\"w\" ?>";
+        XmpParsingException ex = assertThrows(
+                XmpParsingException.class,
+                () -> new 
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+        assertEquals("Excepted xpacket 'end' attribute (must be present and 
placed in first)", ex.getMessage());
+    }
+
+    @Test
+    void testBadXPacketEnd2() throws XmpParsingException
+    {
+        String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>\n" +
+                    "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\" 
?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n" +
+                    "    <rdf:RDF 
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";>\n" +
+                    "        <rdf:Description 
xmlns:dc=\"http://purl.org/dc/elements/1.1/\"; rdf:about=\"\">\n" +
+                    "            <dc:format>application/pdf</dc:format>\n" +
+                    "        </rdf:Description>\n" +
+                    "    </rdf:RDF>\n" +
+                    "</x:xmpmeta><?xpacket end=\"k\" ?>";
+        XmpParsingException ex = assertThrows(
+                XmpParsingException.class,
+                () -> new 
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+        assertEquals("Excepted xpacket 'end' attribute with value 'r' or 'w' 
", ex.getMessage());
+    }
+
+    @Test
+    void testNoRdfChildren() throws XmpParsingException
+    {
+        String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>\n" +
+                    "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\" ?>" 
+ 
+                    "  <x:xmpmeta xmlns:x=\"adobe:ns:meta/\"/>\n" +
+                    "<?xpacket end=\"w\" ?>";
+        XmpParsingException ex = assertThrows(
+                XmpParsingException.class,
+                () -> new 
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+        assertEquals("No rdf description found in xmp", ex.getMessage());
+    }
 }

Reply via email to