< 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 >