Current section

Files

Jump to
mix_test_watch lib mix_test_watch.ex
Raw

lib/mix_test_watch.ex

defmodule MixTestWatch do
@moduledoc """
Automatically run your Elixir project's tests each time you save a file.
Because TDD is awesome.
"""
use Application
alias MixTestWatch.Watcher
#
# Public interface
#
@spec run([String.t]) :: no_return
def run(args \\ []) when is_list(args) do
Mix.env :test
put_config(args)
:ok = Application.ensure_started(:fs)
:ok = Application.ensure_started(:mix_test_watch)
Watcher.run_tasks
no_halt_unless_in_repl()
end
#
# Application callback
#
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(Watcher, []),
]
opts = [strategy: :one_for_one, name: Sup.Supervisor]
Supervisor.start_link(children, opts)
end
#
# Internal functions
#
defp put_config(args) do
config = MixTestWatch.Config.new(args)
Application.put_env(:mix_test_watch, :__config__, config, persistent: true)
end
defp no_halt_unless_in_repl do
unless Code.ensure_loaded?(IEx) && IEx.started? do
:timer.sleep :infinity
end
end
end