diff options
| author | Roberto Ostinelli <roberto@ostinelli.net> | 2012-08-19 14:23:06 -0700 | 
|---|---|---|
| committer | Tuncer Ayaz <tuncer.ayaz@gmail.com> | 2012-08-20 12:58:31 +0200 | 
| commit | fa6618f2b410c2b71877c1878dff3a0c8503000c (patch) | |
| tree | ce7102414e0a90be3ea9ddb5e52f84bde9be7649 | |
| parent | 9dd8e7f2ee581842d0376fef4292613b4e8275be (diff) | |
Add experimental tests= filter without eunit suites
| -rw-r--r-- | src/rebar.erl | 5 | ||||
| -rw-r--r-- | src/rebar_eunit.erl | 24 | ||||
| -rw-r--r-- | 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 +%%   </li> +%%   <li> +%%      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 +%%   </li>  %% </ul>  %% 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_() -> | 
