Author: tilman
Date: Fri Jun 27 18:32:55 2025
New Revision: 1926765
URL: http://svn.apache.org/viewvc?rev=1926765&view=rev
Log:
PDFBOX-6026: test serializer results
Modified:
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
Modified:
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java?rev=1926765&r1=1926764&r2=1926765&view=diff
==============================================================================
---
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
(original)
+++
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
Fri Jun 27 18:32:55 2025
@@ -28,7 +28,14 @@ import static org.junit.jupiter.api.Asse
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.List;
+import java.util.TimeZone;
+import javax.xml.transform.TransformerException;
import org.apache.xmpbox.DateConverter;
import org.apache.xmpbox.XMPMetadata;
@@ -41,6 +48,8 @@ import org.apache.xmpbox.type.ThumbnailT
import org.apache.xmpbox.xml.DomXmpParser;
import org.apache.xmpbox.xml.XmpParsingException;
import org.apache.xmpbox.xml.XmpParsingException.ErrorType;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.apache.xmpbox.xml.XmpSerializer;
@@ -48,68 +57,84 @@ import org.apache.xmpbox.xml.XmpSerializ
class DeserializationTest
{
- protected ByteArrayOutputStream bos;
+ private ByteArrayOutputStream baos;
- protected XmpSerializer serializer;
+ private XmpSerializer serializer;
private DomXmpParser xdb;
+ private static TimeZone defaultTZ;
+
+ @BeforeAll
+ static void initAll()
+ {
+ defaultTZ = TimeZone.getDefault();
+ // Need to set a timezone or date values will be different depending
on test location
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+ }
+
@BeforeEach
void init() throws XmpParsingException
{
- bos = new ByteArrayOutputStream();
+ baos = new ByteArrayOutputStream();
serializer = new XmpSerializer();
xdb = new DomXmpParser();
}
+ @AfterAll
+ static void finishAll()
+ {
+ TimeZone.setDefault(defaultTZ);
+ }
+
@Test
- void testStructuredRecursive() throws XmpParsingException
+ void testStructuredRecursive() throws XmpParsingException,
TransformerException, NoSuchAlgorithmException, UnsupportedEncodingException
{
InputStream fis =
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/parser/structured_recursive.xml");
-
- xdb.parse(fis);
+ XMPMetadata metadata = xdb.parse(fis);
+ checkTransform(metadata,
"50429052370059903229869639943824137435756655804864824611365505219590816799783");
}
@Test
- void testEmptyLi() throws XmpParsingException
+ void testEmptyLi() throws XmpParsingException, TransformerException,
NoSuchAlgorithmException, UnsupportedEncodingException
{
InputStream fis =
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/parser/empty_list.xml");
-
- xdb.parse(fis);
+ XMPMetadata metadata = xdb.parse(fis);
+ checkTransform(metadata,
"92757984740574362800045336947395134346147179161385043989715484359442690118913");
}
@Test
- void testEmptyLi2() throws XmpParsingException
+ void testEmptyLi2() throws XmpParsingException, TransformerException,
NoSuchAlgorithmException, UnsupportedEncodingException
{
InputStream fis =
DomXmpParser.class.getResourceAsStream("/validxmp/emptyli.xml");
- XMPMetadata meta = xdb.parse(fis);
- DublinCoreSchema dc = meta.getDublinCoreSchema();
+ XMPMetadata metadata = xdb.parse(fis);
+ DublinCoreSchema dc = metadata.getDublinCoreSchema();
dc.getCreatorsProperty();
+ checkTransform(metadata,
"84846877440303452108560435796840772468446174326989274262473618453524301429629");
}
@Test
void testGetTitle() throws XmpParsingException, BadFieldValueException
{
InputStream fis =
DomXmpParser.class.getResourceAsStream("/validxmp/emptyli.xml");
- XMPMetadata meta = xdb.parse(fis);
- DublinCoreSchema dc = meta.getDublinCoreSchema();
+ XMPMetadata metadata = xdb.parse(fis);
+ DublinCoreSchema dc = metadata.getDublinCoreSchema();
String s = dc.getTitle(null);
assertEquals("title value", s);
}
@Test
- void testAltBagSeq() throws XmpParsingException
+ void testAltBagSeq() throws XmpParsingException, TransformerException,
NoSuchAlgorithmException, UnsupportedEncodingException
{
InputStream fis =
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/parser/AltBagSeqTest.xml");
- xdb.parse(fis);
- // XMPMetadata metadata=xdb.parse(fis);
- // SaveMetadataHelper.serialize(metadata, true, System.out);
+ XMPMetadata metadata=xdb.parse(fis);
+ checkTransform(metadata,
"16805992283807186369849610414335227396239089071611806706387795179375897398118");
}
@Test
- void testIsartorStyleWithThumbs() throws XmpParsingException, IOException,
BadFieldValueException
+ void testIsartorStyleWithThumbs()
+ throws XmpParsingException, IOException, BadFieldValueException,
TransformerException, NoSuchAlgorithmException
{
-
InputStream fis =
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/parser/ThumbisartorStyle.xml");
XMPMetadata metadata = xdb.parse(fis);
@@ -145,6 +170,7 @@ class DeserializationTest
assertEquals("JPEG", thumb.getFormat());
assertEquals("/9j/4AAQSkZJRgABAgEASABIAAD", thumb.getImage());
+ checkTransform(metadata,
"29120813843205587378639665706339183422557956085575883885304382528664692315203");
}
@Test
@@ -286,8 +312,8 @@ class DeserializationTest
void testRdfAboutFound() throws XmpParsingException
{
InputStream fis =
DomXmpParser.class.getResourceAsStream("/validxmp/emptyli.xml");
- XMPMetadata meta = xdb.parse(fis);
- List<XMPSchema> schemas = meta.getAllSchemas();
+ XMPMetadata metadata = xdb.parse(fis);
+ List<XMPSchema> schemas = metadata.getAllSchemas();
for (XMPSchema xmpSchema : schemas)
{
assertNotNull(xmpSchema.getAboutAttribute());
@@ -295,31 +321,46 @@ class DeserializationTest
}
@Test
- void testWihtAttributesAsProperties() throws XmpParsingException
+ void testWihtAttributesAsProperties() throws XmpParsingException,
TransformerException, NoSuchAlgorithmException, UnsupportedEncodingException
{
InputStream fis =
DomXmpParser.class.getResourceAsStream("/validxmp/attr_as_props.xml");
- XMPMetadata meta = xdb.parse(fis);
+ XMPMetadata metadata = xdb.parse(fis);
- AdobePDFSchema pdf = meta.getAdobePDFSchema();
+ AdobePDFSchema pdf = metadata.getAdobePDFSchema();
assertEquals("GPL Ghostscript 8.64", pdf.getProducer());
- DublinCoreSchema dc = meta.getDublinCoreSchema();
+ DublinCoreSchema dc = metadata.getDublinCoreSchema();
assertEquals("application/pdf", dc.getFormat());
- XMPBasicSchema basic = meta.getXMPBasicSchema();
+ XMPBasicSchema basic = metadata.getXMPBasicSchema();
assertNotNull(basic.getCreateDate());
+
+ checkTransform(metadata,
"91466370449938102905842936306160100538543510664071400903097987792216034311743");
}
@Test
- void testSpaceTextValues() throws XmpParsingException
+ void testSpaceTextValues() throws XmpParsingException,
TransformerException, NoSuchAlgorithmException, UnsupportedEncodingException
{
// check values with spaces at start or end
// in this case, the value should not be trimmed
InputStream is =
DomXmpParser.class.getResourceAsStream("/validxmp/only_space_fields.xmp");
- XMPMetadata meta = xdb.parse(is);
+ XMPMetadata metadata = xdb.parse(is);
// check producer
- assertEquals(" ", meta.getAdobePDFSchema().getProducer());
+ assertEquals(" ", metadata.getAdobePDFSchema().getProducer());
// check creator tool
- assertEquals("Canon ",meta.getXMPBasicSchema().getCreatorTool());
+ assertEquals("Canon ",metadata.getXMPBasicSchema().getCreatorTool());
+
+ checkTransform(metadata,
"65475542891943378255730260794798768587695617138297196920293698476028940113080");
+ }
+
+ private void checkTransform(XMPMetadata metadata, String expected)
+ throws TransformerException, NoSuchAlgorithmException,
UnsupportedEncodingException
+ {
+ serializer.serialize(metadata, baos, true);
+ String replaced =
baos.toString(StandardCharsets.UTF_8.displayName()).replace("\r\n", "\n");
+ byte[] ba = replaced.getBytes(StandardCharsets.UTF_8);
+ byte[] digest = MessageDigest.getInstance("SHA-256").digest(ba);
+ String result = new BigInteger(1, digest).toString();
+ assertEquals(expected, result);
}
}