blob: f7cc01d04d65b804f2c79ea80f960811513184ca [file] [log] [blame]
var propertyKey = {
toString() {
throw new Error("propertyKey.toString is called.");
}
};
function shouldThrow(func, message) {
var error = null;
try {
func();
} catch (e) {
error = e;
}
if (!error)
throw new Error("not thrown.");
if (String(error) !== message)
throw new Error("bad error: " + String(error));
}
var object = {};
shouldThrow(function () {
object.hasOwnProperty(propertyKey);
}, "Error: propertyKey.toString is called.");
shouldThrow(function () {
Object.prototype.hasOwnProperty.call(null, propertyKey);
}, "Error: propertyKey.toString is called.");
shouldThrow(function () {
Object.prototype.hasOwnProperty.call(null, 'ok');
}, "TypeError: null is not an object (evaluating 'Object.prototype.hasOwnProperty.call(null, 'ok')')");
shouldThrow(function () {
object.propertyIsEnumerable(propertyKey);
}, "Error: propertyKey.toString is called.");
// ToPropertyKey is first, ToObject is following.
shouldThrow(function () {
Object.prototype.propertyIsEnumerable.call(null, propertyKey);
}, "Error: propertyKey.toString is called.");
shouldThrow(function () {
// ToPropertyKey is first, ToObject is following.
Object.prototype.propertyIsEnumerable.call(null, 'ok');
}, "TypeError: null is not an object (evaluating 'Object.prototype.propertyIsEnumerable.call(null, 'ok')')");
shouldThrow(function () {
object.__defineGetter__(propertyKey, function () {
return 'NG';
});
}, "Error: propertyKey.toString is called.");
if (Object.getOwnPropertyDescriptor(object, ''))
throw new Error("bad descriptor");
shouldThrow(function () {
object.__defineSetter__(propertyKey, function () {
return 'NG';
});
}, "Error: propertyKey.toString is called.");
if (Object.getOwnPropertyDescriptor(object, ''))
throw new Error("bad descriptor");
shouldThrow(function () {
object.__lookupGetter__(propertyKey);
}, "Error: propertyKey.toString is called.");
shouldThrow(function () {
object.__lookupSetter__(propertyKey);
}, "Error: propertyKey.toString is called.");