@@ -75,28 +75,27 @@ defmodule Mix.Tasks.DepsTest do
7575
7676 ## deps
7777
78- test "prints list of dependencies and their status" do
78+ test "prints list of dependencies and their status alphabetically " do
7979 in_fixture ( "deps_status" , fn ->
8080 Mix.Project . push ( DepsApp )
81-
8281 Mix.Tasks.Deps . run ( [ ] )
8382
84- assert_received { :mix_shell , :info , [ "* ok (https://github.com/elixir-lang/ok.git) (mix)" ] }
85- msg = " the dependency is not available, run \" mix deps.get \" "
86- assert_received { :mix_shell , :info , [ ^ msg ] }
87-
88- assert_received { :mix_shell , :info , [ "* invalidvsn (deps/invalidvsn)" ] }
89- assert_received { :mix_shell , :info , [ " the app file contains an invalid version: :ok " ] }
90-
91- assert_received { :mix_shell , :info , [ "* invalidapp (deps/invalidapp) (mix) " ] }
92- msg = " the app file at \" _build/dev/lib/invalidapp/ebin/invalidapp.app \" is invalid"
93- assert_received { :mix_shell , :info , [ ^ msg ] }
94-
95- assert_received { :mix_shell , :info , [ "* noappfile (deps/noappfile )" ] }
96- assert_received { :mix_shell , :info , [ " could not find an app file at " <> _ ] }
97-
98- assert_received { :mix_shell , :info , [ "* nosemver ( deps/nosemver) " ] }
99- assert_received { :mix_shell , :info , [ " the app file specified a non-Semantic" <> _ ] }
83+ invalid_app_file =
84+ " the app file at \" _build/dev/lib/invalidapp/ebin/invalidapp.app \" is invalid "
85+
86+ assert { :messages ,
87+ [
88+ { :mix_shell , :info , [ "* invalidapp (deps/invalidapp) (mix) " ] } ,
89+ { :mix_shell , :info , [ ^ invalid_app_file ] } ,
90+ { :mix_shell , :info , [ "* invalidvsn (deps/invalidvsn) " ] } ,
91+ { :mix_shell , :info , [ " the app file contains an invalid version: :ok" ] } ,
92+ { :mix_shell , :info , [ "* noappfile (deps/noappfile)" ] } ,
93+ { :mix_shell , :info , [ " could not find an app file at " <> _ ] } ,
94+ { :mix_shell , :info , [ "* nosemver (deps/nosemver )" ] } ,
95+ { :mix_shell , :info , [ " the app file specified a non-Semantic " <> _ ] } ,
96+ { :mix_shell , :info , [ "* ok (https://github.com/elixir-lang/ok.git) (mix)" ] } ,
97+ { :mix_shell , :info , [ " the dependency is not available, run \" mix deps.get \" " ] }
98+ ] } = Process . info ( self ( ) , :messages )
10099 end )
101100 end
102101
@@ -125,51 +124,31 @@ defmodule Mix.Tasks.DepsTest do
125124 end )
126125 end
127126
128- test "filters dependencies preserving argument order " do
127+ test "filters dependencies and deals with duplicates " do
129128 in_fixture ( "deps_status" , fn ->
130129 Mix.Project . push ( DepsApp )
131130
132- Mix.Tasks.Deps . run ( [ "nosemver" , "unknowndep2" , "ok" , "unknowndep1" , "invalidapp" ] )
133-
134- assert_output_order ( [
135- { :info , "nosemver" } ,
136- { :info , "ok" } ,
137- { :info , "invalidapp" } ,
138- { :error , "unknowndep2" } ,
139- { :error , "unknowndep1" }
131+ Mix.Tasks.Deps . run ( [
132+ "nosemver" ,
133+ "unknowndep2" ,
134+ "ok" ,
135+ "ok" ,
136+ "unknowndep1" ,
137+ "invalidapp" ,
138+ "ok"
140139 ] )
141- end )
142- end
143140
144- test "deduplicates arguments preserving first occurrence order" do
145- in_fixture ( "deps_status" , fn ->
146- Mix.Project . push ( DepsApp )
147-
148- Mix.Tasks.Deps . run ( [ "ok" , "ok" , "nosemver" , "unknowndep" , "ok" , "unknowndep" ] )
149-
150- messages = receive_shell_messages ( )
151-
152- assert_output_once ( messages , "ok" )
153- assert_output_once ( messages , "nosemver" )
154- assert_output_once ( messages , "unknowndep" )
155-
156- assert_output_order ( messages , [ { :info , "ok" } , { :info , "nosemver" } , { :error , "unknowndep" } ] )
157- end )
158- end
159-
160- test "lists all dependencies in alphabetical order when no filter is given" do
161- in_fixture ( "deps_status" , fn ->
162- Mix.Project . push ( DepsApp )
163-
164- Mix.Tasks.Deps . run ( [ ] )
165-
166- assert_output_order ( [
167- { :info , "invalidapp" } ,
168- { :info , "invalidvsn" } ,
169- { :info , "noappfile" } ,
170- { :info , "nosemver" } ,
171- { :info , "ok" }
172- ] )
141+ assert { :messages ,
142+ [
143+ { :mix_shell , :info , [ "* nosemver (deps/nosemver)" ] } ,
144+ { :mix_shell , :info , [ " the app file specified a non-Semantic" <> _ ] } ,
145+ { :mix_shell , :info , [ "* ok (https://github.com/elixir-lang/ok.git) (mix)" ] } ,
146+ { :mix_shell , :info , [ " the dependency is not available, run \" mix deps.get\" " ] } ,
147+ { :mix_shell , :info , [ "* invalidapp (deps/invalidapp) (mix)" ] } ,
148+ { :mix_shell , :info , [ " the app file at " <> _ ] } ,
149+ { :mix_shell , :error , [ "warning: unknown dependency unknowndep2" ] } ,
150+ { :mix_shell , :error , [ "warning: unknown dependency unknowndep1" ] }
151+ ] } = Process . info ( self ( ) , :messages )
173152 end )
174153 end
175154
@@ -1050,75 +1029,4 @@ defmodule Mix.Tasks.DepsTest do
10501029 assert File . exists? ( "deps/ok" )
10511030 end )
10521031 end
1053-
1054- ## Helpers
1055-
1056- defp assert_output_once ( messages , dep ) do
1057- matches = Enum . count ( messages , & ( info_message? ( & 1 , dep ) or warning_message? ( & 1 , dep ) ) )
1058-
1059- if matches != 1 do
1060- flunk ( """
1061- Expected output for #{ dep } to appear only once!
1062-
1063- Output:
1064- #{ inspect ( messages ) }
1065- """ )
1066- end
1067- end
1068-
1069- defp assert_output_order ( expected ) do
1070- assert_output_order ( receive_shell_messages ( ) , expected )
1071- end
1072-
1073- defp assert_output_order ( output , expected ) do
1074- # Find the index of each expected output line
1075- indices =
1076- Enum . map ( expected , fn
1077- { :info , dep } -> Enum . find_index ( output , & info_message? ( & 1 , dep ) )
1078- { :error , dep } -> Enum . find_index ( output , & warning_message? ( & 1 , dep ) )
1079- end )
1080-
1081- if not Enum . all? ( indices ) do
1082- flunk ( """
1083- Expected output not found!
1084-
1085- Expected:
1086- #{ inspect ( expected ) }
1087-
1088- Output:
1089- #{ inspect ( output ) }
1090- """ )
1091- end
1092-
1093- if not strictly_increasing? ( indices ) do
1094- flunk ( """
1095- Output not in expected order!
1096-
1097- Expected:
1098- #{ inspect ( expected ) }
1099-
1100- Output:
1101- #{ inspect ( output ) }
1102- """ )
1103- end
1104- end
1105-
1106- defp receive_shell_messages ( acc \\ [ ] ) do
1107- receive do
1108- { :mix_shell , level , [ line ] } when level in [ :info , :error ] ->
1109- receive_shell_messages ( [ { level , line } | acc ] )
1110- after
1111- 0 -> Enum . reverse ( acc )
1112- end
1113- end
1114-
1115- defp info_message? ( { :info , line } , dep ) , do: line =~ ~r/ ^\* #{ dep } /
1116- defp info_message? ( _message , _dep ) , do: false
1117-
1118- defp warning_message? ( { :error , line } , dep ) , do: line =~ ~r/ ^warning: .* #{ dep } /
1119- defp warning_message? ( _message , _dep ) , do: false
1120-
1121- defp strictly_increasing? ( [ ] ) , do: true
1122- defp strictly_increasing? ( [ _ ] ) , do: true
1123- defp strictly_increasing? ( [ a , b | rest ] ) , do: a < b and strictly_increasing? ( [ b | rest ] )
11241032end
0 commit comments