]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_parser_spec.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / spec / spec / story / runner / story_parser_spec.rb
diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_parser_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_parser_spec.rb
new file mode 100644 (file)
index 0000000..5efc8fd
--- /dev/null
@@ -0,0 +1,384 @@
+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