X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/ddd5b4cf19a92582fd114914be5bd5a04d3522a7..3f607d565bc0e2c7b1b738301c11c16d069913d5:/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_runner.rb diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_runner.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_runner.rb new file mode 100644 index 000000000..f9eeb9ac1 --- /dev/null +++ b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_runner.rb @@ -0,0 +1,68 @@ +module Spec + module Story + module Runner + class StoryRunner + class << self + attr_accessor :current_story_runner + + def scenario_from_current_story(scenario_name) + current_story_runner.scenario_from_current_story(scenario_name) + end + end + + attr_accessor :stories, :scenarios, :current_story + + def initialize(scenario_runner, world_creator = World) + StoryRunner.current_story_runner = self + @scenario_runner = scenario_runner + @world_creator = world_creator + @stories = [] + @scenarios_by_story = {} + @scenarios = [] + @listeners = [] + end + + def Story(title, narrative, params = {}, &body) + story = Story.new(title, narrative, params, &body) + @stories << story + + # collect scenarios + collector = ScenarioCollector.new(story) + story.run_in(collector) + @scenarios += collector.scenarios + @scenarios_by_story[story.title] = collector.scenarios + end + + def run_stories + return if @stories.empty? + @listeners.each { |l| l.run_started(scenarios.size) } + @stories.each do |story| + story.assign_steps_to(World) + @current_story = story + @listeners.each { |l| l.story_started(story.title, story.narrative) } + scenarios = @scenarios_by_story[story.title] + scenarios.each do |scenario| + type = story[:type] || Object + args = story[:args] || [] + world = @world_creator.create(type, *args) + @scenario_runner.run(scenario, world) + end + @listeners.each { |l| l.story_ended(story.title, story.narrative) } + World.step_mother.clear + end + unique_steps = (World.step_names.collect {|n| Regexp === n ? n.source : n.to_s}).uniq.sort + @listeners.each { |l| l.collected_steps(unique_steps) } + @listeners.each { |l| l.run_ended } + end + + def add_listener(listener) + @listeners << listener + end + + def scenario_from_current_story(scenario_name) + @scenarios_by_story[@current_story.title].find {|s| s.name == scenario_name } + end + end + end + end +end