test262-automation 7298a38552 [v8-test262-automation] Updated curation log with latest revision sha's from export and changed files.
sourceRevisionAtLastExport: 33f2fb0e53d135f0ee17cfccd9d993eb2a6f47de targetRevisionAtLastExport: 31340cbd9add103f586d501b0c3354b7b182abc0
2018-09-14 12:32:18 -04:00

40 lines
1.4 KiB
JavaScript

// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://bugs.chromium.org/p/chromium/issues/detail?id=595319
// Ensure exceptions are checked for by Array.prototype.concat from adding
// an element, and that elements are added to array subclasses appropriately
// If adding a property does throw, the exception is propagated
class MyException extends Error { }
class NoDefinePropertyArray extends Array {
constructor(...args) {
super(...args);
return new Proxy(this, {
defineProperty() { throw new MyException(); }
});
}
}
assertThrows(() => new NoDefinePropertyArray().concat([1]), MyException);
// Ensure elements are added to the instance, rather than calling [[Set]].
class ZeroGetterArray extends Array { get 0() {} };
assertArrayEquals([1], new ZeroGetterArray().concat(1));
// Frozen arrays lead to throwing
class FrozenArray extends Array {
constructor(...args) { super(...args); Object.freeze(this); }
}
assertThrows(() => new FrozenArray().concat([1]), TypeError);
// Non-configurable non-writable zero leads to throwing
class ZeroFrozenArray extends Array {
constructor(...args) {
super(...args);
Object.defineProperty(this, 0, {value: 1});
}
}
assertThrows(() => new ZeroFrozenArray().concat([1]), TypeError);