Thu, 18 Jul 2013 16:47:45 +0200
8020820: Limit access to static members of reflective classes
Reviewed-by: jlaskey, sundar
1 /*
2 * Copyright (c) 2010, 2013, 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package jdk.nashorn.api.javaaccess;
28 import static org.testng.AssertJUnit.assertEquals;
29 import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
31 import javax.script.ScriptEngine;
32 import javax.script.ScriptEngineManager;
33 import javax.script.ScriptException;
34 import org.testng.TestNG;
35 import org.testng.annotations.BeforeClass;
36 import org.testng.annotations.Test;
38 /**
39 * @test
40 * @build jdk.nashorn.api.javaaccess.SharedObject jdk.nashorn.api.javaaccess.Person jdk.nashorn.api.javaaccess.ObjectAccessTest
41 * @run testng/othervm jdk.nashorn.api.javaaccess.ObjectAccessTest
42 */
43 public class ObjectAccessTest {
45 private static ScriptEngine e = null;
46 private static SharedObject o = new SharedObject();
48 public static void main(final String[] args) {
49 TestNG.main(args);
50 }
52 @BeforeClass
53 public static void setUpClass() throws ScriptException {
54 final ScriptEngineManager m = new ScriptEngineManager();
55 e = m.getEngineByName("nashorn");
56 e.put("o", o);
57 e.eval("var SharedObject = Packages.jdk.nashorn.api.javaaccess.SharedObject;");
58 e.eval("var Person = Packages.jdk.nashorn.api.javaaccess.Person;");
59 }
61 @Test
62 public void accessFieldObject() throws ScriptException {
63 e.eval("var p_object = o.publicObject;");
64 assertEquals(o.publicObject, e.get("p_object"));
65 assertEquals("object", e.eval("typeof p_object;"));
66 e.eval("o.publicObject = new Person(14);");
67 assertEquals(new Person(14), o.publicObject);
68 }
70 @Test
71 public void accessFieldObjectArray() throws ScriptException {
72 e.eval("var p_object_array = o.publicObjectArray;");
73 assertEquals(o.publicObjectArray[0], e.eval("o.publicObjectArray[0]"));
74 assertArrayEquals(o.publicObjectArray, (Object[])e.get("p_object_array"));
75 e.eval("var t_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.Person[]\"))(3);" +
76 "t_object_arr[0] = new Person(100);" +
77 "t_object_arr[1] = new Person(120);" +
78 "t_object_arr[2] = new Person(140);" +
79 "o.publicObjectArray = t_object_arr;");
80 assertArrayEquals(new Person[] { new Person(100), new Person(120), new Person(140) }, o.publicObjectArray);
81 e.eval("o.publicObjectArray[0] = new Person(10);");
82 assertEquals(new Person(10), o.publicObjectArray[0]);
83 }
85 @Test
86 public void accessStaticFieldObject() throws ScriptException {
87 e.eval("var ps_object = SharedObject.publicStaticObject;");
88 assertEquals(SharedObject.publicStaticObject, e.get("ps_object"));
89 assertEquals("object", e.eval("typeof ps_object;"));
90 e.eval("SharedObject.publicStaticObject = new Person(16);");
91 assertEquals(new Person(16), SharedObject.publicStaticObject);
92 }
94 @Test
95 public void accessStaticFieldObjectArray() throws ScriptException {
96 e.eval("var ps_object_array = SharedObject.publicStaticObjectArray;");
97 assertEquals(SharedObject.publicStaticObjectArray[0], e.eval("SharedObject.publicStaticObjectArray[0]"));
98 assertArrayEquals(SharedObject.publicStaticObjectArray, (Object[])e.get("ps_object_array"));
99 e.eval("var ts_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.Person[]\"))(3);" +
100 "ts_object_arr[0] = new Person(100);" +
101 "ts_object_arr[1] = new Person(120);" +
102 "ts_object_arr[2] = new Person(140);" +
103 "SharedObject.publicStaticObjectArray = ts_object_arr;");
104 assertArrayEquals(new Person[] { new Person(100), new Person(120), new Person(140) }, SharedObject.publicStaticObjectArray);
105 e.eval("SharedObject.publicStaticObjectArray[0] = new Person(10);");
106 assertEquals(new Person(10), SharedObject.publicStaticObjectArray[0]);
107 }
109 @Test
110 public void accessFinalFieldObject() throws ScriptException {
111 e.eval("var pf_object = o.publicFinalObject;");
112 assertEquals(o.publicFinalObject, e.get("pf_object"));
113 assertEquals("object", e.eval("typeof pf_object;"));
114 e.eval("o.publicFinalObject = new Person(-999);");
115 assertEquals(new Person(1024), o.publicFinalObject);
116 }
118 @Test
119 public void accessFinalFieldObjectArray() throws ScriptException {
120 e.eval("var pf_object_array = o.publicFinalObjectArray;");
121 assertEquals(o.publicFinalObjectArray[0], e.eval("o.publicFinalObjectArray[0]"));
122 assertArrayEquals(o.publicFinalObjectArray, (Object[])e.get("pf_object_array"));
123 e.eval("var tf_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.Person[]\"))(3);" +
124 "tf_object_arr[0] = new Person(100);" +
125 "tf_object_arr[1] = new Person(120);" +
126 "tf_object_arr[2] = new Person(140);" +
127 "o.publicOFinalbjectArray = tf_object_arr;");
128 assertArrayEquals(new Person[] { new Person(-900), new Person(1000), new Person(180) }, o.publicFinalObjectArray);
129 e.eval("o.publicFinalObjectArray[0] = new Person(10);");
130 assertEquals(new Person(10), o.publicFinalObjectArray[0]);
131 }
133 @Test
134 public void accessStaticFinalFieldObject() throws ScriptException {
135 e.eval("var psf_object = SharedObject.publicStaticFinalObject;");
136 assertEquals(SharedObject.publicStaticFinalObject, e.get("psf_object"));
137 assertEquals("object", e.eval("typeof psf_object;"));
138 e.eval("SharedObject.publicStaticFinalObject = new Person(6);");
139 assertEquals(new Person(2048), SharedObject.publicStaticFinalObject);
140 }
142 @Test
143 public void accessStaticFinalFieldObjectArray() throws ScriptException {
144 e.eval("var psf_object_array = SharedObject.publicStaticFinalObjectArray;");
145 assertEquals(SharedObject.publicStaticFinalObjectArray[0], e.eval("SharedObject.publicStaticFinalObjectArray[0]"));
146 assertArrayEquals(SharedObject.publicStaticFinalObjectArray, (Object[])e.get("psf_object_array"));
147 e.eval("var tsf_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.Person[]\"))(3);" +
148 "tsf_object_arr[0] = new Person(100);" +
149 "tsf_object_arr[1] = new Person(120);" +
150 "tsf_object_arr[2] = new Person(140);" +
151 "SharedObject.publicStaticFinalObjectArray = tsf_object_arr;");
152 assertArrayEquals(new Person[] { new Person(-9), new Person(110), new Person(Integer.MAX_VALUE) }, SharedObject.publicStaticFinalObjectArray);
153 e.eval("SharedObject.publicStaticFinalObjectArray[0] = new Person(90);");
154 assertEquals(new Person(90), SharedObject.publicStaticFinalObjectArray[0]);
155 }
157 }