3789983e89
Reviewed-by: darcy, ihse
216 lines
6.6 KiB
Java
216 lines
6.6 KiB
Java
/*
|
|
* Copyright (c) 2015, 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.Dimension;
|
|
import java.awt.Image;
|
|
import java.awt.image.BufferedImage;
|
|
import java.awt.image.BaseMultiResolutionImage;
|
|
import java.awt.image.MultiResolutionImage;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* @test
|
|
* @bug 8029339
|
|
* @author Alexander Scherbatiy
|
|
* @summary Custom MultiResolution image support on HiDPI displays
|
|
* @run main BaseMultiResolutionImageTest
|
|
*/
|
|
public class BaseMultiResolutionImageTest {
|
|
|
|
public static void main(String[] args) {
|
|
testZeroRVIMages();
|
|
testNullRVIMages();
|
|
testNullRVIMage();
|
|
testIOOBException();
|
|
testRVSizes();
|
|
testBaseMRImage();
|
|
}
|
|
|
|
static void testZeroRVIMages() {
|
|
try {
|
|
new BaseMultiResolutionImage();
|
|
} catch (IllegalArgumentException ignored) {
|
|
return;
|
|
}
|
|
throw new RuntimeException("IllegalArgumentException is not thrown!");
|
|
}
|
|
|
|
static void testNullRVIMages() {
|
|
try {
|
|
new BaseMultiResolutionImage(null);
|
|
} catch (IllegalArgumentException ignored) {
|
|
return;
|
|
}
|
|
throw new RuntimeException("IllegalArgumentException is not thrown!");
|
|
}
|
|
|
|
static void testNullRVIMage() {
|
|
|
|
Image baseImage = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB);
|
|
|
|
try {
|
|
new BaseMultiResolutionImage(baseImage, null);
|
|
} catch (NullPointerException ignored) {
|
|
return;
|
|
}
|
|
throw new RuntimeException("NullPointerException is not thrown!");
|
|
}
|
|
|
|
static void testIOOBException() {
|
|
|
|
for (int baseImageIndex : new int[]{-3, 2, 4}) {
|
|
try {
|
|
new BaseMultiResolutionImage(baseImageIndex,
|
|
createRVImage(0), createRVImage(1));
|
|
} catch (IndexOutOfBoundsException ignored) {
|
|
continue;
|
|
}
|
|
|
|
throw new RuntimeException("IndexOutOfBoundsException is not thrown!");
|
|
}
|
|
}
|
|
|
|
static void testRVSizes() {
|
|
|
|
int imageSize = getSize(1);
|
|
|
|
double[][] sizeArray = {
|
|
{-imageSize, imageSize},
|
|
{2 * imageSize, -2 * imageSize},
|
|
{Double.POSITIVE_INFINITY, imageSize},
|
|
{Double.POSITIVE_INFINITY, -imageSize},
|
|
{imageSize, Double.NEGATIVE_INFINITY},
|
|
{-imageSize, Double.NEGATIVE_INFINITY},
|
|
{Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY},
|
|
{Double.NaN, imageSize},
|
|
{imageSize, Double.NaN},
|
|
{Double.NaN, Double.NaN},
|
|
{Double.POSITIVE_INFINITY, Double.NaN}
|
|
};
|
|
|
|
for (double[] sizes : sizeArray) {
|
|
try {
|
|
MultiResolutionImage mrImage = new BaseMultiResolutionImage(
|
|
0, createRVImage(0), createRVImage(1));
|
|
mrImage.getResolutionVariant(sizes[0], sizes[1]);
|
|
} catch (IllegalArgumentException ignored) {
|
|
continue;
|
|
}
|
|
|
|
throw new RuntimeException("IllegalArgumentException is not thrown!");
|
|
}
|
|
}
|
|
|
|
static void testBaseMRImage() {
|
|
int baseIndex = 1;
|
|
int length = 3;
|
|
BufferedImage[] resolutionVariants = new BufferedImage[length];
|
|
for (int i = 0; i < length; i++) {
|
|
resolutionVariants[i] = createRVImage(i);
|
|
}
|
|
|
|
BaseMultiResolutionImage mrImage = new BaseMultiResolutionImage(baseIndex,
|
|
resolutionVariants);
|
|
|
|
List<Image> rvImageList = mrImage.getResolutionVariants();
|
|
if (rvImageList.size() != length) {
|
|
throw new RuntimeException("Wrong size of resolution variants list!");
|
|
}
|
|
|
|
for (int i = 0; i < length; i++) {
|
|
int imageSize = getSize(i);
|
|
Image testRVImage = mrImage.getResolutionVariant(imageSize, imageSize);
|
|
|
|
if (testRVImage != resolutionVariants[i]) {
|
|
throw new RuntimeException("Wrong resolution variant!");
|
|
}
|
|
|
|
if (rvImageList.get(i) != resolutionVariants[i]) {
|
|
throw new RuntimeException("Wrong resolution variant!");
|
|
}
|
|
}
|
|
|
|
BufferedImage baseImage = resolutionVariants[baseIndex];
|
|
|
|
if (baseImage.getWidth() != mrImage.getWidth(null)
|
|
|| baseImage.getHeight() != mrImage.getHeight(null)) {
|
|
throw new RuntimeException("Base image is wrong!");
|
|
}
|
|
|
|
boolean passed = false;
|
|
|
|
try {
|
|
rvImageList.set(0, createRVImage(10));
|
|
} catch (Exception e) {
|
|
passed = true;
|
|
}
|
|
|
|
if (!passed) {
|
|
throw new RuntimeException("Resolution variants list is modifiable!");
|
|
}
|
|
|
|
passed = false;
|
|
|
|
try {
|
|
rvImageList.remove(0);
|
|
} catch (Exception e) {
|
|
passed = true;
|
|
}
|
|
|
|
if (!passed) {
|
|
throw new RuntimeException("Resolution variants list is modifiable!");
|
|
}
|
|
|
|
passed = false;
|
|
|
|
try {
|
|
rvImageList.add(0, createRVImage(10));
|
|
} catch (Exception e) {
|
|
passed = true;
|
|
}
|
|
|
|
if (!passed) {
|
|
throw new RuntimeException("Resolution variants list is modifiable!");
|
|
}
|
|
|
|
passed = false;
|
|
try {
|
|
mrImage.getGraphics();
|
|
} catch (UnsupportedOperationException e) {
|
|
passed = true;
|
|
}
|
|
|
|
if (!passed) {
|
|
throw new RuntimeException("getGraphics() method shouldn't be supported!");
|
|
}
|
|
}
|
|
|
|
private static int getSize(int i) {
|
|
return 8 * (i + 1);
|
|
}
|
|
|
|
private static BufferedImage createRVImage(int i) {
|
|
return new BufferedImage(getSize(i), getSize(i),
|
|
BufferedImage.TYPE_INT_RGB);
|
|
}
|
|
}
|