diff options
Diffstat (limited to 'js/src/tests/non262/Error')
-rw-r--r-- | js/src/tests/non262/Error/AggregateError.js | 82 | ||||
-rw-r--r-- | js/src/tests/non262/Error/browser.js | 0 | ||||
-rw-r--r-- | js/src/tests/non262/Error/constructor-ordering.js | 17 | ||||
-rw-r--r-- | js/src/tests/non262/Error/constructor-proto.js | 17 | ||||
-rw-r--r-- | js/src/tests/non262/Error/prototype-properties.js | 26 | ||||
-rw-r--r-- | js/src/tests/non262/Error/prototype.js | 18 | ||||
-rw-r--r-- | js/src/tests/non262/Error/regress-354246.js | 34 | ||||
-rw-r--r-- | js/src/tests/non262/Error/regress-412324.js | 17 | ||||
-rw-r--r-- | js/src/tests/non262/Error/regress-465377.js | 78 | ||||
-rw-r--r-- | js/src/tests/non262/Error/shell.js | 0 |
10 files changed, 289 insertions, 0 deletions
diff --git a/js/src/tests/non262/Error/AggregateError.js b/js/src/tests/non262/Error/AggregateError.js new file mode 100644 index 0000000000..81cf04e9d1 --- /dev/null +++ b/js/src/tests/non262/Error/AggregateError.js @@ -0,0 +1,82 @@ +// |reftest| skip-if(release_or_beta) + +assertEq(typeof AggregateError, "function"); +assertEq(Object.getPrototypeOf(AggregateError), Error); +assertEq(AggregateError.name, "AggregateError"); +assertEq(AggregateError.length, 2); + +assertEq(Object.getPrototypeOf(AggregateError.prototype), Error.prototype); +assertEq(AggregateError.prototype.name, "AggregateError"); +assertEq(AggregateError.prototype.message, ""); + +// The |errors| argument is mandatory. +assertThrowsInstanceOf(() => new AggregateError(), TypeError); +assertThrowsInstanceOf(() => AggregateError(), TypeError); + +// The .errors data property is an array object. +{ + let err = new AggregateError([]); + + let {errors} = err; + assertEq(Array.isArray(errors), true); + assertEq(errors.length, 0); + + // The errors object is modifiable. + errors.push(123); + assertEq(errors.length, 1); + assertEq(errors[0], 123); + assertEq(err.errors[0], 123); + + // The property is writable. + err.errors = undefined; + assertEq(err.errors, undefined); +} + +// The errors argument can be any iterable. +{ + function* g() { yield* [1, 2, 3]; } + + let {errors} = new AggregateError(g()); + assertEqArray(errors, [1, 2, 3]); +} + +// The message property is populated by the second argument. +{ + let err; + + err = new AggregateError([]); + assertEq(err.message, ""); + + err = new AggregateError([], "my message"); + assertEq(err.message, "my message"); +} + +{ + assertEq("errors" in AggregateError.prototype, false); + + const { + configurable, + enumerable, + value, + writable + } = Object.getOwnPropertyDescriptor(new AggregateError([]), "errors"); + assertEq(configurable, true); + assertEq(enumerable, false); + assertEq(writable, true); + assertEq(value.length, 0); + + const g = newGlobal(); + + let obj = {}; + let errors = new g.AggregateError([obj]).errors; + + assertEq(errors.length, 1); + assertEq(errors[0], obj); + + // The prototype is |g.Array.prototype| in the cross-compartment case. + let proto = Object.getPrototypeOf(errors); + assertEq(proto === g.Array.prototype, true); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/js/src/tests/non262/Error/browser.js b/js/src/tests/non262/Error/browser.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/non262/Error/browser.js diff --git a/js/src/tests/non262/Error/constructor-ordering.js b/js/src/tests/non262/Error/constructor-ordering.js new file mode 100644 index 0000000000..dbcc2e6048 --- /dev/null +++ b/js/src/tests/non262/Error/constructor-ordering.js @@ -0,0 +1,17 @@ +var order = 0; +function assertOrdering(ordering) { + assertEq(order, ordering); + order++; +} + +// Spec mandates that the prototype is looked up /before/ we toString the +// argument. +var handler = { get() { assertOrdering(0); return Error.prototype } }; +var errorProxy = new Proxy(Error, handler); + +var toStringable = { toString() { assertOrdering(1); return "Argument"; } }; + +new errorProxy(toStringable); + +if (typeof reportCompare === 'function') + reportCompare(0,0,"OK"); diff --git a/js/src/tests/non262/Error/constructor-proto.js b/js/src/tests/non262/Error/constructor-proto.js new file mode 100644 index 0000000000..4ddc6025e8 --- /dev/null +++ b/js/src/tests/non262/Error/constructor-proto.js @@ -0,0 +1,17 @@ +const nativeErrors = [ + InternalError, + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +]; + +assertEq(Reflect.getPrototypeOf(Error), Function.prototype) + +for (const error of nativeErrors) + assertEq(Reflect.getPrototypeOf(error), Error); + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/js/src/tests/non262/Error/prototype-properties.js b/js/src/tests/non262/Error/prototype-properties.js new file mode 100644 index 0000000000..16264bc56d --- /dev/null +++ b/js/src/tests/non262/Error/prototype-properties.js @@ -0,0 +1,26 @@ +const nativeErrors = [ + InternalError, + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +]; + +const expectedOwnKeys = "toSource" in Object.prototype + ? "toSource,toString,message,name,stack,constructor" + : "toString,message,name,stack,constructor"; +assertEq(Reflect.ownKeys(Error.prototype).toString(), expectedOwnKeys); +assertEq(Error.prototype.name, "Error"); +assertEq(Error.prototype.message, ""); + +for (const error of nativeErrors) { + assertEq(Reflect.ownKeys(error.prototype).toString(), "message,name,constructor"); + assertEq(error.prototype.name, error.name); + assertEq(error.prototype.message, ""); + assertEq(error.prototype.constructor, error); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/js/src/tests/non262/Error/prototype.js b/js/src/tests/non262/Error/prototype.js new file mode 100644 index 0000000000..b22a8e084b --- /dev/null +++ b/js/src/tests/non262/Error/prototype.js @@ -0,0 +1,18 @@ +const nativeErrors = [ + InternalError, + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +]; + +assertEq(Reflect.getPrototypeOf(Error.prototype), Object.prototype) + +for (const error of nativeErrors) { + assertEq(Reflect.getPrototypeOf(error.prototype), Error.prototype); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/js/src/tests/non262/Error/regress-354246.js b/js/src/tests/non262/Error/regress-354246.js new file mode 100644 index 0000000000..644bcba106 --- /dev/null +++ b/js/src/tests/non262/Error/regress-354246.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354246; +var summary = 'calling Error constructor with object with bad toString'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '13'; + + actual += '1'; + try + { + new Error({toString: function() { x.y } }); + } + catch(e) + { + } + actual += '3'; + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/non262/Error/regress-412324.js b/js/src/tests/non262/Error/regress-412324.js new file mode 100644 index 0000000000..d9debaa896 --- /dev/null +++ b/js/src/tests/non262/Error/regress-412324.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 412324; +var summary = 'Allow function Error(){} for the love of Pete'; +var actual = 'No Error'; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function Error() {} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/non262/Error/regress-465377.js b/js/src/tests/non262/Error/regress-465377.js new file mode 100644 index 0000000000..ea7be79f98 --- /dev/null +++ b/js/src/tests/non262/Error/regress-465377.js @@ -0,0 +1,78 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465377; +var summary = 'instanceof relations between Error objects'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Exception'; + + try + { + var list = [ + "Error", + "InternalError", + "EvalError", + "RangeError", + "ReferenceError", + "SyntaxError", + "TypeError", + "URIError" + ]; + var instances = []; + + for (var i = 0; i != list.length; ++i) { + var name = list[i]; + var constructor = this[name]; + var tmp = constructor.name; + if (tmp !== name) + throw "Bad value for "+name+".name: "+String(tmp); + instances[i] = new constructor(); + } + + for (var i = 0; i != instances.length; ++i) { + var instance = instances[i]; + var name = instance.name; + var constructor = instance.constructor; + var tmp = constructor.name; + if (constructor !== this[name]) + throw "Bad value of (new "+name+").constructor: "+String(tmp); + if (tmp !== name) + throw "Bad value for constructor.name: "+String(tmp); + if (!(instance instanceof Object)) + throw "Bad instanceof Object for "+name; + if (!(instance instanceof Error)) + throw "Bad instanceof Error for "+name; + if (!(instance instanceof constructor)) + throw "Bad instanceof constructor for "+name; + if (instance instanceof Function) + throw "Bad instanceof Function for "+name; + for (var j = 1; j != instances.length; ++j) { + if (i != j && instance instanceof instances[j].constructor) { + throw "Unexpected (new "+name+") instanceof "+ instances[j].name; + } + } + } + + print("OK"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/non262/Error/shell.js b/js/src/tests/non262/Error/shell.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/non262/Error/shell.js |