58 lines
1.9 KiB
Ruby
58 lines
1.9 KiB
Ruby
require 'spec/story/runner/scenario_collector.rb'
|
|
require 'spec/story/runner/scenario_runner.rb'
|
|
require 'spec/story/runner/story_runner.rb'
|
|
require 'spec/story/runner/story_parser.rb'
|
|
require 'spec/story/runner/story_mediator.rb'
|
|
require 'spec/story/runner/plain_text_story_runner.rb'
|
|
|
|
module Spec
|
|
module Story
|
|
module Runner
|
|
class << self
|
|
def run_options # :nodoc:
|
|
@run_options ||= ::Spec::Runner::OptionParser.parse(ARGV, $stderr, $stdout)
|
|
end
|
|
|
|
def story_runner # :nodoc:
|
|
unless @story_runner
|
|
@story_runner = StoryRunner.new(scenario_runner, world_creator)
|
|
run_options.story_formatters.each do |formatter|
|
|
register_listener(formatter)
|
|
end
|
|
Runner.register_exit_hook
|
|
end
|
|
@story_runner
|
|
end
|
|
|
|
def scenario_runner # :nodoc:
|
|
@scenario_runner ||= ScenarioRunner.new
|
|
end
|
|
|
|
def world_creator # :nodoc:
|
|
@world_creator ||= World
|
|
end
|
|
|
|
# Use this to register a customer output formatter.
|
|
def register_listener(listener)
|
|
story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
|
|
world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
|
|
scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
|
|
end
|
|
|
|
def register_exit_hook # :nodoc:
|
|
# TODO - when story runner uses test/unit runners like example runner does we can kill
|
|
# this and also the assorted Kernel.stub!(:at_exit) in examples
|
|
at_exit do
|
|
Runner.story_runner.run_stories unless $!
|
|
end
|
|
# TODO exit with non-zero status if run fails
|
|
end
|
|
|
|
def dry_run
|
|
run_options.dry_run
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|