Selaa lähdekoodia

add first test

pull/3/head
Tristan Sloughter 10 vuotta sitten
vanhempi
commit
b8785e6541
6 muutettua tiedostoa jossa 159 lisäystä ja 11 poistoa
  1. +3
    -1
      .gitignore
  2. +8
    -7
      src/rebar.erl
  3. +3
    -1
      src/rebar_app_discover.erl
  4. +25
    -2
      src/rebar_app_info.erl
  5. +7
    -0
      src/rebar_state.erl
  6. +113
    -0
      test/rebar_install_deps_SUITE.erl

+ 3
- 1
.gitignore Näytä tiedosto

@ -1,4 +1,6 @@
/ebin/*.beam
*.beam
test/*_data
logs
/rebar
*~
*.orig

+ 8
- 7
src/rebar.erl Näytä tiedosto

@ -30,7 +30,8 @@
run/2,
help/0,
parse_args/1,
version/0]).
version/0,
log_level/1]).
-include("rebar.hrl").
@ -69,7 +70,6 @@ main(Args) ->
%% Erlang-API entry point
run(BaseConfig, Commands) ->
_ = application:load(rebar),
ok = rebar_log:init(api, BaseConfig),
run_aux(BaseConfig, Commands).
%% ====================================================================
@ -156,12 +156,12 @@ init_config({Options, _NonOptArgs}) ->
init_config1(BaseConfig) ->
%% Determine the location of the rebar executable; important for pulling
%% resources out of the escript
ScriptName = filename:absname(escript:script_name()),
BaseConfig1 = rebar_state:set(BaseConfig, escript, ScriptName),
?DEBUG("Rebar location: ~p\n", [ScriptName]),
%ScriptName = filename:absname(escript:script_name()),
%BaseConfig1 = rebar_state:set(BaseConfig, escript, ScriptName),
%?DEBUG("Rebar location: ~p\n", [ScriptName]),
%% Note the top-level directory for reference
AbsCwd = filename:absname(rebar_utils:get_cwd()),
rebar_state:set(BaseConfig1, base_dir, AbsCwd).
rebar_state:set(BaseConfig, base_dir, AbsCwd).
run_aux(BaseConfig, Commands) ->
%% Make sure crypto is running
@ -176,9 +176,10 @@ run_aux(BaseConfig, Commands) ->
[Command | Args] = Commands,
CommandAtom = list_to_atom(Command),
BaseConfig1 = init_config1(BaseConfig),
%BaseConfig1 = init_config1(BaseConfig),
%% Process each command, resetting any state between each one
BaseConfig1 = rebar_state:set(BaseConfig, base_dir, filename:absname(rebar_state:dir(BaseConfig))),
{ok, Providers} = application:get_env(rebar, providers),
BaseConfig2 = rebar_state:create_logic_providers(Providers, BaseConfig1),
rebar_core:process_command(rebar_state:command_args(BaseConfig2, Args), CommandAtom),

+ 3
- 1
src/rebar_app_discover.erl Näytä tiedosto

@ -6,7 +6,9 @@
find_apps/2]).
do(State, LibDirs) ->
Apps = find_apps(LibDirs, all),
BaseDir = rebar_state:dir(State),
Dirs = [filename:join(BaseDir, LibDir) || LibDir <- LibDirs],
Apps = find_apps(Dirs, all),
ProjectDeps = rebar_state:deps_names(State),
lists:foldl(fun(AppInfo, StateAcc) ->
rebar_state:project_apps(StateAcc, rebar_app_info:deps(AppInfo, ProjectDeps))

+ 25
- 2
src/rebar_app_info.erl Näytä tiedosto

@ -4,6 +4,7 @@
new/1,
new/2,
new/3,
new/4,
name/1,
name/2,
config/1,
@ -22,7 +23,9 @@
dir/1,
dir/2,
source/1,
source/2]).
source/2,
valid/1,
valid/2]).
-export_type([t/0]).
@ -34,7 +37,8 @@
app_details :: list(),
deps=[] :: list(),
dir :: file:name(),
source :: string() | undefined}).
source :: string() | undefined,
valid :: boolean()}).
%%============================================================================
%% types
@ -69,6 +73,15 @@ new(AppName, Vsn, Dir) ->
original_vsn=Vsn,
dir=Dir}}.
%% @doc build a complete version of the app info with all fields set.
-spec new(atom() | binary() | string(), string(), file:name(), list()) ->
{ok, t()}.
new(AppName, Vsn, Dir, Deps) ->
{ok, #app_info_t{name=ec_cnv:to_binary(AppName),
original_vsn=Vsn,
dir=Dir,
deps=Deps}}.
-spec name(t()) -> atom().
name(#app_info_t{name=Name}) ->
Name.
@ -160,3 +173,13 @@ source(AppInfo=#app_info_t{}, Source) ->
-spec source(t()) -> string().
source(#app_info_t{source=Source}) ->
Source.
-spec valid(t()) -> boolean().
valid(#app_info_t{dir=Dir, valid=undefined}) ->
true;
valid(#app_info_t{valid=Valid}) ->
Valid.
-spec valid(t(), boolean()) -> t().
valid(AppInfo=#app_info_t{}, Valid) ->
AppInfo#app_info_t{valid=Valid}.

+ 7
- 0
src/rebar_state.erl Näytä tiedosto

@ -4,6 +4,7 @@
get/2, get/3, set/3,
command_args/1, command_args/2,
dir/1, dir/2,
set_skip_dir/2, is_skip_dir/2, reset_skip_dirs/1,
create_logic_providers/2,
@ -106,6 +107,12 @@ command_args(#state_t{command_args=CmdArgs}) ->
command_args(State, CmdArgs) ->
State#state_t{command_args=CmdArgs}.
dir(#state_t{dir=Dir}) ->
Dir.
dir(State=#state_t{}, Dir) ->
State#state_t{dir=filename:absname(Dir)}.
deps_names(State) ->
Deps = rebar_state:get(State, deps, []),
lists:map(fun(Dep) when is_tuple(Dep) ->

+ 113
- 0
test/rebar_install_deps_SUITE.erl Näytä tiedosto

@ -0,0 +1,113 @@
-module(rebar_install_deps_SUITE).
-export([suite/0,
init_per_suite/1,
end_per_suite/1,
init_per_testcase/2,
all/0,
build_basic_app/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
-include_lib("kernel/include/file.hrl").
-include_lib("kernel/include/file.hrl").
suite() ->
[].
init_per_suite(Config) ->
Config.
end_per_suite(_Config) ->
ok.
init_per_testcase(_, Config) ->
DataDir = proplists:get_value(data_dir, Config),
AppsDir = filename:join([DataDir, create_random_name("apps_dir1_")]),
ok = ec_file:mkdir_p(AppsDir),
Verbosity = rebar:log_level([]),
rebar_log:init(command_line, Verbosity),
State = rebar_state:new(),
[{apps, AppsDir}, {state, State} | Config].
all() ->
[built_basic_app].
build_basic_app(Config) ->
AppDir = proplists:get_value(apps, Config),
State = proplists:get_value(state, Config),
Name = create_random_name("app1_"),
Vsn = create_random_vsn(),
create_app(AppDir, Name, Vsn, [kernel, stdlib]),
ConfigFile = filename:join([AppDir, "rebar.config"]),
write_config(ConfigFile, []),
rebar:run(rebar_state:new(State, [], AppDir), ["compile"]),
%% Verify app was built
[App] = rebar_app_discover:find_apps([AppDir]),
?assertEqual(Name, ec_cnv:to_list(rebar_app_info:name(App))).
%%%===================================================================
%%% Helper Functions
%%%===================================================================
create_app(AppDir, Name, Vsn, Deps) ->
write_src_file(AppDir, Name),
write_app_src_file(AppDir, Name, Vsn, Deps),
rebar_app_info:new(Name, Vsn, AppDir, Deps).
create_empty_app(AppDir, Name, Vsn, Deps) ->
write_app_file(AppDir, Name, Vsn, Deps),
rebar_app_info:new(Name, Vsn, AppDir, Deps).
write_beam_file(Dir, Name) ->
Beam = filename:join([Dir, "ebin", "not_a_real_beam" ++ Name ++ ".beam"]),
ok = filelib:ensure_dir(Beam),
ok = ec_file:write_term(Beam, testing_purposes_only).
write_src_file(Dir, Name) ->
Erl = filename:join([Dir, "src", "not_a_real_src" ++ Name ++ ".erl"]),
ok = filelib:ensure_dir(Erl),
ok = ec_file:write(Erl, erl_src_file("not_a_real_src" ++ Name ++ ".erl")).
write_app_file(Dir, Name, Version, Deps) ->
Filename = filename:join([Dir, "ebin", Name ++ ".app"]),
ok = filelib:ensure_dir(Filename),
ok = ec_file:write_term(Filename, get_app_metadata(ec_cnv:to_list(Name), Version, Deps)).
write_app_src_file(Dir, Name, Version, Deps) ->
Filename = filename:join([Dir, "src", Name ++ ".app.src"]),
ok = filelib:ensure_dir(Filename),
ok = ec_file:write_term(Filename, get_app_metadata(ec_cnv:to_list(Name), Version, Deps)).
get_app_metadata(Name, Vsn, Deps) ->
{application, erlang:list_to_atom(Name),
[{description, ""},
{vsn, Vsn},
{modules, []},
{included_applications, []},
{registered, []},
{applications, Deps}]}.
create_random_name(Name) ->
random:seed(erlang:now()),
Name ++ erlang:integer_to_list(random:uniform(1000000)).
create_random_vsn() ->
random:seed(erlang:now()),
lists:flatten([erlang:integer_to_list(random:uniform(100)),
".", erlang:integer_to_list(random:uniform(100)),
".", erlang:integer_to_list(random:uniform(100))]).
write_config(Filename, Values) ->
ok = filelib:ensure_dir(Filename),
ok = ec_file:write(Filename,
[io_lib:format("~p.\n", [Val]) || Val <- Values]).
erl_src_file(Name) ->
io_lib:format("-module(~s).\n"
"-export([main/0]).\n"
"main() -> ok.\n", [filename:basename(Name, ".erl")]).

Ladataan…
Peruuta
Tallenna