rspec 1.1.8 → 1.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +30 -3
- data/License.txt +22 -0
- data/Manifest.txt +3 -3
- data/README.txt +1 -25
- data/Rakefile +4 -2
- data/TODO.txt +5 -4
- data/bin/autospec +1 -1
- data/examples/pure/shared_example_group_example.rb +2 -2
- data/lib/autotest/rspec.rb +1 -1
- data/lib/spec.rb +5 -1
- data/lib/spec/example.rb +1 -1
- data/lib/spec/example/before_and_after_hooks.rb +93 -0
- data/lib/spec/example/configuration.rb +10 -1
- data/lib/spec/example/example_group.rb +2 -1
- data/lib/spec/example/example_group_factory.rb +18 -1
- data/lib/spec/example/example_group_methods.rb +45 -123
- data/lib/spec/example/example_methods.rb +9 -6
- data/lib/spec/example/shared_example_group.rb +6 -12
- data/lib/spec/extensions/main.rb +1 -1
- data/lib/spec/interop/test/unit/testcase.rb +1 -1
- data/lib/spec/mocks/error_generator.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +19 -4
- data/lib/spec/mocks/methods.rb +2 -2
- data/lib/spec/mocks/proxy.rb +4 -5
- data/lib/spec/runner.rb +3 -4
- data/lib/spec/runner/formatter/nested_text_formatter.rb +3 -3
- data/lib/spec/runner/option_parser.rb +23 -22
- data/lib/spec/version.rb +1 -1
- data/rspec.gemspec +19 -8
- data/spec/autotest/rspec_spec.rb +5 -1
- data/spec/spec/example/configuration_spec.rb +229 -215
- data/spec/spec/example/example_group_class_definition_spec.rb +9 -9
- data/spec/spec/example/example_group_factory_spec.rb +48 -27
- data/spec/spec/example/example_group_methods_spec.rb +436 -426
- data/spec/spec/example/example_group_spec.rb +459 -500
- data/spec/spec/example/example_methods_spec.rb +92 -86
- data/spec/spec/example/shared_example_group_spec.rb +219 -203
- data/spec/spec/extensions/main_spec.rb +23 -23
- data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +15 -8
- data/spec/spec/mocks/mock_spec.rb +12 -2
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +0 -1
- data/spec/spec/mocks/partial_mock_spec.rb +10 -5
- data/spec/spec/package/bin_spec_spec.rb +8 -0
- data/spec/spec/runner/command_line_spec.rb +101 -100
- data/spec/spec/runner/drb_command_line_spec.rb +0 -2
- data/spec/spec/runner/formatter/html_formatter_spec.rb +1 -4
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +230 -245
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +2 -3
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +110 -109
- data/spec/spec/runner/option_parser_spec.rb +18 -6
- data/spec/spec_helper.rb +26 -5
- data/stories/mock_framework_integration/use_flexmock.story +1 -1
- metadata +38 -7
- data/lib/spec/example/module_inclusion_warnings.rb +0 -38
- data/spec/spec/example/example_group/described_module_spec.rb +0 -20
- data/spec/spec/example/example_group/warning_messages_spec.rb +0 -76
@@ -3,7 +3,6 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
3
3
|
module Spec
|
4
4
|
module Extensions
|
5
5
|
describe Main do
|
6
|
-
include SandboxedOptions
|
7
6
|
before(:each) do
|
8
7
|
@main = Class.new do; include Main; end
|
9
8
|
end
|
@@ -11,41 +10,42 @@ module Spec
|
|
11
10
|
after(:each) do
|
12
11
|
$rspec_story_steps = @original_rspec_story_steps
|
13
12
|
end
|
13
|
+
|
14
|
+
[:describe, :context].each do |method|
|
15
|
+
describe "##{method}" do
|
16
|
+
specify {@main.should respond_to(method)}
|
14
17
|
|
15
|
-
|
16
|
-
|
18
|
+
it "should raise when no block is given to #{method}" do
|
19
|
+
lambda { @main.__send__ method, "foo" }.should raise_error(ArgumentError)
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
it "should raise when no description is given to #{method}" do
|
23
|
+
lambda { @main.__send__ method do; end }.should raise_error(ArgumentError)
|
24
|
+
end
|
21
25
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
it "should registered ExampleGroups by default" do
|
27
|
-
example_group = @main.describe("The ExampleGroup") do end
|
28
|
-
Spec::Runner.options.example_groups.should include(example_group)
|
29
|
-
end
|
26
|
+
it "should run registered ExampleGroups" do
|
27
|
+
example_group = @main.__send__ method, "The ExampleGroup" do end
|
28
|
+
Spec::Runner.options.example_groups.should include(example_group)
|
29
|
+
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
it "should not run unregistered ExampleGroups" do
|
32
|
+
example_group = @main.__send__ method, "The ExampleGroup" do unregister; end
|
33
|
+
Spec::Runner.options.example_groups.should_not include(example_group)
|
34
|
+
end
|
34
35
|
end
|
35
|
-
|
36
|
-
Spec::Runner.options.example_groups.should_not include(example_group)
|
37
36
|
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
describe "#share_examples_for" do
|
39
|
+
it "should create a shared ExampleGroup" do
|
40
|
+
group = @main.share_examples_for "all things" do end
|
41
|
+
group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
|
42
|
+
end
|
42
43
|
end
|
43
44
|
|
44
45
|
describe "#share_as" do
|
45
46
|
before(:each) do
|
46
47
|
$share_as_examples_example_module_number ||= 1
|
47
48
|
$share_as_examples_example_module_number += 1
|
48
|
-
t = Time.new.to_i
|
49
49
|
@group_name = "Group#{$share_as_examples_example_module_number}"
|
50
50
|
end
|
51
51
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
|
2
|
+
$:.unshift rspec_lib unless $:.include?(rspec_lib)
|
3
|
+
require 'test/unit'
|
4
|
+
require 'spec'
|
5
|
+
|
6
|
+
describe "options hash" do
|
7
|
+
describe "#options" do
|
8
|
+
it "should expose the options hash" do
|
9
|
+
group = describe("group", :this => 'hash') {}
|
10
|
+
group.options[:this].should == 'hash'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -3,43 +3,50 @@ require File.dirname(__FILE__) + '/test_unit_spec_helper'
|
|
3
3
|
describe "ExampleGroup with test/unit/interop" do
|
4
4
|
include TestUnitSpecHelper
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
def resources
|
7
|
+
File.dirname(__FILE__) + "/resources"
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "with passing examples" do
|
11
11
|
it "should output 0 failures" do
|
12
|
-
output = ruby("#{
|
12
|
+
output = ruby("#{resources}/spec_that_passes.rb")
|
13
13
|
output.should include("1 example, 0 failures")
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should return an exit code of 0" do
|
17
|
-
ruby("#{
|
17
|
+
ruby("#{resources}/spec_that_passes.rb")
|
18
18
|
$?.should == 0
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
describe "with failing examples" do
|
23
23
|
it "should output 1 failure" do
|
24
|
-
output = ruby("#{
|
24
|
+
output = ruby("#{resources}/spec_that_fails.rb")
|
25
25
|
output.should include("1 example, 1 failure")
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should return an exit code of 256" do
|
29
|
-
ruby("#{
|
29
|
+
ruby("#{resources}/spec_that_fails.rb")
|
30
30
|
$?.should == 256
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
describe "with example that raises an error" do
|
35
35
|
it "should output 1 failure" do
|
36
|
-
output = ruby("#{
|
36
|
+
output = ruby("#{resources}/spec_with_errors.rb")
|
37
37
|
output.should include("1 example, 1 failure")
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should return an exit code of 256" do
|
41
|
-
ruby("#{
|
41
|
+
ruby("#{resources}/spec_with_errors.rb")
|
42
42
|
$?.should == 256
|
43
43
|
end
|
44
44
|
end
|
45
|
+
|
46
|
+
describe "options hash" do
|
47
|
+
it "should be exposed" do
|
48
|
+
output = ruby("#{resources}/spec_with_options_hash.rb")
|
49
|
+
output.should include("1 example, 0 failures")
|
50
|
+
end
|
51
|
+
end
|
45
52
|
end
|
@@ -451,11 +451,21 @@ module Spec
|
|
451
451
|
it "should not mess with the stub's yielded values when also mocked" do
|
452
452
|
@mock.stub!(:yield_back).and_yield(:stub_value)
|
453
453
|
@mock.should_receive(:yield_back).and_yield(:mock_value)
|
454
|
-
@mock.yield_back{|v| v
|
455
|
-
@mock.yield_back{|v| v
|
454
|
+
@mock.yield_back{|v| v.should == :mock_value }
|
455
|
+
@mock.yield_back{|v| v.should == :stub_value }
|
456
456
|
@mock.rspec_verify
|
457
457
|
end
|
458
458
|
|
459
|
+
it "should yield multiple values after a similar stub" do
|
460
|
+
File.stub!(:open).and_yield(:stub_value)
|
461
|
+
File.should_receive(:open).and_yield(:first_call).and_yield(:second_call)
|
462
|
+
yielded_args = []
|
463
|
+
File.open {|v| yielded_args << v }
|
464
|
+
yielded_args.should == [:first_call, :second_call]
|
465
|
+
File.open {|v| v.should == :stub_value }
|
466
|
+
File.rspec_verify
|
467
|
+
end
|
468
|
+
|
459
469
|
it "should assign stub return values" do
|
460
470
|
mock = Mock.new('name', :message => :response)
|
461
471
|
mock.message.should == :response
|
@@ -11,7 +11,14 @@ module Spec
|
|
11
11
|
@object.should_receive(:foo)
|
12
12
|
lambda do
|
13
13
|
@object.rspec_verify
|
14
|
-
end.should raise_error(Spec::Mocks::MockExpectationError,
|
14
|
+
end.should raise_error(Spec::Mocks::MockExpectationError, /<Object:.*> expected/)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should name the class in the failure message when expectation is on class" do
|
18
|
+
Object.should_receive(:foo)
|
19
|
+
lambda do
|
20
|
+
Object.rspec_verify
|
21
|
+
end.should raise_error(Spec::Mocks::MockExpectationError, /<Object \(class\)>/)
|
15
22
|
end
|
16
23
|
|
17
24
|
it "should not conflict with @options in the object" do
|
@@ -21,11 +28,10 @@ module Spec
|
|
21
28
|
end
|
22
29
|
|
23
30
|
it "should_not_receive should mock out the method" do
|
24
|
-
pending("example raises the expected error, yet fails")
|
25
31
|
@object.should_not_receive(:fuhbar)
|
26
32
|
lambda do
|
27
33
|
@object.fuhbar
|
28
|
-
end.should raise_error(MockExpectationError,
|
34
|
+
end.should raise_error(MockExpectationError, /<Object:.*> expected :fuhbar with \(no args\) 0 times/)
|
29
35
|
end
|
30
36
|
|
31
37
|
it "should_not_receive should return a negative message expectation" do
|
@@ -66,7 +72,6 @@ module Spec
|
|
66
72
|
end
|
67
73
|
|
68
74
|
it "should_not_receive should also take a String argument" do
|
69
|
-
pending("example raises the expected error, yet fails")
|
70
75
|
@object.should_not_receive('foobar')
|
71
76
|
lambda do
|
72
77
|
@object.foobar
|
@@ -79,7 +84,7 @@ module Spec
|
|
79
84
|
@this_will_resolve_to_nil.should_receive(:foobar)
|
80
85
|
lambda do
|
81
86
|
@this_will_resolve_to_nil.rspec_verify
|
82
|
-
end.should raise_error(Spec::Mocks::MockExpectationError, /
|
87
|
+
end.should raise_error(Spec::Mocks::MockExpectationError, /nil expected :foobar with/)
|
83
88
|
end
|
84
89
|
end
|
85
90
|
|
@@ -11,4 +11,12 @@ describe "The bin/spec script" do
|
|
11
11
|
output = ruby "-w #{spec_path} --help 2>&1"
|
12
12
|
output.should_not =~ /warning/n
|
13
13
|
end
|
14
|
+
|
15
|
+
it "should show the help w/ no args" do
|
16
|
+
pending "Hangs on JRuby" if PLATFORM =~ /java/
|
17
|
+
spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec"
|
18
|
+
|
19
|
+
output = ruby "-w #{spec_path} 2>&1"
|
20
|
+
output.should =~ /^Usage: spec/
|
21
|
+
end
|
14
22
|
end
|
@@ -3,137 +3,138 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
3
3
|
module Spec
|
4
4
|
module Runner
|
5
5
|
describe CommandLine, ".run" do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
with_sandboxed_options do
|
7
|
+
attr_reader :err, :out
|
8
|
+
before do
|
9
|
+
@err = options.error_stream
|
10
|
+
@out = options.output_stream
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
it "should run directory" do
|
14
|
+
file = File.dirname(__FILE__) + '/../../../examples/pure'
|
15
|
+
run_with(OptionParser.parse([file,"-p","**/*.rb"], @err, @out))
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
@out.rewind
|
18
|
+
@out.read.should =~ /\d+ examples, 0 failures, 3 pending/n
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
it "should run file" do
|
22
|
+
file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb'
|
23
|
+
run_with(OptionParser.parse([file], @err, @out))
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
@out.rewind
|
26
|
+
@out.read.should =~ /2 examples, 1 failure/n
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
it "should raise when file does not exist" do
|
30
|
+
file = File.dirname(__FILE__) + '/doesntexist'
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
lambda {
|
33
|
+
Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
|
34
|
+
}.should raise_error
|
35
|
+
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
it "should return true when in --generate-options mode" do
|
38
|
+
# NOTE - this used to say /dev/null but jruby hangs on that for some reason
|
39
|
+
Spec::Runner::CommandLine.run(
|
40
|
+
OptionParser.parse(['--generate-options', '/tmp/foo'], @err, @out)
|
41
|
+
).should be_true
|
42
|
+
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
it "should dump even if Interrupt exception is occurred" do
|
45
|
+
example_group = Class.new(::Spec::Example::ExampleGroup) do
|
46
|
+
describe("example_group")
|
47
|
+
it "no error" do
|
48
|
+
end
|
49
49
|
|
50
|
-
|
51
|
-
|
50
|
+
it "should interrupt" do
|
51
|
+
raise Interrupt, "I'm interrupting"
|
52
|
+
end
|
52
53
|
end
|
53
|
-
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
options = ::Spec::Runner::Options.new(@err, @out)
|
56
|
+
::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
|
57
|
+
options.reporter.should_receive(:dump)
|
58
|
+
options.add_example_group(example_group)
|
59
59
|
|
60
|
-
|
61
|
-
|
60
|
+
Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
|
61
|
+
end
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
it "should heckle when options have heckle_runner" do
|
64
|
+
example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
|
65
|
+
it "no error" do
|
66
|
+
end
|
66
67
|
end
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
options.add_example_group example_group
|
68
|
+
options = ::Spec::Runner::Options.new(@err, @out)
|
69
|
+
::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
|
70
|
+
options.add_example_group example_group
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
heckle_runner = mock("heckle_runner")
|
73
|
+
heckle_runner.should_receive(:heckle_with)
|
74
|
+
$rspec_mocks.__send__(:mocks).delete(heckle_runner)
|
75
75
|
|
76
|
-
|
77
|
-
|
76
|
+
options.heckle_runner = heckle_runner
|
77
|
+
options.add_example_group(example_group)
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
|
80
|
+
heckle_runner.rspec_verify
|
81
|
+
end
|
82
82
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
it "should run examples backwards if options.reverse is true" do
|
84
|
+
options = ::Spec::Runner::Options.new(@err, @out)
|
85
|
+
::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
|
86
|
+
options.reverse = true
|
87
87
|
|
88
|
-
|
89
|
-
|
88
|
+
b1 = Class.new(Spec::Example::ExampleGroup)
|
89
|
+
b2 = Class.new(Spec::Example::ExampleGroup)
|
90
90
|
|
91
|
-
|
92
|
-
|
91
|
+
b2.should_receive(:run).ordered
|
92
|
+
b1.should_receive(:run).ordered
|
93
93
|
|
94
|
-
|
95
|
-
|
94
|
+
options.add_example_group(b1)
|
95
|
+
options.add_example_group(b2)
|
96
96
|
|
97
|
-
|
98
|
-
|
97
|
+
Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
|
98
|
+
end
|
99
99
|
|
100
|
-
|
101
|
-
|
102
|
-
|
100
|
+
it "should pass its ExampleGroup to the reporter" do
|
101
|
+
example_group = describe("example_group") do
|
102
|
+
it "should" do
|
103
|
+
end
|
103
104
|
end
|
104
|
-
|
105
|
-
|
106
|
-
options.add_example_group(example_group)
|
105
|
+
options = ::Spec::Runner::Options.new(@err, @out)
|
106
|
+
options.add_example_group(example_group)
|
107
107
|
|
108
|
-
|
109
|
-
|
108
|
+
::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
|
109
|
+
options.reporter.should_receive(:add_example_group).with(example_group)
|
110
110
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
it "runs only selected Examples when options.examples is set" do
|
115
|
-
options = ::Spec::Runner::Options.new(@err, @out)
|
116
|
-
::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
|
111
|
+
Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
|
112
|
+
end
|
117
113
|
|
118
|
-
options.examples
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
114
|
+
it "runs only selected Examples when options.examples is set" do
|
115
|
+
options = ::Spec::Runner::Options.new(@err, @out)
|
116
|
+
::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
|
117
|
+
|
118
|
+
options.examples << "example group expected example"
|
119
|
+
expected_example_was_run = false
|
120
|
+
unexpected_example_was_run = false
|
121
|
+
example_group = describe("example group") do
|
122
|
+
it "expected example" do
|
123
|
+
expected_example_was_run = true
|
124
|
+
end
|
125
|
+
it "unexpected example" do
|
126
|
+
unexpected_example_was_run = true
|
127
|
+
end
|
124
128
|
end
|
125
|
-
it "should not" do
|
126
|
-
should_not_has_run = true
|
127
|
-
end
|
128
|
-
end
|
129
129
|
|
130
|
-
|
130
|
+
options.reporter.should_receive(:add_example_group).with(example_group)
|
131
131
|
|
132
|
-
|
133
|
-
|
132
|
+
options.add_example_group example_group
|
133
|
+
run_with(options)
|
134
134
|
|
135
|
-
|
136
|
-
|
135
|
+
expected_example_was_run.should be_true
|
136
|
+
unexpected_example_was_run.should be_false
|
137
|
+
end
|
137
138
|
end
|
138
139
|
end
|
139
140
|
end
|