blob: 4a0045c25ec40fd678881c19d7bad4f112ae8439 [file] [log] [blame]
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.now.plaindatetime
description: Behavior when provided calendar value is a function
includes: [compareArray.js]
features: [BigInt, Proxy, Temporal]
---*/
const actual = [];
const expected = [
'has timeZone.timeZone',
'get timeZone.getOffsetNanosecondsFor',
'call timeZone.getOffsetNanosecondsFor'
];
const calendar = function() {};
const timeZone = new Proxy({
getOffsetNanosecondsFor(instant) {
actual.push('call timeZone.getOffsetNanosecondsFor');
return -Number(instant.epochNanoseconds % 86400000000000n);
}
}, {
has(target, property) {
actual.push(`has timeZone.${property}`);
return property in target;
},
get(target, property) {
actual.push(`get timeZone.${property}`);
return target[property];
}
});
Object.defineProperty(Temporal.Calendar, 'from', {
get() {
actual.push('get Temporal.Calendar.from');
return undefined;
}
});
const result = Temporal.Now.plainDateTime(calendar, timeZone);
for (const property of ['hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond']) {
assert.sameValue(result[property], 0, 'The value of result[property] is expected to be 0');
}
assert.compareArray(actual, expected, 'The value of actual is expected to equal the value of expected');