+++ /dev/null
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
- module Story
- module Runner
-
- describe StoryParser do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- end
-
- it "should parse no lines" do
- @parser.parse([])
- end
-
- it "should ignore text before the first Story: begins" do
- @story_mediator.should_not_receive(:create_scenario)
- @story_mediator.should_not_receive(:create_given)
- @story_mediator.should_not_receive(:create_when)
- @story_mediator.should_not_receive(:create_then)
- @story_mediator.should_receive(:create_story).with("simple addition", "")
- @parser.parse(["Here is a bunch of text", "about a calculator and all the things", "that it will do", "Story: simple addition"])
- end
-
- it "should create a story" do
- @story_mediator.should_receive(:create_story).with("simple addition", "")
- @parser.parse(["Story: simple addition"])
- end
-
- it "should create a story when line has leading spaces" do
- @story_mediator.should_receive(:create_story).with("simple addition", "")
- @parser.parse([" Story: simple addition"])
- end
-
- it "should add a one line narrative to the story" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative")
- @parser.parse(["Story: simple addition","narrative"])
- end
-
- it "should add a multi line narrative to the story" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2\nline 3")
- @parser.parse(["Story: simple addition","narrative line 1", "line 2", "line 3"])
- end
-
- it "should exclude blank lines from the narrative" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
- @parser.parse(["Story: simple addition","narrative line 1", "", "line 2"])
- end
-
- it "should exclude Scenario from the narrative" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
- @story_mediator.should_receive(:create_scenario)
- @parser.parse(["Story: simple addition","narrative line 1", "line 2", "Scenario: add one plus one"])
- end
-
- end
-
- describe StoryParser, "in Story state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- end
-
- it "should create a second Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Story: number two"])
- end
-
- it "should include And in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","And foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "And foo", "Scenario: bar"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: number two"])
- end
-
- it "should include Given in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","Given foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "Given foo", "Scenario: bar"])
- end
-
- it "should include Given: in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","Given: foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "Given: foo", "Scenario: bar"])
- end
-
- it "should include When in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","When foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "When foo", "Scenario: bar"])
- end
-
- it "should include Then in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","Then foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "Then foo", "Scenario: bar"])
- end
-
- it "should include other in the story" do
- @story_mediator.should_receive(:create_story).with("s","narrative")
- @parser.parse(["Story: s", "narrative"])
- end
- end
-
- describe StoryParser, "in Scenario state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Scenario: number two"])
- end
-
- it "should raise for And" do
- lambda {
- @parser.parse(["Story: s", "Scenario: s", "And second"])
- }.should raise_error(IllegalStepError, /^Illegal attempt to create a And after a Scenario/)
- end
-
- it "should create a Given for Given" do
- @story_mediator.should_receive(:create_given).with("gift")
- @parser.parse(["Story: s", "Scenario: s", "Given gift"])
- end
-
- it "should create a Given for Given:" do
- @story_mediator.should_receive(:create_given).with("gift")
- @parser.parse(["Story: s", "Scenario: s", "Given: gift"])
- end
-
- it "should create a GivenScenario for GivenScenario" do
- @story_mediator.should_receive(:create_given_scenario).with("previous")
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
- end
-
- it "should create a GivenScenario for GivenScenario:" do
- @story_mediator.should_receive(:create_given_scenario).with("previous")
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
- end
-
- it "should transition to Given state after GivenScenario" do
- @story_mediator.stub!(:create_given_scenario)
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
- @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
- end
-
- it "should transition to Given state after GivenScenario:" do
- @story_mediator.stub!(:create_given_scenario)
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
- @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
- end
-
- it "should create a When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "When ever"])
- end
-
- it "should create a When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "When: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Then: and there"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "this is ignored"])
- end
- end
-
- describe StoryParser, "in Given state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- @story_mediator.should_receive(:create_given).with("first")
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Scenario: number two"])
- end
-
- it "should create a second Given for Given" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Given second"])
- end
-
- it "should create a second Given for And" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "And second"])
- end
-
- it "should create a second Given for And:" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "And: second"])
- end
-
- it "should create a When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When ever"])
- end
-
- it "should create a When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Then: and there"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "Given first", "this is ignored"])
- end
- end
-
- describe StoryParser, "in When state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- @story_mediator.should_receive(:create_given).with("first")
- @story_mediator.should_receive(:create_when).with("else")
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When: else", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Scenario: number two"])
- end
-
- it "should create Given for Given" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given second"])
- end
-
- it "should create Given for Given:" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given: second"])
- end
-
- it "should create a second When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "When ever"])
- end
-
- it "should create a second When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "When: ever"])
- end
-
- it "should create a second When for And" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "And ever"])
- end
-
- it "should create a second When for And:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "And: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: and there"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "this is ignored"])
- end
- end
-
- describe StoryParser, "in Then state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- @story_mediator.should_receive(:create_given).with("first")
- @story_mediator.should_receive(:create_when).with("else")
- @story_mediator.should_receive(:create_then).with("what")
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Scenario: number two"])
- end
-
- it "should create Given for Given" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Given second"])
- end
-
- it "should create Given for Given:" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Given: second"])
- end
-
- it "should create When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "When ever"])
- end
-
- it "should create When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "When: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Then: and there"])
- end
-
- it "should create a second Then for And" do
- @story_mediator.should_receive(:create_then).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "And ever"])
- end
-
- it "should create a second Then for And:" do
- @story_mediator.should_receive(:create_then).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "And: ever"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "this is ignored"])
- end
- end
- end
- end
-end
\ No newline at end of file