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