test/src/jdk/nashorn/api/javaaccess/ObjectAccessTest.java

Thu, 18 Jul 2013 16:47:45 +0200

author
attila
date
Thu, 18 Jul 2013 16:47:45 +0200
changeset 458
4b06441b7624
parent 367
6a75a505301f
child 489
dd79c04ef7df
permissions
-rw-r--r--

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 }

mercurial