rspec 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +35 -0
- data/MIT-LICENSE +1 -1
- data/README +9 -44
- data/Rakefile +34 -51
- data/TODO +0 -1
- data/UPGRADE +0 -24
- data/bin/spec +0 -0
- data/bin/spec_translator +0 -0
- data/examples/pure/behave_as_example.rb +0 -0
- data/examples/pure/partial_mock_example.rb +1 -0
- data/examples/stories/calculator.rb +1 -1
- data/lib/autotest/rspec.rb +7 -9
- data/lib/spec/example.rb +1 -1
- data/lib/spec/example/configuration.rb +30 -16
- data/lib/spec/example/example_group.rb +2 -1
- data/lib/spec/example/example_group_factory.rb +23 -21
- data/lib/spec/example/example_group_methods.rb +18 -5
- data/lib/spec/example/example_matcher.rb +0 -0
- data/lib/spec/example/example_methods.rb +6 -0
- data/lib/spec/example/module_inclusion_warnings.rb +37 -0
- data/lib/spec/expectations/differs/default.rb +1 -1
- data/lib/spec/expectations/extensions/object.rb +4 -12
- data/lib/spec/expectations/handler.rb +8 -0
- data/lib/spec/extensions.rb +1 -0
- data/lib/spec/extensions/metaclass.rb +7 -0
- data/lib/spec/extensions/object.rb +0 -4
- data/lib/spec/matchers/change.rb +1 -1
- data/lib/spec/matchers/has.rb +1 -11
- data/lib/spec/matchers/operator_matcher.rb +0 -0
- data/lib/spec/matchers/raise_error.rb +53 -30
- data/lib/spec/mocks.rb +1 -1
- data/lib/spec/mocks/argument_constraint_matchers.rb +5 -1
- data/lib/spec/mocks/argument_expectation.rb +26 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +29 -5
- data/lib/spec/mocks/mock.rb +9 -7
- data/lib/spec/mocks/proxy.rb +26 -12
- data/lib/spec/rake/spectask.rb +5 -5
- data/lib/spec/runner/backtrace_tweaker.rb +1 -1
- data/lib/spec/runner/formatter/base_formatter.rb +2 -3
- data/lib/spec/runner/formatter/base_text_formatter.rb +2 -2
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +4 -8
- data/lib/spec/runner/formatter/html_formatter.rb +18 -14
- data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
- data/lib/spec/runner/formatter/profile_formatter.rb +4 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +5 -1
- data/lib/spec/runner/formatter/specdoc_formatter.rb +1 -1
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +18 -7
- data/lib/spec/runner/option_parser.rb +17 -15
- data/lib/spec/runner/options.rb +37 -14
- data/lib/spec/runner/reporter.rb +15 -11
- data/lib/spec/story/extensions/regexp.rb +2 -2
- data/lib/spec/story/extensions/string.rb +2 -2
- data/lib/spec/story/runner.rb +9 -5
- data/lib/spec/story/runner/plain_text_story_runner.rb +2 -2
- data/lib/spec/story/runner/scenario_runner.rb +8 -0
- data/lib/spec/story/runner/story_mediator.rb +1 -1
- data/lib/spec/story/runner/story_runner.rb +3 -1
- data/lib/spec/story/step.rb +4 -4
- data/lib/spec/story/story.rb +8 -11
- data/lib/spec/story/world.rb +0 -1
- data/lib/spec/version.rb +2 -2
- data/plugins/mock_frameworks/rspec.rb +2 -0
- data/spec/autotest/rspec_spec.rb +12 -10
- data/spec/spec/example/configuration_spec.rb +0 -0
- data/spec/spec/example/example_group/described_module_spec.rb +20 -0
- data/spec/spec/example/example_group/warning_messages_spec.rb +76 -0
- data/spec/spec/example/example_group_factory_spec.rb +117 -102
- data/spec/spec/example/example_group_methods_spec.rb +51 -17
- data/spec/spec/example/example_group_spec.rb +13 -1
- data/spec/spec/example/example_methods_spec.rb +28 -6
- data/spec/spec/example/nested_example_group_spec.rb +12 -0
- data/spec/spec/example/predicate_matcher_spec.rb +0 -0
- data/spec/spec/expectations/differs/default_spec.rb +27 -9
- data/spec/spec/matchers/be_spec.rb +24 -0
- data/spec/spec/matchers/has_spec.rb +16 -0
- data/spec/spec/matchers/raise_error_spec.rb +124 -0
- data/spec/spec/mocks/{bug_report_10263.rb → bug_report_10263_spec.rb} +0 -0
- data/spec/spec/mocks/bug_report_11545_spec.rb +2 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +8 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +32 -0
- data/spec/spec/mocks/mock_spec.rb +56 -37
- data/spec/spec/mocks/partial_mock_spec.rb +41 -5
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
- data/spec/spec/runner/execution_context_spec.rb +7 -1
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +3 -2
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +30 -25
- data/spec/spec/runner/formatter/html_formatter_spec.rb +0 -3
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +333 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +12 -2
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +2 -2
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +110 -78
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +105 -1
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +33 -28
- data/spec/spec/runner/option_parser_spec.rb +65 -49
- data/spec/spec/runner/options_spec.rb +103 -17
- data/spec/spec/runner/reporter_spec.rb +10 -7
- data/spec/spec/runner/spec_drb.opts +1 -0
- data/spec/spec/runner/spec_parser_spec.rb +10 -4
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +14 -13
- data/spec/spec/story/runner/scenario_runner_spec.rb +124 -52
- data/spec/spec/story/runner/story_mediator_spec.rb +2 -2
- data/spec/spec/story/runner/story_runner_spec.rb +40 -2
- data/spec/spec/story/runner_spec.rb +59 -72
- data/spec/spec/story/step_spec.rb +20 -1
- data/spec/spec/story/story_spec.rb +2 -2
- data/stories/all.rb +1 -1
- data/stories/example_groups/stories.rb +4 -3
- data/stories/mock_framework_integration/stories.rb +7 -0
- data/stories/mock_framework_integration/use_flexmock.story +9 -0
- data/stories/resources/spec/spec_with_flexmock.rb +18 -0
- metadata +21 -18
- data/pre_commit/lib/pre_commit.rb +0 -4
- data/pre_commit/lib/pre_commit/core.rb +0 -50
- data/pre_commit/lib/pre_commit/pre_commit.rb +0 -54
- data/pre_commit/lib/pre_commit/rspec.rb +0 -111
- data/pre_commit/lib/pre_commit/rspec_on_rails.rb +0 -313
- data/pre_commit/spec/pre_commit/pre_commit_spec.rb +0 -15
- data/pre_commit/spec/pre_commit/rspec_on_rails_spec.rb +0 -36
- data/pre_commit/spec/spec_helper.rb +0 -3
- data/pre_commit/spec/spec_suite.rb +0 -11
|
@@ -293,39 +293,44 @@ module Spec
|
|
|
293
293
|
end
|
|
294
294
|
|
|
295
295
|
describe "#run_examples" do
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
296
|
+
describe "when not given a custom runner" do
|
|
297
|
+
it "should use the standard" do
|
|
298
|
+
runner = ::Spec::Runner::ExampleGroupRunner.new(@options)
|
|
299
|
+
::Spec::Runner::ExampleGroupRunner.should_receive(:new).
|
|
299
300
|
with(@options).
|
|
300
301
|
and_return(runner)
|
|
301
|
-
|
|
302
|
+
@options.user_input_for_runner = nil
|
|
302
303
|
|
|
303
|
-
|
|
304
|
+
@options.run_examples
|
|
305
|
+
end
|
|
304
306
|
end
|
|
305
307
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
308
|
+
describe "when given a custom runner" do
|
|
309
|
+
it "should use the custom runner" do
|
|
310
|
+
runner = Custom::ExampleGroupRunner.new(@options, nil)
|
|
311
|
+
Custom::ExampleGroupRunner.should_receive(:new).
|
|
309
312
|
with(@options, nil).
|
|
310
313
|
and_return(runner)
|
|
311
|
-
|
|
314
|
+
@options.user_input_for_runner = "Custom::ExampleGroupRunner"
|
|
312
315
|
|
|
313
|
-
|
|
314
|
-
|
|
316
|
+
@options.run_examples
|
|
317
|
+
end
|
|
315
318
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
+
it "should use the custom runner with extra options" do
|
|
320
|
+
runner = Custom::ExampleGroupRunner.new(@options, 'something')
|
|
321
|
+
Custom::ExampleGroupRunner.should_receive(:new).
|
|
319
322
|
with(@options, 'something').
|
|
320
323
|
and_return(runner)
|
|
321
|
-
|
|
324
|
+
@options.user_input_for_runner = "Custom::ExampleGroupRunner:something"
|
|
322
325
|
|
|
323
|
-
|
|
326
|
+
@options.run_examples
|
|
327
|
+
end
|
|
324
328
|
end
|
|
325
329
|
|
|
326
330
|
describe "when there are examples" do
|
|
327
331
|
before(:each) do
|
|
328
|
-
@
|
|
332
|
+
@example_group = Class.new(::Spec::Example::ExampleGroup)
|
|
333
|
+
@options.add_example_group @example_group
|
|
329
334
|
@options.formatters << Formatter::BaseTextFormatter.new(@options, @out)
|
|
330
335
|
end
|
|
331
336
|
|
|
@@ -339,6 +344,77 @@ module Spec
|
|
|
339
344
|
@options.run_examples
|
|
340
345
|
@options.examples_run?.should be_true
|
|
341
346
|
end
|
|
347
|
+
|
|
348
|
+
describe "and the suite passes" do
|
|
349
|
+
before do
|
|
350
|
+
@example_group.should_receive(:run).and_return(true)
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
it "invokes after_suite_parts with true" do
|
|
354
|
+
success_result = nil
|
|
355
|
+
@options.after_suite_parts << lambda do |success|
|
|
356
|
+
success_result = success
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
@options.run_examples
|
|
360
|
+
success_result.should be_true
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
describe "and the suite fails" do
|
|
365
|
+
before do
|
|
366
|
+
@example_group.should_receive(:run).and_return(false)
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
it "invokes after_suite_parts with false" do
|
|
370
|
+
success_result = nil
|
|
371
|
+
@options.after_suite_parts << lambda do |success|
|
|
372
|
+
success_result = success
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
@options.run_examples
|
|
376
|
+
success_result.should be_false
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
describe "when using heckle runner" do
|
|
381
|
+
before(:each) do
|
|
382
|
+
@heckle_runner_mock = mock("HeckleRunner")
|
|
383
|
+
@options.heckle_runner = @heckle_runner_mock
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
it "should heckle" do
|
|
387
|
+
@heckle_runner_mock.should_receive(:heckle_with)
|
|
388
|
+
@options.run_examples
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
it "shouldn't heckle recursively" do
|
|
392
|
+
heckled = false
|
|
393
|
+
@heckle_runner_mock.should_receive(:heckle_with) {
|
|
394
|
+
heckled.should == false
|
|
395
|
+
heckled = true
|
|
396
|
+
@options.run_examples
|
|
397
|
+
}
|
|
398
|
+
@options.run_examples
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
it "shouldn't load spec files twice" do
|
|
402
|
+
example_runner = mock("ExampleGroupRunner")
|
|
403
|
+
example_runner_inside_heckle = mock("ExampleGroupRunner inside Heckle")
|
|
404
|
+
|
|
405
|
+
ExampleGroupRunner.should_receive(:new).twice.and_return(
|
|
406
|
+
example_runner, example_runner_inside_heckle
|
|
407
|
+
)
|
|
408
|
+
|
|
409
|
+
example_runner.stub!(:run)
|
|
410
|
+
example_runner.should_receive(:load_files)
|
|
411
|
+
@heckle_runner_mock.stub!(:heckle_with).and_return { @options.run_examples }
|
|
412
|
+
example_runner_inside_heckle.stub!(:run)
|
|
413
|
+
example_runner_inside_heckle.should_not_receive(:load_files)
|
|
414
|
+
|
|
415
|
+
@options.run_examples
|
|
416
|
+
end
|
|
417
|
+
end
|
|
342
418
|
end
|
|
343
419
|
|
|
344
420
|
describe "when there are no examples" do
|
|
@@ -357,6 +433,16 @@ module Spec
|
|
|
357
433
|
@options.run_examples
|
|
358
434
|
@options.examples_run?.should be_false
|
|
359
435
|
end
|
|
436
|
+
|
|
437
|
+
it "invokes after_suite_parts with true" do
|
|
438
|
+
success_result = nil
|
|
439
|
+
@options.after_suite_parts << lambda do |success|
|
|
440
|
+
success_result = success
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
@options.run_examples
|
|
444
|
+
success_result.should be_true
|
|
445
|
+
end
|
|
360
446
|
end
|
|
361
447
|
end
|
|
362
448
|
end
|
|
@@ -21,8 +21,10 @@ module Spec
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def create_example_group(description_text)
|
|
24
|
-
example_group =
|
|
25
|
-
|
|
24
|
+
example_group = Spec::Example::ExampleGroup.describe(description_text) do
|
|
25
|
+
it "should do something" do
|
|
26
|
+
end
|
|
27
|
+
end
|
|
26
28
|
example_group
|
|
27
29
|
end
|
|
28
30
|
|
|
@@ -127,8 +129,9 @@ module Spec
|
|
|
127
129
|
|
|
128
130
|
describe Reporter, "reporting one failing example" do
|
|
129
131
|
it "should tell formatter that example failed" do
|
|
132
|
+
example = example_group.it("should do something") {}
|
|
130
133
|
formatter.should_receive(:example_failed)
|
|
131
|
-
reporter.example_finished(
|
|
134
|
+
reporter.example_finished(example, RuntimeError.new)
|
|
132
135
|
end
|
|
133
136
|
|
|
134
137
|
it "should delegate to backtrace tweaker" do
|
|
@@ -154,7 +157,7 @@ module Spec
|
|
|
154
157
|
describe Reporter, "reporting one pending example (ExamplePendingError)" do
|
|
155
158
|
it "should tell formatter example is pending" do
|
|
156
159
|
example = ExampleGroup.new("example")
|
|
157
|
-
formatter.should_receive(:example_pending).with(
|
|
160
|
+
formatter.should_receive(:example_pending).with(example, "reason")
|
|
158
161
|
formatter.should_receive(:add_example_group).with(example_group)
|
|
159
162
|
reporter.add_example_group(example_group)
|
|
160
163
|
reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason"))
|
|
@@ -162,7 +165,7 @@ module Spec
|
|
|
162
165
|
|
|
163
166
|
it "should account for pending example in stats" do
|
|
164
167
|
example = ExampleGroup.new("example")
|
|
165
|
-
formatter.should_receive(:example_pending).with(
|
|
168
|
+
formatter.should_receive(:example_pending).with(example, "reason")
|
|
166
169
|
formatter.should_receive(:start_dump)
|
|
167
170
|
formatter.should_receive(:dump_pending)
|
|
168
171
|
formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
|
|
@@ -177,11 +180,11 @@ module Spec
|
|
|
177
180
|
describe Reporter, "reporting one pending example (PendingExampleFixedError)" do
|
|
178
181
|
it "should tell formatter pending example is fixed" do
|
|
179
182
|
formatter.should_receive(:example_failed) do |name, counter, failure|
|
|
180
|
-
failure.header.should == "'example_group
|
|
183
|
+
failure.header.should == "'example_group should do something' FIXED"
|
|
181
184
|
end
|
|
182
185
|
formatter.should_receive(:add_example_group).with(example_group)
|
|
183
186
|
reporter.add_example_group(example_group)
|
|
184
|
-
reporter.example_finished(
|
|
187
|
+
reporter.example_finished(example_group.examples.first, Spec::Example::PendingExampleFixedError.new("reason"))
|
|
185
188
|
end
|
|
186
189
|
end
|
|
187
190
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--drb
|
|
@@ -3,9 +3,15 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
|
3
3
|
describe "SpecParser" do
|
|
4
4
|
attr_reader :parser, :file
|
|
5
5
|
before(:each) do
|
|
6
|
+
@original_rspec_options = $rspec_options
|
|
7
|
+
$rspec_options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
|
|
6
8
|
@parser = Spec::Runner::SpecParser.new
|
|
7
9
|
@file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
|
|
8
|
-
|
|
10
|
+
load file
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after do
|
|
14
|
+
$rspec_options = @original_rspec_options
|
|
9
15
|
end
|
|
10
16
|
|
|
11
17
|
it "should find spec name for 'specify' at same line" do
|
|
@@ -32,9 +38,9 @@ describe "SpecParser" do
|
|
|
32
38
|
parser.spec_name_for(file, 14).should == "d"
|
|
33
39
|
end
|
|
34
40
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
it "should find nearest example name between examples" do
|
|
42
|
+
parser.spec_name_for(file, 7).should == "c 1"
|
|
43
|
+
end
|
|
38
44
|
|
|
39
45
|
it "should find nothing outside a context" do
|
|
40
46
|
parser.spec_name_for(file, 2).should be_nil
|
|
@@ -22,28 +22,29 @@ module Spec
|
|
|
22
22
|
|
|
23
23
|
it "should parse a story file" do
|
|
24
24
|
runner = PlainTextStoryRunner.new("path")
|
|
25
|
-
|
|
26
25
|
during {
|
|
27
|
-
runner.run
|
|
26
|
+
runner.run(mock('runner'))
|
|
28
27
|
}.expect {
|
|
29
28
|
@parser.should_receive(:parse).with(["this", "and that"])
|
|
30
29
|
}
|
|
31
30
|
end
|
|
32
31
|
|
|
33
32
|
it "should build up a mediator with its own steps and the singleton story_runner" do
|
|
33
|
+
@story_runner = mock('story runner', :null_object => true)
|
|
34
|
+
|
|
34
35
|
runner = PlainTextStoryRunner.new("path")
|
|
35
|
-
|
|
36
|
-
Spec::Story::Runner::StoryMediator.should_receive(:new).with(
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
|
|
37
|
+
Spec::Story::Runner::StoryMediator.should_receive(:new).with(
|
|
38
|
+
runner.steps, @story_runner, {}
|
|
39
|
+
).and_return(mediator = stub("mediator", :run_stories => nil))
|
|
40
|
+
runner.run(@story_runner)
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
it "should build up a parser with the mediator" do
|
|
42
44
|
runner = PlainTextStoryRunner.new("path")
|
|
43
|
-
Spec::Story::Runner.should_receive(:story_runner).and_return(story_runner = mock("story runner"))
|
|
44
45
|
Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator = stub("mediator", :run_stories => nil))
|
|
45
46
|
Spec::Story::Runner::StoryParser.should_receive(:new).with(mediator).and_return(@parser)
|
|
46
|
-
runner.run
|
|
47
|
+
runner.run(stub("story_runner"))
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
it "should tell the mediator to run the stories" do
|
|
@@ -51,7 +52,7 @@ module Spec
|
|
|
51
52
|
mediator = mock("mediator")
|
|
52
53
|
Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator)
|
|
53
54
|
mediator.should_receive(:run_stories)
|
|
54
|
-
runner.run
|
|
55
|
+
runner.run(mock('runner'))
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
it "should accept a block instead of a path" do
|
|
@@ -59,13 +60,13 @@ module Spec
|
|
|
59
60
|
runner.load("path/to/story")
|
|
60
61
|
end
|
|
61
62
|
File.should_receive(:read).with("path/to/story").and_return("this\nand that")
|
|
62
|
-
runner.run
|
|
63
|
+
runner.run(mock('runner'))
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
it "should tell you if you try to run with no path set" do
|
|
66
67
|
runner = PlainTextStoryRunner.new
|
|
67
68
|
lambda {
|
|
68
|
-
runner.run
|
|
69
|
+
runner.run(mock('runner'))
|
|
69
70
|
}.should raise_error(RuntimeError, "You must set a path to the file with the story. See the RDoc.")
|
|
70
71
|
end
|
|
71
72
|
|
|
@@ -74,7 +75,7 @@ module Spec
|
|
|
74
75
|
Spec::Story::Runner::StoryMediator.should_receive(:new).
|
|
75
76
|
with(anything, anything, :foo => :bar).
|
|
76
77
|
and_return(mediator = stub("mediator", :run_stories => nil))
|
|
77
|
-
runner.run
|
|
78
|
+
runner.run(mock('runner'))
|
|
78
79
|
end
|
|
79
80
|
|
|
80
81
|
it "should provide access to its options" do
|
|
@@ -83,7 +84,7 @@ module Spec
|
|
|
83
84
|
Spec::Story::Runner::StoryMediator.should_receive(:new).
|
|
84
85
|
with(anything, anything, :foo => :bar).
|
|
85
86
|
and_return(mediator = stub("mediator", :run_stories => nil))
|
|
86
|
-
runner.run
|
|
87
|
+
runner.run mock('runner')
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
end
|
|
@@ -70,71 +70,143 @@ module Spec
|
|
|
70
70
|
|
|
71
71
|
# then
|
|
72
72
|
end
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
describe "when a scenario succeeds" do
|
|
74
|
+
before(:each) do
|
|
75
|
+
# given
|
|
76
|
+
@world = stub_everything('world')
|
|
77
|
+
@story = Story.new 'story', 'narrative' do end
|
|
78
|
+
@scenario = Scenario.new @story, 'scenario1' do
|
|
79
|
+
# succeeds
|
|
80
|
+
end
|
|
81
|
+
@scenario_runner = ScenarioRunner.new
|
|
80
82
|
end
|
|
81
|
-
scenario_runner = ScenarioRunner.new
|
|
82
|
-
mock_listener1 = stub_everything('listener1')
|
|
83
|
-
mock_listener2 = stub_everything('listener2')
|
|
84
|
-
scenario_runner.add_listener(mock_listener1)
|
|
85
|
-
scenario_runner.add_listener(mock_listener2)
|
|
86
83
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
84
|
+
it 'should notify listeners' do
|
|
85
|
+
#given
|
|
86
|
+
mock_listener1 = stub_everything('listener1')
|
|
87
|
+
mock_listener2 = stub_everything('listener2')
|
|
88
|
+
@scenario_runner.add_listener(mock_listener1)
|
|
89
|
+
@scenario_runner.add_listener(mock_listener2)
|
|
90
|
+
|
|
91
|
+
# expect
|
|
92
|
+
mock_listener1.should_receive(:scenario_succeeded).with('story', 'scenario1')
|
|
93
|
+
mock_listener2.should_receive(:scenario_succeeded).with('story', 'scenario1')
|
|
94
|
+
|
|
95
|
+
# when
|
|
96
|
+
@scenario_runner.run(@scenario, @world)
|
|
97
|
+
|
|
98
|
+
# then
|
|
99
|
+
end
|
|
93
100
|
|
|
94
|
-
|
|
101
|
+
it "should return true" do
|
|
102
|
+
#when
|
|
103
|
+
success = @scenario_runner.run(@scenario, @world)
|
|
104
|
+
|
|
105
|
+
#then
|
|
106
|
+
success.should == true
|
|
107
|
+
end
|
|
95
108
|
end
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
109
|
+
|
|
110
|
+
describe "when a scenario raises an error (other than a pending error)" do
|
|
111
|
+
before(:each) do
|
|
112
|
+
# given
|
|
113
|
+
@error = RuntimeError.new('oops')
|
|
114
|
+
@story = Story.new 'title', 'narrative' do end
|
|
115
|
+
@scenario = Scenario.new @story, 'scenario1' do
|
|
116
|
+
end
|
|
117
|
+
@scenario_runner = ScenarioRunner.new
|
|
118
|
+
@world = stub_everything
|
|
119
|
+
|
|
120
|
+
# expect
|
|
121
|
+
@world.should_receive(:errors).twice.and_return([@error, @error])
|
|
102
122
|
end
|
|
103
|
-
scenario_runner = ScenarioRunner.new
|
|
104
|
-
mock_listener = stub_everything('listener')
|
|
105
|
-
scenario_runner.add_listener(mock_listener)
|
|
106
|
-
world = stub_everything
|
|
107
123
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
124
|
+
it 'should notify listeners ONCE' do
|
|
125
|
+
#given
|
|
126
|
+
mock_listener = stub_everything('listener')
|
|
127
|
+
@scenario_runner.add_listener(mock_listener)
|
|
128
|
+
|
|
129
|
+
#expect
|
|
130
|
+
mock_listener.should_receive(:scenario_failed).with('title', 'scenario1', @error).once
|
|
131
|
+
|
|
132
|
+
# when
|
|
133
|
+
@scenario_runner.run @scenario, @world
|
|
134
|
+
|
|
135
|
+
# then
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "should return false" do
|
|
139
|
+
# when
|
|
140
|
+
success = @scenario_runner.run @scenario, @world
|
|
141
|
+
|
|
142
|
+
# then
|
|
143
|
+
success.should == false
|
|
144
|
+
end
|
|
111
145
|
|
|
112
|
-
# when
|
|
113
|
-
scenario_runner.run scenario, world
|
|
114
146
|
|
|
115
|
-
# then
|
|
116
147
|
end
|
|
117
148
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
149
|
+
describe "when a scenario is pending" do
|
|
150
|
+
before(:each) do
|
|
151
|
+
# given
|
|
152
|
+
@pending_error = Spec::Example::ExamplePendingError.new('todo')
|
|
153
|
+
@story = Story.new 'title', 'narrative' do end
|
|
154
|
+
@scenario = Scenario.new @story, 'scenario1' do
|
|
155
|
+
end
|
|
156
|
+
@scenario_runner = ScenarioRunner.new
|
|
157
|
+
@world = stub_everything
|
|
158
|
+
|
|
159
|
+
# expect
|
|
160
|
+
@world.should_receive(:errors).twice.and_return([@pending_error, @pending_error])
|
|
123
161
|
end
|
|
124
|
-
scenario_runner = ScenarioRunner.new
|
|
125
|
-
mock_listener = mock('listener')
|
|
126
|
-
scenario_runner.add_listener(mock_listener)
|
|
127
|
-
world = stub_everything
|
|
128
162
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
163
|
+
it 'should notify listeners' do
|
|
164
|
+
#given
|
|
165
|
+
mock_listener = mock('listener')
|
|
166
|
+
@scenario_runner.add_listener(mock_listener)
|
|
167
|
+
|
|
168
|
+
# expect
|
|
169
|
+
mock_listener.should_receive(:scenario_started).with('title', 'scenario1')
|
|
170
|
+
mock_listener.should_receive(:scenario_pending).with('title', 'scenario1', 'todo').once
|
|
171
|
+
|
|
172
|
+
# when
|
|
173
|
+
@scenario_runner.run @scenario, @world
|
|
174
|
+
|
|
175
|
+
# then
|
|
176
|
+
end
|
|
136
177
|
|
|
137
|
-
|
|
178
|
+
it "should return true" do
|
|
179
|
+
# when
|
|
180
|
+
success = @scenario_runner.run @scenario, @world
|
|
181
|
+
|
|
182
|
+
# then
|
|
183
|
+
success.should == true
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
describe "when a scenario has an empty body" do
|
|
188
|
+
before(:each) do
|
|
189
|
+
@story = Story.new 'title', 'narrative' do end
|
|
190
|
+
@scenario = Scenario.new @story, 'scenario'
|
|
191
|
+
@scenario_runner = ScenarioRunner.new
|
|
192
|
+
@world = stub_everything
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it "should mark the scenario as pending" do
|
|
196
|
+
mock_listener = stub('listener', :scenario_started => true)
|
|
197
|
+
@scenario_runner.add_listener mock_listener
|
|
198
|
+
|
|
199
|
+
mock_listener.should_receive(:scenario_pending).with('title', 'scenario', '')
|
|
200
|
+
@scenario_runner.run @scenario, @world
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it "should return true" do
|
|
204
|
+
# when
|
|
205
|
+
success = @scenario_runner.run @scenario, @world
|
|
206
|
+
|
|
207
|
+
# then
|
|
208
|
+
success.should == true
|
|
209
|
+
end
|
|
138
210
|
end
|
|
139
211
|
end
|
|
140
212
|
end
|