diff options
author | Tristan Sloughter <t@crashfast.com> | 2015-10-31 10:18:12 -0500 |
---|---|---|
committer | Tristan Sloughter <t@crashfast.com> | 2015-10-31 10:18:12 -0500 |
commit | 591b018258ca321b9a67e1b44dc4bfd9104ae5ac (patch) | |
tree | d8f4ff60f8671e4a7b49046a8c0441ec7b3a7c98 /src/rebar3.erl | |
parent | d2be2f2b72eced609d7352cdf7e91bc815ccfbd4 (diff) | |
parent | 3fc51b912cb8a71cb48e7e21af96057b14a3828e (diff) |
Merge pull request #896 from talentdeficit/test_bootstrap
move test profile bootstrap into core
Diffstat (limited to 'src/rebar3.erl')
-rw-r--r-- | src/rebar3.erl | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/rebar3.erl b/src/rebar3.erl index e55db71..2b73844 100644 --- a/src/rebar3.erl +++ b/src/rebar3.erl @@ -96,7 +96,7 @@ run(RawArgs) -> run_aux(BaseState2, RawArgs). run_aux(State, RawArgs) -> - State2 = case os:getenv("REBAR_PROFILE") of + State1 = case os:getenv("REBAR_PROFILE") of false -> State; "" -> @@ -105,6 +105,9 @@ run_aux(State, RawArgs) -> rebar_state:apply_profiles(State, [list_to_atom(Profile)]) end, + %% bootstrap test profile + State2 = rebar_state:add_to_profile(State1, test, test_state(State1)), + %% Process each command, resetting any state between each one BaseDir = rebar_state:get(State, base_dir, ?DEFAULT_BASE_DIR), State3 = rebar_state:set(State2, base_dir, @@ -319,3 +322,21 @@ state_from_global_config(Config, GlobalConfigFile) -> GlobalConfig2 = rebar_state:set(GlobalConfig, plugins, []), GlobalConfig3 = rebar_state:set(GlobalConfig2, {plugins, global}, rebar_state:get(GlobalConfigThrowAway, plugins, [])), rebar_state:providers(rebar_state:new(GlobalConfig3, Config), GlobalPlugins). + +test_state(State) -> + ErlOpts = rebar_state:get(State, erl_opts, []), + TestOpts = safe_define_test_macro(ErlOpts), + [{extra_src_dirs, ["test"]}, {erl_opts, TestOpts}]. + +safe_define_test_macro(Opts) -> + %% defining a compile macro twice results in an exception so + %% make sure 'TEST' is only defined once + case test_defined(Opts) of + true -> []; + false -> [{d, 'TEST'}] + end. + +test_defined([{d, 'TEST'}|_]) -> true; +test_defined([{d, 'TEST', true}|_]) -> true; +test_defined([_|Rest]) -> test_defined(Rest); +test_defined([]) -> false.
\ No newline at end of file |