You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
6.4 KiB

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