1 require File.dirname(__FILE__) + '/../story_helper'
7 describe StoryParser do
9 @story_mediator = mock("story_mediator")
10 @parser = StoryParser.new(@story_mediator)
13 it "should parse no lines" do
17 it "should ignore text before the first Story: begins" do
18 @story_mediator.should_not_receive(:create_scenario)
19 @story_mediator.should_not_receive(:create_given)
20 @story_mediator.should_not_receive(:create_when)
21 @story_mediator.should_not_receive(:create_then)
22 @story_mediator.should_receive(:create_story).with("simple addition", "")
23 @parser.parse(["Here is a bunch of text", "about a calculator and all the things", "that it will do", "Story: simple addition"])
26 it "should create a story" do
27 @story_mediator.should_receive(:create_story).with("simple addition", "")
28 @parser.parse(["Story: simple addition"])
31 it "should create a story when line has leading spaces" do
32 @story_mediator.should_receive(:create_story).with("simple addition", "")
33 @parser.parse([" Story: simple addition"])
36 it "should add a one line narrative to the story" do
37 @story_mediator.should_receive(:create_story).with("simple addition","narrative")
38 @parser.parse(["Story: simple addition","narrative"])
41 it "should add a multi line narrative to the story" do
42 @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2\nline 3")
43 @parser.parse(["Story: simple addition","narrative line 1", "line 2", "line 3"])
46 it "should exclude blank lines from the narrative" do
47 @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
48 @parser.parse(["Story: simple addition","narrative line 1", "", "line 2"])
51 it "should exclude Scenario from the narrative" do
52 @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
53 @story_mediator.should_receive(:create_scenario)
54 @parser.parse(["Story: simple addition","narrative line 1", "line 2", "Scenario: add one plus one"])
59 describe StoryParser, "in Story state" do
61 @story_mediator = mock("story_mediator")
62 @parser = StoryParser.new(@story_mediator)
63 @story_mediator.stub!(:create_story)
66 it "should create a second Story for Story" do
67 @story_mediator.should_receive(:create_story).with("number two","")
68 @parser.parse(["Story: s", "Story: number two"])
71 it "should include And in the narrative" do
72 @story_mediator.should_receive(:create_story).with("s","And foo")
73 @story_mediator.should_receive(:create_scenario).with("bar")
74 @parser.parse(["Story: s", "And foo", "Scenario: bar"])
77 it "should create a Scenario for Scenario" do
78 @story_mediator.should_receive(:create_scenario).with("number two")
79 @parser.parse(["Story: s", "Scenario: number two"])
82 it "should include Given in the narrative" do
83 @story_mediator.should_receive(:create_story).with("s","Given foo")
84 @story_mediator.should_receive(:create_scenario).with("bar")
85 @parser.parse(["Story: s", "Given foo", "Scenario: bar"])
88 it "should include Given: in the narrative" do
89 @story_mediator.should_receive(:create_story).with("s","Given: foo")
90 @story_mediator.should_receive(:create_scenario).with("bar")
91 @parser.parse(["Story: s", "Given: foo", "Scenario: bar"])
94 it "should include When in the narrative" do
95 @story_mediator.should_receive(:create_story).with("s","When foo")
96 @story_mediator.should_receive(:create_scenario).with("bar")
97 @parser.parse(["Story: s", "When foo", "Scenario: bar"])
100 it "should include Then in the narrative" do
101 @story_mediator.should_receive(:create_story).with("s","Then foo")
102 @story_mediator.should_receive(:create_scenario).with("bar")
103 @parser.parse(["Story: s", "Then foo", "Scenario: bar"])
106 it "should include other in the story" do
107 @story_mediator.should_receive(:create_story).with("s","narrative")
108 @parser.parse(["Story: s", "narrative"])
112 describe StoryParser, "in Scenario state" do
114 @story_mediator = mock("story_mediator")
115 @parser = StoryParser.new(@story_mediator)
116 @story_mediator.stub!(:create_story)
117 @story_mediator.stub!(:create_scenario)
120 it "should create a Story for Story" do
121 @story_mediator.should_receive(:create_story).with("number two","")
122 @parser.parse(["Story: s", "Scenario: s", "Story: number two"])
125 it "should create a Scenario for Scenario" do
126 @story_mediator.should_receive(:create_scenario).with("number two")
127 @parser.parse(["Story: s", "Scenario: s", "Scenario: number two"])
130 it "should raise for And" do
132 @parser.parse(["Story: s", "Scenario: s", "And second"])
133 }.should raise_error(IllegalStepError, /^Illegal attempt to create a And after a Scenario/)
136 it "should create a Given for Given" do
137 @story_mediator.should_receive(:create_given).with("gift")
138 @parser.parse(["Story: s", "Scenario: s", "Given gift"])
141 it "should create a Given for Given:" do
142 @story_mediator.should_receive(:create_given).with("gift")
143 @parser.parse(["Story: s", "Scenario: s", "Given: gift"])
146 it "should create a GivenScenario for GivenScenario" do
147 @story_mediator.should_receive(:create_given_scenario).with("previous")
148 @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
151 it "should create a GivenScenario for GivenScenario:" do
152 @story_mediator.should_receive(:create_given_scenario).with("previous")
153 @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
156 it "should transition to Given state after GivenScenario" do
157 @story_mediator.stub!(:create_given_scenario)
158 @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
159 @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
162 it "should transition to Given state after GivenScenario:" do
163 @story_mediator.stub!(:create_given_scenario)
164 @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
165 @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
168 it "should create a When for When" do
169 @story_mediator.should_receive(:create_when).with("ever")
170 @parser.parse(["Story: s", "Scenario: s", "When ever"])
173 it "should create a When for When:" do
174 @story_mediator.should_receive(:create_when).with("ever")
175 @parser.parse(["Story: s", "Scenario: s", "When: ever"])
178 it "should create a Then for Then" do
179 @story_mediator.should_receive(:create_then).with("and there")
180 @parser.parse(["Story: s", "Scenario: s", "Then and there"])
183 it "should create a Then for Then:" do
184 @story_mediator.should_receive(:create_then).with("and there")
185 @parser.parse(["Story: s", "Scenario: s", "Then: and there"])
188 it "should ignore other" do
189 @parser.parse(["Story: s", "Scenario: s", "this is ignored"])
193 describe StoryParser, "in Given state" do
195 @story_mediator = mock("story_mediator")
196 @parser = StoryParser.new(@story_mediator)
197 @story_mediator.stub!(:create_story)
198 @story_mediator.stub!(:create_scenario)
199 @story_mediator.should_receive(:create_given).with("first")
202 it "should create a Story for Story" do
203 @story_mediator.should_receive(:create_story).with("number two","")
204 @parser.parse(["Story: s", "Scenario: s", "Given first", "Story: number two"])
207 it "should create a Scenario for Scenario" do
208 @story_mediator.should_receive(:create_scenario).with("number two")
209 @parser.parse(["Story: s", "Scenario: s", "Given first", "Scenario: number two"])
212 it "should create a second Given for Given" do
213 @story_mediator.should_receive(:create_given).with("second")
214 @parser.parse(["Story: s", "Scenario: s", "Given first", "Given second"])
217 it "should create a second Given for And" do
218 @story_mediator.should_receive(:create_given).with("second")
219 @parser.parse(["Story: s", "Scenario: s", "Given: first", "And second"])
222 it "should create a second Given for And:" do
223 @story_mediator.should_receive(:create_given).with("second")
224 @parser.parse(["Story: s", "Scenario: s", "Given first", "And: second"])
227 it "should create a When for When" do
228 @story_mediator.should_receive(:create_when).with("ever")
229 @parser.parse(["Story: s", "Scenario: s", "Given first", "When ever"])
232 it "should create a When for When:" do
233 @story_mediator.should_receive(:create_when).with("ever")
234 @parser.parse(["Story: s", "Scenario: s", "Given first", "When: ever"])
237 it "should create a Then for Then" do
238 @story_mediator.should_receive(:create_then).with("and there")
239 @parser.parse(["Story: s", "Scenario: s", "Given first", "Then and there"])
242 it "should create a Then for Then:" do
243 @story_mediator.should_receive(:create_then).with("and there")
244 @parser.parse(["Story: s", "Scenario: s", "Given first", "Then: and there"])
247 it "should ignore other" do
248 @parser.parse(["Story: s", "Scenario: s", "Given first", "this is ignored"])
252 describe StoryParser, "in When state" do
254 @story_mediator = mock("story_mediator")
255 @parser = StoryParser.new(@story_mediator)
256 @story_mediator.stub!(:create_story)
257 @story_mediator.stub!(:create_scenario)
258 @story_mediator.should_receive(:create_given).with("first")
259 @story_mediator.should_receive(:create_when).with("else")
262 it "should create a Story for Story" do
263 @story_mediator.should_receive(:create_story).with("number two","")
264 @parser.parse(["Story: s", "Scenario: s", "Given first", "When: else", "Story: number two"])
267 it "should create a Scenario for Scenario" do
268 @story_mediator.should_receive(:create_scenario).with("number two")
269 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Scenario: number two"])
272 it "should create Given for Given" do
273 @story_mediator.should_receive(:create_given).with("second")
274 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given second"])
277 it "should create Given for Given:" do
278 @story_mediator.should_receive(:create_given).with("second")
279 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given: second"])
282 it "should create a second When for When" do
283 @story_mediator.should_receive(:create_when).with("ever")
284 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "When ever"])
287 it "should create a second When for When:" do
288 @story_mediator.should_receive(:create_when).with("ever")
289 @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "When: ever"])
292 it "should create a second When for And" do
293 @story_mediator.should_receive(:create_when).with("ever")
294 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "And ever"])
297 it "should create a second When for And:" do
298 @story_mediator.should_receive(:create_when).with("ever")
299 @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "And: ever"])
302 it "should create a Then for Then" do
303 @story_mediator.should_receive(:create_then).with("and there")
304 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then and there"])
307 it "should create a Then for Then:" do
308 @story_mediator.should_receive(:create_then).with("and there")
309 @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: and there"])
312 it "should ignore other" do
313 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "this is ignored"])
317 describe StoryParser, "in Then state" do
319 @story_mediator = mock("story_mediator")
320 @parser = StoryParser.new(@story_mediator)
321 @story_mediator.stub!(:create_story)
322 @story_mediator.stub!(:create_scenario)
323 @story_mediator.should_receive(:create_given).with("first")
324 @story_mediator.should_receive(:create_when).with("else")
325 @story_mediator.should_receive(:create_then).with("what")
328 it "should create a Story for Story" do
329 @story_mediator.should_receive(:create_story).with("number two","")
330 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Story: number two"])
333 it "should create a Scenario for Scenario" do
334 @story_mediator.should_receive(:create_scenario).with("number two")
335 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Scenario: number two"])
338 it "should create Given for Given" do
339 @story_mediator.should_receive(:create_given).with("second")
340 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Given second"])
343 it "should create Given for Given:" do
344 @story_mediator.should_receive(:create_given).with("second")
345 @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Given: second"])
348 it "should create When for When" do
349 @story_mediator.should_receive(:create_when).with("ever")
350 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "When ever"])
353 it "should create When for When:" do
354 @story_mediator.should_receive(:create_when).with("ever")
355 @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "When: ever"])
358 it "should create a Then for Then" do
359 @story_mediator.should_receive(:create_then).with("and there")
360 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Then and there"])
363 it "should create a Then for Then:" do
364 @story_mediator.should_receive(:create_then).with("and there")
365 @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Then: and there"])
368 it "should create a second Then for And" do
369 @story_mediator.should_receive(:create_then).with("ever")
370 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "And ever"])
373 it "should create a second Then for And:" do
374 @story_mediator.should_receive(:create_then).with("ever")
375 @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "And: ever"])
378 it "should ignore other" do
379 @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "this is ignored"])