text: // 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.zoneddatetime
  description: Observable interactions with the provided timezone-like object
  includes: [compareArray.js]
  features: [BigInt, Proxy, Temporal]
  ---*/
  const actual = [];
  
  const expected = [
    'has timeZone.timeZone',
    'get timeZone.timeZone',
    'has nestedTimeZone.timeZone'
  ];
  
  const nestedTimeZone = new Proxy({
    getOffsetNanosecondsFor(instant) {
      actual.push('call nestedTimeZone.getOffsetNanosecondsFor');
  
      assert.sameValue(
        instant instanceof Temporal.Instant,
        true,
        'The result of evaluating (instant instanceof Temporal.Instant) is expected to be true'
      );
  
      return -Number(instant.epochNanoseconds % 86400000000000n);
    }
  }, {
    has(target, property) {
      actual.push(`has nestedTimeZone.${String(property)}`);
      return property in target;
    },
  
    get(target, property) {
      actual.push(`get nestedTimeZone.${String(property)}`);
      return target[property];
    }
  });
  
  const timeZone = new Proxy({
    timeZone: nestedTimeZone,
  
    getOffsetNanosecondsFor(instant) {
      actual.push('call timeZone.getOffsetNanosecondsFor');
  
      assert.sameValue(
        instant instanceof Temporal.Instant,
        true,
        'The result of evaluating (instant instanceof Temporal.Instant) is expected to be true'
      );
  
      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.TimeZone, 'from', {
    get() {
      actual.push('get Temporal.TimeZone.from');
      return undefined;
    }
  });
  
  Temporal.Now.zonedDateTimeISO(timeZone);
  assert.compareArray(actual, expected, 'The value of actual is expected to equal the value of expected');
  