@@ -7,6 +7,8 @@ Code.require_file("../../test_helper.exs", __DIR__)
77defmodule Mix.Tasks.App.TreeTest do
88 use MixTest.Case
99
10+ import ExUnit.CaptureIO
11+
1012 defmodule AppDepsSample do
1113 def project do
1214 [ app: :test , version: "0.1.0" ]
@@ -137,6 +139,54 @@ defmodule Mix.Tasks.App.TreeTest do
137139 end )
138140 end
139141
142+ @ expected_dot """
143+ digraph "application tree" {
144+ "test"
145+ "test" -> "app_deps_sample"
146+ "app_deps_sample" -> "app_deps2_sample"
147+ "app_deps2_sample" -> "app_deps4_sample" [label="(included)"]
148+ "app_deps_sample" -> "app_deps3_sample"
149+ "test" -> "elixir"
150+ "test" -> "logger"
151+ "logger" -> "elixir"
152+ }
153+ """
154+
155+ @ tag apps: [ :test , :app_deps_sample , :app_deps2_sample , :app_deps3_sample , :app_deps4_sample ]
156+ test "writes the dot graph to a custom file via --output" , context do
157+ in_tmp ( context . test , fn ->
158+ Mix.Project . push ( AppDepsSample )
159+
160+ load_apps ( )
161+ Mix.Tasks.App.Tree . run ( [ "--format" , "dot" , "--output" , "custom.dot" ] )
162+
163+ assert File . read! ( "custom.dot" ) == @ expected_dot
164+ refute File . exists? ( "app_tree.dot" )
165+
166+ File . write! ( "custom.dot" , "previous" )
167+ Mix.Tasks.App.Tree . run ( [ "--format" , "dot" , "--output" , "custom.dot" ] )
168+ assert File . read! ( "custom.dot" ) == @ expected_dot
169+ assert File . read! ( "custom.dot.bak" ) == "previous"
170+ end )
171+ end
172+
173+ @ tag apps: [ :test , :app_deps_sample , :app_deps2_sample , :app_deps3_sample , :app_deps4_sample ]
174+ test "writes the dot graph to stdout via --output -" , context do
175+ in_tmp ( context . test , fn ->
176+ Mix.Project . push ( AppDepsSample )
177+
178+ load_apps ( )
179+
180+ output =
181+ capture_io ( fn ->
182+ Mix.Tasks.App.Tree . run ( [ "--format" , "dot" , "--output" , "-" ] )
183+ end )
184+
185+ assert output == @ expected_dot
186+ refute File . exists? ( "app_tree.dot" )
187+ end )
188+ end
189+
140190 defp load_apps ( optional_apps \\ [ ] ) do
141191 :ok = :application . load ( { :application , :app_deps4_sample , [ vsn: ~c" 1.0.0" , env: [ ] ] } )
142192 :ok = :application . load ( { :application , :app_deps3_sample , [ vsn: ~c" 1.0.0" , env: [ ] ] } )
0 commit comments