dchelimsky-rspec 1.1.12 → 1.1.99.1
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/History.txt +35 -0
- data/License.txt +1 -1
- data/Manifest.txt +22 -73
- data/README.txt +2 -2
- data/Rakefile +32 -7
- data/TODO.txt +9 -4
- data/bin/spec +1 -1
- data/cucumber.yml +2 -0
- data/examples/failing/spec_helper.rb +1 -1
- data/examples/passing/filtered_formatter.rb +18 -0
- data/examples/passing/filtered_formatter_example.rb +31 -0
- data/examples/passing/spec_helper.rb +1 -1
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +17 -18
- data/features/before_and_after_blocks/before_and_after_blocks.feature +4 -4
- data/features/example_groups/autogenerated_docstrings.feature +2 -2
- data/features/example_groups/example_group_with_should_methods.feature +1 -1
- data/features/example_groups/nested_groups.feature +1 -1
- data/features/interop/examples_and_tests_together.feature +1 -1
- data/features/interop/test_but_not_test_unit.feature +1 -1
- data/features/interop/test_case_with_should_methods.feature +1 -1
- data/features/mock_framework_integration/use_flexmock.feature +22 -4
- data/features/mock_framework_integration/use_mocha.feature +27 -0
- data/features/mock_framework_integration/use_rr.feature +27 -0
- data/features/step_definitions/running_rspec.rb +5 -3
- data/features/support/env.rb +1 -1
- data/features-pending/cli/conditional_exclusion.feature +39 -0
- data/lib/{adapters → spec/adapters}/mock_frameworks/flexmock.rb +1 -0
- data/lib/{adapters → spec/adapters}/mock_frameworks/mocha.rb +1 -0
- data/lib/{adapters → spec/adapters}/mock_frameworks/rr.rb +1 -0
- data/lib/{adapters → spec/adapters}/mock_frameworks/rspec.rb +0 -1
- data/lib/spec/autorun.rb +3 -0
- data/lib/spec/example/before_and_after_hooks.rb +5 -20
- data/lib/spec/example/example_description.rb +15 -0
- data/lib/spec/example/example_group.rb +0 -15
- data/lib/spec/example/example_group_factory.rb +34 -46
- data/lib/spec/example/example_group_hierarchy.rb +53 -0
- data/lib/spec/example/example_group_methods.rb +96 -211
- data/lib/spec/example/example_methods.rb +62 -81
- data/lib/spec/example/module_reopening_fix.rb +23 -1
- data/lib/spec/example/predicate_matchers.rb +47 -0
- data/lib/spec/example/subject.rb +91 -0
- data/lib/spec/example.rb +4 -0
- data/lib/spec/expectations/extensions.rb +0 -1
- data/lib/spec/expectations/handler.rb +6 -1
- data/lib/spec/expectations.rb +1 -1
- data/lib/spec/interop/test/unit/testcase.rb +5 -22
- data/lib/spec/interop/test.rb +1 -0
- data/lib/spec/matchers/be.rb +2 -7
- data/lib/spec/matchers/be_close.rb +20 -5
- data/lib/spec/matchers/change.rb +5 -3
- data/lib/spec/matchers/eql.rb +24 -6
- data/lib/spec/matchers/equal.rb +24 -6
- data/lib/spec/matchers/exist.rb +21 -5
- data/lib/spec/matchers/generated_descriptions.rb +2 -2
- data/lib/spec/matchers/has.rb +28 -11
- data/lib/spec/matchers/match.rb +25 -7
- data/lib/spec/matchers/match_array.rb +1 -1
- data/lib/spec/matchers/method_missing.rb +2 -2
- data/lib/spec/matchers/operator_matcher.rb +12 -5
- data/lib/spec/matchers/raise_error.rb +1 -1
- data/lib/spec/matchers/respond_to.rb +1 -1
- data/lib/spec/matchers/satisfy.rb +5 -5
- data/lib/spec/matchers/throw_symbol.rb +1 -3
- data/lib/spec/mocks/argument_expectation.rb +1 -1
- data/lib/spec/mocks/argument_matchers.rb +233 -0
- data/lib/spec/mocks/error_generator.rb +2 -6
- data/lib/spec/mocks/message_expectation.rb +3 -11
- data/lib/spec/mocks/mock.rb +1 -1
- data/lib/spec/mocks/proxy.rb +5 -1
- data/lib/spec/runner/configuration.rb +3 -3
- data/lib/spec/runner/drb_command_line.rb +2 -1
- data/lib/spec/runner/example_group_runner.rb +2 -1
- data/lib/spec/runner/formatter/base_text_formatter.rb +28 -17
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +3 -5
- data/lib/spec/runner/formatter/html_formatter.rb +2 -3
- data/lib/spec/runner/formatter/nested_text_formatter.rb +7 -25
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +1 -1
- data/lib/spec/runner/formatter/specdoc_formatter.rb +1 -7
- data/lib/spec/runner/heckle_runner_unsupported.rb +1 -1
- data/lib/spec/runner/option_parser.rb +16 -19
- data/lib/spec/runner/options.rb +28 -26
- data/lib/spec/runner/reporter.rb +8 -9
- data/lib/spec/runner.rb +6 -28
- data/lib/spec/test/unit.rb +10 -0
- data/lib/spec/version.rb +2 -2
- data/{features/support → resources}/helpers/cmdline.rb +2 -2
- data/resources/rake/verify_rcov.rake +1 -1
- data/resources/spec/example_group_with_should_methods.rb +1 -1
- data/resources/spec/simple_spec.rb +1 -1
- data/resources/test/spec_and_test_together.rb +2 -3
- data/resources/test/spec_including_test_but_not_unit.rb +1 -1
- data/resources/test/test_case_with_should_methods.rb +2 -3
- data/rspec.gemspec +5 -5
- data/spec/spec/dsl/main_spec.rb +3 -3
- data/spec/spec/example/example_group_class_definition_spec.rb +11 -14
- data/spec/spec/example/example_group_factory_spec.rb +31 -44
- data/spec/spec/example/example_group_methods_spec.rb +86 -52
- data/spec/spec/example/example_group_spec.rb +16 -75
- data/spec/spec/example/example_matcher_spec.rb +10 -10
- data/spec/spec/example/example_methods_spec.rb +101 -241
- data/spec/spec/example/nested_example_group_spec.rb +2 -2
- data/spec/spec/example/pending_module_spec.rb +1 -1
- data/spec/spec/example/shared_example_group_spec.rb +2 -2
- data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +2 -2
- data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +2 -2
- data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +2 -2
- data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +2 -2
- data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +2 -2
- data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +2 -2
- data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +2 -2
- data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +2 -2
- data/spec/spec/matchers/change_spec.rb +8 -0
- data/spec/spec/matchers/exist_spec.rb +8 -4
- data/spec/spec/matchers/handler_spec.rb +8 -1
- data/spec/spec/matchers/matcher_methods_spec.rb +1 -1
- data/spec/spec/mocks/{bug_report_496.rb → bug_report_496_spec.rb} +0 -0
- data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +1 -1
- data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
- data/spec/spec/runner/configuration_spec.rb +12 -12
- data/spec/spec/runner/formatter/base_text_formatter_spec.rb +72 -1
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +8 -8
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +4 -4
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +8 -8
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +38 -26
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +61 -53
- data/spec/spec/runner/formatter/html_formatter_spec.rb +100 -48
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +20 -34
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +8 -6
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +6 -6
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +20 -20
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +38 -26
- data/spec/spec/runner/formatter/{spec_mate_formatter_spec.rb → text_mate_formatter_spec.rb} +10 -8
- data/spec/spec/runner/heckle_runner_spec.rb +1 -1
- data/spec/spec/runner/option_parser_spec.rb +15 -13
- data/spec/spec/runner/options_spec.rb +34 -0
- data/spec/spec/runner/reporter_spec.rb +65 -61
- data/spec/spec/runner/spec_drb.opts +1 -0
- data/spec/spec/runner_spec.rb +7 -5
- data/spec/spec_helper.rb +23 -0
- metadata +25 -76
- data/examples/passing/legacy_spec.rb +0 -11
- data/features/support/helpers/story_helper.rb +0 -13
- data/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
- data/resources/spec/spec_with_flexmock.rb +0 -19
- data/spec/spec/spec_spec.rb +0 -21
@@ -8,7 +8,7 @@ module Spec
|
|
8
8
|
before(:each) do
|
9
9
|
@formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
|
10
10
|
options.formatters << formatter
|
11
|
-
@example_group = Class.new(
|
11
|
+
@example_group = Class.new(ExampleGroupDouble).describe("example_group")
|
12
12
|
class << example_group
|
13
13
|
public :include
|
14
14
|
end
|
@@ -22,7 +22,7 @@ module Spec
|
|
22
22
|
|
23
23
|
describe "#register" do
|
24
24
|
it "creates a new shared example group with the submitted args" do
|
25
|
-
block = lambda {}
|
25
|
+
block = lambda {|a|}
|
26
26
|
group = SharedExampleGroup.new("shared group") do end
|
27
27
|
Spec::Example::SharedExampleGroup.should_receive(:new).with("share me", &block).and_return(group)
|
28
28
|
Spec::Example::SharedExampleGroup.register("share me", &block)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
|
2
2
|
$:.unshift rspec_lib unless $:.include?(rspec_lib)
|
3
|
-
require '
|
4
|
-
require 'spec'
|
3
|
+
require 'spec/autorun'
|
4
|
+
require 'spec/test/unit'
|
5
5
|
|
6
6
|
describe "example group with failures" do
|
7
7
|
it "should fail" do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
|
2
2
|
$:.unshift rspec_lib unless $:.include?(rspec_lib)
|
3
|
-
require '
|
4
|
-
require 'spec'
|
3
|
+
require 'spec/autorun'
|
4
|
+
require 'spec/test/unit'
|
5
5
|
|
6
6
|
describe "example group with passing examples" do
|
7
7
|
it "should pass" do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
|
2
2
|
$:.unshift rspec_lib unless $:.include?(rspec_lib)
|
3
|
-
require '
|
4
|
-
require 'spec'
|
3
|
+
require 'spec/autorun'
|
4
|
+
require 'spec/test/unit'
|
5
5
|
|
6
6
|
describe "example group with errors" do
|
7
7
|
it "should raise errors" do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
|
2
2
|
$:.unshift rspec_lib unless $:.include?(rspec_lib)
|
3
|
-
require '
|
4
|
-
require 'spec'
|
3
|
+
require 'spec/autorun'
|
4
|
+
require 'spec/test/unit'
|
5
5
|
|
6
6
|
class TestCaseThatFails < Test::Unit::TestCase
|
7
7
|
def test_that_fails
|
@@ -1,7 +1,7 @@
|
|
1
1
|
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
|
2
2
|
$:.unshift rspec_lib unless $:.include?(rspec_lib)
|
3
|
-
require '
|
4
|
-
require 'spec'
|
3
|
+
require 'spec/autorun'
|
4
|
+
require 'spec/test/unit'
|
5
5
|
|
6
6
|
class TestCaseThatPasses < Test::Unit::TestCase
|
7
7
|
def test_that_passes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
|
2
2
|
$:.unshift rspec_lib unless $:.include?(rspec_lib)
|
3
|
-
require '
|
4
|
-
require 'spec'
|
3
|
+
require 'spec/autorun'
|
4
|
+
require 'spec/test/unit'
|
5
5
|
|
6
6
|
class TestCaseWithErrors < Test::Unit::TestCase
|
7
7
|
def test_with_error
|
@@ -20,6 +20,10 @@ describe "should change(actual, message)" do
|
|
20
20
|
lambda {}.should change(@instance, :some_value)
|
21
21
|
end.should fail_with("some_value should have changed, but is still 5")
|
22
22
|
end
|
23
|
+
|
24
|
+
it "provides a #description" do
|
25
|
+
change(@instance, :some_value).description.should == "change #some_value"
|
26
|
+
end
|
23
27
|
end
|
24
28
|
|
25
29
|
describe "should_not change(actual, message)" do
|
@@ -60,6 +64,10 @@ describe "should change { block }" do
|
|
60
64
|
lambda {}.should change do; end
|
61
65
|
end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
|
62
66
|
end
|
67
|
+
|
68
|
+
it "provides a #description" do
|
69
|
+
change { @instance.some_value }.description.should == "change #result"
|
70
|
+
end
|
63
71
|
end
|
64
72
|
|
65
73
|
describe "should_not change { block }" do
|
@@ -23,7 +23,7 @@ class SubstanceTester
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
describe "should exist
|
26
|
+
describe "should exist" do
|
27
27
|
|
28
28
|
before(:each) do
|
29
29
|
@real = Substance.new true, 'something real'
|
@@ -32,15 +32,19 @@ describe "should exist," do
|
|
32
32
|
|
33
33
|
describe "within an example group" do
|
34
34
|
|
35
|
-
it "
|
35
|
+
it "passes if target exists" do
|
36
36
|
@real.should exist
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "fails if target does not exist" do
|
40
40
|
lambda { @imaginary.should exist }.should fail
|
41
41
|
end
|
42
42
|
|
43
|
-
it "
|
43
|
+
it "describes itself" do
|
44
|
+
exist.description.should == "exists"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "passes should_not exist if target doesn't exist" do
|
44
48
|
lambda { @real.should_not exist }.should fail
|
45
49
|
end
|
46
50
|
end
|
@@ -68,7 +68,14 @@ module Spec
|
|
68
68
|
|
69
69
|
describe NegativeExpectationMatcherHandler do
|
70
70
|
describe "#handle_matcher" do
|
71
|
-
it "should ask the matcher if it
|
71
|
+
it "should ask the matcher if it doesn't match when the matcher responds to #does_not_match?" do
|
72
|
+
matcher = mock("matcher", :does_not_match? => true, :negative_failure_message => nil)
|
73
|
+
actual = Object.new
|
74
|
+
matcher.should_receive(:does_not_match?).with(actual).and_return(true)
|
75
|
+
Spec::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should ask the matcher if it matches when the matcher doesn't respond to #does_not_match?" do
|
72
79
|
matcher = mock("matcher")
|
73
80
|
actual = Object.new
|
74
81
|
matcher.stub!(:negative_failure_message)
|
@@ -58,7 +58,7 @@ This module should provide the following methods, each of which returns a Matche
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should convert have_xyz to Has(:have_xyz)" do
|
61
|
-
|
61
|
+
Has.should_receive(:new).with(:have_whatever)
|
62
62
|
have_whatever
|
63
63
|
end
|
64
64
|
end
|
File without changes
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
describe "failing MockArgumentMatchers" do
|
6
|
+
before(:each) do
|
7
|
+
@mock = mock("test mock")
|
8
|
+
@reporter = Mock.new("reporter", :null_object => true)
|
9
|
+
end
|
10
|
+
|
11
|
+
after(:each) do
|
12
|
+
@mock.rspec_reset
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should reject non boolean" do
|
16
|
+
@mock.should_receive(:random_call).with(boolean())
|
17
|
+
lambda do
|
18
|
+
@mock.random_call("false")
|
19
|
+
end.should raise_error(MockExpectationError)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should reject non numeric" do
|
23
|
+
@mock.should_receive(:random_call).with(an_instance_of(Numeric))
|
24
|
+
lambda do
|
25
|
+
@mock.random_call("1")
|
26
|
+
end.should raise_error(MockExpectationError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should reject non string" do
|
30
|
+
@mock.should_receive(:random_call).with(an_instance_of(String))
|
31
|
+
lambda do
|
32
|
+
@mock.random_call(123)
|
33
|
+
end.should raise_error(MockExpectationError)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should reject goose when expecting a duck" do
|
37
|
+
@mock.should_receive(:random_call).with(duck_type(:abs, :div))
|
38
|
+
lambda { @mock.random_call("I don't respond to :abs or :div") }.should raise_error(MockExpectationError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should fail if regexp does not match submitted string" do
|
42
|
+
@mock.should_receive(:random_call).with(/bcd/)
|
43
|
+
lambda { @mock.random_call("abc") }.should raise_error(MockExpectationError)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should fail if regexp does not match submitted regexp" do
|
47
|
+
@mock.should_receive(:random_call).with(/bcd/)
|
48
|
+
lambda { @mock.random_call(/bcde/) }.should raise_error(MockExpectationError)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should fail for a hash w/ wrong values" do
|
52
|
+
@mock.should_receive(:random_call).with(:a => "b", :c => "d")
|
53
|
+
lambda do
|
54
|
+
@mock.random_call(:a => "b", :c => "e")
|
55
|
+
end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(:a=>\"b\", :c=>\"e\"|:c=>\"e\", :a=>\"b\")\}\)/)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should fail for a hash w/ wrong keys" do
|
59
|
+
@mock.should_receive(:random_call).with(:a => "b", :c => "d")
|
60
|
+
lambda do
|
61
|
+
@mock.random_call("a" => "b", "c" => "d")
|
62
|
+
end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(\"a\"=>\"b\", \"c\"=>\"d\"|\"c\"=>\"d\", \"a\"=>\"b\")\}\)/)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should match against a Matcher" do
|
66
|
+
lambda do
|
67
|
+
@mock.should_receive(:msg).with(equal(3))
|
68
|
+
@mock.msg(37)
|
69
|
+
end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (equal 3) but received it with (37)")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should fail no_args with one arg" do
|
73
|
+
lambda do
|
74
|
+
@mock.should_receive(:msg).with(no_args)
|
75
|
+
@mock.msg(37)
|
76
|
+
end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (no args) but received it with (37)")
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should fail hash_including with missing key" do
|
80
|
+
lambda do
|
81
|
+
@mock.should_receive(:msg).with(hash_including(:a => 1))
|
82
|
+
@mock.msg({})
|
83
|
+
end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (hash_including(:a=>1)) but received it with ({})")
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should fail with block matchers" do
|
87
|
+
lambda do
|
88
|
+
@mock.should_receive(:msg).with {|arg| arg.should == :received }
|
89
|
+
@mock.msg :no_msg_for_you
|
90
|
+
end.should raise_error(Spec::Expectations::ExpectationNotMetError, /expected: :received.*\s*.*got: :no_msg_for_you/)
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -33,7 +33,7 @@ module Spec
|
|
33
33
|
describe "#allow_message_expectations_on_nil" do
|
34
34
|
|
35
35
|
it "should not effect subsequent examples" do
|
36
|
-
example_group = Class.new(
|
36
|
+
example_group = Class.new(::Spec::Example::ExampleGroupDouble)
|
37
37
|
example_group.it("when called in one example that doesn't end up setting an expectation on nil") do
|
38
38
|
allow_message_expectations_on_nil
|
39
39
|
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
describe "mock argument matchers", :shared => true do
|
6
|
+
before(:each) do
|
7
|
+
@mock = Mock.new("test mock")
|
8
|
+
Kernel.stub!(:warn)
|
9
|
+
end
|
10
|
+
|
11
|
+
after(:each) do
|
12
|
+
@mock.rspec_verify
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe Methods, "handling argument matchers" do
|
17
|
+
it_should_behave_like "mock argument matchers"
|
18
|
+
|
19
|
+
it "should accept true as boolean()" do
|
20
|
+
@mock.should_receive(:random_call).with(boolean())
|
21
|
+
@mock.random_call(true)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should accept false as boolean()" do
|
25
|
+
@mock.should_receive(:random_call).with(boolean())
|
26
|
+
@mock.random_call(false)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should accept fixnum as kind_of(Numeric)" do
|
30
|
+
@mock.should_receive(:random_call).with(kind_of(Numeric))
|
31
|
+
@mock.random_call(1)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should accept float as an_instance_of(Numeric)" do
|
35
|
+
@mock.should_receive(:random_call).with(kind_of(Numeric))
|
36
|
+
@mock.random_call(1.5)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "accepts fixnum as instance_of(Fixnum)" do
|
40
|
+
@mock.should_receive(:random_call).with(instance_of(Fixnum))
|
41
|
+
@mock.random_call(1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should NOT accept fixnum as instance_of(Numeric)" do
|
45
|
+
@mock.should_not_receive(:random_call).with(instance_of(Numeric))
|
46
|
+
@mock.random_call(1)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should NOT accept float as instance_of(Numeric)" do
|
50
|
+
@mock.should_not_receive(:random_call).with(instance_of(Numeric))
|
51
|
+
@mock.random_call(1.5)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should accept string as anything()" do
|
55
|
+
@mock.should_receive(:random_call).with("a", anything(), "c")
|
56
|
+
@mock.random_call("a", "whatever", "c")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should match duck type with one method" do
|
60
|
+
@mock.should_receive(:random_call).with(duck_type(:length))
|
61
|
+
@mock.random_call([])
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should match duck type with two methods" do
|
65
|
+
@mock.should_receive(:random_call).with(duck_type(:abs, :div))
|
66
|
+
@mock.random_call(1)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should match no args against any_args()" do
|
70
|
+
@mock.should_receive(:random_call).with(any_args)
|
71
|
+
@mock.random_call()
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should match one arg against any_args()" do
|
75
|
+
@mock.should_receive(:random_call).with(any_args)
|
76
|
+
@mock.random_call("a string")
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should match no args against no_args()" do
|
80
|
+
@mock.should_receive(:random_call).with(no_args)
|
81
|
+
@mock.random_call()
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should match hash with hash_including same hash" do
|
85
|
+
@mock.should_receive(:random_call).with(hash_including(:a => 1))
|
86
|
+
@mock.random_call(:a => 1)
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
describe Methods, "handling block matchers" do
|
92
|
+
it_should_behave_like "mock argument matchers"
|
93
|
+
|
94
|
+
it "should match arguments against RSpec expectations" do
|
95
|
+
@mock.should_receive(:random_call).with {|arg1, arg2, arr, *rest|
|
96
|
+
arg1.should == 5
|
97
|
+
arg2.should have_at_least(3).characters
|
98
|
+
arg2.should have_at_most(10).characters
|
99
|
+
arr.map {|i| i * 2}.should == [2,4,6]
|
100
|
+
rest.should == [:fee, "fi", 4]
|
101
|
+
}
|
102
|
+
@mock.random_call 5, "hello", [1,2,3], :fee, "fi", 4
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe Methods, "handling non-matcher arguments" do
|
107
|
+
|
108
|
+
before(:each) do
|
109
|
+
@mock = Mock.new("test mock")
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should match non special symbol (can be removed when deprecated symbols are removed)" do
|
113
|
+
@mock.should_receive(:random_call).with(:some_symbol)
|
114
|
+
@mock.random_call(:some_symbol)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should match string against regexp" do
|
118
|
+
@mock.should_receive(:random_call).with(/bcd/)
|
119
|
+
@mock.random_call("abcde")
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should match regexp against regexp" do
|
123
|
+
@mock.should_receive(:random_call).with(/bcd/)
|
124
|
+
@mock.random_call(/bcd/)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should match against a hash submitted and received by value" do
|
128
|
+
@mock.should_receive(:random_call).with(:a => "a", :b => "b")
|
129
|
+
@mock.random_call(:a => "a", :b => "b")
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should match against a hash submitted by reference and received by value" do
|
133
|
+
opts = {:a => "a", :b => "b"}
|
134
|
+
@mock.should_receive(:random_call).with(opts)
|
135
|
+
@mock.random_call(:a => "a", :b => "b")
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should match against a hash submitted by value and received by reference" do
|
139
|
+
opts = {:a => "a", :b => "b"}
|
140
|
+
@mock.should_receive(:random_call).with(:a => "a", :b => "b")
|
141
|
+
@mock.random_call(opts)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
@@ -7,27 +7,27 @@ module Spec
|
|
7
7
|
with_sandboxed_config do
|
8
8
|
describe "#mock_with" do
|
9
9
|
it "should default mock framework to rspec" do
|
10
|
-
config.mock_framework.should =~ /\/adapters\/mock_frameworks\/rspec$/
|
10
|
+
config.mock_framework.should =~ /\/spec\/adapters\/mock_frameworks\/rspec$/
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should set rspec mocking explicitly" do
|
14
14
|
config.mock_with(:rspec)
|
15
|
-
config.mock_framework.should =~ /\/adapters\/mock_frameworks\/rspec$/
|
15
|
+
config.mock_framework.should =~ /\/spec\/adapters\/mock_frameworks\/rspec$/
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should set mocha" do
|
19
19
|
config.mock_with(:mocha)
|
20
|
-
config.mock_framework.should =~ /\/adapters\/mock_frameworks\/mocha$/
|
20
|
+
config.mock_framework.should =~ /\/spec\/adapters\/mock_frameworks\/mocha$/
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should set flexmock" do
|
24
24
|
config.mock_with(:flexmock)
|
25
|
-
config.mock_framework.should =~ /\/adapters\/mock_frameworks\/flexmock$/
|
25
|
+
config.mock_framework.should =~ /\/spec\/adapters\/mock_frameworks\/flexmock$/
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should set rr" do
|
29
29
|
config.mock_with(:rr)
|
30
|
-
config.mock_framework.should =~ /\/adapters\/mock_frameworks\/rr$/
|
30
|
+
config.mock_framework.should =~ /\/spec\/adapters\/mock_frameworks\/rr$/
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should set an arbitrary adapter module" do
|
@@ -40,7 +40,7 @@ module Spec
|
|
40
40
|
describe "#include" do
|
41
41
|
|
42
42
|
before(:each) do
|
43
|
-
@example_group_class = Class.new(
|
43
|
+
@example_group_class = Class.new(::Spec::Example::ExampleGroupDouble) {}
|
44
44
|
Spec::Example::ExampleGroupFactory.register(:foobar, @example_group_class)
|
45
45
|
end
|
46
46
|
|
@@ -58,7 +58,7 @@ module Spec
|
|
58
58
|
|
59
59
|
it "should not include modules in a type they are not intended for" do
|
60
60
|
mod = Module.new
|
61
|
-
@other_example_group_class = Class.new(
|
61
|
+
@other_example_group_class = Class.new(::Spec::Example::ExampleGroupDouble)
|
62
62
|
Spec::Example::ExampleGroupFactory.register(:baz, @other_example_group_class)
|
63
63
|
|
64
64
|
config.include mod, :type => :foobar
|
@@ -68,7 +68,7 @@ module Spec
|
|
68
68
|
|
69
69
|
it "accepts an Array of types" do
|
70
70
|
mod = Module.new
|
71
|
-
@other_example_group_class = Class.new(
|
71
|
+
@other_example_group_class = Class.new(::Spec::Example::ExampleGroupDouble)
|
72
72
|
Spec::Example::ExampleGroupFactory.register(:baz, @other_example_group_class)
|
73
73
|
|
74
74
|
config.include mod, :type => [:foobar, :baz]
|
@@ -82,7 +82,7 @@ module Spec
|
|
82
82
|
describe "#extend" do
|
83
83
|
|
84
84
|
before(:each) do
|
85
|
-
@example_group_class = Class.new(
|
85
|
+
@example_group_class = Class.new(::Spec::Example::ExampleGroupDouble) {}
|
86
86
|
Spec::Example::ExampleGroupFactory.register(:foobar, @example_group_class)
|
87
87
|
end
|
88
88
|
|
@@ -99,7 +99,7 @@ module Spec
|
|
99
99
|
end
|
100
100
|
|
101
101
|
it "should not extend non-specified groups" do
|
102
|
-
@other_example_group_class = Class.new(
|
102
|
+
@other_example_group_class = Class.new(::Spec::Example::ExampleGroupDouble)
|
103
103
|
Spec::Example::ExampleGroupFactory.register(:baz, @other_example_group_class)
|
104
104
|
|
105
105
|
mod = Module.new
|
@@ -114,9 +114,9 @@ module Spec
|
|
114
114
|
describe "ordering methods: " do
|
115
115
|
|
116
116
|
before(:each) do
|
117
|
-
@special_example_group = Class.new(
|
117
|
+
@special_example_group = Class.new(::Spec::Example::ExampleGroupDouble).describe("special_example_group")
|
118
118
|
@special_child_example_group = Class.new(@special_example_group).describe("special_child_example_group")
|
119
|
-
@nonspecial_example_group = Class.new(
|
119
|
+
@nonspecial_example_group = Class.new(::Spec::Example::ExampleGroupDouble).describe("nonspecial_example_group")
|
120
120
|
Spec::Example::ExampleGroupFactory.register(:special, @special_example_group)
|
121
121
|
Spec::Example::ExampleGroupFactory.register(:special_child, @special_child_example_group)
|
122
122
|
Spec::Example::ExampleGroupFactory.register(:non_special, @nonspecial_example_group)
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
2
|
require 'spec/runner/formatter/base_text_formatter'
|
3
|
-
require 'fileutils'
|
4
3
|
|
5
4
|
module Spec
|
6
5
|
module Runner
|
@@ -16,7 +15,79 @@ module Spec
|
|
16
15
|
File.stub!(:open)
|
17
16
|
BaseTextFormatter.new({},"#{@sandbox}/temp.rb")
|
18
17
|
end
|
18
|
+
|
19
|
+
context "(deprecations)" do
|
20
|
+
before(:each) do
|
21
|
+
Kernel.stub!(:warn)
|
22
|
+
@io = StringIO.new
|
23
|
+
@options = mock('options')
|
24
|
+
@options.stub!(:dry_run).and_return(false)
|
25
|
+
@options.stub!(:colour).and_return(false)
|
26
|
+
@formatter = Class.new(BaseTextFormatter) do
|
27
|
+
def method_that_class_magenta(message)
|
28
|
+
magenta(message)
|
29
|
+
end
|
30
|
+
def method_that_class_colourise(message, failure)
|
31
|
+
colourise(message, failure)
|
32
|
+
end
|
33
|
+
end.new(@options, @io)
|
34
|
+
@failure = stub('failure', :pending_fixed? => false)
|
35
|
+
end
|
36
|
+
|
37
|
+
context "#colourise" do
|
38
|
+
it "warns when subclasses call colourise" do
|
39
|
+
Kernel.should_receive(:warn).with(/DEPRECATED/)
|
40
|
+
@formatter.method_that_class_colourise('this message', @failure)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "delegates to colorize_failure" do
|
44
|
+
@formatter.should_receive(:colorize_failure).with('this message', @failure)
|
45
|
+
@formatter.colourise('this message', @failure)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "#magenta" do
|
50
|
+
it "warns when subclasses call magenta" do
|
51
|
+
Kernel.should_receive(:warn).with(/DEPRECATED/)
|
52
|
+
@formatter.method_that_class_magenta('this message')
|
53
|
+
end
|
19
54
|
|
55
|
+
it "delegates to red" do
|
56
|
+
@formatter.should_receive(:red).with('this message')
|
57
|
+
@formatter.method_that_class_magenta('this message')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#colour (protected)" do
|
64
|
+
before(:each) do
|
65
|
+
@original_RSPEC_COLOR = ENV['RSPEC_COLOR']
|
66
|
+
end
|
67
|
+
|
68
|
+
it "colorizes when colour? and output_to_tty? return true" do
|
69
|
+
out = StringIO.new
|
70
|
+
options = stub('options', :colour => true)
|
71
|
+
formatter = BaseTextFormatter.new(options,out)
|
72
|
+
formatter.stub!(:output_to_tty?).and_return(true)
|
73
|
+
formatter.__send__(:colour, 'foo', "\e[32m").should == "\e[32mfoo\e[0m"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "colorizes when ENV['RSPEC_COLOR'] is set even if colour? and output_to_tty? return false" do
|
77
|
+
out = StringIO.new
|
78
|
+
options = stub('options', :colour => false)
|
79
|
+
formatter = BaseTextFormatter.new(options,out)
|
80
|
+
formatter.stub!(:output_to_tty?).and_return(false)
|
81
|
+
|
82
|
+
ENV['RSPEC_COLOR'] = 'true'
|
83
|
+
|
84
|
+
formatter.__send__(:colour, 'foo', "\e[32m").should == "\e[32mfoo\e[0m"
|
85
|
+
end
|
86
|
+
|
87
|
+
after(:each) do
|
88
|
+
ENV['RSPEC_COLOR'] = @original_RSPEC_COLOR
|
89
|
+
end
|
90
|
+
end
|
20
91
|
end
|
21
92
|
end
|
22
93
|
end
|
@@ -15,11 +15,11 @@ module Spec
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should add example name for each failure" do
|
18
|
-
formatter.add_example_group(Class.new(
|
19
|
-
formatter.example_failed("e 1", nil, Spec::Runner::Reporter::Failure.new(nil, RuntimeError.new))
|
20
|
-
formatter.add_example_group(Class.new(
|
21
|
-
formatter.example_failed("e 2", nil, Spec::Runner::Reporter::Failure.new(nil, RuntimeError.new))
|
22
|
-
formatter.example_failed("e 3", nil, Spec::Runner::Reporter::Failure.new(nil, RuntimeError.new))
|
18
|
+
formatter.add_example_group(Class.new(::Spec::Example::ExampleGroupDouble).describe("b 1"))
|
19
|
+
formatter.example_failed("e 1", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
|
20
|
+
formatter.add_example_group(Class.new(::Spec::Example::ExampleGroupDouble).describe("b 2"))
|
21
|
+
formatter.example_failed("e 2", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
|
22
|
+
formatter.example_failed("e 3", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
|
23
23
|
io.string.should include("b 1")
|
24
24
|
io.string.should include("b 2")
|
25
25
|
end
|
@@ -30,13 +30,13 @@ module Spec
|
|
30
30
|
grand_child_example_group = Class.new(child_example_group).describe("GrandChild")
|
31
31
|
|
32
32
|
formatter.add_example_group(grand_child_example_group)
|
33
|
-
formatter.example_failed("failure", nil, ::Spec::Runner::Reporter::Failure.new(nil, RuntimeError.new))
|
33
|
+
formatter.example_failed("failure", nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
|
34
34
|
io.string.should == "Parent#child_method GrandChild\n"
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should remove druby url, which is used by Spec::Distributed" do
|
38
|
-
@formatter.add_example_group(Class.new(
|
39
|
-
@formatter.example_failed("e 1", nil, ::Spec::Runner::Reporter::Failure.new(nil, RuntimeError.new))
|
38
|
+
@formatter.add_example_group(Class.new(::Spec::Example::ExampleGroupDouble).describe("something something (druby://99.99.99.99:99)"))
|
39
|
+
@formatter.example_failed("e 1", nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
|
40
40
|
io.string.should == "something something\n"
|
41
41
|
end
|
42
42
|
end
|