blob: 0a4d7e6e94dd23d58a0fa503517cc3b722dd27a1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
module Spec
module Runner
class ContextRunner
def initialize(options)
@contexts = []
@options = options
end
def add_context(context)
return unless spec_description.nil? || context.matches?(spec_description)
context.run_single_spec(spec_description) if context.matches?(spec_description)
@contexts << context
end
# Runs all contexts and returns the number of failures.
def run(exit_when_done)
@options.reporter.start(number_of_specs)
begin
@contexts.each do |context|
context.run(@options.reporter, @options.dry_run)
end
rescue Interrupt
ensure
@options.reporter.end
end
failure_count = @options.reporter.dump
if(failure_count == 0 && !@options.heckle_runner.nil?)
heckle_runner = @options.heckle_runner
@options.heckle_runner = nil
context_runner = self.class.new(@options)
context_runner.instance_variable_set(:@contexts, @contexts)
heckle_runner.heckle_with(context_runner)
end
if(exit_when_done)
exit_code = (failure_count == 0) ? 0 : 1
exit(exit_code)
end
failure_count
end
def number_of_specs
@contexts.inject(0) {|sum, context| sum + context.number_of_specs}
end
private
def spec_description
@options.spec_name
end
end
end
end
|