Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Temporal: Tests for week-numbering algorithm #4009

Merged
merged 2 commits into from
Feb 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.calendar.prototype.weekofyear
description: >
Temporal.Calendar.prototype.weekOfYear returns undefined for all
custom calendars where weekOfYear() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
weekOfYear() {
return undefined;
}
}

const calendar = new CustomCalendar();
const customCalendarDate = { month: 1, day: 1, year: 2024, calendar};
assert.sameValue(calendar.weekOfYear({...customCalendarDate}), undefined);
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.calendar.prototype.yearofweek
description: >
Temporal.Calendar.prototype.yearOfWeek returns undefined for all
custom calendars where yearOfWeek() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
yearOfWeek() {
return undefined;
}
}

const calendar = new CustomCalendar();
const customCalendarDate = { month: 1, day: 1, year: 2024, calendar};
assert.sameValue(calendar.yearOfWeek({...customCalendarDate}), undefined);
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindate.prototype.weekofyear
description: >
Temporal.PlainDate.prototype.weekOfYear returns undefined for all
custom calendars where weekOfYear() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
weekOfYear() {
return undefined;
}
}

const calendar = new CustomCalendar();
const customCalendarDate = new Temporal.PlainDate(2024, 1, 1, calendar);
assert.sameValue(customCalendarDate.weekOfYear, undefined);
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ features: [Temporal]
---*/

const badResults = [
[undefined, TypeError],
[null, TypeError],
[false, TypeError],
[Infinity, RangeError],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindate.prototype.yearofweek
description: >
Temporal.PlainDate.prototype.yearOfWeek returns undefined for all
custom calendars where yearOfWeek() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
yearOfWeek() {
return undefined;
}
}

const calendar = new CustomCalendar();
const customCalendarDate = new Temporal.PlainDate(2024, 1, 1, calendar);
assert.sameValue(customCalendarDate.yearOfWeek, undefined);
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ features: [Temporal]
---*/

const badResults = [
[undefined, TypeError],
[Infinity, RangeError],
[-Infinity, RangeError],
[Symbol("foo"), TypeError],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindatetime.prototype.weekofyear
description: >
Temporal.PlainDateTime.prototype.weekOfYear returns undefined for all
custom calendars where weekOfYear() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
weekOfYear() {
return undefined;
}
}

const calendar = new CustomCalendar();
const customCalendarDate = new Temporal.PlainDateTime(2024, 1, 1, 12, 34, 56, 987, 654, 321, calendar);
assert.sameValue(customCalendarDate.weekOfYear, undefined);
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ features: [Temporal]
---*/

const badResults = [
[undefined, TypeError],
[null, TypeError],
[false, TypeError],
[Infinity, RangeError],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindatetime.prototype.yearofweek
description: >
Temporal.PlainDateTime.prototype.yearOfWeek returns undefined for all
custom calendars where yearOfWeek() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
yearOfWeek() {
return undefined;
}
}

const calendar = new CustomCalendar();
const customCalendarDate = new Temporal.PlainDateTime(2024, 1, 1, 12, 34, 56, 987, 654, 321, calendar);
assert.sameValue(customCalendarDate.yearOfWeek, undefined);
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ features: [Temporal]
---*/

const badResults = [
[undefined, TypeError],
[Infinity, RangeError],
[-Infinity, RangeError],
[Symbol("foo"), TypeError],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.zoneddatetime.prototype.weekofyear
description: >
Temporal.ZonedDateTime.prototype.weekOfYear returns undefined for all
custom calendars where weekOfYear() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
weekOfYear() {
return undefined;
}
}

const calendar = new CustomCalendar();
// Epoch Nanoseconds for new Temporal.PlainDateTime(2024, 1, 1, 12, 34, 56, 987, 654, 321, calendar);
const customCalendarDate = new Temporal.ZonedDateTime(1_704_112_496_987_654_321n, "UTC", calendar);
assert.sameValue(customCalendarDate.weekOfYear, undefined);
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ features: [Temporal]
---*/

const badResults = [
[undefined, TypeError],
[null, TypeError],
[false, TypeError],
[Infinity, RangeError],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.zoneddatetime.prototype.yearofweek
description: >
Temporal.ZonedDateTime.prototype.yearOfWeek returns undefined for all
custom calendars where yearOfWeek() returns undefined.
features: [Temporal]
---*/

class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
yearOfWeek() {
return undefined;
}
}

const calendar = new CustomCalendar();
// Epoch Nanoseconds for new Temporal.PlainDateTime(2024, 1, 1, 12, 34, 56, 987, 654, 321, calendar);
const customCalendarDate = new Temporal.ZonedDateTime(1_704_112_496_987_654_321n, "UTC", calendar);
assert.sameValue(customCalendarDate.yearOfWeek, undefined);
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ features: [Temporal]
---*/

const badResults = [
[undefined, TypeError],
[Infinity, RangeError],
[-Infinity, RangeError],
[Symbol("foo"), TypeError],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.calendar.prototype.weekofyear
description: >
In the ISO 8601 week calendar, calendar week number 1 of a calendar year is
the week including the first Thursday of that year (based on the principle
that a week belongs to the same calendar year as the majority of its calendar
days). Because of this, some calendar days of the first calendar week of a
calendar year may be part of the preceding date calendar year, and some
calendar days of the last calendar week of a calendar year may be part of
the next calendar year.
features: [Temporal]
---*/

//

let calendar = new Temporal.Calendar("gregory");
const date = { month: 1, day: 1, year: 2021, calendar};

assert.sameValue(calendar.weekOfYear({...date}), 1);

calendar = new Temporal.Calendar("iso8601");
const isodate = { month: 1, day: 1, year: 2021, calendar};

assert.sameValue(calendar.weekOfYear({...isodate}), 53);
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.calendar.prototype.weekofyear
description: >
Temporal.Calendar.prototype.weekOfYear returns undefined for all
non-ISO calendars without a well-defined week numbering system.
features: [Temporal]
---*/

// Gregorian calendar has a well defined week-numbering system.

let calendar = new Temporal.Calendar("gregory");
const date = { month: 1, day: 1, year: 2024, calendar};

assert.sameValue(calendar.weekOfYear({...date}), 1);

calendar = new Temporal.Calendar("hebrew");
const nonisodate = { month: 1, day: 1, year: 2024, calendar};

assert.sameValue(calendar.weekOfYear({...nonisodate}), undefined);
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.calendar.prototype.yearofweek
description: >
In the ISO 8601 week calendar, calendar week number 1 of a calendar year is
the week including the first Thursday of that year (based on the principle
that a week belongs to the same calendar year as the majority of its calendar
days). Because of this, some calendar days of the first calendar week of a
calendar year may be part of the preceding date calendar year, and some
calendar days of the last calendar week of a calendar year may be part of
the next calendar year.
features: [Temporal]
---*/

//

let calendar = new Temporal.Calendar("gregory");
const date = { month: 1, day: 1, year: 2021, calendar};

assert.sameValue(calendar.yearOfWeek({...date}), 2021);

calendar = new Temporal.Calendar("iso8601");
const isodate = { month: 1, day: 1, year: 2021, calendar};

assert.sameValue(calendar.yearOfWeek({...isodate}), 2020);
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.calendar.prototype.yearofweek
description: >
Temporal.Calendar.prototype.yearOfWeek returns undefined for all
non-ISO calendars without a well-defined week numbering system.
features: [Temporal]
---*/

// Gregorian calendar has a well defined week-numbering system.

let calendar = new Temporal.Calendar("gregory");
const date = { month: 1, day: 1, year: 2024, calendar};

assert.sameValue(calendar.yearOfWeek({...date}), 2024);

calendar = new Temporal.Calendar("hebrew");
const nonisodate = { month: 1, day: 1, year: 2024, calendar};

assert.sameValue(calendar.yearOfWeek({...nonisodate}), undefined);
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindate.prototype.weekofyear
description: >
In the ISO 8601 week calendar, calendar week number 1 of a calendar year is
the week including the first Thursday of that year (based on the principle
that a week belongs to the same calendar year as the majority of its calendar
days). Because of this, some calendar days of the first calendar week of a
calendar year may be part of the preceding date calendar year, and some
calendar days of the last calendar week of a calendar year may be part of
the next calendar year.
features: [Temporal]
---*/

//

let calendar = new Temporal.Calendar("gregory");
const date = new Temporal.PlainDate(2021, 1, 1, calendar);

assert.sameValue(date.weekOfYear, 1);

calendar = new Temporal.Calendar("iso8601");
const isodate = new Temporal.PlainDate(2021, 1, 1, calendar);

assert.sameValue(isodate.weekOfYear, 53);
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindate.prototype.weekofyear
description: >
Temporal.PlainDate.prototype.weekOfYear returns undefined for all
non-ISO calendars without a well-defined week numbering system.
features: [Temporal]
---*/

// Gregorian calendar has a well defined week-numbering system.

let calendar = new Temporal.Calendar("gregory");
const date = new Temporal.PlainDate(2024, 1, 1, calendar);

assert.sameValue(date.weekOfYear, 1);

calendar = new Temporal.Calendar("hebrew");
const nonisodate = new Temporal.PlainDate(2024, 1, 1, calendar);

assert.sameValue(nonisodate.weekOfYear, undefined);
Loading
Loading