X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=test%2Fhope_result_SUITE.erl;h=ab31503a619cf23de4486c74dd445c4125abba3e;hb=fef301085ff208638f7c07c1fb9048f3deaf01bd;hp=9e60e855683b46065e26248d308caeec3009eeb4;hpb=4af0774b16181c76d0deedf0911d53409c8f1078;p=hope.git diff --git a/test/hope_result_SUITE.erl b/test/hope_result_SUITE.erl index 9e60e85..ab31503 100644 --- a/test/hope_result_SUITE.erl +++ b/test/hope_result_SUITE.erl @@ -1,8 +1,5 @@ -module(hope_result_SUITE). -%% TODO: Import only what is used. --include_lib("proper/include/proper.hrl"). - %% Callbacks -export( [ all/0 @@ -17,8 +14,11 @@ , 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).