CloneConfigsTest.java revision 14851:980da45565c8
1/*
2 * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @key headful
27 * @bug     6822057 7124400 8059848
28 *
29 * @summary Test verifies that list of supported graphics configurations
30 *          can not be changed via modification of elements of an array
31 *          returned by getConfiguration() method.
32 *
33 * @run     main CloneConfigsTest
34 * @run     main/othervm -Dsun.java2d.opengl=True CloneConfigsTest
35 * @run     main/othervm -Dsun.java2d.d3d=true CloneConfigsTest
36 * @run     main/othervm -Dsun.java2d.noddraw=true CloneConfigsTest
37 */
38
39import java.awt.GraphicsConfiguration;
40import java.awt.GraphicsDevice;
41import java.awt.GraphicsEnvironment;
42import java.awt.Rectangle;
43import java.awt.geom.AffineTransform;
44import java.awt.image.BufferedImage;
45import java.awt.image.ColorModel;
46
47public class CloneConfigsTest {
48
49    public static void main(String[] args) {
50        GraphicsEnvironment env =
51                GraphicsEnvironment.getLocalGraphicsEnvironment();
52
53        GraphicsDevice[] devices = env.getScreenDevices();
54
55        GraphicsConfiguration c = new TestConfig();
56
57        for (GraphicsDevice gd : devices) {
58            System.out.println("Device: " + gd);
59
60            GraphicsConfiguration[] configs = gd.getConfigurations();
61
62            for (int i = 0; i < configs.length; i++) {
63                GraphicsConfiguration gc  = configs[i];
64                System.out.println("\tConfig: " + gc);
65
66                configs[i] = c;
67            }
68
69            // verify whether array of configs was modified
70            configs = gd.getConfigurations();
71            for (GraphicsConfiguration gc : configs) {
72                if (gc == c) {
73                    throw new RuntimeException("Test failed.");
74                }
75            }
76            System.out.println("Test passed.");
77        }
78    }
79
80    private static class TestConfig extends GraphicsConfiguration {
81
82        @Override
83        public GraphicsDevice getDevice() {
84            throw new UnsupportedOperationException("Not supported yet.");
85        }
86
87        @Override
88        public BufferedImage createCompatibleImage(int width, int height) {
89            throw new UnsupportedOperationException("Not supported yet.");
90        }
91
92        @Override
93        public ColorModel getColorModel() {
94            throw new UnsupportedOperationException("Not supported yet.");
95        }
96
97        @Override
98        public ColorModel getColorModel(int transparency) {
99            throw new UnsupportedOperationException("Not supported yet.");
100        }
101
102        @Override
103        public AffineTransform getDefaultTransform() {
104            throw new UnsupportedOperationException("Not supported yet.");
105        }
106
107        @Override
108        public AffineTransform getNormalizingTransform() {
109            throw new UnsupportedOperationException("Not supported yet.");
110        }
111
112        @Override
113        public Rectangle getBounds() {
114            throw new UnsupportedOperationException("Not supported yet.");
115        }
116
117    }
118
119}
120