Skip to content

Commit 8a13ed4

Browse files
authored
Improve test coverage of the Date module (#14524)
* Add tests for Date.utc_today/1 * Add test for non-integer duration shift * Add test for Date.convert!/2 with incompatible calendars * Add test for Date.diff/2 with incompatible calendars * Add test for Date.compare/2 with incompatible calendars
1 parent c9ddb57 commit 8a13ed4

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

lib/elixir/test/elixir/calendar/date_test.exs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ defmodule DateTest do
9191
assert Date.compare(date4, date5) == :gt
9292
assert Date.compare(date5, date4) == :lt
9393
assert Date.compare(date5, date5) == :eq
94+
95+
assert_raise ArgumentError,
96+
~r/cannot compare .*\n\n.* their calendars have incompatible day rollover moments/,
97+
fn -> Date.compare(date1, %{date2 | calendar: FakeCalendar}) end
9498
end
9599

96100
test "before?/2 and after?/2" do
@@ -180,10 +184,14 @@ defmodule DateTest do
180184
|> Date.convert!(Calendar.Holocene)
181185
|> Date.convert!(Calendar.ISO) == ~D[2000-01-01]
182186

183-
assert Date.convert(~D[2016-02-03], FakeCalendar) == {:error, :incompatible_calendars}
184-
185187
assert Date.convert(~N[2000-01-01 00:00:00], Calendar.Holocene) ==
186188
{:ok, Calendar.Holocene.date(12000, 01, 01)}
189+
190+
assert Date.convert(~D[2016-02-03], FakeCalendar) == {:error, :incompatible_calendars}
191+
192+
assert_raise ArgumentError,
193+
"cannot convert ~D[2016-02-03] to target calendar FakeCalendar, reason: :incompatible_calendars",
194+
fn -> Date.convert!(~D[2016-02-03], FakeCalendar) end
187195
end
188196

189197
test "add/2" do
@@ -214,6 +222,10 @@ defmodule DateTest do
214222
date2 = Calendar.Holocene.date(12000, 01, 14)
215223
assert Date.diff(date1, date2) == -13
216224
assert Date.diff(date2, date1) == 13
225+
226+
assert_raise ArgumentError,
227+
~r/cannot calculate the difference between .* because their calendars are not compatible/,
228+
fn -> Date.diff(date1, %{date2 | calendar: FakeCalendar}) end
217229
end
218230

219231
test "shift/2" do
@@ -249,6 +261,10 @@ defmodule DateTest do
249261
"unknown unit :months. Expected :year, :month, :week, :day",
250262
fn -> Date.shift(~D[2012-01-01], months: 12) end
251263

264+
assert_raise ArgumentError,
265+
"unsupported value nil for :day. Expected an integer",
266+
fn -> Date.shift(~D[2012-02-29], year: 1, day: nil) end
267+
252268
assert_raise ArgumentError,
253269
"cannot shift date by time scale unit. Expected :year, :month, :week, :day",
254270
fn -> Date.shift(~D[2012-02-29], %Duration{second: 86400}) end
@@ -266,4 +282,18 @@ defmodule DateTest do
266282
Date.shift(date, month: 1)
267283
end
268284
end
285+
286+
test "utc_today/1" do
287+
date = Date.utc_today()
288+
assert date.year > 2020
289+
assert date.calendar == Calendar.ISO
290+
291+
date = Date.utc_today(Calendar.ISO)
292+
assert date.year > 2020
293+
assert date.calendar == Calendar.ISO
294+
295+
date = Date.utc_today(Calendar.Holocene)
296+
assert date.year > 12020
297+
assert date.calendar == Calendar.Holocene
298+
end
269299
end

0 commit comments

Comments
 (0)