@@ -121,9 +121,9 @@ defmodule Mix.Tasks.Test do
121
121
122
122
* `--cover` - runs coverage tool. See "Coverage" section below
123
123
124
- * `--dry-run` - prints which tests would be run based on current options,
124
+ * `--dry-run` *(since v1.19.0)* - prints which tests would be run based on current options,
125
125
but does not actually run any tests. This combines with all other options
126
- like `--stale`, `--only`, `--exclude`, etc .
126
+ like `--stale`, `--only`, `--exclude`, and so on .
127
127
128
128
* `--exclude` - excludes tests that match the filter. This option may be given
129
129
several times to apply different filters, such as `--exclude ci --exclude slow`
@@ -628,7 +628,6 @@ defmodule Mix.Tasks.Test do
628
628
629
629
warnings_as_errors? = Keyword . get ( opts , :warnings_as_errors , false )
630
630
exit_status = Keyword . fetch! ( ex_unit_opts , :exit_status )
631
- dry_run? = Keyword . get ( opts , :dry_run , false )
632
631
633
632
# Prepare and extract all files to require and run
634
633
test_paths = project [ :test_paths ] || default_test_paths ( )
@@ -665,115 +664,69 @@ defmodule Mix.Tasks.Test do
665
664
666
665
warn_files != [ ] && warn_misnamed_test_files ( warn_files )
667
666
668
- if dry_run? do
669
- do_dry_run ( matched_test_files )
667
+ try do
668
+ Enum . each ( test_paths , & require_test_helper ( shell , & 1 ) )
669
+ # test_opts always wins because those are given via args
670
+ ExUnit . configure ( ex_unit_opts |> merge_helper_opts ( ) |> Keyword . merge ( test_opts ) )
671
+ CT . require_and_run ( matched_test_files , test_paths , test_elixirc_options , opts )
672
+ catch
673
+ kind , reason ->
674
+ # Also mark the whole suite as failed
675
+ file = Keyword . fetch! ( opts , :failures_manifest_path )
676
+ ExUnit.Filters . fail_all! ( file )
677
+ :erlang . raise ( kind , reason , __STACKTRACE__ )
670
678
else
671
- do_wet_run (
672
- shell ,
673
- cover ,
674
- test_paths ,
675
- files ,
676
- matched_test_files ,
677
- test_opts ,
678
- test_elixirc_options ,
679
- ex_unit_opts ,
680
- warnings_as_errors? ,
681
- exit_status ,
682
- opts
683
- )
684
- end
685
- end
679
+ { :ok , % { excluded: excluded , failures: failures , warnings?: warnings? , total: total } } ->
680
+ Mix . shell ( shell )
681
+ cover && cover . ( )
686
682
687
- defp do_dry_run ( matched_test_files ) do
688
- if matched_test_files == [ ] do
689
- Mix . shell ( ) . info ( """
690
- -- DRY RUN --
691
- No tests would run
692
- """ )
693
- else
694
- Mix . shell ( ) . info ( """
695
- -- DRY RUN --
696
- The following test files would be run:
683
+ cond do
684
+ warnings_as_errors? and warnings? and failures == 0 ->
685
+ message =
686
+ "\n ERROR! Test suite aborted after successful execution due to warnings while using the --warnings-as-errors option"
697
687
698
- #{ Enum . join ( matched_test_files , "\n " ) }
699
- """ )
700
- end
701
- end
688
+ IO . puts ( :stderr , IO.ANSI . format ( [ :red , message ] ) )
702
689
703
- defp do_wet_run (
704
- shell ,
705
- cover ,
706
- test_paths ,
707
- files ,
708
- matched_test_files ,
709
- test_opts ,
710
- test_elixirc_options ,
711
- ex_unit_opts ,
712
- warnings_as_errors? ,
713
- exit_status ,
714
- opts
715
- ) do
716
- Enum . each ( test_paths , & require_test_helper ( shell , & 1 ) )
717
- # test_opts always wins because those are given via args
718
- ExUnit . configure ( ex_unit_opts |> merge_helper_opts ( ) |> Keyword . merge ( test_opts ) )
719
- CT . require_and_run ( matched_test_files , test_paths , test_elixirc_options , opts )
720
- catch
721
- kind , reason ->
722
- # Also mark the whole suite as failed
723
- file = Keyword . fetch! ( opts , :failures_manifest_path )
724
- ExUnit.Filters . fail_all! ( file )
725
- :erlang . raise ( kind , reason , __STACKTRACE__ )
726
- else
727
- { :ok , % { excluded: excluded , failures: failures , warnings?: warnings? , total: total } } ->
728
- Mix . shell ( shell )
729
- cover && cover . ( )
690
+ System . at_exit ( fn _ ->
691
+ exit ( { :shutdown , 1 } )
692
+ end )
730
693
731
- cond do
732
- warnings_as_errors? and warnings? and failures == 0 ->
733
- message =
734
- "\n ERROR! Test suite aborted after successful execution due to warnings while using the --warnings-as-errors option"
735
-
736
- IO . puts ( :stderr , IO.ANSI . format ( [ :red , message ] ) )
737
-
738
- System . at_exit ( fn _ ->
739
- exit ( { :shutdown , 1 } )
740
- end )
694
+ failures > 0 and opts [ :raise ] ->
695
+ raise_with_shell ( shell , "\" mix test\" failed" )
741
696
742
- failures > 0 and opts [ :raise ] ->
743
- raise_with_shell ( shell , "\" mix test\" failed" )
697
+ warnings_as_errors? and warnings? and failures > 0 ->
698
+ System . at_exit ( fn _ ->
699
+ exit ( { :shutdown , exit_status + 1 } )
700
+ end )
744
701
745
- warnings_as_errors? and warnings? and failures > 0 ->
746
- System . at_exit ( fn _ ->
747
- exit ( { :shutdown , exit_status + 1 } )
748
- end )
702
+ failures > 0 ->
703
+ System . at_exit ( fn _ ->
704
+ exit ( { :shutdown , exit_status } )
705
+ end )
749
706
750
- failures > 0 ->
751
- System . at_exit ( fn _ ->
752
- exit ( { :shutdown , exit_status } )
753
- end )
707
+ excluded == total and Keyword . has_key? ( opts , :only ) ->
708
+ message = "The --only option was given to \" mix test\" but no test was executed"
709
+ raise_or_error_at_exit ( shell , message , opts )
754
710
755
- excluded == total and Keyword . has_key? ( opts , :only ) ->
756
- message = "The --only option was given to \" mix test \" but no test was executed"
757
- raise_or_error_at_exit ( shell , message , opts )
711
+ true ->
712
+ :ok
713
+ end
758
714
759
- true ->
760
- :ok
761
- end
715
+ :noop ->
716
+ cond do
717
+ opts [ :stale ] ->
718
+ Mix . shell ( ) . info ( "No stale tests" )
762
719
763
- :noop ->
764
- cond do
765
- opts [ :stale ] ->
766
- Mix . shell ( ) . info ( "No stale tests" )
720
+ opts [ :failed ] || files == [ ] ->
721
+ Mix . shell ( ) . info ( "There are no tests to run" )
767
722
768
- opts [ :failed ] || files == [ ] ->
769
- Mix . shell ( ) . info ( "There are no tests to run" )
723
+ true ->
724
+ message = "Paths given to \" mix test\" did not match any directory/file: "
725
+ raise_or_error_at_exit ( shell , message <> Enum . join ( files , ", " ) , opts )
726
+ end
770
727
771
- true ->
772
- message = "Paths given to \" mix test\" did not match any directory/file: "
773
- raise_or_error_at_exit ( shell , message <> Enum . join ( files , ", " ) , opts )
774
- end
775
-
776
- :ok
728
+ :ok
729
+ end
777
730
end
778
731
779
732
# similar to Mix.Utils.extract_files/2, but returns a list of directly included test files,
0 commit comments