@@ -252,8 +252,6 @@ defmodule Mix.UmbrellaTest do
252252 end )
253253 end
254254
255- ## Umbrellas as a dependency
256-
257255 test "list deps for umbrella as dependency" do
258256 in_fixture ( "umbrella_dep" , fn ->
259257 Mix.Project . in_project ( :umbrella_dep , "." , fn _ ->
@@ -373,7 +371,7 @@ defmodule Mix.UmbrellaTest do
373371 end )
374372 end
375373
376- test "recompiles after compile time path dependency changes " do
374+ test "recompiles when path dependencies change " do
377375 in_fixture ( "umbrella_dep/deps/umbrella/apps" , fn ->
378376 Mix.Project . in_project ( :bar , "bar" , fn _ ->
379377 Mix.Task . run ( "compile" , [ ] )
@@ -385,30 +383,13 @@ defmodule Mix.UmbrellaTest do
385383 assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
386384 assert_receive { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
387385
388- # Emulate local recompilation
386+ # Compile-time dependencies are recompiled
389387 File . write! ( "../foo/lib/foo.ex" , File . read! ( "../foo/lib/foo.ex" ) <> "\n " )
390- mtime = File . stat! ( "_build/dev/lib/bar/.mix/compile.elixir" ) . mtime
391- ensure_touched ( "../foo/lib/foo.ex" , mtime )
392-
393- Mix.Task . clear ( )
394- assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
395- assert_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
396-
397- # But exports dependencies are not recompiled
398- File . write! ( "lib/bar.ex" , "defmodule Bar, do: (require Foo)" )
388+ ensure_touched ( "../foo/lib/foo.ex" , "_build/dev/lib/foo/.mix/compile.elixir" )
399389
400390 Mix.Task . clear ( )
401391 assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
402392 assert_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
403-
404- # Touch to emulate local recompilation
405- File . write! ( "../foo/lib/foo.ex" , File . read! ( "../foo/lib/foo.ex" ) <> "\n " )
406- mtime = File . stat! ( "_build/dev/lib/bar/.mix/compile.elixir" ) . mtime
407- ensure_touched ( "../foo/lib/foo.ex" , mtime )
408-
409- Mix.Task . clear ( )
410- assert Mix.Tasks.Compile.Elixir . run ( [ "--verbose" ] ) == { :noop , [ ] }
411- refute_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
412393 end )
413394
414395 # Now let's add a new file to foo
@@ -446,18 +427,39 @@ defmodule Mix.UmbrellaTest do
446427 File . write! ( "../foo/lib/foo.ex" , "defmodule Foo, do: defstruct [:bar]" )
447428
448429 # Add struct dependency
449- File . write! ( "lib/bar.ex" , "defmodule Bar, do: %Foo{bar: true}" )
430+ File . write! ( "lib/bar.ex" , """
431+ defmodule Bar do
432+ def is_foo_bar(%Foo{bar: true}), do: true
433+ end
434+ """ )
435+
450436 Mix.Task . run ( "compile" , [ "--verbose" ] )
451- assert_receive { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
437+ assert_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
452438
453- # Recompiles for struct dependencies
439+ # Does not recompiles if export dependency does not change
454440 File . write! ( "../foo/lib/foo.ex" , File . read! ( "../foo/lib/foo.ex" ) <> "\n " )
455- mtime = File . stat! ( "_build/dev/lib/bar/.mix/compile.elixir" ) . mtime
456- ensure_touched ( "../foo/lib/foo.ex" , mtime )
441+ ensure_touched ( "../foo/lib/foo.ex" , "_build/dev/lib/bar/.mix/compile.elixir" )
457442
458443 Mix.Task . clear ( )
459444 assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
460- assert_receive { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
445+ refute_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
446+
447+ # Recompiles if export dependency changes
448+ File . write! ( "../foo/lib/foo.ex" , "defmodule Foo, do: defstruct [:bar, :baz]" )
449+ ensure_touched ( "../foo/lib/foo.ex" , "_build/dev/lib/bar/.mix/compile.elixir" )
450+
451+ Mix.Task . clear ( )
452+ assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
453+ assert_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
454+
455+ # Recompiles if export dependency is removed
456+ File . rm! ( "../foo/lib/foo.ex" )
457+ Mix.Task . clear ( )
458+
459+ ExUnit.CaptureIO . capture_io ( :stderr , fn ->
460+ Process . flag ( :trap_exit , true )
461+ catch_exit ( Mix.Task . run ( "compile" , [ "--verbose" ] ) )
462+ end )
461463 end )
462464 end )
463465 end
@@ -480,16 +482,15 @@ defmodule Mix.UmbrellaTest do
480482 # Add compile time to Foo.Bar
481483 File . write! ( "lib/bar.ex" , "defmodule Bar, do: Foo.Bar.hello()" )
482484 Mix.Task . run ( "compile" , [ "--verbose" ] )
483- assert_receive { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
485+ assert_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
484486
485487 # Recompiles for due to compile dependency via runtime dependencies
486488 File . write! ( "../foo/lib/foo.baz.ex" , File . read! ( "../foo/lib/foo.baz.ex" ) <> "\n " )
487- mtime = File . stat! ( "_build/dev/lib/bar/.mix/compile.elixir" ) . mtime
488- ensure_touched ( "../foo/lib/foo.ex" , mtime )
489+ ensure_touched ( "../foo/lib/foo.ex" , "_build/dev/lib/bar/.mix/compile.elixir" )
489490
490491 Mix.Task . clear ( )
491492 assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
492- assert_receive { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
493+ assert_received { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
493494 end )
494495 end )
495496 end
0 commit comments