ZonedDateTime.from.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. describe("correct behavior", () => {
  2. test("length is 1", () => {
  3. expect(Temporal.ZonedDateTime.from).toHaveLength(1);
  4. });
  5. test("ZonedDateTime instance argument", () => {
  6. const timeZone = new Temporal.TimeZone("UTC");
  7. const calendar = new Temporal.Calendar("iso8601");
  8. const zonedDateTime = new Temporal.ZonedDateTime(1627318123456789000n, timeZone, calendar);
  9. const createdZoneDateTime = Temporal.ZonedDateTime.from(zonedDateTime);
  10. expect(createdZoneDateTime).toBeInstanceOf(Temporal.ZonedDateTime);
  11. expect(createdZoneDateTime).not.toBe(zonedDateTime);
  12. expect(createdZoneDateTime.timeZone).toBe(timeZone);
  13. expect(createdZoneDateTime.calendar).toBe(calendar);
  14. expect(createdZoneDateTime.epochNanoseconds).toBe(1627318123456789000n);
  15. });
  16. test("PlainDate instance argument", () => {
  17. const timeZone = new Temporal.TimeZone("UTC");
  18. const calendar = new Temporal.Calendar("iso8601");
  19. const plainDate = new Temporal.PlainDate(2021, 11, 7, calendar);
  20. plainDate.timeZone = timeZone;
  21. const createdZoneDateTime = Temporal.ZonedDateTime.from(plainDate);
  22. expect(createdZoneDateTime).toBeInstanceOf(Temporal.ZonedDateTime);
  23. expect(createdZoneDateTime.timeZone).toBe(timeZone);
  24. expect(createdZoneDateTime.calendar).toBe(calendar);
  25. expect(createdZoneDateTime.year).toBe(2021);
  26. expect(createdZoneDateTime.month).toBe(11);
  27. expect(createdZoneDateTime.day).toBe(7);
  28. });
  29. test("PlainDateTime instance argument", () => {
  30. const timeZone = new Temporal.TimeZone("UTC");
  31. const calendar = new Temporal.Calendar("iso8601");
  32. const plainDateTime = new Temporal.PlainDateTime(
  33. 2021,
  34. 11,
  35. 7,
  36. 0,
  37. 20,
  38. 5,
  39. 100,
  40. 200,
  41. 300,
  42. calendar
  43. );
  44. plainDateTime.timeZone = timeZone;
  45. const createdZoneDateTime = Temporal.ZonedDateTime.from(plainDateTime);
  46. expect(createdZoneDateTime).toBeInstanceOf(Temporal.ZonedDateTime);
  47. expect(createdZoneDateTime.timeZone).toBe(timeZone);
  48. expect(createdZoneDateTime.calendar).toBe(calendar);
  49. expect(createdZoneDateTime.year).toBe(2021);
  50. expect(createdZoneDateTime.month).toBe(11);
  51. expect(createdZoneDateTime.day).toBe(7);
  52. expect(createdZoneDateTime.hour).toBe(0);
  53. expect(createdZoneDateTime.minute).toBe(20);
  54. expect(createdZoneDateTime.second).toBe(5);
  55. expect(createdZoneDateTime.millisecond).toBe(100);
  56. expect(createdZoneDateTime.microsecond).toBe(200);
  57. expect(createdZoneDateTime.nanosecond).toBe(300);
  58. });
  59. test("ZonedDateTime-like argument", () => {
  60. const timeZone = new Temporal.TimeZone("UTC");
  61. const calendar = new Temporal.Calendar("iso8601");
  62. const zdtLike = {
  63. timeZone,
  64. calendar,
  65. year: 2021,
  66. month: 11,
  67. day: 7,
  68. hour: 0,
  69. minute: 20,
  70. second: 5,
  71. millisecond: 100,
  72. microsecond: 200,
  73. nanosecond: 300,
  74. };
  75. const createdZoneDateTime = Temporal.ZonedDateTime.from(zdtLike);
  76. expect(createdZoneDateTime).toBeInstanceOf(Temporal.ZonedDateTime);
  77. expect(createdZoneDateTime.timeZone).toBe(timeZone);
  78. expect(createdZoneDateTime.calendar).toBe(calendar);
  79. expect(createdZoneDateTime.year).toBe(2021);
  80. expect(createdZoneDateTime.month).toBe(11);
  81. expect(createdZoneDateTime.day).toBe(7);
  82. expect(createdZoneDateTime.hour).toBe(0);
  83. expect(createdZoneDateTime.minute).toBe(20);
  84. expect(createdZoneDateTime.second).toBe(5);
  85. expect(createdZoneDateTime.millisecond).toBe(100);
  86. expect(createdZoneDateTime.microsecond).toBe(200);
  87. expect(createdZoneDateTime.nanosecond).toBe(300);
  88. });
  89. test("from string", () => {
  90. const zonedDateTime = Temporal.ZonedDateTime.from(
  91. "2021-11-07T00:20:05.100200300+00:00[UTC][u-ca=iso8601]"
  92. );
  93. expect(zonedDateTime).toBeInstanceOf(Temporal.ZonedDateTime);
  94. expect(zonedDateTime.timeZone).toBeInstanceOf(Temporal.TimeZone);
  95. expect(zonedDateTime.timeZone.id).toBe("UTC");
  96. expect(zonedDateTime.calendar).toBeInstanceOf(Temporal.Calendar);
  97. expect(zonedDateTime.calendar.id).toBe("iso8601");
  98. expect(zonedDateTime.year).toBe(2021);
  99. expect(zonedDateTime.month).toBe(11);
  100. expect(zonedDateTime.day).toBe(7);
  101. expect(zonedDateTime.hour).toBe(0);
  102. expect(zonedDateTime.minute).toBe(20);
  103. expect(zonedDateTime.second).toBe(5);
  104. expect(zonedDateTime.millisecond).toBe(100);
  105. expect(zonedDateTime.microsecond).toBe(200);
  106. expect(zonedDateTime.nanosecond).toBe(300);
  107. expect(zonedDateTime.offset).toBe("+00:00");
  108. expect(zonedDateTime.offsetNanoseconds).toBe(0);
  109. });
  110. });
  111. describe("errors", () => {
  112. test("requires timeZone property", () => {
  113. expect(() => {
  114. Temporal.ZonedDateTime.from({});
  115. }).toThrowWithMessage(TypeError, "Required property timeZone is missing or undefined");
  116. });
  117. test("requires year property", () => {
  118. expect(() => {
  119. Temporal.ZonedDateTime.from({ timeZone: new Temporal.TimeZone("UTC") });
  120. }).toThrowWithMessage(TypeError, "Required property year is missing or undefined");
  121. });
  122. test("requires month property", () => {
  123. expect(() => {
  124. Temporal.ZonedDateTime.from({ timeZone: new Temporal.TimeZone("UTC"), year: 2021 });
  125. }).toThrowWithMessage(TypeError, "Required property month is missing or undefined");
  126. });
  127. test("requires day property", () => {
  128. expect(() => {
  129. Temporal.ZonedDateTime.from({
  130. timeZone: new Temporal.TimeZone("UTC"),
  131. year: 2021,
  132. month: 11,
  133. });
  134. }).toThrowWithMessage(TypeError, "Required property day is missing or undefined");
  135. });
  136. test("invalid zoned date time string", () => {
  137. expect(() => {
  138. Temporal.ZonedDateTime.from("foo");
  139. }).toThrowWithMessage(RangeError, "Invalid zoned date time string 'foo'");
  140. });
  141. });