Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

113 Zeilen
3.6 KiB

vor 10 Jahren
vor 10 Jahren
vor 10 Jahren
vor 10 Jahren
  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. -include_lib("common_test/include/ct.hrl").
  9. -include_lib("eunit/include/eunit.hrl").
  10. -include_lib("kernel/include/file.hrl").
  11. -include_lib("kernel/include/file.hrl").
  12. suite() ->
  13. [].
  14. init_per_suite(Config) ->
  15. Config.
  16. end_per_suite(_Config) ->
  17. ok.
  18. init_per_testcase(_, Config) ->
  19. DataDir = proplists:get_value(data_dir, Config),
  20. AppsDir = filename:join([DataDir, create_random_name("apps_dir1_")]),
  21. ok = ec_file:mkdir_p(AppsDir),
  22. Verbosity = rebar3:log_level(),
  23. rebar_log:init(command_line, Verbosity),
  24. State = rebar_state:new(),
  25. [{apps, AppsDir}, {state, State} | Config].
  26. all() ->
  27. [build_basic_app].
  28. build_basic_app(Config) ->
  29. AppDir = proplists:get_value(apps, Config),
  30. State = proplists:get_value(state, Config),
  31. Name = create_random_name("app1_"),
  32. Vsn = create_random_vsn(),
  33. create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  34. ConfigFile = filename:join([AppDir, "rebar.config"]),
  35. write_config(ConfigFile, []),
  36. rebar3:run(rebar_state:new(State, [], AppDir), "compile"),
  37. %% Verify app was built
  38. [App] = rebar_app_discover:find_apps([AppDir]),
  39. ?assertEqual(Name, ec_cnv:to_list(rebar_app_info:name(App))).
  40. %%%===================================================================
  41. %%% Helper Functions
  42. %%%===================================================================
  43. create_app(AppDir, Name, Vsn, Deps) ->
  44. write_src_file(AppDir, Name),
  45. write_app_src_file(AppDir, Name, Vsn, Deps),
  46. rebar_app_info:new(Name, Vsn, AppDir, Deps).
  47. create_empty_app(AppDir, Name, Vsn, Deps) ->
  48. write_app_file(AppDir, Name, Vsn, Deps),
  49. rebar_app_info:new(Name, Vsn, AppDir, Deps).
  50. write_beam_file(Dir, Name) ->
  51. Beam = filename:join([Dir, "ebin", "not_a_real_beam" ++ Name ++ ".beam"]),
  52. ok = filelib:ensure_dir(Beam),
  53. ok = ec_file:write_term(Beam, testing_purposes_only).
  54. write_src_file(Dir, Name) ->
  55. Erl = filename:join([Dir, "src", "not_a_real_src" ++ Name ++ ".erl"]),
  56. ok = filelib:ensure_dir(Erl),
  57. ok = ec_file:write(Erl, erl_src_file("not_a_real_src" ++ Name ++ ".erl")).
  58. write_app_file(Dir, Name, Version, Deps) ->
  59. Filename = filename:join([Dir, "ebin", Name ++ ".app"]),
  60. ok = filelib:ensure_dir(Filename),
  61. ok = ec_file:write_term(Filename, get_app_metadata(ec_cnv:to_list(Name), Version, Deps)).
  62. write_app_src_file(Dir, Name, Version, Deps) ->
  63. Filename = filename:join([Dir, "src", Name ++ ".app.src"]),
  64. ok = filelib:ensure_dir(Filename),
  65. ok = ec_file:write_term(Filename, get_app_metadata(ec_cnv:to_list(Name), Version, Deps)).
  66. get_app_metadata(Name, Vsn, Deps) ->
  67. {application, erlang:list_to_atom(Name),
  68. [{description, ""},
  69. {vsn, Vsn},
  70. {modules, []},
  71. {included_applications, []},
  72. {registered, []},
  73. {applications, Deps}]}.
  74. create_random_name(Name) ->
  75. random:seed(erlang:now()),
  76. Name ++ erlang:integer_to_list(random:uniform(1000000)).
  77. create_random_vsn() ->
  78. random:seed(erlang:now()),
  79. lists:flatten([erlang:integer_to_list(random:uniform(100)),
  80. ".", erlang:integer_to_list(random:uniform(100)),
  81. ".", erlang:integer_to_list(random:uniform(100))]).
  82. write_config(Filename, Values) ->
  83. ok = filelib:ensure_dir(Filename),
  84. ok = ec_file:write(Filename,
  85. [io_lib:format("~p.\n", [Val]) || Val <- Values]).
  86. erl_src_file(Name) ->
  87. io_lib:format("-module(~s).\n"
  88. "-export([main/0]).\n"
  89. "main() -> ok.\n", [filename:basename(Name, ".erl")]).