# <!-- rdoc-file=lib/minitest/spec.rb -->
# Rdoc... why are you so dumb?
#
module Minitest::Spec::DSL::InstanceMethods
  # <!--
  #   rdoc-file=lib/minitest/spec.rb
  #   - _(value = nil, &block)
  # -->
  # Takes a value or a block and returns a value monad that has all of
  # Expectations methods available to it.
  #
  #     _(1 + 1).must_equal 2
  #
  # And for blocks:
  #
  #     _ { 1 + "1" }.must_raise TypeError
  #
  # This method of expectation-based testing is preferable to straight-expectation
  # methods (on Object) because it stores its test context, bypassing our hacky
  # use of thread-local variables.
  #
  # NOTE: At some point, the methods on Object will be deprecated and then
  # removed.
  #
  # It is also aliased to #value and #expect for your aesthetic pleasure:
  #
  #          _(1 + 1).must_equal 2
  #      value(1 + 1).must_equal 2
  #     expect(1 + 1).must_equal 2
  #
  def _: (?untyped? value) ?{ () -> untyped } -> untyped

  # <!--
  #   rdoc-file=lib/minitest/spec.rb
  #   - value(value = nil, &block)
  # -->
  #
  alias value _

  # <!--
  #   rdoc-file=lib/minitest/spec.rb
  #   - expect(value = nil, &block)
  # -->
  #
  alias expect _

  def before_setup: () -> untyped
end
