Packages
espec
1.2.2
1.10.0
1.9.2
1.9.1
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.0
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.7
0.3.5
0.3.0
0.2.0
0.1.0
BDD testing framework for Elixir inspired by RSpec.
Current section
Files
Jump to
Current section
Files
lib/espec/before.ex
defmodule ESpec.Before do
@moduledoc """
Defines 'before' macro.
If before block returns {:ok, key: value},
the {key, value} is added to an 'exapmle dict'.
The dict can be accessed in another `before`, in `let`,
and in example by `shared` (`shared[:key]`).
"""
@doc "Struct has 'spec' module name and random function name."
defstruct module: nil, function: nil
@doc """
Adds %ESpec.Before structs to the @context and
defines a function with random name which will be called when example is run.
"""
defmacro before(do: block), do: do_before(block)
@doc "Allows to add keyword list or map to the shared dictionary"
defmacro before(keyword) when is_list (keyword) do
if Keyword.keyword?(keyword)do
do_before({:shared, keyword})
else
raise "Argument must be a Keyword"
end
end
defp do_before(block) do
function = random_before_name()
quote do
tail = @context
head = %ESpec.Before{module: __MODULE__, function: unquote(function)}
def unquote(function)(var!(shared)) do
var!(shared)
unquote(block)
end
@context [head | tail]
end
end
defp random_before_name, do: String.to_atom("before_#{ESpec.Support.random_string}")
end