lib/assert/runner.rb in assert-2.15.0 vs lib/assert/runner.rb in assert-2.15.1
- old
+ new
@@ -1,7 +1,8 @@
require 'assert/config_helpers'
require 'assert/suite'
+require 'assert/view'
module Assert
class Runner
include Assert::ConfigHelpers
@@ -10,43 +11,79 @@
def initialize(config)
@config = config
end
+ def runner; self; end
+
def run
- suite, view = @config.suite, @config.view
- raise ArgumentError if !suite.kind_of?(Suite)
- if tests?
- view.puts "Running tests in random order, seeded with \"#{runner_seed}\""
+ self.on_start
+ self.suite.on_start
+ self.view.on_start
+
+ if self.single_test?
+ self.view.puts "Running test: #{self.single_test_file_line}"
+ elsif self.tests?
+ self.view.puts "Running tests in random order, " \
+ "seeded with \"#{self.runner_seed}\""
end
- view.fire(:on_start)
begin
- suite.setup
-
- suite.start_time = Time.now
- tests_to_run(suite).each do |test|
- view.fire(:before_test, test)
- test.run{ |result| view.fire(:on_result, result) }
- view.fire(:after_test, test)
+ self.suite.start_time = Time.now
+ self.suite.setups.each(&:call)
+ tests_to_run.each do |test|
+ self.before_test(test)
+ self.suite.before_test(test)
+ self.view.before_test(test)
+ test.run do |result|
+ self.on_result(result)
+ self.suite.on_result(result)
+ self.view.on_result(result)
+ end
+ self.after_test(test)
+ self.suite.after_test(test)
+ self.view.after_test(test)
end
- suite.end_time = Time.now
-
- suite.teardown
+ self.suite.teardowns.each(&:call)
+ self.suite.end_time = Time.now
rescue Interrupt => err
- view.fire(:on_interrupt, err)
+ self.on_interrupt(err)
+ self.suite.on_interrupt(err)
+ self.view.on_interrupt(err)
raise(err)
end
- view.fire(:on_finish)
- suite.count(:failed) + suite.count(:errored)
+ (self.suite.count(:fail) + self.suite.count(:error)).tap do
+ self.view.on_finish
+ self.suite.on_finish
+ self.on_finish
+ end
end
+ # Callbacks
+
+ # define callback handlers to do special behavior during the test run. These
+ # will be called by the test runner
+
+ def before_load(test_files); end
+ def after_load; end
+ def on_start; end
+ def before_test(test); end
+ def on_result(result); end
+ def after_test(test); end
+ def on_finish; end
+ def on_interrupt(err); end
+
private
- def tests_to_run(suite)
- srand self.config.runner_seed
- suite.tests.sort.sort_by{ rand suite.tests.size }
+ def tests_to_run
+ if self.single_test?
+ [ self.suite.tests.find{ |t| t.file_line == self.single_test_file_line }
+ ].compact
+ else
+ srand self.runner_seed
+ self.suite.tests.sort.sort_by{ rand self.suite.tests.size }
+ end
end
end
end