rspec-support 3.9.0 → 3.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 27ddd84c490aacfced87a3d772c93cf8391484030d28f78789ff5e9263811d42
4
- data.tar.gz: 515eecb4064c04ac636b6171ad1308532596a13d9b132ac4689893ab76f43bfe
3
+ metadata.gz: 7087e0924dbb4a0a167857659dd1b85f73952ede008d348c9f1371da653835da
4
+ data.tar.gz: 236c1ff98b46e3d4b208aae30a4c26bb701d911896746ac0d3573caaefbdaea1
5
5
  SHA512:
6
- metadata.gz: 3755a83a18dcd1326ac122e8250b0abbe0c50af2e630748478c8dfbf0c0f64f65d59725db3ae5370e382f49409b8f7d1639aa09a75c143d4186a8bfeda36a9e3
7
- data.tar.gz: 6a41a8e6f905e1c2a37a776a2438d461859aab8434b1cd20c0aa4ca50fb17d898465535710018c8c01c199fde6e179ffef35feb1cd118dc4b71894a0a12d960b
6
+ metadata.gz: 93bac1be9a9ba640100c1141213da23784197fccbf4bce0e0488faf073d83d06a8787638cb4468790bd8e9c3fe901ed05cac944155084dc6c8b434da13be7ec4
7
+ data.tar.gz: b23a93adcb954245564b219519756b274718ecf81b07deee7a9a1a350bfe02afbbdf46f871c9e164ec9247301523556998b616e02b2bccc9c6b72eb93feefa4a
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,10 +1,49 @@
1
+ ### 3.10.0 / 2020-10-30
2
+
3
+ No changes. Released to support other RSpec releases.
4
+
5
+ ### 3.9.4 / 2020-10-23
6
+
7
+ Bug Fixes:
8
+
9
+ * Flag ripper as supported on Truffle Ruby. (Brandon Fish, #427)
10
+ * Prevent stubbing `File.read` from breaking source extraction.
11
+ (Jon Rowe, #431)
12
+
13
+ ### 3.9.3 / 2020-05-02
14
+ [Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.2...v3.9.3)
15
+
16
+ Bug Fixes:
17
+
18
+ * Mark ripper as unsupported on Truffle Ruby. (Brandon Fish, #395)
19
+ * Mark ripper as unsupported on JRuby 9.2.0.0. (Brian Hawley, #400)
20
+ * Capture `Mutex.new` for our `RSpec::Support:Mutex` in order to
21
+ allow stubbing `Mutex.new`. (Jon Rowe, #411)
22
+
23
+ ### 3.9.2 / 2019-12-30
24
+ [Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.1...v3.9.2)
25
+
26
+ Bug Fixes:
27
+
28
+ * Remove unneeded eval. (Matijs van Zuijlen, #394)
29
+
30
+ ### 3.9.1 / 2019-12-28
31
+ [Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.0...v3.9.1)
32
+
33
+ Bug Fixes:
34
+
35
+ * Remove warning caused by keyword arguments on Ruby 2.7.0.
36
+ (Jon Rowe, #392)
37
+
1
38
  ### 3.9.0 / 2019-10-07
39
+ [Full Changelog](http://github.com/rspec/rspec-support/compare/v3.8.3...v3.9.0)
2
40
 
3
41
  *NO CHANGES*
4
42
 
5
43
  Version 3.9.0 was released to allow other RSpec gems to release 3.9.0.
6
44
 
7
45
  ### 3.8.3 / 2019-10-02
46
+ [Full Changelog](http://github.com/rspec/rspec-support/compare/v3.8.2...v3.8.3)
8
47
 
9
48
  Bug Fixes:
10
49
 
data/README.md CHANGED
@@ -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
 
@@ -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
@@ -10,7 +10,7 @@ module RSpec
10
10
  @string = string
11
11
  end
12
12
 
13
- def <=>(other)
13
+ def <=>(other) # rubocop:disable Metrics/AbcSize
14
14
  other = self.class.new(other) unless other.is_a?(self.class)
15
15
 
16
16
  return 0 if string == other.string
@@ -5,31 +5,11 @@ module RSpec
5
5
  # Reduce allocations by storing constants.
6
6
  UTF_8 = "UTF-8"
7
7
  US_ASCII = "US-ASCII"
8
- #
9
- # In MRI 2.1 'invalid: :replace' changed to also replace an invalid byte sequence
10
- # see https://github.com/ruby/ruby/blob/v2_1_0/NEWS#L176
11
- # https://www.ruby-forum.com/topic/6861247
12
- # https://twitter.com/nalsh/status/553413844685438976
13
- #
14
- # For example, given:
15
- # "\x80".force_encoding("Emacs-Mule").encode(:invalid => :replace).bytes.to_a
16
- #
17
- # On MRI 2.1 or above: 63 # '?'
18
- # else : 128 # "\x80"
19
- #
8
+
20
9
  # Ruby's default replacement string is:
21
10
  # U+FFFD ("\xEF\xBF\xBD"), for Unicode encoding forms, else
22
11
  # ? ("\x3F")
23
12
  REPLACE = "?"
24
- ENCODE_UNCONVERTABLE_BYTES = {
25
- :invalid => :replace,
26
- :undef => :replace,
27
- :replace => REPLACE
28
- }
29
- ENCODE_NO_CONVERTER = {
30
- :invalid => :replace,
31
- :replace => REPLACE
32
- }
33
13
 
34
14
  def initialize(string, encoding=nil)
35
15
  @encoding = encoding
@@ -112,9 +92,25 @@ module RSpec
112
92
  string = remove_invalid_bytes(string)
113
93
  string.encode(@encoding)
114
94
  rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError
115
- string.encode(@encoding, ENCODE_UNCONVERTABLE_BYTES)
95
+ # Originally defined as a constant to avoid uneeded allocations, this hash must
96
+ # be defined inline (without {}) to avoid warnings on Ruby 2.7
97
+ #
98
+ # In MRI 2.1 'invalid: :replace' changed to also replace an invalid byte sequence
99
+ # see https://github.com/ruby/ruby/blob/v2_1_0/NEWS#L176
100
+ # https://www.ruby-forum.com/topic/6861247
101
+ # https://twitter.com/nalsh/status/553413844685438976
102
+ #
103
+ # For example, given:
104
+ # "\x80".force_encoding("Emacs-Mule").encode(:invalid => :replace).bytes.to_a
105
+ #
106
+ # On MRI 2.1 or above: 63 # '?'
107
+ # else : 128 # "\x80"
108
+ #
109
+ string.encode(@encoding, :invalid => :replace, :undef => :replace, :replace => REPLACE)
116
110
  rescue Encoding::ConverterNotFoundError
117
- string.dup.force_encoding(@encoding).encode(ENCODE_NO_CONVERTER)
111
+ # Originally defined as a constant to avoid uneeded allocations, this hash must
112
+ # be defined inline (without {}) to avoid warnings on Ruby 2.7
113
+ string.dup.force_encoding(@encoding).encode(:invalid => :replace, :replace => REPLACE)
118
114
  end
119
115
 
120
116
  # Prevents raising ArgumentError
@@ -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 MethodLength, Metrics/PerceivedComplexity
289
289
  return self unless MethodSignatureExpectation === expectation
290
290
 
291
291
  if expectation.empty?
@@ -43,7 +43,15 @@ module RSpec
43
43
 
44
44
  if defined? ::Mutex
45
45
  # On 1.9 and up, this is in core, so we just use the real one
46
- Mutex = ::Mutex
46
+ class Mutex < ::Mutex
47
+ # If you mock Mutex.new you break our usage of Mutex, so
48
+ # instead we capture the original method to return Mutexs.
49
+ NEW_MUTEX_METHOD = Mutex.method(:new)
50
+
51
+ def self.new
52
+ NEW_MUTEX_METHOD.call
53
+ end
54
+ end
47
55
  else # For 1.8.7
48
56
  # :nocov:
49
57
  RSpec::Support.require_rspec_support "mutex"
@@ -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'
@@ -47,6 +47,10 @@ module RSpec
47
47
  def mri?
48
48
  !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby'
49
49
  end
50
+
51
+ def truffleruby?
52
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'truffleruby'
53
+ end
50
54
  end
51
55
 
52
56
  # @api private
@@ -54,7 +58,7 @@ module RSpec
54
58
  # Provides query methods for ruby features that differ among
55
59
  # implementations.
56
60
  module RubyFeatures
57
- module_function
61
+ module_function
58
62
 
59
63
  if Ruby.jruby?
60
64
  # On JRuby 1.7 `--1.8` mode, `Process.respond_to?(:fork)` returns true,
@@ -90,6 +94,15 @@ module RSpec
90
94
  end
91
95
  end
92
96
 
97
+ if RUBY_VERSION.to_f >= 2.7
98
+ def supports_taint?
99
+ false
100
+ end
101
+ else
102
+ def supports_taint?
103
+ true
104
+ end
105
+ end
93
106
  ripper_requirements = [ComparableVersion.new(RUBY_VERSION) >= '1.9.2']
94
107
 
95
108
  ripper_requirements.push(false) if Ruby.rbx?
@@ -98,7 +111,8 @@ module RSpec
98
111
  ripper_requirements.push(Ruby.jruby_version >= '1.7.5')
99
112
  # Ripper on JRuby 9.0.0.0.rc1 - 9.1.8.0 reports wrong line number
100
113
  # or cannot parse source including `:if`.
101
- ripper_requirements.push(!Ruby.jruby_version.between?('9.0.0.0.rc1', '9.1.8.0'))
114
+ # Ripper on JRuby 9.x.x.x < 9.2.1.0 can't handle keyword arguments.
115
+ ripper_requirements.push(!Ruby.jruby_version.between?('9.0.0.0.rc1', '9.2.0.0'))
102
116
  end
103
117
 
104
118
  if ripper_requirements.all?
@@ -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)
@@ -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"
@@ -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 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,30 @@ 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
+ ]
76
+
77
+ def strip_known_warnings(input)
78
+ input.split("\n").reject do |l|
79
+ LINES_TO_IGNORE.any? { |to_ignore| l =~ to_ignore } ||
69
80
  # Remove blank lines
70
81
  l == "" || l.nil?
71
82
  end.join("\n")
@@ -6,6 +6,7 @@ module RSpec
6
6
  def initialize(original)
7
7
  @orig_stderr = original
8
8
  @output_tracker = ::StringIO.new
9
+ @last_line = nil
9
10
  end
10
11
 
11
12
  respond_to_name = (::RUBY_VERSION.to_f < 1.9) ? :respond_to? : :respond_to_missing?
@@ -38,8 +39,19 @@ module RSpec
38
39
  def write(line)
39
40
  return if line =~ %r{^\S+/gems/\S+:\d+: warning:} # http://rubular.com/r/kqeUIZOfPG
40
41
 
42
+ # Ruby 2.7.0 warnings from keyword argments span multiple lines, extend check above
43
+ # to look for the next line.
44
+ return if @last_line =~ %r{^\S+/gems/\S+:\d+: warning:} &&
45
+ line =~ %r{warning: The called method .* is defined here}
46
+
47
+ # Ruby 2.7.0 complains about hashes used in place of keyword arguments
48
+ # Aruba 0.14.2 uses this internally triggering that here
49
+ return if line =~ %r{lib/ruby/2\.7\.0/fileutils\.rb:622: warning:}
50
+
41
51
  @orig_stderr.write(line)
42
52
  @output_tracker.write(line)
53
+ ensure
54
+ @last_line = line
43
55
  end
44
56
 
45
57
  def has_output?
@@ -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? &&
@@ -1,7 +1,7 @@
1
1
  module RSpec
2
2
  module Support
3
3
  module Version
4
- STRING = '3.9.0'
4
+ STRING = '3.10.0'
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,33 @@
1
+ RSpec::Support.require_rspec_support("method_signature_verifier")
2
+
3
+ module RSpec
4
+ module Support
5
+ module WithKeywordsWhenNeeded
6
+ # This module adds keyword sensitive support for core ruby methods
7
+ # where we cannot use `ruby2_keywords` directly.
8
+
9
+ module_function
10
+
11
+ if RSpec::Support::RubyFeatures.kw_args_supported?
12
+ # Remove this in RSpec 4 in favour of explictly passed in kwargs where
13
+ # this is used. Works around a warning in Ruby 2.7
14
+
15
+ def class_exec(klass, *args, &block)
16
+ if MethodSignature.new(block).has_kw_args_in?(args)
17
+ binding.eval(<<-CODE, __FILE__, __LINE__)
18
+ kwargs = args.pop
19
+ klass.class_exec(*args, **kwargs, &block)
20
+ CODE
21
+ else
22
+ klass.class_exec(*args, &block)
23
+ end
24
+ end
25
+ ruby2_keywords :class_exec if respond_to?(:ruby2_keywords, true)
26
+ else
27
+ def class_exec(klass, *args, &block)
28
+ klass.class_exec(*args, &block)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
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.0
4
+ version: 3.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chelimsky
@@ -10,7 +10,7 @@ authors:
10
10
  - Sam Phippen
11
11
  - Xaviery Shay
12
12
  - Bradley Schaefer
13
- autorequire:
13
+ autorequire:
14
14
  bindir: bin
15
15
  cert_chain:
16
16
  - |
@@ -48,20 +48,20 @@ cert_chain:
48
48
  ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
49
49
  F3MdtaDehhjC
50
50
  -----END CERTIFICATE-----
51
- date: 2019-10-07 00:00:00.000000000 Z
51
+ date: 2020-10-30 00:00:00.000000000 Z
52
52
  dependencies:
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: rake
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - "~>"
57
+ - - ">"
58
58
  - !ruby/object:Gem::Version
59
59
  version: 10.0.0
60
60
  type: :development
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - "~>"
64
+ - - ">"
65
65
  - !ruby/object:Gem::Version
66
66
  version: 10.0.0
67
67
  - !ruby/object:Gem::Dependency
@@ -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
@@ -118,16 +119,17 @@ files:
118
119
  - lib/rspec/support/spec/with_isolated_stderr.rb
119
120
  - lib/rspec/support/version.rb
120
121
  - lib/rspec/support/warnings.rb
122
+ - lib/rspec/support/with_keywords_when_needed.rb
121
123
  homepage: https://github.com/rspec/rspec-support
122
124
  licenses:
123
125
  - MIT
124
126
  metadata:
125
127
  bug_tracker_uri: https://github.com/rspec/rspec-support/issues
126
- changelog_uri: https://github.com/rspec/rspec-support/blob/v3.9.0/Changelog.md
128
+ changelog_uri: https://github.com/rspec/rspec-support/blob/v3.10.0/Changelog.md
127
129
  documentation_uri: https://rspec.info/documentation/
128
130
  mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
129
131
  source_code_uri: https://github.com/rspec/rspec-support
130
- post_install_message:
132
+ post_install_message:
131
133
  rdoc_options:
132
134
  - "--charset=UTF-8"
133
135
  require_paths:
@@ -143,8 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
145
  - !ruby/object:Gem::Version
144
146
  version: '0'
145
147
  requirements: []
146
- rubygems_version: 3.0.6
147
- signing_key:
148
+ rubygems_version: 3.1.3
149
+ signing_key:
148
150
  specification_version: 4
149
- summary: rspec-support-3.9.0
151
+ summary: rspec-support-3.10.0
150
152
  test_files: []
metadata.gz.sig CHANGED
Binary file