class Shindo::Tests
def assert(type, expectation, description, &block)
def assert(type, expectation, description, &block) return if @exit || Thread.current[:reload] description = [@description, description].compact.join(' ') success = nil @gestalt = Gestalt.new({'formatador' => @formatador}) if block_given? begin for before in @befores.flatten.compact before.call end value = @gestalt.run(&block) success = case type when :raises value.is_a?(expectation) when :returns value == expectation end for after in @afters.flatten.compact after.call end rescue => error success = false value = error end if success success(description) else failure(description) case value when Exception, Interrupt display_error(value) else @message ||= [ "expected => #{expectation.inspect}", "returned => #{value.inspect}" ] @formatador.indent do @formatador.display_lines([*@message].map {|message| "[red]#{message}[/]"}) end @message = nil end if STDOUT.tty? prompt(description, &block) end end else pending(description) end success end