rspec-expectations 3.0.0.beta2 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -2
  4. data/.yardopts +0 -1
  5. data/Changelog.md +115 -35
  6. data/README.md +2 -2
  7. data/lib/rspec/expectations.rb +13 -8
  8. data/lib/rspec/{matchers → expectations}/configuration.rb +38 -13
  9. data/lib/rspec/expectations/expectation_target.rb +72 -8
  10. data/lib/rspec/expectations/fail_with.rb +10 -52
  11. data/lib/rspec/expectations/handler.rb +9 -11
  12. data/lib/rspec/expectations/syntax.rb +37 -35
  13. data/lib/rspec/expectations/version.rb +1 -1
  14. data/lib/rspec/matchers.rb +60 -9
  15. data/lib/rspec/matchers/aliased_matcher.rb +6 -0
  16. data/lib/rspec/matchers/built_in.rb +9 -1
  17. data/lib/rspec/matchers/built_in/all.rb +78 -0
  18. data/lib/rspec/matchers/built_in/base_matcher.rb +39 -1
  19. data/lib/rspec/matchers/built_in/be.rb +117 -42
  20. data/lib/rspec/matchers/built_in/be_between.rb +22 -0
  21. data/lib/rspec/matchers/built_in/be_instance_of.rb +11 -3
  22. data/lib/rspec/matchers/built_in/be_kind_of.rb +5 -0
  23. data/lib/rspec/matchers/built_in/be_within.rb +26 -6
  24. data/lib/rspec/matchers/built_in/change.rb +89 -13
  25. data/lib/rspec/matchers/built_in/compound.rb +19 -3
  26. data/lib/rspec/matchers/built_in/contain_exactly.rb +17 -6
  27. data/lib/rspec/matchers/built_in/cover.rb +3 -0
  28. data/lib/rspec/matchers/built_in/eq.rb +20 -5
  29. data/lib/rspec/matchers/built_in/eql.rb +15 -3
  30. data/lib/rspec/matchers/built_in/equal.rb +23 -6
  31. data/lib/rspec/matchers/built_in/exist.rb +74 -10
  32. data/lib/rspec/matchers/built_in/has.rb +58 -3
  33. data/lib/rspec/matchers/built_in/include.rb +16 -1
  34. data/lib/rspec/matchers/built_in/match.rb +14 -4
  35. data/lib/rspec/matchers/built_in/operators.rb +16 -0
  36. data/lib/rspec/matchers/built_in/output.rb +47 -5
  37. data/lib/rspec/matchers/built_in/raise_error.rb +40 -23
  38. data/lib/rspec/matchers/built_in/respond_to.rb +37 -16
  39. data/lib/rspec/matchers/built_in/satisfy.rb +15 -0
  40. data/lib/rspec/matchers/built_in/start_and_end_with.rb +29 -14
  41. data/lib/rspec/matchers/built_in/throw_symbol.rb +32 -3
  42. data/lib/rspec/matchers/built_in/yield.rb +148 -44
  43. data/lib/rspec/matchers/composable.rb +48 -7
  44. data/lib/rspec/matchers/dsl.rb +45 -17
  45. data/lib/rspec/matchers/generated_descriptions.rb +7 -0
  46. data/lib/rspec/matchers/matcher_delegator.rb +6 -2
  47. data/lib/rspec/matchers/pretty.rb +15 -19
  48. metadata +33 -236
  49. metadata.gz.sig +0 -0
  50. data/features/README.md +0 -48
  51. data/features/Upgrade.md +0 -53
  52. data/features/built_in_matchers/README.md +0 -96
  53. data/features/built_in_matchers/be.feature +0 -175
  54. data/features/built_in_matchers/be_within.feature +0 -48
  55. data/features/built_in_matchers/comparisons.feature +0 -97
  56. data/features/built_in_matchers/contain_exactly.feature +0 -46
  57. data/features/built_in_matchers/cover.feature +0 -47
  58. data/features/built_in_matchers/end_with.feature +0 -48
  59. data/features/built_in_matchers/equality.feature +0 -136
  60. data/features/built_in_matchers/exist.feature +0 -45
  61. data/features/built_in_matchers/expect_change.feature +0 -59
  62. data/features/built_in_matchers/expect_error.feature +0 -144
  63. data/features/built_in_matchers/include.feature +0 -126
  64. data/features/built_in_matchers/match.feature +0 -51
  65. data/features/built_in_matchers/output.feature +0 -70
  66. data/features/built_in_matchers/predicates.feature +0 -161
  67. data/features/built_in_matchers/respond_to.feature +0 -84
  68. data/features/built_in_matchers/satisfy.feature +0 -33
  69. data/features/built_in_matchers/start_with.feature +0 -48
  70. data/features/built_in_matchers/throw_symbol.feature +0 -91
  71. data/features/built_in_matchers/types.feature +0 -116
  72. data/features/built_in_matchers/yield.feature +0 -161
  73. data/features/composing_matchers.feature +0 -250
  74. data/features/compound_expectations.feature +0 -45
  75. data/features/custom_matchers/access_running_example.feature +0 -53
  76. data/features/custom_matchers/define_diffable_matcher.feature +0 -27
  77. data/features/custom_matchers/define_matcher.feature +0 -340
  78. data/features/custom_matchers/define_matcher_outside_rspec.feature +0 -34
  79. data/features/custom_matchers/define_matcher_with_fluent_interface.feature +0 -24
  80. data/features/customized_message.feature +0 -39
  81. data/features/diffing.feature +0 -85
  82. data/features/implicit_docstrings.feature +0 -52
  83. data/features/step_definitions/additional_cli_steps.rb +0 -22
  84. data/features/support/env.rb +0 -21
  85. data/features/support/rubinius.rb +0 -6
  86. data/features/syntax_configuration.feature +0 -71
  87. data/features/test_frameworks/minitest.feature +0 -44
  88. data/lib/rspec-expectations.rb +0 -1
  89. data/lib/rspec/expectations/diff_presenter.rb +0 -141
  90. data/lib/rspec/expectations/differ.rb +0 -44
  91. data/lib/rspec/expectations/encoded_string.rb +0 -56
  92. data/spec/rspec/expectations/diff_presenter_spec.rb +0 -249
  93. data/spec/rspec/expectations/encoded_string_spec.rb +0 -74
  94. data/spec/rspec/expectations/expectation_target_spec.rb +0 -82
  95. data/spec/rspec/expectations/extensions/kernel_spec.rb +0 -67
  96. data/spec/rspec/expectations/fail_with_spec.rb +0 -114
  97. data/spec/rspec/expectations/handler_spec.rb +0 -205
  98. data/spec/rspec/expectations/minitest_integration_spec.rb +0 -27
  99. data/spec/rspec/expectations/syntax_spec.rb +0 -89
  100. data/spec/rspec/expectations_spec.rb +0 -12
  101. data/spec/rspec/matchers/aliased_matcher_spec.rb +0 -48
  102. data/spec/rspec/matchers/aliases_spec.rb +0 -449
  103. data/spec/rspec/matchers/built_in/base_matcher_spec.rb +0 -83
  104. data/spec/rspec/matchers/built_in/be_between_spec.rb +0 -159
  105. data/spec/rspec/matchers/built_in/be_instance_of_spec.rb +0 -63
  106. data/spec/rspec/matchers/built_in/be_kind_of_spec.rb +0 -41
  107. data/spec/rspec/matchers/built_in/be_spec.rb +0 -592
  108. data/spec/rspec/matchers/built_in/be_within_spec.rb +0 -141
  109. data/spec/rspec/matchers/built_in/change_spec.rb +0 -808
  110. data/spec/rspec/matchers/built_in/compound_spec.rb +0 -292
  111. data/spec/rspec/matchers/built_in/contain_exactly_spec.rb +0 -441
  112. data/spec/rspec/matchers/built_in/cover_spec.rb +0 -69
  113. data/spec/rspec/matchers/built_in/eq_spec.rb +0 -156
  114. data/spec/rspec/matchers/built_in/eql_spec.rb +0 -41
  115. data/spec/rspec/matchers/built_in/equal_spec.rb +0 -106
  116. data/spec/rspec/matchers/built_in/exist_spec.rb +0 -124
  117. data/spec/rspec/matchers/built_in/has_spec.rb +0 -161
  118. data/spec/rspec/matchers/built_in/include_spec.rb +0 -540
  119. data/spec/rspec/matchers/built_in/match_spec.rb +0 -102
  120. data/spec/rspec/matchers/built_in/operators_spec.rb +0 -252
  121. data/spec/rspec/matchers/built_in/output_spec.rb +0 -165
  122. data/spec/rspec/matchers/built_in/raise_error_spec.rb +0 -461
  123. data/spec/rspec/matchers/built_in/respond_to_spec.rb +0 -292
  124. data/spec/rspec/matchers/built_in/satisfy_spec.rb +0 -44
  125. data/spec/rspec/matchers/built_in/start_and_end_with_spec.rb +0 -253
  126. data/spec/rspec/matchers/built_in/throw_symbol_spec.rb +0 -135
  127. data/spec/rspec/matchers/built_in/yield_spec.rb +0 -627
  128. data/spec/rspec/matchers/configuration_spec.rb +0 -213
  129. data/spec/rspec/matchers/description_generation_spec.rb +0 -191
  130. data/spec/rspec/matchers/dsl_spec.rb +0 -895
  131. data/spec/rspec/matchers/legacy_spec.rb +0 -101
  132. data/spec/rspec/matchers_spec.rb +0 -74
  133. data/spec/spec_helper.rb +0 -85
  134. data/spec/support/matchers.rb +0 -22
  135. data/spec/support/shared_examples.rb +0 -35
@@ -1,83 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec::Matchers::BuiltIn
4
- describe BaseMatcher do
5
- describe "#match_unless_raises" do
6
- let(:matcher) do
7
- Class.new(BaseMatcher).new
8
- end
9
-
10
- it "returns true if there are no errors" do
11
- expect(matcher.match_unless_raises {}).to be_truthy
12
- end
13
-
14
- it "returns false if there is an error" do
15
- expect(matcher.match_unless_raises { raise }).to be_falsey
16
- end
17
-
18
- it "returns false if the only submitted error is raised" do
19
- expect(matcher.match_unless_raises(RuntimeError){ raise "foo" }).to be_falsey
20
- end
21
-
22
- it "returns false if any of several errors submitted is raised" do
23
- expect(matcher.match_unless_raises(RuntimeError, ArgumentError, NameError) { raise "foo" }).to be_falsey
24
- expect(matcher.match_unless_raises(RuntimeError, ArgumentError, NameError) { raise ArgumentError.new('') }).to be_falsey
25
- expect(matcher.match_unless_raises(RuntimeError, ArgumentError, NameError) { raise NameError.new('') }).to be_falsey
26
- end
27
-
28
- it "re-raises any error other than one of those specified" do
29
- expect do
30
- matcher.match_unless_raises(ArgumentError){ raise "foo" }
31
- end.to raise_error
32
- end
33
-
34
- it "stores the rescued exception for use in messages" do
35
- matcher.match_unless_raises(RuntimeError){ raise "foo" }
36
- expect(matcher.rescued_exception).to be_a(RuntimeError)
37
- expect(matcher.rescued_exception.message).to eq("foo")
38
- end
39
-
40
- end
41
-
42
- describe "#failure_message" do
43
- context "when the parameter to .new is omitted" do
44
- it "describes what was expected" do
45
- matcher_class = Class.new(BaseMatcher) do
46
- def name=(name)
47
- @name = name
48
- end
49
-
50
- def match(expected, actual)
51
- false
52
- end
53
- end
54
-
55
- matcher = matcher_class.new
56
- matcher.name = "be something"
57
- matcher.matches?("foo")
58
- expect(matcher.failure_message).to eq('expected "foo" to be something')
59
- end
60
- end
61
- end
62
-
63
- describe "#===" do
64
- it "responds the same way as matches?" do
65
- matcher = Class.new(BaseMatcher) do
66
- def initialize(expected)
67
- @expected = expected
68
- end
69
-
70
- def matches?(actual)
71
- (@actual = actual) == @expected
72
- end
73
- end
74
-
75
- expect(matcher.new(3).matches?(3)).to be_truthy
76
- expect(matcher.new(3)).to be === 3
77
-
78
- expect(matcher.new(3).matches?(4)).to be_falsey
79
- expect(matcher.new(3)).not_to be === 4
80
- end
81
- end
82
- end
83
- end
@@ -1,159 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec::Matchers::BuiltIn
4
- describe BeBetween do
5
- class SizeMatters
6
- include Comparable
7
- attr :str
8
- def <=>(other)
9
- str.size <=> other.str.size
10
- end
11
- def initialize(str)
12
- @str = str
13
- end
14
- def inspect
15
- @str
16
- end
17
- end
18
-
19
- shared_examples_for "be_between" do |mode|
20
- it "passes if target is between min and max" do
21
- expect(5).to matcher(1, 10)
22
- end
23
-
24
- it "fails if target is not between min and max" do
25
- expect {
26
- # It does not go to 11
27
- expect(11).to matcher(1, 10)
28
- }.to fail_with("expected 11 to be between 1 and 10 (#{mode})")
29
- end
30
-
31
- it "works with strings" do
32
- expect("baz").to matcher("bar", "foo")
33
-
34
- expect {
35
- expect("foo").to matcher("bar", "baz")
36
- }.to fail_with("expected \"foo\" to be between \"bar\" and \"baz\" (#{mode})")
37
- end
38
-
39
- it "works with other Comparable objects" do
40
- expect(SizeMatters.new("--")).to matcher(SizeMatters.new("-"), SizeMatters.new("---"))
41
-
42
- expect {
43
- expect(SizeMatters.new("---")).to matcher(SizeMatters.new("-"), SizeMatters.new("--"))
44
- }.to fail_with("expected --- to be between - and -- (#{mode})")
45
- end
46
- end
47
-
48
- shared_examples_for "not_to be_between" do |mode|
49
- it "passes if target is not between min and max" do
50
- expect(11).not_to matcher(1, 10)
51
- end
52
-
53
- it "fails if target is between min and max" do
54
- expect {
55
- expect(5).not_to matcher(1, 10)
56
- }.to fail_with("expected 5 not to be between 1 and 10 (#{mode})")
57
- end
58
- end
59
-
60
- shared_examples_for "composing with other matchers" do |mode|
61
- it "passes when the matchers both match" do
62
- expect([nil, 3]).to include(matcher(2, 4), a_nil_value)
63
- end
64
-
65
- it "works with mixed types" do
66
- expect(["baz", Math::PI]).to include(matcher(3.1, 3.2), matcher("bar", "foo"))
67
-
68
- expect {
69
- expect(["baz", 2.14]).to include(matcher(3.1, 3.2), matcher("bar", "foo") )
70
- }.to fail_with("expected [\"baz\", 2.14] to include (a value between 3.1 and 3.2 (#{mode})) and (a value between \"bar\" and \"foo\" (#{mode}))")
71
- end
72
-
73
- it "provides a description" do
74
- description = include(matcher(2, 4), an_instance_of(Float)).description
75
- expect(description).to eq("include (a value between 2 and 4 (#{mode})) and (an instance of Float)")
76
- end
77
-
78
- it "fails with a clear error message when the matchers do not match" do
79
- expect {
80
- expect([nil, 1]).to include(matcher(2, 4), a_nil_value)
81
- }.to fail_with("expected [nil, 1] to include (a value between 2 and 4 (#{mode})) and (a nil value)")
82
- end
83
- end
84
-
85
- it_behaves_like "an RSpec matcher", :valid_value => (10), :invalid_value => (11) do
86
- let(:matcher) { be_between(1, 10) }
87
- end
88
-
89
- describe "expect(...).to be_between(min, max) (inclusive)" do
90
- it_behaves_like "be_between", :inclusive do
91
- def matcher(min, max)
92
- be_between(min, max)
93
- end
94
- end
95
-
96
- it "is inclusive" do
97
- expect(1).to be_between(1, 10)
98
- expect(10).to be_between(1, 10)
99
- end
100
-
101
- it "indicates it was not comparable if it does not respond to `<=` and `>=`" do
102
- expect {
103
- expect(nil).to be_between(0, 10)
104
- }.to fail_with("expected nil to be between 0 and 10 (inclusive), but it does not respond to `<=` and `>=`")
105
- end
106
- end
107
-
108
- describe "expect(...).to be_between(min, max) (exclusive)" do
109
- it_behaves_like "be_between", :exclusive do
110
- def matcher(min, max)
111
- be_between(min, max).exclusive
112
- end
113
- end
114
-
115
- it "indicates it was not comparable if it does not respond to `<` and `>`" do
116
- expect {
117
- expect(nil).to be_between(0, 10).exclusive
118
- }.to fail_with("expected nil to be between 0 and 10 (exclusive), but it does not respond to `<` and `>`")
119
- end
120
-
121
- it "is exclusive" do
122
- expect { expect(1).to be_between(1, 10).exclusive }.to fail
123
- expect { expect(10).to be_between(1, 10).exclusive }.to fail
124
- end
125
- end
126
-
127
- describe "expect(...).not_to be_between(min, max) (inclusive)" do
128
- it_behaves_like "not_to be_between", :inclusive do
129
- def matcher(min, max)
130
- be_between(min, max)
131
- end
132
- end
133
- end
134
-
135
- describe "expect(...).not_to be_between(min, max) (exclusive)" do
136
- it_behaves_like "not_to be_between", :exclusive do
137
- def matcher(min, max)
138
- be_between(min, max).exclusive
139
- end
140
- end
141
- end
142
-
143
- describe "composing with other matchers (inclusive)" do
144
- it_behaves_like "composing with other matchers", :inclusive do
145
- def matcher(min, max)
146
- a_value_between(min, max)
147
- end
148
- end
149
- end
150
-
151
- describe "composing with other matchers (exclusive)" do
152
- it_behaves_like "composing with other matchers", :exclusive do
153
- def matcher(min, max)
154
- a_value_between(min, max).exclusive
155
- end
156
- end
157
- end
158
- end
159
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec
4
- module Matchers
5
- [:be_an_instance_of, :be_instance_of].each do |method|
6
- describe "expect(actual).to #{method}(expected)" do
7
- it_behaves_like "an RSpec matcher", :valid_value => 5, :invalid_value => "a" do
8
- let(:matcher) { send(method, Fixnum) }
9
- end
10
-
11
- it "passes if actual is instance of expected class" do
12
- expect(5).to send(method, Fixnum)
13
- end
14
-
15
- it "fails if actual is instance of subclass of expected class" do
16
- expect {
17
- expect(5).to send(method, Numeric)
18
- }.to fail_with(%Q{expected 5 to be an instance of Numeric})
19
- end
20
-
21
- it "fails with failure message for should unless actual is instance of expected class" do
22
- expect {
23
- expect("foo").to send(method, Array)
24
- }.to fail_with(%Q{expected "foo" to be an instance of Array})
25
- end
26
-
27
- it "provides a description" do
28
- matcher = be_an_instance_of(Fixnum)
29
- matcher.matches?(Numeric)
30
- expect(matcher.description).to eq "be an instance of Fixnum"
31
- end
32
-
33
- context "when expected provides an expanded inspect, e.g. AR::Base" do
34
- let(:user_klass) do
35
- Class.new do
36
- def self.inspect
37
- "User(id: integer, name: string)"
38
- end
39
- end
40
- end
41
-
42
- before { stub_const("User", user_klass) }
43
-
44
- it "provides a description including only the class name" do
45
- matcher = be_an_instance_of(User)
46
- expect(matcher.description).to eq "be an instance of User"
47
- end
48
- end
49
- end
50
-
51
- describe "expect(actual).not_to #{method}(expected)" do
52
-
53
- it "fails with failure message for should_not if actual is instance of expected class" do
54
- expect {
55
- expect("foo").not_to send(method, String)
56
- }.to fail_with(%Q{expected "foo" not to be an instance of String})
57
- end
58
-
59
- end
60
-
61
- end
62
- end
63
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec
4
- module Matchers
5
- [:be_a_kind_of, :be_kind_of].each do |method|
6
- describe "expect(actual).to #{method}(expected)" do
7
- it_behaves_like "an RSpec matcher", :valid_value => 5, :invalid_value => "a" do
8
- let(:matcher) { send(method, Fixnum) }
9
- end
10
-
11
- it "passes if actual is instance of expected class" do
12
- expect(5).to send(method, Fixnum)
13
- end
14
-
15
- it "passes if actual is instance of subclass of expected class" do
16
- expect(5).to send(method, Numeric)
17
- end
18
-
19
- it "fails with failure message for should unless actual is kind of expected class" do
20
- expect {
21
- expect("foo").to send(method, Array)
22
- }.to fail_with(%Q{expected "foo" to be a kind of Array})
23
- end
24
-
25
- it "provides a description" do
26
- matcher = be_a_kind_of(String)
27
- matcher.matches?("this")
28
- expect(matcher.description).to eq "be a kind of String"
29
- end
30
- end
31
-
32
- describe "expect(actual).not_to #{method}(expected)" do
33
- it "fails with failure message for should_not if actual is kind of expected class" do
34
- expect {
35
- expect("foo").not_to send(method, String)
36
- }.to fail_with(%Q{expected "foo" not to be a kind of String})
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,592 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "expect(...).to be_predicate" do
4
- it "passes when actual returns true for :predicate?" do
5
- actual = double("actual", :happy? => true)
6
- expect(actual).to be_happy
7
- end
8
-
9
- it 'allows composable aliases to be defined' do
10
- RSpec::Matchers.alias_matcher :a_user_who_is_happy, :be_happy
11
- actual = double("actual", :happy? => true)
12
- expect(actual).to a_user_who_is_happy
13
- expect(a_user_who_is_happy.description).to eq("a user who is happy")
14
-
15
- RSpec::Matchers.alias_matcher :a_user_who_is_an_admin, :be_an_admin
16
- actual = double("actual", :admin? => true)
17
- expect(actual).to a_user_who_is_an_admin
18
- expect(a_user_who_is_an_admin.description).to eq("a user who is an admin")
19
-
20
- RSpec::Matchers.alias_matcher :an_animal_that_is_a_canine, :be_a_canine
21
- actual = double("actual", :canine? => true)
22
- expect(actual).to an_animal_that_is_a_canine
23
- expect(an_animal_that_is_a_canine.description).to eq("an animal that is a canine")
24
- end
25
-
26
- it "passes when actual returns true for :predicates? (present tense)" do
27
- actual = double("actual", :exists? => true, :exist? => true)
28
- expect(actual).to be_exist
29
- end
30
-
31
- it "fails when actual returns false for :predicate?" do
32
- actual = double("actual", :happy? => false)
33
- expect {
34
- expect(actual).to be_happy
35
- }.to fail_with("expected happy? to return true, got false")
36
- end
37
-
38
- it "fails when actual returns false for :predicate?" do
39
- actual = double("actual", :happy? => nil)
40
- expect {
41
- expect(actual).to be_happy
42
- }.to fail_with("expected happy? to return true, got nil")
43
- end
44
-
45
- it "fails when actual does not respond to :predicate?" do
46
- expect {
47
- expect(Object.new).to be_happy
48
- }.to raise_error(NameError, /happy\?/)
49
- end
50
-
51
- it 'fails when :predicate? is private' do
52
- privately_happy = Class.new do
53
- private
54
- def happy?
55
- true
56
- end
57
- end
58
- expect { expect(privately_happy.new).to be_happy }.to raise_error
59
- end
60
-
61
- it "fails on error other than NameError" do
62
- actual = double("actual")
63
- expect(actual).to receive(:foo?).and_raise("aaaah")
64
- expect {
65
- expect(actual).to be_foo
66
- }.to raise_error(/aaaah/)
67
- end
68
-
69
- it "fails on error other than NameError (with the present tense predicate)" do
70
- actual = Object.new
71
- expect(actual).to receive(:foos?).and_raise("aaaah")
72
- expect {
73
- expect(actual).to be_foo
74
- }.to raise_error(/aaaah/)
75
- end
76
-
77
- it "does not support operator chaining like a basic `be` matcher does" do
78
- matcher = be_happy
79
- value = double(:happy? => false)
80
- expect(matcher == value).to be false
81
- end
82
- end
83
-
84
- describe "expect(...).not_to be_predicate" do
85
- it "passes when actual returns false for :sym?" do
86
- actual = double("actual", :happy? => false)
87
- expect(actual).not_to be_happy
88
- end
89
-
90
- it "passes when actual returns nil for :sym?" do
91
- actual = double("actual", :happy? => nil)
92
- expect(actual).not_to be_happy
93
- end
94
-
95
- it "fails when actual returns true for :sym?" do
96
- actual = double("actual", :happy? => true)
97
- expect {
98
- expect(actual).not_to be_happy
99
- }.to fail_with("expected happy? to return false, got true")
100
- end
101
-
102
- it "fails when actual does not respond to :sym?" do
103
- expect {
104
- expect(Object.new).not_to be_happy
105
- }.to raise_error(NameError)
106
- end
107
- end
108
-
109
- describe "expect(...).to be_predicate(*args)" do
110
- it "passes when actual returns true for :predicate?(*args)" do
111
- actual = double("actual")
112
- expect(actual).to receive(:older_than?).with(3).and_return(true)
113
- expect(actual).to be_older_than(3)
114
- end
115
-
116
- it "fails when actual returns false for :predicate?(*args)" do
117
- actual = double("actual")
118
- expect(actual).to receive(:older_than?).with(3).and_return(false)
119
- expect {
120
- expect(actual).to be_older_than(3)
121
- }.to fail_with("expected older_than?(3) to return true, got false")
122
- end
123
-
124
- it "fails when actual does not respond to :predicate?" do
125
- expect {
126
- expect(Object.new).to be_older_than(3)
127
- }.to raise_error(NameError)
128
- end
129
- end
130
-
131
- describe "expect(...).not_to be_predicate(*args)" do
132
- it "passes when actual returns false for :predicate?(*args)" do
133
- actual = double("actual")
134
- expect(actual).to receive(:older_than?).with(3).and_return(false)
135
- expect(actual).not_to be_older_than(3)
136
- end
137
-
138
- it "fails when actual returns true for :predicate?(*args)" do
139
- actual = double("actual")
140
- expect(actual).to receive(:older_than?).with(3).and_return(true)
141
- expect {
142
- expect(actual).not_to be_older_than(3)
143
- }.to fail_with("expected older_than?(3) to return false, got true")
144
- end
145
-
146
- it "fails when actual does not respond to :predicate?" do
147
- expect {
148
- expect(Object.new).not_to be_older_than(3)
149
- }.to raise_error(NameError)
150
- end
151
- end
152
-
153
- describe "expect(...).to be_predicate(&block)" do
154
- it "passes when actual returns true for :predicate?(&block)" do
155
- actual = double("actual")
156
- delegate = double("delegate")
157
- expect(actual).to receive(:happy?).and_yield
158
- expect(delegate).to receive(:check_happy).and_return(true)
159
- expect(actual).to be_happy { delegate.check_happy }
160
- end
161
-
162
- it "fails when actual returns false for :predicate?(&block)" do
163
- actual = double("actual")
164
- delegate = double("delegate")
165
- expect(actual).to receive(:happy?).and_yield
166
- expect(delegate).to receive(:check_happy).and_return(false)
167
- expect {
168
- expect(actual).to be_happy { delegate.check_happy }
169
- }.to fail_with("expected happy? to return true, got false")
170
- end
171
-
172
- it "fails when actual does not respond to :predicate?" do
173
- delegate = double("delegate", :check_happy => true)
174
- expect {
175
- expect(Object.new).to be_happy { delegate.check_happy }
176
- }.to raise_error(NameError)
177
- end
178
- end
179
-
180
- describe "expect(...).not_to be_predicate(&block)" do
181
- it "passes when actual returns false for :predicate?(&block)" do
182
- actual = double("actual")
183
- delegate = double("delegate")
184
- expect(actual).to receive(:happy?).and_yield
185
- expect(delegate).to receive(:check_happy).and_return(false)
186
- expect(actual).not_to be_happy { delegate.check_happy }
187
- end
188
-
189
- it "fails when actual returns true for :predicate?(&block)" do
190
- actual = double("actual")
191
- delegate = double("delegate")
192
- expect(actual).to receive(:happy?).and_yield
193
- expect(delegate).to receive(:check_happy).and_return(true)
194
- expect {
195
- expect(actual).not_to be_happy { delegate.check_happy }
196
- }.to fail_with("expected happy? to return false, got true")
197
- end
198
-
199
- it "fails when actual does not respond to :predicate?" do
200
- delegate = double("delegate", :check_happy => true)
201
- expect {
202
- expect(Object.new).not_to be_happy { delegate.check_happy }
203
- }.to raise_error(NameError)
204
- end
205
- end
206
-
207
- describe "expect(...).to be_predicate(*args, &block)" do
208
- it "passes when actual returns true for :predicate?(*args, &block)" do
209
- actual = double("actual")
210
- delegate = double("delegate")
211
- expect(actual).to receive(:older_than?).with(3).and_yield(3)
212
- expect(delegate).to receive(:check_older_than).with(3).and_return(true)
213
- expect(actual).to be_older_than(3) { |age| delegate.check_older_than(age) }
214
- end
215
-
216
- it "fails when actual returns false for :predicate?(*args, &block)" do
217
- actual = double("actual")
218
- delegate = double("delegate")
219
- expect(actual).to receive(:older_than?).with(3).and_yield(3)
220
- expect(delegate).to receive(:check_older_than).with(3).and_return(false)
221
- expect {
222
- expect(actual).to be_older_than(3) { |age| delegate.check_older_than(age) }
223
- }.to fail_with("expected older_than?(3) to return true, got false")
224
- end
225
-
226
- it "fails when actual does not respond to :predicate?" do
227
- delegate = double("delegate", :check_older_than => true)
228
- expect {
229
- expect(Object.new).to be_older_than(3) { |age| delegate.check_older_than(age) }
230
- }.to raise_error(NameError)
231
- end
232
- end
233
-
234
- describe "expect(...).not_to be_predicate(*args, &block)" do
235
- it "passes when actual returns false for :predicate?(*args, &block)" do
236
- actual = double("actual")
237
- delegate = double("delegate")
238
- expect(actual).to receive(:older_than?).with(3).and_yield(3)
239
- expect(delegate).to receive(:check_older_than).with(3).and_return(false)
240
- expect(actual).not_to be_older_than(3) { |age| delegate.check_older_than(age) }
241
- end
242
-
243
- it "fails when actual returns true for :predicate?(*args, &block)" do
244
- actual = double("actual")
245
- delegate = double("delegate")
246
- expect(actual).to receive(:older_than?).with(3).and_yield(3)
247
- expect(delegate).to receive(:check_older_than).with(3).and_return(true)
248
- expect {
249
- expect(actual).not_to be_older_than(3) { |age| delegate.check_older_than(age) }
250
- }.to fail_with("expected older_than?(3) to return false, got true")
251
- end
252
-
253
- it "fails when actual does not respond to :predicate?" do
254
- delegate = double("delegate", :check_older_than => true)
255
- expect {
256
- expect(Object.new).not_to be_older_than(3) { |age| delegate.check_older_than(age) }
257
- }.to raise_error(NameError)
258
- end
259
- end
260
-
261
- describe "expect(...).to be_truthy" do
262
- it "passes when actual equal?(true)" do
263
- expect(true).to be_truthy
264
- end
265
-
266
- it "passes when actual is 1" do
267
- expect(1).to be_truthy
268
- end
269
-
270
- it "fails when actual equal?(false)" do
271
- expect {
272
- expect(false).to be_truthy
273
- }.to fail_with("expected: truthy value\n got: false")
274
- end
275
- end
276
-
277
- describe "expect(...).to be_falsey" do
278
- it "passes when actual equal?(false)" do
279
- expect(false).to be_falsey
280
- end
281
-
282
- it "passes when actual equal?(nil)" do
283
- expect(nil).to be_falsey
284
- end
285
-
286
- it "fails when actual equal?(true)" do
287
- expect {
288
- expect(true).to be_falsey
289
- }.to fail_with("expected: falsey value\n got: true")
290
- end
291
- end
292
-
293
- describe "expect(...).to be_falsy" do
294
- it "passes when actual equal?(false)" do
295
- expect(false).to be_falsy
296
- end
297
-
298
- it "passes when actual equal?(nil)" do
299
- expect(nil).to be_falsy
300
- end
301
-
302
- it "fails when actual equal?(true)" do
303
- expect {
304
- expect(true).to be_falsy
305
- }.to fail_with("expected: falsey value\n got: true")
306
- end
307
- end
308
-
309
- describe "expect(...).to be_nil" do
310
- it "passes when actual is nil" do
311
- expect(nil).to be_nil
312
- end
313
-
314
- it "fails when actual is not nil" do
315
- expect {
316
- expect(:not_nil).to be_nil
317
- }.to fail_with(/^expected: nil/)
318
- end
319
- end
320
-
321
- describe "expect(...).not_to be_nil" do
322
- it "passes when actual is not nil" do
323
- expect(:not_nil).not_to be_nil
324
- end
325
-
326
- it "fails when actual is nil" do
327
- expect {
328
- expect(nil).not_to be_nil
329
- }.to fail_with(/^expected: not nil/)
330
- end
331
- end
332
-
333
- describe "expect(...).to be <" do
334
- it "passes when < operator returns true" do
335
- expect(3).to be < 4
336
- end
337
-
338
- it "fails when < operator returns false" do
339
- expect {
340
- expect(3).to be < 3
341
- }.to fail_with("expected: < 3\n got: 3")
342
- end
343
-
344
- it "describes itself" do
345
- expect(be.<(4).description).to eq "be < 4"
346
- end
347
-
348
- it 'does not lie and say that it is equal to a number' do
349
- matcher = (be < 3)
350
- expect(5 == matcher).to be false
351
- end
352
- end
353
-
354
- describe "expect(...).to be <=" do
355
- it "passes when <= operator returns true" do
356
- expect(3).to be <= 4
357
- expect(4).to be <= 4
358
- end
359
-
360
- it "fails when <= operator returns false" do
361
- expect {
362
- expect(3).to be <= 2
363
- }.to fail_with("expected: <= 2\n got: 3")
364
- end
365
- end
366
-
367
- describe "expect(...).to be >=" do
368
- it "passes when >= operator returns true" do
369
- expect(4).to be >= 4
370
- expect(5).to be >= 4
371
- end
372
-
373
- it "fails when >= operator returns false" do
374
- expect {
375
- expect(3).to be >= 4
376
- }.to fail_with("expected: >= 4\n got: 3")
377
- end
378
- end
379
-
380
- describe "expect(...).to be >" do
381
- it "passes when > operator returns true" do
382
- expect(5).to be > 4
383
- end
384
-
385
- it "fails when > operator returns false" do
386
- expect {
387
- expect(3).to be > 4
388
- }.to fail_with("expected: > 4\n got: 3")
389
- end
390
- end
391
-
392
- describe "expect(...).to be ==" do
393
- it "passes when == operator returns true" do
394
- expect(5).to be == 5
395
- end
396
-
397
- it "fails when == operator returns false" do
398
- expect {
399
- expect(3).to be == 4
400
- }.to fail_with("expected: == 4\n got: 3")
401
- end
402
-
403
- it 'works when the target overrides `#send`' do
404
- klass = Struct.new(:message) do
405
- def send
406
- :message_sent
407
- end
408
- end
409
-
410
- msg_1 = klass.new("hello")
411
- msg_2 = klass.new("hello")
412
- expect(msg_1).to be == msg_2
413
- end
414
- end
415
-
416
- describe "expect(...).to be =~" do
417
- it "passes when =~ operator returns true" do
418
- expect("a string").to be =~ /str/
419
- end
420
-
421
- it "fails when =~ operator returns false" do
422
- expect {
423
- expect("a string").to be =~ /blah/
424
- }.to fail_with(%Q|expected: =~ /blah/\n got: "a string"|)
425
- end
426
- end
427
-
428
- describe "should be =~", :uses_should do
429
- it "passes when =~ operator returns true" do
430
- "a string".should be =~ /str/
431
- end
432
-
433
- it "fails when =~ operator returns false" do
434
- expect {
435
- "a string".should be =~ /blah/
436
- }.to fail_with(%Q|expected: =~ /blah/\n got: "a string"|)
437
- end
438
- end
439
-
440
- describe "expect(...).to be ===" do
441
- it "passes when === operator returns true" do
442
- expect(Hash).to be === Hash.new
443
- end
444
-
445
- it "fails when === operator returns false" do
446
- expect {
447
- expect(Hash).to be === "not a hash"
448
- }.to fail_with(%[expected: === "not a hash"\n got: Hash])
449
- end
450
- end
451
-
452
- describe "expect(...).not_to with comparison operators" do
453
- it "coaches user to stop using operators with expect().not_to with numerical comparison operators" do
454
- expect {
455
- expect(5).not_to be < 6
456
- }.to fail_with("`expect(5).not_to be < 6` not only FAILED, it is a bit confusing.")
457
-
458
- expect {
459
- expect(5).not_to be <= 6
460
- }.to fail_with("`expect(5).not_to be <= 6` not only FAILED, it is a bit confusing.")
461
-
462
- expect {
463
- expect(6).not_to be > 5
464
- }.to fail_with("`expect(6).not_to be > 5` not only FAILED, it is a bit confusing.")
465
-
466
- expect {
467
- expect(6).not_to be >= 5
468
- }.to fail_with("`expect(6).not_to be >= 5` not only FAILED, it is a bit confusing.")
469
- end
470
-
471
- it "coaches users to stop using negation with string comparison operators" do
472
- expect {
473
- expect("foo").not_to be > "bar"
474
- }.to fail_with('`expect("foo").not_to be > "bar"` not only FAILED, it is a bit confusing.')
475
- end
476
- end
477
-
478
- describe "expect(...).not_to with equality operators" do
479
- it "raises normal error with expect().not_to with equality operators" do
480
- expect {
481
- expect(6).not_to be == 6
482
- }.to fail_with("`expect(6).not_to be == 6`")
483
-
484
- expect {
485
- expect(String).not_to be === "Hello"
486
- }.to fail_with('`expect(String).not_to be === "Hello"`')
487
- end
488
- end
489
-
490
- describe "expect(...).to be" do
491
- it "passes if actual is truthy" do
492
- expect(true).to be
493
- expect(1).to be
494
- end
495
-
496
- it "fails if actual is false" do
497
- expect {
498
- expect(false).to be
499
- }.to fail_with("expected false to evaluate to true")
500
- end
501
-
502
- it "fails if actual is nil" do
503
- expect {
504
- expect(nil).to be
505
- }.to fail_with("expected nil to evaluate to true")
506
- end
507
-
508
- it "describes itself" do
509
- expect(be.description).to eq "be"
510
- end
511
- end
512
-
513
- describe "expect(...).not_to be" do
514
- it "passes if actual is falsy" do
515
- expect(false).not_to be
516
- expect(nil).not_to be
517
- end
518
-
519
- it "fails on true" do
520
- expect {
521
- expect(true).not_to be
522
- }.to fail_with("expected true to evaluate to false")
523
- end
524
- end
525
-
526
- describe "expect(...).to be(value)" do
527
- it "delegates to equal" do
528
- matcher = equal(5)
529
- expect(self).to receive(:equal).with(5).and_return(matcher)
530
- expect(5).to be(5)
531
- end
532
- end
533
-
534
- describe "expect(...).not_to be(value)" do
535
- it "delegates to equal" do
536
- matcher = equal(4)
537
- expect(self).to receive(:equal).with(4).and_return(matcher)
538
- expect(5).not_to be(4)
539
- end
540
- end
541
-
542
- describe "'expect(...).to be' with operator" do
543
- it "includes 'be' in the description" do
544
- expect((be > 6).description).to match(/be > 6/)
545
- expect((be >= 6).description).to match(/be >= 6/)
546
- expect((be <= 6).description).to match(/be <= 6/)
547
- expect((be < 6).description).to match(/be < 6/)
548
- end
549
- end
550
-
551
-
552
- describe "arbitrary predicate with DelegateClass" do
553
- it "accesses methods defined in the delegating class (LH[#48])" do
554
- require 'delegate'
555
- class ArrayDelegate < DelegateClass(Array)
556
- def initialize(array)
557
- @internal_array = array
558
- super(@internal_array)
559
- end
560
-
561
- def large?
562
- @internal_array.size >= 5
563
- end
564
- end
565
-
566
- delegate = ArrayDelegate.new([1,2,3,4,5,6])
567
- expect(delegate).to be_large
568
- end
569
- end
570
-
571
- describe "be_a, be_an" do
572
- it "passes when class matches" do
573
- expect("foobar").to be_a(String)
574
- expect([1,2,3]).to be_an(Array)
575
- end
576
-
577
- it "fails when class does not match" do
578
- expect("foobar").not_to be_a(Hash)
579
- expect([1,2,3]).not_to be_an(Integer)
580
- end
581
- end
582
-
583
- describe "be_an_instance_of" do
584
- it "passes when direct class matches" do
585
- expect(5).to be_an_instance_of(Fixnum)
586
- end
587
-
588
- it "fails when class is higher up hierarchy" do
589
- expect(5).not_to be_an_instance_of(Numeric)
590
- end
591
- end
592
-