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.

143 lines
5.1 KiB

10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
  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. -include_lib("common_test/include/ct.hrl").
  14. -include_lib("eunit/include/eunit.hrl").
  15. -include_lib("kernel/include/file.hrl").
  16. suite() ->
  17. [].
  18. init_per_suite(Config) ->
  19. Config.
  20. end_per_suite(_Config) ->
  21. ok.
  22. init_per_testcase(_, Config) ->
  23. rebar_test_utils:init_rebar_state(Config).
  24. all() ->
  25. [build_basic_app, build_release_apps,
  26. build_checkout_apps, build_checkout_deps,
  27. recompile_when_opts_change, dont_recompile_when_opts_dont_change].
  28. build_basic_app(Config) ->
  29. AppDir = ?config(apps, Config),
  30. Name = rebar_test_utils:create_random_name("app1_"),
  31. Vsn = rebar_test_utils:create_random_vsn(),
  32. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  33. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}).
  34. build_release_apps(Config) ->
  35. AppDir = ?config(apps, Config),
  36. Name1 = rebar_test_utils:create_random_name("relapp1_"),
  37. Vsn1 = rebar_test_utils:create_random_vsn(),
  38. rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]),
  39. Name2 = rebar_test_utils:create_random_name("relapp2_"),
  40. Vsn2 = rebar_test_utils:create_random_vsn(),
  41. rebar_test_utils:create_app(filename:join([AppDir,Name2]), Name2, Vsn2, [kernel, stdlib]),
  42. rebar_test_utils:run_and_check(
  43. Config, [], ["compile"],
  44. {ok, [{app, Name1}, {app, Name2}]}
  45. ).
  46. build_checkout_apps(Config) ->
  47. AppDir = ?config(apps, Config),
  48. CheckoutsDir = ?config(checkouts, Config),
  49. Name1 = rebar_test_utils:create_random_name("checkapp1_"),
  50. Vsn1 = rebar_test_utils:create_random_vsn(),
  51. rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]),
  52. Name2 = rebar_test_utils:create_random_name("checkapp2_"),
  53. Vsn2 = rebar_test_utils:create_random_vsn(),
  54. rebar_test_utils:create_app(filename:join([CheckoutsDir,Name2]), Name2, Vsn2, [kernel, stdlib]),
  55. rebar_test_utils:run_and_check(
  56. Config, [], ["compile"],
  57. {ok, [{app, Name1}, {checkout, Name2}]}
  58. ).
  59. build_checkout_deps(Config) ->
  60. AppDir = ?config(apps, Config),
  61. CheckoutsDir = ?config(checkouts, Config),
  62. DepsDir = filename:join([AppDir, "_build", "lib"]),
  63. Name1 = rebar_test_utils:create_random_name("checkapp1_"),
  64. Vsn1 = rebar_test_utils:create_random_vsn(),
  65. rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]),
  66. Name2 = rebar_test_utils:create_random_name("checkapp2_"),
  67. Vsn2 = rebar_test_utils:create_random_vsn(),
  68. rebar_test_utils:create_app(filename:join([CheckoutsDir,Name2]), Name2, Vsn2, [kernel, stdlib]),
  69. rebar_test_utils:create_app(filename:join([DepsDir,Name2]), Name2, Vsn1, [kernel, stdlib]),
  70. rebar_test_utils:run_and_check(
  71. Config, [], ["compile"],
  72. {ok, [{app, Name1}, {checkout, Name2}]}
  73. ),
  74. ok = application:load(list_to_atom(Name2)),
  75. Loaded = application:loaded_applications(),
  76. {_, _, Vsn2} = lists:keyfind(list_to_atom(Name2), 1, Loaded).
  77. recompile_when_opts_change(Config) ->
  78. AppDir = ?config(apps, Config),
  79. EbinDir = filename:join([AppDir, "ebin"]),
  80. Name = rebar_test_utils:create_random_name("app1_"),
  81. Vsn = rebar_test_utils:create_random_vsn(),
  82. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  83. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  84. {ok, Files} = file:list_dir(EbinDir),
  85. ModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  86. || F <- Files, filename:extension(F) == ".beam"],
  87. timer:sleep(1000),
  88. rebar_test_utils:create_config(AppDir, [{erl_opts, [{d, some_define}]}]),
  89. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  90. {ok, NewFiles} = file:list_dir(EbinDir),
  91. NewModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  92. || F <- NewFiles, filename:extension(F) == ".beam"],
  93. ?assert(ModTime =/= NewModTime).
  94. dont_recompile_when_opts_dont_change(Config) ->
  95. AppDir = ?config(apps, Config),
  96. EbinDir = filename:join([AppDir, "ebin"]),
  97. Name = rebar_test_utils:create_random_name("app1_"),
  98. Vsn = rebar_test_utils:create_random_vsn(),
  99. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  100. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  101. {ok, Files} = file:list_dir(EbinDir),
  102. ModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  103. || F <- Files, filename:extension(F) == ".beam"],
  104. timer:sleep(1000),
  105. rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
  106. {ok, NewFiles} = file:list_dir(EbinDir),
  107. NewModTime = [filelib:last_modified(filename:join([EbinDir, F]))
  108. || F <- NewFiles, filename:extension(F) == ".beam"],
  109. ?assert(ModTime == NewModTime).