rspec-support 3.0.4 → 3.12.1
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data/Changelog.md +322 -0
- data/{LICENSE.txt → LICENSE.md} +3 -2
- data/README.md +29 -6
- data/lib/rspec/support/caller_filter.rb +35 -16
- data/lib/rspec/support/comparable_version.rb +46 -0
- data/lib/rspec/support/differ.rb +51 -41
- data/lib/rspec/support/directory_maker.rb +63 -0
- data/lib/rspec/support/encoded_string.rb +110 -15
- data/lib/rspec/support/fuzzy_matcher.rb +5 -6
- data/lib/rspec/support/hunk_generator.rb +0 -1
- data/lib/rspec/support/matcher_definition.rb +42 -0
- data/lib/rspec/support/method_signature_verifier.rb +287 -54
- data/lib/rspec/support/mutex.rb +73 -0
- data/lib/rspec/support/object_formatter.rb +275 -0
- data/lib/rspec/support/recursive_const_methods.rb +76 -0
- data/lib/rspec/support/reentrant_mutex.rb +78 -0
- data/lib/rspec/support/ruby_features.rb +177 -14
- data/lib/rspec/support/source/location.rb +21 -0
- data/lib/rspec/support/source/node.rb +110 -0
- data/lib/rspec/support/source/token.rb +94 -0
- data/lib/rspec/support/source.rb +85 -0
- data/lib/rspec/support/spec/deprecation_helpers.rb +19 -32
- data/lib/rspec/support/spec/diff_helpers.rb +31 -0
- data/lib/rspec/support/spec/in_sub_process.rb +43 -16
- data/lib/rspec/support/spec/library_wide_checks.rb +150 -0
- data/lib/rspec/support/spec/shell_out.rb +108 -0
- data/lib/rspec/support/spec/stderr_splitter.rb +31 -9
- data/lib/rspec/support/spec/string_matcher.rb +45 -0
- data/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
- data/lib/rspec/support/spec/with_isolated_stderr.rb +0 -2
- data/lib/rspec/support/spec.rb +46 -26
- data/lib/rspec/support/version.rb +1 -1
- data/lib/rspec/support/warnings.rb +6 -6
- data/lib/rspec/support/with_keywords_when_needed.rb +33 -0
- data/lib/rspec/support.rb +87 -3
- data.tar.gz.sig +0 -0
- metadata +70 -52
- metadata.gz.sig +0 -0
- data/lib/rspec/support/version_checker.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cd43ff0da6f307b7e9ccc56ceb9e3fdd972f27b7d160b8ba860c6625bb62f39b
|
4
|
+
data.tar.gz: a0c09feee171d7a1b02793888c995d9dd42f20660b6449db9c79eeed4a297b3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 247e3e818ef3c367c1ecbc4938dca5a0ca7c9b185c1b608900461e146ea1f8c5053e0d97adc692cd0871debeb764407a3403682ce425aebf1de6511f17f366fc
|
7
|
+
data.tar.gz: b3b600ca9061f37b529af60308df73b4c9724de1d173ee01eda44c0f61404396d8f2af7a52b071db93299bb607905e8b1aa3ddac29cc364ef41136a1815735d1
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,3 +1,325 @@
|
|
1
|
+
### Development
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.12.1...3-12-maintenance)
|
3
|
+
|
4
|
+
### 3.12.1 / 2023-06-26
|
5
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.12.0...v3.12.1)
|
6
|
+
|
7
|
+
Bug Fixes:
|
8
|
+
|
9
|
+
* Fix `RSpec::Support.thread_local_data` to be Thread local but not Fiber local.
|
10
|
+
(Jon Rowe, #581)
|
11
|
+
|
12
|
+
### 3.12.0 / 2022-10-26
|
13
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.11.1...v3.12.0)
|
14
|
+
Enhancements:
|
15
|
+
|
16
|
+
* Add `RSpec::Support::RubyFeatures.distincts_kw_args_from_positional_hash?`
|
17
|
+
(Jean byroot Boussier, #535)
|
18
|
+
|
19
|
+
### 3.11.1 / 2022-09-12
|
20
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.11.0...v3.11.1)
|
21
|
+
|
22
|
+
Bug Fixes:
|
23
|
+
|
24
|
+
* Fix ripper detection on TruffleRuby. (Brandon Fish, #541)
|
25
|
+
|
26
|
+
### 3.11.0 / 2022-02-09
|
27
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.3...v3.11.0)
|
28
|
+
|
29
|
+
No changes. Released to support other RSpec releases.
|
30
|
+
|
31
|
+
### 3.10.3 / 2021-11-03
|
32
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.2...v3.10.3)
|
33
|
+
|
34
|
+
Bug Fixes:
|
35
|
+
|
36
|
+
* Use `Mutex#owned?` to allow `RSpec::Support::ReentrantMutex` to work in
|
37
|
+
nested Fibers on Ruby 3.0 and later. (Benoit Daloze, #503, #504)
|
38
|
+
* Support `end`-less methods in `RSpec::Support::Source::Token`
|
39
|
+
so that RSpec won't hang when an `end`-less method raises an error. (Yuji Nakayama, #505)
|
40
|
+
|
41
|
+
### 3.10.2 / 2021-01-28
|
42
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.1...v3.10.2)
|
43
|
+
|
44
|
+
Bug Fixes:
|
45
|
+
|
46
|
+
* Fix issue with `RSpec::Support.define_optimized_require_for_rspec` on JRuby
|
47
|
+
9.1.17.0 (Jon Rowe, #492)
|
48
|
+
|
49
|
+
### 3.10.1 / 2020-12-27
|
50
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.10.0...v3.10.1)
|
51
|
+
|
52
|
+
Bug Fixes:
|
53
|
+
|
54
|
+
* Fix deprecation expectations to fail correctly when
|
55
|
+
asserting on messages. (Phil Pirozhkov, #453)
|
56
|
+
|
57
|
+
### 3.10.0 / 2020-10-30
|
58
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.4...v3.10.0)
|
59
|
+
|
60
|
+
No changes. Released to support other RSpec releases.
|
61
|
+
|
62
|
+
### 3.9.4 / 2020-10-23
|
63
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.3...v3.9.4)
|
64
|
+
|
65
|
+
Bug Fixes:
|
66
|
+
|
67
|
+
* Flag ripper as supported on Truffle Ruby. (Brandon Fish, #427)
|
68
|
+
* Prevent stubbing `File.read` from breaking source extraction.
|
69
|
+
(Jon Rowe, #431)
|
70
|
+
|
71
|
+
### 3.9.3 / 2020-05-02
|
72
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.2...v3.9.3)
|
73
|
+
|
74
|
+
Bug Fixes:
|
75
|
+
|
76
|
+
* Mark ripper as unsupported on Truffle Ruby. (Brandon Fish, #395)
|
77
|
+
* Mark ripper as unsupported on JRuby 9.2.0.0. (Brian Hawley, #400)
|
78
|
+
* Capture `Mutex.new` for our `RSpec::Support:Mutex` in order to
|
79
|
+
allow stubbing `Mutex.new`. (Jon Rowe, #411)
|
80
|
+
|
81
|
+
### 3.9.2 / 2019-12-30
|
82
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.1...v3.9.2)
|
83
|
+
|
84
|
+
Bug Fixes:
|
85
|
+
|
86
|
+
* Remove unneeded eval. (Matijs van Zuijlen, #394)
|
87
|
+
|
88
|
+
### 3.9.1 / 2019-12-28
|
89
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.9.0...v3.9.1)
|
90
|
+
|
91
|
+
Bug Fixes:
|
92
|
+
|
93
|
+
* Remove warning caused by keyword arguments on Ruby 2.7.0.
|
94
|
+
(Jon Rowe, #392)
|
95
|
+
|
96
|
+
### 3.9.0 / 2019-10-07
|
97
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.8.3...v3.9.0)
|
98
|
+
|
99
|
+
*NO CHANGES*
|
100
|
+
|
101
|
+
Version 3.9.0 was released to allow other RSpec gems to release 3.9.0.
|
102
|
+
|
103
|
+
### 3.8.3 / 2019-10-02
|
104
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.8.2...v3.8.3)
|
105
|
+
|
106
|
+
Bug Fixes:
|
107
|
+
|
108
|
+
* Escape \r when outputting strings inside arrays.
|
109
|
+
(Tomita Masahiro, Jon Rowe, #378)
|
110
|
+
* Ensure that optional hash arguments are recognised correctly vs keyword
|
111
|
+
arguments. (Evgeni Dzhelyov, #366)
|
112
|
+
|
113
|
+
### 3.8.2 / 2019-06-10
|
114
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.8.1...v3.8.2)
|
115
|
+
|
116
|
+
Bug Fixes:
|
117
|
+
|
118
|
+
* Ensure that an empty hash is recognised as empty keyword arguments when
|
119
|
+
applicable. (Thomas Walpole, #375)
|
120
|
+
* Ensure that diffing truthy values produce diffs consistently.
|
121
|
+
(Lucas Nestor, #377)
|
122
|
+
|
123
|
+
### 3.8.1 / 2019-03-03
|
124
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.8.0...v3.8.1)
|
125
|
+
|
126
|
+
Bug Fixes:
|
127
|
+
|
128
|
+
* Ensure that inspecting a `SimpleDelegator` based object works regardless of
|
129
|
+
visibilty of the `__getobj__` method. (Jon Rowe, #369)
|
130
|
+
|
131
|
+
### 3.8.0 / 2018-08-04
|
132
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.7.1...v3.8.0)
|
133
|
+
|
134
|
+
Bug Fixes:
|
135
|
+
|
136
|
+
* Order hash keys before diffing to improve diff accuracy when using mocked calls.
|
137
|
+
(James Crisp, #334)
|
138
|
+
|
139
|
+
### 3.7.1 / 2018-01-29
|
140
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.7.0...v3.7.1)
|
141
|
+
|
142
|
+
Bug Fixes:
|
143
|
+
|
144
|
+
* Fix source extraction logic so that it does not trigger a `SystemStackError`
|
145
|
+
when processing deeply nested example groups. (Craig Bass, #343)
|
146
|
+
|
147
|
+
### 3.7.0 / 2017-10-17
|
148
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.6.0...v3.7.0)
|
149
|
+
|
150
|
+
Enhancements:
|
151
|
+
|
152
|
+
* Improve compatibility with `--enable-frozen-string-literal` option
|
153
|
+
on Ruby 2.3+. (Pat Allan, #320)
|
154
|
+
* Add `Support.class_of` for extracting class of any object.
|
155
|
+
(Yuji Nakayama, #325)
|
156
|
+
|
157
|
+
Bug Fixes:
|
158
|
+
|
159
|
+
* Fix recursive const support to not blow up when given buggy classes
|
160
|
+
that raise odd errors from `#to_str`. (Myron Marston, #317)
|
161
|
+
|
162
|
+
### 3.6.0 / 2017-05-04
|
163
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.6.0.beta2...3.6.0)
|
164
|
+
|
165
|
+
Enhancements:
|
166
|
+
|
167
|
+
* Import `Source` classes from rspec-core. (Yuji Nakayama, #315)
|
168
|
+
|
169
|
+
### 3.6.0.beta2 / 2016-12-12
|
170
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.6.0.beta1...v3.6.0.beta2)
|
171
|
+
|
172
|
+
No user-facing changes.
|
173
|
+
|
174
|
+
### 3.6.0.beta1 / 2016-10-09
|
175
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.5.0...v3.6.0.beta1)
|
176
|
+
|
177
|
+
Bug Fixes:
|
178
|
+
|
179
|
+
* Prevent truncated formatted object output from mangling console codes. (#294, Anson Kelly)
|
180
|
+
|
181
|
+
### 3.5.0 / 2016-07-01
|
182
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.5.0.beta4...v3.5.0)
|
183
|
+
|
184
|
+
**No user facing changes since beta4**
|
185
|
+
|
186
|
+
### 3.5.0.beta4 / 2016-06-05
|
187
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.5.0.beta3...v3.5.0.beta4)
|
188
|
+
|
189
|
+
Enhancements:
|
190
|
+
* Improve `MethodSignature` to better support keyword arguments. (#250, Rob Smith).
|
191
|
+
|
192
|
+
### 3.5.0.beta3 / 2016-04-02
|
193
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.5.0.beta2...v3.5.0.beta3)
|
194
|
+
|
195
|
+
Bug Fixes:
|
196
|
+
|
197
|
+
* Fix `EncodedString` to properly handle the behavior of `String#split`
|
198
|
+
on JRuby when the string contains invalid bytes. (Jon Rowe, #268)
|
199
|
+
* Fix `ObjectFormatter` so that formatting objects that don't respond to
|
200
|
+
`#inspect` (such as `BasicObject`) does not cause `NoMethodError`.
|
201
|
+
(Yuji Nakayama, #269)
|
202
|
+
* Fix `ObjectFormatter` so that formatting recursive array or hash does not
|
203
|
+
cause `SystemStackError`. (Yuji Nakayama, #270, #272)
|
204
|
+
|
205
|
+
### 3.5.0.beta2 / 2016-03-10
|
206
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.5.0.beta1...v3.5.0.beta2)
|
207
|
+
|
208
|
+
No user-facing changes.
|
209
|
+
|
210
|
+
### 3.5.0.beta1 / 2016-02-06
|
211
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.4.1...v3.5.0.beta1)
|
212
|
+
|
213
|
+
Enhancements:
|
214
|
+
|
215
|
+
* Improve formatting of objects by allowing truncation to a pre-configured length.
|
216
|
+
(Liam M, #256)
|
217
|
+
|
218
|
+
### 3.4.1 / 2015-11-20
|
219
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.4.0...v3.4.1)
|
220
|
+
|
221
|
+
Bug Fixes:
|
222
|
+
|
223
|
+
* Fix `RSpec::Support::RubyFeature.ripper_supported?` so it returns
|
224
|
+
`false` on Rubinius since the Rubinius team has no plans to support
|
225
|
+
it. This prevents rspec-core from trying to load and use ripper to
|
226
|
+
extract failure snippets. (Aaron Stone, #251)
|
227
|
+
|
228
|
+
Changes:
|
229
|
+
|
230
|
+
* Remove `VersionChecker` in favor of `ComparableVersion`. (Yuji Nakayama, #266)
|
231
|
+
|
232
|
+
### 3.4.0 / 2015-11-11
|
233
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.3.0...v3.4.0)
|
234
|
+
|
235
|
+
Enhancements:
|
236
|
+
|
237
|
+
* Improve formatting of `Delegator` based objects (e.g. `SimpleDelgator`) in
|
238
|
+
failure messages and diffs. (Andrew Horner, #215)
|
239
|
+
* Add `ComparableVersion`. (Yuji Nakayama, #245)
|
240
|
+
* Add `Ripper` support detection. (Yuji Nakayama, #245)
|
241
|
+
|
242
|
+
Bug Fixes:
|
243
|
+
|
244
|
+
* Work around bug in JRuby that reports that `attr_writer` methods
|
245
|
+
have no parameters, causing RSpec's verifying doubles to wrongly
|
246
|
+
fail when mocking or stubbing a writer method on JRuby. (Myron Marston, #225)
|
247
|
+
|
248
|
+
### 3.3.0 / 2015-06-12
|
249
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.2.2...v3.3.0)
|
250
|
+
|
251
|
+
Enhancements:
|
252
|
+
|
253
|
+
* Improve formatting of arrays and hashes in failure messages so they
|
254
|
+
use our custom formatting of matchers, time objects, etc.
|
255
|
+
(Myron Marston, Nicholas Chmielewski, #205)
|
256
|
+
* Use improved formatting for diffs as well. (Nicholas Chmielewski, #205)
|
257
|
+
|
258
|
+
Bug Fixes:
|
259
|
+
|
260
|
+
* Fix `FuzzyMatcher` so that it checks `expected == actual` rather than
|
261
|
+
`actual == expected`, which avoids errors in situations where the
|
262
|
+
`actual` object's `==` is improperly implemented to assume that only
|
263
|
+
objects of the same type will be given. This allows rspec-mocks'
|
264
|
+
`anything` to match against objects with buggy `==` definitions.
|
265
|
+
(Myron Marston, #193)
|
266
|
+
|
267
|
+
### 3.2.2 / 2015-02-23
|
268
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.2.1...v3.2.2)
|
269
|
+
|
270
|
+
Bug Fixes:
|
271
|
+
|
272
|
+
* Fix an encoding issue with `EncodedString#split` when encountering an
|
273
|
+
invalid byte string. (Benjamin Fleischer, #1760)
|
274
|
+
|
275
|
+
### 3.2.1 / 2015-02-04
|
276
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.2.0...v3.2.1)
|
277
|
+
|
278
|
+
Bug Fixes:
|
279
|
+
|
280
|
+
* Fix `RSpec::CallerFilter` to work on Rubinius 2.2.
|
281
|
+
(Myron Marston, #169)
|
282
|
+
|
283
|
+
### 3.2.0 / 2015-02-03
|
284
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.1.2...v3.2.0)
|
285
|
+
|
286
|
+
Enhancements:
|
287
|
+
|
288
|
+
* Add extra Ruby type detection. (Jon Rowe, #133)
|
289
|
+
* Make differ instance re-usable. (Alexey Fedorov, #160)
|
290
|
+
|
291
|
+
Bug Fixes:
|
292
|
+
|
293
|
+
* Do not consider `[]` and `{}` to match when performing fuzzy matching.
|
294
|
+
(Myron Marston, #157)
|
295
|
+
|
296
|
+
### 3.1.2 / 2014-10-08
|
297
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.1.1...v3.1.2)
|
298
|
+
|
299
|
+
Bug Fixes:
|
300
|
+
|
301
|
+
* Fix method signature to not blow up with a `NoMethodError` on 1.8.7 when
|
302
|
+
verifying against an RSpec matcher. (Myron Marston, #116)
|
303
|
+
|
304
|
+
### 3.1.1 / 2014-09-26
|
305
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.1.0...v3.1.1)
|
306
|
+
|
307
|
+
Bug Fixes:
|
308
|
+
|
309
|
+
* Fix `RSpec::Support::DirectoryMaker` (used by `rspec --init` and
|
310
|
+
`rails generate rspec:install`) so that it detects absolute paths
|
311
|
+
on Windows properly. (Scott Archer, #107, #108, #109) (Jon Rowe, #110)
|
312
|
+
|
313
|
+
### 3.1.0 / 2014-09-04
|
314
|
+
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.0.4...v3.1.0)
|
315
|
+
|
316
|
+
Bug Fixes:
|
317
|
+
|
318
|
+
* Fix `FuzzyMatcher` so that it does not wrongly match a struct against
|
319
|
+
an array. (Myron Marston, #97)
|
320
|
+
* Prevent infinitely recursing `#flatten` methods from causing the differ
|
321
|
+
to hang. (Jon Rowe, #101)
|
322
|
+
|
1
323
|
### 3.0.4 / 2014-08-14
|
2
324
|
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.0.3...v3.0.4)
|
3
325
|
|
data/{LICENSE.txt → LICENSE.md}
RENAMED
@@ -1,6 +1,7 @@
|
|
1
|
-
|
1
|
+
The MIT License (MIT)
|
2
|
+
====================
|
2
3
|
|
3
|
-
|
4
|
+
* Copyright © 2013 David Chelimsky, Myron Marston, Jon Rowe, Sam Phippen, Xavier Shay, Bradley Schaefer
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
6
7
|
a copy of this software and associated documentation files (the
|
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,10 +8,33 @@ 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 `main` branch? You'll need to include the dependent
|
12
|
+
RSpec repos as well. Add the following to your `Gemfile`:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
%w[rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
|
16
|
+
gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => 'main'
|
17
|
+
end
|
18
|
+
```
|
19
|
+
|
11
20
|
## Contributing
|
12
21
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
22
|
+
Once you've set up the environment, you'll need to cd into the working
|
23
|
+
directory of whichever repo you want to work in. From there you can run the
|
24
|
+
specs and cucumber features, and make patches.
|
25
|
+
|
26
|
+
NOTE: You do not need to use rspec-dev to work on a specific RSpec repo. You
|
27
|
+
can treat each RSpec repo as an independent project.
|
28
|
+
|
29
|
+
- [Build details](BUILD_DETAIL.md)
|
30
|
+
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
31
|
+
- [Detailed contributing guide](CONTRIBUTING.md)
|
32
|
+
- [Development setup guide](DEVELOPMENT.md)
|
33
|
+
|
34
|
+
## Patches
|
35
|
+
|
36
|
+
Please submit a pull request or a github issue. If you submit an issue, please
|
37
|
+
include a link to either of:
|
38
|
+
|
39
|
+
* a gist (or equivalent) of the patch
|
40
|
+
* a branch or commit in your github fork of the repo
|
@@ -1,10 +1,11 @@
|
|
1
|
+
RSpec::Support.require_rspec_support "ruby_features"
|
2
|
+
|
1
3
|
module RSpec
|
2
4
|
# Consistent implementation for "cleaning" the caller method to strip out
|
3
5
|
# non-rspec lines. This enables errors to be reported at the call site in
|
4
6
|
# the code using the library, which is far more useful than the particular
|
5
7
|
# internal method that raised an error.
|
6
8
|
class CallerFilter
|
7
|
-
|
8
9
|
RSPEC_LIBS = %w[
|
9
10
|
core
|
10
11
|
mocks
|
@@ -24,10 +25,32 @@ module RSpec
|
|
24
25
|
# when `CallerFilter.first_non_rspec_line` is called from the top level of a required
|
25
26
|
# file, but it depends on if rubygems is loaded or not. We don't want to have to deal
|
26
27
|
# with this complexity in our `RSpec.deprecate` calls, so we ignore it here.
|
27
|
-
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
|
+
|
30
|
+
if RSpec::Support::RubyFeatures.caller_locations_supported?
|
31
|
+
# This supports args because it's more efficient when the caller specifies
|
32
|
+
# these. It allows us to skip frames the caller knows are part of RSpec,
|
33
|
+
# and to decrease the increment size if the caller is confident the line will
|
34
|
+
# be found in a small number of stack frames from `skip_frames`.
|
35
|
+
#
|
36
|
+
# Note that there is a risk to passing a `skip_frames` value that is too high:
|
37
|
+
# If it skipped the first non-rspec line, then this method would return the
|
38
|
+
# 2nd or 3rd (or whatever) non-rspec line. Thus, you generally shouldn't pass
|
39
|
+
# values for these parameters, particularly since most places that use this are
|
40
|
+
# not hot spots (generally it gets used for deprecation warnings). However,
|
41
|
+
# if you do have a hot spot that calls this, passing `skip_frames` can make
|
42
|
+
# a significant difference. Just make sure that that particular use is tested
|
43
|
+
# so that if the provided `skip_frames` changes to no longer be accurate in
|
44
|
+
# such a way that would return the wrong stack frame, a test will fail to tell you.
|
45
|
+
#
|
46
|
+
# See benchmarks/skip_frames_for_caller_filter.rb for measurements.
|
47
|
+
def self.first_non_rspec_line(skip_frames=3, increment=5)
|
48
|
+
# Why a default `skip_frames` of 3?
|
49
|
+
# By the time `caller_locations` is called below, the first 3 frames are:
|
50
|
+
# lib/rspec/support/caller_filter.rb:63:in `block in first_non_rspec_line'
|
51
|
+
# lib/rspec/support/caller_filter.rb:62:in `loop'
|
52
|
+
# lib/rspec/support/caller_filter.rb:62:in `first_non_rspec_line'
|
28
53
|
|
29
|
-
if RUBY_VERSION >= '2.0.0'
|
30
|
-
def self.first_non_rspec_line
|
31
54
|
# `caller` is an expensive method that scales linearly with the size of
|
32
55
|
# the stack. The performance hit for fetching it in chunks is small,
|
33
56
|
# and since the target line is probably near the top of the stack, the
|
@@ -35,28 +58,24 @@ module RSpec
|
|
35
58
|
#
|
36
59
|
# See benchmarks/caller.rb for measurements.
|
37
60
|
|
38
|
-
#
|
39
|
-
# performance on the common case of creating a double.
|
40
|
-
increment = 5
|
41
|
-
i = 1
|
42
|
-
line = nil
|
61
|
+
# The default increment of 5 for this method are mostly arbitrary, but
|
62
|
+
# is chosen to give good performance on the common case of creating a double.
|
43
63
|
|
44
|
-
|
45
|
-
stack =
|
64
|
+
loop do
|
65
|
+
stack = caller_locations(skip_frames, increment)
|
46
66
|
raise "No non-lib lines in stack" unless stack
|
47
67
|
|
48
|
-
line = stack.find { |l| l !~ IGNORE_REGEX }
|
68
|
+
line = stack.find { |l| l.path !~ IGNORE_REGEX }
|
69
|
+
return line.to_s if line
|
49
70
|
|
50
|
-
|
71
|
+
skip_frames += increment
|
51
72
|
increment *= 2 # The choice of two here is arbitrary.
|
52
73
|
end
|
53
|
-
|
54
|
-
line
|
55
74
|
end
|
56
75
|
else
|
57
76
|
# Earlier rubies do not support the two argument form of `caller`. This
|
58
77
|
# fallback is logically the same, but slower.
|
59
|
-
def self.first_non_rspec_line
|
78
|
+
def self.first_non_rspec_line(*)
|
60
79
|
caller.find { |line| line !~ IGNORE_REGEX }
|
61
80
|
end
|
62
81
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Support
|
3
|
+
# @private
|
4
|
+
class ComparableVersion
|
5
|
+
include Comparable
|
6
|
+
|
7
|
+
attr_reader :string
|
8
|
+
|
9
|
+
def initialize(string)
|
10
|
+
@string = string
|
11
|
+
end
|
12
|
+
|
13
|
+
def <=>(other)
|
14
|
+
other = self.class.new(other) unless other.is_a?(self.class)
|
15
|
+
|
16
|
+
return 0 if string == other.string
|
17
|
+
|
18
|
+
longer_segment_count = [self, other].map { |version| version.segments.count }.max
|
19
|
+
|
20
|
+
longer_segment_count.times do |index|
|
21
|
+
self_segment = segments[index] || 0
|
22
|
+
other_segment = other.segments[index] || 0
|
23
|
+
|
24
|
+
if self_segment.class == other_segment.class
|
25
|
+
result = self_segment <=> other_segment
|
26
|
+
return result unless result == 0
|
27
|
+
else
|
28
|
+
return self_segment.is_a?(String) ? -1 : 1
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
0
|
33
|
+
end
|
34
|
+
|
35
|
+
def segments
|
36
|
+
@segments ||= string.scan(/[a-z]+|\d+/i).map do |segment|
|
37
|
+
if segment =~ /\A\d+\z/
|
38
|
+
segment.to_i
|
39
|
+
else
|
40
|
+
segment
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|