diff --git a/test/built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-false.js b/test/built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-false.js new file mode 100644 index 0000000000000000000000000000000000000000..148a7b81af97996f8e5842ae23a310684157582b --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-false.js @@ -0,0 +1,32 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + The result is a Boolean value. +features: [Reflect] +---*/ + +var target = {}; +var p = new Proxy(target, { + deleteProperty: function() { + return 0; + } +}); + +Object.defineProperties(target, { + isConfigurable: { + value: 1, + configurable: true + }, + notConfigurable: { + value: 1, + configurable: false + } +}); + +assert.sameValue(Reflect.deleteProperty(p, "attr"), false); +assert.sameValue(Reflect.deleteProperty(p, "isConfigurable"), false); +assert.sameValue(Reflect.deleteProperty(p, "notConfigurable"), false); diff --git a/test/built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-true.js b/test/built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-true.js new file mode 100644 index 0000000000000000000000000000000000000000..fe506f109e46ebd1b23f77d14119ed27fbb0f018 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-true.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + The result is a Boolean value. +---*/ + +var p = new Proxy({}, { + deleteProperty: function() { + return 1; + } +}); + +assert.sameValue(Reflect.deleteProperty(p, "attr"), true); diff --git a/test/built-ins/Proxy/deleteProperty/call-parameters.js b/test/built-ins/Proxy/deleteProperty/call-parameters.js new file mode 100644 index 0000000000000000000000000000000000000000..38a4f57fd9f2d374a5815e88adfd69d19d41c4d4 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/call-parameters.js @@ -0,0 +1,33 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + 9. Let booleanTrapResult be ToBoolean(Call(trap, handler, «target, P»)). +info: > + 6.1.7.2 Object Internal Methods and Internal Slots + + (...) Receiver is used as the this value when evaluating the code +---*/ + +var _handler, _target, _prop; +var target = { + attr: 1 +}; +var handler = { + deleteProperty: function(t, prop) { + _handler = this; + _target = t; + _prop = prop; + return delete t[prop]; + } +}; +var p = new Proxy(target, handler); + +delete p.attr; + +assert.sameValue(_handler, handler, "handler object as the trap context"); +assert.sameValue(_target, target, "first argument is the target object"); +assert.sameValue(_prop, "attr", "second argument is the property name"); diff --git a/test/built-ins/Proxy/deleteProperty/null-handler.js b/test/built-ins/Proxy/deleteProperty/null-handler.js new file mode 100644 index 0000000000000000000000000000000000000000..1b280f79ed2282c68c7fd88cd15fa4f69f0a79ae --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/null-handler.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + 3. If handler is null, throw a TypeError exception. +---*/ + +var p = Proxy.revocable({ + attr: 1 +}, {}); + +p.revoke(); + +assert.throws(TypeError, function() { + delete p.proxy.attr; +}); diff --git a/test/built-ins/Proxy/deleteProperty/return-false-not-strict.js b/test/built-ins/Proxy/deleteProperty/return-false-not-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..c0785c90bf5f31a4ce1966f039e995f594ebd122 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/return-false-not-strict.js @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + 11. If booleanTrapResult is false, return false. +flags: [noStrict] +---*/ + +var p = new Proxy({}, { + deleteProperty: function() { + return false; + } +}); + +assert.sameValue(delete p.attr, false); diff --git a/test/built-ins/Proxy/deleteProperty/return-false-strict.js b/test/built-ins/Proxy/deleteProperty/return-false-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..94d33a91e35c31ebe24c575c91f3f98f231969ac --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/return-false-strict.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + 11. If booleanTrapResult is false, return false. +flags: [onlyStrict] +features: [Reflect] +---*/ + +var p = new Proxy({}, { + deleteProperty: function() { + return false; + } +}); + +assert.sameValue(Reflect.deleteProperty(p, "attr"), false); diff --git a/test/built-ins/Proxy/deleteProperty/return-is-abrupt.js b/test/built-ins/Proxy/deleteProperty/return-is-abrupt.js new file mode 100644 index 0000000000000000000000000000000000000000..7a37fc91f5b56256998d39e1e9fcccb7a2a56bad --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/return-is-abrupt.js @@ -0,0 +1,21 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + Trap return is an abrupt. +info: > + 9. Let booleanTrapResult be ToBoolean(Call(trap, handler, «target, P»)). + 10. ReturnIfAbrupt(booleanTrapResult). +includes: [Test262Error.js] +---*/ + +var p = new Proxy({}, { + deleteProperty: function(t, prop) { + throw new Test262Error(); + } +}); + +assert.throws(Test262Error, function() { + delete p.attr; +}); diff --git a/test/built-ins/Proxy/deleteProperty/targetdesc-is-not-configurable.js b/test/built-ins/Proxy/deleteProperty/targetdesc-is-not-configurable.js new file mode 100644 index 0000000000000000000000000000000000000000..13af3bbc53be926fb220beb4cdcafb669cf2ad71 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/targetdesc-is-not-configurable.js @@ -0,0 +1,28 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + A property cannot be reported as deleted, if it exists as a non-configurable + own property of the target object. +info: > + 14. If targetDesc.[[Configurable]] is false, throw a TypeError exception. +---*/ + +var target = {}; +var p = new Proxy(target, { + deleteProperty: function() { + return true; + } +}); + +Object.defineProperty(target, "attr", { + configurable: false, + value: 1 +}); + +assert.throws(TypeError, function() { + delete p.attr; +}); diff --git a/test/built-ins/Proxy/deleteProperty/targetdesc-is-undefined-return-true.js b/test/built-ins/Proxy/deleteProperty/targetdesc-is-undefined-return-true.js new file mode 100644 index 0000000000000000000000000000000000000000..fc70773fa7df2ebe8c2b79642d1dc8bdbbec5b14 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/targetdesc-is-undefined-return-true.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + 14. If targetDesc is undefined, return true. +---*/ + +var p = new Proxy({}, { + deleteProperty: function() { + return true; + } +}); + +assert.sameValue(delete p.attr, true); diff --git a/test/built-ins/Proxy/deleteProperty/trap-is-not-callable.js b/test/built-ins/Proxy/deleteProperty/trap-is-not-callable.js new file mode 100644 index 0000000000000000000000000000000000000000..756e3103843b8482bba2c8f7974562ab92ea1cb6 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/trap-is-not-callable.js @@ -0,0 +1,24 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + Throws when trap is not callable. +info: > + 9.5.10 [[Delete]] (P) + + 6. Let trap be GetMethod(handler, "deleteProperty"). + ... + + 7.3.9 GetMethod (O, P) + + 5. If IsCallable(func) is false, throw a TypeError exception. +---*/ + +var p = new Proxy({}, { + deleteProperty: {} +}); + +assert.throws(TypeError, function() { + delete p.attr; +}); diff --git a/test/built-ins/Proxy/deleteProperty/trap-is-undefined-not-strict.js b/test/built-ins/Proxy/deleteProperty/trap-is-undefined-not-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..3adf23123b344d719e2ee7cc53a8533701d76e60 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/trap-is-undefined-not-strict.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + 8. If trap is undefined, then Return target.[[Delete]](P). +flags: [noStrict] +---*/ + +var target = { + attr: 1 +}; +var p = new Proxy(target, {}); + +assert.sameValue(delete p.attr, true); +assert.sameValue(delete p.notThere, true); +assert.sameValue( + Object.getOwnPropertyDescriptor(target, "attr"), + undefined +); + +Object.defineProperty(target, "attr", { + configurable: false, + enumerable: true, + value: 1 +}); + +assert.sameValue(delete p.attr, false); diff --git a/test/built-ins/Proxy/deleteProperty/trap-is-undefined-strict.js b/test/built-ins/Proxy/deleteProperty/trap-is-undefined-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..070fba7f5ab91699c0fd352040ef99ab9ad48988 --- /dev/null +++ b/test/built-ins/Proxy/deleteProperty/trap-is-undefined-strict.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.10 +description: > + [[Delete]] (P) + + 8. If trap is undefined, then Return target.[[Delete]](P). +flags: [onlyStrict] +features: [Reflect] +---*/ + +var target = { + attr: 1 +}; +var p = new Proxy(target, {}); + +assert.sameValue(delete p.attr, true); +assert.sameValue(delete p.notThere, true); +assert.sameValue( + Object.getOwnPropertyDescriptor(target, "attr"), + undefined +); + +Object.defineProperty(target, "attr", { + configurable: false, + enumerable: true, + value: 1 +}); + +assert.sameValue(Reflect.deleteProperty(p, "attr"), false);