rspec 1.1.4 → 1.1.5
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 → History.txt} +116 -64
- data/Manifest.txt +403 -0
- data/{MIT-LICENSE → README.txt} +43 -0
- data/Rakefile +39 -212
- data/{TODO → TODO.txt} +0 -0
- data/bin/autospec +4 -0
- data/bin/spec +1 -1
- data/examples/pure/yielding_example.rb +33 -0
- data/examples/stories/game-of-life/.loadpath +5 -0
- data/examples/stories/game-of-life/behaviour/everything.rb +1 -1
- data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +17 -17
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +1 -1
- data/lib/autotest/rspec.rb +3 -29
- data/lib/spec.rb +10 -12
- data/lib/spec/adapters.rb +1 -0
- data/lib/spec/adapters/ruby_engine.rb +26 -0
- data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
- data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
- data/lib/spec/example/errors.rb +6 -0
- data/lib/spec/example/example_group_methods.rb +17 -14
- data/lib/spec/example/example_matcher.rb +2 -0
- data/lib/spec/example/example_methods.rb +4 -9
- data/lib/spec/example/module_inclusion_warnings.rb +2 -1
- data/lib/spec/expectations/extensions/object.rb +2 -2
- data/lib/spec/expectations/handler.rb +8 -16
- data/lib/spec/extensions/main.rb +2 -17
- data/lib/spec/matchers.rb +8 -2
- data/lib/spec/matchers/be.rb +0 -3
- data/lib/spec/matchers/change.rb +44 -40
- data/lib/spec/matchers/has.rb +1 -1
- data/lib/spec/matchers/have.rb +17 -12
- data/lib/spec/matchers/operator_matcher.rb +10 -4
- data/lib/spec/matchers/simple_matcher.rb +113 -10
- data/lib/spec/mocks.rb +1 -1
- data/lib/spec/mocks/argument_constraints.rb +185 -0
- data/lib/spec/mocks/argument_expectation.rb +35 -173
- data/lib/spec/mocks/framework.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +30 -5
- data/lib/spec/mocks/methods.rb +14 -2
- data/lib/spec/mocks/mock.rb +4 -0
- data/lib/spec/mocks/proxy.rb +46 -5
- data/lib/spec/mocks/spec_methods.rb +9 -1
- data/lib/spec/rake/spectask.rb +14 -22
- data/lib/spec/rake/verify_rcov.rb +3 -3
- data/lib/spec/runner.rb +18 -6
- data/lib/spec/runner/backtrace_tweaker.rb +6 -7
- data/lib/spec/runner/command_line.rb +6 -17
- data/lib/spec/runner/drb_command_line.rb +1 -1
- data/lib/spec/runner/formatter/base_formatter.rb +3 -1
- data/lib/spec/runner/formatter/base_text_formatter.rb +5 -9
- data/lib/spec/runner/formatter/html_formatter.rb +1 -1
- data/lib/spec/runner/formatter/nested_text_formatter.rb +1 -1
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +2 -2
- data/lib/spec/runner/formatter/specdoc_formatter.rb +1 -1
- data/lib/spec/runner/formatter/story/html_formatter.rb +62 -16
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +68 -16
- data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
- data/lib/spec/runner/heckle_runner.rb +2 -2
- data/lib/spec/runner/option_parser.rb +2 -1
- data/lib/spec/runner/options.rb +18 -9
- data/lib/spec/runner/reporter.rb +24 -4
- data/lib/spec/runner/spec_parser.rb +1 -1
- data/lib/spec/story/runner.rb +1 -2
- data/lib/spec/story/runner/story_mediator.rb +14 -0
- data/lib/spec/story/runner/story_parser.rb +20 -0
- data/lib/spec/story/step.rb +40 -28
- data/lib/spec/story/step_mother.rb +2 -1
- data/lib/spec/story/world.rb +6 -2
- data/lib/spec/version.rb +13 -22
- data/rake_tasks/failing_examples_with_html.rake +1 -1
- data/rake_tasks/verify_rcov.rake +2 -2
- data/rspec.gemspec +33 -0
- data/spec/autotest/rspec_spec.rb +90 -141
- data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
- data/spec/spec/example/base_formatter_spec.rb +112 -0
- data/spec/spec/example/example_group_factory_spec.rb +2 -2
- data/spec/spec/example/example_group_methods_spec.rb +55 -4
- data/spec/spec/example/example_group_spec.rb +4 -3
- data/spec/spec/example/example_methods_spec.rb +18 -14
- data/spec/spec/example/pending_module_spec.rb +38 -0
- data/spec/spec/example/shared_example_group_spec.rb +1 -1
- data/spec/spec/expectations/extensions/object_spec.rb +0 -12
- data/spec/spec/extensions/main_spec.rb +3 -8
- data/spec/spec/matchers/change_spec.rb +16 -6
- data/spec/spec/matchers/handler_spec.rb +58 -37
- data/spec/spec/matchers/has_spec.rb +10 -0
- data/spec/spec/matchers/have_spec.rb +105 -2
- data/spec/spec/matchers/operator_matcher_spec.rb +35 -2
- data/spec/spec/matchers/simple_matcher_spec.rb +64 -2
- data/spec/spec/mocks/any_number_of_times_spec.rb +7 -0
- data/spec/spec/mocks/bug_report_496.rb +17 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +7 -1
- data/spec/spec/mocks/hash_including_matcher_spec.rb +45 -24
- data/spec/spec/mocks/mock_spec.rb +55 -10
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +54 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +14 -0
- data/spec/spec/mocks/options_hash_spec.rb +18 -28
- data/spec/spec/mocks/partial_mock_spec.rb +2 -0
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +20 -6
- data/spec/spec/mocks/stub_spec.rb +7 -0
- data/spec/spec/runner/command_line_spec.rb +5 -12
- data/spec/spec/runner/drb_command_line_spec.rb +13 -6
- data/spec/spec/runner/formatter/html_formatter_spec.rb +2 -1
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +3 -3
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +20 -2
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +2 -1
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +3 -3
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +76 -2
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +161 -0
- data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
- data/spec/spec/runner/heckle_runner_spec.rb +8 -8
- data/spec/spec/runner/option_parser_spec.rb +21 -6
- data/spec/spec/runner/output_one_time_fixture_runner.rb +1 -1
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -0
- data/spec/spec/runner/reporter_spec.rb +51 -5
- data/spec/spec/runner/spec_parser_spec.rb +4 -4
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +2 -5
- data/spec/spec/story/runner/story_mediator_spec.rb +10 -0
- data/spec/spec/story/runner/story_parser_spec.rb +23 -6
- data/spec/spec/story/scenario_spec.rb +1 -3
- data/spec/spec/story/step_mother_spec.rb +12 -0
- data/spec/spec/story/step_spec.rb +57 -4
- data/spec/spec/story/story_spec.rb +1 -3
- data/spec/spec/story/world_spec.rb +1 -1
- data/spec/spec_helper.rb +21 -68
- data/stories/all.rb +1 -1
- data/stories/configuration/before_blocks.story +21 -0
- data/stories/configuration/stories.rb +7 -0
- data/stories/example_groups/stories.rb +3 -4
- data/stories/resources/spec/before_blocks_example.rb +32 -0
- data/stories/stories/multiline_steps.story +23 -0
- data/stories/stories/steps/multiline_steps.rb +13 -0
- data/stories/stories/stories.rb +6 -0
- data/story_server/prototype/javascripts/builder.js +136 -0
- data/story_server/prototype/javascripts/controls.js +972 -0
- data/story_server/prototype/javascripts/dragdrop.js +976 -0
- data/story_server/prototype/javascripts/effects.js +1117 -0
- data/story_server/prototype/javascripts/prototype.js +4140 -0
- data/story_server/prototype/javascripts/rspec.js +149 -0
- data/story_server/prototype/javascripts/scriptaculous.js +58 -0
- data/story_server/prototype/javascripts/slider.js +276 -0
- data/story_server/prototype/javascripts/sound.js +55 -0
- data/story_server/prototype/javascripts/unittest.js +568 -0
- data/story_server/prototype/lib/server.rb +24 -0
- data/story_server/prototype/stories.html +176 -0
- data/story_server/prototype/stylesheets/rspec.css +136 -0
- data/story_server/prototype/stylesheets/test.css +90 -0
- metadata +166 -166
- data/README +0 -36
- data/UPGRADE +0 -7
- data/bin/spec_translator +0 -8
- data/lib/spec/mocks/argument_constraint_matchers.rb +0 -31
- data/lib/spec/translator.rb +0 -114
- data/spec/spec/example/example_spec.rb +0 -53
- data/spec/spec/runner/execution_context_spec.rb +0 -37
- data/spec/spec/translator_spec.rb +0 -265
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../../spec_helper'
|
|
2
|
+
require 'spec/runner/formatter/story/progress_bar_formatter'
|
|
3
|
+
|
|
4
|
+
module Spec
|
|
5
|
+
module Runner
|
|
6
|
+
module Formatter
|
|
7
|
+
module Story
|
|
8
|
+
describe ProgressBarFormatter do
|
|
9
|
+
before :each do
|
|
10
|
+
# given
|
|
11
|
+
@out = StringIO.new
|
|
12
|
+
@out.stub!(:tty?).and_return(true)
|
|
13
|
+
@tweaker = mock('tweaker')
|
|
14
|
+
@tweaker.stub!(:tweak_backtrace)
|
|
15
|
+
@options = mock('options')
|
|
16
|
+
@options.stub!(:colour).and_return(true)
|
|
17
|
+
@options.stub!(:backtrace_tweaker).and_return(@tweaker)
|
|
18
|
+
|
|
19
|
+
@formatter = ProgressBarFormatter.new(@options, @out)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should print some white space before test summary' do
|
|
23
|
+
#when
|
|
24
|
+
@formatter.run_started(1)
|
|
25
|
+
@formatter.run_ended
|
|
26
|
+
|
|
27
|
+
#then
|
|
28
|
+
@out.string.should =~ /^\n{2}/
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should print how long tests took to complete" do
|
|
32
|
+
#when
|
|
33
|
+
now = Time.now
|
|
34
|
+
future = now+1
|
|
35
|
+
Time.stub!(:now).and_return(now)
|
|
36
|
+
@formatter.run_started(1)
|
|
37
|
+
Time.stub!(:now).and_return(future)
|
|
38
|
+
@formatter.run_ended
|
|
39
|
+
|
|
40
|
+
#then
|
|
41
|
+
@out.string.should include("Finished in %f seconds" % (future-now))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
it "should push green dot for passing scenario" do
|
|
46
|
+
#when
|
|
47
|
+
@formatter.scenario_started('','')
|
|
48
|
+
@formatter.step_succeeded('', '')
|
|
49
|
+
@formatter.scenario_ended
|
|
50
|
+
@formatter.story_ended '', ''
|
|
51
|
+
|
|
52
|
+
#then
|
|
53
|
+
@out.string.should eql("\e[32m.\e[0m")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should push red F for failure scenario" do
|
|
57
|
+
#when
|
|
58
|
+
@formatter.scenario_started('','')
|
|
59
|
+
@formatter.step_failed('', '')
|
|
60
|
+
@formatter.scenario_failed('', '', '')
|
|
61
|
+
@formatter.story_ended '', ''
|
|
62
|
+
|
|
63
|
+
#then
|
|
64
|
+
@out.string.should eql("\e[31mF\e[0m")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should push yellow P for pending scenario" do
|
|
68
|
+
#when
|
|
69
|
+
@formatter.scenario_started('','')
|
|
70
|
+
@formatter.step_pending('', '')
|
|
71
|
+
@formatter.scenario_pending('story', '', '')
|
|
72
|
+
@formatter.story_ended '', ''
|
|
73
|
+
|
|
74
|
+
#then
|
|
75
|
+
@out.string.should eql("\e[33mP\e[0m")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -21,18 +21,18 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
it "should heckle all methods in all classes in a module" do
|
|
24
|
-
@heckle_class.should_receive(:new).with("Foo::Bar", "one",
|
|
25
|
-
@heckle_class.should_receive(:new).with("Foo::Bar", "two",
|
|
26
|
-
@heckle_class.should_receive(:new).with("Foo::Zap", "three",
|
|
27
|
-
@heckle_class.should_receive(:new).with("Foo::Zap", "four",
|
|
24
|
+
@heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
|
|
25
|
+
@heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
|
|
26
|
+
@heckle_class.should_receive(:new).with("Foo::Zap", "three", Spec::Runner.options).and_return(@heckle)
|
|
27
|
+
@heckle_class.should_receive(:new).with("Foo::Zap", "four", Spec::Runner.options).and_return(@heckle)
|
|
28
28
|
|
|
29
29
|
heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class)
|
|
30
30
|
heckle_runner.heckle_with
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
it "should heckle all methods in a class" do
|
|
34
|
-
@heckle_class.should_receive(:new).with("Foo::Bar", "one",
|
|
35
|
-
@heckle_class.should_receive(:new).with("Foo::Bar", "two",
|
|
34
|
+
@heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
|
|
35
|
+
@heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
|
|
36
36
|
|
|
37
37
|
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class)
|
|
38
38
|
heckle_runner.heckle_with
|
|
@@ -46,14 +46,14 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
it "should heckle specific method in a class (with #)" do
|
|
49
|
-
@heckle_class.should_receive(:new).with("Foo::Bar", "two",
|
|
49
|
+
@heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
|
|
50
50
|
|
|
51
51
|
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class)
|
|
52
52
|
heckle_runner.heckle_with
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
it "should heckle specific method in a class (with .)" do
|
|
56
|
-
@heckle_class.should_receive(:new).with("Foo::Bar", "two",
|
|
56
|
+
@heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
|
|
57
57
|
|
|
58
58
|
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class)
|
|
59
59
|
heckle_runner.heckle_with
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
2
|
require 'fileutils'
|
|
3
3
|
|
|
4
|
+
module Custom
|
|
5
|
+
class ExampleGroupRunner
|
|
6
|
+
attr_reader :options, :arg
|
|
7
|
+
def initialize(options, arg)
|
|
8
|
+
@options, @arg = options, arg
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def load_files(files)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def run
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
4
19
|
describe "OptionParser" do
|
|
5
20
|
before(:each) do
|
|
6
21
|
@out = StringIO.new
|
|
@@ -76,7 +91,7 @@ describe "OptionParser" do
|
|
|
76
91
|
it "should print version to stdout" do
|
|
77
92
|
options = parse(["--version"])
|
|
78
93
|
@out.rewind
|
|
79
|
-
@out.read.should match(/
|
|
94
|
+
@out.read.should match(/rspec version \d+\.\d+\.\d+/n)
|
|
80
95
|
end
|
|
81
96
|
|
|
82
97
|
it "should require file when require specified" do
|
|
@@ -231,19 +246,19 @@ describe "OptionParser" do
|
|
|
231
246
|
|
|
232
247
|
describe "when attempting a focussed spec" do
|
|
233
248
|
attr_reader :file, :dir
|
|
234
|
-
before do
|
|
235
|
-
@original_rspec_options =
|
|
249
|
+
before(:each) do
|
|
250
|
+
@original_rspec_options = Spec::Runner.options
|
|
236
251
|
@file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
|
|
237
252
|
@dir = File.dirname(file)
|
|
238
253
|
end
|
|
239
254
|
|
|
240
|
-
after do
|
|
241
|
-
|
|
255
|
+
after(:each) do
|
|
256
|
+
Spec::Runner.use @original_rspec_options
|
|
242
257
|
end
|
|
243
258
|
|
|
244
259
|
def parse(args)
|
|
245
260
|
options = super
|
|
246
|
-
|
|
261
|
+
Spec::Runner.use options
|
|
247
262
|
options.filename_pattern = "*_fixture.rb"
|
|
248
263
|
options
|
|
249
264
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
dir = File.dirname(__FILE__)
|
|
2
2
|
require "#{dir}/../../spec_helper"
|
|
3
3
|
|
|
4
|
-
triggering_double_output =
|
|
4
|
+
triggering_double_output = Spec::Runner.options
|
|
5
5
|
options = Spec::Runner::OptionParser.parse(
|
|
6
6
|
["#{dir}/output_one_time_fixture.rb"], $stderr, $stdout
|
|
7
7
|
)
|
|
@@ -51,6 +51,12 @@ module Spec
|
|
|
51
51
|
@tweaker.tweak_backtrace(@error)
|
|
52
52
|
@error.backtrace.should include("/a/b/c/d.rb")
|
|
53
53
|
end
|
|
54
|
+
|
|
55
|
+
it "should gracefully handle backtraces with newlines" do
|
|
56
|
+
@error.set_backtrace(["we like\nbin/spec:\nnewlines"])
|
|
57
|
+
@tweaker.tweak_backtrace(@error)
|
|
58
|
+
@error.backtrace.should include("we like\nnewlines")
|
|
59
|
+
end
|
|
54
60
|
end
|
|
55
61
|
end
|
|
56
62
|
end
|
|
@@ -17,7 +17,7 @@ module Spec
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def failure
|
|
20
|
-
Mocks::DuckTypeArgConstraint.new(:header, :exception)
|
|
20
|
+
Mocks::ArgumentConstraints::DuckTypeArgConstraint.new(:header, :exception)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def create_example_group(description_text)
|
|
@@ -155,26 +155,72 @@ module Spec
|
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
describe Reporter, "reporting one pending example (ExamplePendingError)" do
|
|
158
|
+
before :each do
|
|
159
|
+
@pending_error = Spec::Example::ExamplePendingError.new("reason")
|
|
160
|
+
@pending_caller = @pending_error.pending_caller
|
|
161
|
+
end
|
|
162
|
+
|
|
158
163
|
it "should tell formatter example is pending" do
|
|
159
164
|
example = ExampleGroup.new("example")
|
|
160
|
-
formatter.should_receive(:example_pending).with(example, "reason")
|
|
165
|
+
formatter.should_receive(:example_pending).with(example, "reason", @pending_caller)
|
|
161
166
|
formatter.should_receive(:add_example_group).with(example_group)
|
|
162
167
|
reporter.add_example_group(example_group)
|
|
163
|
-
reporter.example_finished(example,
|
|
168
|
+
reporter.example_finished(example, @pending_error)
|
|
164
169
|
end
|
|
165
170
|
|
|
166
171
|
it "should account for pending example in stats" do
|
|
167
172
|
example = ExampleGroup.new("example")
|
|
168
|
-
formatter.should_receive(:example_pending).with(example, "reason")
|
|
173
|
+
formatter.should_receive(:example_pending).with(example, "reason", @pending_caller)
|
|
169
174
|
formatter.should_receive(:start_dump)
|
|
170
175
|
formatter.should_receive(:dump_pending)
|
|
171
176
|
formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
|
|
172
177
|
formatter.should_receive(:close).with(no_args)
|
|
173
178
|
formatter.should_receive(:add_example_group).with(example_group)
|
|
174
179
|
reporter.add_example_group(example_group)
|
|
175
|
-
reporter.example_finished(example,
|
|
180
|
+
reporter.example_finished(example, @pending_error)
|
|
176
181
|
reporter.dump
|
|
177
182
|
end
|
|
183
|
+
|
|
184
|
+
describe "to formatters which have example_pending's arity of 2 (which is now deprecated)" do
|
|
185
|
+
before :each do
|
|
186
|
+
Kernel.stub!(:warn).with(Spec::Runner::Reporter::EXAMPLE_PENDING_DEPRECATION_WARNING)
|
|
187
|
+
|
|
188
|
+
@deprecated_formatter = Class.new(@formatter.class) do
|
|
189
|
+
attr_reader :example_passed_to_method, :message_passed_to_method
|
|
190
|
+
|
|
191
|
+
def example_pending(example_passed_to_method, message_passed_to_method)
|
|
192
|
+
@example_passed_to_method = example_passed_to_method
|
|
193
|
+
@message_passed_to_method = message_passed_to_method
|
|
194
|
+
end
|
|
195
|
+
end.new(options, formatter_output)
|
|
196
|
+
|
|
197
|
+
options.formatters << @deprecated_formatter
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it "should pass the correct example to the formatter" do
|
|
201
|
+
example = ExampleGroup.new("example")
|
|
202
|
+
reporter.add_example_group(example_group)
|
|
203
|
+
reporter.example_finished(example, @pending_error)
|
|
204
|
+
|
|
205
|
+
@deprecated_formatter.example_passed_to_method.should == example
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it "should pass the correct pending error message to the formatter" do
|
|
209
|
+
example = ExampleGroup.new("example")
|
|
210
|
+
reporter.add_example_group(example_group)
|
|
211
|
+
reporter.example_finished(example, @pending_error)
|
|
212
|
+
|
|
213
|
+
@deprecated_formatter.message_passed_to_method.should == @pending_error.message
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it "should raise a deprecation warning" do
|
|
217
|
+
Kernel.should_receive(:warn).with(Spec::Runner::Reporter::EXAMPLE_PENDING_DEPRECATION_WARNING)
|
|
218
|
+
|
|
219
|
+
example = ExampleGroup.new("example")
|
|
220
|
+
reporter.add_example_group(example_group)
|
|
221
|
+
reporter.example_finished(example, @pending_error)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
178
224
|
end
|
|
179
225
|
|
|
180
226
|
describe Reporter, "reporting one pending example (PendingExampleFixedError)" do
|
|
@@ -3,15 +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 =
|
|
7
|
-
|
|
6
|
+
@original_rspec_options = Spec::Runner.options
|
|
7
|
+
Spec::Runner.use ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
|
|
8
8
|
@parser = Spec::Runner::SpecParser.new
|
|
9
9
|
@file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
|
|
10
10
|
load file
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
after do
|
|
14
|
-
|
|
13
|
+
after(:each) do
|
|
14
|
+
Spec::Runner.use @original_rspec_options
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it "should find spec name for 'specify' at same line" do
|
|
@@ -22,11 +22,8 @@ module Spec
|
|
|
22
22
|
|
|
23
23
|
it "should parse a story file" do
|
|
24
24
|
runner = PlainTextStoryRunner.new("path")
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}.expect {
|
|
28
|
-
@parser.should_receive(:parse).with(["this", "and that"])
|
|
29
|
-
}
|
|
25
|
+
@parser.should_receive(:parse).with(["this", "and that"])
|
|
26
|
+
runner.run(mock('runner'))
|
|
30
27
|
end
|
|
31
28
|
|
|
32
29
|
it "should build up a mediator with its own steps and the singleton story_runner" do
|
|
@@ -126,6 +126,16 @@ module Spec
|
|
|
126
126
|
@runner.stories.first[:foo].should == :bar
|
|
127
127
|
end
|
|
128
128
|
|
|
129
|
+
it "should description" do
|
|
130
|
+
@mediator = StoryMediator.new @step_group, @runner, :foo => :bar
|
|
131
|
+
@mediator.create_story "title", "narrative"
|
|
132
|
+
@mediator.create_scenario "scenario"
|
|
133
|
+
@mediator.create_given "something"
|
|
134
|
+
given = @mediator.last_step
|
|
135
|
+
@mediator.add_to_last " else"
|
|
136
|
+
given.name.should == "something else"
|
|
137
|
+
end
|
|
138
|
+
|
|
129
139
|
end
|
|
130
140
|
|
|
131
141
|
end
|
|
@@ -244,9 +244,15 @@ module Spec
|
|
|
244
244
|
@parser.parse(["Story: s", "Scenario: s", "Given first", "Then: and there"])
|
|
245
245
|
end
|
|
246
246
|
|
|
247
|
-
it "should ignore
|
|
248
|
-
@parser.parse(["Story: s", "Scenario: s", "Given first", "this is ignored"])
|
|
247
|
+
it "should ignore lines beginning with '#'" do
|
|
248
|
+
@parser.parse(["Story: s", "Scenario: s", "Given first", "#this is ignored"])
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
it "should not ignore lines beginning with non-keywords" do
|
|
252
|
+
@story_mediator.should_receive(:add_to_last).with("\nthis is not ignored")
|
|
253
|
+
@parser.parse(["Story: s", "Scenario: s", "Given first", "this is not ignored"])
|
|
249
254
|
end
|
|
255
|
+
|
|
250
256
|
end
|
|
251
257
|
|
|
252
258
|
describe StoryParser, "in When state" do
|
|
@@ -309,8 +315,13 @@ module Spec
|
|
|
309
315
|
@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: and there"])
|
|
310
316
|
end
|
|
311
317
|
|
|
312
|
-
it "should ignore
|
|
313
|
-
@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "this is ignored"])
|
|
318
|
+
it "should ignore lines beginning with '#'" do
|
|
319
|
+
@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "#this is ignored"])
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
it "should not ignore lines beginning with non-keywords" do
|
|
323
|
+
@story_mediator.should_receive(:add_to_last).with("\nthis is not ignored")
|
|
324
|
+
@parser.parse(["Story: s", "Scenario: s", "Given: first", "When else", "this is not ignored"])
|
|
314
325
|
end
|
|
315
326
|
end
|
|
316
327
|
|
|
@@ -375,8 +386,14 @@ module Spec
|
|
|
375
386
|
@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "And: ever"])
|
|
376
387
|
end
|
|
377
388
|
|
|
378
|
-
|
|
379
|
-
|
|
389
|
+
|
|
390
|
+
it "should ignore lines beginning with '#'" do
|
|
391
|
+
@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "#this is ignored"])
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
it "should not ignore lines beginning with non-keywords" do
|
|
395
|
+
@story_mediator.should_receive(:add_to_last).with("\nthis is not ignored")
|
|
396
|
+
@parser.parse(["Story: s", "Scenario: s", "Given: first", "When else", "Then what", "this is not ignored"])
|
|
380
397
|
end
|
|
381
398
|
end
|
|
382
399
|
end
|
|
@@ -42,6 +42,18 @@ module Spec
|
|
|
42
42
|
end.should raise_error(Spec::Example::ExamplePendingError, /Unimplemented/)
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
it "should create a default step with it's name stripped" do
|
|
46
|
+
# given
|
|
47
|
+
step_mother = StepMother.new
|
|
48
|
+
|
|
49
|
+
# when
|
|
50
|
+
step = step_mother.find(:given, "doesn't exist\n\n")
|
|
51
|
+
|
|
52
|
+
# then
|
|
53
|
+
step.should be_an_instance_of(Step)
|
|
54
|
+
step.name.should == "doesn't exist"
|
|
55
|
+
end
|
|
56
|
+
|
|
45
57
|
it 'should clear itself' do
|
|
46
58
|
# given
|
|
47
59
|
step_mother = StepMother.new
|
|
@@ -2,12 +2,17 @@ require File.dirname(__FILE__) + '/story_helper'
|
|
|
2
2
|
|
|
3
3
|
module Spec
|
|
4
4
|
module Story
|
|
5
|
-
describe Step, "matching" do
|
|
5
|
+
describe Step, "#matching" do
|
|
6
6
|
it "should match a text string" do
|
|
7
7
|
step = Step.new("this text") {}
|
|
8
8
|
step.matches?("this text").should be_true
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
+
it "should match a text string that has additional line returns" do
|
|
12
|
+
step = Step.new("this text") {}
|
|
13
|
+
step.matches?("this text\n\n").should be_true
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
it "should not match a text string that does not start the same" do
|
|
12
17
|
step = Step.new("this text") {}
|
|
13
18
|
step.matches?("Xthis text").should be_false
|
|
@@ -32,6 +37,11 @@ module Spec
|
|
|
32
37
|
step = Step.new("1 $one 2 $two 3 $three 4") {}
|
|
33
38
|
step.matches?("1 a 2 b 3 c 4").should be_true
|
|
34
39
|
end
|
|
40
|
+
|
|
41
|
+
it "should match a text string with two params sharing a prefix" do
|
|
42
|
+
step = Step.new("I am cool $n times out of $n_total")
|
|
43
|
+
step.matches?("I am cool 3 times out of 7").should be_true
|
|
44
|
+
end
|
|
35
45
|
|
|
36
46
|
it "should match a text string with a param at the beginning" do
|
|
37
47
|
step = Step.new("$one 2 3") {}
|
|
@@ -88,6 +98,11 @@ module Spec
|
|
|
88
98
|
step.matches?("before () after").should be_true
|
|
89
99
|
end
|
|
90
100
|
|
|
101
|
+
it "should not get bogged down by regular expression special characters in strings" do
|
|
102
|
+
step = Step.new("These characters should work ? ( ) [ ] { } ^ !") {}
|
|
103
|
+
step.matches?("These characters should work ? ( ) [ ] { } ^ !").should be_true
|
|
104
|
+
end
|
|
105
|
+
|
|
91
106
|
it "should match any option of an alteration" do
|
|
92
107
|
step = Step.new(/(he|she) is cool/) {}
|
|
93
108
|
step.matches?("he is cool").should be_true
|
|
@@ -121,13 +136,51 @@ module Spec
|
|
|
121
136
|
step = Step.new(/show me the \$$money/) {}
|
|
122
137
|
step.matches?("show me the $123").should be_true
|
|
123
138
|
end
|
|
139
|
+
|
|
140
|
+
it "should match a multiline regex" do
|
|
141
|
+
step = Step.new(/.*should have text.$text/) {}
|
|
142
|
+
step.matches?(<<TEXT).should be_true
|
|
143
|
+
should have text
|
|
144
|
+
this is the text
|
|
145
|
+
and so is this
|
|
146
|
+
TEXT
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it "should match the beginning of the string, not the line" do
|
|
150
|
+
step = Step.new(/should have text/) {}
|
|
151
|
+
step.matches?(<<TEXT).should be_false
|
|
152
|
+
whatever
|
|
153
|
+
should have text
|
|
154
|
+
TEXT
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should match the end of the string, not the line" do
|
|
158
|
+
step = Step.new(/should have text/) {}
|
|
159
|
+
step.matches?(<<TEXT).should be_false
|
|
160
|
+
should have text
|
|
161
|
+
whatever
|
|
162
|
+
TEXT
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
describe Step, "#parse_args" do
|
|
167
|
+
it "should return an empty array for a text string with no parameters" do
|
|
168
|
+
step = Step.new("this text") {}
|
|
169
|
+
step.parse_args("this text").should == []
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should return an empty array for a text string with additional line returns and no parameters" do
|
|
173
|
+
step = Step.new("this text") {}
|
|
174
|
+
step.parse_args("this text\n\n").should == []
|
|
175
|
+
end
|
|
124
176
|
end
|
|
125
177
|
|
|
126
178
|
describe Step do
|
|
127
|
-
it "should
|
|
179
|
+
it "should be pending with no block" do
|
|
180
|
+
step = Step.new("foo")
|
|
128
181
|
lambda {
|
|
129
|
-
step
|
|
130
|
-
}.should raise_error
|
|
182
|
+
step.perform(Object.new)
|
|
183
|
+
}.should raise_error(Spec::Example::ExamplePendingError, "Not Yet Implemented")
|
|
131
184
|
end
|
|
132
185
|
|
|
133
186
|
it "should perform itself on an object" do
|