lib/espec/should.ex

defmodule ESpec.Should do
  @moduledoc """
  Defines `should` and `should_not` helpers.
  """

  alias ESpec.ExpectTo
  alias ESpec.Expect

  @doc false
  defmacro __using__(_arg) do
    quote do
      @doc "The same as `subject |> should term )`"
      def should(term),
        do:
          ExpectTo.to(
            term,
            {ExpectTo, apply(__MODULE__, :subject, []), Expect.pruned_stacktrace()}
          )

      def should_not(term),
        do:
          ExpectTo.to_not(
            term,
            {ExpectTo, apply(__MODULE__, :subject, []), Expect.pruned_stacktrace()}
          )
    end
  end

  @doc "Wrapper for `ESpec.ExpectTo`."
  def should(subject, term),
    do: ExpectTo.to(term, {ExpectTo, subject, Expect.pruned_stacktrace()})

  def should_not(subject, term),
    do: ExpectTo.to_not(term, {ExpectTo, subject, Expect.pruned_stacktrace()})
end