NumberAccessTest.java revision 1239:77609e069f9f
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.AssertJUnit.assertTrue;
30import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
31import javax.script.ScriptEngine;
32import javax.script.ScriptEngineManager;
33import javax.script.ScriptException;
34import org.testng.TestNG;
35import org.testng.annotations.AfterClass;
36import org.testng.annotations.BeforeClass;
37import org.testng.annotations.Test;
38
39/**
40 * @test
41 * @build jdk.nashorn.api.javaaccess.SharedObject jdk.nashorn.api.javaaccess.Person jdk.nashorn.api.javaaccess.NumberAccessTest
42 * @run testng/othervm jdk.nashorn.api.javaaccess.NumberAccessTest
43 */
44@SuppressWarnings("javadoc")
45public 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.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, e.get("psf_long"));
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}
790