@@ -252,8 +252,6 @@ defmodule Mix.UmbrellaTest do
252
252
end )
253
253
end
254
254
255
- ## Umbrellas as a dependency
256
-
257
255
test "list deps for umbrella as dependency" do
258
256
in_fixture ( "umbrella_dep" , fn ->
259
257
Mix.Project . in_project ( :umbrella_dep , "." , fn _ ->
@@ -373,7 +371,7 @@ defmodule Mix.UmbrellaTest do
373
371
end )
374
372
end
375
373
376
- test "recompiles after compile time path dependency changes " do
374
+ test "recompiles when path dependencies change " do
377
375
in_fixture ( "umbrella_dep/deps/umbrella/apps" , fn ->
378
376
Mix.Project . in_project ( :bar , "bar" , fn _ ->
379
377
Mix.Task . run ( "compile" , [ ] )
@@ -385,30 +383,13 @@ defmodule Mix.UmbrellaTest do
385
383
assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
386
384
assert_receive { :mix_shell , :info , [ "Compiled lib/bar.ex" ] }
387
385
388
- # Emulate local recompilation
386
+ # Compile-time dependencies are recompiled
389
387
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" )
399
389
400
390
Mix.Task . clear ( )
401
391
assert Mix.Task . run ( "compile" , [ "--verbose" ] ) == { :ok , [ ] }
402
392
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" ] }
412
393
end )
413
394
414
395
# Now let's add a new file to foo
@@ -446,18 +427,39 @@ defmodule Mix.UmbrellaTest do
446
427
File . write! ( "../foo/lib/foo.ex" , "defmodule Foo, do: defstruct [:bar]" )
447
428
448
429
# 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
+
450
436
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" ] }
452
438
453
- # Recompiles for struct dependencies
439
+ # Does not recompiles if export dependency does not change
454
440
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" )
457
442
458
443
Mix.Task . clear ( )
459
444
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 )
461
463
end )
462
464
end )
463
465
end
@@ -480,16 +482,15 @@ defmodule Mix.UmbrellaTest do
480
482
# Add compile time to Foo.Bar
481
483
File . write! ( "lib/bar.ex" , "defmodule Bar, do: Foo.Bar.hello()" )
482
484
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" ] }
484
486
485
487
# Recompiles for due to compile dependency via runtime dependencies
486
488
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" )
489
490
490
491
Mix.Task . clear ( )
491
492
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" ] }
493
494
end )
494
495
end )
495
496
end
0 commit comments