From 8e4dcb784b56df4e5ba42beb5d3efaa89487cd5d Mon Sep 17 00:00:00 2001 From: aj heller Date: Mon, 17 Dec 2012 22:07:56 -0800 Subject: [PATCH] makes `ezic:local_to_utc` errors into values; updates tests accordingly Like in d98eed, errors are now returned as values rather than crashing processes. This is a short-term solution for consistency, and can be refactored to a saner model later. --- src/ezic.erl | 18 ++++++++++++------ test/ezic_tests.erl | 9 ++++++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/ezic.erl b/src/ezic.erl index 3c35d71..18ce7f0 100644 --- a/src/ezic.erl +++ b/src/ezic.erl @@ -27,13 +27,8 @@ utc_to_local(UTCDatetime, TzName) -> %% returns utc time for corresponding time in given timezone utc local_to_utc(LocalDatetime, TzName) -> NormalDatetime= ezic_date:normalize(LocalDatetime, w), - #flatzone{offset=Offset, dstoffset=DSTOffset}= ezic_db:flatzone(NormalDatetime, TzName), + local_to_utc_handleFlatzone(LocalDatetime, ezic_db:flatzone(NormalDatetime, TzName)). - ezic_date:add_offset( - ezic_date:add_offset( - LocalDatetime - , Offset, {0,0,0}) - , DSTOffset, {0,0,0}). @@ -49,3 +44,14 @@ utc_to_local_handleFlatzone(UTCDatetime, #flatzone{offset=Offset, dstoffset=DSTO UTCDatetime , Offset) , DSTOffset). + + +local_to_utc_handleFlatzone(_, X={error, _}) -> + X; +local_to_utc_handleFlatzone(LocalDatetime, #flatzone{offset=Offset, dstoffset=DSTOffset}) -> + ezic_date:add_offset( + ezic_date:add_offset( + LocalDatetime + , Offset, {0,0,0}) + , DSTOffset, {0,0,0}). + diff --git a/test/ezic_tests.erl b/test/ezic_tests.erl index 944c2f2..14c35b8 100644 --- a/test/ezic_tests.erl +++ b/test/ezic_tests.erl @@ -3,8 +3,11 @@ -include_lib("eunit/include/eunit.hrl"). local_to_utc_errors_test_() -> - ezic_db:init(), [ - ?_assertError(ambiguous_zone, ezic:local_to_utc({{2010,11,7},{1,0,0}}, "America/Los_Angeles")) - , ?_assertError(no_zone, ezic:local_to_utc({{2010,3,14},{2,30,0}}, "America/Los_Angeles")) + ?_assertMatch({error, {ambiguous_zone, _}}, ezic:local_to_utc({{2010,11,7},{1,0,0}}, "America/Los_Angeles")) + , ?_assertEqual({error, no_zone}, ezic:local_to_utc({{2010,3,14},{2,30,0}}, "America/Los_Angeles")) + ]. + +utc_to_local_smoke_test_() -> + [?_assertEqual({{2012,12,17},{13,20,0}}, ezic:utc_to_local({{2012,12,17},{4,20,0}}, "Asia/Tokyo")) ].