diff options
Diffstat (limited to 'test/lib/spec/runner/context_runner.rb')
-rw-r--r-- | test/lib/spec/runner/context_runner.rb | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/test/lib/spec/runner/context_runner.rb b/test/lib/spec/runner/context_runner.rb new file mode 100644 index 000000000..0a4d7e6e9 --- /dev/null +++ b/test/lib/spec/runner/context_runner.rb @@ -0,0 +1,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 |