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 
  26 package jdk.nashorn.api.javaaccess.test;
  27 
  28 import static org.testng.AssertJUnit.assertEquals;
  29 import static org.testng.AssertJUnit.assertTrue;
  30 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.AfterClass;
  36 import org.testng.annotations.BeforeClass;
  37 import org.testng.annotations.Test;
  38 
  39 /**
  40  * @test
  41  * @build jdk.nashorn.api.javaaccess.test.SharedObject jdk.nashorn.api.javaaccess.test.Person jdk.nashorn.api.javaaccess.test.NumberAccessTest
  42  * @run testng/othervm jdk.nashorn.api.javaaccess.test.NumberAccessTest
  43  */
  44 @SuppressWarnings("javadoc")
  45 public class NumberAccessTest {
  46 
  47     private static ScriptEngine e;
  48     private static SharedObject o;
  49 
  50     public static void main(final String[] args) {
  51         TestNG.main(args);
  52     }
  53 
  54     @BeforeClass
  55     public static void setUpClass() throws ScriptException {
  56         final ScriptEngineManager m = new ScriptEngineManager();
  57         e = m.getEngineByName("nashorn");
  58         o = new SharedObject();
  59         e.put("o", o);
  60         e.eval("var SharedObject = Packages.jdk.nashorn.api.javaaccess.test.SharedObject;");
  61     }
  62 
  63     @AfterClass
  64     public static void tearDownClass() {
  65         e = null;
  66         o = null;
  67     }
  68 
  69     // --------------------------------long
  70     // tests------------------------------------
  71     @Test
  72     public void accessFieldLong() throws ScriptException {
  73         e.eval("var p_long = o.publicLong;");
  74         assertEquals(o.publicLong, e.get("p_long"));
  75         e.eval("o.publicLong = 12;");
  76         assertEquals(12, o.publicLong);
  77     }
  78 
  79     @Test
  80     public void accessFieldLongArray() throws ScriptException {
  81         e.eval("var p_long_array = o.publicLongArray;");
  82         assertEquals(o.publicLongArray[0], e.eval("o.publicLongArray[0];"));
  83         assertArrayEquals(o.publicLongArray, (long[])e.get("p_long_array"));
  84         e.eval("var t_long_arr = new (Java.type(\"long[]\"))(3);" +
  85                 "t_long_arr[0] = -189009;" +
  86                 "t_long_arr[1] = 456;" +
  87                 "t_long_arr[2] = 600000001;" +
  88                 "o.publicLongArray = t_long_arr;");
  89         // e.eval("o.publicIntArray = [-189009,456,600000001];");
  90         assertArrayEquals(new long[] { -189009, 456, 600000001 }, o.publicLongArray);
  91         e.eval("o.publicLongArray[0] = 10;");
  92         assertEquals(10, o.publicLongArray[0]);
  93     }
  94 
  95     @Test
  96     public void accessStaticFieldLong() throws ScriptException {
  97         e.eval("var ps_long = SharedObject.publicStaticLong;");
  98         assertEquals(SharedObject.publicStaticLong, e.get("ps_long"));
  99         e.eval("SharedObject.publicStaticLong = 120;");
 100         assertEquals(120, SharedObject.publicStaticLong);
 101     }
 102 
 103     @Test
 104     public void accessStaticFieldLongArray() throws ScriptException {
 105         e.eval("var ps_long_array = SharedObject.publicStaticLongArray;");
 106         assertEquals(SharedObject.publicStaticLongArray[0], e.eval("SharedObject.publicStaticLongArray[0];"));
 107         assertArrayEquals(SharedObject.publicStaticLongArray, (long[])e.get("ps_long_array"));
 108         e.eval("var ts_long_arr = new (Java.type(\"long[]\"))(3);" +
 109                 "ts_long_arr[0] = -189009;" +
 110                 "ts_long_arr[1] = 456;" +
 111                 "ts_long_arr[2] = 600000001;" +
 112                 "SharedObject.publicStaticLongArray = ts_long_arr;");
 113         // e.eval("o.publicIntArray = [-189009,456,600000001];");
 114         assertArrayEquals(new long[] { -189009, 456, 600000001 }, SharedObject.publicStaticLongArray);
 115         e.eval("SharedObject.publicStaticLongArray[0] = 10;");
 116         assertEquals(10, SharedObject.publicStaticLongArray[0]);
 117     }
 118 
 119     @Test
 120     public void accessFinalFieldLong() throws ScriptException {
 121         e.eval("var pf_long = o.publicFinalLong;");
 122         assertEquals(o.publicFinalLong, e.get("pf_long"));
 123         e.eval("o.publicFinalLong = 120;");
 124         assertEquals(13353333333333333L, o.publicFinalLong);
 125     }
 126 
 127     @Test
 128     public void accessFinalFieldLongArray() throws ScriptException {
 129         e.eval("var pf_long_array = o.publicFinalLongArray;");
 130         assertEquals(o.publicFinalLongArray[0], e.eval("o.publicFinalLongArray[0];"));
 131         assertArrayEquals(o.publicFinalLongArray, (long[])e.get("pf_long_array"));
 132         e.eval("var tf_long_arr = new (Java.type(\"long[]\"))(3);" +
 133                 "tf_long_arr[0] = -189009;" +
 134                 "tf_long_arr[1] = 456;" +
 135                 "tf_long_arr[2] = 600000001;" +
 136                 "o.publicFinalLongArray = tf_long_arr;");
 137         // e.eval("o.publicIntArray = [-189009,456,600000001];");
 138         assertArrayEquals(new long[] { 1901733333333L, -2247355555L, 3977377777L }, o.publicFinalLongArray);
 139         e.eval("o.publicFinalLongArray[0] = 10;");
 140         assertEquals(10, o.publicFinalLongArray[0]);
 141     }
 142 
 143     @Test
 144     public void accessStaticFinalFieldLong() throws ScriptException {
 145         e.eval("var psf_long = SharedObject.publicStaticFinalLong;");
 146         assertEquals(SharedObject.publicStaticFinalLong, ((Number) e.get("psf_long")).longValue());
 147         e.eval("SharedObject.publicStaticFinalLong = 120;");
 148         assertEquals(8333333333333L, SharedObject.publicStaticFinalLong);
 149     }
 150 
 151     @Test
 152     public void accessStaticFinalFieldLongArray() throws ScriptException {
 153         e.eval("var psf_long_array = SharedObject.publicStaticFinalLongArray;");
 154         assertEquals(SharedObject.publicStaticFinalLongArray[0], e.eval("SharedObject.publicStaticFinalLongArray[0];"));
 155         assertArrayEquals(SharedObject.publicStaticFinalLongArray, (long[])e.get("psf_long_array"));
 156         e.eval("var tsf_long_arr = new (Java.type(\"long[]\"))(3);" +
 157                 "tsf_long_arr[0] = -189009;" +
 158                 "tsf_long_arr[1] = 456;" +
 159                 "tsf_long_arr[2] = 600000001;" +
 160                 "SharedObject.publicStaticFinalLongArray = tsf_long_arr;");
 161         // e.eval("o.publicIntArray = [-189009,456,600000001];");
 162         assertArrayEquals(new long[] { 19017383333L, -2247358L, 39773787L }, SharedObject.publicStaticFinalLongArray);
 163         e.eval("SharedObject.publicStaticFinalLongArray[0] = 10;");
 164         assertEquals(10, SharedObject.publicStaticFinalLongArray[0]);
 165     }
 166 
 167     // --------------------------------int
 168     // tests------------------------------------
 169     @Test
 170     public void accessFieldInt() throws ScriptException {
 171         e.eval("var p_int = o.publicInt;");
 172         assertEquals(o.publicInt, e.get("p_int"));
 173         e.eval("o.publicInt = 14;");
 174         assertEquals(14, o.publicInt);
 175     }
 176 
 177     @Test
 178     public void accessFieldIntArray() throws ScriptException {
 179         e.eval("var p_int_array = o.publicIntArray;");
 180         assertEquals(o.publicIntArray[0], e.eval("o.publicIntArray[0];"));
 181         assertArrayEquals(o.publicIntArray, (int[])e.get("p_int_array"));
 182         e.eval("var t_int_arr = new (Java.type(\"int[]\"))(3);" +
 183                 "t_int_arr[0] = 4;" +
 184                 "t_int_arr[1] = 5;" +
 185                 "t_int_arr[2] = 6;" +
 186                 "o.publicIntArray = t_int_arr;");
 187         assertArrayEquals(new int[] { 4, 5, 6 }, o.publicIntArray);
 188         e.eval("o.publicIntArray[0] = 100;");
 189         assertEquals(100, o.publicIntArray[0]);
 190     }
 191 
 192     @Test
 193     public void accessStaticFieldInt() throws ScriptException {
 194         e.eval("var ps_int = SharedObject.publicStaticInt;");
 195         assertEquals(SharedObject.publicStaticInt, e.get("ps_int"));
 196         e.eval("SharedObject.publicStaticInt = 140;");
 197         assertEquals(140, SharedObject.publicStaticInt);
 198     }
 199 
 200     @Test
 201     public void accessStaticFieldIntArray() throws ScriptException {
 202         e.eval("var ps_int_array = SharedObject.publicStaticIntArray;");
 203         assertEquals(SharedObject.publicStaticIntArray[0], e.eval("SharedObject.publicStaticIntArray[0];"));
 204         assertArrayEquals(SharedObject.publicStaticIntArray, (int[])e.get("ps_int_array"));
 205         e.eval("var ts_int_arr = new (Java.type(\"int[]\"))(3);" +
 206                 "ts_int_arr[0] = 4;" +
 207                 "ts_int_arr[1] = 5;" +
 208                 "ts_int_arr[2] = 6;" +
 209                 "SharedObject.publicStaticIntArray = ts_int_arr;");
 210         assertArrayEquals(new int[] { 4, 5, 6 }, SharedObject.publicStaticIntArray);
 211         e.eval("SharedObject.publicStaticIntArray[0] = 100;");
 212         assertEquals(100, SharedObject.publicStaticIntArray[0]);
 213     }
 214 
 215     @Test
 216     public void accessFinalFieldInt() throws ScriptException {
 217         e.eval("var pf_int = o.publicFinalInt;");
 218         assertEquals(o.publicFinalInt, e.get("pf_int"));
 219 
 220         e.eval("o.publicFinalInt = 10;");
 221         assertEquals(20712023, o.publicFinalInt);
 222     }
 223 
 224     @Test
 225     public void accessFinalFieldIntArray() throws ScriptException {
 226         e.eval("var pf_int_array = o.publicFinalIntArray;");
 227         assertEquals(o.publicFinalIntArray[0], e.eval("o.publicFinalIntArray[0];"));
 228         assertArrayEquals(o.publicFinalIntArray, (int[])e.get("pf_int_array"));
 229         e.eval("var tf_int_arr = new (Java.type(\"int[]\"))(3);" +
 230                 "tf_int_arr[0] = 4;" +
 231                 "tf_int_arr[1] = 5;" +
 232                 "tf_int_arr[2] = 6;" +
 233                 "o.publicFinalIntArray = tf_int_arr;");
 234         assertArrayEquals(new int[] { 50, 80, 130, 210, 340 }, o.publicFinalIntArray);
 235         e.eval("o.publicFinalIntArray[0] = 100;");
 236         assertEquals(100, o.publicFinalIntArray[0]);
 237     }
 238 
 239     @Test
 240     public void accessStaticFinalFieldInt() throws ScriptException {
 241         e.eval("var psf_int = SharedObject.publicStaticFinalInt;");
 242         assertEquals(SharedObject.publicStaticFinalInt, e.get("psf_int"));
 243         e.eval("SharedObject.publicStaticFinalInt = 140;");
 244         assertEquals(207182023, SharedObject.publicStaticFinalInt);
 245     }
 246 
 247     @Test
 248     public void accessStaticFinalFieldIntArray() throws ScriptException {
 249         e.eval("var psf_int_array = SharedObject.publicStaticFinalIntArray;");
 250         assertEquals(SharedObject.publicStaticFinalIntArray[0], e.eval("SharedObject.publicStaticFinalIntArray[0];"));
 251         assertArrayEquals(SharedObject.publicStaticFinalIntArray, (int[])e.get("psf_int_array"));
 252         e.eval("var tsf_int_arr = new (Java.type(\"int[]\"))(3);" +
 253                 "tsf_int_arr[0] = 4;" +
 254                 "tsf_int_arr[1] = 5;" +
 255                 "tsf_int_arr[2] = 6;" +
 256                 "SharedObject.publicStaticFinalIntArray = tsf_int_arr;");
 257         assertArrayEquals(new int[] { 1308, 210, 340 }, SharedObject.publicStaticFinalIntArray);
 258         e.eval("SharedObject.publicStaticFinalIntArray[0] = 100;");
 259         assertEquals(100, SharedObject.publicStaticFinalIntArray[0]);
 260     }
 261 
 262     // --------------------------------byte
 263     // tests------------------------------------
 264     @Test
 265     public void accessFieldByte() throws ScriptException {
 266         e.eval("var p_byte = o.publicByte;");
 267         assertEquals((double)o.publicByte, ((Number)e.get("p_byte")).doubleValue());
 268         e.eval("o.publicByte = 16;");
 269         assertEquals(16, o.publicByte);
 270     }
 271 
 272     @Test
 273     public void accessFieldByteArray() throws ScriptException {
 274         e.eval("var p_byte_array = o.publicByteArray;");
 275         assertEquals(o.publicByteArray[0], e.eval("o.publicByteArray[0];"));
 276         assertArrayEquals(o.publicByteArray, (byte[])e.get("p_byte_array"));
 277         e.eval("var t_byte_arr = new (Java.type(\"byte[]\"))(3);" +
 278                 "t_byte_arr[0] = -18;" +
 279                 "t_byte_arr[1] = 56;" +
 280                 "t_byte_arr[2] = 60;" +
 281                 "o.publicByteArray = t_byte_arr;");
 282         assertArrayEquals(new byte[] { -18, 56, 60 }, o.publicByteArray);
 283         e.eval("o.publicByteArray[0] = 100;");
 284         assertEquals(100, o.publicByteArray[0]);
 285     }
 286 
 287     @Test
 288     public void accessStaticFieldByte() throws ScriptException {
 289         e.eval("var ps_byte = SharedObject.publicStaticByte;");
 290         assertEquals((double)SharedObject.publicStaticByte, ((Number)e.get("ps_byte")).doubleValue());
 291         e.eval("SharedObject.publicStaticByte = 16;");
 292         assertEquals(16, SharedObject.publicStaticByte);
 293     }
 294 
 295     @Test
 296     public void accessStaticFieldByteArray() throws ScriptException {
 297         e.eval("var ps_byte_array = SharedObject.publicStaticByteArray;");
 298         assertEquals(SharedObject.publicStaticByteArray[0], e.eval("SharedObject.publicStaticByteArray[0];"));
 299         assertArrayEquals(SharedObject.publicStaticByteArray, (byte[])e.get("ps_byte_array"));
 300         e.eval("var ts_byte_arr = new (Java.type(\"byte[]\"))(3);" +
 301                 "ts_byte_arr[0] = -18;" +
 302                 "ts_byte_arr[1] = 56;" +
 303                 "ts_byte_arr[2] = 60;" +
 304                 "SharedObject.publicStaticByteArray = ts_byte_arr;");
 305         assertArrayEquals(new byte[] { -18, 56, 60 }, SharedObject.publicStaticByteArray);
 306         e.eval("SharedObject.publicStaticByteArray[0] = -90;");
 307         assertEquals(-90, SharedObject.publicStaticByteArray[0]);
 308     }
 309 
 310     @Test
 311     public void accessFinalFieldByte() throws ScriptException {
 312         e.eval("var pf_byte = o.publicFinalByte;");
 313         assertEquals((double)o.publicFinalByte, ((Number)e.get("pf_byte")).doubleValue());
 314         e.eval("o.publicFinalByte = 16;");
 315         assertEquals(-7, o.publicFinalByte);
 316     }
 317 
 318     @Test
 319     public void accessFinalFieldByteArray() throws ScriptException {
 320         e.eval("var pf_byte_array = o.publicFinalByteArray;");
 321         assertEquals(o.publicFinalByteArray[0], e.eval("o.publicFinalByteArray[0];"));
 322         assertArrayEquals(o.publicFinalByteArray, (byte[])e.get("pf_byte_array"));
 323         e.eval("var tf_byte_arr = new (Java.type(\"byte[]\"))(3);" +
 324                 "tf_byte_arr[0] = -18;" +
 325                 "tf_byte_arr[1] = 56;" +
 326                 "tf_byte_arr[2] = 60;" +
 327                 "o.publicFinalByteArray = tf_byte_arr;");
 328         assertArrayEquals(new byte[] { 1, 3, 6, 17, -128 }, o.publicFinalByteArray);
 329         e.eval("o.publicFinalByteArray[0] = -90;");
 330         assertEquals(-90, o.publicFinalByteArray[0]);
 331     }
 332 
 333     @Test
 334     public void accessStaticFinalFieldByte() throws ScriptException {
 335         e.eval("var psf_byte = SharedObject.publicStaticFinalByte;");
 336         assertEquals((double)SharedObject.publicStaticFinalByte, ((Number)e.get("psf_byte")).doubleValue());
 337         e.eval("SharedObject.publicStaticFinalByte = 16;");
 338         assertEquals(-70, SharedObject.publicStaticFinalByte);
 339     }
 340 
 341     @Test
 342     public void accessStaticFinalFieldByteArray() throws ScriptException {
 343         e.eval("var psf_byte_array = SharedObject.publicStaticFinalByteArray;");
 344         assertEquals(SharedObject.publicStaticFinalByteArray[0], e.eval("SharedObject.publicStaticFinalByteArray[0];"));
 345         assertArrayEquals(SharedObject.publicStaticFinalByteArray, (byte[])e.get("psf_byte_array"));
 346         e.eval("var tsf_byte_arr = new (Java.type(\"byte[]\"))(3);" +
 347                 "tsf_byte_arr[0] = -18;" +
 348                 "tsf_byte_arr[1] = 56;" +
 349                 "tsf_byte_arr[2] = 60;" +
 350                 "SharedObject.publicStaticFinalByteArray = tsf_byte_arr;");
 351         assertArrayEquals(new byte[] { 17, -128, 81 }, SharedObject.publicStaticFinalByteArray);
 352         e.eval("SharedObject.publicStaticFinalByteArray[0] = -90;");
 353         assertEquals(-90, SharedObject.publicStaticFinalByteArray[0]);
 354     }
 355 
 356     // --------------------------------short
 357     // tests------------------------------------
 358     @Test
 359     public void accessFieldShort() throws ScriptException {
 360         e.eval("var p_short = o.publicShort;");
 361         assertEquals((double)o.publicShort, ((Number)e.get("p_short")).doubleValue());
 362         e.eval("o.publicShort = 18;");
 363         assertEquals(18, o.publicShort);
 364     }
 365 
 366     @Test
 367     public void accessFieldShortArray() throws ScriptException {
 368         e.eval("var p_short_array = o.publicShortArray;");
 369         assertEquals(o.publicShortArray[0], e.eval("o.publicShortArray[0];"));
 370         assertArrayEquals(o.publicShortArray, (short[])e.get("p_short_array"));
 371         e.eval("var t_short_arr = new (Java.type(\"short[]\"))(3);" +
 372                 "t_short_arr[0] = 90;" +
 373                 "t_short_arr[1] = 5;" +
 374                 "t_short_arr[2] = -6000;" +
 375                 "o.publicShortArray = t_short_arr;");
 376         assertArrayEquals(new short[] { 90, 5, -6000 }, o.publicShortArray);
 377         e.eval("o.publicShortArray[0] = -1000;");
 378         assertEquals(-1000, o.publicShortArray[0]);
 379     }
 380 
 381     @Test
 382     public void accessStaticFieldShort() throws ScriptException {
 383         e.eval("var ps_short = SharedObject.publicStaticShort;");
 384         assertEquals((double)SharedObject.publicStaticShort, ((Number)e.get("ps_short")).doubleValue());
 385         e.eval("SharedObject.publicStaticShort = 180;");
 386         assertEquals(180, SharedObject.publicStaticShort);
 387     }
 388 
 389     @Test
 390     public void accessStaticFieldShortArray() throws ScriptException {
 391         e.eval("var ps_short_array = SharedObject.publicStaticShortArray;");
 392         assertEquals(SharedObject.publicStaticShortArray[0], e.eval("SharedObject.publicStaticShortArray[0];"));
 393         assertArrayEquals(SharedObject.publicStaticShortArray, (short[])e.get("ps_short_array"));
 394         e.eval("var ts_short_arr = new (Java.type(\"short[]\"))(3);" +
 395                 "ts_short_arr[0] = 90;" +
 396                 "ts_short_arr[1] = 5;" +
 397                 "ts_short_arr[2] = -6000;" +
 398                 "SharedObject.publicStaticShortArray = ts_short_arr;");
 399         assertArrayEquals(new short[] { 90, 5, -6000 }, SharedObject.publicStaticShortArray);
 400         e.eval("SharedObject.publicStaticShortArray[0] = -1000;");
 401         assertEquals(-1000, SharedObject.publicStaticShortArray[0]);
 402     }
 403 
 404     @Test
 405     public void accessFinalFieldShort() throws ScriptException {
 406         e.eval("var pf_short = o.publicFinalShort;");
 407         assertEquals((double)o.publicFinalShort, ((Number)e.get("pf_short")).doubleValue());
 408         e.eval("o.publicFinalShort = 180;");
 409         assertEquals(31220, o.publicFinalShort);
 410     }
 411 
 412     @Test
 413     public void accessFinalFieldShortArray() throws ScriptException {
 414         e.eval("var pf_short_array = o.publicFinalShortArray;");
 415         assertEquals(o.publicFinalShortArray[0], e.eval("o.publicFinalShortArray[0];"));
 416         assertArrayEquals(o.publicFinalShortArray, (short[])e.get("pf_short_array"));
 417         e.eval("var tf_short_arr = new (Java.type(\"short[]\"))(3);" +
 418                 "tf_short_arr[0] = 90;" +
 419                 "tf_short_arr[1] = 5;" +
 420                 "tf_short_arr[2] = -6000;" +
 421                 "o.publicFinalShortArray = tf_short_arr;");
 422         assertArrayEquals(new short[] { 12240, 9200, -17289, 1200, 12 }, o.publicFinalShortArray);
 423         e.eval("o.publicFinalShortArray[0] = -1000;");
 424         assertEquals(-1000, o.publicFinalShortArray[0]);
 425     }
 426 
 427     @Test
 428     public void accessStaticFinalFieldShort() throws ScriptException {
 429         e.eval("var psf_short = SharedObject.publicStaticFinalShort;");
 430         assertEquals((double)SharedObject.publicStaticFinalShort, ((Number)e.get("psf_short")).doubleValue());
 431         e.eval("SharedObject.publicStaticFinalShort = 180;");
 432         assertEquals(8888, SharedObject.publicStaticFinalShort);
 433     }
 434 
 435     @Test
 436     public void accessStaticFinalFieldShortArray() throws ScriptException {
 437         e.eval("var psf_short_array = SharedObject.publicStaticFinalShortArray;");
 438         assertEquals(SharedObject.publicStaticFinalShortArray[0], e.eval("SharedObject.publicStaticFinalShortArray[0];"));
 439         assertArrayEquals(SharedObject.publicStaticFinalShortArray, (short[])e.get("psf_short_array"));
 440         e.eval("var tsf_short_arr = new (Java.type(\"short[]\"))(3);" +
 441                 "tsf_short_arr[0] = 90;" +
 442                 "tsf_short_arr[1] = 5;" +
 443                 "tsf_short_arr[2] = -6000;" +
 444                 "SharedObject.publicStaticFinalShortArray = tsf_short_arr;");
 445         assertArrayEquals(new short[] { 8240, 9280, -1289, 120, 812 }, SharedObject.publicStaticFinalShortArray);
 446         e.eval("SharedObject.publicStaticFinalShortArray[0] = -1000;");
 447         assertEquals(-1000, SharedObject.publicStaticFinalShortArray[0]);
 448     }
 449 
 450     // --------------------------------char
 451     // tests------------------------------------
 452     @Test
 453     public void accessFieldChar() throws ScriptException {
 454         e.eval("var p_char = o.publicChar;");
 455         assertEquals(o.publicChar, e.get("p_char"));
 456         e.eval("o.publicChar = 'S';");
 457         assertEquals('S', o.publicChar);
 458         e.eval("o.publicChar = 10;");
 459         assertEquals(10, o.publicChar);
 460         e.eval("try {"
 461                 + "    o.publicChar = 'Big string';" +
 462                 "} catch(e) {" +
 463                 "    var isThrown = true;" +
 464                 "}");
 465         assertEquals("Exception thrown", true, e.get("isThrown"));
 466         assertEquals(10, o.publicChar);
 467     }
 468 
 469     @Test
 470     public void accessFieldCharArray() throws ScriptException {
 471         e.eval("var p_char_array = o.publicCharArray;");
 472         assertEquals(o.publicCharArray[0], e.eval("o.publicCharArray[0];"));
 473         assertArrayEquals(o.publicCharArray, (char[])e.get("p_char_array"));
 474         e.eval("var t_char_arr = new (Java.type(\"char[]\"))(3);" +
 475                 "t_char_arr[0] = 'F';" +
 476                 "t_char_arr[1] = 'o';" +
 477                 "t_char_arr[2] = 'o';" +
 478                 "o.publicCharArray = t_char_arr;");
 479         assertArrayEquals("Foo".toCharArray(), o.publicCharArray);
 480         e.eval("o.publicCharArray[0] = 'Z';");
 481         assertEquals('Z', o.publicCharArray[0]);
 482     }
 483 
 484     @Test
 485     public void accessStaticFieldChar() throws ScriptException {
 486         e.eval("var ps_char = SharedObject.publicStaticChar;");
 487         assertEquals(SharedObject.publicStaticChar, e.get("ps_char"));
 488         e.eval("SharedObject.publicStaticChar = 'Z';");
 489         assertEquals('Z', SharedObject.publicStaticChar);
 490     }
 491 
 492     @Test
 493     public void accessStaticFieldCharArray() throws ScriptException {
 494         e.eval("var ps_char_array = SharedObject.publicStaticCharArray;");
 495         assertEquals(SharedObject.publicStaticCharArray[0], e.eval("SharedObject.publicStaticCharArray[0];"));
 496         assertArrayEquals(SharedObject.publicStaticCharArray, (char[])e.get("ps_char_array"));
 497         e.eval("var ts_char_arr = new (Java.type(\"char[]\"))(3);" +
 498                 "ts_char_arr[0] = 'G';" +
 499                 "ts_char_arr[1] = 'o';" +
 500                 "ts_char_arr[2] = 'o';" +
 501                 "SharedObject.publicStaticCharArray = ts_char_arr;");
 502         assertArrayEquals("Goo".toCharArray(), SharedObject.publicStaticCharArray);
 503         e.eval("SharedObject.publicStaticCharArray[0] = 'Z';");
 504         assertEquals('Z', SharedObject.publicStaticCharArray[0]);
 505     }
 506 
 507     @Test
 508     public void accessFinalFieldChar() throws ScriptException {
 509         e.eval("var pf_char = o.publicFinalChar;");
 510         assertEquals(o.publicFinalChar, e.get("pf_char"));
 511         e.eval("o.publicFinalChar = 'S';");
 512         assertEquals('E', o.publicFinalChar);
 513     }
 514 
 515     @Test
 516     public void accessFinalCharArray() throws ScriptException {
 517         e.eval("var pf_char_array = o.publicFinalCharArray;");
 518         assertEquals(o.publicFinalCharArray[0], e.eval("o.publicFinalCharArray[0];"));
 519         assertArrayEquals(o.publicFinalCharArray, (char[])e.get("pf_char_array"));
 520         e.eval("var tf_char_arr = new (Java.type(\"char[]\"))(3);" +
 521                 "tf_char_arr[0] = 'F';" +
 522                 "tf_char_arr[1] = 'o';" +
 523                 "tf_char_arr[2] = 'o';" +
 524                 "o.publicFinalCharArray = tf_char_arr;");
 525         assertArrayEquals("Nashorn hello".toCharArray(), o.publicFinalCharArray);
 526         e.eval("o.publicFinalCharArray[0] = 'Z';");
 527         assertEquals('Z', o.publicFinalCharArray[0]);
 528     }
 529 
 530     @Test
 531     public void accessStaticFinalFieldChar() throws ScriptException {
 532         e.eval("var psf_char = SharedObject.publicStaticFinalChar;");
 533         assertEquals(SharedObject.publicStaticFinalChar, e.get("psf_char"));
 534         e.eval("SharedObject.publicStaticFinalChar = 'Z';");
 535         assertEquals('K', SharedObject.publicStaticFinalChar);
 536     }
 537 
 538     @Test
 539     public void accessStaticFinalFieldCharArray() throws ScriptException {
 540         e.eval("var psf_char_array = SharedObject.publicStaticFinalCharArray;");
 541         assertEquals(SharedObject.publicStaticFinalCharArray[0], e.eval("SharedObject.publicStaticFinalCharArray[0];"));
 542         assertArrayEquals(SharedObject.publicStaticFinalCharArray, (char[])e.get("psf_char_array"));
 543         e.eval("var tsf_char_arr = new (Java.type(\"char[]\"))(3);" +
 544                 "tsf_char_arr[0] = 'Z';" +
 545                 "tsf_char_arr[1] = 'o';" +
 546                 "tsf_char_arr[2] = 'o';" +
 547                 "SharedObject.publicStaticFinalCharArray = tsf_char_arr;");
 548         assertArrayEquals("StaticString".toCharArray(), SharedObject.publicStaticFinalCharArray);
 549         e.eval("SharedObject.publicStaticFinalCharArray[0] = 'Z';");
 550         assertEquals('Z', SharedObject.publicStaticFinalCharArray[0]);
 551     }
 552 
 553     // --------------------------------float
 554     // tests------------------------------------
 555     @Test
 556     public void accessFieldFloat() throws ScriptException {
 557         e.eval("var p_float = o.publicFloat;");
 558         assertEquals((double)o.publicFloat, ((Number)e.get("p_float")).doubleValue());
 559         o.publicFloat = 0.0f / 0.0f;
 560         assertEquals(true, e.eval("isNaN(o.publicFloat)"));
 561         o.publicFloat = 1.0f / 0.0f;
 562         assertEquals(true, e.eval("Number.POSITIVE_INFINITY === o.publicFloat"));
 563         o.publicFloat = -1.0f / 0.0f;
 564         assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === o.publicFloat"));
 565         e.eval("o.publicFloat = 20;");
 566         assertEquals(20, o.publicFloat, 1e-10);
 567         e.eval("o.publicFloat = 0.0/0.0;");
 568         assertTrue(Float.isNaN(o.publicFloat));
 569         e.eval("o.publicFloat = 1.0/0.0;");
 570         assertEquals(Float.floatToIntBits(Float.POSITIVE_INFINITY), Float.floatToIntBits(o.publicFloat));
 571         e.eval("o.publicFloat = -1.0/0.0;");
 572         assertEquals(Float.NEGATIVE_INFINITY, o.publicFloat, 1e-10);
 573     }
 574 
 575     @Test
 576     public void accessFieldFloatArray() throws ScriptException {
 577         e.eval("var p_float_array = o.publicFloatArray;");
 578         assertEquals(o.publicFloatArray[0], e.eval("o.publicFloatArray[0];"));
 579         assertArrayEquals(o.publicFloatArray, (float[])e.get("p_float_array"), 1e-10f);
 580         e.eval("var t_float_arr = new (Java.type(\"float[]\"))(3);" +
 581                 "t_float_arr[0] = 9.0;" +
 582                 "t_float_arr[1] = 5.12345;" +
 583                 "t_float_arr[2] = -60.03;" +
 584                 "o.publicFloatArray = t_float_arr;");
 585         assertArrayEquals(new float[] { 9.0f, 5.12345f, -60.03f }, o.publicFloatArray, 1e-10f);
 586         e.eval("o.publicFloatArray[0] = -513.2;");
 587         assertArrayEquals(new float[] { -513.2f, 5.12345f, -60.03f }, o.publicFloatArray, 1e-10f);
 588     }
 589 
 590     @Test
 591     public void accessStaticFieldFloat() throws ScriptException {
 592         e.eval("var ps_float = SharedObject.publicStaticFloat;");
 593         assertEquals((double)SharedObject.publicStaticFloat, ((Number)e.get("ps_float")).doubleValue());
 594         SharedObject.publicStaticFloat = 0.0f / 0.0f;
 595         assertEquals(true, e.eval("isNaN(SharedObject.publicStaticFloat)"));
 596         SharedObject.publicStaticFloat = 1.0f / 0.0f;
 597         assertEquals(true, e.eval("Number.POSITIVE_INFINITY === SharedObject.publicStaticFloat"));
 598         SharedObject.publicStaticFloat = -1.0f / 0.0f;
 599         assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === SharedObject.publicStaticFloat"));
 600         e.eval("SharedObject.publicStaticFloat = 20.0;");
 601         assertEquals(20.0f, SharedObject.publicStaticFloat, 1e-10);
 602         e.eval("SharedObject.publicStaticFloat = 0.0/0.0;");
 603         assertTrue(Float.isNaN(SharedObject.publicStaticFloat));
 604         e.eval("SharedObject.publicStaticFloat = 1.0/0.0;");
 605         assertEquals(Float.floatToIntBits(Float.POSITIVE_INFINITY), Float.floatToIntBits(SharedObject.publicStaticFloat));
 606         e.eval("SharedObject.publicStaticFloat = -1.0/0.0;");
 607         assertEquals(Float.floatToIntBits(Float.NEGATIVE_INFINITY), Float.floatToIntBits(SharedObject.publicStaticFloat));
 608     }
 609 
 610     @Test
 611     public void accessStaticFieldFloatArray() throws ScriptException {
 612         e.eval("var ps_float_array = SharedObject.publicStaticFloatArray;");
 613         assertEquals(SharedObject.publicStaticFloatArray[0], e.eval("SharedObject.publicStaticFloatArray[0];"));
 614         assertArrayEquals(SharedObject.publicStaticFloatArray, (float[])e.get("ps_float_array"), 1e-10f);
 615         e.eval("var ts_float_arr = new (Java.type(\"float[]\"))(3);" +
 616                 "ts_float_arr[0] = 9.0;" +
 617                 "ts_float_arr[1] = 5.12345;" +
 618                 "ts_float_arr[2] = -60.03;" +
 619                 "SharedObject.publicStaticFloatArray = ts_float_arr;");
 620         assertArrayEquals(new float[] { 9.0f, 5.12345f, -60.03f }, SharedObject.publicStaticFloatArray, 1e-10f);
 621         e.eval("SharedObject.publicStaticFloatArray[0] = -513.2;");
 622         assertArrayEquals(new float[] { -513.2f, 5.12345f, -60.03f }, SharedObject.publicStaticFloatArray, 1e-10f);
 623     }
 624 
 625     @Test
 626     public void accessFinalFloat() throws ScriptException {
 627         e.eval("var pf_float = o.publicFinalFloat;");
 628         assertEquals((double)o.publicFinalFloat, ((Number)e.get("pf_float")).doubleValue());
 629         e.eval("o.publicFinalFloat = 20.0;");
 630         assertEquals(7.72e8f, o.publicFinalFloat, 1e-10);
 631     }
 632 
 633     @Test
 634     public void accessFinalFloatArray() throws ScriptException {
 635         e.eval("var pf_float_array = o.publicFinalFloatArray;");
 636         assertEquals(o.publicFinalFloatArray[0], e.eval("o.publicFinalFloatArray[0];"));
 637         assertArrayEquals(o.publicFinalFloatArray, (float[])e.get("pf_float_array"), 1e-10f);
 638         e.eval("var tf_float_arr = new (Java.type(\"float[]\"))(3);" +
 639                 "tf_float_arr[0] = 9.0;" +
 640                 "tf_float_arr[1] = 5.12345;" +
 641                 "tf_float_arr[2] = -60.03;" +
 642                 "o.publicFinalFloatArray = tf_float_arr;");
 643         assertArrayEquals(new float[] { -131.012f, 189.32f, -31.32e8f, 3.72f }, o.publicFinalFloatArray, 1e-10f);
 644         e.eval("o.publicFinalFloatArray[0] = -513.2;");
 645         assertEquals(-513.2f, o.publicFinalFloatArray[0], 1e-10f);
 646     }
 647 
 648     @Test
 649     public void accessStaticFinalFieldFloat() throws ScriptException {
 650         e.eval("var psf_float = SharedObject.publicStaticFinalFloat;");
 651         assertEquals((double)SharedObject.publicStaticFinalFloat, ((Number)e.get("psf_float")).doubleValue());
 652         e.eval("SharedObject.publicStaticFinalFloat = 20.0;");
 653         assertEquals(0.72e8f, SharedObject.publicStaticFinalFloat, 1e-10);
 654     }
 655 
 656     @Test
 657     public void accessStaticFinalFieldFloatArray() throws ScriptException {
 658         e.eval("var psf_float_array = SharedObject.publicStaticFinalFloatArray;");
 659         assertEquals(SharedObject.publicStaticFinalFloatArray[0], e.eval("SharedObject.publicStaticFinalFloatArray[0];"));
 660         assertArrayEquals(SharedObject.publicStaticFinalFloatArray, (float[])e.get("psf_float_array"), 1e-10f);
 661         e.eval("var tsf_float_arr = new (Java.type(\"float[]\"))(3);" +
 662                 "tsf_float_arr[0] = 9.0;" +
 663                 "tsf_float_arr[1] = 5.12345;" +
 664                 "tsf_float_arr[2] = -60.03;" +
 665                 "SharedObject.publicStaticFinalFloatArray = tsf_float_arr;");
 666         assertArrayEquals(new float[] { -8131.012f, 9.32f, -138.32e8f, 0.72f }, SharedObject.publicStaticFinalFloatArray, 1e-10f);
 667         e.eval("SharedObject.publicStaticFinalFloatArray[0] = -513.2;");
 668         assertEquals(-513.2f, SharedObject.publicStaticFinalFloatArray[0], 1e-10f);
 669     }
 670 
 671     // --------------------------------double
 672     // tests------------------------------------
 673     @Test
 674     public void accessFieldDouble() throws ScriptException {
 675         e.eval("var p_double = o.publicDouble;");
 676         assertEquals(o.publicDouble, e.get("p_double"));
 677         o.publicDouble = 0.0 / 0.0;
 678         assertEquals(true, e.eval("isNaN(o.publicDouble)"));
 679         o.publicDouble = 1.0 / 0.0;
 680         assertEquals(true, e.eval("Number.POSITIVE_INFINITY === o.publicDouble"));
 681         o.publicDouble = -1.0 / 0.0;
 682         assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === o.publicDouble"));
 683         e.eval("o.publicDouble = 30;");
 684         assertEquals(Double.doubleToLongBits(30.0), Double.doubleToLongBits(o.publicDouble));
 685         e.eval("o.publicDouble = 0.0/0.0;");
 686         assertTrue(Double.isNaN(o.publicDouble));
 687         e.eval("o.publicDouble = 1.0/0.0;");
 688         assertEquals(Double.doubleToLongBits(Double.POSITIVE_INFINITY), Double.doubleToLongBits(o.publicDouble));
 689         e.eval("o.publicDouble = -1.0/0.0;");
 690         assertEquals(Double.doubleToLongBits(Double.NEGATIVE_INFINITY), Double.doubleToLongBits(o.publicDouble));
 691     }
 692 
 693     @Test
 694     public void accessFieldDoubleArrayRead() throws ScriptException {
 695         e.eval("var p_double_array = o.publicDoubleArray;");
 696         assertEquals(o.publicDoubleArray[0], e.eval("o.publicDoubleArray[0];"));
 697         assertArrayEquals(o.publicDoubleArray, (double[])e.get("p_double_array"), 1e-10);
 698         e.eval("var t_double_arr = new (Java.type(\"double[]\"))(3);" +
 699                 "t_double_arr[0] = 9e10;" +
 700                 "t_double_arr[1] = 0.677777;" +
 701                 "t_double_arr[2] = -0.0000001;" +
 702                 "o.publicDoubleArray = t_double_arr;");
 703         assertArrayEquals(new double[] { 9e10, 0.677777, -0.0000001 }, o.publicDoubleArray, 1e-10f);
 704         e.eval("o.publicDoubleArray[0] = -5.2e10;");
 705         assertEquals(-5.2e10, o.publicDoubleArray[0], 1e-10f);
 706     }
 707 
 708     @Test
 709     public void accessStaticFieldDouble() throws ScriptException {
 710         e.eval("var ps_double = SharedObject.publicStaticDouble;");
 711         assertEquals(SharedObject.publicStaticDouble, e.get("ps_double"));
 712         SharedObject.publicStaticDouble = 0.0 / 0.0;
 713         assertEquals(true, e.eval("isNaN(SharedObject.publicStaticDouble)"));
 714         SharedObject.publicStaticDouble = 1.0 / 0.0;
 715         assertEquals(true, e.eval("Number.POSITIVE_INFINITY === SharedObject.publicStaticDouble"));
 716         SharedObject.publicStaticDouble = -1.0 / 0.0;
 717         assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === SharedObject.publicStaticDouble"));
 718         e.eval("SharedObject.publicStaticDouble = 40.0;");
 719         assertEquals(Double.doubleToLongBits(40.0), Double.doubleToLongBits(SharedObject.publicStaticDouble));
 720         e.eval("SharedObject.publicStaticDouble = 0.0/0.0;");
 721         assertTrue(Double.isNaN(SharedObject.publicStaticDouble));
 722         e.eval("SharedObject.publicStaticDouble = 1.0/0.0;");
 723         assertEquals(Double.doubleToLongBits(Double.POSITIVE_INFINITY), Double.doubleToLongBits(SharedObject.publicStaticDouble));
 724         e.eval("SharedObject.publicStaticDouble = -1.0/0.0;");
 725         assertEquals(Double.doubleToLongBits(Double.NEGATIVE_INFINITY), Double.doubleToLongBits(SharedObject.publicStaticDouble));
 726     }
 727 
 728     @Test
 729     public void accessStaticFieldDoubleArrayRead() throws ScriptException {
 730         e.eval("var ps_double_array = SharedObject.publicStaticDoubleArray;");
 731         assertEquals(SharedObject.publicStaticDoubleArray[0], e.eval("SharedObject.publicStaticDoubleArray[0];"));
 732         assertArrayEquals(SharedObject.publicStaticDoubleArray, (double[])e.get("ps_double_array"), 1e-10);
 733         e.eval("var ts_double_arr = new (Java.type(\"double[]\"))(3);" +
 734                 "ts_double_arr[0] = 9e10;" +
 735                 "ts_double_arr[1] = 0.677777;" +
 736                 "ts_double_arr[2] = -0.0000001;" +
 737                 "SharedObject.publicStaticDoubleArray = ts_double_arr;");
 738         assertArrayEquals(new double[] { 9e10, 0.677777, -0.0000001 }, SharedObject.publicStaticDoubleArray, 1e-10f);
 739         e.eval("SharedObject.publicStaticDoubleArray[0] = -5.2e10;");
 740         assertEquals(-5.2e10, SharedObject.publicStaticDoubleArray[0], 1e-10f);
 741     }
 742 
 743     @Test
 744     public void accessFinalFieldDouble() throws ScriptException {
 745         e.eval("var pf_double = o.publicFinalDouble;");
 746         assertEquals(o.publicFinalDouble, e.get("pf_double"));
 747         e.eval("o.publicFinalDouble = 30.0;");
 748         assertEquals(Double.doubleToLongBits(1.3412e20), Double.doubleToLongBits(o.publicFinalDouble));
 749     }
 750 
 751     @Test
 752     public void accessFinalFieldDoubleArrayRead() throws ScriptException {
 753         e.eval("var pf_double_array = o.publicFinalDoubleArray;");
 754         assertEquals(o.publicFinalDoubleArray[0], e.eval("o.publicFinalDoubleArray[0];"));
 755         assertArrayEquals(o.publicFinalDoubleArray, (double[])e.get("pf_double_array"), 1e-10);
 756         e.eval("var tf_double_arr = new (Java.type(\"double[]\"))(3);" +
 757                 "tf_double_arr[0] = 9e10;" +
 758                 "tf_double_arr[1] = 0.677777;" +
 759                 "tf_double_arr[2] = -0.0000001;" +
 760                 "o.publicFinalDoubleArray = tf_double_arr;");
 761         assertArrayEquals(new double[] { 0.725e80, 0.12e10, 8e-3, 1.00077 }, o.publicFinalDoubleArray, 1e-10f);
 762         e.eval("o.publicFinalDoubleArray[0] = -5.2e10;");
 763         assertEquals(-5.2e10, o.publicFinalDoubleArray[0], 1e-10f);
 764     }
 765 
 766     @Test
 767     public void accessStaticFinalFieldDouble() throws ScriptException {
 768         e.eval("var psf_double = SharedObject.publicStaticFinalDouble;");
 769         assertEquals(SharedObject.publicStaticFinalDouble, e.get("psf_double"));
 770         e.eval("SharedObject.publicStaticFinalDouble = 40.0;");
 771         assertEquals(Double.doubleToLongBits(1.8e12), Double.doubleToLongBits(SharedObject.publicStaticFinalDouble));
 772     }
 773 
 774     @Test
 775     public void accessStaticFinalFieldDoubleArrayRead() throws ScriptException {
 776         e.eval("var psf_double_array = SharedObject.publicStaticFinalDoubleArray;");
 777         assertEquals(SharedObject.publicStaticFinalDoubleArray[0], e.eval("SharedObject.publicStaticFinalDoubleArray[0];"));
 778         assertArrayEquals(SharedObject.publicStaticFinalDoubleArray, (double[])e.get("psf_double_array"), 1e-10);
 779         e.eval("var tsf_double_arr = new (Java.type(\"double[]\"))(3);" +
 780                 "tsf_double_arr[0] = 9e10;" +
 781                 "tsf_double_arr[1] = 0.677777;" +
 782                 "tsf_double_arr[2] = -0.0000001;" +
 783                 "SharedObject.publicStaticFinalDoubleArray = tsf_double_arr;");
 784         assertArrayEquals(new double[] { 8.725e80, 0.82e10, 18e-3, 1.08077 }, SharedObject.publicStaticFinalDoubleArray, 1e-10f);
 785         e.eval("SharedObject.publicStaticFinalDoubleArray[0] = -5.2e10;");
 786         assertEquals(-5.2e10, SharedObject.publicStaticFinalDoubleArray[0], 1e-10f);
 787     }
 788 
 789 }