1/*
2 * Copyright (c) 2015, 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 */
23import javax.swing.SwingUtilities;
24import javax.swing.UIDefaults;
25/*
26 * @test
27 * @bug 8080972
28 * @summary Audit Core Reflection in module java.desktop for places that will
29 *          require changes to work with modules
30 * @author Alexander Scherbatiy
31 */
32
33public class TestProxyLazyValue {
34
35    public static void main(String[] args) throws Exception {
36        SwingUtilities.invokeAndWait(TestProxyLazyValue::testUserProxyLazyValue);
37        SwingUtilities.invokeAndWait(TestProxyLazyValue::testProxyLazyValue);
38        System.setSecurityManager(new SecurityManager());
39        SwingUtilities.invokeAndWait(TestProxyLazyValue::testUserProxyLazyValue);
40        SwingUtilities.invokeAndWait(TestProxyLazyValue::testProxyLazyValue);
41    }
42
43    private static void testUserProxyLazyValue() {
44
45        Object obj = new UserProxyLazyValue(
46                UserLazyClass.class.getName()).createValue(null);
47
48        if (!(obj instanceof UserLazyClass)) {
49            throw new RuntimeException("Object is not UserLazyClass!");
50        }
51
52        obj = new UserProxyLazyValue(UserLazyClass.class.getName(),
53                new Object[]{UserLazyClass.CONSTRUCTOR_ARG}).createValue(null);
54
55        if (!(obj instanceof UserLazyClass)) {
56            throw new RuntimeException("Object is not UserLazyClass!");
57        }
58
59        if (((UserLazyClass) obj).arg != UserLazyClass.CONSTRUCTOR_ARG) {
60            throw new RuntimeException("Constructt argument is wrong!");
61        }
62
63        obj = new UserProxyLazyValue(UserLazyClass.class.getName(),
64                "method1").createValue(null);
65
66        if (!UserLazyClass.RESULT_1.equals(obj)) {
67            throw new RuntimeException("Result is wrong!");
68        }
69
70        obj = new UserProxyLazyValue(UserLazyClass.class.getName(),
71                "method2", new Object[]{UserLazyClass.RESULT_2}).createValue(null);
72
73        if (!UserLazyClass.RESULT_2.equals(obj)) {
74            throw new RuntimeException("Result is wrong!");
75        }
76    }
77
78    private static void testProxyLazyValue() {
79
80        Object obj = new UIDefaults.ProxyLazyValue(
81                UserLazyClass.class.getName()).createValue(null);
82
83        if (!(obj instanceof UserLazyClass)) {
84            throw new RuntimeException("Object is not UserLazyClass!");
85        }
86
87        obj = new UIDefaults.ProxyLazyValue(UserLazyClass.class.getName(),
88                new Object[]{UserLazyClass.CONSTRUCTOR_ARG}).createValue(null);
89
90        if (!(obj instanceof UserLazyClass)) {
91            throw new RuntimeException("Object is not UserLazyClass!");
92        }
93
94        if (((UserLazyClass) obj).arg != UserLazyClass.CONSTRUCTOR_ARG) {
95            throw new RuntimeException("Constructt argument is wrong!");
96        }
97
98        obj = new UIDefaults.ProxyLazyValue(UserLazyClass.class.getName(),
99                "method1").createValue(null);
100
101        if (!UserLazyClass.RESULT_1.equals(obj)) {
102            throw new RuntimeException("Result is wrong!");
103        }
104
105        obj = new UIDefaults.ProxyLazyValue(UserLazyClass.class.getName(),
106                "method2", new Object[]{UserLazyClass.RESULT_2}).createValue(null);
107
108        if (!UserLazyClass.RESULT_2.equals(obj)) {
109            throw new RuntimeException("Result is wrong!");
110        }
111    }
112
113    public static class UserLazyClass {
114
115        static final int CONSTRUCTOR_ARG = 100;
116        static final String RESULT_1 = "1";
117        static final String RESULT_2 = "2";
118
119        int arg;
120
121        public UserLazyClass() {
122        }
123
124        public UserLazyClass(int arg) {
125            this.arg = arg;
126        }
127
128        public static String method1() {
129            return RESULT_1;
130        }
131
132        public static String method2(String arg) {
133            return arg;
134        }
135    }
136
137    public static class UserProxyLazyValue extends UIDefaults.ProxyLazyValue {
138
139        public UserProxyLazyValue(String className) {
140            super(className);
141        }
142
143        public UserProxyLazyValue(String className, Object[] constructorArgs) {
144            super(className, constructorArgs);
145        }
146
147        public UserProxyLazyValue(String className, String methodName) {
148            super(className, methodName);
149        }
150
151        public UserProxyLazyValue(String className, String methodName,
152                Object[] methodArgs) {
153            super(className, methodName, methodArgs);
154        }
155    }
156}
157