tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

order-of-operations.js (3128B)


      1 // |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally
      2 // Copyright (C) 2022 Igalia, S.L. All rights reserved.
      3 // This code is governed by the BSD license found in the LICENSE file.
      4 
      5 /*---
      6 esid: sec-temporal.zoneddatetime.from
      7 description: Properties on objects passed to from() are accessed in the correct order
      8 includes: [compareArray.js, temporalHelpers.js]
      9 features: [Temporal]
     10 ---*/
     11 
     12 const expectedOptionsReading = [
     13  // GetTemporalDisambiguationOption
     14  "get options.disambiguation",
     15  "get options.disambiguation.toString",
     16  "call options.disambiguation.toString",
     17  // GetTemporalOffsetOption
     18  "get options.offset",
     19  "get options.offset.toString",
     20  "call options.offset.toString",
     21  // GetTemporalOverflowOption
     22  "get options.overflow",
     23  "get options.overflow.toString",
     24  "call options.overflow.toString",
     25 ];
     26 
     27 const expected = [
     28  // ToTemporalCalendar
     29  "get item.calendar",
     30  // PrepareTemporalFields
     31  "get item.day",
     32  "get item.day.valueOf",
     33  "call item.day.valueOf",
     34  "get item.hour",
     35  "get item.hour.valueOf",
     36  "call item.hour.valueOf",
     37  "get item.microsecond",
     38  "get item.microsecond.valueOf",
     39  "call item.microsecond.valueOf",
     40  "get item.millisecond",
     41  "get item.millisecond.valueOf",
     42  "call item.millisecond.valueOf",
     43  "get item.minute",
     44  "get item.minute.valueOf",
     45  "call item.minute.valueOf",
     46  "get item.month",
     47  "get item.month.valueOf",
     48  "call item.month.valueOf",
     49  "get item.monthCode",
     50  "get item.monthCode.toString",
     51  "call item.monthCode.toString",
     52  "get item.nanosecond",
     53  "get item.nanosecond.valueOf",
     54  "call item.nanosecond.valueOf",
     55  "get item.offset",
     56  "get item.offset.toString",
     57  "call item.offset.toString",
     58  "get item.second",
     59  "get item.second.valueOf",
     60  "call item.second.valueOf",
     61  "get item.timeZone",
     62  "get item.year",
     63  "get item.year.valueOf",
     64  "call item.year.valueOf",
     65 ].concat(expectedOptionsReading);
     66 const actual = [];
     67 
     68 const from = TemporalHelpers.propertyBagObserver(actual, {
     69  year: 2001,
     70  month: 5,
     71  monthCode: "M05",
     72  day: 2,
     73  hour: 6,
     74  minute: 54,
     75  second: 32,
     76  millisecond: 987,
     77  microsecond: 654,
     78  nanosecond: 321,
     79  offset: "+00:00",
     80  calendar: "iso8601",
     81  timeZone: "UTC",
     82 }, "item", ["calendar", "timeZone"]);
     83 
     84 function createOptionsObserver({ overflow = "constrain", disambiguation = "compatible", offset = "reject" } = {}) {
     85  return TemporalHelpers.propertyBagObserver(actual, {
     86    overflow,
     87    disambiguation,
     88    offset,
     89    extra: "property",
     90  }, "options");
     91 }
     92 
     93 const options = createOptionsObserver();
     94 Temporal.ZonedDateTime.from(from, options);
     95 assert.compareArray(actual, expected, "order of operations");
     96 
     97 actual.splice(0);  // clear for next test
     98 
     99 Temporal.ZonedDateTime.from(new Temporal.ZonedDateTime(0n, "UTC"), options);
    100 assert.compareArray(actual, expectedOptionsReading, "order of operations when cloning a ZonedDateTime instance");
    101 
    102 actual.splice(0);
    103 
    104 Temporal.ZonedDateTime.from("2001-05-02T06:54:32.987654321+00:00[UTC]", options);
    105 assert.compareArray(actual, expectedOptionsReading, "order of operations when parsing a string");
    106 
    107 reportCompare(0, 0);