ObjectAccessTest.java revision 1243:df6c3e9c1a0b
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 */
25
26package jdk.nashorn.api.javaaccess.test;
27
28import static org.testng.AssertJUnit.assertEquals;
29import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
30import javax.script.ScriptEngine;
31import javax.script.ScriptEngineManager;
32import javax.script.ScriptException;
33import org.testng.TestNG;
34import org.testng.annotations.AfterClass;
35import org.testng.annotations.BeforeClass;
36import org.testng.annotations.Test;
37
38/**
39 * @test
40 * @build jdk.nashorn.api.javaaccess.test.SharedObject jdk.nashorn.api.javaaccess.test.Person jdk.nashorn.api.javaaccess.test.ObjectAccessTest
41 * @run testng/othervm jdk.nashorn.api.javaaccess.test.ObjectAccessTest
42 */
43@SuppressWarnings("javadoc")
44public class ObjectAccessTest {
45
46    private static ScriptEngine e = null;
47    private static SharedObject o = null;
48
49    public static void main(final String[] args) {
50        TestNG.main(args);
51    }
52
53    @BeforeClass
54    public static void setUpClass() throws ScriptException {
55        final ScriptEngineManager m = new ScriptEngineManager();
56        e = m.getEngineByName("nashorn");
57        o = new SharedObject();
58        e.put("o", o);
59        e.eval("var SharedObject = Packages.jdk.nashorn.api.javaaccess.test.SharedObject;");
60        e.eval("var Person = Packages.jdk.nashorn.api.javaaccess.test.Person;");
61    }
62
63    @AfterClass
64    public static void tearDownClass() {
65        e = null;
66        o = null;
67    }
68
69    @Test
70    public void accessFieldObject() throws ScriptException {
71        e.eval("var p_object = o.publicObject;");
72        assertEquals(o.publicObject, e.get("p_object"));
73        assertEquals("object", e.eval("typeof p_object;"));
74        e.eval("o.publicObject = new Person(14);");
75        assertEquals(new Person(14), o.publicObject);
76    }
77
78    @Test
79    public void accessFieldObjectArray() throws ScriptException {
80        e.eval("var p_object_array = o.publicObjectArray;");
81        assertEquals(o.publicObjectArray[0], e.eval("o.publicObjectArray[0]"));
82        assertArrayEquals(o.publicObjectArray, (Object[])e.get("p_object_array"));
83        e.eval("var t_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.test.Person[]\"))(3);" +
84                "t_object_arr[0] = new Person(100);" +
85                "t_object_arr[1] = new Person(120);" +
86                "t_object_arr[2] = new Person(140);" +
87                "o.publicObjectArray = t_object_arr;");
88        assertArrayEquals(new Person[] { new Person(100), new Person(120), new Person(140) }, o.publicObjectArray);
89        e.eval("o.publicObjectArray[0] = new Person(10);");
90        assertEquals(new Person(10), o.publicObjectArray[0]);
91    }
92
93    @Test
94    public void accessStaticFieldObject() throws ScriptException {
95        e.eval("var ps_object = SharedObject.publicStaticObject;");
96        assertEquals(SharedObject.publicStaticObject, e.get("ps_object"));
97        assertEquals("object", e.eval("typeof ps_object;"));
98        e.eval("SharedObject.publicStaticObject = new Person(16);");
99        assertEquals(new Person(16), SharedObject.publicStaticObject);
100    }
101
102    @Test
103    public void accessStaticFieldObjectArray() throws ScriptException {
104        e.eval("var ps_object_array = SharedObject.publicStaticObjectArray;");
105        assertEquals(SharedObject.publicStaticObjectArray[0], e.eval("SharedObject.publicStaticObjectArray[0]"));
106        assertArrayEquals(SharedObject.publicStaticObjectArray, (Object[])e.get("ps_object_array"));
107        e.eval("var ts_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.test.Person[]\"))(3);" +
108                "ts_object_arr[0] = new Person(100);" +
109                "ts_object_arr[1] = new Person(120);" +
110                "ts_object_arr[2] = new Person(140);" +
111                "SharedObject.publicStaticObjectArray = ts_object_arr;");
112        assertArrayEquals(new Person[] { new Person(100), new Person(120), new Person(140) }, SharedObject.publicStaticObjectArray);
113        e.eval("SharedObject.publicStaticObjectArray[0] = new Person(10);");
114        assertEquals(new Person(10), SharedObject.publicStaticObjectArray[0]);
115    }
116
117    @Test
118    public void accessFinalFieldObject() throws ScriptException {
119        e.eval("var pf_object = o.publicFinalObject;");
120        assertEquals(o.publicFinalObject, e.get("pf_object"));
121        assertEquals("object", e.eval("typeof pf_object;"));
122        e.eval("o.publicFinalObject = new Person(-999);");
123        assertEquals(new Person(1024), o.publicFinalObject);
124    }
125
126    @Test
127    public void accessFinalFieldObjectArray() throws ScriptException {
128        e.eval("var pf_object_array = o.publicFinalObjectArray;");
129        assertEquals(o.publicFinalObjectArray[0], e.eval("o.publicFinalObjectArray[0]"));
130        assertArrayEquals(o.publicFinalObjectArray, (Object[])e.get("pf_object_array"));
131        e.eval("var tf_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.test.Person[]\"))(3);" +
132                "tf_object_arr[0] = new Person(100);" +
133                "tf_object_arr[1] = new Person(120);" +
134                "tf_object_arr[2] = new Person(140);" +
135                "o.publicOFinalbjectArray = tf_object_arr;");
136        assertArrayEquals(new Person[] { new Person(-900), new Person(1000), new Person(180) }, o.publicFinalObjectArray);
137        e.eval("o.publicFinalObjectArray[0] = new Person(10);");
138        assertEquals(new Person(10), o.publicFinalObjectArray[0]);
139    }
140
141    @Test
142    public void accessStaticFinalFieldObject() throws ScriptException {
143        e.eval("var psf_object = SharedObject.publicStaticFinalObject;");
144        assertEquals(SharedObject.publicStaticFinalObject, e.get("psf_object"));
145        assertEquals("object", e.eval("typeof psf_object;"));
146        e.eval("SharedObject.publicStaticFinalObject = new Person(6);");
147        assertEquals(new Person(2048), SharedObject.publicStaticFinalObject);
148    }
149
150    @Test
151    public void accessStaticFinalFieldObjectArray() throws ScriptException {
152        e.eval("var psf_object_array = SharedObject.publicStaticFinalObjectArray;");
153        assertEquals(SharedObject.publicStaticFinalObjectArray[0], e.eval("SharedObject.publicStaticFinalObjectArray[0]"));
154        assertArrayEquals(SharedObject.publicStaticFinalObjectArray, (Object[])e.get("psf_object_array"));
155        e.eval("var tsf_object_arr = new (Java.type(\"jdk.nashorn.api.javaaccess.test.Person[]\"))(3);" +
156                "tsf_object_arr[0] = new Person(100);" +
157                "tsf_object_arr[1] = new Person(120);" +
158                "tsf_object_arr[2] = new Person(140);" +
159                "SharedObject.publicStaticFinalObjectArray = tsf_object_arr;");
160        assertArrayEquals(new Person[] { new Person(-9), new Person(110), new Person(Integer.MAX_VALUE) }, SharedObject.publicStaticFinalObjectArray);
161        e.eval("SharedObject.publicStaticFinalObjectArray[0] = new Person(90);");
162        assertEquals(new Person(90), SharedObject.publicStaticFinalObjectArray[0]);
163    }
164
165}
166