mirror of https://github.com/tc39/test262.git
Object.prototype.hasOwnProperty: Test coercion order
This commit is contained in:
parent
8a3fe5318d
commit
1fccea4471
45
test/built-ins/Object/prototype/hasOwnProperty/topropertykey_before_toobject.js
vendored
Normal file
45
test/built-ins/Object/prototype/hasOwnProperty/topropertykey_before_toobject.js
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-object.prototype.hasownproperty
|
||||
description: >
|
||||
ToPropertyKey is performed before ToObject.
|
||||
info: |
|
||||
Object.prototype.hasOwnProperty ( V )
|
||||
|
||||
1. Let P be ? ToPropertyKey(V).
|
||||
2. Let O be ? ToObject(this value).
|
||||
|
||||
ToPropertyKey ( argument )
|
||||
|
||||
1. Let key be ? ToPrimitive(argument, hint String).
|
||||
features: [Symbol.toPrimitive]
|
||||
---*/
|
||||
|
||||
var coercibleKey1 = {
|
||||
get toString() {
|
||||
this.hint = "string";
|
||||
throw new Test262Error();
|
||||
},
|
||||
get valueOf() {
|
||||
this.hint = "defaultOrNumber";
|
||||
throw new Test262Error();
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
Object.prototype.hasOwnProperty.call(null, coercibleKey1);
|
||||
});
|
||||
assert.sameValue(coercibleKey1.hint, "string");
|
||||
|
||||
|
||||
var coercibleKey2 = {};
|
||||
coercibleKey2[Symbol.toPrimitive] = function(hint) {
|
||||
this.hint = hint;
|
||||
throw new Test262Error();
|
||||
};
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
Object.prototype.hasOwnProperty.call(undefined, coercibleKey2);
|
||||
});
|
||||
assert.sameValue(coercibleKey2.hint, "string");
|
Loading…
Reference in New Issue