Packages
espec
1.4.5
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/expect.ex
defmodule ESpec.Expect do
@moduledoc """
Defines `expect` and `is_expected` helper functions.
These functions wrap arguments for ESpec.ExpectTo module.
"""
alias ESpec.ExpectTo
@doc false
defmacro __using__(_arg) do
quote do
@doc "The same as `expect(subject)`"
def is_expected do
{ESpec.ExpectTo, apply(__MODULE__, :subject, []), pruned_stacktrace()}
end
end
end
@doc "Wrapper for `ESpec.ExpectTo`."
def expect(do: value), do: {ExpectTo, value, pruned_stacktrace()}
def expect(value), do: {ExpectTo, value, pruned_stacktrace()}
def pruned_stacktrace() do
{:current_stacktrace, trace} = Process.info(self(), :current_stacktrace)
prune_stacktrace(trace)
end
# stop at the example runner
defp prune_stacktrace([{ESpec.ExampleRunner, _, _, _} | _rest]), do: []
# ignore these
defp prune_stacktrace([{Process, :info, _, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{_, :is_expected, 0, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{_, :should, 1, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{_, :should_not, 1, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.Should, :should, 2, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.Should, :should_not, 2, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.To, :to, 2, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.To, :not_to, 2, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.To, :to_not, 2, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.Expect, :expect, _, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.Expect, :pruned_stacktrace, 0, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([{ESpec.Expect, :prune_stacktrace, 2, _} | rest]), do: prune_stacktrace(rest)
defp prune_stacktrace([h | t]), do: [h | prune_stacktrace(t)]
defp prune_stacktrace([]), do: []
end