< prev index next >
test/sun/java2d/marlin/CrashNaNTest.java
Print this page
*** 24,33 ****
--- 24,34 ----
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Path2D;
import java.awt.image.BufferedImage;
+ import java.awt.image.Raster;
import java.io.File;
import java.io.IOException;
import static java.lang.Double.NaN;
import java.util.Locale;
import java.util.logging.Handler;
*** 35,46 ****
import java.util.logging.Logger;
import javax.imageio.ImageIO;
/**
* @test
! * @bug 8149338
! * @summary Verifies that Marlin supports NaN coordinates and no JVM crash happens !
* @run main CrashNaNTest
*/
public class CrashNaNTest {
static final boolean SAVE_IMAGE = false;
--- 36,48 ----
import java.util.logging.Logger;
import javax.imageio.ImageIO;
/**
* @test
! * @bug 8149338 8144938
! * @summary Verifies that Marlin supports NaN coordinates (no JVM crash)
! * but also it skips properly point coordinates with NaN / Infinity values
* @run main CrashNaNTest
*/
public class CrashNaNTest {
static final boolean SAVE_IMAGE = false;
*** 90,101 ****
g2d.setBackground(Color.WHITE);
g2d.clearRect(0, 0, width, height);
final Path2D.Double path = new Path2D.Double();
! path.moveTo(30, 30);
! path.lineTo(100, 100);
for (int i = 0; i < 20000; i++) {
path.lineTo(110 + 0.01 * i, 110);
path.lineTo(111 + 0.01 * i, 100);
}
--- 92,102 ----
g2d.setBackground(Color.WHITE);
g2d.clearRect(0, 0, width, height);
final Path2D.Double path = new Path2D.Double();
! path.moveTo(100, 100);
for (int i = 0; i < 20000; i++) {
path.lineTo(110 + 0.01 * i, 110);
path.lineTo(111 + 0.01 * i, 100);
}
*** 103,126 ****
path.lineTo(NaN, 200);
path.lineTo(200, 200);
path.lineTo(200, NaN);
path.lineTo(300, 300);
path.lineTo(NaN, NaN);
! path.lineTo(100, 100);
path.closePath();
final Path2D.Double path2 = new Path2D.Double();
! path2.moveTo(0,0);
! path2.lineTo(width,height);
! path2.lineTo(10, 10);
path2.closePath();
for (int i = 0; i < 1; i++) {
final long start = System.nanoTime();
g2d.setColor(Color.BLUE);
g2d.fill(path);
!
g2d.fill(path2);
final long time = System.nanoTime() - start;
System.out.println("paint: duration= " + (1e-6 * time) + " ms.");
}
--- 104,127 ----
path.lineTo(NaN, 200);
path.lineTo(200, 200);
path.lineTo(200, NaN);
path.lineTo(300, 300);
path.lineTo(NaN, NaN);
! path.lineTo(100, 200);
path.closePath();
final Path2D.Double path2 = new Path2D.Double();
! path2.moveTo(0, 0);
! path2.lineTo(100, height);
! path2.lineTo(0, 200);
path2.closePath();
for (int i = 0; i < 1; i++) {
final long start = System.nanoTime();
g2d.setColor(Color.BLUE);
g2d.fill(path);
! g2d.setColor(Color.GREEN);
g2d.fill(path2);
final long time = System.nanoTime() - start;
System.out.println("paint: duration= " + (1e-6 * time) + " ms.");
}
*** 134,143 ****
--- 135,169 ----
} catch (IOException ex) {
System.out.println("Writing file failure:");
ex.printStackTrace();
}
}
+
+ // Check image on few pixels:
+ final Raster raster = image.getData();
+
+ checkPixel(raster, 200, 195, Color.BLUE.getRGB());
+ checkPixel(raster, 105, 195, Color.BLUE.getRGB());
+ checkPixel(raster, 286, 290, Color.BLUE.getRGB());
+
+ checkPixel(raster, 108, 105, Color.WHITE.getRGB());
+ checkPixel(raster, 205, 200, Color.WHITE.getRGB());
+
+ checkPixel(raster, 5, 200, Color.GREEN.getRGB());
+
} finally {
g2d.dispose();
}
}
+
+ private static void checkPixel(final Raster raster,
+ final int x, final int y,
+ final int expected) {
+
+ final int[] rgb = (int[]) raster.getDataElements(x, y, null);
+
+ if (rgb[0] != expected) {
+ throw new IllegalStateException("bad pixel at (" + x + ", " + y
+ + ") = " + rgb[0] + " expected: " + expected);
+ }
+ }
}
< prev index next >