Author: tilman
Date: Sun Dec  7 16:25:11 2025
New Revision: 1930336

Log:
PDFBOX-3882: add test

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

Modified: 
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
==============================================================================
--- 
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
        Sun Dec  7 16:25:05 2025        (r1930335)
+++ 
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
        Sun Dec  7 16:25:11 2025        (r1930336)
@@ -24,9 +24,11 @@ package org.apache.xmpbox.xml;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.Calendar;
 import java.util.List;
 
 import org.apache.xmpbox.XMPMetadata;
+import org.apache.xmpbox.schema.PhotoshopSchema;
 import org.apache.xmpbox.schema.XMPMediaManagementSchema;
 import org.apache.xmpbox.schema.XMPSchema;
 import org.apache.xmpbox.schema.XMPageTextSchema;
@@ -37,8 +39,11 @@ import org.apache.xmpbox.type.Dimensions
 import org.apache.xmpbox.type.PDFASchemaType;
 import org.apache.xmpbox.type.ResourceEventType;
 import org.apache.xmpbox.type.ResourceRefType;
+import org.apache.xmpbox.type.TextType;
 
-import org.junit.jupiter.api.Assertions;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -55,7 +60,7 @@ class DomXmpParserTest
         {
             DomXmpParser dxp = new DomXmpParser();
             XMPMetadata xmp = dxp.parse(fis);
-            Assertions.assertNotNull(xmp);
+            assertNotNull(xmp);
         }
     }
 
@@ -66,8 +71,8 @@ class DomXmpParserTest
         {
             DomXmpParser dxp = new DomXmpParser();
             XMPMetadata xmp = dxp.parse(fis);
-            Assertions.assertEquals("A", 
xmp.getPDFAIdentificationSchema().getConformance());
-            Assertions.assertEquals((Integer) 3, 
xmp.getPDFAIdentificationSchema().getPart());
+            assertEquals("A", 
xmp.getPDFAIdentificationSchema().getConformance());
+            assertEquals((Integer) 3, 
xmp.getPDFAIdentificationSchema().getPart());
         }
     }
 
@@ -86,8 +91,8 @@ class DomXmpParserTest
                    "<?xpacket end=\"r\"?>";
         DomXmpParser xmpParser = new DomXmpParser();
         XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
-        Assertions.assertEquals("B", 
xmp.getPDFAIdentificationSchema().getConformance());
-        Assertions.assertEquals((Integer) 3, 
xmp.getPDFAIdentificationSchema().getPart());
+        assertEquals("B", xmp.getPDFAIdentificationSchema().getConformance());
+        assertEquals((Integer) 3, xmp.getPDFAIdentificationSchema().getPart());
     }
 
     /**
@@ -117,10 +122,10 @@ class DomXmpParserTest
                     "                   
xap:MetadataDate='2004-01-30T17:21:50Z'/>\n" +
                     "</rdf:RDF><?xpacket end='r'?>";
         DomXmpParser xmpParser = new DomXmpParser();
-        XmpParsingException ex = Assertions.assertThrows(
+        XmpParsingException ex = assertThrows(
                 XmpParsingException.class,
                 () -> xmpParser.parse(s.getBytes(StandardCharsets.UTF_8)));
-        Assertions.assertEquals("No type defined for 
{http://ns.adobe.com/pdf/1.3/}CreationDate";, ex.getMessage());
+        assertEquals("No type defined for 
{http://ns.adobe.com/pdf/1.3/}CreationDate";, ex.getMessage());
     }
 
     /**
@@ -155,11 +160,11 @@ class DomXmpParserTest
         DomXmpParser xmpParser = new DomXmpParser();
         XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
         XMPMediaManagementSchema xmpMediaManagementSchema = 
xmp.getXMPMediaManagementSchema();
-        Assertions.assertEquals("uidd:1f0e03977b90b6365a376454ffdf34a7", 
xmpMediaManagementSchema.getDocumentID());
+        assertEquals("uidd:1f0e03977b90b6365a376454ffdf34a7", 
xmpMediaManagementSchema.getDocumentID());
         ArrayProperty historyProperty = 
xmpMediaManagementSchema.getHistoryProperty();
         ResourceEventType firstHistoryEntry = (ResourceEventType) 
historyProperty.getAllProperties().iterator().next();
-        Assertions.assertEquals("created", firstHistoryEntry.getAction());
-        Assertions.assertEquals("iDRS PDF output engine 7", 
firstHistoryEntry.getParameters());
+        assertEquals("created", firstHistoryEntry.getAction());
+        assertEquals("iDRS PDF output engine 7", 
firstHistoryEntry.getParameters());
     }
 
     /**
@@ -201,14 +206,14 @@ class DomXmpParserTest
         XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
         XMPageTextSchema pageTextSchema = xmp.getPageTextSchema();
         DimensionsType dim = (DimensionsType) 
pageTextSchema.getProperty(XMPageTextSchema.MAX_PAGE_SIZE);
-        Assertions.assertEquals("DimensionsType{4.0 x 3.0 inch}", 
dim.toString());
-        Assertions.assertEquals("[NPages=IntegerType:7]", 
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
+        assertEquals("DimensionsType{4.0 x 3.0 inch}", dim.toString());
+        assertEquals("[NPages=IntegerType:7]", 
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
         XMPMediaManagementSchema xmpMediaManagementSchema = 
xmp.getXMPMediaManagementSchema();
         ResourceRefType derivedFromProperty = 
xmpMediaManagementSchema.getDerivedFromProperty();
-        Assertions.assertEquals("uuid:b429d411-e628-45ca-b932-d2c77fbe6cd3", 
xmpMediaManagementSchema.getInstanceID());
-        Assertions.assertEquals("proof:pdf", 
xmpMediaManagementSchema.getRenditionClass());
-        
Assertions.assertEquals("adobe:docid:indd:db084a4d-dbb2-11dc-ac34-beb3cc4028ec",
 xmpMediaManagementSchema.getDocumentID());
-        
Assertions.assertEquals("adobe:docid:indd:fa7c6589-9f4a-11dc-9641-af983df728d7",
 derivedFromProperty.getDocumentID());
+        assertEquals("uuid:b429d411-e628-45ca-b932-d2c77fbe6cd3", 
xmpMediaManagementSchema.getInstanceID());
+        assertEquals("proof:pdf", 
xmpMediaManagementSchema.getRenditionClass());
+        assertEquals("adobe:docid:indd:db084a4d-dbb2-11dc-ac34-beb3cc4028ec", 
xmpMediaManagementSchema.getDocumentID());
+        assertEquals("adobe:docid:indd:fa7c6589-9f4a-11dc-9641-af983df728d7", 
derivedFromProperty.getDocumentID());
     }
 
     /**
@@ -239,8 +244,8 @@ class DomXmpParserTest
         XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
         XMPageTextSchema pageTextSchema = xmp.getPageTextSchema();
         DimensionsType dim = (DimensionsType) 
pageTextSchema.getProperty(XMPageTextSchema.MAX_PAGE_SIZE);
-        Assertions.assertEquals("DimensionsType{4.0 x 3.0 inch}", 
dim.toString());
-        Assertions.assertEquals("[NPages=IntegerType:7]", 
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
+        assertEquals("DimensionsType{4.0 x 3.0 inch}", dim.toString());
+        assertEquals("[NPages=IntegerType:7]", 
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
     }
 
     /**
@@ -269,8 +274,8 @@ class DomXmpParserTest
         XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
         XMPageTextSchema pageTextSchema = xmp.getPageTextSchema();
         DimensionsType dim = (DimensionsType) 
pageTextSchema.getProperty(XMPageTextSchema.MAX_PAGE_SIZE);
-        Assertions.assertEquals("DimensionsType{4.0 x 3.0 inch}", 
dim.toString());
-        Assertions.assertEquals("[NPages=IntegerType:7]", 
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
+        assertEquals("DimensionsType{4.0 x 3.0 inch}", dim.toString());
+        assertEquals("[NPages=IntegerType:7]", 
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
     }
 
 
@@ -289,17 +294,118 @@ class DomXmpParserTest
             DomXmpParser dxp = new DomXmpParser();
             XMPMetadata xmp = dxp.parse(is);
             List<AbstractField> allProperties = 
xmp.getPDFExtensionSchema().getSchemasProperty().getAllProperties();
-            Assertions.assertEquals(1, allProperties.size());
+            assertEquals(1, allProperties.size());
             PDFASchemaType pdfExtensionSchema = (PDFASchemaType) 
allProperties.get(0);
-            
Assertions.assertEquals("http://www.sagemcom.com/documents/xmlns/dematbox";, 
pdfExtensionSchema.getNamespaceURI());
-            Assertions.assertEquals("dematbox", 
pdfExtensionSchema.getPrefixValue());
+            assertEquals("http://www.sagemcom.com/documents/xmlns/dematbox";, 
pdfExtensionSchema.getNamespaceURI());
+            assertEquals("dematbox", pdfExtensionSchema.getPrefixValue());
             XMPSchema extensionSchema = 
xmp.getSchema(pdfExtensionSchema.getNamespaceURI());
-            Assertions.assertEquals(pdfExtensionSchema.getNamespaceURI(), 
extensionSchema.getNamespace());
-            Assertions.assertEquals(pdfExtensionSchema.getPrefixValue(), 
extensionSchema.getPrefix());
+            assertEquals(pdfExtensionSchema.getNamespaceURI(), 
extensionSchema.getNamespace());
+            assertEquals(pdfExtensionSchema.getPrefixValue(), 
extensionSchema.getPrefix());
             ArrayProperty pageInfoProp = (ArrayProperty) 
extensionSchema.getProperty("PageInfo");
             DefinedStructuredType dst = (DefinedStructuredType) 
pageInfoProp.getAllProperties().get(0);
-            Assertions.assertEquals("[number=IntegerType:1]", 
dst.getProperty("number").toString());
-            Assertions.assertEquals("[origNumber=IntegerType:1]", 
dst.getProperty("origNumber").toString());            
+            assertEquals("[number=IntegerType:1]", 
dst.getProperty("number").toString());
+            assertEquals("[origNumber=IntegerType:1]", 
dst.getProperty("origNumber").toString());            
         }
     }
+
+    /**
+     * PDFBOX-3882: Test ResourceEventType properties as attributes instead of 
properties (call of
+     * tryParseAttributesAsProperties() the the end of parseLiElement())
+     *
+     * @throws XmpParsingException
+     */
+    @Test
+    void testPDFBox3882_2() throws XmpParsingException
+    {
+        
+        // data modified from XMP data in the JPEG file in Apache Tika 
JpegParserTest.testJPEGXMPMM()
+        String s = "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n" 
+
+                    "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\"\n" +
+                    "           x:xmptk=\"Adobe XMP Core 5.0-c060 61.134777, 
2010/02/12-17:32:00        \">\n" +
+                    "  <rdf:RDF 
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";>\n" +
+                    "          <rdf:Description rdf:about=\"\"\n" +
+                    "                           
xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\"\n"; +
+                    "                           
xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"; +
+                    "                           
xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\"\n"; +
+                    "                           
xmlns:stEvt=\"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#\"\n"; +
+                    "                           
xmlns:stRef=\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\"\n"; +
+                    "                           
xmlns:photoshop=\"http://ns.adobe.com/photoshop/1.0/\"\n"; +
+                    "                           xmp:CreatorTool=\"Adobe 
Photoshop CS5 Macintosh\"\n" +
+                    "                           
xmp:CreateDate=\"2012-04-30T12:52:07-04:00\"\n" +
+                    "                           
xmp:MetadataDate=\"2012-05-03T13:36:11-04:00\"\n" +
+                    "                           
xmp:ModifyDate=\"2012-05-03T13:36:11-04:00\"\n" +
+                    "                           dc:format=\"image/jpeg\"\n" +
+                    "                           
xmpMM:InstanceID=\"xmp.iid:49E997338D4911E1AB62EBF9B374B234\"\n" +
+                    "                           
xmpMM:DocumentID=\"xmp.did:49E997348D4911E1AB62EBF9B374B234\"\n" +
+                    "                           
xmpMM:OriginalDocumentID=\"xmp.did:01801174072068118A6D9A879C818256\"\n" +
+                    "                           
photoshop:History=\"2012-05-03T09:34:50-04:00&#x9;File i1222b.jpg 
opened&#xA;\">\n" +
+                    "                  <xmpMM:History>\n" +
+                    "                          <rdf:Seq>\n" +
+                    "                                  <rdf:li 
stEvt:action=\"created\"\n" +
+                    "                                          
stEvt:instanceID=\"xmp.iid:01801174072068118A6D9A879C818256\"\n" +
+                    "                                          
stEvt:when=\"2012-04-30T12:52:07-04:00\"\n" +
+                    "                                          
stEvt:softwareAgent=\"Adobe Photoshop CS5 Macintosh\"/>\n" +
+                    "                                  <rdf:li 
stEvt:action=\"saved\"\n" +
+                    "                                          
stEvt:instanceID=\"xmp.iid:02801174072068118A6D9A879C818256\"\n" +
+                    "                                          
stEvt:when=\"2012-04-30T12:54:04-04:00\"\n" +
+                    "                                          
stEvt:softwareAgent=\"Adobe Photoshop CS5 Macintosh\"\n" +
+                    "                                          
stEvt:changed=\"/\"/>\n" +
+                    "                                  <rdf:li 
stEvt:action=\"saved\"\n" +
+                    "                                          
stEvt:instanceID=\"xmp.iid:03801174072068118A6D9A879C818256\"\n" +
+                    "                                          
stEvt:when=\"2012-04-30T12:54:48-04:00\"\n" +
+                    "                                          
stEvt:softwareAgent=\"Adobe Photoshop CS5 Macintosh\"\n" +
+                    "                                          
stEvt:changed=\"/\"/>\n" +
+                    "                          </rdf:Seq>\n" +
+                    "                  </xmpMM:History>\n" +
+                    "                  <xmpMM:DerivedFrom 
stRef:instanceID=\"xmp.iid:21F0677BA22168118A6D9A879C818256\"\n" +
+                    "                                     
stRef:documentID=\"xmp.did:01801174072068118A6D9A879C818256\"\n" +
+                    "                                     
stRef:originalDocumentID=\"xmp.did:01801174072068118A6D9A879C818256\"/>\n" +
+                    "                  <photoshop:DocumentAncestors>\n" +
+                    "                          <rdf:Bag>\n" +
+                    "                                  
<rdf:li>adobe:docid:photoshop:11d3ec5a-c131-11d8-9274-ec65c7d7e0c6</rdf:li>\n" +
+                    "                                  
<rdf:li>adobe:docid:photoshop:aadc7027-309c-11d8-9596-9cf45d2f630b</rdf:li>\n" +
+                    "                                  
<rdf:li>adobe:docid:photoshop:c7961c59-6e0f-11d8-87b7-d67539df12d8</rdf:li>\n" +
+                    "                          </rdf:Bag>\n" +
+                    "                  </photoshop:DocumentAncestors>\n" +
+                    "          </rdf:Description>\n" +
+                    "  </rdf:RDF>\n" +
+                    "</x:xmpmeta>\n" +
+                    "<?xpacket end=\"w\"?>";
+        DomXmpParser xmpParser = new DomXmpParser();
+        XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
+        XMPMediaManagementSchema xmpMediaManagementSchema = 
xmp.getXMPMediaManagementSchema();
+        ArrayProperty historyProperty = 
xmpMediaManagementSchema.getHistoryProperty();
+        List<AbstractField> historyProperties = 
historyProperty.getAllProperties();
+        assertEquals(3, historyProperties.size());
+        ResourceEventType ret0 = (ResourceEventType) historyProperties.get(0);
+        ResourceEventType ret1 = (ResourceEventType) historyProperties.get(1);
+        ResourceEventType ret2 = (ResourceEventType) historyProperties.get(2);
+        assertEquals("created", ret0.getAction());
+        assertEquals("xmp.iid:01801174072068118A6D9A879C818256", 
ret0.getInstanceID());
+        assertEquals(2012, ret0.getWhen().get(Calendar.YEAR));
+        assertEquals(52, ret0.getWhen().get(Calendar.MINUTE));
+        assertEquals("Adobe Photoshop CS5 Macintosh", ret0.getSoftwareAgent());
+        assertEquals("xmp.iid:02801174072068118A6D9A879C818256", 
ret1.getInstanceID());
+        assertEquals("xmp.iid:03801174072068118A6D9A879C818256", 
ret2.getInstanceID());
+        assertEquals(2012, ret1.getWhen().get(Calendar.YEAR));
+        assertEquals(54, ret1.getWhen().get(Calendar.MINUTE));
+        assertEquals(4, ret1.getWhen().get(Calendar.SECOND));
+        assertEquals(2012, ret2.getWhen().get(Calendar.YEAR));
+        assertEquals(2012, ret2.getWhen().get(Calendar.YEAR));
+        assertEquals(54, ret2.getWhen().get(Calendar.MINUTE));
+        assertEquals(48, ret2.getWhen().get(Calendar.SECOND));
+        assertEquals("xmp.iid:49E997338D4911E1AB62EBF9B374B234", 
xmpMediaManagementSchema.getInstanceID());
+        assertEquals("xmp.did:49E997348D4911E1AB62EBF9B374B234", 
xmpMediaManagementSchema.getDocumentID());
+        assertEquals("xmp.did:01801174072068118A6D9A879C818256", 
xmpMediaManagementSchema.getOriginalDocumentID());
+        System.out.println("MediaManagementSchema all: " + 
xmpMediaManagementSchema.getAllProperties());
+        PhotoshopSchema photoshopSchema = xmp.getPhotoshopSchema();
+        assertEquals("2012-05-03T09:34:50-04:00\tFile i1222b.jpg opened\n", 
photoshopSchema.getHistory());
+        ArrayProperty ancestorsProperty = (ArrayProperty) 
photoshopSchema.getProperty("DocumentAncestors");
+        List<AbstractField> ancestors = ancestorsProperty.getAllProperties();
+        assertEquals(3, ancestors.size());
+        
assertEquals("adobe:docid:photoshop:11d3ec5a-c131-11d8-9274-ec65c7d7e0c6", 
((TextType) ancestors.get(0)).getStringValue());
+        
assertEquals("adobe:docid:photoshop:aadc7027-309c-11d8-9596-9cf45d2f630b", 
((TextType) ancestors.get(1)).getStringValue());
+        
assertEquals("adobe:docid:photoshop:c7961c59-6e0f-11d8-87b7-d67539df12d8", 
((TextType) ancestors.get(2)).getStringValue());
+        ResourceRefType derivedFromProperty = 
xmpMediaManagementSchema.getDerivedFromProperty(); //TODO doesn't work yet?!
+    }
 }

Reply via email to