Current section

Files

Jump to
espec lib espec.ex
Raw

lib/espec.ex

defmodule ESpec do
@spec_agent_name :espec_specs_agent
defmacro __using__(_arg) do
quote do
unquote(__MODULE__).add_spec(__MODULE__)
import unquote(__MODULE__)
Module.register_attribute __MODULE__, :examples, accumulate: true
@context []
@before_compile unquote(__MODULE__)
import ESpec.Context
import ESpec.Example
import ESpec.Expect
use ESpec.Expect
import ESpec.Allow
import ESpec.Before
import ESpec.Finally
import ESpec.Let
end
end
defmacro __before_compile__(_env) do
quote do
def examples, do: Enum.reverse(@examples)
def run, do: ESpec.Runner.run_examples(@examples, __MODULE__)
end
end
def run(opts) do
ESpec.Runner.run(opts)
|> ESpec.Formatter.print_result
end
def start do
{:ok, _} = Application.ensure_all_started(:espec)
start_specs_agent
ESpec.Let.start_agent
ESpec.Mock.start_agent
end
def start_specs_agent do
Agent.start_link(fn -> [] end, name: @spec_agent_name)
end
def specs do
Agent.get(@spec_agent_name, &(&1))
end
def add_spec(module) do
Agent.update(@spec_agent_name, &[module | &1])
end
end