mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-04 14:58:37 +09:00
Bug 1318017: Call GetPrototypeFromConstructor for generator/async function and Intl constructors
[Depends on] Bug 755821: Function() should use the parser's argument parsing code
This commit is contained in:
parent
093e83da1a
commit
e7fdd26fde
11 changed files with 586 additions and 53 deletions
81
js/src/tests/Intl/DateTimeFormat/construct-newtarget.js
Normal file
81
js/src/tests/Intl/DateTimeFormat/construct-newtarget.js
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
// |reftest| skip-if(!this.hasOwnProperty("Intl"))
|
||||
|
||||
/* 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/. */
|
||||
|
||||
|
||||
// Test subclassing %Intl.DateTimeFormat% works correctly.
|
||||
class MyDateTimeFormat extends Intl.DateTimeFormat {}
|
||||
|
||||
var obj = new MyDateTimeFormat();
|
||||
assertEq(obj instanceof MyDateTimeFormat, true);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, true);
|
||||
assertEq(Object.getPrototypeOf(obj), MyDateTimeFormat.prototype);
|
||||
|
||||
obj = Reflect.construct(MyDateTimeFormat, []);
|
||||
assertEq(obj instanceof MyDateTimeFormat, true);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, true);
|
||||
assertEq(Object.getPrototypeOf(obj), MyDateTimeFormat.prototype);
|
||||
|
||||
obj = Reflect.construct(MyDateTimeFormat, [], MyDateTimeFormat);
|
||||
assertEq(obj instanceof MyDateTimeFormat, true);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, true);
|
||||
assertEq(Object.getPrototypeOf(obj), MyDateTimeFormat.prototype);
|
||||
|
||||
obj = Reflect.construct(MyDateTimeFormat, [], Intl.DateTimeFormat);
|
||||
assertEq(obj instanceof MyDateTimeFormat, false);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, true);
|
||||
assertEq(Object.getPrototypeOf(obj), Intl.DateTimeFormat.prototype);
|
||||
|
||||
|
||||
// Set a different constructor as NewTarget.
|
||||
obj = Reflect.construct(MyDateTimeFormat, [], Array);
|
||||
assertEq(obj instanceof MyDateTimeFormat, false);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, false);
|
||||
assertEq(obj instanceof Array, true);
|
||||
assertEq(Object.getPrototypeOf(obj), Array.prototype);
|
||||
|
||||
obj = Reflect.construct(Intl.DateTimeFormat, [], Array);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, false);
|
||||
assertEq(obj instanceof Array, true);
|
||||
assertEq(Object.getPrototypeOf(obj), Array.prototype);
|
||||
|
||||
|
||||
// The prototype defaults to %DateTimeFormatPrototype% if null.
|
||||
function NewTargetNullPrototype() {}
|
||||
NewTargetNullPrototype.prototype = null;
|
||||
|
||||
obj = Reflect.construct(Intl.DateTimeFormat, [], NewTargetNullPrototype);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, true);
|
||||
assertEq(Object.getPrototypeOf(obj), Intl.DateTimeFormat.prototype);
|
||||
|
||||
obj = Reflect.construct(MyDateTimeFormat, [], NewTargetNullPrototype);
|
||||
assertEq(obj instanceof MyDateTimeFormat, false);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, true);
|
||||
assertEq(Object.getPrototypeOf(obj), Intl.DateTimeFormat.prototype);
|
||||
|
||||
|
||||
// "prototype" property is retrieved exactly once.
|
||||
var trapLog = [], getLog = [];
|
||||
var ProxiedConstructor = new Proxy(Intl.DateTimeFormat, new Proxy({
|
||||
get(target, propertyKey, receiver) {
|
||||
getLog.push(propertyKey);
|
||||
return Reflect.get(target, propertyKey, receiver);
|
||||
}
|
||||
}, {
|
||||
get(target, propertyKey, receiver) {
|
||||
trapLog.push(propertyKey);
|
||||
return Reflect.get(target, propertyKey, receiver);
|
||||
}
|
||||
}));
|
||||
|
||||
obj = Reflect.construct(Intl.DateTimeFormat, [], ProxiedConstructor);
|
||||
assertEqArray(trapLog, ["get"]);
|
||||
assertEqArray(getLog, ["prototype"]);
|
||||
assertEq(obj instanceof Intl.DateTimeFormat, true);
|
||||
assertEq(Object.getPrototypeOf(obj), Intl.DateTimeFormat.prototype);
|
||||
|
||||
|
||||
if (typeof reportCompare === "function")
|
||||
reportCompare(0, 0);
|
||||
Loading…
Add table
Add a link
Reference in a new issue