rspec-support 3.9.3 → 3.12.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Changelog.md +62 -0
- data/README.md +3 -3
- data/lib/rspec/support/caller_filter.rb +3 -3
- data/lib/rspec/support/differ.rb +4 -4
- data/lib/rspec/support/encoded_string.rb +3 -3
- data/lib/rspec/support/method_signature_verifier.rb +3 -3
- data/lib/rspec/support/mutex.rb +1 -1
- data/lib/rspec/support/reentrant_mutex.rb +27 -10
- data/lib/rspec/support/ruby_features.rb +14 -6
- data/lib/rspec/support/source/token.rb +12 -5
- data/lib/rspec/support/source.rb +10 -0
- data/lib/rspec/support/spec/deprecation_helpers.rb +13 -29
- data/lib/rspec/support/spec/diff_helpers.rb +31 -0
- data/lib/rspec/support/spec/in_sub_process.rb +1 -3
- data/lib/rspec/support/spec/shell_out.rb +25 -9
- data/lib/rspec/support/spec/stderr_splitter.rb +1 -1
- data/lib/rspec/support/spec/string_matcher.rb +0 -1
- data/lib/rspec/support/spec.rb +6 -5
- data/lib/rspec/support/version.rb +1 -1
- data/lib/rspec/support/with_keywords_when_needed.rb +1 -1
- data/lib/rspec/support.rb +6 -1
- data.tar.gz.sig +0 -0
- metadata +6 -5
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5542244493fabc5ed010fb15a2df9ecbe1098e2e9a9ae92a81d4cc126ef2c31f
|
4
|
+
data.tar.gz: 47743f4bd2b89824843b3112999a6bf733ea6bc0c1305917048cf0fa341e9e6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e672b3b674c957f99e534406df56dc7417619ca44015378434a3e98e9be91ca8f81509ab0b6bba2ad460047ce74da8fb88d225d9ad3a3b6a8676a977971dd4d9
|
7
|
+
data.tar.gz: aee8eb87ddeef4c23b83e5a73b5fa450d360f0671ba796e4471e16be2daf34b804b62764d703c750bbacbd96243e3f100676d54be034f62fc1a052e5c8d90482
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,3 +1,65 @@
|
|
1
|
+
### Development
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.12.0...3-12-maintenance)
|
3
|
+
|
4
|
+
### 3.12.0 / 2022-10-26
|
5
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.11.1...v3.12.0)
|
6
|
+
Enhancements:
|
7
|
+
|
8
|
+
* Add `RSpec::Support::RubyFeatures.distincts_kw_args_from_positional_hash?`
|
9
|
+
(Jean byroot Boussier, #535)
|
10
|
+
|
11
|
+
### 3.11.1 / 2022-09-12
|
12
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.11.0...v3.11.1)
|
13
|
+
|
14
|
+
Bug Fixes:
|
15
|
+
|
16
|
+
* Fix ripper detection on TruffleRuby. (Brandon Fish, #541)
|
17
|
+
|
18
|
+
### 3.11.0 / 2022-02-09
|
19
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.3...v3.11.0)
|
20
|
+
|
21
|
+
No changes. Released to support other RSpec releases.
|
22
|
+
|
23
|
+
### 3.10.3 / 2021-11-03
|
24
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.2...v3.10.3)
|
25
|
+
|
26
|
+
Bug Fixes:
|
27
|
+
|
28
|
+
* Use `Mutex#owned?` to allow `RSpec::Support::ReentrantMutex` to work in
|
29
|
+
nested Fibers on Ruby 3.0 and later. (Benoit Daloze, #503, #504)
|
30
|
+
* Support `end`-less methods in `RSpec::Support::Source::Token`
|
31
|
+
so that RSpec won't hang when an `end`-less method raises an error. (Yuji Nakayama, #505)
|
32
|
+
|
33
|
+
### 3.10.2 / 2021-01-28
|
34
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.1...v3.10.2)
|
35
|
+
|
36
|
+
Bug Fixes:
|
37
|
+
|
38
|
+
* Fix issue with `RSpec::Support.define_optimized_require_for_rspec` on JRuby
|
39
|
+
9.1.17.0 (Jon Rowe, #492)
|
40
|
+
|
41
|
+
### 3.10.1 / 2020-12-27
|
42
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.0...v3.10.1)
|
43
|
+
|
44
|
+
Bug Fixes:
|
45
|
+
|
46
|
+
* Fix deprecation expectations to fail correctly when
|
47
|
+
asserting on messages. (Phil Pirozhkov, #453)
|
48
|
+
|
49
|
+
### 3.10.0 / 2020-10-30
|
50
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.4...v3.10.0)
|
51
|
+
|
52
|
+
No changes. Released to support other RSpec releases.
|
53
|
+
|
54
|
+
### 3.9.4 / 2020-10-23
|
55
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.3...v3.9.4)
|
56
|
+
|
57
|
+
Bug Fixes:
|
58
|
+
|
59
|
+
* Flag ripper as supported on Truffle Ruby. (Brandon Fish, #427)
|
60
|
+
* Prevent stubbing `File.read` from breaking source extraction.
|
61
|
+
(Jon Rowe, #431)
|
62
|
+
|
1
63
|
### 3.9.3 / 2020-05-02
|
2
64
|
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.2...v3.9.3)
|
3
65
|
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# RSpec::Support
|
1
|
+
# RSpec::Support [](https://github.com/rspec/rspec-support/actions)
|
2
2
|
|
3
3
|
`RSpec::Support` provides common functionality to `RSpec::Core`,
|
4
4
|
`RSpec::Expectations` and `RSpec::Mocks`. It is considered
|
@@ -8,12 +8,12 @@ suitable for internal use only at this time.
|
|
8
8
|
|
9
9
|
Install one or more of the `RSpec` gems.
|
10
10
|
|
11
|
-
Want to run against the `
|
11
|
+
Want to run against the `main` branch? You'll need to include the dependent
|
12
12
|
RSpec repos as well. Add the following to your `Gemfile`:
|
13
13
|
|
14
14
|
```ruby
|
15
15
|
%w[rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
|
16
|
-
gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => '
|
16
|
+
gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => 'main'
|
17
17
|
end
|
18
18
|
```
|
19
19
|
|
@@ -25,7 +25,7 @@ module RSpec
|
|
25
25
|
# when `CallerFilter.first_non_rspec_line` is called from the top level of a required
|
26
26
|
# file, but it depends on if rubygems is loaded or not. We don't want to have to deal
|
27
27
|
# with this complexity in our `RSpec.deprecate` calls, so we ignore it here.
|
28
|
-
IGNORE_REGEX = Regexp.union(LIB_REGEX, "rubygems/core_ext/kernel_require.rb")
|
28
|
+
IGNORE_REGEX = Regexp.union(LIB_REGEX, "rubygems/core_ext/kernel_require.rb", "<internal:")
|
29
29
|
|
30
30
|
if RSpec::Support::RubyFeatures.caller_locations_supported?
|
31
31
|
# This supports args because it's more efficient when the caller specifies
|
@@ -34,7 +34,7 @@ module RSpec
|
|
34
34
|
# be found in a small number of stack frames from `skip_frames`.
|
35
35
|
#
|
36
36
|
# Note that there is a risk to passing a `skip_frames` value that is too high:
|
37
|
-
# If it
|
37
|
+
# If it skipped the first non-rspec line, then this method would return the
|
38
38
|
# 2nd or 3rd (or whatever) non-rspec line. Thus, you generally shouldn't pass
|
39
39
|
# values for these parameters, particularly since most places that use this are
|
40
40
|
# not hot spots (generally it gets used for deprecation warnings). However,
|
@@ -69,7 +69,7 @@ module RSpec
|
|
69
69
|
return line.to_s if line
|
70
70
|
|
71
71
|
skip_frames += increment
|
72
|
-
increment
|
72
|
+
increment *= 2 # The choice of two here is arbitrary.
|
73
73
|
end
|
74
74
|
end
|
75
75
|
else
|
data/lib/rspec/support/differ.rb
CHANGED
@@ -6,7 +6,7 @@ require 'pp'
|
|
6
6
|
|
7
7
|
module RSpec
|
8
8
|
module Support
|
9
|
-
# rubocop:disable ClassLength
|
9
|
+
# rubocop:disable Metrics/ClassLength
|
10
10
|
class Differ
|
11
11
|
def diff(actual, expected)
|
12
12
|
diff = ""
|
@@ -24,7 +24,7 @@ module RSpec
|
|
24
24
|
diff.to_s
|
25
25
|
end
|
26
26
|
|
27
|
-
# rubocop:disable MethodLength
|
27
|
+
# rubocop:disable Metrics/MethodLength
|
28
28
|
def diff_as_string(actual, expected)
|
29
29
|
encoding = EncodedString.pick_encoding(actual, expected)
|
30
30
|
|
@@ -52,7 +52,7 @@ module RSpec
|
|
52
52
|
rescue Encoding::CompatibilityError
|
53
53
|
handle_encoding_errors(actual, expected)
|
54
54
|
end
|
55
|
-
# rubocop:enable MethodLength
|
55
|
+
# rubocop:enable Metrics/MethodLength
|
56
56
|
|
57
57
|
def diff_as_object(actual, expected)
|
58
58
|
actual_as_string = object_to_string(actual)
|
@@ -210,6 +210,6 @@ module RSpec
|
|
210
210
|
end
|
211
211
|
end
|
212
212
|
end
|
213
|
-
# rubocop:enable ClassLength
|
213
|
+
# rubocop:enable Metrics/ClassLength
|
214
214
|
end
|
215
215
|
end
|
@@ -60,7 +60,7 @@ module RSpec
|
|
60
60
|
# vs "\x80".encode('UTF-8','ASCII-8BIT', undef: :replace, replace: '<undef>')
|
61
61
|
# # => '<undef>'
|
62
62
|
# Encoding::CompatibilityError
|
63
|
-
# when Encoding.
|
63
|
+
# when Encoding.compatible?(str1, str2) is nil
|
64
64
|
# e.g. utf_16le_emoji_string.split("\n")
|
65
65
|
# e.g. valid_unicode_string.encode(utf8_encoding) << ascii_string
|
66
66
|
# Encoding::InvalidByteSequenceError:
|
@@ -92,7 +92,7 @@ module RSpec
|
|
92
92
|
string = remove_invalid_bytes(string)
|
93
93
|
string.encode(@encoding)
|
94
94
|
rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError
|
95
|
-
# Originally defined as a constant to avoid
|
95
|
+
# Originally defined as a constant to avoid unneeded allocations, this hash must
|
96
96
|
# be defined inline (without {}) to avoid warnings on Ruby 2.7
|
97
97
|
#
|
98
98
|
# In MRI 2.1 'invalid: :replace' changed to also replace an invalid byte sequence
|
@@ -108,7 +108,7 @@ module RSpec
|
|
108
108
|
#
|
109
109
|
string.encode(@encoding, :invalid => :replace, :undef => :replace, :replace => REPLACE)
|
110
110
|
rescue Encoding::ConverterNotFoundError
|
111
|
-
# Originally defined as a constant to avoid
|
111
|
+
# Originally defined as a constant to avoid unneeded allocations, this hash must
|
112
112
|
# be defined inline (without {}) to avoid warnings on Ruby 2.7
|
113
113
|
string.dup.force_encoding(@encoding).encode(:invalid => :replace, :replace => REPLACE)
|
114
114
|
end
|
@@ -8,7 +8,7 @@ module RSpec
|
|
8
8
|
# keyword args of a given method.
|
9
9
|
#
|
10
10
|
# @private
|
11
|
-
class MethodSignature # rubocop:disable ClassLength
|
11
|
+
class MethodSignature # rubocop:disable Metrics/ClassLength
|
12
12
|
attr_reader :min_non_kw_args, :max_non_kw_args, :optional_kw_args, :required_kw_args
|
13
13
|
|
14
14
|
def initialize(method)
|
@@ -122,7 +122,7 @@ module RSpec
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
@max_non_kw_args = @min_non_kw_args
|
125
|
+
@max_non_kw_args = @min_non_kw_args + optional_non_kw_args
|
126
126
|
@allowed_kw_args = @required_kw_args + @optional_kw_args
|
127
127
|
end
|
128
128
|
else
|
@@ -285,7 +285,7 @@ module RSpec
|
|
285
285
|
@arbitrary_kw_args = @unlimited_args = false
|
286
286
|
end
|
287
287
|
|
288
|
-
def with_expectation(expectation) # rubocop:disable MethodLength
|
288
|
+
def with_expectation(expectation) # rubocop:disable Metrics/MethodLength
|
289
289
|
return self unless MethodSignatureExpectation === expectation
|
290
290
|
|
291
291
|
if expectation.empty?
|
data/lib/rspec/support/mutex.rb
CHANGED
@@ -9,7 +9,7 @@ module RSpec
|
|
9
9
|
# Some methods we don't need are deleted. Anything I don't
|
10
10
|
# understand (there's quite a bit, actually) is left in.
|
11
11
|
#
|
12
|
-
# Some
|
12
|
+
# Some formatting changes are made to appease the robot overlord:
|
13
13
|
# https://travis-ci.org/rspec/rspec-core/jobs/54410874
|
14
14
|
# @private
|
15
15
|
class Mutex
|
@@ -27,17 +27,34 @@ module RSpec
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
# This is fixing a bug #501 that is specific to Ruby 3.0. The new implementation
|
31
|
+
# depends on `owned?` that was introduced in Ruby 2.0, so both should work for Ruby 2.x.
|
32
|
+
if RUBY_VERSION.to_f >= 3.0
|
33
|
+
def enter
|
34
|
+
@mutex.lock unless @mutex.owned?
|
35
|
+
@count += 1
|
36
|
+
end
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
def exit
|
39
|
+
unless @mutex.owned?
|
40
|
+
raise ThreadError, "Attempt to unlock a mutex which is locked by another thread/fiber"
|
41
|
+
end
|
42
|
+
@count -= 1
|
43
|
+
@mutex.unlock if @count == 0
|
44
|
+
end
|
45
|
+
else
|
46
|
+
def enter
|
47
|
+
@mutex.lock if @owner != Thread.current
|
48
|
+
@owner = Thread.current
|
49
|
+
@count += 1
|
50
|
+
end
|
51
|
+
|
52
|
+
def exit
|
53
|
+
@count -= 1
|
54
|
+
return unless @count == 0
|
55
|
+
@owner = nil
|
56
|
+
@mutex.unlock
|
57
|
+
end
|
41
58
|
end
|
42
59
|
end
|
43
60
|
|
@@ -7,7 +7,7 @@ module RSpec
|
|
7
7
|
#
|
8
8
|
# Provides query methods for different OS or OS features.
|
9
9
|
module OS
|
10
|
-
|
10
|
+
module_function
|
11
11
|
|
12
12
|
def windows?
|
13
13
|
!!(RbConfig::CONFIG['host_os'] =~ /cygwin|mswin|mingw|bccwin|wince|emx/)
|
@@ -22,7 +22,7 @@ module RSpec
|
|
22
22
|
#
|
23
23
|
# Provides query methods for different rubies
|
24
24
|
module Ruby
|
25
|
-
|
25
|
+
module_function
|
26
26
|
|
27
27
|
def jruby?
|
28
28
|
RUBY_PLATFORM == 'java'
|
@@ -58,9 +58,9 @@ module RSpec
|
|
58
58
|
# Provides query methods for ruby features that differ among
|
59
59
|
# implementations.
|
60
60
|
module RubyFeatures
|
61
|
-
|
61
|
+
module_function
|
62
62
|
|
63
|
-
if Ruby.jruby?
|
63
|
+
if Ruby.jruby? && RUBY_VERSION.to_f < 1.9
|
64
64
|
# On JRuby 1.7 `--1.8` mode, `Process.respond_to?(:fork)` returns true,
|
65
65
|
# but when you try to fork, it raises an error:
|
66
66
|
# NotImplementedError: fork is not available on this platform
|
@@ -105,16 +105,20 @@ module RSpec
|
|
105
105
|
end
|
106
106
|
ripper_requirements = [ComparableVersion.new(RUBY_VERSION) >= '1.9.2']
|
107
107
|
|
108
|
-
ripper_requirements.push(false) if Ruby.rbx?
|
108
|
+
ripper_requirements.push(false) if Ruby.rbx?
|
109
109
|
|
110
110
|
if Ruby.jruby?
|
111
111
|
ripper_requirements.push(Ruby.jruby_version >= '1.7.5')
|
112
112
|
# Ripper on JRuby 9.0.0.0.rc1 - 9.1.8.0 reports wrong line number
|
113
113
|
# or cannot parse source including `:if`.
|
114
|
-
# Ripper on JRuby 9.x.x.x < 9.
|
114
|
+
# Ripper on JRuby 9.x.x.x < 9.1.17.0 can't handle keyword arguments
|
115
|
+
# Neither can JRuby 9.2, e.g. < 9.2.1.0
|
115
116
|
ripper_requirements.push(!Ruby.jruby_version.between?('9.0.0.0.rc1', '9.2.0.0'))
|
116
117
|
end
|
117
118
|
|
119
|
+
# TruffleRuby disables ripper due to low performance
|
120
|
+
ripper_requirements.push(false) if Ruby.truffleruby?
|
121
|
+
|
118
122
|
if ripper_requirements.all?
|
119
123
|
def ripper_supported?
|
120
124
|
true
|
@@ -125,6 +129,10 @@ module RSpec
|
|
125
129
|
end
|
126
130
|
end
|
127
131
|
|
132
|
+
def distincts_kw_args_from_positional_hash?
|
133
|
+
RUBY_VERSION >= '3.0.0'
|
134
|
+
end
|
135
|
+
|
128
136
|
if Ruby.mri?
|
129
137
|
def kw_args_supported?
|
130
138
|
RUBY_VERSION >= '2.0.0'
|
@@ -54,12 +54,16 @@ module RSpec
|
|
54
54
|
type == :on_kw
|
55
55
|
end
|
56
56
|
|
57
|
+
def equals_operator?
|
58
|
+
type == :on_op && string == '='
|
59
|
+
end
|
60
|
+
|
57
61
|
def opening?
|
58
62
|
opening_delimiter? || opening_keyword?
|
59
63
|
end
|
60
64
|
|
61
65
|
def closed_by?(other)
|
62
|
-
|
66
|
+
delimiter_closed_by?(other) || keyword_closed_by?(other)
|
63
67
|
end
|
64
68
|
|
65
69
|
private
|
@@ -73,13 +77,16 @@ module RSpec
|
|
73
77
|
CLOSING_KEYWORDS_BY_OPENING_KEYWORD.key?(string)
|
74
78
|
end
|
75
79
|
|
76
|
-
def
|
80
|
+
def delimiter_closed_by?(other)
|
77
81
|
other.type == CLOSING_TYPES_BY_OPENING_TYPE[type]
|
78
82
|
end
|
79
83
|
|
80
|
-
def
|
81
|
-
return false unless
|
82
|
-
other.string == CLOSING_KEYWORDS_BY_OPENING_KEYWORD[string]
|
84
|
+
def keyword_closed_by?(other)
|
85
|
+
return false unless keyword?
|
86
|
+
return true if other.string == CLOSING_KEYWORDS_BY_OPENING_KEYWORD[string]
|
87
|
+
|
88
|
+
# Ruby 3's `end`-less method definition: `def method_name = body`
|
89
|
+
string == 'def' && other.equals_operator? && location.line == other.location.line
|
83
90
|
end
|
84
91
|
end
|
85
92
|
end
|
data/lib/rspec/support/source.rb
CHANGED
@@ -8,6 +8,16 @@ module RSpec
|
|
8
8
|
class Source
|
9
9
|
attr_reader :source, :path
|
10
10
|
|
11
|
+
# This class protects us against having File read and expand_path
|
12
|
+
# stubbed out within tests.
|
13
|
+
class File
|
14
|
+
class << self
|
15
|
+
[:read, :expand_path].each do |method_name|
|
16
|
+
define_method(method_name, &::File.method(method_name))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
11
21
|
def self.from_file(path)
|
12
22
|
source = File.read(path)
|
13
23
|
new(source, path)
|
@@ -1,35 +1,22 @@
|
|
1
1
|
module RSpecHelpers
|
2
|
-
def expect_no_deprecation
|
3
|
-
expect(RSpec.configuration.reporter).not_to receive(:deprecation)
|
4
|
-
end
|
5
|
-
|
6
2
|
def expect_deprecation_with_call_site(file, line, snippet=//)
|
7
|
-
expect(RSpec.configuration.reporter).to receive(:deprecation)
|
8
|
-
|
9
|
-
expect(options[:deprecated]).to match(snippet)
|
10
|
-
end
|
3
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).
|
4
|
+
with(include(:deprecated => match(snippet), :call_site => include([file, line].join(':'))))
|
11
5
|
end
|
12
6
|
|
13
7
|
def expect_deprecation_without_call_site(snippet=//)
|
14
|
-
expect(RSpec.configuration.reporter).to receive(:deprecation)
|
15
|
-
|
16
|
-
expect(options[:deprecated]).to match(snippet)
|
17
|
-
end
|
8
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).
|
9
|
+
with(include(:deprecated => match(snippet), :call_site => eq(nil)))
|
18
10
|
end
|
19
11
|
|
20
12
|
def expect_warn_deprecation_with_call_site(file, line, snippet=//)
|
21
|
-
expect(RSpec.configuration.reporter).to receive(:deprecation)
|
22
|
-
message
|
23
|
-
expect(message).to match(snippet)
|
24
|
-
expect(message).to include([file, line].join(':'))
|
25
|
-
end
|
13
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).
|
14
|
+
with(include(:message => match(snippet), :call_site => include([file, line].join(':'))))
|
26
15
|
end
|
27
16
|
|
28
17
|
def expect_warn_deprecation(snippet=//)
|
29
|
-
expect(RSpec.configuration.reporter).to receive(:deprecation)
|
30
|
-
message
|
31
|
-
expect(message).to match(snippet)
|
32
|
-
end
|
18
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).
|
19
|
+
with(include(:message => match(snippet)))
|
33
20
|
end
|
34
21
|
|
35
22
|
def allow_deprecation
|
@@ -39,19 +26,16 @@ module RSpecHelpers
|
|
39
26
|
def expect_no_deprecations
|
40
27
|
expect(RSpec.configuration.reporter).not_to receive(:deprecation)
|
41
28
|
end
|
29
|
+
alias expect_no_deprecation expect_no_deprecations
|
42
30
|
|
43
31
|
def expect_warning_without_call_site(expected=//)
|
44
|
-
expect(::Kernel).to receive(:warn)
|
45
|
-
|
46
|
-
expect(message).to_not match(/Called from/)
|
47
|
-
end
|
32
|
+
expect(::Kernel).to receive(:warn).
|
33
|
+
with(match(expected).and(satisfy { |message| !(/Called from/ =~ message) }))
|
48
34
|
end
|
49
35
|
|
50
36
|
def expect_warning_with_call_site(file, line, expected=//)
|
51
|
-
expect(::Kernel).to receive(:warn)
|
52
|
-
|
53
|
-
expect(message).to match(/Called from #{file}:#{line}/)
|
54
|
-
end
|
37
|
+
expect(::Kernel).to receive(:warn).
|
38
|
+
with(match(expected).and(match(/Called from #{file}:#{line}/)))
|
55
39
|
end
|
56
40
|
|
57
41
|
def expect_no_warnings
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'diff/lcs'
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Support
|
5
|
+
module Spec
|
6
|
+
module DiffHelpers
|
7
|
+
# In the updated version of diff-lcs several diff headers change format slightly
|
8
|
+
# compensate for this and change minimum version in RSpec 4
|
9
|
+
if ::Diff::LCS::VERSION.to_f < 1.4
|
10
|
+
def one_line_header(line_number=2)
|
11
|
+
"-1,#{line_number} +1,#{line_number}"
|
12
|
+
end
|
13
|
+
else
|
14
|
+
def one_line_header(_=2)
|
15
|
+
"-1 +1"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if Diff::LCS::VERSION.to_f < 1.4 || Diff::LCS::VERSION >= "1.4.4"
|
20
|
+
def removing_two_line_header
|
21
|
+
"-1,3 +1"
|
22
|
+
end
|
23
|
+
else
|
24
|
+
def removing_two_line_header
|
25
|
+
"-1,3 +1,5"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -7,8 +7,7 @@ module RSpec
|
|
7
7
|
|
8
8
|
# Useful as a way to isolate a global change to a subprocess.
|
9
9
|
|
10
|
-
# rubocop:disable MethodLength
|
11
|
-
def in_sub_process(prevent_warnings=true)
|
10
|
+
def in_sub_process(prevent_warnings=true) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
12
11
|
exception_reader, exception_writer = IO.pipe
|
13
12
|
result_reader, result_writer = IO.pipe
|
14
13
|
|
@@ -46,7 +45,6 @@ module RSpec
|
|
46
45
|
result_reader.close
|
47
46
|
result
|
48
47
|
end
|
49
|
-
# rubocop:enable MethodLength
|
50
48
|
alias :in_sub_process_if_possible :in_sub_process
|
51
49
|
|
52
50
|
def marshal_dump_with_unmarshable_object_handling(object)
|
@@ -53,19 +53,35 @@ module RSpec
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
|
57
|
-
|
56
|
+
LINES_TO_IGNORE =
|
57
|
+
[
|
58
58
|
# Ignore bundler warning.
|
59
|
-
|
59
|
+
%r{bundler/source/rubygems},
|
60
60
|
# Ignore bundler + rubygems warning.
|
61
|
-
|
62
|
-
|
61
|
+
%r{site_ruby/\d\.\d\.\d/rubygems},
|
62
|
+
%r{jruby-\d\.\d\.\d+\.\d/lib/ruby/stdlib/rubygems},
|
63
63
|
# This is required for windows for some reason
|
64
|
-
|
64
|
+
%r{lib/bundler/rubygems},
|
65
65
|
# This is a JRuby file that generates warnings on 9.0.3.0
|
66
|
-
|
66
|
+
%r{lib/ruby/stdlib/jar},
|
67
67
|
# This is a JRuby file that generates warnings on 9.1.7.0
|
68
|
-
|
68
|
+
%r{org/jruby/RubyKernel\.java},
|
69
|
+
# This is a JRuby gem that generates warnings on 9.1.7.0
|
70
|
+
%r{ffi-1\.13\.\d+-java},
|
71
|
+
%r{uninitialized constant FFI},
|
72
|
+
# These are related to the above, there is a warning about io from FFI
|
73
|
+
%r{jruby-\d\.\d\.\d+\.\d/lib/ruby/stdlib/io},
|
74
|
+
%r{io/console on JRuby shells out to stty for most operations},
|
75
|
+
# This is a JRuby 9.1.17.0 error on Github Actions
|
76
|
+
%r{io/console not supported; tty will not be manipulated},
|
77
|
+
# This is a JRuby 9.2.1.x error
|
78
|
+
%r{jruby/kernel/gem_prelude},
|
79
|
+
%r{lib/jruby\.jar!/jruby/preludes},
|
80
|
+
]
|
81
|
+
|
82
|
+
def strip_known_warnings(input)
|
83
|
+
input.split("\n").reject do |l|
|
84
|
+
LINES_TO_IGNORE.any? { |to_ignore| l =~ to_ignore } ||
|
69
85
|
# Remove blank lines
|
70
86
|
l == "" || l.nil?
|
71
87
|
end.join("\n")
|
@@ -76,7 +92,7 @@ module RSpec
|
|
76
92
|
if Ruby.jruby?
|
77
93
|
def filter(output)
|
78
94
|
output.each_line.reject do |line|
|
79
|
-
line.include?("lib/ruby/shared/rubygems
|
95
|
+
line.include?("lib/ruby/shared/rubygems")
|
80
96
|
end.join($/)
|
81
97
|
end
|
82
98
|
else
|
@@ -39,7 +39,7 @@ module RSpec
|
|
39
39
|
def write(line)
|
40
40
|
return if line =~ %r{^\S+/gems/\S+:\d+: warning:} # http://rubular.com/r/kqeUIZOfPG
|
41
41
|
|
42
|
-
# Ruby 2.7.0 warnings from keyword
|
42
|
+
# Ruby 2.7.0 warnings from keyword arguments span multiple lines, extend check above
|
43
43
|
# to look for the next line.
|
44
44
|
return if @last_line =~ %r{^\S+/gems/\S+:\d+: warning:} &&
|
45
45
|
line =~ %r{warning: The called method .* is defined here}
|
data/lib/rspec/support/spec.rb
CHANGED
@@ -2,6 +2,7 @@ require 'rspec/support'
|
|
2
2
|
require 'rspec/support/spec/in_sub_process'
|
3
3
|
|
4
4
|
RSpec::Support.require_rspec_support "spec/deprecation_helpers"
|
5
|
+
RSpec::Support.require_rspec_support "spec/diff_helpers"
|
5
6
|
RSpec::Support.require_rspec_support "spec/with_isolated_stderr"
|
6
7
|
RSpec::Support.require_rspec_support "spec/stderr_splitter"
|
7
8
|
RSpec::Support.require_rspec_support "spec/formatting_support"
|
@@ -35,9 +36,9 @@ RSpec.configure do |c|
|
|
35
36
|
|
36
37
|
c.example_status_persistence_file_path = "./spec/examples.txt"
|
37
38
|
|
38
|
-
c.define_derived_metadata :
|
39
|
-
meta[:pending] ||= "This spec fails on
|
40
|
-
end if ENV['
|
39
|
+
c.define_derived_metadata :failing_on_windows_ci do |meta|
|
40
|
+
meta[:pending] ||= "This spec fails on Windows CI and needs someone to fix it."
|
41
|
+
end if RSpec::Support::OS.windows? && ENV['CI']
|
41
42
|
end
|
42
43
|
|
43
44
|
module RSpec
|
@@ -64,8 +65,8 @@ module RSpec
|
|
64
65
|
|
65
66
|
def self.start_simplecov(&block)
|
66
67
|
SimpleCov.start do
|
67
|
-
add_filter "
|
68
|
-
add_filter "
|
68
|
+
add_filter "bundle/"
|
69
|
+
add_filter "tmp/"
|
69
70
|
add_filter do |source_file|
|
70
71
|
# Filter out `spec` directory except when it is under `lib`
|
71
72
|
# (as is the case in rspec-support)
|
@@ -9,7 +9,7 @@ module RSpec
|
|
9
9
|
module_function
|
10
10
|
|
11
11
|
if RSpec::Support::RubyFeatures.kw_args_supported?
|
12
|
-
# Remove this in RSpec 4 in favour of
|
12
|
+
# Remove this in RSpec 4 in favour of explicitly passed in kwargs where
|
13
13
|
# this is used. Works around a warning in Ruby 2.7
|
14
14
|
|
15
15
|
def class_exec(klass, *args, &block)
|
data/lib/rspec/support.rb
CHANGED
@@ -14,7 +14,12 @@ module RSpec
|
|
14
14
|
def self.define_optimized_require_for_rspec(lib, &require_relative)
|
15
15
|
name = "require_rspec_#{lib}"
|
16
16
|
|
17
|
-
if Kernel.respond_to?(:
|
17
|
+
if RUBY_PLATFORM == 'java' && !Kernel.respond_to?(:require)
|
18
|
+
# JRuby 9.1.17.0 has developed a regression for require
|
19
|
+
(class << self; self; end).__send__(:define_method, name) do |f|
|
20
|
+
Kernel.send(:require, "rspec/#{lib}/#{f}")
|
21
|
+
end
|
22
|
+
elsif Kernel.respond_to?(:require_relative)
|
18
23
|
(class << self; self; end).__send__(:define_method, name) do |f|
|
19
24
|
require_relative.call("#{lib}/#{f}")
|
20
25
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Chelimsky
|
@@ -48,7 +48,7 @@ cert_chain:
|
|
48
48
|
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
|
49
49
|
F3MdtaDehhjC
|
50
50
|
-----END CERTIFICATE-----
|
51
|
-
date:
|
51
|
+
date: 2022-10-26 00:00:00.000000000 Z
|
52
52
|
dependencies:
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: rake
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/rspec/support/source/token.rb
|
109
109
|
- lib/rspec/support/spec.rb
|
110
110
|
- lib/rspec/support/spec/deprecation_helpers.rb
|
111
|
+
- lib/rspec/support/spec/diff_helpers.rb
|
111
112
|
- lib/rspec/support/spec/formatting_support.rb
|
112
113
|
- lib/rspec/support/spec/in_sub_process.rb
|
113
114
|
- lib/rspec/support/spec/library_wide_checks.rb
|
@@ -124,7 +125,7 @@ licenses:
|
|
124
125
|
- MIT
|
125
126
|
metadata:
|
126
127
|
bug_tracker_uri: https://github.com/rspec/rspec-support/issues
|
127
|
-
changelog_uri: https://github.com/rspec/rspec-support/blob/v3.
|
128
|
+
changelog_uri: https://github.com/rspec/rspec-support/blob/v3.12.0/Changelog.md
|
128
129
|
documentation_uri: https://rspec.info/documentation/
|
129
130
|
mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
|
130
131
|
source_code_uri: https://github.com/rspec/rspec-support
|
@@ -144,8 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
145
|
- !ruby/object:Gem::Version
|
145
146
|
version: '0'
|
146
147
|
requirements: []
|
147
|
-
rubygems_version: 3.1.
|
148
|
+
rubygems_version: 3.1.6
|
148
149
|
signing_key:
|
149
150
|
specification_version: 4
|
150
|
-
summary: rspec-support-3.
|
151
|
+
summary: rspec-support-3.12.0
|
151
152
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|