rspec-expectations 3.0.0.beta1 → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data.tar.gz.sig +2 -2
  2. data/.yardopts +1 -0
  3. data/Changelog.md +138 -0
  4. data/README.md +75 -8
  5. data/features/README.md +2 -2
  6. data/features/built_in_matchers/README.md +12 -9
  7. data/features/built_in_matchers/comparisons.feature +2 -2
  8. data/features/built_in_matchers/contain_exactly.feature +46 -0
  9. data/features/built_in_matchers/expect_change.feature +2 -2
  10. data/features/built_in_matchers/include.feature +0 -48
  11. data/features/built_in_matchers/output.feature +70 -0
  12. data/features/composing_matchers.feature +250 -0
  13. data/features/compound_expectations.feature +45 -0
  14. data/features/custom_matchers/access_running_example.feature +1 -1
  15. data/features/custom_matchers/define_matcher.feature +6 -6
  16. data/features/custom_matchers/define_matcher_outside_rspec.feature +4 -8
  17. data/features/test_frameworks/{test_unit.feature → minitest.feature} +11 -11
  18. data/lib/rspec/expectations.rb +31 -42
  19. data/lib/rspec/expectations/diff_presenter.rb +141 -0
  20. data/lib/rspec/expectations/differ.rb +22 -132
  21. data/lib/rspec/expectations/encoded_string.rb +56 -0
  22. data/lib/rspec/expectations/expectation_target.rb +0 -30
  23. data/lib/rspec/expectations/fail_with.rb +2 -2
  24. data/lib/rspec/expectations/handler.rb +128 -31
  25. data/lib/rspec/expectations/minitest_integration.rb +16 -0
  26. data/lib/rspec/expectations/syntax.rb +4 -58
  27. data/lib/rspec/expectations/version.rb +1 -1
  28. data/lib/rspec/matchers.rb +298 -60
  29. data/lib/rspec/matchers/aliased_matcher.rb +35 -0
  30. data/lib/rspec/matchers/built_in.rb +37 -33
  31. data/lib/rspec/matchers/built_in/base_matcher.rb +25 -15
  32. data/lib/rspec/matchers/built_in/be.rb +23 -31
  33. data/lib/rspec/matchers/built_in/be_between.rb +55 -0
  34. data/lib/rspec/matchers/built_in/be_within.rb +15 -11
  35. data/lib/rspec/matchers/built_in/change.rb +198 -81
  36. data/lib/rspec/matchers/built_in/compound.rb +106 -0
  37. data/lib/rspec/matchers/built_in/contain_exactly.rb +245 -0
  38. data/lib/rspec/matchers/built_in/eq.rb +43 -4
  39. data/lib/rspec/matchers/built_in/eql.rb +2 -2
  40. data/lib/rspec/matchers/built_in/equal.rb +35 -18
  41. data/lib/rspec/matchers/built_in/has.rb +16 -15
  42. data/lib/rspec/matchers/built_in/include.rb +45 -23
  43. data/lib/rspec/matchers/built_in/match.rb +6 -3
  44. data/lib/rspec/matchers/built_in/operators.rb +103 -0
  45. data/lib/rspec/matchers/built_in/output.rb +108 -0
  46. data/lib/rspec/matchers/built_in/raise_error.rb +9 -15
  47. data/lib/rspec/matchers/built_in/respond_to.rb +5 -4
  48. data/lib/rspec/matchers/built_in/satisfy.rb +4 -3
  49. data/lib/rspec/matchers/built_in/start_and_end_with.rb +37 -16
  50. data/lib/rspec/matchers/built_in/throw_symbol.rb +6 -5
  51. data/lib/rspec/matchers/built_in/yield.rb +31 -29
  52. data/lib/rspec/matchers/composable.rb +138 -0
  53. data/lib/rspec/matchers/dsl.rb +330 -0
  54. data/lib/rspec/matchers/generated_descriptions.rb +6 -6
  55. data/lib/rspec/matchers/matcher_delegator.rb +33 -0
  56. data/lib/rspec/matchers/pretty.rb +13 -2
  57. data/spec/rspec/expectations/{differ_spec.rb → diff_presenter_spec.rb} +56 -36
  58. data/spec/rspec/expectations/encoded_string_spec.rb +74 -0
  59. data/spec/rspec/expectations/extensions/kernel_spec.rb +11 -11
  60. data/spec/rspec/expectations/fail_with_spec.rb +8 -8
  61. data/spec/rspec/expectations/handler_spec.rb +27 -49
  62. data/spec/rspec/expectations/minitest_integration_spec.rb +27 -0
  63. data/spec/rspec/expectations/syntax_spec.rb +17 -67
  64. data/spec/rspec/expectations_spec.rb +7 -52
  65. data/spec/rspec/matchers/aliased_matcher_spec.rb +48 -0
  66. data/spec/rspec/matchers/aliases_spec.rb +449 -0
  67. data/spec/rspec/matchers/{base_matcher_spec.rb → built_in/base_matcher_spec.rb} +24 -3
  68. data/spec/rspec/matchers/built_in/be_between_spec.rb +159 -0
  69. data/spec/rspec/matchers/{be_instance_of_spec.rb → built_in/be_instance_of_spec.rb} +0 -0
  70. data/spec/rspec/matchers/{be_kind_of_spec.rb → built_in/be_kind_of_spec.rb} +0 -0
  71. data/spec/rspec/matchers/{be_spec.rb → built_in/be_spec.rb} +76 -32
  72. data/spec/rspec/matchers/{be_within_spec.rb → built_in/be_within_spec.rb} +6 -2
  73. data/spec/rspec/matchers/{change_spec.rb → built_in/change_spec.rb} +310 -69
  74. data/spec/rspec/matchers/built_in/compound_spec.rb +292 -0
  75. data/spec/rspec/matchers/built_in/contain_exactly_spec.rb +441 -0
  76. data/spec/rspec/matchers/{cover_spec.rb → built_in/cover_spec.rb} +0 -0
  77. data/spec/rspec/matchers/built_in/eq_spec.rb +156 -0
  78. data/spec/rspec/matchers/{eql_spec.rb → built_in/eql_spec.rb} +2 -2
  79. data/spec/rspec/matchers/built_in/equal_spec.rb +106 -0
  80. data/spec/rspec/matchers/{exist_spec.rb → built_in/exist_spec.rb} +1 -1
  81. data/spec/rspec/matchers/{has_spec.rb → built_in/has_spec.rb} +39 -0
  82. data/spec/rspec/matchers/{include_spec.rb → built_in/include_spec.rb} +118 -109
  83. data/spec/rspec/matchers/{match_spec.rb → built_in/match_spec.rb} +30 -2
  84. data/spec/rspec/matchers/{operator_matcher_spec.rb → built_in/operators_spec.rb} +26 -26
  85. data/spec/rspec/matchers/built_in/output_spec.rb +165 -0
  86. data/spec/rspec/matchers/{raise_error_spec.rb → built_in/raise_error_spec.rb} +81 -11
  87. data/spec/rspec/matchers/{respond_to_spec.rb → built_in/respond_to_spec.rb} +0 -0
  88. data/spec/rspec/matchers/{satisfy_spec.rb → built_in/satisfy_spec.rb} +0 -0
  89. data/spec/rspec/matchers/{start_with_end_with_spec.rb → built_in/start_and_end_with_spec.rb} +82 -15
  90. data/spec/rspec/matchers/{throw_symbol_spec.rb → built_in/throw_symbol_spec.rb} +29 -10
  91. data/spec/rspec/matchers/{yield_spec.rb → built_in/yield_spec.rb} +90 -0
  92. data/spec/rspec/matchers/configuration_spec.rb +7 -39
  93. data/spec/rspec/matchers/description_generation_spec.rb +22 -6
  94. data/spec/rspec/matchers/dsl_spec.rb +838 -0
  95. data/spec/rspec/matchers/legacy_spec.rb +101 -0
  96. data/spec/rspec/matchers_spec.rb +74 -0
  97. data/spec/spec_helper.rb +35 -21
  98. data/spec/support/shared_examples.rb +26 -4
  99. metadata +172 -116
  100. metadata.gz.sig +3 -4
  101. checksums.yaml +0 -15
  102. checksums.yaml.gz.sig +0 -0
  103. data/features/built_in_matchers/match_array.feature +0 -37
  104. data/lib/rspec/expectations/errors.rb +0 -9
  105. data/lib/rspec/expectations/extensions.rb +0 -1
  106. data/lib/rspec/expectations/extensions/object.rb +0 -29
  107. data/lib/rspec/matchers/built_in/match_array.rb +0 -51
  108. data/lib/rspec/matchers/compatibility.rb +0 -14
  109. data/lib/rspec/matchers/matcher.rb +0 -301
  110. data/lib/rspec/matchers/method_missing.rb +0 -12
  111. data/lib/rspec/matchers/operator_matcher.rb +0 -99
  112. data/lib/rspec/matchers/test_unit_integration.rb +0 -11
  113. data/spec/rspec/matchers/eq_spec.rb +0 -60
  114. data/spec/rspec/matchers/equal_spec.rb +0 -78
  115. data/spec/rspec/matchers/include_matcher_integration_spec.rb +0 -30
  116. data/spec/rspec/matchers/match_array_spec.rb +0 -194
  117. data/spec/rspec/matchers/matcher_spec.rb +0 -706
  118. data/spec/rspec/matchers/matchers_spec.rb +0 -36
  119. data/spec/rspec/matchers/method_missing_spec.rb +0 -28
  120. data/spec/support/classes.rb +0 -56
  121. data/spec/support/in_sub_process.rb +0 -37
  122. data/spec/support/ruby_version.rb +0 -10
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ module RSpec::Expectations
4
+ describe EncodedString do
5
+ let(:target_encoding) { 'UTF-8' }
6
+
7
+ if String.method_defined?(:encoding)
8
+
9
+ describe '#source_encoding' do
10
+ it 'knows the original encoding of the string' do
11
+ str = EncodedString.new("abc".encode('ASCII-8BIT'), "UTF-8")
12
+ expect( str.source_encoding.to_s ).to eq('ASCII-8BIT')
13
+ end
14
+ end
15
+
16
+ describe '#<<' do
17
+ context 'with strings that can be converted to the target encoding' do
18
+ it 'encodes and appends the string' do
19
+ valid_ascii_string = "abc".force_encoding("ASCII-8BIT")
20
+ valid_unicode_string = "\xE2\x82\xAC".force_encoding('UTF-8')
21
+
22
+ resulting_string = build_encoded_string(valid_unicode_string, target_encoding) << valid_ascii_string
23
+ expect(resulting_string).to eq "\xE2\x82\xACabc".force_encoding('UTF-8')
24
+ end
25
+ end
26
+
27
+ context 'with a string that cannot be converted to the target encoding' do
28
+ it 'replaces undefined characters with either a ? or a unicode ?' do
29
+ ascii_string = "\xAE".force_encoding("ASCII-8BIT")
30
+ valid_unicode_string = "\xE2\x82\xAC".force_encoding('UTF-8')
31
+
32
+ resulting_string = build_encoded_string(valid_unicode_string, target_encoding) << ascii_string
33
+ expected_bytes = [226, 130, 172, "?".unpack("c").first]
34
+ actual_bytes = resulting_string.each_byte.to_a
35
+
36
+ expect(actual_bytes).to eq(expected_bytes)
37
+ end
38
+ end
39
+
40
+ context 'with two ascii strings with a target encoding of UTF-8 ' do
41
+ it 'has an encoding of UTF-8' do
42
+ ascii_string = 'abc'.force_encoding("ASCII-8BIT")
43
+ other_ascii_string = '123'.force_encoding("ASCII-8BIT")
44
+
45
+ resulting_string = build_encoded_string(ascii_string, target_encoding) << other_ascii_string
46
+ expect(resulting_string.encoding.to_s).to eq 'UTF-8'
47
+ end
48
+ end
49
+ end
50
+
51
+ describe '#split' do
52
+ it 'splits the string based on the delimiter accounting for encoding' do
53
+ wrapped_string = "aaaaaaaaaaa\xAEaaaaa".force_encoding("ASCII-8BIT")
54
+
55
+ expect {
56
+ build_encoded_string(wrapped_string, target_encoding).split("\xE2\x82\xAC".force_encoding("UTF-8"))
57
+ }.not_to raise_error
58
+ end
59
+ end
60
+
61
+ def build_encoded_string(string, target_encoding)
62
+ EncodedString.new(string, target_encoding)
63
+ end
64
+ else
65
+
66
+ describe '#source_encoding' do
67
+ it 'defaults to US-ASCII' do
68
+ str = EncodedString.new("abc", "UTF-8")
69
+ expect( str.source_encoding ).to eq('US-ASCII')
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -4,18 +4,18 @@ describe Object, "#should" do
4
4
  before(:each) do
5
5
  @target = "target"
6
6
  @matcher = double("matcher")
7
- @matcher.stub(:matches?).and_return(true)
8
- @matcher.stub(:failure_message_for_should)
7
+ allow(@matcher).to receive(:matches?).and_return(true)
8
+ allow(@matcher).to receive(:failure_message)
9
9
  end
10
10
 
11
11
  it "accepts and interacts with a matcher" do
12
- @matcher.should_receive(:matches?).with(@target).and_return(true)
12
+ expect(@matcher).to receive(:matches?).with(@target).and_return(true)
13
13
  expect(@target).to @matcher
14
14
  end
15
15
 
16
- it "asks for a failure_message_for_should when matches? returns false" do
17
- @matcher.should_receive(:matches?).with(@target).and_return(false)
18
- @matcher.should_receive(:failure_message_for_should).and_return("the failure message")
16
+ it "asks for a failure_message when matches? returns false" do
17
+ expect(@matcher).to receive(:matches?).with(@target).and_return(false)
18
+ expect(@matcher).to receive(:failure_message).and_return("the failure message")
19
19
  expect {
20
20
  expect(@target).to @matcher
21
21
  }.to fail_with("the failure message")
@@ -51,15 +51,15 @@ describe Object, "#should_not" do
51
51
  end
52
52
 
53
53
  it "accepts and interacts with a matcher" do
54
- @matcher.should_receive(:matches?).with(@target).and_return(false)
55
- @matcher.stub(:failure_message_for_should_not)
54
+ expect(@matcher).to receive(:matches?).with(@target).and_return(false)
55
+ allow(@matcher).to receive(:failure_message_when_negated)
56
56
 
57
57
  expect(@target).not_to @matcher
58
58
  end
59
59
 
60
- it "asks for a failure_message_for_should_not when matches? returns true" do
61
- @matcher.should_receive(:matches?).with(@target).and_return(true)
62
- @matcher.should_receive(:failure_message_for_should_not).and_return("the failure message for should not")
60
+ it "asks for a failure_message_when_negated when matches? returns true" do
61
+ expect(@matcher).to receive(:matches?).with(@target).and_return(true)
62
+ expect(@matcher).to receive(:failure_message_when_negated).and_return("the failure message for should not")
63
63
  expect {
64
64
  expect(@target).not_to @matcher
65
65
  }.to fail_with("the failure message for should not")
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
 
4
4
 
5
5
  describe RSpec::Expectations, "#fail_with with diff of arrays" do
6
- before { RSpec::Matchers.configuration.stub(:color? => false) }
6
+ before { allow(RSpec::Matchers.configuration).to receive_messages(:color? => false) }
7
7
 
8
8
  it "splits items with newlines" do
9
9
  expected_diff = "\nDiff:\n@@ -1 +1,3 @@\n+a\\nb\n+c\\nd\n"
@@ -24,11 +24,11 @@ describe RSpec::Expectations, "#fail_with with diff" do
24
24
  let(:differ) { double("differ") }
25
25
 
26
26
  before(:each) do
27
- RSpec::Expectations.stub(:differ) { differ }
27
+ allow(RSpec::Expectations).to receive(:differ) { differ }
28
28
  end
29
29
 
30
30
  it "calls differ if expected/actual are not strings (or numbers or procs)" do
31
- differ.should_receive(:diff_as_object).and_return("diff")
31
+ expect(differ).to receive(:diff_as_object).and_return("diff")
32
32
  expect {
33
33
  RSpec::Expectations.fail_with "the message", Object.new, Object.new
34
34
  }.to fail_with("the message\nDiff:diff")
@@ -37,7 +37,7 @@ describe RSpec::Expectations, "#fail_with with diff" do
37
37
  context "with two strings" do
38
38
  context "and actual is multiline" do
39
39
  it "calls differ" do
40
- differ.should_receive(:diff_as_string).and_return("diff")
40
+ expect(differ).to receive(:diff_as_string).and_return("diff")
41
41
  expect {
42
42
  RSpec::Expectations.fail_with "the message", "expected\nthis", "actual"
43
43
  }.to fail_with("the message\nDiff:diff")
@@ -46,7 +46,7 @@ describe RSpec::Expectations, "#fail_with with diff" do
46
46
 
47
47
  context "and expected is multiline" do
48
48
  it "calls differ" do
49
- differ.should_receive(:diff_as_string).and_return("diff")
49
+ expect(differ).to receive(:diff_as_string).and_return("diff")
50
50
  expect {
51
51
  RSpec::Expectations.fail_with "the message", "expected", "actual\nthat"
52
52
  }.to fail_with("the message\nDiff:diff")
@@ -55,7 +55,7 @@ describe RSpec::Expectations, "#fail_with with diff" do
55
55
 
56
56
  context "and both are single line strings" do
57
57
  it "does not call differ" do
58
- differ.should_not_receive(:diff_as_string)
58
+ expect(differ).not_to receive(:diff_as_string)
59
59
  expect {
60
60
  RSpec::Expectations.fail_with("the message", "expected", "actual")
61
61
  }.to fail_with("the message")
@@ -64,7 +64,7 @@ describe RSpec::Expectations, "#fail_with with diff" do
64
64
 
65
65
  context "and they are UTF-16LE encoded", :if => String.method_defined?(:encode) do
66
66
  it 'does not diff when they are not multiline' do
67
- differ.should_not_receive(:diff_as_string)
67
+ expect(differ).not_to receive(:diff_as_string)
68
68
 
69
69
  str_1 = "This is a pile of poo: 💩".encode("UTF-16LE")
70
70
  str_2 = "This is a pile of poo: 💩".encode("UTF-16LE")
@@ -75,7 +75,7 @@ describe RSpec::Expectations, "#fail_with with diff" do
75
75
  end
76
76
 
77
77
  it 'diffs when they are multiline' do
78
- differ.should_receive(:diff_as_string).and_return("diff")
78
+ expect(differ).to receive(:diff_as_string).and_return("diff")
79
79
 
80
80
  str_1 = "This is a pile of poo:\n💩".encode("UTF-16LE")
81
81
  str_2 = "This is a pile of poo:\n💩".encode("UTF-16LE")
@@ -25,13 +25,13 @@ module ExampleExpectations
25
25
  "expected #{@expected}, got #{@target}"
26
26
  end
27
27
 
28
- def negative_failure_message
28
+ def failure_message_when_negated
29
29
  "expected not #{@expected}, got #{@target}"
30
30
  end
31
31
  end
32
32
 
33
33
  class PositiveOnlyMatcher < ArbitraryMatcher
34
- undef negative_failure_message rescue nil
34
+ undef failure_message_when_negated rescue nil
35
35
  end
36
36
 
37
37
  def arbitrary_matcher(*args, &block)
@@ -51,22 +51,22 @@ module RSpec
51
51
  it "asks the matcher if it matches" do
52
52
  matcher = double("matcher")
53
53
  actual = Object.new
54
- matcher.should_receive(:matches?).with(actual).and_return(true)
54
+ expect(matcher).to receive(:matches?).with(actual).and_return(true)
55
55
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
56
56
  end
57
57
 
58
58
  it "returns the match value" do
59
59
  matcher = double("matcher")
60
60
  actual = Object.new
61
- matcher.should_receive(:matches?).with(actual).and_return(:this_value)
61
+ expect(matcher).to receive(:matches?).with(actual).and_return(:this_value)
62
62
  expect(RSpec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)).to eq :this_value
63
63
  end
64
64
 
65
- it "calls failure_message_for_should if the matcher implements it" do
66
- matcher = double("matcher", :failure_message_for_should => "message", :matches? => false)
65
+ it "calls failure_message if the matcher implements it" do
66
+ matcher = double("matcher", :failure_message => "message", :matches? => false)
67
67
  actual = Object.new
68
68
 
69
- ::RSpec::Expectations.should_receive(:fail_with).with("message")
69
+ expect(::RSpec::Expectations).to receive(:fail_with).with("message")
70
70
 
71
71
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
72
72
  end
@@ -74,44 +74,44 @@ module RSpec
74
74
  it "calls fail if matcher.diffable?" do
75
75
  matcher = double("matcher",
76
76
  :diffable? => true,
77
- :failure_message_for_should => "message",
77
+ :failure_message => "message",
78
78
  :matches? => false,
79
79
  :expected => 1,
80
80
  :actual => 2
81
81
  )
82
82
  actual = Object.new
83
83
 
84
- ::RSpec::Expectations.should_receive(:fail_with).with("message", 1, 2)
84
+ expect(::RSpec::Expectations).to receive(:fail_with).with("message", 1, 2)
85
85
 
86
86
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
87
87
  end
88
88
 
89
- it "calls failure_message if the matcher does not implement failure_message_for_should" do
89
+ it "calls failure_message if the matcher does not implement failure_message" do
90
90
  matcher = double("matcher", :failure_message => "message", :matches? => false)
91
91
  actual = Object.new
92
92
 
93
- ::RSpec::Expectations.should_receive(:fail_with).with("message")
93
+ expect(::RSpec::Expectations).to receive(:fail_with).with("message")
94
94
 
95
95
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
96
96
 
97
97
  end
98
98
 
99
99
  it "uses the custom failure message when one is provided" do
100
- matcher = double("matcher", :failure_message_for_should => "message", :matches? => false)
100
+ matcher = double("matcher", :failure_message => "message", :matches? => false)
101
101
  actual = Object.new
102
102
 
103
- ::RSpec::Expectations.should_receive(:fail_with).with("custom")
103
+ expect(::RSpec::Expectations).to receive(:fail_with).with("custom")
104
104
 
105
105
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher, "custom")
106
106
  end
107
107
 
108
108
  it "uses the custom failure message when one is provided as a callable object" do
109
- matcher = double("matcher", :failure_message_for_should => "message", :matches? => false)
109
+ matcher = double("matcher", :failure_message => "message", :matches? => false)
110
110
  actual = Object.new
111
111
 
112
112
  failure_message = double("failure message", :call => "custom")
113
113
 
114
- ::RSpec::Expectations.should_receive(:fail_with).with("custom")
114
+ expect(::RSpec::Expectations).to receive(:fail_with).with("custom")
115
115
 
116
116
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher, failure_message)
117
117
  end
@@ -121,81 +121,59 @@ module RSpec
121
121
  describe NegativeExpectationHandler do
122
122
  describe "#handle_matcher" do
123
123
  it "asks the matcher if it doesn't match when the matcher responds to #does_not_match?" do
124
- matcher = double("matcher", :does_not_match? => true, :negative_failure_message => nil)
124
+ matcher = double("matcher", :does_not_match? => true, :failure_message_when_negated => nil)
125
125
  actual = Object.new
126
- matcher.should_receive(:does_not_match?).with(actual).and_return(true)
126
+ expect(matcher).to receive(:does_not_match?).with(actual).and_return(true)
127
127
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
128
128
  end
129
129
 
130
130
  it "asks the matcher if it matches when the matcher doesn't respond to #does_not_match?" do
131
131
  matcher = double("matcher")
132
132
  actual = Object.new
133
- matcher.stub(:negative_failure_message)
134
- matcher.should_receive(:matches?).with(actual).and_return(false)
133
+ allow(matcher).to receive(:failure_message_when_negated)
134
+ expect(matcher).to receive(:matches?).with(actual).and_return(false)
135
135
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
136
136
  end
137
137
 
138
138
  it "returns the match value" do
139
139
  matcher = double("matcher")
140
140
  actual = Object.new
141
- matcher.should_receive(:matches?).with(actual).and_return(false)
142
- matcher.stub(:negative_failure_message).and_return("ignore")
141
+ expect(matcher).to receive(:matches?).with(actual).and_return(false)
142
+ allow(matcher).to receive(:failure_message_when_negated).and_return("ignore")
143
143
  expect(RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)).to be_falsey
144
144
  end
145
145
 
146
-
147
- it "calls failure_message_for_should_not if the matcher implements it" do
148
- matcher = double("matcher", :failure_message_for_should_not => "message", :matches? => true)
149
- actual = Object.new
150
-
151
- ::RSpec::Expectations.should_receive(:fail_with).with("message")
152
-
153
- RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
154
-
155
- end
156
-
157
- it "calls negative_failure_message if the matcher does not implement failure_message_for_should_not" do
158
- matcher = double("matcher", :negative_failure_message => "message", :matches? => true)
159
- actual = Object.new
160
-
161
- ::RSpec::Expectations.should_receive(:fail_with).with("message")
162
-
163
- RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
164
-
165
- end
166
-
167
-
168
146
  it "calls fail if matcher.diffable?" do
169
147
  matcher = double("matcher",
170
148
  :diffable? => true,
171
- :failure_message_for_should_not => "message",
149
+ :failure_message_when_negated => "message",
172
150
  :matches? => true,
173
151
  :expected => 1,
174
152
  :actual => 2
175
153
  )
176
154
  actual = Object.new
177
155
 
178
- ::RSpec::Expectations.should_receive(:fail_with).with("message", 1, 2)
156
+ expect(::RSpec::Expectations).to receive(:fail_with).with("message", 1, 2)
179
157
 
180
158
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
181
159
  end
182
160
 
183
161
  it "uses the custom failure message when one is provided" do
184
- matcher = double("matcher", :failure_message_for_should_not => "message", :matches? => true)
162
+ matcher = double("matcher", :failure_message_when_negated => "message", :matches? => true)
185
163
  actual = Object.new
186
164
 
187
- ::RSpec::Expectations.should_receive(:fail_with).with("custom")
165
+ expect(::RSpec::Expectations).to receive(:fail_with).with("custom")
188
166
 
189
167
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher, "custom")
190
168
  end
191
169
 
192
170
  it "uses the custom failure message when one is provided as a callable object" do
193
- matcher = double("matcher", :failure_message_for_should_not => "message", :matches? => true)
171
+ matcher = double("matcher", :failure_message_when_negated => "message", :matches? => true)
194
172
  actual = Object.new
195
173
 
196
174
  failure_message = double("failure message", :call => "custom")
197
175
 
198
- ::RSpec::Expectations.should_receive(:fail_with).with("custom")
176
+ expect(::RSpec::Expectations).to receive(:fail_with).with("custom")
199
177
 
200
178
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher, failure_message)
201
179
  end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module RSpec
4
+ describe Matchers do
5
+
6
+ let(:sample_matchers) do
7
+ [:be,
8
+ :be_instance_of,
9
+ :be_kind_of]
10
+ end
11
+
12
+ context "once required" do
13
+ include MinitestIntegration
14
+
15
+ it "includes itself in Minitest::Test" do
16
+ with_minitest_loaded do
17
+ minitest_case = MiniTest::Test.allocate
18
+ sample_matchers.each do |sample_matcher|
19
+ expect(minitest_case).to respond_to(sample_matcher)
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
@@ -20,118 +20,68 @@ module RSpec
20
20
 
21
21
  describe "expect(...).to" do
22
22
  it "prints a warning when the message object isn't a String" do
23
- warner.should_receive(:warn).with(/ignoring.*message/)
23
+ expect(warner).to receive(:warn).with(/ignoring.*message/)
24
24
  expect(3).to eq(3), :not_a_string
25
25
  end
26
26
 
27
27
  it "doesn't print a warning when message is a String" do
28
- warner.should_not_receive(:warn)
28
+ expect(warner).not_to receive(:warn)
29
29
  expect(3).to eq(3), "a string"
30
30
  end
31
31
 
32
32
  it "doesn't print a warning when message responds to to_str" do
33
- warner.should_not_receive(:warn)
33
+ expect(warner).not_to receive(:warn)
34
34
  expect(3).to eq(3), string_like_object
35
35
  end
36
36
 
37
37
  it "prints a warning when the message object handles to_s but not to_str" do
38
- warner.should_receive(:warn).with(/ignoring.*message/)
38
+ expect(warner).to receive(:warn).with(/ignoring.*message/)
39
39
  expect(3).to eq(3), insufficiently_string_like_object
40
40
  end
41
41
 
42
42
  it "doesn't print a warning when message responds to call" do
43
- warner.should_not_receive(:warn)
43
+ expect(warner).not_to receive(:warn)
44
44
  expect(3).to eq(3), callable_object
45
45
  end
46
46
  end
47
47
 
48
48
  describe "expect(...).not_to" do
49
49
  it "prints a warning when the message object isn't a String" do
50
- warner.should_receive(:warn).with(/ignoring.*message/)
50
+ expect(warner).to receive(:warn).with(/ignoring.*message/)
51
51
  expect(3).not_to eq(4), :not_a_string
52
52
  end
53
53
 
54
54
  it "doesn't print a warning when message is a String" do
55
- warner.should_not_receive(:warn)
55
+ expect(warner).not_to receive(:warn)
56
56
  expect(3).not_to eq(4), "a string"
57
57
  end
58
58
 
59
59
  it "doesn't print a warning when message responds to to_str" do
60
- warner.should_not_receive(:warn)
60
+ expect(warner).not_to receive(:warn)
61
61
  expect(3).not_to eq(4), string_like_object
62
62
  end
63
63
 
64
64
  it "prints a warning when the message object handles to_s but not to_str" do
65
- warner.should_receive(:warn).with(/ignoring.*message/)
65
+ expect(warner).to receive(:warn).with(/ignoring.*message/)
66
66
  expect(3).not_to eq(4), insufficiently_string_like_object
67
67
  end
68
68
 
69
69
  it "doesn't print a warning when message responds to call" do
70
- warner.should_not_receive(:warn)
70
+ expect(warner).not_to receive(:warn)
71
71
  expect(3).not_to eq(4), callable_object
72
72
  end
73
73
  end
74
74
  end
75
75
 
76
- describe "expression generation" do
77
- let(:target) { "foo" }
78
- let(:expectation) { "eq('bar')" }
79
- let(:positive_expect_example) { "expect(foo).to eq('bar')" }
80
- let(:positive_should_example) { "foo.should eq('bar')" }
81
- let(:negative_expect_example) { "expect(foo).not_to eq('bar')" }
82
- let(:negative_should_example) { "foo.should_not eq('bar')" }
76
+ describe "enabling the should syntax on something other than the default syntax host" do
77
+ include_context "with the default expectation syntax"
83
78
 
84
- def positive_expression
85
- Syntax.positive_expression(target, expectation)
86
- end
87
-
88
- def negative_expression
89
- Syntax.negative_expression(target, expectation)
90
- end
91
-
92
- context "when only :expect is enabled" do
93
- before do
94
- expect(Syntax.should_enabled?).to be_falsey
95
- expect(Syntax.expect_enabled?).to be_truthy
96
- end
97
-
98
- it 'generates a positive expression using the expect syntax' do
99
- expect(positive_expression).to eq(positive_expect_example)
100
- end
101
-
102
- it 'generates a negative expression using the expect syntax' do
103
- expect(negative_expression).to eq(negative_expect_example)
104
- end
105
- end
106
-
107
- context "when both :should and :expect are enabled", :uses_should do
108
- before do
109
- expect(Syntax.should_enabled?).to be_truthy
110
- expect(Syntax.expect_enabled?).to be_truthy
111
- end
112
-
113
- it 'generates a positive expression using the expect syntax' do
114
- expect(positive_expression).to eq(positive_expect_example)
115
- end
116
-
117
- it 'generates a negative expression using the expect syntax' do
118
- expect(negative_expression).to eq(negative_expect_example)
119
- end
120
- end
79
+ it "continues to warn about the should syntax" do
80
+ my_host = Class.new
81
+ expect(RSpec).to receive(:deprecate)
82
+ Syntax.enable_should(my_host)
121
83
 
122
- context "when only :should is enabled", :uses_only_should do
123
- before do
124
- Syntax.should_enabled?.should be_truthy
125
- Syntax.expect_enabled?.should be_falsey
126
- end
127
-
128
- it 'generates a positive expression using the expect syntax' do
129
- positive_expression.should eq(positive_should_example)
130
- end
131
-
132
- it 'generates a negative expression using the expect syntax' do
133
- negative_expression.should eq(negative_should_example)
134
- end
84
+ 3.should eq 3
135
85
  end
136
86
  end
137
87
  end