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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f561f278914c539fc9babd8c48285401c81f060a739c84b4cab642eb38b33af
4
- data.tar.gz: 8037220124b5c39df3fe2b68cf771f6c5bfcabf74a2fe6cd81d59657c4210afe
3
+ metadata.gz: 5542244493fabc5ed010fb15a2df9ecbe1098e2e9a9ae92a81d4cc126ef2c31f
4
+ data.tar.gz: 47743f4bd2b89824843b3112999a6bf733ea6bc0c1305917048cf0fa341e9e6b
5
5
  SHA512:
6
- metadata.gz: dc9aef51132154fe8574dd1500b8ebfc76062476875f6b49d1d8556fa112b1f327b73bcb0e68a19e9b0da3d13281ca9625855f22c45df84030b2caca973e3a81
7
- data.tar.gz: a7699d54e238b3bf20d77944f8ed6e13bb7e51daaca0937676c7261d98b36b7bcfd2b38af25b687d8d1a52991f06aad9499908f9fdc6b5f7eac5539162db45b2
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 [![Build Status](https://github.com/rspec/rspec-support/workflows/RSpec%20CI/badge.svg)](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 `master` branch? You'll need to include the dependent
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 => 'master'
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 skippped the first non-rspec line, then this method would return the
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 *= 2 # The choice of two here is arbitrary.
72
+ increment *= 2 # The choice of two here is arbitrary.
73
73
  end
74
74
  end
75
75
  else
@@ -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.compatibile?(str1, str2) is nil
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 uneeded allocations, this hash must
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 uneeded allocations, this hash must
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 + optional_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?
@@ -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 formating changes are made to appease the robot overlord:
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
- def enter
31
- @mutex.lock if @owner != Thread.current
32
- @owner = Thread.current
33
- @count += 1
34
- end
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
- def exit
37
- @count -= 1
38
- return unless @count == 0
39
- @owner = nil
40
- @mutex.unlock
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
- module_function
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
- module_function
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
- module_function
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? || Ruby.truffleruby?
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.2.1.0 can't handle keyword arguments.
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
- closed_by_delimiter?(other) || closed_by_keyword?(other)
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 closed_by_delimiter?(other)
80
+ def delimiter_closed_by?(other)
77
81
  other.type == CLOSING_TYPES_BY_OPENING_TYPE[type]
78
82
  end
79
83
 
80
- def closed_by_keyword?(other)
81
- return false unless other.keyword?
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
@@ -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) do |options|
8
- expect(options[:call_site]).to include([file, line].join(':'))
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) do |options|
15
- expect(options[:call_site]).to eq nil
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) do |options|
22
- message = options[: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) do |options|
30
- message = options[: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) do |message|
45
- expect(message).to match expected
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) do |message|
52
- expect(message).to match expected
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
- def strip_known_warnings(input)
57
- input.split("\n").reject do |l|
56
+ LINES_TO_IGNORE =
57
+ [
58
58
  # Ignore bundler warning.
59
- l =~ %r{bundler/source/rubygems} ||
59
+ %r{bundler/source/rubygems},
60
60
  # Ignore bundler + rubygems warning.
61
- l =~ %r{site_ruby/\d\.\d\.\d/rubygems} ||
62
- l =~ %r{jruby-\d\.\d\.\d\.\d/lib/ruby/stdlib/rubygems} ||
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
- l =~ %r{lib/bundler/rubygems} ||
64
+ %r{lib/bundler/rubygems},
65
65
  # This is a JRuby file that generates warnings on 9.0.3.0
66
- l =~ %r{lib/ruby/stdlib/jar} ||
66
+ %r{lib/ruby/stdlib/jar},
67
67
  # This is a JRuby file that generates warnings on 9.1.7.0
68
- l =~ %r{org/jruby/RubyKernel\.java} ||
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/defaults/jruby")
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 argments span multiple lines, extend check above
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}
@@ -4,7 +4,6 @@ require 'rspec/matchers'
4
4
  # which also relies on EncodedString. Instead, confirm the
5
5
  # strings have the same bytes.
6
6
  RSpec::Matchers.define :be_identical_string do |expected|
7
-
8
7
  if String.method_defined?(:encoding)
9
8
  match do
10
9
  expected_encoding? &&
@@ -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 :failing_on_appveyor do |meta|
39
- meta[:pending] ||= "This spec fails on AppVeyor and needs someone to fix it."
40
- end if ENV['APPVEYOR']
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 "./bundle/"
68
- add_filter "./tmp/"
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)
@@ -1,7 +1,7 @@
1
1
  module RSpec
2
2
  module Support
3
3
  module Version
4
- STRING = '3.9.3'
4
+ STRING = '3.12.0'
5
5
  end
6
6
  end
7
7
  end
@@ -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 explictly passed in kwargs where
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?(:require_relative)
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.9.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: 2020-05-02 00:00:00.000000000 Z
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.9.3/Changelog.md
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.2
148
+ rubygems_version: 3.1.6
148
149
  signing_key:
149
150
  specification_version: 4
150
- summary: rspec-support-3.9.3
151
+ summary: rspec-support-3.12.0
151
152
  test_files: []
metadata.gz.sig CHANGED
Binary file