--- /dev/null 2015-12-17 13:31:34.331185593 +0300 +++ new/test/java/awt/image/multiresolution/MultiResolutionImagePropertiesTest.java 2016-01-22 19:36:21.046518095 +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 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); + } +}