1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 13:37:44 +00:00

LibJS: Implement Temporal.Calendar.prototype.mergeFields()

This commit is contained in:
Linus Groh 2021-08-16 22:23:52 +01:00
parent 1ea604adb1
commit 1292d80b93
6 changed files with 173 additions and 0 deletions

View file

@ -0,0 +1,54 @@
describe("correct behavior", () => {
test("length is 2", () => {
expect(Temporal.Calendar.prototype.mergeFields).toHaveLength(2);
});
test("basic functionality", () => {
const calendar = new Temporal.Calendar("iso8601");
const fields = {};
const additionalFields = {};
const mergedFields = calendar.mergeFields(fields, additionalFields);
expect(mergedFields).not.toBe(fields);
expect(mergedFields).not.toBe(additionalFields);
expect(mergedFields).toEqual({});
expect(Object.getPrototypeOf(mergedFields)).toBe(Object.prototype);
expect(calendar.mergeFields({ foo: 1, bar: 1 }, { foo: 2 })).toEqual({ foo: 2, bar: 1 });
expect(calendar.mergeFields({ foo: 1 }, { foo: 2, bar: 2 })).toEqual({ foo: 2, bar: 2 });
expect(calendar.mergeFields({ foo: 1 }, { foo: 2, bar: 2 })).toEqual({ foo: 2, bar: 2 });
});
test("month and monthCode property handling", () => {
const calendar = new Temporal.Calendar("iso8601");
expect(calendar.mergeFields({ month: 1 }, { monthCode: 2 })).toEqual({ monthCode: 2 });
expect(calendar.mergeFields({ monthCode: 1 }, { month: 2 })).toEqual({ month: 2 });
expect(calendar.mergeFields({ month: 1, monthCode: 1 }, {})).toEqual({
month: 1,
monthCode: 1,
});
expect(
calendar.mergeFields({ month: 1, monthCode: 1 }, { month: 2, monthCode: 2 })
).toEqual({ month: 2, monthCode: 2 });
});
});
describe("errors", () => {
test("this value must be a Temporal.Calendar object", () => {
expect(() => {
Temporal.Calendar.prototype.mergeFields.call("foo");
}).toThrowWithMessage(TypeError, "Not a Temporal.Calendar");
});
test("fields argument must be coercible to object", () => {
const calendar = new Temporal.Calendar("iso8601");
expect(() => {
calendar.mergeFields(null, {});
}).toThrowWithMessage(TypeError, "ToObject on null or undefined");
});
test("additionalFields argument must be coercible to object", () => {
const calendar = new Temporal.Calendar("iso8601");
expect(() => {
calendar.mergeFields({}, null);
}).toThrowWithMessage(TypeError, "ToObject on null or undefined");
});
});