| // 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'); |