mirror of https://github.com/tc39/test262.git
Temporal: Test observable calendar.mergeFields() calls with null-prototype objects
As of https://github.com/tc39/proposal-temporal/pull/2219 the arguments to the calendar.mergeFields() methods should be null-prototype objects when called from with() and toPlainDate() methods. This adds tests for that behaviour.
This commit is contained in:
parent
f314ecb9f4
commit
f6179a6eb6
|
@ -933,6 +933,32 @@ var TemporalHelpers = {
|
||||||
return new CalendarCheckFieldsPrototypePollution();
|
return new CalendarCheckFieldsPrototypePollution();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A custom calendar used in prototype pollution checks. Verifies that the
|
||||||
|
* mergeFields() method is always called with null-prototype fields objects.
|
||||||
|
*/
|
||||||
|
calendarCheckMergeFieldsPrototypePollution() {
|
||||||
|
class CalendarCheckMergeFieldsPrototypePollution extends Temporal.Calendar {
|
||||||
|
constructor() {
|
||||||
|
super("iso8601");
|
||||||
|
this.mergeFieldsCallCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
toString() {
|
||||||
|
return "merge-fields-null-proto";
|
||||||
|
}
|
||||||
|
|
||||||
|
mergeFields(fields, additionalFields) {
|
||||||
|
this.mergeFieldsCallCount++;
|
||||||
|
assert.sameValue(Object.getPrototypeOf(fields), null, "mergeFields should be called with null-prototype fields object (first argument)");
|
||||||
|
assert.sameValue(Object.getPrototypeOf(additionalFields), null, "mergeFields should be called with null-prototype fields object (second argument)");
|
||||||
|
return super.mergeFields(fields, additionalFields);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CalendarCheckMergeFieldsPrototypePollution();
|
||||||
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A custom calendar used in prototype pollution checks. Verifies that methods
|
* A custom calendar used in prototype pollution checks. Verifies that methods
|
||||||
* are always called with a null-prototype options object.
|
* are always called with a null-prototype options object.
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plaindate.prototype.with
|
||||||
|
description: >
|
||||||
|
Calendar.mergeFields method is called with null-prototype fields objects
|
||||||
|
includes: [temporalHelpers.js]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const calendar = TemporalHelpers.calendarCheckMergeFieldsPrototypePollution();
|
||||||
|
const instance = new Temporal.PlainDate(2000, 5, 2, calendar);
|
||||||
|
instance.with({ day: 24 });
|
||||||
|
assert.sameValue(calendar.mergeFieldsCallCount, 1, "mergeFields should have been called on the calendar");
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plaindatetime.prototype.with
|
||||||
|
description: >
|
||||||
|
Calendar.mergeFields method is called with null-prototype fields objects
|
||||||
|
includes: [temporalHelpers.js]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const calendar = TemporalHelpers.calendarCheckMergeFieldsPrototypePollution();
|
||||||
|
const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar);
|
||||||
|
instance.with({ day: 24 });
|
||||||
|
assert.sameValue(calendar.mergeFieldsCallCount, 1, "mergeFields should have been called on the calendar");
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plainmonthday.prototype.toplaindate
|
||||||
|
description: >
|
||||||
|
Calendar.mergeFields method is called with null-prototype fields objects
|
||||||
|
includes: [temporalHelpers.js]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const calendar = TemporalHelpers.calendarCheckMergeFieldsPrototypePollution();
|
||||||
|
const instance = new Temporal.PlainMonthDay(5, 2, calendar);
|
||||||
|
instance.toPlainDate({ year: 2019 });
|
||||||
|
assert.sameValue(calendar.mergeFieldsCallCount, 1, "mergeFields should have been called on the calendar");
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plainmonthday.prototype.with
|
||||||
|
description: >
|
||||||
|
Calendar.mergeFields method is called with null-prototype fields objects
|
||||||
|
includes: [temporalHelpers.js]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const calendar = TemporalHelpers.calendarCheckMergeFieldsPrototypePollution();
|
||||||
|
const instance = new Temporal.PlainMonthDay(5, 2, calendar);
|
||||||
|
instance.with({ day: 24 });
|
||||||
|
assert.sameValue(calendar.mergeFieldsCallCount, 1, "mergeFields should have been called on the calendar");
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plainyearmonth.prototype.toplaindate
|
||||||
|
description: >
|
||||||
|
Calendar.mergeFields method is called with null-prototype fields objects
|
||||||
|
includes: [temporalHelpers.js]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const calendar = TemporalHelpers.calendarCheckMergeFieldsPrototypePollution();
|
||||||
|
const instance = new Temporal.PlainYearMonth(2000, 5, calendar);
|
||||||
|
instance.toPlainDate({ day: 24 });
|
||||||
|
assert.sameValue(calendar.mergeFieldsCallCount, 1, "mergeFields should have been called on the calendar");
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plainyearmonth.prototype.with
|
||||||
|
description: >
|
||||||
|
Calendar.mergeFields method is called with null-prototype fields objects
|
||||||
|
includes: [temporalHelpers.js]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const calendar = TemporalHelpers.calendarCheckMergeFieldsPrototypePollution();
|
||||||
|
const instance = new Temporal.PlainYearMonth(2000, 5, calendar);
|
||||||
|
instance.with({ year: 2019 });
|
||||||
|
assert.sameValue(calendar.mergeFieldsCallCount, 1, "mergeFields should have been called on the calendar");
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.zoneddatetime.prototype.with
|
||||||
|
description: >
|
||||||
|
Calendar.mergeFields method is called with null-prototype fields objects
|
||||||
|
includes: [temporalHelpers.js]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const calendar = TemporalHelpers.calendarCheckMergeFieldsPrototypePollution();
|
||||||
|
const instance = new Temporal.ZonedDateTime(0n, "UTC", calendar);
|
||||||
|
instance.with({ day: 24 });
|
||||||
|
assert.sameValue(calendar.mergeFieldsCallCount, 1, "mergeFields should have been called on the calendar");
|
Loading…
Reference in New Issue