Skip to content

Commit

Permalink
Merge pull request #55 from shino/parametrized-module
Browse files Browse the repository at this point in the history
Allow mocking of parametrized modules
  • Loading branch information
eproxus committed Jan 22, 2012
2 parents f36a1d7 + 377babd commit 850fbff
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/meck_mod.erl
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,13 @@ compile_options(Module) ->
filter_options(proplists:get_value(options, Module:module_info(compile))).

-spec rename_module(erlang_form(), module()) -> erlang_form().
rename_module([{attribute, Line, module, _OldName}|T], NewName) ->
[{attribute, Line, module, NewName}|T];
rename_module([{attribute, Line, module, OldAttribute}|T], NewName) ->
case OldAttribute of
{_OldName, Variables} ->
[{attribute, Line, module, {NewName, Variables}}|T];
_OldName ->
[{attribute, Line, module, NewName}|T]
end;
rename_module([H|T], NewName) ->
[H|rename_module(T, NewName)].

Expand Down
7 changes: 7 additions & 0 deletions test/meck_test_parametrized_module.erl
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-module(meck_test_parametrized_module, [Var1, Var2]).
-export([which/0, var1/0, var2/0]).

which() -> original.

var1() -> {original, Var1}.
var2() -> {original, Var2}.
26 changes: 26 additions & 0 deletions test/meck_tests.erl
Original file line number Diff line number Diff line change
Expand Up @@ -807,6 +807,32 @@ cannot_expect_bif_or_autogenerated_test() ->
meck:expect(unicode, module_info, 0, doh)),
?assertEqual(ok, meck:unload(unicode)).

meck_parametrized_module_test() ->
?assertEqual(ok, meck:new(meck_test_parametrized_module)),
?assertEqual(ok, meck:expect(meck_test_parametrized_module, new,
fun(V1, V2) ->
{meck_test_parametrized_module, V1, V2}
end)),
?assertEqual(ok, meck:expect(meck_test_parametrized_module, which, 1, mecked)),
Object = meck_test_parametrized_module:new(var1, var2),
?assertEqual(mecked, Object:which()),
?assertEqual(ok, meck:unload(meck_test_parametrized_module)).

meck_parametrized_module_passthrough_test() ->
?assertEqual(ok, meck:new(meck_test_parametrized_module, [passthrough])),
?assertEqual(ok, meck:expect(meck_test_parametrized_module, new,
fun(V1, V2) ->
{meck_test_parametrized_module, V1, V2}
end)),
?assertEqual(ok, meck:expect(meck_test_parametrized_module, var2,
fun({_, _Var1, Var2} = _This) ->
{mecked, Var2}
end)),
Object = meck_test_parametrized_module:new(var1, var2),
?assertEqual({original, var1}, Object:var1()),
?assertEqual({mecked, var2}, Object:var2()),
?assertEqual(ok, meck:unload(meck_test_parametrized_module)).

%%==============================================================================
%% Internal Functions
%%==============================================================================
Expand Down

0 comments on commit 850fbff

Please sign in to comment.