Class: RCheck::Suite
Constant Summary
collapse
- SYNONYMS =
{
all: [:error, :fail, :pending, :pass],
problematic: [:error, :fail, :pending],
critical: [:error, :fail,]
}
Instance Attribute Summary collapse
Instance Method Summary
collapse
#debug
#assert, #assert_raises, #assert_safe, #pending, #refute
Constructor Details
#initialize(parent, name) ⇒ Suite
Returns a new instance of Suite.
12
13
14
15
16
17
18
19
20
|
# File 'lib/rcheck/suite.rb', line 12
def initialize(parent, name)
@parent = parent
@name = name
@scope = DSL::Scope.new self
@suites = {}
@assertions = []
@result = Result.new(
progress: false, status: :pass, location: [full_name])
end
|
Instance Attribute Details
#assertions ⇒ Object
Returns the value of attribute assertions.
22
23
24
|
# File 'lib/rcheck/suite.rb', line 22
def assertions
@assertions
end
|
#locked ⇒ Object
Returns the value of attribute locked.
123
124
125
|
# File 'lib/rcheck/suite.rb', line 123
def locked
@locked
end
|
#name ⇒ Object
Returns the value of attribute name.
22
23
24
|
# File 'lib/rcheck/suite.rb', line 22
def name
@name
end
|
#parent ⇒ Object
Returns the value of attribute parent.
22
23
24
|
# File 'lib/rcheck/suite.rb', line 22
def parent
@parent
end
|
#result ⇒ Object
Returns the value of attribute result.
22
23
24
|
# File 'lib/rcheck/suite.rb', line 22
def result
@result
end
|
#scope ⇒ Object
Returns the value of attribute scope.
22
23
24
|
# File 'lib/rcheck/suite.rb', line 22
def scope
@scope
end
|
Instance Method Details
#[](*names) ⇒ Object
39
40
41
42
43
44
|
# File 'lib/rcheck/suite.rb', line 39
def [](*names)
names = groom_name_chain(names)
return self if names.empty?
name = names.shift.to_s
@suites[name][*names] if @suites[name]
end
|
#counts(scope) ⇒ Object
102
103
104
105
106
|
# File 'lib/rcheck/suite.rb', line 102
def counts(scope)
Hash[[:error, :fail, :pending, :pass].map do |sym|
[sym, send(scope, sym).count]
end]
end
|
#done! ⇒ Object
125
126
127
|
# File 'lib/rcheck/suite.rb', line 125
def done!
@locked ||= (suites.each(&:done!); true)
end
|
#find_or_create(*names) ⇒ Object
46
47
48
49
50
51
52
|
# File 'lib/rcheck/suite.rb', line 46
def find_or_create(*names)
names = groom_name_chain(names)
return self if names.empty?
name = names.shift.to_s
@suites[name] ||= Suite.new(self, name)
@suites[name].find_or_create(*names)
end
|
#full_name ⇒ Object
119
120
121
|
# File 'lib/rcheck/suite.rb', line 119
def full_name
name_chain.join('/')
end
|
#inspect ⇒ Object
24
25
26
|
# File 'lib/rcheck/suite.rb', line 24
def inspect
"#<#{self.class}: #{full_name.inspect}>"
end
|
#local(*statuses) ⇒ Object
82
83
84
85
86
87
88
|
# File 'lib/rcheck/suite.rb', line 82
def local(*statuses)
if (statuses.length == 1) && SYNONYMS[statuses.first]
statuses = SYNONYMS[statuses.first]
end
assertions.select { |a| statuses.include? a.result.status } +
(statuses.include?(:error) && @exception ? [self] : [])
end
|
#name_chain ⇒ Object
115
116
117
|
# File 'lib/rcheck/suite.rb', line 115
def name_chain
@parent.nil? ? [] : @parent.name_chain.push(name)
end
|
#report!(*printers) ⇒ Object
73
74
75
76
77
78
79
80
|
# File 'lib/rcheck/suite.rb', line 73
def report!(*printers)
done!
printers = Conf[:report] unless printers.any?
printers.each do |p|
p.report self
puts
end
end
|
#severity(scope) ⇒ Object
108
109
110
111
112
113
|
# File 'lib/rcheck/suite.rb', line 108
def severity(scope)
[:error, :fail, :pending].each do |severity|
return severity if send(scope, severity).any?
end
:pass
end
|
#subtree(*statuses) ⇒ Object
98
99
100
|
# File 'lib/rcheck/suite.rb', line 98
def subtree(*statuses)
total(statuses) - local(statuses)
end
|
#suite(*names, &blk) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/rcheck/suite.rb', line 54
def suite(*names, &blk)
verify_not_done!
if names.any?
find_or_create(*names).suite(&blk)
else
begin
@scope.instance_eval(&blk) if blk
rescue Exception => e
@exception = e
@result = Result.new(
status: :error,
introspection: @exception.inspect,
backtrace: @exception.backtrace,
location: @exception.backtrace)
end
self
end
end
|
#suites ⇒ Object
Also known as:
children
28
29
30
31
32
33
34
35
|
# File 'lib/rcheck/suite.rb', line 28
def suites
case Conf[:print_order]
when 'name' then @suites.values.sort_by(&:name)
when 'run' then @suites.values
else raise Errors::ConfigName,
"unknown suite ordering: #{Conf[:print_order]}"
end
end
|
#total(*statuses) ⇒ Object
90
91
92
93
94
95
96
|
# File 'lib/rcheck/suite.rb', line 90
def total(*statuses)
@subtree_cache ||= {}
@subtree_cache[statuses] ||= local(*statuses) +
suites.map do |child_suite|
child_suite.total(*statuses)
end.inject([], :+)
end
|
#verify_not_done! ⇒ Object
129
130
131
132
133
134
|
# File 'lib/rcheck/suite.rb', line 129
def verify_not_done!
if @locked
raise Errors::SuiteRedefinition, "#{self} cannot be modified"\
"because it has been marked as done"
end
end
|