8147966: [TEST] add a test for multiresolution image properties
authoravstepan
Tue, 26 Jan 2016 13:05:21 +0300
changeset 35695 94398e8dffee
parent 35694 ffdab5f7fe36
child 35696 5463c1bd7fc2
child 35982 cdcfde3520fa
8147966: [TEST] add a test for multiresolution image properties Reviewed-by: alexsch
jdk/test/java/awt/image/multiresolution/MultiResolutionImagePropertiesTest.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/multiresolution/MultiResolutionImagePropertiesTest.java	Tue Jan 26 13:05:21 2016 +0300
@@ -0,0 +1,216 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import java.awt.image.*;
+import java.util.*;
+
+/* @test
+ * @bug 8147966
+ * @summary test multiresolution image properties
+ * @author a.stepanov
+ *
+ * @run main MultiResolutionImagePropertiesTest
+ */
+
+public class MultiResolutionImagePropertiesTest {
+
+    private final static Map<String, String> PROPS;
+    static {
+        PROPS = new HashMap<>();
+        PROPS.put("one",   "ONE");
+        PROPS.put("two",   "TWO");
+        PROPS.put("three", "THREE");
+        PROPS.put("other", "OTHER");
+        PROPS.put("test",  "TEST");
+    }
+
+    private final static int SZ = 100;
+    private final static Object UNDEF = Image.UndefinedProperty;
+
+    private static BufferedImage generateImage(int scale, Properties p) {
+
+        int x = (int) (SZ * scale);
+        BufferedImage tmp = new BufferedImage(x, x, BufferedImage.TYPE_INT_RGB);
+
+        return new BufferedImage(tmp.getColorModel(),
+                                 tmp.getRaster(),
+                                 tmp.isAlphaPremultiplied(),
+                                 p);
+    }
+
+    private static void checkProperties(BufferedImage img,
+                                        String keys[],
+                                        String undefined[]) {
+        boolean numOK = true;
+
+        if (keys.length == 0) {
+            numOK = (img.getPropertyNames() == null);
+        } else {
+            numOK = (img.getPropertyNames().length == keys.length);
+        }
+
+        if (!numOK) {
+            throw new RuntimeException("invalid number of properties");
+        }
+
+        for (String k: keys) {
+            if (!img.getProperty(k).equals(PROPS.get(k))) {
+                throw new RuntimeException("invalid property for name " + k);
+            }
+        }
+
+        for (String k: undefined) {
+            if (!img.getProperty(k).equals(UNDEF)) {
+                throw new RuntimeException("property for name " + k +
+                    " must be undefined");
+            }
+        }
+    }
+
+    private static void checkProperties(BaseMultiResolutionImage img,
+                                        String keys[],
+                                        String undefined[]) {
+        for (String k: keys) {
+            if (!img.getProperty(k, null).equals(PROPS.get(k))) {
+                throw new RuntimeException("invalid property for name " + k);
+            }
+        }
+
+        for (String k: undefined) {
+            if (!img.getProperty(k, null).equals(UNDEF)) {
+                throw new RuntimeException("property for name " + k +
+                    " must be undefined");
+            }
+        }
+    }
+
+
+    public static void main(String[] args) throws Exception {
+
+        String keys[] = new String[]{"one", "two", "three"};
+        String otherKeys[] = new String[]{"other", "test"};
+        String empty[] = new String[]{};
+
+        Properties props = new Properties();
+        for (String k: keys) { props.setProperty(k, PROPS.get(k)); }
+
+        Properties otherProps = new Properties();
+        for (String k: otherKeys) { otherProps.setProperty(k, PROPS.get(k)); }
+
+        Properties defaultProps = new Properties();
+
+
+        // === check the default state ===
+        BaseMultiResolutionImage image =
+            new BaseMultiResolutionImage(new BufferedImage[]{
+                generateImage(1, defaultProps),
+                generateImage(2, defaultProps),
+                generateImage(3, defaultProps)
+            });
+
+        for (Image var: image.getResolutionVariants()) {
+            if (((BufferedImage) var).getPropertyNames() != null) {
+                throw new RuntimeException("PropertyNames should be null");
+            }
+        }
+
+        // === default: base image is the 1st one ===
+        image =
+            new BaseMultiResolutionImage(new BufferedImage[]{
+                generateImage(1, props),
+                generateImage(2, otherProps),
+                generateImage(3, defaultProps)
+            });
+
+        checkProperties(image, keys, otherKeys);
+
+        BufferedImage var = (BufferedImage) image.getResolutionVariant(SZ, SZ);
+        checkProperties(var, keys, otherKeys);
+
+        var = (BufferedImage) image.getResolutionVariant(2 * SZ, 2 * SZ);
+        checkProperties(var, otherKeys, keys);
+
+        var = (BufferedImage) image.getResolutionVariant(3 * SZ, 3 * SZ);
+        checkProperties(var, empty, keys);
+        checkProperties(var, empty, otherKeys);
+
+        // === let the 2nd image be a base one ===
+        image =
+            new BaseMultiResolutionImage(1, new BufferedImage[]{
+                generateImage(1, props),
+                generateImage(2, otherProps),
+                generateImage(3, defaultProps)
+            });
+
+        checkProperties(image, otherKeys, keys);
+
+        var = (BufferedImage) image.getResolutionVariant(SZ, SZ);
+        checkProperties(var, keys, otherKeys);
+
+        var = (BufferedImage) image.getResolutionVariant(2 * SZ, 2 * SZ);
+        checkProperties(var, otherKeys, keys);
+
+        var = (BufferedImage) image.getResolutionVariant(3 * SZ, 3 * SZ);
+        checkProperties(var, empty, keys);
+        checkProperties(var, empty, otherKeys);
+
+        // === let the 3rd image be a base one ===
+        image =
+            new BaseMultiResolutionImage(2, new BufferedImage[]{
+                generateImage(1, defaultProps),
+                generateImage(2, defaultProps),
+                generateImage(3, props)
+            });
+
+        checkProperties(image, keys, otherKeys);
+
+        var = (BufferedImage) image.getResolutionVariant(SZ, SZ);
+        checkProperties(var, empty, keys);
+        checkProperties(var, empty, otherKeys);
+
+        var = (BufferedImage) image.getResolutionVariant(2 * SZ, 2 * SZ);
+        checkProperties(var, empty, keys);
+        checkProperties(var, empty, otherKeys);
+
+        var = (BufferedImage) image.getResolutionVariant(3 * SZ, 3 * SZ);
+        checkProperties(var, keys, otherKeys);
+
+        // === check the other properties don't affect base ===
+        checkProperties(
+            new BaseMultiResolutionImage(new BufferedImage[]{
+                generateImage(1, defaultProps),
+                generateImage(2, props),
+                generateImage(3, props)
+            }),
+            empty, keys);
+
+        checkProperties(
+            new BaseMultiResolutionImage(2, new BufferedImage[]{
+                generateImage(1, props),
+                generateImage(2, props),
+                generateImage(3, defaultProps)
+            }),
+            empty, keys);
+    }
+}