Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

276 linhas
11 KiB

  1. -module(rebar_cover_SUITE).
  2. -export([suite/0,
  3. init_per_suite/1,
  4. end_per_suite/1,
  5. init_per_testcase/2,
  6. all/0,
  7. flag_coverdata_written/1,
  8. config_coverdata_written/1,
  9. config_coverdata_overridden_name_written/1,
  10. basic_extra_src_dirs/1,
  11. release_extra_src_dirs/1,
  12. root_extra_src_dirs/1,
  13. index_written/1,
  14. flag_verbose/1,
  15. config_verbose/1,
  16. excl_mods_and_apps/1,
  17. coverdata_is_reset_on_write/1]).
  18. -include_lib("common_test/include/ct.hrl").
  19. -include_lib("eunit/include/eunit.hrl").
  20. -include_lib("kernel/include/file.hrl").
  21. suite() ->
  22. [].
  23. init_per_suite(Config) ->
  24. Config.
  25. end_per_suite(_Config) ->
  26. ok.
  27. init_per_testcase(_, Config) ->
  28. rebar_test_utils:init_rebar_state(Config, "cover_").
  29. all() ->
  30. [flag_coverdata_written, config_coverdata_written,
  31. config_coverdata_overridden_name_written,
  32. basic_extra_src_dirs, release_extra_src_dirs,
  33. root_extra_src_dirs,
  34. index_written,
  35. flag_verbose, config_verbose,
  36. excl_mods_and_apps, coverdata_is_reset_on_write].
  37. flag_coverdata_written(Config) ->
  38. AppDir = ?config(apps, Config),
  39. Name = rebar_test_utils:create_random_name("cover_"),
  40. Vsn = rebar_test_utils:create_random_vsn(),
  41. rebar_test_utils:create_eunit_app(AppDir, Name, Vsn, [kernel, stdlib]),
  42. RebarConfig = [{erl_opts, [{d, some_define}]}],
  43. rebar_test_utils:run_and_check(Config,
  44. RebarConfig,
  45. ["eunit", "--cover"],
  46. {ok, [{app, Name}]}),
  47. true = filelib:is_file(filename:join([AppDir, "_build", "test", "cover", "eunit.coverdata"])).
  48. config_coverdata_written(Config) ->
  49. AppDir = ?config(apps, Config),
  50. Name = rebar_test_utils:create_random_name("cover_"),
  51. Vsn = rebar_test_utils:create_random_vsn(),
  52. rebar_test_utils:create_eunit_app(AppDir, Name, Vsn, [kernel, stdlib]),
  53. RebarConfig = [{erl_opts, [{d, some_define}]}, {cover_enabled, true}],
  54. rebar_test_utils:run_and_check(Config,
  55. RebarConfig,
  56. ["eunit"],
  57. {ok, [{app, Name}]}),
  58. true = filelib:is_file(filename:join([AppDir, "_build", "test", "cover", "eunit.coverdata"])).
  59. config_coverdata_overridden_name_written(Config) ->
  60. AppDir = ?config(apps, Config),
  61. Name = rebar_test_utils:create_random_name("cover_"),
  62. Vsn = rebar_test_utils:create_random_vsn(),
  63. rebar_test_utils:create_eunit_app(AppDir, Name, Vsn, [kernel, stdlib]),
  64. RebarConfig = [{erl_opts, [{d, some_define}]}, {cover_enabled, true}],
  65. rebar_test_utils:run_and_check(Config,
  66. RebarConfig,
  67. ["eunit", "--cover_export_name=test_name"],
  68. {ok, [{app, Name}]}),
  69. true = filelib:is_file(filename:join([AppDir, "_build", "test", "cover", "test_name.coverdata"])).
  70. basic_extra_src_dirs(Config) ->
  71. AppDir = ?config(apps, Config),
  72. Name = rebar_test_utils:create_random_name("cover_extra_"),
  73. Vsn = rebar_test_utils:create_random_vsn(),
  74. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  75. ExtraSrc = io_lib:format("-module(~ts_extra).\n-export([ok/0]).\nok() -> ok.\n", [Name]),
  76. ok = filelib:ensure_dir(filename:join([AppDir, "extra", "dummy"])),
  77. ok = file:write_file(filename:join([AppDir, "extra", io_lib:format("~ts_extra.erl", [Name])]),
  78. ExtraSrc),
  79. RebarConfig = [{erl_opts, [{d, some_define}]}, {extra_src_dirs, ["extra"]}],
  80. rebar_test_utils:run_and_check(Config,
  81. RebarConfig,
  82. ["eunit", "--cover"],
  83. {ok, [{app, Name}]}),
  84. Mod = list_to_atom(Name),
  85. {file, _} = cover:is_compiled(Mod),
  86. ExtraMod = list_to_atom(lists:flatten(io_lib:format("~ts_extra", [Name]))),
  87. false = cover:is_compiled(ExtraMod).
  88. release_extra_src_dirs(Config) ->
  89. AppDir = ?config(apps, Config),
  90. Name1 = rebar_test_utils:create_random_name("relapp1_"),
  91. Vsn1 = rebar_test_utils:create_random_vsn(),
  92. rebar_test_utils:create_app(filename:join([AppDir, "apps", Name1]), Name1, Vsn1, [kernel, stdlib]),
  93. Name2 = rebar_test_utils:create_random_name("relapp2_"),
  94. Vsn2 = rebar_test_utils:create_random_vsn(),
  95. rebar_test_utils:create_app(filename:join([AppDir, "apps", Name2]), Name2, Vsn2, [kernel, stdlib]),
  96. ExtraOne = io_lib:format("-module(~ts_extra).\n-export([ok/0]).\nok() -> ok.\n", [Name1]),
  97. ok = filelib:ensure_dir(filename:join([AppDir, "apps", Name1, "extra", "dummy"])),
  98. ok = file:write_file(filename:join([AppDir, "apps", Name1, "extra",
  99. io_lib:format("~ts_extra.erl", [Name1])]),
  100. ExtraOne),
  101. ExtraTwo = io_lib:format("-module(~ts_extra).\n-export([ok/0]).\nok() -> ok.\n", [Name2]),
  102. ok = filelib:ensure_dir(filename:join([AppDir, "apps", Name2, "extra", "dummy"])),
  103. ok = file:write_file(filename:join([AppDir, "apps", Name2, "extra",
  104. io_lib:format("~ts_extra.erl", [Name2])]),
  105. ExtraTwo),
  106. RebarConfig = [{erl_opts, [{d, some_define}]}, {extra_src_dirs, ["extra"]}],
  107. rebar_test_utils:run_and_check(Config,
  108. RebarConfig,
  109. ["eunit", "--cover"],
  110. {ok, [{app, Name1}, {app, Name2}]}),
  111. Mod1 = list_to_atom(Name1),
  112. {file, _} = cover:is_compiled(Mod1),
  113. Mod2 = list_to_atom(Name2),
  114. {file, _} = cover:is_compiled(Mod2),
  115. ExtraMod1 = list_to_atom(lists:flatten(io_lib:format("~ts_extra", [Name1]))),
  116. false = cover:is_compiled(ExtraMod1),
  117. ExtraMod2 = list_to_atom(lists:flatten(io_lib:format("~ts_extra", [Name2]))),
  118. false = cover:is_compiled(ExtraMod2).
  119. root_extra_src_dirs(Config) ->
  120. AppDir = ?config(apps, Config),
  121. Name1 = rebar_test_utils:create_random_name("relapp1_"),
  122. Vsn1 = rebar_test_utils:create_random_vsn(),
  123. rebar_test_utils:create_app(filename:join([AppDir, "apps", Name1]), Name1, Vsn1, [kernel, stdlib]),
  124. Name2 = rebar_test_utils:create_random_name("relapp2_"),
  125. Vsn2 = rebar_test_utils:create_random_vsn(),
  126. rebar_test_utils:create_app(filename:join([AppDir, "apps", Name2]), Name2, Vsn2, [kernel, stdlib]),
  127. Extra = <<"-module(extra).\n-export([ok/0]).\nok() -> ok.\n">>,
  128. ok = filelib:ensure_dir(filename:join([AppDir, "extra", "dummy"])),
  129. ok = file:write_file(filename:join([AppDir, "extra", "extra.erl"]), Extra),
  130. RebarConfig = [{erl_opts, [{d, some_define}]}, {extra_src_dirs, ["extra"]}],
  131. rebar_test_utils:run_and_check(Config,
  132. RebarConfig,
  133. ["eunit", "--cover"],
  134. {ok, [{app, Name1}, {app, Name2}]}),
  135. Mod1 = list_to_atom(Name1),
  136. {file, _} = cover:is_compiled(Mod1),
  137. Mod2 = list_to_atom(Name2),
  138. {file, _} = cover:is_compiled(Mod2),
  139. false = cover:is_compiled(extra).
  140. index_written(Config) ->
  141. AppDir = ?config(apps, Config),
  142. Name = rebar_test_utils:create_random_name("cover_"),
  143. Vsn = rebar_test_utils:create_random_vsn(),
  144. rebar_test_utils:create_eunit_app(AppDir, Name, Vsn, [kernel, stdlib]),
  145. RebarConfig = [{erl_opts, [{d, some_define}]}],
  146. rebar_test_utils:run_and_check(Config,
  147. RebarConfig,
  148. ["do", "eunit", "--cover", ",", "cover"],
  149. {ok, [{app, Name}]}),
  150. true = filelib:is_file(filename:join([AppDir, "_build", "test", "cover", "index.html"])).
  151. flag_verbose(Config) ->
  152. AppDir = ?config(apps, Config),
  153. Name = rebar_test_utils:create_random_name("cover_"),
  154. Vsn = rebar_test_utils:create_random_vsn(),
  155. rebar_test_utils:create_eunit_app(AppDir, Name, Vsn, [kernel, stdlib]),
  156. RebarConfig = [{erl_opts, [{d, some_define}]}],
  157. rebar_test_utils:run_and_check(Config,
  158. RebarConfig,
  159. ["do", "eunit", "--cover", ",", "cover", "--verbose"],
  160. {ok, [{app, Name}]}),
  161. true = filelib:is_file(filename:join([AppDir, "_build", "test", "cover", "index.html"])).
  162. config_verbose(Config) ->
  163. AppDir = ?config(apps, Config),
  164. Name = rebar_test_utils:create_random_name("cover_"),
  165. Vsn = rebar_test_utils:create_random_vsn(),
  166. rebar_test_utils:create_eunit_app(AppDir, Name, Vsn, [kernel, stdlib]),
  167. RebarConfig = [{erl_opts, [{d, some_define}]}, {cover_opts, [verbose]}],
  168. rebar_test_utils:run_and_check(Config,
  169. RebarConfig,
  170. ["do", "eunit", "--cover", ",", "cover"],
  171. {ok, [{app, Name}]}),
  172. true = filelib:is_file(filename:join([AppDir, "_build", "test", "cover", "index.html"])).
  173. excl_mods_and_apps(Config) ->
  174. AppDir = ?config(apps, Config),
  175. Name1 = rebar_test_utils:create_random_name("relapp1_"),
  176. Vsn1 = rebar_test_utils:create_random_vsn(),
  177. rebar_test_utils:create_app(filename:join([AppDir, "apps", Name1]), Name1, Vsn1, [kernel, stdlib]),
  178. Name2 = rebar_test_utils:create_random_name("relapp2_"),
  179. Vsn2 = rebar_test_utils:create_random_vsn(),
  180. rebar_test_utils:create_app(filename:join([AppDir, "apps", Name2]), Name2, Vsn2, [kernel, stdlib]),
  181. Name3 = rebar_test_utils:create_random_name("excludeme_"),
  182. Vsn3 = rebar_test_utils:create_random_vsn(),
  183. rebar_test_utils:create_app(filename:join([AppDir, "apps", Name3]), Name3, Vsn3, [kernel, stdlib]),
  184. Mod1 = list_to_atom(Name1),
  185. Mod2 = list_to_atom(Name2),
  186. Mod3 = list_to_atom(Name3),
  187. RebarConfig = [{erl_opts, [{d, some_define}]},
  188. {cover_excl_mods, [Mod2]},
  189. {cover_excl_apps, [Name3]}],
  190. rebar_test_utils:run_and_check(Config,
  191. RebarConfig,
  192. ["eunit", "--cover"],
  193. {ok, [{app, Name1}, {app, Name2}, {app, Name3}]}),
  194. {file, _} = cover:is_compiled(Mod1),
  195. false = cover:is_compiled(Mod2),
  196. false = cover:is_compiled(Mod3).
  197. coverdata_is_reset_on_write(Config) ->
  198. AppDir = ?config(apps, Config),
  199. Name = rebar_test_utils:create_random_name("coverdata_is_reset_on_write_"),
  200. Vsn = rebar_test_utils:create_random_vsn(),
  201. rebar_test_utils:create_eunit_app(AppDir, Name, Vsn, [kernel, stdlib]),
  202. RebarConfig = [{erl_opts, [{d, some_define}]}, {cover_enabled, true}],
  203. rebar_test_utils:run_and_check(Config,
  204. RebarConfig,
  205. ["eunit"],
  206. {ok, [{app, Name}]}),
  207. Res = lists:map(fun(M) -> cover:analyse(M) end, cover:modules()),
  208. Ok = lists:foldl(fun({ok, R}, Acc) -> R ++ Acc end, [], Res),
  209. [] = lists:filter(fun({_, {0,_}}) -> false; (_) -> true end, Ok).