-
Bug
-
Resolution: Unresolved
-
P4
-
11, 25
-
generic
-
generic
A DESCRIPTION OF THE PROBLEM :
sun.awt.image.MultiResolutionCachedImage.getProperty(name: null, observer: null) doesn't throw NPE.
But documentation indicates that NPE should be thrown if the property name is null.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
java --add-exports java.desktop/sun.awt.image=ALL-UNNAMED MultiResolutionCachedImageTest
ACTUAL VS EXPECTED BEHAVIOR :
ACTUAL -
Custom RuntimeException "Expected NullPointerException for null property name" is thrown
EXPECTED -
NPE thrown by Java
---------- BEGIN SOURCE ----------
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.geom.Dimension2D;
import java.awt.image.BufferedImage;
import sun.awt.image.MultiResolutionCachedImage;
public class MultiResolutionCachedImageTest {
private static final Color TEST_COLOR = Color.BLUE;
public static void main(String[] args) {
Image image = new TestMultiResolutionCachedImage(100);
try {
image.getProperty(null, null);
throw new RuntimeException("Expected NullPointerException for null property name");
} catch (NullPointerException e) {
// Expected behavior
}
}
private static Dimension2D getDimension(int size) {
return new Dimension(size, size);
}
private static Dimension2D[] getSizes(int size) {
return new Dimension2D[]{getDimension(size), getDimension(2 * size)};
}
private static Image createImage(int width, int height) {
BufferedImage buffImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = buffImage.createGraphics();
g.setColor(TEST_COLOR);
g.fillRect(0, 0, width, height);
return buffImage;
}
private static class TestMultiResolutionCachedImage
extends MultiResolutionCachedImage {
private final int size;
public TestMultiResolutionCachedImage(int size) {
super(size, size, getSizes(size), (w, h) -> createImage(w, h));
this.size = size;
}
@Override
public Image getResolutionVariant(double width, double height) {
if (width == size || height == size) {
throw new RuntimeException("Base image is requested!");
}
return super.getResolutionVariant(width, height);
}
@Override
protected Image getBaseImage() {
throw new RuntimeException("Base image is used");
}
}
}
---------- END SOURCE ----------
sun.awt.image.MultiResolutionCachedImage.getProperty(name: null, observer: null) doesn't throw NPE.
But documentation indicates that NPE should be thrown if the property name is null.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
java --add-exports java.desktop/sun.awt.image=ALL-UNNAMED MultiResolutionCachedImageTest
ACTUAL VS EXPECTED BEHAVIOR :
ACTUAL -
Custom RuntimeException "Expected NullPointerException for null property name" is thrown
EXPECTED -
NPE thrown by Java
---------- BEGIN SOURCE ----------
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.geom.Dimension2D;
import java.awt.image.BufferedImage;
import sun.awt.image.MultiResolutionCachedImage;
public class MultiResolutionCachedImageTest {
private static final Color TEST_COLOR = Color.BLUE;
public static void main(String[] args) {
Image image = new TestMultiResolutionCachedImage(100);
try {
image.getProperty(null, null);
throw new RuntimeException("Expected NullPointerException for null property name");
} catch (NullPointerException e) {
// Expected behavior
}
}
private static Dimension2D getDimension(int size) {
return new Dimension(size, size);
}
private static Dimension2D[] getSizes(int size) {
return new Dimension2D[]{getDimension(size), getDimension(2 * size)};
}
private static Image createImage(int width, int height) {
BufferedImage buffImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = buffImage.createGraphics();
g.setColor(TEST_COLOR);
g.fillRect(0, 0, width, height);
return buffImage;
}
private static class TestMultiResolutionCachedImage
extends MultiResolutionCachedImage {
private final int size;
public TestMultiResolutionCachedImage(int size) {
super(size, size, getSizes(size), (w, h) -> createImage(w, h));
this.size = size;
}
@Override
public Image getResolutionVariant(double width, double height) {
if (width == size || height == size) {
throw new RuntimeException("Base image is requested!");
}
return super.getResolutionVariant(width, height);
}
@Override
protected Image getBaseImage() {
throw new RuntimeException("Base image is used");
}
}
}
---------- END SOURCE ----------