author | sundar |
Mon, 11 Feb 2013 21:26:06 +0530 | |
changeset 16226 | 0e4f37e6cc40 |
parent 16151 | nashorn/test/src/jdk/nashorn/internal/access/NumberBoxingTest.java@97c1e756ae1e |
child 16263 | 0679aaa72927 |
permissions | -rw-r--r-- |
16147 | 1 |
/* |
16151 | 2 |
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. |
16147 | 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 |
||
16226
0e4f37e6cc40
8007915: Nashorn IR, codegen, parser packages and Context instance should be inaccessible to user code
sundar
parents:
16151
diff
changeset
|
26 |
package jdk.nashorn.api.javaaccess; |
16147 | 27 |
|
28 |
import static org.testng.AssertJUnit.assertEquals; |
|
29 |
import static org.testng.AssertJUnit.assertTrue; |
|
30 |
||
31 |
import javax.script.ScriptEngine; |
|
32 |
import javax.script.ScriptEngineManager; |
|
33 |
import javax.script.ScriptException; |
|
34 |
import org.testng.TestNG; |
|
35 |
import org.testng.annotations.BeforeClass; |
|
36 |
import org.testng.annotations.Test; |
|
37 |
||
38 |
public class NumberBoxingTest { |
|
39 |
||
40 |
private static ScriptEngine e = null; |
|
41 |
private static SharedObject o = new SharedObject(); |
|
42 |
||
43 |
public static void main(final String[] args) { |
|
44 |
TestNG.main(args); |
|
45 |
} |
|
46 |
||
47 |
@BeforeClass |
|
48 |
public static void setUpClass() throws ScriptException { |
|
49 |
final ScriptEngineManager m = new ScriptEngineManager(); |
|
50 |
e = m.getEngineByName("nashorn"); |
|
51 |
e.put("o", o); |
|
52 |
e.eval("var SharedObject = Packages.jdk.nashorn.internal.access.SharedObject;"); |
|
53 |
} |
|
54 |
||
55 |
// --------------------------------long |
|
56 |
// tests------------------------------------ |
|
57 |
@Test |
|
58 |
public void accessFieldLongBoxing() throws ScriptException { |
|
59 |
e.eval("var p_long = o.publicLongBox;"); |
|
60 |
assertEquals(o.publicLongBox, e.get("p_long")); |
|
61 |
e.eval("o.publicLongBox = 12;"); |
|
62 |
assertEquals(Long.valueOf(12), o.publicLongBox); |
|
63 |
} |
|
64 |
||
65 |
@Test |
|
66 |
public void accessStaticFieldLongBoxing() throws ScriptException { |
|
67 |
e.eval("var ps_long = SharedObject.publicStaticLong;"); |
|
68 |
assertEquals(SharedObject.publicStaticLong, e.get("ps_long")); |
|
69 |
e.eval("SharedObject.publicStaticLong = 120;"); |
|
70 |
assertEquals(120, SharedObject.publicStaticLong); |
|
71 |
} |
|
72 |
||
73 |
@Test |
|
74 |
public void accessFinalFieldLongBoxing() throws ScriptException { |
|
75 |
e.eval("var pf_long = o.publicFinalLongBox;"); |
|
76 |
assertEquals(o.publicFinalLongBox, e.get("pf_long")); |
|
77 |
e.eval("o.publicFinalLongBox = 120;"); |
|
78 |
assertEquals(Long.valueOf(9377333334L), o.publicFinalLongBox); |
|
79 |
} |
|
80 |
||
81 |
@Test |
|
82 |
public void accessStaticFinalFieldLongBoxing() throws ScriptException { |
|
83 |
e.eval("var psf_long = SharedObject.publicStaticFinalLong;"); |
|
84 |
assertEquals(SharedObject.publicStaticFinalLong, e.get("psf_long")); |
|
85 |
e.eval("SharedObject.publicStaticFinalLong = 120;"); |
|
86 |
assertEquals(8333333333333L, SharedObject.publicStaticFinalLong); |
|
87 |
} |
|
88 |
||
89 |
// --------------------------------int |
|
90 |
// tests------------------------------------ |
|
91 |
@Test |
|
92 |
public void accessFieldIntBoxing() throws ScriptException { |
|
93 |
e.eval("var p_int = o.publicIntBox;"); |
|
94 |
assertEquals(o.publicIntBox, e.get("p_int")); |
|
95 |
e.eval("o.publicIntBox = 14;"); |
|
96 |
assertEquals(Integer.valueOf(14), o.publicIntBox); |
|
97 |
} |
|
98 |
||
99 |
@Test |
|
100 |
public void accessStaticFieldIntBoxing() throws ScriptException { |
|
101 |
e.eval("var ps_int = SharedObject.publicStaticInt;"); |
|
102 |
assertEquals(SharedObject.publicStaticInt, e.get("ps_int")); |
|
103 |
e.eval("SharedObject.publicStaticInt = 140;"); |
|
104 |
assertEquals(140, SharedObject.publicStaticInt); |
|
105 |
} |
|
106 |
||
107 |
@Test |
|
108 |
public void accessFinalFieldIntBoxing() throws ScriptException { |
|
109 |
e.eval("var pf_int = o.publicFinalIntBox;"); |
|
110 |
assertEquals(o.publicFinalIntBox, e.get("pf_int")); |
|
111 |
e.eval("o.publicFinalIntBox = 10;"); |
|
112 |
assertEquals(Integer.valueOf(207512301), o.publicFinalIntBox); |
|
113 |
} |
|
114 |
||
115 |
@Test |
|
116 |
public void accessStaticFinalFieldIntBoxing() throws ScriptException { |
|
117 |
e.eval("var psf_int = SharedObject.publicStaticFinalInt;"); |
|
118 |
assertEquals(SharedObject.publicStaticFinalInt, e.get("psf_int")); |
|
119 |
e.eval("SharedObject.publicStaticFinalInt = 140;"); |
|
120 |
assertEquals(207182023, SharedObject.publicStaticFinalInt); |
|
121 |
} |
|
122 |
||
123 |
// --------------------------------byte |
|
124 |
// tests------------------------------------ |
|
125 |
@Test |
|
126 |
public void accessFieldByteBoxing() throws ScriptException { |
|
127 |
e.eval("var p_byte = o.publicByteBox;"); |
|
128 |
assertEquals(o.publicByteBox, e.get("p_byte")); |
|
129 |
e.eval("o.publicByteBox = 16;"); |
|
130 |
assertEquals(Byte.valueOf((byte)16), o.publicByteBox); |
|
131 |
} |
|
132 |
||
133 |
@Test |
|
134 |
public void accessStaticFieldByteBoxing() throws ScriptException { |
|
135 |
e.eval("var ps_byte = SharedObject.publicStaticByte;"); |
|
136 |
assertEquals(SharedObject.publicStaticByte, e.get("ps_byte")); |
|
137 |
e.eval("SharedObject.publicStaticByte = 16;"); |
|
138 |
assertEquals(16, SharedObject.publicStaticByte); |
|
139 |
} |
|
140 |
||
141 |
@Test |
|
142 |
public void accessFinalFieldByteBoxing() throws ScriptException { |
|
143 |
e.eval("var pf_byte = o.publicFinalByteBox;"); |
|
144 |
assertEquals(o.publicFinalByteBox, e.get("pf_byte")); |
|
145 |
e.eval("o.publicFinalByteBox = 16;"); |
|
146 |
assertEquals(Byte.valueOf((byte)19), o.publicFinalByteBox); |
|
147 |
} |
|
148 |
||
149 |
@Test |
|
150 |
public void accessStaticFinalFieldByteBoxing() throws ScriptException { |
|
151 |
e.eval("var psf_byte = SharedObject.publicStaticFinalByte;"); |
|
152 |
assertEquals(SharedObject.publicStaticFinalByte, e.get("psf_byte")); |
|
153 |
e.eval("SharedObject.publicStaticFinalByte = 16;"); |
|
154 |
assertEquals(-70, SharedObject.publicStaticFinalByte); |
|
155 |
} |
|
156 |
||
157 |
// --------------------------------short |
|
158 |
// tests------------------------------------ |
|
159 |
@Test |
|
160 |
public void accessFieldShortBoxing() throws ScriptException { |
|
161 |
e.eval("var p_short = o.publicShortBox;"); |
|
162 |
assertEquals(o.publicShortBox, e.get("p_short")); |
|
163 |
e.eval("o.publicShortBox = 18;"); |
|
164 |
assertEquals(Short.valueOf((short)18), o.publicShortBox); |
|
165 |
} |
|
166 |
||
167 |
@Test |
|
168 |
public void accessStaticFieldShortBoxing() throws ScriptException { |
|
169 |
e.eval("var ps_short = SharedObject.publicStaticShort;"); |
|
170 |
assertEquals(SharedObject.publicStaticShort, e.get("ps_short")); |
|
171 |
e.eval("SharedObject.publicStaticShort = 180;"); |
|
172 |
assertEquals(180, SharedObject.publicStaticShort); |
|
173 |
} |
|
174 |
||
175 |
@Test |
|
176 |
public void accessFinalFieldShortBoxing() throws ScriptException { |
|
177 |
e.eval("var pf_short = o.publicFinalShortBox;"); |
|
178 |
assertEquals(o.publicFinalShortBox, e.get("pf_short")); |
|
179 |
e.eval("o.publicFinalShortBox = 180;"); |
|
180 |
assertEquals(Short.valueOf((short)-26777), o.publicFinalShortBox); |
|
181 |
} |
|
182 |
||
183 |
@Test |
|
184 |
public void accessStaticFinalFieldShortBoxing() throws ScriptException { |
|
185 |
e.eval("var psf_short = SharedObject.publicStaticFinalShort;"); |
|
186 |
assertEquals(SharedObject.publicStaticFinalShort, e.get("psf_short")); |
|
187 |
e.eval("SharedObject.publicStaticFinalShort = 180;"); |
|
188 |
assertEquals(8888, SharedObject.publicStaticFinalShort); |
|
189 |
} |
|
190 |
||
191 |
// --------------------------------char |
|
192 |
// tests------------------------------------ |
|
193 |
@Test |
|
194 |
public void accessFieldCharBoxing() throws ScriptException { |
|
195 |
e.eval("var p_char = o.publicCharBox;"); |
|
196 |
assertEquals(o.publicCharBox, e.get("p_char")); |
|
197 |
e.eval("o.publicCharBox = 'S';"); |
|
198 |
assertEquals(Character.valueOf('S'), o.publicCharBox); |
|
199 |
e.eval("try {" + |
|
200 |
" o.publicCharBox = 'Big string';" + |
|
201 |
"} catch(e) {" + |
|
202 |
" var isThrown = true;" + |
|
203 |
"}"); |
|
204 |
assertEquals("Exception thrown", true, e.get("isThrown")); |
|
205 |
assertEquals(Character.valueOf('S'), o.publicCharBox); |
|
206 |
} |
|
207 |
||
208 |
@Test |
|
209 |
public void accessStaticFieldCharBoxing() throws ScriptException { |
|
210 |
e.eval("var ps_char = SharedObject.publicStaticChar;"); |
|
211 |
assertEquals(SharedObject.publicStaticChar, e.get("ps_char")); |
|
212 |
e.eval("SharedObject.publicStaticChar = 'Z';"); |
|
213 |
assertEquals('Z', SharedObject.publicStaticChar); |
|
214 |
} |
|
215 |
||
216 |
@Test |
|
217 |
public void accessFinalFieldCharBoxing() throws ScriptException { |
|
218 |
e.eval("var pf_char = o.publicFinalCharBox;"); |
|
219 |
assertEquals(o.publicFinalCharBox, e.get("pf_char")); |
|
220 |
e.eval("o.publicFinalCharBox = 'S';"); |
|
221 |
assertEquals(Character.valueOf('F'), o.publicFinalCharBox); |
|
222 |
} |
|
223 |
||
224 |
@Test |
|
225 |
public void accessStaticFinalFieldCharBoxing() throws ScriptException { |
|
226 |
e.eval("var psf_char = SharedObject.publicStaticFinalChar;"); |
|
227 |
assertEquals(SharedObject.publicStaticFinalChar, e.get("psf_char")); |
|
228 |
e.eval("SharedObject.publicStaticFinalChar = 'Z';"); |
|
229 |
assertEquals('K', SharedObject.publicStaticFinalChar); |
|
230 |
} |
|
231 |
||
232 |
// --------------------------------float |
|
233 |
// tests------------------------------------ |
|
234 |
@Test |
|
235 |
public void accessFieldFloatBoxing() throws ScriptException { |
|
236 |
e.eval("var p_float = o.publicFloatBox;"); |
|
237 |
assertEquals(o.publicFloatBox, e.get("p_float")); |
|
238 |
o.publicFloatBox = 0.0f / 0.0f; |
|
239 |
assertEquals(true, e.eval("isNaN(o.publicFloatBox)")); |
|
240 |
o.publicFloatBox = 1.0f / 0.0f; |
|
241 |
assertEquals(true, e.eval("Number.POSITIVE_INFINITY === o.publicFloatBox")); |
|
242 |
o.publicFloatBox = -1.0f / 0.0f; |
|
243 |
assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === o.publicFloatBox")); |
|
244 |
e.eval("o.publicFloatBox = 20;"); |
|
245 |
assertEquals(20, o.publicFloatBox, 1e-10); |
|
246 |
e.eval("o.publicFloatBox = 0.0/0.0;"); |
|
247 |
assertTrue(Float.isNaN(o.publicFloatBox)); |
|
248 |
e.eval("o.publicFloatBox = 1.0/0.0;"); |
|
249 |
assertEquals(Float.floatToIntBits(Float.POSITIVE_INFINITY), Float.floatToIntBits(o.publicFloatBox)); |
|
250 |
e.eval("o.publicFloatBox = -1.0/0.0;"); |
|
251 |
assertEquals(Float.NEGATIVE_INFINITY, o.publicFloatBox, 1e-10); |
|
252 |
} |
|
253 |
||
254 |
@Test |
|
255 |
public void accessStaticFieldFloatBoxing() throws ScriptException { |
|
256 |
e.eval("var ps_float = SharedObject.publicStaticFloat;"); |
|
257 |
assertEquals(SharedObject.publicStaticFloat, e.get("ps_float")); |
|
258 |
SharedObject.publicStaticFloat = 0.0f / 0.0f; |
|
259 |
assertEquals(true, e.eval("isNaN(SharedObject.publicStaticFloat)")); |
|
260 |
SharedObject.publicStaticFloat = 1.0f / 0.0f; |
|
261 |
assertEquals(true, e.eval("Number.POSITIVE_INFINITY === SharedObject.publicStaticFloat")); |
|
262 |
SharedObject.publicStaticFloat = -1.0f / 0.0f; |
|
263 |
assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === SharedObject.publicStaticFloat")); |
|
264 |
e.eval("SharedObject.publicStaticFloat = 20.0;"); |
|
265 |
assertEquals(20.0f, SharedObject.publicStaticFloat, 1e-10); |
|
266 |
e.eval("SharedObject.publicStaticFloat = 0.0/0.0;"); |
|
267 |
assertTrue(Float.isNaN(SharedObject.publicStaticFloat)); |
|
268 |
e.eval("SharedObject.publicStaticFloat = 1.0/0.0;"); |
|
269 |
assertEquals(Float.floatToIntBits(Float.POSITIVE_INFINITY), Float.floatToIntBits(SharedObject.publicStaticFloat)); |
|
270 |
e.eval("SharedObject.publicStaticFloat = -1.0/0.0;"); |
|
271 |
assertEquals(Float.floatToIntBits(Float.NEGATIVE_INFINITY), Float.floatToIntBits(SharedObject.publicStaticFloat)); |
|
272 |
} |
|
273 |
||
274 |
@Test |
|
275 |
public void accessFinalFloatBoxing() throws ScriptException { |
|
276 |
e.eval("var pf_float = o.publicFinalFloatBox;"); |
|
277 |
assertEquals(o.publicFinalFloatBox, e.get("pf_float")); |
|
278 |
e.eval("o.publicFinalFloatBox = 20.0;"); |
|
279 |
assertEquals(1.372e4f, o.publicFinalFloatBox, 1e-10); |
|
280 |
} |
|
281 |
||
282 |
@Test |
|
283 |
public void accessStaticFinalFieldFloatBoxing() throws ScriptException { |
|
284 |
e.eval("var psf_float = SharedObject.publicStaticFinalFloat;"); |
|
285 |
assertEquals(SharedObject.publicStaticFinalFloat, e.get("psf_float")); |
|
286 |
e.eval("SharedObject.publicStaticFinalFloat = 20.0;"); |
|
287 |
assertEquals(0.72e8f, SharedObject.publicStaticFinalFloat, 1e-10); |
|
288 |
} |
|
289 |
||
290 |
// --------------------------------double |
|
291 |
// tests------------------------------------ |
|
292 |
@Test |
|
293 |
public void accessFieldDoubleBoxing() throws ScriptException { |
|
294 |
e.eval("var p_double = o.publicDoubleBox;"); |
|
295 |
assertEquals(o.publicDoubleBox, e.get("p_double")); |
|
296 |
o.publicDoubleBox = 0.0 / 0.0; |
|
297 |
assertEquals(true, e.eval("isNaN(o.publicDoubleBox)")); |
|
298 |
o.publicDoubleBox = 1.0 / 0.0; |
|
299 |
assertEquals(true, e.eval("Number.POSITIVE_INFINITY === o.publicDoubleBox")); |
|
300 |
o.publicDoubleBox = -1.0 / 0.0; |
|
301 |
assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === o.publicDoubleBox")); |
|
302 |
e.eval("o.publicDoubleBox = 30;"); |
|
303 |
assertEquals(Double.doubleToLongBits(30.0), Double.doubleToLongBits(o.publicDoubleBox)); |
|
304 |
e.eval("o.publicDoubleBox = 0.0/0.0;"); |
|
305 |
assertTrue(Double.isNaN(o.publicDoubleBox)); |
|
306 |
e.eval("o.publicDoubleBox = 1.0/0.0;"); |
|
307 |
assertEquals(Double.doubleToLongBits(Double.POSITIVE_INFINITY), Double.doubleToLongBits(o.publicDoubleBox)); |
|
308 |
e.eval("o.publicDoubleBox = -1.0/0.0;"); |
|
309 |
assertEquals(Double.doubleToLongBits(Double.NEGATIVE_INFINITY), Double.doubleToLongBits(o.publicDoubleBox)); |
|
310 |
} |
|
311 |
||
312 |
@Test |
|
313 |
public void accessStaticFieldDoubleBoxing() throws ScriptException { |
|
314 |
e.eval("var ps_double = SharedObject.publicStaticDouble;"); |
|
315 |
assertEquals(SharedObject.publicStaticDouble, e.get("ps_double")); |
|
316 |
SharedObject.publicStaticDouble = 0.0 / 0.0; |
|
317 |
assertEquals(true, e.eval("isNaN(SharedObject.publicStaticDouble)")); |
|
318 |
SharedObject.publicStaticDouble = 1.0 / 0.0; |
|
319 |
assertEquals(true, e.eval("Number.POSITIVE_INFINITY === SharedObject.publicStaticDouble")); |
|
320 |
SharedObject.publicStaticDouble = -1.0 / 0.0; |
|
321 |
assertEquals(true, e.eval("Number.NEGATIVE_INFINITY === SharedObject.publicStaticDouble")); |
|
322 |
e.eval("SharedObject.publicStaticDouble = 40.0;"); |
|
323 |
assertEquals(Double.doubleToLongBits(40.0), Double.doubleToLongBits(SharedObject.publicStaticDouble)); |
|
324 |
e.eval("SharedObject.publicStaticDouble = 0.0/0.0;"); |
|
325 |
assertTrue(Double.isNaN(SharedObject.publicStaticDouble)); |
|
326 |
e.eval("SharedObject.publicStaticDouble = 1.0/0.0;"); |
|
327 |
assertEquals(Double.doubleToLongBits(Double.POSITIVE_INFINITY), Double.doubleToLongBits(SharedObject.publicStaticDouble)); |
|
328 |
e.eval("SharedObject.publicStaticDouble = -1.0/0.0;"); |
|
329 |
assertEquals(Double.doubleToLongBits(Double.NEGATIVE_INFINITY), Double.doubleToLongBits(SharedObject.publicStaticDouble)); |
|
330 |
} |
|
331 |
||
332 |
@Test |
|
333 |
public void accessFinalFieldDoubleBoxing() throws ScriptException { |
|
334 |
e.eval("var pf_double = o.publicFinalDoubleBox;"); |
|
335 |
assertEquals(o.publicFinalDoubleBox, e.get("pf_double")); |
|
336 |
e.eval("o.publicFinalDoubleBox = 30.0;"); |
|
337 |
assertEquals(Double.doubleToLongBits(1.412e-12), Double.doubleToLongBits(o.publicFinalDoubleBox)); |
|
338 |
} |
|
339 |
||
340 |
@Test |
|
341 |
public void accessStaticFinalFieldDoubleBoxing() throws ScriptException { |
|
342 |
e.eval("var psf_double = SharedObject.publicStaticFinalDouble;"); |
|
343 |
assertEquals(SharedObject.publicStaticFinalDouble, e.get("psf_double")); |
|
344 |
e.eval("SharedObject.publicStaticFinalDouble = 40.0;"); |
|
345 |
assertEquals(Double.doubleToLongBits(1.8e12), Double.doubleToLongBits(SharedObject.publicStaticFinalDouble)); |
|
346 |
} |
|
347 |
||
348 |
} |