X-Git-Url: https://git.xandkar.net/?p=hope.git;a=blobdiff_plain;f=test%2Fhope_result_SUITE.erl;h=ab31503a619cf23de4486c74dd445c4125abba3e;hp=d323cee08660511d9230dc63dc99b745b04c645f;hb=64617423d513e37494369d637bee5ff357de791b;hpb=a80ca0b203dc3398a0117d2e1fc6ae5d77250783 diff --git a/test/hope_result_SUITE.erl b/test/hope_result_SUITE.erl index d323cee..ab31503 100644 --- a/test/hope_result_SUITE.erl +++ b/test/hope_result_SUITE.erl @@ -14,6 +14,7 @@ , 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 @@ -48,6 +49,7 @@ groups() -> ], LiftTests = [ t_lift_exn + , t_lift_map_exn ], OtherTests = [ t_return @@ -101,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).