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 }