You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2020/11/15 23:22:35 UTC

svn commit: r1883462 [2/2] - in /pdfbox/trunk/xmpbox: ./ src/test/java/org/apache/xmpbox/ src/test/java/org/apache/xmpbox/parser/ src/test/java/org/apache/xmpbox/schema/ src/test/java/org/apache/xmpbox/type/

Added: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/type/TestStructuredType.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/type/TestStructuredType.java?rev=1883462&view=auto
==============================================================================
--- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/type/TestStructuredType.java (added)
+++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/type/TestStructuredType.java Sun Nov 15 23:22:35 2020
@@ -0,0 +1,196 @@
+/*****************************************************************************
+ * 
+ * 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.xmpbox.type;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Random;
+import java.util.stream.Stream;
+
+import org.apache.xmpbox.XMPMetadata;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+public class TestStructuredType extends AbstractTypeTester
+{
+
+    @ParameterizedTest
+    @MethodSource("initializeParameters")
+    public void testInitializedToNull(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        assertNull(structured.getProperty(fieldName));
+        // accessor
+        Method get = clz.getMethod(calculateSimpleGetter(fieldName));
+        Object result = get.invoke(structured);
+        assertNull(result);
+    }
+
+    @ParameterizedTest
+    @MethodSource("initializeParameters")
+    public void testSettingValue(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        internalTestSettingValue(structured, clz, fieldName, type);
+    }
+
+    @ParameterizedTest
+    @MethodSource("initializeParameters")
+    public void testRandomSettingValue(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        initializeSeed(new Random());
+        for (int i=0; i < RAND_LOOP_COUNT;i++)
+        {
+            internalTestSettingValue(structured, clz, fieldName, type);        }
+    }
+
+    private void internalTestSettingValue(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        Object value = getJavaValue(type);
+        structured.addSimpleProperty(fieldName, value);
+        assertNotNull(structured.getProperty(fieldName));
+        // check other properties not modified
+        List<Field> fields = getXmpFields(clz);
+        for (Field field : fields)
+        {
+            // do not check the current name
+            String name = field.get(null).toString();
+            if (!name.equals(fieldName))
+            {
+                assertNull(structured.getProperty(name));
+            }
+        }
+    }
+
+    @ParameterizedTest
+    @MethodSource("initializeParameters")
+    public void testPropertyType(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        internalTestPropertyType(structured, clz, fieldName, type);
+    }
+
+    @ParameterizedTest
+    @MethodSource("initializeParameters")
+    public void testRandomPropertyType(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        initializeSeed(new Random());
+        for (int i=0; i < RAND_LOOP_COUNT;i++)
+        {
+            internalTestPropertyType(structured, clz, fieldName, type);
+        }
+    }
+
+
+    private void internalTestPropertyType(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        Object value = getJavaValue(type);
+        structured.addSimpleProperty(fieldName, value);
+        assertNotNull(structured.getProperty(fieldName));
+        // check property type
+        AbstractSimpleProperty asp = (AbstractSimpleProperty) structured.getProperty(fieldName);
+        assertEquals(type.getImplementingClass(), asp.getClass());
+    }
+
+
+    @ParameterizedTest
+    @MethodSource("initializeParameters")
+    public void testSetter(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        internalTestSetter(structured, clz, fieldName, type);
+    }
+
+    @ParameterizedTest
+    @MethodSource("initializeParameters")
+    public void testRandomSetter(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        initializeSeed(new Random());
+        for (int i=0; i < RAND_LOOP_COUNT;i++)
+        {
+            internalTestSetter(structured, clz, fieldName, type);
+        }
+    }
+
+    private void internalTestSetter(AbstractStructuredType structured, Class<? extends AbstractStructuredType> clz, String fieldName, Types type) throws Exception
+    {
+        String setter = calculateSimpleSetter(fieldName);
+        Object value = getJavaValue(type);
+        Method set = clz.getMethod(setter, getJavaType(type));
+        set.invoke(structured, value);
+        // check property set
+        assertEquals(value, ((AbstractSimpleProperty) structured.getProperty(fieldName)).getValue());
+        // check getter
+        Method get = clz.getMethod(calculateSimpleGetter(fieldName));
+        Object result = get.invoke(structured);
+        assertTrue(getJavaType(type).isAssignableFrom(result.getClass()));
+        assertEquals(value, result);
+    }
+
+    private static Stream<Arguments> initializeParameters()
+    {
+        XMPMetadata xmp = XMPMetadata.createXMPMetadata();
+
+        return Stream.of(
+            // data for JobType
+            Arguments.of(new JobType(xmp, "job"), JobType.class, "id", Types.Text),
+            Arguments.of(new JobType(xmp, "job"), JobType.class, "name", Types.Text),
+            Arguments.of(new JobType(xmp, "job"), JobType.class, "url", Types.URL),
+            // data for LayerType
+            Arguments.of(new LayerType(xmp), LayerType.class, "LayerName", Types.Text),
+            Arguments.of(new LayerType(xmp), LayerType.class, "LayerText", Types.Text),
+            // data for ResourceEventType
+            Arguments.of(new ResourceEventType(xmp), ResourceEventType.class, "action", Types.Choice),
+            Arguments.of(new ResourceEventType(xmp), ResourceEventType.class, "changed", Types.Text),
+            Arguments.of(new ResourceEventType(xmp), ResourceEventType.class, "instanceID", Types.GUID),
+            Arguments.of(new ResourceEventType(xmp), ResourceEventType.class, "parameters", Types.Text),
+            Arguments.of(new ResourceEventType(xmp), ResourceEventType.class, "softwareAgent", Types.AgentName),
+            Arguments.of(new ResourceEventType(xmp), ResourceEventType.class, "when", Types.Date),
+            // data for ResourceEventType
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "documentID", Types.URI),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "filePath", Types.URI),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "fromPart", Types.Part),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "instanceID", Types.URI),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "lastModifyDate", Types.Date),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "manager", Types.AgentName),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "managerVariant", Types.Text),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "manageTo", Types.URI),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "manageUI", Types.URI),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "maskMarkers", Types.Choice),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "partMapping", Types.Text),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "renditionClass", Types.RenditionClass),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "renditionParams", Types.Text),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "toPart", Types.Part),
+            Arguments.of(new ResourceRefType(xmp), ResourceRefType.class, "versionID", Types.Text),
+            // data for ThumbnailType
+            Arguments.of(new ThumbnailType(xmp), ThumbnailType.class, "format", Types.Choice),
+            Arguments.of(new ThumbnailType(xmp), ThumbnailType.class, "height", Types.Integer),
+            Arguments.of(new ThumbnailType(xmp), ThumbnailType.class, "width", Types.Integer),
+            Arguments.of(new ThumbnailType(xmp), ThumbnailType.class, "image", Types.Text),
+            // data for VersionType
+            Arguments.of(new VersionType(xmp), VersionType.class, "modifier", Types.ProperName) 
+        );
+    }
+}