Skip to content

Commit 850fbff

Browse files
committed
Merge pull request #55 from shino/parametrized-module
Allow mocking of parametrized modules
2 parents f36a1d7 + 377babd commit 850fbff

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

src/meck_mod.erl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,13 @@ compile_options(Module) ->
8080
filter_options(proplists:get_value(options, Module:module_info(compile))).
8181

8282
-spec rename_module(erlang_form(), module()) -> erlang_form().
83-
rename_module([{attribute, Line, module, _OldName}|T], NewName) ->
84-
[{attribute, Line, module, NewName}|T];
83+
rename_module([{attribute, Line, module, OldAttribute}|T], NewName) ->
84+
case OldAttribute of
85+
{_OldName, Variables} ->
86+
[{attribute, Line, module, {NewName, Variables}}|T];
87+
_OldName ->
88+
[{attribute, Line, module, NewName}|T]
89+
end;
8590
rename_module([H|T], NewName) ->
8691
[H|rename_module(T, NewName)].
8792

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-module(meck_test_parametrized_module, [Var1, Var2]).
2+
-export([which/0, var1/0, var2/0]).
3+
4+
which() -> original.
5+
6+
var1() -> {original, Var1}.
7+
var2() -> {original, Var2}.

test/meck_tests.erl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,32 @@ cannot_expect_bif_or_autogenerated_test() ->
807807
meck:expect(unicode, module_info, 0, doh)),
808808
?assertEqual(ok, meck:unload(unicode)).
809809

810+
meck_parametrized_module_test() ->
811+
?assertEqual(ok, meck:new(meck_test_parametrized_module)),
812+
?assertEqual(ok, meck:expect(meck_test_parametrized_module, new,
813+
fun(V1, V2) ->
814+
{meck_test_parametrized_module, V1, V2}
815+
end)),
816+
?assertEqual(ok, meck:expect(meck_test_parametrized_module, which, 1, mecked)),
817+
Object = meck_test_parametrized_module:new(var1, var2),
818+
?assertEqual(mecked, Object:which()),
819+
?assertEqual(ok, meck:unload(meck_test_parametrized_module)).
820+
821+
meck_parametrized_module_passthrough_test() ->
822+
?assertEqual(ok, meck:new(meck_test_parametrized_module, [passthrough])),
823+
?assertEqual(ok, meck:expect(meck_test_parametrized_module, new,
824+
fun(V1, V2) ->
825+
{meck_test_parametrized_module, V1, V2}
826+
end)),
827+
?assertEqual(ok, meck:expect(meck_test_parametrized_module, var2,
828+
fun({_, _Var1, Var2} = _This) ->
829+
{mecked, Var2}
830+
end)),
831+
Object = meck_test_parametrized_module:new(var1, var2),
832+
?assertEqual({original, var1}, Object:var1()),
833+
?assertEqual({mecked, var2}, Object:var2()),
834+
?assertEqual(ok, meck:unload(meck_test_parametrized_module)).
835+
810836
%%==============================================================================
811837
%% Internal Functions
812838
%%==============================================================================

0 commit comments

Comments
 (0)