Improve assertion handling when comparison causes failure via coercion

This commit is contained in:
Rick Waldron 2018-10-23 17:00:30 -04:00
parent 3ae3688425
commit c49c356744
2 changed files with 34 additions and 1 deletions

View File

@ -27,7 +27,12 @@ assert._isSameValue = function (a, b) {
};
assert.sameValue = function (actual, expected, message) {
if (assert._isSameValue(actual, expected)) {
try {
if (assert._isSameValue(actual, expected)) {
return;
}
} catch (error) {
$ERROR(message + ' (_isSameValue operation threw) ' + error);
return;
}

View File

@ -0,0 +1,28 @@
// Copyright 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-Intl.Segmenter
description: The prototype of the Intl.Segmenter constructor is %FunctionPrototype%.
info: |
Unless specified otherwise in this document, the objects, functions, and constructors described in this standard are subject to the generic requirements and restrictions specified for standard built-in ECMAScript objects in the ECMAScript 2019 Language Specification, 10th edition, clause 17, or successor.
Unless otherwise specified every built-in function object has the %FunctionPrototype% object as the initial value of its [[Prototype]] internal slot.
features: [Intl.Segmenter]
---*/
class CustomSegmenter extends Intl.Segmenter {
constructor(...args) {
super(...args);
this.isCustom = true;
}
}
let cs = new CustomSegmenter();
assert.sameValue(Object.getPrototypeOf(CustomSegmenter), Intl.Segmenter, 'Object.getPrototypeOf(CustomSegmenter) returns the value of `Intl.Segmenter` (undefined)');
assert.sameValue(Object.getPrototypeOf(CustomSegmenter.prototype), Intl.Segmenter.prototype, 'Object.getPrototypeOf(CustomSegmenter.prototype) returns the value of `Intl.Segmenter.prototype` (undefined)');
assert.sameValue(
cs instanceof Intl.Segmenter,
'CustomSegmenter instance is instanceof Intl.Segmenter',
'The result of `(cs instanceof Intl.Segmenter)` is "CustomSegmenter instance is instanceof Intl.Segmenter"'
);