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,101 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec
4
- module Matchers
5
- describe "Legacy matchers" do
6
- shared_examples_for "a matcher written against a legacy protocol" do |matcher_class|
7
- matcher = matcher_class.new
8
- before { allow_deprecation }
9
-
10
- backwards_compat_matcher = Class.new(matcher_class) do
11
- def failure_message; "failure when positive"; end
12
- def failure_message_when_negated; "failure when negative"; end
13
- end.new
14
-
15
- it 'is still considered to be a matcher' do
16
- expect(Matchers.is_a_matcher?(matcher)).to be true
17
- end
18
-
19
- context 'when matched positively' do
20
- it 'returns the positive expectation failure message' do
21
- expect {
22
- expect(false).to matcher
23
- }.to fail_with("failure when positive")
24
- end
25
-
26
- it 'warns about the deprecated protocol' do
27
- expect_warn_deprecation_with_call_site(__FILE__, __LINE__ + 1, /legacy\s+RSpec\s+matcher/)
28
- expect(true).to matcher
29
- end
30
-
31
- it 'does not warn when it also defines the current methods (i.e. to be compatible on multiple RSpec versions)' do
32
- expect_no_deprecations
33
-
34
- expect {
35
- expect(false).to backwards_compat_matcher
36
- }.to fail_with("failure when positive")
37
- end
38
- end
39
-
40
- context 'when matched negatively' do
41
- it 'returns the negative expectation failure message' do
42
- expect {
43
- expect(true).not_to matcher
44
- }.to fail_with("failure when negative")
45
- end
46
-
47
- it 'warns about the deprecated protocol' do
48
- expect_warn_deprecation_with_call_site(__FILE__, __LINE__ + 1, /legacy\s+RSpec\s+matcher/)
49
- expect(false).not_to matcher
50
- end
51
-
52
- it 'does not warn when it also defines the current methods (i.e. to be compatible on multiple RSpec versions)' do
53
- expect_no_deprecations
54
-
55
- expect {
56
- expect(true).not_to backwards_compat_matcher
57
- }.to fail_with("failure when negative")
58
- end
59
-
60
- def pending_on_rbx
61
- return unless defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
62
- pending "intermittently fails on RBX due to https://github.com/rubinius/rubinius/issues/2845"
63
- end
64
-
65
- it 'calls `does_not_match?` if it is defined on the matcher' do
66
- pending_on_rbx
67
-
68
- called = false
69
- with_does_not_match = Class.new(matcher_class) do
70
- define_method(:does_not_match?) { |actual| called = true; !actual }
71
- end.new
72
-
73
- expect(false).not_to with_does_not_match
74
- expect(called).to be true
75
- end
76
- end
77
- end
78
-
79
- context "written using the RSpec 2.x `failure_message_for_should` and `failure_message_for_should_not` protocol" do
80
- matcher_class = Class.new do
81
- def matches?(actual); actual; end
82
- def failure_message_for_should; "failure when positive"; end
83
- def failure_message_for_should_not; "failure when negative"; end
84
- end
85
-
86
- it_behaves_like "a matcher written against a legacy protocol", matcher_class
87
- end
88
-
89
- context "written using the older `failure_message` and `negative_failure_message` protocol" do
90
- matcher_class = Class.new do
91
- def matches?(actual); actual; end
92
- def failure_message; "failure when positive"; end
93
- def negative_failure_message; "failure when negative"; end
94
- end
95
-
96
- it_behaves_like "a matcher written against a legacy protocol", matcher_class
97
- end
98
- end
99
- end
100
- end
101
-
@@ -1,74 +0,0 @@
1
- require 'spec_helper'
2
-
3
- main = self
4
- describe RSpec::Matchers do
5
- include ::RSpec::Support::InSubProcess
6
-
7
- it 'can be mixed into `main`' do
8
- in_sub_process do
9
- main.instance_eval do
10
- include RSpec::Matchers
11
- expect(3).to eq(3)
12
- expect(3).to be_odd
13
-
14
- expect {
15
- expect(4).to be_zero
16
- }.to fail_with("expected zero? to return true, got false")
17
- end
18
- end
19
- end
20
- end
21
-
22
- module RSpec
23
- module Matchers
24
- describe "built in matchers" do
25
- let(:matchers) do
26
- BuiltIn.constants.map { |n| BuiltIn.const_get(n) }.select do |m|
27
- m.method_defined?(:matches?) && m.method_defined?(:failure_message)
28
- end
29
- end
30
-
31
- specify "they all have defined #=== so they can be composable" do
32
- missing_threequals = matchers.select do |m|
33
- m.instance_method(:===).owner == ::Kernel
34
- end
35
-
36
- # This spec is merely to make sure we don't forget to make
37
- # a built-in matcher implement `===`. It doesn't check the
38
- # semantics of that. Use the "an RSpec matcher" shared
39
- # example group to actually check the semantics.
40
- expect(missing_threequals).to eq([])
41
- end
42
-
43
- specify "they all have defined #and and #or so they support compound expectations" do
44
- noncompound_matchers = matchers.reject do |m|
45
- m.method_defined?(:and) || m.method_defined?(:or)
46
- end
47
-
48
- expect(noncompound_matchers).to eq([])
49
- end
50
-
51
- shared_examples_for "a well-behaved method_missing hook" do
52
- include MinitestIntegration
53
-
54
- it "raises a NoMethodError (and not SystemStackError) for an undefined method" do
55
- with_minitest_loaded do
56
- expect { subject.some_undefined_method }.to raise_error(NoMethodError)
57
- end
58
- end
59
- end
60
-
61
- describe "RSpec::Matchers method_missing hook" do
62
- subject { self }
63
-
64
- it_behaves_like "a well-behaved method_missing hook"
65
-
66
- context 'when invoked in a Minitest::Test' do
67
- subject { Minitest::Test.allocate }
68
- it_behaves_like "a well-behaved method_missing hook"
69
- end
70
- end
71
- end
72
- end
73
- end
74
-
@@ -1,85 +0,0 @@
1
- require 'rspec/support/spec'
2
-
3
- RSpec::Support::Spec.setup_simplecov do
4
- minimum_coverage 97
5
- end
6
-
7
- Dir['./spec/support/**/*'].each {|f| require f}
8
-
9
- module FormattingSupport
10
- def dedent(string)
11
- string.gsub(/^\s+\|/, '').chomp
12
- end
13
- end
14
-
15
- RSpec::configure do |config|
16
- config.color_enabled = true
17
- config.order = :random
18
-
19
- config.include FormattingSupport
20
-
21
- config.expect_with :rspec do |expectations|
22
- $default_expectation_syntax = expectations.syntax
23
- expectations.syntax = :expect
24
- end
25
-
26
- config.mock_with :rspec do |mocks|
27
- mocks.syntax = :expect
28
- end
29
- end
30
-
31
- shared_context "with #should enabled", :uses_should do
32
- orig_syntax = nil
33
-
34
- before(:all) do
35
- orig_syntax = RSpec::Matchers.configuration.syntax
36
- RSpec::Matchers.configuration.syntax = [:expect, :should]
37
- end
38
-
39
- after(:all) do
40
- RSpec::Matchers.configuration.syntax = orig_syntax
41
- end
42
- end
43
-
44
- shared_context "with the default expectation syntax" do
45
- orig_syntax = nil
46
-
47
- before(:all) do
48
- orig_syntax = RSpec::Matchers.configuration.syntax
49
- RSpec::Matchers.configuration.reset_syntaxes_to_default
50
- end
51
-
52
- after(:all) do
53
- RSpec::Matchers.configuration.syntax = orig_syntax
54
- end
55
-
56
- end
57
-
58
- shared_context "with #should exclusively enabled", :uses_only_should do
59
- orig_syntax = nil
60
-
61
- before(:all) do
62
- orig_syntax = RSpec::Matchers.configuration.syntax
63
- RSpec::Matchers.configuration.syntax = :should
64
- end
65
-
66
- after(:all) do
67
- RSpec::Matchers.configuration.syntax = orig_syntax
68
- end
69
- end
70
-
71
- require 'rspec/support/spec/in_sub_process'
72
- module MinitestIntegration
73
- include ::RSpec::Support::InSubProcess
74
-
75
- def with_minitest_loaded
76
- in_sub_process do
77
- with_isolated_stderr do
78
- require 'minitest/autorun'
79
- end
80
-
81
- require 'rspec/expectations/minitest_integration'
82
- yield
83
- end
84
- end
85
- end
@@ -1,22 +0,0 @@
1
- RSpec::Matchers.define :include_method do |expected|
2
- match do |actual|
3
- actual.map { |m| m.to_s }.include?(expected.to_s)
4
- end
5
- end
6
-
7
- module RSpec
8
- module Matchers
9
- def fail
10
- raise_error(RSpec::Expectations::ExpectationNotMetError)
11
- end
12
-
13
- def fail_with(message)
14
- raise_error(RSpec::Expectations::ExpectationNotMetError, message)
15
- end
16
-
17
- def fail_matching(message)
18
- raise_error(RSpec::Expectations::ExpectationNotMetError, /#{Regexp.escape(message)}/)
19
- end
20
- end
21
- end
22
-
@@ -1,35 +0,0 @@
1
- shared_examples_for "an RSpec matcher" do |options|
2
- let(:valid_value) { options.fetch(:valid_value) }
3
- let(:invalid_value) { options.fetch(:invalid_value) }
4
-
5
- it 'preserves the symmetric property of `==`' do
6
- expect(matcher).to eq(matcher)
7
- expect(matcher).not_to eq(valid_value)
8
- expect(valid_value).not_to eq(matcher)
9
- end
10
-
11
- it 'matches a valid value when using #=== so it can be composed' do
12
- expect(matcher).to be === valid_value
13
- end
14
-
15
- it 'does not match an invalid value when using #=== so it can be composed' do
16
- expect(matcher).not_to be === invalid_value
17
- end
18
-
19
- matcher :always_passes do
20
- match { true }
21
- end
22
-
23
- matcher :always_fails do
24
- match { false }
25
- end
26
-
27
- it 'supports compound expectations by chaining `and`' do
28
- expect(valid_value).to matcher.and always_passes
29
- end
30
-
31
- it 'supports compound expectations by chaining `or`' do
32
- expect(valid_value).to matcher.or always_fails
33
- end
34
- end
35
-