Test on newer releases
[hope.git] / test / hope_result_SUITE.erl
index 9e60e85..ab31503 100644 (file)
@@ -1,8 +1,5 @@
 -module(hope_result_SUITE).
 
-%% TODO: Import only what is used.
--include_lib("proper/include/proper.hrl").
-
 %% Callbacks
 -export(
     [ all/0
     , t_pipe_error/1
     , t_hope_result_specs/1
     , t_lift_exn/1
+    , t_lift_map_exn/1
     , t_return/1
     , t_map/1
+    , t_map_error/1
+    , t_tag_error/1
     ]).
 
 
@@ -49,10 +49,13 @@ groups() ->
         ],
     LiftTests =
         [ t_lift_exn
+        , t_lift_map_exn
         ],
     OtherTests =
         [ t_return
         , t_map
+        , t_map_error
+        , t_tag_error
         ],
     Properties = [parallel],
     [ {?GROUP_PIPE, Properties, PipeTests}
@@ -100,6 +103,32 @@ t_lift_exn(_Cfg) ->
     {error, {Class, Reason}} = G(ok),
     {error, {Label, {Class, Reason}}} = H(ok).
 
+t_lift_map_exn(_Cfg) ->
+    FOk  = fun ({}) -> foo end,
+    FExn = fun ({}) -> throw(baz) end,
+    MapOk          = fun (foo)          -> bar end,
+    MapOkThrows    = fun (foo)          -> throw(exn_from_ok_map) end,
+    MapError       = fun ({throw, baz}) -> qux end,
+    MapErrorThrows = fun ({throw, baz}) -> throw(exn_from_error_map) end,
+    GOk          = hope_result:lift_map_exn(FOk , MapOk      , MapError),
+    GOkThrows    = hope_result:lift_map_exn(FOk , MapOkThrows, MapError),
+    GError       = hope_result:lift_map_exn(FExn, MapOk      , MapError),
+    GErrorThrows = hope_result:lift_map_exn(FExn, MapOk      , MapErrorThrows),
+    {ok, bar} = GOk({}),
+    {error, qux} = GError({}),
+    ok =
+        try
+            must_not_return = GOkThrows({})
+        catch throw:exn_from_ok_map ->
+                ok
+        end,
+    ok =
+        try
+            must_not_return = GErrorThrows({})
+        catch throw:exn_from_error_map ->
+                ok
+        end.
+
 t_return(_Cfg) ->
     X = foo,
     {ok, X} = hope_result:return(X).
@@ -110,3 +139,16 @@ t_map(_Cfg) ->
     F = fun (foo) -> Y end,
     {ok, Y}    = hope_result:map({ok, X}, F),
     {error, X} = hope_result:map({error, X}, F).
+
+t_map_error(_Cfg) ->
+    X = foo,
+    Y = bar,
+    XtoY = fun (foo) -> Y end,
+    {ok   , X} = hope_result:map_error({ok   , X}, XtoY),
+    {error, Y} = hope_result:map_error({error, X}, XtoY).
+
+t_tag_error(_Cfg) ->
+    X = foo,
+    Tag = bar,
+    {ok   ,       X } = hope_result:tag_error({ok   , X}, Tag),
+    {error, {Tag, X}} = hope_result:tag_error({error, X}, Tag).
This page took 0.026961 seconds and 4 git commands to generate.