From fa6618f2b410c2b71877c1878dff3a0c8503000c Mon Sep 17 00:00:00 2001 From: Roberto Ostinelli Date: Sun, 19 Aug 2012 14:23:06 -0700 Subject: [PATCH] Add experimental tests= filter without eunit suites --- src/rebar.erl | 5 +++++ src/rebar_eunit.erl | 24 ++++++++++++++++-------- test/rebar_eunit_tests.erl | 20 +++++++++++++++++++- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/rebar.erl b/src/rebar.erl index aec516b..32c95d2 100644 --- a/src/rebar.erl +++ b/src/rebar.erl @@ -300,6 +300,11 @@ generate-appups previous_release=path Generate appup files eunit [suites=foo] Run eunit tests [foo.erl and test/foo_tests.erl] [suites=foo] [tests=bar] Run specific eunit tests [first test name starting with 'bar' in foo.erl and test/foo_tests.erl] + [tests=bar] For every existing suite, run the first test whose + name starts with bar and, if no such test exists, + run the test whose name starts with bar in + the suite's _tests module + ct [suites=] [case=] Run common_test suites qc Test QuickCheck properties diff --git a/src/rebar_eunit.erl b/src/rebar_eunit.erl index be9417e..765f59f 100644 --- a/src/rebar_eunit.erl +++ b/src/rebar_eunit.erl @@ -51,6 +51,12 @@ %% suites="foo,bar" tests="baz"- runs first test with name starting %% with 'baz' in foo.erl, test/foo_tests.erl and tests in bar.erl, %% test/bar_tests.erl +%% +%%
  • +%% tests="baz"- For every existing suite, run the first test whose +%% name starts with bar and, if no such test exists, run the test +%% whose name starts with bar in the suite's _tests module +%%
  • %% %% Additionally, for projects that have separate folders for the core %% implementation, and for the unit tests, then the following @@ -112,7 +118,8 @@ run_eunit(Config, CodePath, SrcErls) -> %% Get modules to be run in eunit AllModules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- AllBeamFiles], {SuitesProvided, FilteredModules} = filter_suites(Config, AllModules), - %% TODO: make tests= work with no suites= provided + + %% build the tests Tests = get_tests(Config, SuitesProvided, ModuleBeamFiles, FilteredModules), SrcModules = [rebar_utils:erl_to_mod(M) || M <- SrcErls], @@ -174,7 +181,7 @@ filter_suites1(Modules, Suites) -> [M || M <- Modules, lists:member(M, Suites)]. get_tests(Config, SuitesProvided, ModuleBeamFiles, FilteredModules) -> - case SuitesProvided of + Modules = case SuitesProvided of false -> %% No specific suites have been provided, use ModuleBeamFiles %% which filters out "*_tests" modules so eunit won't doubly run @@ -194,18 +201,19 @@ get_tests(Config, SuitesProvided, ModuleBeamFiles, FilteredModules) -> %% public interface of the main module (and no other code)." [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- ModuleBeamFiles]; true -> - %% Specific suites have been provided, return the existing modules - build_tests(Config, FilteredModules) - end. + %% Specific suites have been provided, return the filtered modules + FilteredModules + end, + build_tests(Config, Modules). -build_tests(Config, SuitesModules) -> +build_tests(Config, Modules) -> RawFunctions = rebar_utils:get_experimental_global(Config, tests, ""), Tests = [list_to_atom(F1) || F1 <- string:tokens(RawFunctions, ",")], case Tests of [] -> - SuitesModules; + Modules; Functions -> - case build_tests1(SuitesModules, Functions, []) of + case build_tests1(Modules, Functions, []) of [] -> []; RawTests -> diff --git a/test/rebar_eunit_tests.erl b/test/rebar_eunit_tests.erl index d70d4b7..bf2428b 100644 --- a/test/rebar_eunit_tests.erl +++ b/test/rebar_eunit_tests.erl @@ -138,7 +138,7 @@ eunit_with_suites_and_tests_test_() -> {"Selected suite tests are run once", ?_assert(string:str(RebarOut, "All 3 tests passed") =/= 0)}] end}, - {"Ensure EUnit runs specific test in _tests suites", + {"Ensure EUnit runs specific test in a _tests suite", setup, fun() -> setup_project_with_multiple_modules(), @@ -155,6 +155,24 @@ eunit_with_suites_and_tests_test_() -> {"Selected suite tests is run once", ?_assert(string:str(RebarOut, "Test passed") =/= 0)}] + end}, + {"Ensure EUnit runs a specific test without a specified suite", + setup, + fun() -> + setup_project_with_multiple_modules(), + rebar("-v eunit tests=myprivate") + end, + fun teardown/1, + fun(RebarOut) -> + [{"Only selected suite tests are found and run", + [?_assert(string:str(RebarOut, + "myapp_mymod:myprivate_test/0") =/= 0), + ?_assert(string:str(RebarOut, + "myapp_mymod2:myprivate2_test/0") + =/= 0)]}, + + {"Selected suite tests is run once", + ?_assert(string:str(RebarOut, "All 2 tests passed") =/= 0)}] end}]. cover_test_() ->