Tue, 16 Aug 2016 21:41:28 -0700
Added tag jdk8u102-b33 for changeset 36e3c21b5fca
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 */
24 /**
25 * JDK-8015355: Array.prototype functions don't honour non-writable length and / or index properties
26 *
27 * @test
28 * @run
29 */
31 function check(callback) {
32 try {
33 callback();
34 fail("TypeError expected for " + callback);
35 } catch (e) {
36 if (! (e instanceof TypeError)) {
37 fail("TypeError expected, got " + e);
38 }
39 }
40 }
42 var array = Object.defineProperty([],"length", { writable: false });
44 check(function() {
45 array.push(0)
46 });
48 check(function() {
49 array.pop()
50 });
52 check(function() {
53 Object.defineProperty([,,],"0",{ writable: false }).reverse();
54 });
56 check(function() {
57 array.shift()
58 });
60 check(function() {
61 array.splice(0)
62 });
64 check(function() {
65 array.unshift()
66 });
68 // try the above via call
70 check(function() {
71 Array.prototype.push.call(array, 0);
72 });
74 check(function() {
75 Array.prototype.pop.call(array);
76 });
78 check(function() {
79 Array.prototype.shift.call(array);
80 });
82 check(function() {
83 Array.prototype.unshift.call(array);
84 });
86 check(function() {
87 Array.prototype.splice.call(array, 0);
88 });
90 check(function() {
91 Array.prototype.reverse.call(Object.defineProperty([,,],"0",{ writable: false }));
92 });
94 // try the above via apply
96 check(function() {
97 Array.prototype.push.apply(array, [ 0 ]);
98 });
100 check(function() {
101 Array.prototype.pop.apply(array);
102 });
104 check(function() {
105 Array.prototype.shift.apply(array);
106 });
108 check(function() {
109 Array.prototype.unshift.apply(array);
110 });
112 check(function() {
113 Array.prototype.splice.apply(array, [ 0 ]);
114 });
116 check(function() {
117 Array.prototype.reverse.apply(Object.defineProperty([,,],"0",{ writable: false }));
118 });