summaryrefslogtreecommitdiff
path: root/lib/mix/test/mix/tasks/compile.elixir_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mix/test/mix/tasks/compile.elixir_test.exs')
-rw-r--r--lib/mix/test/mix/tasks/compile.elixir_test.exs64
1 files changed, 50 insertions, 14 deletions
diff --git a/lib/mix/test/mix/tasks/compile.elixir_test.exs b/lib/mix/test/mix/tasks/compile.elixir_test.exs
index fa2a7a52e..9019b727e 100644
--- a/lib/mix/test/mix/tasks/compile.elixir_test.exs
+++ b/lib/mix/test/mix/tasks/compile.elixir_test.exs
@@ -5,11 +5,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
alias Mix.Task.Compiler.Diagnostic
use MixTest.Case
- setup do
- Mix.Project.push(MixTest.Case.Sample)
- :ok
- end
-
def trace(event, env) do
send(__MODULE__, {event, env})
:ok
@@ -18,7 +13,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
@elixir_otp_version {System.version(), :erlang.system_info(:otp_release)}
test "compiles a project without per environment build" do
- Mix.Project.pop()
Mix.ProjectStack.post_config(build_per_environment: false)
in_fixture("no_mixfile", fn ->
@@ -35,6 +29,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles a project with per environment build" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run(["--verbose"])
assert File.regular?("_build/dev/lib/sample/ebin/Elixir.A.beam")
@@ -49,6 +44,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
Process.register(self(), __MODULE__)
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run(["--tracer", "Mix.Tasks.Compile.ElixirTest"])
assert_received {{:on_module, _, :none}, %{module: A}}
assert_received {{:on_module, _, :none}, %{module: B}}
@@ -62,6 +58,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
Code.put_compiler_option(:tracers, [__MODULE__])
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run([])
assert_received {{:on_module, _, :none}, %{module: A}}
assert_received {{:on_module, _, :none}, %{module: B}}
@@ -72,6 +69,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "warns when Logger is used but not depended on" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
require Logger
@@ -96,6 +95,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not warn when __info__ is used but not depended on" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
require Logger
@@ -109,21 +110,21 @@ defmodule Mix.Tasks.Compile.ElixirTest do
end)
end
- test "recompiles module-application manifest if manifest is outdated" do
+ test "recompiles module-application manifest if manifest changes" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run(["--force"])
purge([A, B])
- mtime = {{1970, 1, 1}, {0, 0, 0}}
- File.touch!("_build/dev/lib/sample/.mix/compile.app_tracer", mtime)
-
+ File.rm!("_build/dev/lib/sample/.mix/compile.app_tracer")
Mix.Tasks.Compile.Elixir.run(["--force"])
- assert File.stat!("_build/dev/lib/sample/.mix/compile.app_tracer").mtime > mtime
+ assert File.exists?("_build/dev/lib/sample/.mix/compile.app_tracer")
end)
end
test "recompiles project if Elixir version changed" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.run([])
purge([A, B])
@@ -149,6 +150,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles project if scm changed" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.run(["--verbose"])
purge([A, B])
@@ -170,6 +172,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not write BEAM files down on failures" do
in_tmp("blank", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.mkdir_p!("lib")
File.write!("lib/a.ex", "raise ~s(oops)")
@@ -183,6 +186,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "removes, purges and deletes old artifacts" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run([]) == {:ok, []}
assert File.regular?("_build/dev/lib/sample/ebin/Elixir.A.beam")
assert Code.ensure_loaded?(A)
@@ -197,6 +201,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles mtime changed files if content changed but not length" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
@@ -229,6 +234,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not recompile mtime changed but identical files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
@@ -259,6 +265,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does recompile a file restored after a compile error (and .beam file were deleted)" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
@@ -294,6 +301,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles size changed files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
past = {{2010, 1, 1}, {0, 0, 0}}
File.touch!("lib/a.ex", past)
@@ -315,6 +323,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed modules" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
@@ -334,6 +343,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed modules without beam files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/b.ex", """
defmodule B do
def a, do: A.__info__(:module)
@@ -360,6 +371,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed modules even on removal" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
@@ -380,6 +392,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
tmp = tmp_path("c.eex")
File.touch!("lib/a.eex")
@@ -404,7 +417,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
# Does not update on old existing resource
- File.touch!("lib/a.eex", {{2000, 1, 1}, {0, 0, 0}})
+ File.touch!("lib/a.eex", {{2010, 1, 1}, {0, 0, 0}})
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:noop, []}
Mix.shell().flush
purge([A, B])
@@ -421,6 +434,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with exports tracking" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
defstruct [:foo]
@@ -519,6 +534,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with async tracking" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
Kernel.ParallelCompiler.async(fn ->
defmodule A do
@@ -549,6 +566,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with multiple sources" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def one, do: 1
@@ -584,6 +603,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles with --force" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
purge([A, B])
@@ -598,6 +618,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles files with autoload disabled" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
@compile {:autoload, false}
@@ -611,6 +633,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not recompile files that are empty or has no code" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.write!("lib/a.ex", "")
File.write!("lib/b.ex", "# Just a comment")
File.write!("lib/c.ex", "\n\n")
@@ -629,6 +652,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with __mix_recompile__ check" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def __mix_recompile__?(), do: true
@@ -667,6 +692,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not treat remote typespecs as compile time dependencies" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/b.ex", """
defmodule B do
@type t :: A.t
@@ -690,6 +717,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "prints warnings from non-stale files with --all-warnings" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def my_fn(unused), do: :ok
@@ -720,6 +749,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns warning diagnostics" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def my_fn(unused), do: :ok
@@ -747,6 +778,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns warning diagnostics for external files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
IO.warn "warning", [{nil, nil, 0, file: 'lib/foo.txt', line: 3}]
""")
@@ -767,6 +800,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns warning diagnostics for unused imports" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
import B
@@ -795,6 +830,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns error diagnostics", context do
in_tmp(context.test, fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.mkdir_p!("lib")
File.write!("lib/a.ex", """
@@ -821,6 +857,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns error diagnostics when deadlocked" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
B.__info__(:module)
@@ -849,8 +887,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
end
test "verify runtime dependent modules that haven't been compiled" do
- Mix.Project.pop()
-
in_fixture("no_mixfile", fn ->
Mix.Project.push(MixTest.Case.Sample)