lib/deep_test/spec/runner.rb in deep_test-1.1.4 vs lib/deep_test/spec/runner.rb in deep_test-1.2.0
- old
+ new
@@ -2,42 +2,51 @@
module Spec
class Runner < ::Spec::Runner::ExampleGroupRunner
def initialize(options, deep_test_options, blackboard = nil)
super(options)
@deep_test_options = DeepTest::Options.from_command_line(deep_test_options)
+ DeepTest.init(@deep_test_options)
@blackboard = blackboard
+ @workers = @deep_test_options.new_workers
end
def blackboard
# Can't create blackboard as default argument to initialize
# because ProcessOrchestrator hasn't been invoked at
# instantiation time
- @blackboard ||= RindaBlackboard.new(@deep_test_options)
+ @blackboard ||= @deep_test_options.server
end
+ def load_files(files)
+ @workers.load_files files
+ end
+
def run
- ProcessOrchestrator.run(@deep_test_options, self)
+ ProcessOrchestrator.run(@deep_test_options, @workers, self)
end
def process_work_units
prepare
examples = example_groups.map {|g| g.send(:examples_to_run)}.flatten
examples_by_location = {}
examples.each do |example|
- file, line, *rest = example.implementation_backtrace.first.split(/:/)
- examples_by_location["#{file}:#{line}"] = example
- blackboard.write_work Spec::WorkUnit.new(file, line.to_i)
+ raise "duplicate example: #{example.identifier}" if examples_by_location[example.identifier]
+ examples_by_location[example.identifier] = example
+ blackboard.write_work Spec::WorkUnit.new(example.identifier)
end
success = true
- until examples_by_location.empty?
- result = blackboard.take_result
- next unless result
- print result.output if result.output
- example = examples_by_location.delete("#{result.file}:#{result.line}")
+
+ missing_exmaples = ResultReader.new(blackboard).read(examples_by_location) do |example, result|
@options.reporter.example_finished(example, result.error)
success &= result.success?
+ end
+
+ success &= missing_exmaples.empty?
+
+ missing_exmaples.each do |identifier, example|
+ @options.reporter.example_finished(example, WorkUnitNeverReceivedError.new)
end
success
ensure
finish