--- /dev/null 2016-05-27 12:21:50.952709000 +0530 +++ new/test/sun/awt/image/OffScreenImageSource/ImageFilterTest.java 2016-05-27 12:54:24.791115000 +0530 @@ -0,0 +1,131 @@ +/* + * 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. + */ + +/* @test + * @bug 8139192 + * @summary Test to check OffScreenImageSource handles ImageFilter.imageComplete() behaviors + * @run main ImageFilterTest + */ + +import java.awt.Image; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; +import java.awt.image.FilteredImageSource; +import java.awt.image.ImageFilter; + + +public class ImageFilterTest { + + public static void main(String[] args) { + String[] scenarios = { + "SUCCESS", + "SINGLEFRAMEDONE exception", + "STATICIMAGEDONE exception" + }; + + for (String str : scenarios) { + MyImageFilter testFilter = new MyImageFilter(str); + test(testFilter); + } + } + + public static void test(MyImageFilter testFilter) { + Image image = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB); + FilteredImageSource filtered = + new FilteredImageSource(image.getSource(), testFilter); + + Image img = Toolkit.getDefaultToolkit().createImage(filtered); + + BufferedImage buffImage = new BufferedImage(img.getWidth(null), + img.getHeight(null), BufferedImage.TYPE_INT_ARGB); + } +} + +class MyImageFilter extends ImageFilter { + + private String testScenario; + private boolean intermediateStatus; + + public MyImageFilter(String scenario) { + super(); + + testScenario = scenario; + intermediateStatus = false; + } + + @Override + public void imageComplete(int status) { + switch (testScenario) { + case "SUCCESS": + if (status == SINGLEFRAMEDONE) { + intermediateStatus = true; + } + + if (status == STATICIMAGEDONE) { + if (!intermediateStatus) { + throw new RuntimeException("STATICIMAGEDONE is not expected"); + } + } + if (status == IMAGEERROR) { + throw new RuntimeException("IMAGEERROR is not expected"); + } + break; + + case "SINGLEFRAMEDONE exception": + if (status == SINGLEFRAMEDONE) { + intermediateStatus = true; + + Integer i = null; + i.intValue(); // causes NullPointerException + } + if (status == IMAGEERROR) { + if (!intermediateStatus) { + throw new RuntimeException("IMAGEERROR is not expected"); + } + } + if (status == STATICIMAGEDONE) { + throw new RuntimeException("STATICIMAGEDONE is not expected"); + } + break; + + case "STATICIMAGEDONE exception": + if (status == SINGLEFRAMEDONE) { + intermediateStatus = true; + } + + if (status == STATICIMAGEDONE) { + if (intermediateStatus) { + Integer i = null; + i.intValue(); // causes NullPointerException + } + } + if (status == IMAGEERROR) { + throw new RuntimeException("IMAGEERROR is not expected"); + } + break; + default: + throw new RuntimeException("Invalid Test Scenario"); + } + } +} +