aboutsummaryrefslogtreecommitdiff
path: root/test/java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java')
-rw-r--r--test/java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java134
1 files changed, 134 insertions, 0 deletions
diff --git a/test/java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java b/test/java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java
new file mode 100644
index 000000000..b50cf5939
--- /dev/null
+++ b/test/java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2006-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 6366813 6459844
+ * @summary Tests that no exception is thrown if a frame is resized just
+ * before we create a bufferStrategy
+ * @author Dmitri.Trembovetski area=FullScreen/BufferStrategy
+ * @run main/othervm -Dsun.java2d.opengl=true BufferStrategyExceptionTest
+ * @run main/othervm BufferStrategyExceptionTest
+ */
+
+import java.awt.AWTException;
+import java.awt.BufferCapabilities;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.ImageCapabilities;
+import java.awt.image.BufferStrategy;
+import java.awt.image.BufferedImage;
+
+/**
+ * The purpose of this test is to make sure that we do not throw an
+ * IllegalStateException during the creation of BufferStrategy if
+ * a window has been resized just before our creation attempt.
+ *
+ * We test both windowed and fullscreen mode, although the exception has
+ * been observed in full screen mode only.
+ */
+public class BufferStrategyExceptionTest {
+ private static final int TEST_REPS = 20;
+
+ public static void main(String[] args) {
+ GraphicsDevice gd =
+ GraphicsEnvironment.getLocalGraphicsEnvironment().
+ getDefaultScreenDevice();
+
+ for (int i = 0; i < TEST_REPS; i++) {
+ TestFrame f = new TestFrame();
+ f.pack();
+ f.setSize(400, 400);
+ f.setVisible(true);
+ if (i % 2 == 0) {
+ gd.setFullScreenWindow(f);
+ }
+ // generate a resize event which will invalidate the peer's
+ // surface data and hopefully cause an exception during
+ // BufferStrategy creation in TestFrame.render()
+ Dimension d = f.getSize();
+ d.width -= 5; d.height -= 5;
+ f.setSize(d);
+
+ f.render();
+ gd.setFullScreenWindow(null);
+ sleep(100);
+ f.dispose();
+ }
+ System.out.println("Test passed.");
+ }
+
+ private static void sleep(long msecs) {
+ try {
+ Thread.sleep(msecs);
+ } catch (InterruptedException ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ private static final BufferedImage bi =
+ new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
+
+ static class TestFrame extends Frame {
+ TestFrame() {
+ setUndecorated(true);
+ setIgnoreRepaint(true);
+ setSize(400, 400);
+ }
+
+ public void render() {
+ ImageCapabilities imgBackBufCap = new ImageCapabilities(true);
+ ImageCapabilities imgFrontBufCap = new ImageCapabilities(true);
+ BufferCapabilities bufCap =
+ new BufferCapabilities(imgFrontBufCap,
+ imgBackBufCap, BufferCapabilities.FlipContents.COPIED);
+ try {
+
+ createBufferStrategy(2, bufCap);
+ } catch (AWTException ex) {
+ createBufferStrategy(2);
+ }
+
+ BufferStrategy bs = getBufferStrategy();
+ do {
+ Graphics g = bs.getDrawGraphics();
+ g.setColor(Color.green);
+ g.fillRect(0, 0, getWidth(), getHeight());
+
+ g.setColor(Color.red);
+ g.drawString("Rendering test", 20, 20);
+
+ g.drawImage(bi, 50, 50, null);
+
+ g.dispose();
+ bs.show();
+ } while (bs.contentsLost()||bs.contentsRestored());
+ }
+ }
+
+}