test/script/basic/JDK-8015355.js

changeset 344
b0dcc3727fc3
child 662
ae5f2130c3b9
equal deleted inserted replaced
343:d26e069353c0 344:b0dcc3727fc3
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.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /**
25 * JDK-8015355: Array.prototype functions don't honour non-writable length and / or index properties
26 *
27 * @test
28 * @run
29 */
30
31 function fail(msg) {
32 print(msg);
33 }
34
35 function check(callback) {
36 try {
37 callback();
38 fail("TypeError expected for " + callback);
39 } catch (e) {
40 if (! (e instanceof TypeError)) {
41 fail("TypeError expected, got " + e);
42 }
43 }
44 }
45
46 var array = Object.defineProperty([],"length", { writable: false });
47
48 check(function() {
49 array.push(0)
50 });
51
52 check(function() {
53 array.pop()
54 });
55
56 check(function() {
57 Object.defineProperty([,,],"0",{ writable: false }).reverse();
58 });
59
60 check(function() {
61 array.shift()
62 });
63
64 check(function() {
65 array.splice(0)
66 });
67
68 check(function() {
69 array.unshift()
70 });
71
72 // try the above via call
73
74 check(function() {
75 Array.prototype.push.call(array, 0);
76 });
77
78 check(function() {
79 Array.prototype.pop.call(array);
80 });
81
82 check(function() {
83 Array.prototype.shift.call(array);
84 });
85
86 check(function() {
87 Array.prototype.unshift.call(array);
88 });
89
90 check(function() {
91 Array.prototype.splice.call(array, 0);
92 });
93
94 check(function() {
95 Array.prototype.reverse.call(Object.defineProperty([,,],"0",{ writable: false }));
96 });
97
98 // try the above via apply
99
100 check(function() {
101 Array.prototype.push.apply(array, [ 0 ]);
102 });
103
104 check(function() {
105 Array.prototype.pop.apply(array);
106 });
107
108 check(function() {
109 Array.prototype.shift.apply(array);
110 });
111
112 check(function() {
113 Array.prototype.unshift.apply(array);
114 });
115
116 check(function() {
117 Array.prototype.splice.apply(array, [ 0 ]);
118 });
119
120 check(function() {
121 Array.prototype.reverse.apply(Object.defineProperty([,,],"0",{ writable: false }));
122 });

mercurial