Class: Shindo::Tests

Inherits:
Object
  • Object
show all
Defined in:
lib/shindo.rb,
lib/shindo/verbose.rb,
lib/shindo/taciturn.rb

Instance Method Summary collapse

Constructor Details

#initialize(description, tags = [], &block) ⇒ Tests

Returns a new instance of Tests.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/shindo.rb', line 19

def initialize(description, tags = [], &block)
  @afters     = []
  @befores    = []
  @description_stack  = []
  @tag_stack          = []
  Thread.current[:reload] = false
  Thread.current[:tags] ||= []
  Thread.current[:totals] ||= { :failed => 0, :pending => 0, :skipped => 0, :succeeded => 0 }
  @if_tagged = []
  @unless_tagged = []
  for tag in Thread.current[:tags]
    case tag[0...1]
    when '+'
      @if_tagged << tag[1..-1]
    when '-'
      @unless_tagged << tag[1..-1]
    end
  end
  Formatador.display_line
  tests(description, tags, &block)
end

Instance Method Details

#after(&block) ⇒ Object



41
42
43
# File 'lib/shindo.rb', line 41

def after(&block)
  @afters.last.push(block)
end

#before(&block) ⇒ Object



45
46
47
# File 'lib/shindo.rb', line 45

def before(&block)
  @befores.last.push(block)
end

#pendingObject

Raises:



49
50
51
# File 'lib/shindo.rb', line 49

def pending
  raise(Shindo::Pending.new)
end

#raises(error, description = "raises #{error.inspect}", &block) ⇒ Object



100
101
102
# File 'lib/shindo.rb', line 100

def raises(error, description = "raises #{error.inspect}", &block)
  assert(:raises, error, description, &block)
end

#returns(expectation, description = "returns #{expectation.inspect}", &block) ⇒ Object



104
105
106
# File 'lib/shindo.rb', line 104

def returns(expectation, description = "returns #{expectation.inspect}", &block)
  assert(:returns, expectation, description, &block)
end

#test(description = 'returns true', &block) ⇒ Object



108
109
110
# File 'lib/shindo.rb', line 108

def test(description = 'returns true', &block)
  assert(:returns, true, description, &block)
end

#tests(description, tags = [], &block) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/shindo.rb', line 53

def tests(description, tags = [], &block)
  return self if Thread.main[:exit] || Thread.current[:reload]

  tags = [*tags]
  @tag_stack.push(tags)
  @befores.push([])
  @afters.push([])

  @description = nil
  description ||= 'Shindo.tests'
  description = "[bold]#{description}[normal]"
  unless tags.empty?
    description << " (#{tags.join(', ')})"
  end
  @description_stack.push(description)

  # if the test includes +tags and discludes -tags, evaluate it
  if (@if_tagged.empty? || !(@if_tagged & @tag_stack.flatten).empty?) &&
      (@unless_tagged.empty? || (@unless_tagged & @tag_stack.flatten).empty?)
    if block_given?
      begin
        display_description(description)
        Formatador.indent { instance_eval(&block) }
      rescue Shindo::Pending
        display_pending(description)
        # HACK: remove indent since above doesn't
        indent = Thread.current[:formatador].instance_variable_get(:@indent)
        Thread.current[:formatador].instance_variable_set(:@indent, indent - 1)
      rescue => error
        display_error(error)
      end
    else
      display_description(description)
    end
  else
    display_description("[light_black]#{description}[/]")
  end

  @description_stack.pop
  @afters.pop
  @befores.pop
  @tag_stack.pop

  Thread.exit if Thread.main[:exit] || Thread.current[:reload]
  self
end