calendar-date-from-fields.js 8.88 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
// Copyright 2021 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-temporal

// https://tc39.es/proposal-temporal/#sec-temporal.calendar.prototype.datefromfields
let cal = new Temporal.Calendar("iso8601")

// Check throw for first arg
assertThrows(() => cal.dateFromFields(),
11
    TypeError);
12 13 14
[undefined, true, false, 123, 456n, Symbol(), "string",
 123.456, NaN, null].forEach(
    function(fields) {
15 16
      assertThrows(() => cal.dateFromFields(fields), TypeError);
      assertThrows(() => cal.dateFromFields(fields, undefined), TypeError);
17
      assertThrows(() => cal.dateFromFields(fields, {overflow: "constrain"}),
18
          TypeError);
19
      assertThrows(() => cal.dateFromFields(fields, {overflow: "reject"}),
20
          TypeError);
21 22
    });

23 24 25
assertThrows(() => cal.dateFromFields({month: 1, day: 17}), TypeError);
assertThrows(() => cal.dateFromFields({year: 2021, day: 17}), TypeError);
assertThrows(() => cal.dateFromFields({year: 2021, month: 12}), TypeError);
26 27

assertThrows(() => cal.dateFromFields({year: 2021, monthCode: "m1", day: 17}),
28
    RangeError);
29
assertThrows(() => cal.dateFromFields({year: 2021, monthCode: "M1", day: 17}),
30
    RangeError);
31
assertThrows(() => cal.dateFromFields({year: 2021, monthCode: "m01", day: 17}),
32
    RangeError);
33 34

assertThrows(() => cal.dateFromFields({year: 2021, month: 12, monthCode: "M11",
35
  day: 17}), RangeError);
36
assertThrows(() => cal.dateFromFields({year: 2021, monthCode: "M00", day: 17}),
37
    RangeError);
38
assertThrows(() => cal.dateFromFields({year: 2021, monthCode: "M19", day: 17}),
39
    RangeError);
40
assertThrows(() => cal.dateFromFields({year: 2021, monthCode: "M99", day: 17}),
41
    RangeError);
42
assertThrows(() => cal.dateFromFields({year: 2021, monthCode: "M13", day: 17}),
43
    RangeError);
44 45

assertThrows(() => cal.dateFromFields({year: 2021, month: -1, day: 17}),
46
    RangeError);
47
assertThrows(() => cal.dateFromFields({year: 2021, month: -Infinity, day: 17}),
48
    RangeError);
49
assertThrows(() => cal.dateFromFields({year: 2021, month: 7, day: -17}),
50
    RangeError);
51
assertThrows(() => cal.dateFromFields({year: 2021, month: 7, day: -Infinity}),
52
    RangeError);
53 54

assertThrows(() => cal.dateFromFields({year: 2021, month: 12, day: 0},
55
      {overflow: "reject"}), RangeError);
56
assertThrows(() => cal.dateFromFields({year: 2021, month: 12, day: 32},
57
      {overflow: "reject"}), RangeError);
58
assertThrows(() => cal.dateFromFields({year: 2021, month: 1, day: 32},
59
      {overflow: "reject"}), RangeError);
60
assertThrows(() => cal.dateFromFields({year: 2021, month: 2, day: 29},
61
      {overflow: "reject"}), RangeError);
62
assertThrows(() => cal.dateFromFields({year: 2021, month: 6, day: 31},
63
      {overflow: "reject"}), RangeError);
64
assertThrows(() => cal.dateFromFields({year: 2021, month: 9, day: 31},
65
      {overflow: "reject"}), RangeError);
66
assertThrows(() => cal.dateFromFields({year: 2021, month: 0, day: 5},
67
      {overflow: "reject"}), RangeError);
68
assertThrows(() => cal.dateFromFields({year: 2021, month: 13, day: 5},
69
      {overflow: "reject"}), RangeError);
70 71 72

assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M12", day: 0}, {overflow: "reject"}),
73
    RangeError);
74 75
assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M12", day: 32}, {overflow: "reject"}),
76
    RangeError);
77 78
assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M01", day: 32}, {overflow: "reject"}),
79
    RangeError);
80 81
assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M02", day: 29}, {overflow: "reject"}),
82
    RangeError);
83 84
assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M06", day: 31}, {overflow: "reject"}),
85
    RangeError);
86 87
assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M09", day: 31}, {overflow: "reject"}),
88
    RangeError);
89 90
assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M00", day: 5}, {overflow: "reject"}),
91
    RangeError);
92 93
assertThrows(() => cal.dateFromFields(
    {year: 2021, monthCode: "M13", day: 5}, {overflow: "reject"}),
94
    RangeError);
95 96

assertThrows(() => cal.dateFromFields(
97
    {year: 2021, month: 12, day: 0}), RangeError);
98
assertThrows(() => cal.dateFromFields(
99
    {year: 2021, month: 0, day: 3}), RangeError);
100 101 102 103

// Check throw for the second arg
assertThrows(() => cal.dateFromFields(
    {year: 2021, month: 7, day: 13}, {overflow: "invalid"}),
104
    RangeError);
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172

assertEquals("2021-07-15",
    cal.dateFromFields({year: 2021, month: 7, day: 15}).toJSON());
assertEquals("2021-07-03",
    cal.dateFromFields({year: 2021, month: 7, day: 3}).toJSON());
assertEquals("2021-12-31",
    cal.dateFromFields({year: 2021, month: 12, day: 31}).toJSON());
assertEquals("2021-07-15",
    cal.dateFromFields({year: 2021, monthCode: "M07", day: 15}).toJSON());
assertEquals("2021-07-03",
    cal.dateFromFields({year: 2021, monthCode: "M07", day: 3}).toJSON());
assertEquals("2021-12-31",
    cal.dateFromFields({year: 2021, monthCode: "M12", day: 31}).toJSON());

assertEquals("2021-01-31",
    cal.dateFromFields({year: 2021, month: 1, day: 133}).toJSON());
assertEquals("2021-02-28",
    cal.dateFromFields({year: 2021, month: 2, day: 133}).toJSON());
assertEquals("2021-03-31",
    cal.dateFromFields({year: 2021, month: 3, day: 9033}).toJSON());
assertEquals("2021-04-30",
    cal.dateFromFields({year: 2021, month: 4, day: 50}).toJSON());
assertEquals("2021-05-31",
    cal.dateFromFields({year: 2021, month: 5, day: 77}).toJSON());
assertEquals("2021-06-30",
    cal.dateFromFields({year: 2021, month: 6, day: 33}).toJSON());
assertEquals("2021-07-31",
    cal.dateFromFields({year: 2021, month: 7, day: 33}).toJSON());
assertEquals("2021-08-31",
    cal.dateFromFields({year: 2021, month: 8, day: 300}).toJSON());
assertEquals("2021-09-30",
    cal.dateFromFields({year: 2021, month: 9, day: 400}).toJSON());
assertEquals("2021-10-31",
    cal.dateFromFields({year: 2021, month: 10, day: 400}).toJSON());
assertEquals("2021-11-30",
    cal.dateFromFields({year: 2021, month: 11, day: 400}).toJSON());
assertEquals("2021-12-31",
    cal.dateFromFields({year: 2021, month: 12, day: 500}).toJSON());
assertEquals("2021-12-31",
    cal.dateFromFields({year: 2021, month: 13, day: 500}).toJSON());
assertEquals("2021-12-31",
    cal.dateFromFields({year: 2021, month: 999999, day: 500}).toJSON());
assertEquals("2021-01-31",
    cal.dateFromFields({year: 2021, monthCode: "M01", day: 133}).toJSON());
assertEquals("2021-02-28",
    cal.dateFromFields({year: 2021, monthCode: "M02", day: 133}).toJSON());
assertEquals("2021-03-31",
    cal.dateFromFields({year: 2021, monthCode: "M03", day: 9033}).toJSON());
assertEquals("2021-04-30",
    cal.dateFromFields({year: 2021, monthCode: "M04", day: 50}).toJSON());
assertEquals("2021-05-31",
    cal.dateFromFields({year: 2021, monthCode: "M05", day: 77}).toJSON());
assertEquals("2021-06-30",
    cal.dateFromFields({year: 2021, monthCode: "M06", day: 33}).toJSON());
assertEquals("2021-07-31",
    cal.dateFromFields({year: 2021, monthCode: "M07", day: 33}).toJSON());
assertEquals("2021-08-31",
    cal.dateFromFields({year: 2021, monthCode: "M08", day: 300}).toJSON());
assertEquals("2021-09-30",
    cal.dateFromFields({year: 2021, monthCode: "M09", day: 400}).toJSON());
assertEquals("2021-10-31",
    cal.dateFromFields({year: 2021, monthCode: "M10", day: 400}).toJSON());
assertEquals("2021-11-30",
    cal.dateFromFields({year: 2021, monthCode: "M11", day: 400}).toJSON());
assertEquals("2021-12-31",
    cal.dateFromFields({year: 2021, monthCode: "M12", day: 500}).toJSON());

assertThrows(() => cal.dateFromFields(
173
    {year: 2021, month: 1, day: 32}, {overflow: "reject"}), RangeError);
174
assertThrows(() => cal.dateFromFields(
175
    {year: 2021, month: 2, day: 29}, {overflow: "reject"}), RangeError);
176
assertThrows(() => cal.dateFromFields(
177
    {year: 2021, month: 3, day: 32}, {overflow: "reject"}), RangeError);
178
assertThrows(() => cal.dateFromFields(
179
    {year: 2021, month: 4, day: 31}, {overflow: "reject"}), RangeError);
180
assertThrows(() => cal.dateFromFields(
181
    {year: 2021, month: 5, day: 32}, {overflow: "reject"}), RangeError);
182
assertThrows(() => cal.dateFromFields(
183
    {year: 2021, month: 6, day: 31}, {overflow: "reject"}), RangeError);
184
assertThrows(() => cal.dateFromFields(
185
    {year: 2021, month: 7, day: 32}, {overflow: "reject"}), RangeError);
186
assertThrows(() => cal.dateFromFields(
187
    {year: 2021, month: 8, day: 32}, {overflow: "reject"}), RangeError);
188
assertThrows(() => cal.dateFromFields(
189
    {year: 2021, month: 9, day: 31}, {overflow: "reject"}), RangeError);
190
assertThrows(() => cal.dateFromFields(
191
    {year: 2021, month: 10, day: 32}, {overflow: "reject"}), RangeError);
192
assertThrows(() => cal.dateFromFields(
193
    {year: 2021, month: 11, day: 31}, {overflow: "reject"}), RangeError);
194
assertThrows(() => cal.dateFromFields(
195
    {year: 2021, month: 12, day: 32}, {overflow: "reject"}), RangeError);
196
assertThrows(() => cal.dateFromFields(
197
    {year: 2021, month: 13, day: 5}, {overflow: "reject"}), RangeError);