1Code.require_file("../../test_helper.exs", __DIR__) 2 3defmodule Mix.Tasks.RunTest do 4 use MixTest.Case 5 6 setup do 7 Mix.Project.push(MixTest.Case.Sample) 8 end 9 10 test "run requires files before evaling commands", context do 11 git_repo = fixture_path("git_repo/lib/git_repo.ex") 12 13 in_tmp(context.test, fn -> 14 Mix.Tasks.Run.run(["-r", git_repo, "-e", "send self(), {:hello, GitRepo.hello()}"]) 15 assert_received {:hello, "World"} 16 17 Mix.Tasks.Run.run(["-pr", git_repo, "-e", "send self(), {:hello, GitRepo.hello()}"]) 18 assert_received {:hello, "World"} 19 end) 20 after 21 purge([GitRepo]) 22 end 23 24 test "does not start applications on --no-start", context do 25 in_tmp(context.test, fn -> 26 expr = "send self(), {:apps, Application.started_applications()}" 27 Mix.Tasks.Run.run(["--no-start", "-e", expr]) 28 29 assert_received {:apps, apps} 30 refute List.keyfind(apps, :sample, 0) 31 Mix.Task.clear() 32 33 Mix.Tasks.Run.run(["-e", expr]) 34 assert_received {:apps, apps} 35 assert List.keyfind(apps, :sample, 0) 36 end) 37 end 38 39 test "run errors on missing files", context do 40 in_tmp(context.test, fn -> 41 message = "No files matched pattern \"non-existent\" given to --require" 42 43 assert_raise Mix.Error, message, fn -> 44 Mix.Tasks.Run.run(["-r", "non-existent"]) 45 end 46 47 assert_raise Mix.Error, message, fn -> 48 Mix.Tasks.Run.run(["-pr", "non-existent"]) 49 end 50 51 assert_raise Mix.Error, "No such file: non-existent", fn -> 52 Mix.Tasks.Run.run(["non-existent"]) 53 end 54 55 File.mkdir_p!("lib") 56 57 assert_raise Mix.Error, "No such file: lib", fn -> 58 Mix.Tasks.Run.run(["lib"]) 59 end 60 end) 61 after 62 purge([GitRepo]) 63 end 64 65 test "run rewrites System.argv", context do 66 in_tmp(context.test, fn -> 67 file = "argv.exs" 68 expr = "send self(), {:argv, System.argv()}" 69 70 File.write!(file, expr) 71 72 unload_file = fn -> 73 Code.unrequire_files([Path.expand(file)]) 74 end 75 76 Mix.Tasks.Run.run([file]) 77 assert_received {:argv, []} 78 79 unload_file.() 80 Mix.Tasks.Run.run([file, "foo", "-e", "bar"]) 81 assert_received {:argv, ["foo", "-e", "bar"]} 82 83 unload_file.() 84 Mix.Tasks.Run.run(["-e", expr, file, "foo", "-x", "bar"]) 85 assert_received {:argv, [^file, "foo", "-x", "bar"]} 86 87 unload_file.() 88 89 send_evaled = "send self(), :evaled" 90 Mix.Tasks.Run.run(["-e", send_evaled, "-e", expr, "--no-compile", file, "-x", "bar"]) 91 92 assert_received :evaled 93 assert_received {:argv, [^file, "-x", "bar"]} 94 end) 95 end 96end 97