Exception: ThrowAssay

Inherits:
ExecutionAssay show all
Defined in:
lib/assay/throw_assay.rb

Overview

Assertion for catching specific throws.

Constant Summary

Constants inherited from Assertion

Assertion::SIZE_LIMIT

Constants included from Assay::Assertable

Assay::Assertable::SIZE_LIMIT

Class Method Summary collapse

Methods inherited from Assertion

by_name, by_operator, inherited, register, subclasses

Methods included from Assay::Assertable

#[], #assert!, #assert_message, #assertive_name, #assertor, #fail?, #operator, #pass?, #refute!, #refute_message

Class Method Details

.assert_message(symbol) ⇒ Object



84
85
86
87
# File 'lib/assay/throw_assay.rb', line 84

def self.assert_message(symbol)
  s = symbol.inspect
  "throw #{s}"
end

.fail?(symbol = nil) ⇒ Boolean

Passes if the block does not throw given symbol.

ThrowAssay.fail? :done do
throw :chimp
end

If no symbol is given then passes if nothing is thrown. But note that in #refute!, the symbol must be nil rather than not given.



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/assay/throw_assay.rb', line 56

def self.fail?(symbol=nil) #:yield:
  if symbol
    pass = false
    catch(symbol) do
      begin
        yield
      rescue ArgumentError => err     # 1.9 exception
        #msg += ", not #{err.message.split(/ /).last}"
      rescue NameError => err         # 1.8 exception
        #msg += ", not #{err.name.inspect}"
      end
      pass = true
    end
  else
    pass = false
    begin
      yield
      pass = true
    rescue ArgumentError => error
      pass = true if /\Auncaught throw (.+)\z/ !~ error.message
    end
  end
  pass
end

.pass?(symbol = nil) ⇒ Boolean

Passes if the block throws given symbol.

ThrowAssay.pass? :done do
throw :done
end

If no symbol is given than passes if any is thrown. But note that in #assert!, the symbol must be nil rather than not given.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/assay/throw_assay.rb', line 22

def self.pass?(symbol=nil) #:yield:
  pass = true
  if symbol
    catch(symbol) do
      begin
        yield
      rescue ArgumentError => err     # 1.9 exception
        #msg += ", not #{err.message.split(/ /).last}"
      rescue NameError => err         # 1.8 exception
        #msg += ", not #{err.name.inspect}"
      end
      pass = false
    end
  else
    begin
      yield
      pass = false
    rescue ArgumentError => error
      pass = false if /\Auncaught throw (.+)\z/ !~ error.message
    end
  end
  pass
end