Skip to content
Open
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
10 changes: 9 additions & 1 deletion polyfill/test/thorough/all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,32 @@ there_were_errors=0
for test in \
dateaddition \
datedifference \
dateroundtrip \
datetimeaddition \
datetimedifference \
datetimerounding \
datetimeroundtrip \
durationaddition \
durationroundtrip \
gregorian \
instantaddition \
instantdifference \
instantrounding \
instantroundtrip \
monthdayroundtrip \
startofday \
timeaddition \
timedifference \
timerounding \
timeroundtrip \
yearcycle \
yearmonthaddition \
yearmonthdifference \
yearmonthroundtrip \
zonedaddition \
zoneddifference \
zonedrounding
zonedrounding \
zonedroundtrip
do
echo "== Running $test.mjs =="
$interpreter "$test.mjs" || there_were_errors=1
Expand Down
83,442 changes: 23,841 additions & 59,601 deletions polyfill/test/thorough/dateaddition.snapshot.json

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions polyfill/test/thorough/dateroundtrip.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { assertTemporalEqual, getProgressBar, makeDateCases, temporalImpl as T, time } from './support.mjs';

const opts = { overflow: 'reject' };
const interestingDates = makeDateCases();
const total = interestingDates.length;

await time(async (start) => {
const progress = getProgressBar(start, total);

for (const [date, dateStr] of interestingDates) {
progress.tick(1, { test: dateStr });

const { year, month, monthCode, day } = date;

const propertyBagMonth = { year, month, day };
assertTemporalEqual(T.PlainDate.from(propertyBagMonth, opts), date, 'from property bag with month');

const propertyBagMonthCode = { year, monthCode, day };
assertTemporalEqual(T.PlainDate.from(propertyBagMonthCode, opts), date, 'from property bag with monthCode');

const propertyBagAll = { year, month, monthCode, day };
assertTemporalEqual(T.PlainDate.from(propertyBagAll, opts), date, 'from property bag with month and monthCode');

assertTemporalEqual(T.PlainDate.from(dateStr), date, 'from ISO string');

const stringCalendar = date.toString({ calendarName: 'always' });
assertTemporalEqual(T.PlainDate.from(stringCalendar), date, 'from ISO string with calendar');

const stringTime = date.toPlainDateTime({ hour: 12 }).toString();
assertTemporalEqual(T.PlainDate.from(stringTime), date, 'from ISO string with time');

const yPart = `${year < 0 ? '-' : '+'}${String(Math.abs(year)).padStart(6, '0')}`;
const monPart = String(month).padStart(2, '0');
const dPart = String(day).padStart(2, '0');
const weirdString = `${yPart}${monPart}${dPart} 123456,7+1234`;
assertTemporalEqual(T.PlainDate.from(weirdString), date, 'from ISO string with weird but allowed formatting');
}

return total;
});
85,962 changes: 24,561 additions & 61,401 deletions polyfill/test/thorough/datetimeaddition.snapshot.json

Large diffs are not rendered by default.

51 changes: 51 additions & 0 deletions polyfill/test/thorough/datetimeroundtrip.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { assertTemporalEqual, getProgressBar, makeDateTimeCases, temporalImpl as T, time } from './support.mjs';

const opts = { overflow: 'reject' };
const interestingDateTimes = makeDateTimeCases();
const total = interestingDateTimes.length;

await time(async (start) => {
const progress = getProgressBar(start, total);

for (const [dateTime, dateTimeStr] of interestingDateTimes) {
progress.tick(1, { test: dateTimeStr });

const { year, month, monthCode, day, hour, minute, second, millisecond, microsecond, nanosecond } = dateTime;

const propertyBagMonth = { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };
assertTemporalEqual(T.PlainDateTime.from(propertyBagMonth, opts), dateTime, 'from property bag with month');

const propertyBagMonthCode = { year, monthCode, day, hour, minute, second, millisecond, microsecond, nanosecond };
assertTemporalEqual(T.PlainDateTime.from(propertyBagMonthCode, opts), dateTime, 'from property bag with monthCode');

const propertyBagAll = { year, month, monthCode, day, hour, minute, second, millisecond, microsecond, nanosecond };
assertTemporalEqual(
T.PlainDateTime.from(propertyBagAll, opts),
dateTime,
'from property bag with month and monthCode'
);

assertTemporalEqual(T.PlainDateTime.from(dateTimeStr), dateTime, 'from ISO string');

const stringCalendar = dateTime.toString({ calendarName: 'always' });
assertTemporalEqual(T.PlainDateTime.from(stringCalendar), dateTime, 'from ISO string with calendar');

const yPart = `${year < 0 ? '-' : '+'}${String(Math.abs(year)).padStart(6, '0')}`;
const monPart = String(month).padStart(2, '0');
const dPart = String(day).padStart(2, '0');
const hPart = String(hour).padStart(2, '0');
const minPart = String(minute).padStart(2, '0');
const sPart = String(second).padStart(2, '0');
const msPart = String(millisecond).padStart(3, '0');
const µsPart = String(microsecond).padStart(3, '0');
const nsPart = String(nanosecond).padStart(3, '0');
const weirdString = `${yPart}${monPart}${dPart} ${hPart}${minPart}${sPart},${msPart}${µsPart}${nsPart}+1234`;
assertTemporalEqual(
T.PlainDateTime.from(weirdString),
dateTime,
'from ISO string with weird but allowed formatting'
);
}

return total;
});
Loading