25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
6.8 KiB

10 년 전
10 년 전
10 년 전
10 년 전
10 년 전
10 년 전
10 년 전
10 년 전
10 년 전
10 년 전
10 년 전
  1. -module(rebar_compile_SUITE).
  2. -export([suite/0,
  3. init_per_suite/1,
  4. end_per_suite/1,
  5. init_per_testcase/2,
  6. all/0,
  7. build_basic_app/1,
  8. build_release_apps/1,
  9. build_checkout_apps/1,
  10. build_checkout_deps/1,
  11. recompile_when_opts_change/1,
  12. dont_recompile_when_opts_dont_change/1,
  13. dont_recompile_yrl_or_xrl/1,
  14. purge_before_load/1]).
  15. -include_lib("common_test/include/ct.hrl").
  16. -include_lib("eunit/include/eunit.hrl").
  17. -include_lib("kernel/include/file.hrl").
  18. suite() ->
  19. [].
  20. init_per_suite(Config) ->
  21. Config.
  22. end_per_suite(_Config) ->
  23. ok.
  24. init_per_testcase(_, Config) ->
  25. rebar_test_utils:init_rebar_state(Config).
  26. all() ->
  27. [build_basic_app, build_release_apps,
  28. build_checkout_apps, build_checkout_deps,
  29. recompile_when_opts_change, dont_recompile_when_opts_dont_change,
  30. dont_recompile_yrl_or_xrl, purge_before_load].
  31. build_basic_app(Config) ->
  32. AppDir = ?config(apps, Config),
  33. Name = rebar_test_utils:create_random_name("app1_"),
  34. Vsn = rebar_test_utils:create_random_vsn(),
  35. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  36. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}).
  37. build_release_apps(Config) ->
  38. AppDir = ?config(apps, Config),
  39. Name1 = rebar_test_utils:create_random_name("relapp1_"),
  40. Vsn1 = rebar_test_utils:create_random_vsn(),
  41. rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]),
  42. Name2 = rebar_test_utils:create_random_name("relapp2_"),
  43. Vsn2 = rebar_test_utils:create_random_vsn(),
  44. rebar_test_utils:create_app(filename:join([AppDir,Name2]), Name2, Vsn2, [kernel, stdlib]),
  45. rebar_test_utils:run_and_check(
  46. Config, [], ["compile"],
  47. {ok, [{app, Name1}, {app, Name2}]}
  48. ).
  49. build_checkout_apps(Config) ->
  50. AppDir = ?config(apps, Config),
  51. CheckoutsDir = ?config(checkouts, Config),
  52. Name1 = rebar_test_utils:create_random_name("checkapp1_"),
  53. Vsn1 = rebar_test_utils:create_random_vsn(),
  54. rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]),
  55. Name2 = rebar_test_utils:create_random_name("checkapp2_"),
  56. Vsn2 = rebar_test_utils:create_random_vsn(),
  57. rebar_test_utils:create_app(filename:join([CheckoutsDir,Name2]), Name2, Vsn2, [kernel, stdlib]),
  58. rebar_test_utils:run_and_check(
  59. Config, [], ["compile"],
  60. {ok, [{app, Name1}, {checkout, Name2}]}
  61. ).
  62. build_checkout_deps(Config) ->
  63. AppDir = ?config(apps, Config),
  64. CheckoutsDir = ?config(checkouts, Config),
  65. DepsDir = filename:join([AppDir, "_build", "default", "lib"]),
  66. Name1 = rebar_test_utils:create_random_name("checkapp1_"),
  67. Vsn1 = rebar_test_utils:create_random_vsn(),
  68. rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]),
  69. Name2 = rebar_test_utils:create_random_name("checkapp2_"),
  70. Vsn2 = rebar_test_utils:create_random_vsn(),
  71. rebar_test_utils:create_app(filename:join([CheckoutsDir,Name2]), Name2, Vsn2, [kernel, stdlib]),
  72. rebar_test_utils:create_app(filename:join([DepsDir,Name2]), Name2, Vsn1, [kernel, stdlib]),
  73. rebar_test_utils:run_and_check(
  74. Config, [], ["compile"],
  75. {ok, [{app, Name1}, {checkout, Name2}]}
  76. ),
  77. ok = application:load(list_to_atom(Name2)),
  78. Loaded = application:loaded_applications(),
  79. {_, _, Vsn2} = lists:keyfind(list_to_atom(Name2), 1, Loaded).
  80. recompile_when_opts_change(Config) ->
  81. AppDir = ?config(apps, Config),
  82. Name = rebar_test_utils:create_random_name("app1_"),
  83. Vsn = rebar_test_utils:create_random_vsn(),
  84. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  85. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  86. EbinDir = filename:join([AppDir, "_build", "default", "lib", Name, "ebin"]),
  87. {ok, Files} = file:list_dir(EbinDir),
  88. ModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  89. || F <- Files, filename:extension(F) == ".beam"],
  90. timer:sleep(1000),
  91. rebar_test_utils:create_config(AppDir, [{erl_opts, [{d, some_define}]}]),
  92. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  93. {ok, NewFiles} = file:list_dir(EbinDir),
  94. NewModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  95. || F <- NewFiles, filename:extension(F) == ".beam"],
  96. ?assert(ModTime =/= NewModTime).
  97. dont_recompile_when_opts_dont_change(Config) ->
  98. AppDir = ?config(apps, Config),
  99. Name = rebar_test_utils:create_random_name("app1_"),
  100. Vsn = rebar_test_utils:create_random_vsn(),
  101. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  102. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  103. EbinDir = filename:join([AppDir, "_build", "default", "lib", Name, "ebin"]),
  104. {ok, Files} = file:list_dir(EbinDir),
  105. ModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  106. || F <- Files, filename:extension(F) == ".beam"],
  107. timer:sleep(1000),
  108. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  109. {ok, NewFiles} = file:list_dir(EbinDir),
  110. NewModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  111. || F <- NewFiles, filename:extension(F) == ".beam"],
  112. ?assert(ModTime == NewModTime).
  113. dont_recompile_yrl_or_xrl(Config) ->
  114. AppDir = ?config(apps, Config),
  115. Name = rebar_test_utils:create_random_name("app1_"),
  116. Vsn = rebar_test_utils:create_random_vsn(),
  117. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  118. Xrl = filename:join([AppDir, "src", "not_a_real_xrl_" ++ Name ++ ".xrl"]),
  119. ok = filelib:ensure_dir(Xrl),
  120. XrlBody =
  121. "Definitions."
  122. "\n\n"
  123. "D = [0-9]"
  124. "\n\n"
  125. "Rules."
  126. "\n\n"
  127. "{D}+ :"
  128. " {token,{integer,TokenLine,list_to_integer(TokenChars)}}."
  129. "\n\n"
  130. "{D}+\\.{D}+((E|e)(\\+|\\-)?{D}+)? :"
  131. " {token,{float,TokenLine,list_to_float(TokenChars)}}."
  132. "\n\n"
  133. "Erlang code.",
  134. ok = ec_file:write(Xrl, XrlBody),
  135. XrlBeam = filename:join([AppDir, "ebin", filename:basename(Xrl, ".xrl") ++ ".beam"]),
  136. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  137. ModTime = filelib:last_modified(XrlBeam),
  138. timer:sleep(1000),
  139. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  140. NewModTime = filelib:last_modified(XrlBeam),
  141. ?assert(ModTime == NewModTime).
  142. purge_before_load(Config) ->
  143. AppDir = ?config(apps, Config),
  144. Name = rebar_test_utils:create_random_name("app1_"),
  145. Vsn = rebar_test_utils:create_random_vsn(),
  146. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  147. Tasks = ["do", "compile,compile,compile"],
  148. rebar_test_utils:run_and_check(Config, [], Tasks, {ok, [{app, Name}]}).