Class: Riot::AssertionMacro

Inherits:
Object show all
Defined in:
lib/riot/assertion_macro.rb

Overview

The base class for all assertion macros.

Using macros

Macros are applied to the return value of assertions. For example, the empty macro asserts that the value is empty or denies that it is empty e.g.

asserts(:comments).empty?
denies(:comments).empty?

Writing your own macros

Macros are added by subclassing AssertionMacro. For example, here's the implementation of empty:

class EmptyMacro < AssertionMacro
  register :empty

  def evaluate(actual)
    actual.length == 0 ? pass : fail(expected_message(actual).to_be_empty)
  end

  def devaluate(actual)
    actual.empty? ? fail(expected_message(actual).to_not_be_empty) : pass(new_message.is_empty)
  end
end

Direct Known Subclasses

AnyMacro, AssignsMacro, EmptyMacro, EqualsMacro, EquivalentToMacro, ExistsMacro, IncludesMacro, KindOfMacro, MatchesMacro, NilMacro, RaisesKindOfMacro, RaisesMacro, RespondToMacro, SameElementsMacro, SizeMacro

Class Attribute Summary (collapse)

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Class Attribute Details

+ (Boolean) expects_exception (readonly)

Whether the macro expects an exception to be thrown.



36
37
38
# File 'lib/riot/assertion_macro.rb', line 36

def expects_exception
  @expects_exception
end

Instance Attribute Details

- (String) file

During failure reporting, what file did the failure occur in



65
66
67
# File 'lib/riot/assertion_macro.rb', line 65

def file
  @file
end

- (Number) line

During failure reporting, what line number did the failure occur at



61
62
63
# File 'lib/riot/assertion_macro.rb', line 61

def line
  @line
end

Class Method Details

+ (Object) expects_exception!

Specify that the macro expects an exception to be thrown by the assertion.



47
48
49
# File 'lib/riot/assertion_macro.rb', line 47

def expects_exception!
  @expects_exception = true
end

+ (Object) register(name)

Register the macro under the given name.



54
55
56
# File 'lib/riot/assertion_macro.rb', line 54

def register(name)
  Assertion.register_macro name, self
end

Instance Method Details

- (Array) devaluate(actual)

Supports negative/converse assertion testing. This is also where magic happens.



103
104
105
# File 'lib/riot/assertion_macro.rb', line 103

def devaluate(actual)
  !actual ? pass : fail("Expected non-true but got #{actual.inspect} instead")
end

- (Array[Symbol, Exception]) error(ex)

Returns a status tuple indicating the assertion had an unexpected error.



84
# File 'lib/riot/assertion_macro.rb', line 84

def error(ex) [:error, ex]; end

- (Array) evaluate(actual)

Supports positive assertion testing. This is where magic happens.



95
96
97
# File 'lib/riot/assertion_macro.rb', line 95

def evaluate(actual)
  actual ? pass : fail("Expected non-false but got #{actual.inspect} instead")
end

- (Riot::Message) expected_message(*phrases)

Creates a new message for use in any macro response that will start as “expected ”.



123
# File 'lib/riot/assertion_macro.rb', line 123

def expected_message(*phrases) new_message.expected(*phrases); end

- (boolean) expects_exception?

Returns true if this macro expects to handle Exceptions during evaluation.



89
# File 'lib/riot/assertion_macro.rb', line 89

def expects_exception?; self.class.expects_exception; end

- (Array[Symbol, String, Number, String]) fail(message)

Returns a status tuple indicating the assertion failed and where it failed it if that can be determined.



78
# File 'lib/riot/assertion_macro.rb', line 78

def fail(message) [:fail, message.to_s, line, file]; end

- (Riot::Message) new_message(*phrases)

Creates a new message for use in any macro response that is initially empty.



111
# File 'lib/riot/assertion_macro.rb', line 111

def new_message(*phrases) Message.new(*phrases); end

- (Array[Symbol, String]) pass(message = nil)

Returns a status tuple indicating the assertion passed.



71
# File 'lib/riot/assertion_macro.rb', line 71

def pass(message=nil) [:pass, message.to_s]; end

- (Riot::Message) should_have_message(*phrases)

Creates a new message for use in any macro response that will start as “should have ”.



117
# File 'lib/riot/assertion_macro.rb', line 117

def should_have_message(*phrases) new_message.should_have(*phrases); end