rspec-core 3.4.2 → 3.4.3
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.tar.gz.sig +0 -0
- data/Changelog.md +17 -0
- data/lib/rspec/core/example_group.rb +5 -5
- data/lib/rspec/core/formatters/exception_presenter.rb +5 -3
- data/lib/rspec/core/formatters/snippet_extractor.rb +7 -14
- data/lib/rspec/core/metadata.rb +5 -0
- data/lib/rspec/core/metadata_filter.rb +10 -19
- data/lib/rspec/core/rake_task.rb +1 -1
- data/lib/rspec/core/source/token.rb +43 -0
- data/lib/rspec/core/version.rb +1 -1
- data/lib/rspec/core/world.rb +21 -5
- metadata +4 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 203d6dff4306be78d671362a48e847eb74c1b115
|
4
|
+
data.tar.gz: 4faa8c73ef35b7a593162c6e338090b697799243
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ed7871a3cdfd07530698efd71d9a96c85b1eef26a8253485a58071adf92a1165c9583d9c9c668a24b66d6f74a9be63b394e16174796324f4b03f7d6537a4a8d
|
7
|
+
data.tar.gz: 2219a50dc96580d34005d7c40a50025f0dc6e1b22fd8e8bf774f0d661f0b31585f69335f221678f800fb12d9b08bac142fe28b67336d4c2e1e89ff824c38ecef
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
### Development
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-core/compare/v3.4.3...3-4-maintenance)
|
3
|
+
|
4
|
+
### 3.4.3 / 2016-02-19
|
5
|
+
[Full Changelog](http://github.com/rspec/rspec-core/compare/v3.4.2...3.4.3)
|
6
|
+
|
7
|
+
Bug Fixes:
|
8
|
+
|
9
|
+
* Prevent a `TypeError` from occuring when running via the rake task when
|
10
|
+
Ruby crashes. (Patrik Wenger, #2161)
|
11
|
+
* Only consider example and group declaration lines from a specific file
|
12
|
+
when applying line number filtering, instead of considering all
|
13
|
+
declaration lines from all spec files. (Myron Marston, #2170)
|
14
|
+
* Fix failure snippet extraction so that snippets that contain `do-end` style
|
15
|
+
block and end with `end`-only line can be extracted properly.
|
16
|
+
(Yuji Nakayama, #2173)
|
17
|
+
|
1
18
|
### 3.4.2 / 2016-01-26
|
2
19
|
[Full Changelog](http://github.com/rspec/rspec-core/compare/v3.4.1...v3.4.2)
|
3
20
|
|
@@ -347,7 +347,7 @@ module RSpec
|
|
347
347
|
@descendant_filtered_examples = nil
|
348
348
|
@_descendants = nil
|
349
349
|
@parent_groups = nil
|
350
|
-
@
|
350
|
+
@declaration_locations = nil
|
351
351
|
end
|
352
352
|
|
353
353
|
# Adds an example to the example group
|
@@ -599,10 +599,10 @@ module RSpec
|
|
599
599
|
end
|
600
600
|
|
601
601
|
# @private
|
602
|
-
def self.
|
603
|
-
@
|
604
|
-
examples.map { |e| e.metadata
|
605
|
-
FlatMap.flat_map(children, &:
|
602
|
+
def self.declaration_locations
|
603
|
+
@declaration_locations ||= [Metadata.location_tuple_from(metadata)] +
|
604
|
+
examples.map { |e| Metadata.location_tuple_from(e.metadata) } +
|
605
|
+
FlatMap.flat_map(children, &:declaration_locations)
|
606
606
|
end
|
607
607
|
|
608
608
|
# @return [String] the unique id of this example group. Pass
|
@@ -92,9 +92,11 @@ module RSpec
|
|
92
92
|
|
93
93
|
private
|
94
94
|
|
95
|
-
def final_exception(exception)
|
96
|
-
|
97
|
-
|
95
|
+
def final_exception(exception, previous=[])
|
96
|
+
cause = exception.cause
|
97
|
+
if cause && !previous.include?(cause)
|
98
|
+
previous << cause
|
99
|
+
final_exception(cause, previous)
|
98
100
|
else
|
99
101
|
exception
|
100
102
|
end
|
@@ -23,13 +23,6 @@ module RSpec
|
|
23
23
|
if RSpec::Support::RubyFeatures.ripper_supported?
|
24
24
|
NoExpressionAtLineError = Class.new(StandardError)
|
25
25
|
|
26
|
-
PAREN_TOKEN_TYPE_PAIRS = {
|
27
|
-
:on_lbracket => :on_rbracket,
|
28
|
-
:on_lparen => :on_rparen,
|
29
|
-
:on_lbrace => :on_rbrace,
|
30
|
-
:on_heredoc_beg => :on_heredoc_end
|
31
|
-
}
|
32
|
-
|
33
26
|
attr_reader :source, :beginning_line_number, :max_line_count
|
34
27
|
|
35
28
|
def self.extract_expression_lines_at(file_path, beginning_line_number, max_line_count=nil)
|
@@ -64,29 +57,29 @@ module RSpec
|
|
64
57
|
def line_range_of_expression
|
65
58
|
@line_range_of_expression ||= begin
|
66
59
|
line_range = line_range_of_location_nodes_in_expression
|
67
|
-
|
68
|
-
|
60
|
+
initial_unclosed_tokens = unclosed_tokens_in_line_range(line_range)
|
61
|
+
unclosed_tokens = initial_unclosed_tokens
|
69
62
|
|
70
|
-
until (
|
63
|
+
until (initial_unclosed_tokens & unclosed_tokens).empty?
|
71
64
|
line_range = (line_range.begin)..(line_range.end + 1)
|
72
|
-
|
65
|
+
unclosed_tokens = unclosed_tokens_in_line_range(line_range)
|
73
66
|
end
|
74
67
|
|
75
68
|
line_range
|
76
69
|
end
|
77
70
|
end
|
78
71
|
|
79
|
-
def
|
72
|
+
def unclosed_tokens_in_line_range(line_range)
|
80
73
|
tokens = FlatMap.flat_map(line_range) do |line_number|
|
81
74
|
source.tokens_by_line_number[line_number]
|
82
75
|
end
|
83
76
|
|
84
77
|
tokens.each_with_object([]) do |token, unclosed_tokens|
|
85
|
-
if
|
78
|
+
if token.opening?
|
86
79
|
unclosed_tokens << token
|
87
80
|
else
|
88
81
|
index = unclosed_tokens.rindex do |unclosed_token|
|
89
|
-
|
82
|
+
unclosed_token.closed_by?(token)
|
90
83
|
end
|
91
84
|
unclosed_tokens.delete_at(index) if index
|
92
85
|
end
|
data/lib/rspec/core/metadata.rb
CHANGED
@@ -106,6 +106,11 @@ module RSpec
|
|
106
106
|
"#{metadata[:rerun_file_path]}[#{metadata[:scoped_id]}]"
|
107
107
|
end
|
108
108
|
|
109
|
+
# @private
|
110
|
+
def self.location_tuple_from(metadata)
|
111
|
+
[metadata[:absolute_file_path], metadata[:line_number]]
|
112
|
+
end
|
113
|
+
|
109
114
|
# @private
|
110
115
|
# Used internally to populate metadata hashes with computed keys
|
111
116
|
# managed by RSpec.
|
@@ -15,9 +15,9 @@ module RSpec
|
|
15
15
|
# @private
|
16
16
|
def filter_applies?(key, value, metadata)
|
17
17
|
silence_metadata_example_group_deprecations do
|
18
|
-
return location_filter_applies?(value, metadata)
|
19
|
-
return id_filter_applies?(value, metadata)
|
20
|
-
return filters_apply?(key, value, metadata)
|
18
|
+
return location_filter_applies?(value, metadata) if key == :locations
|
19
|
+
return id_filter_applies?(value, metadata) if key == :ids
|
20
|
+
return filters_apply?(key, value, metadata) if Hash === value
|
21
21
|
|
22
22
|
return false unless metadata.key?(key)
|
23
23
|
return true if TrueClass === value && !!metadata[key]
|
@@ -49,13 +49,14 @@ module RSpec
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def location_filter_applies?(locations, metadata)
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
Metadata.ascend(metadata).any? do |meta|
|
53
|
+
file_path = meta[:absolute_file_path]
|
54
|
+
line_num = meta[:line_number]
|
55
55
|
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
locations[file_path].any? do |filter_line_num|
|
57
|
+
line_num == RSpec.world.preceding_declaration_line(file_path, filter_line_num)
|
58
|
+
end
|
59
|
+
end
|
59
60
|
end
|
60
61
|
|
61
62
|
def proc_filter_applies?(key, proc, metadata)
|
@@ -66,16 +67,6 @@ module RSpec
|
|
66
67
|
end
|
67
68
|
end
|
68
69
|
|
69
|
-
def relevant_line_numbers(metadata)
|
70
|
-
Metadata.ascend(metadata).map { |meta| meta[:line_number] }
|
71
|
-
end
|
72
|
-
|
73
|
-
def example_group_declaration_lines(locations, metadata)
|
74
|
-
FlatMap.flat_map(Metadata.ascend(metadata)) do |meta|
|
75
|
-
locations[meta[:absolute_file_path]]
|
76
|
-
end.uniq
|
77
|
-
end
|
78
|
-
|
79
70
|
def filters_apply?(key, value, metadata)
|
80
71
|
subhash = metadata[key]
|
81
72
|
return false unless Hash === subhash || HashImitatable === subhash
|
data/lib/rspec/core/rake_task.rb
CHANGED
@@ -6,6 +6,17 @@ module RSpec
|
|
6
6
|
# @private
|
7
7
|
# A wrapper for Ripper token which is generated with `Ripper.lex`.
|
8
8
|
class Token
|
9
|
+
CLOSING_TYPES_BY_OPENING_TYPE = {
|
10
|
+
:on_lbracket => :on_rbracket,
|
11
|
+
:on_lparen => :on_rparen,
|
12
|
+
:on_lbrace => :on_rbrace,
|
13
|
+
:on_heredoc_beg => :on_heredoc_end
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
CLOSING_KEYWORDS_BY_OPENING_KEYWORD = {
|
17
|
+
'do' => 'end'
|
18
|
+
}.freeze
|
19
|
+
|
9
20
|
attr_reader :token
|
10
21
|
|
11
22
|
def self.tokens_from_ripper_tokens(ripper_tokens)
|
@@ -37,6 +48,38 @@ module RSpec
|
|
37
48
|
def inspect
|
38
49
|
"#<#{self.class} #{type} #{string.inspect}>"
|
39
50
|
end
|
51
|
+
|
52
|
+
def keyword?
|
53
|
+
type == :on_kw
|
54
|
+
end
|
55
|
+
|
56
|
+
def opening?
|
57
|
+
opening_delimiter? || opening_keyword?
|
58
|
+
end
|
59
|
+
|
60
|
+
def closed_by?(other)
|
61
|
+
closed_by_delimiter?(other) || closed_by_keyword?(other)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def opening_delimiter?
|
67
|
+
CLOSING_TYPES_BY_OPENING_TYPE.key?(type)
|
68
|
+
end
|
69
|
+
|
70
|
+
def opening_keyword?
|
71
|
+
return false unless keyword?
|
72
|
+
CLOSING_KEYWORDS_BY_OPENING_KEYWORD.key?(string)
|
73
|
+
end
|
74
|
+
|
75
|
+
def closed_by_delimiter?(other)
|
76
|
+
other.type == CLOSING_TYPES_BY_OPENING_TYPE[type]
|
77
|
+
end
|
78
|
+
|
79
|
+
def closed_by_keyword?(other)
|
80
|
+
return false unless other.keyword?
|
81
|
+
other.string == CLOSING_KEYWORDS_BY_OPENING_KEYWORD[string]
|
82
|
+
end
|
40
83
|
end
|
41
84
|
end
|
42
85
|
end
|
data/lib/rspec/core/version.rb
CHANGED
data/lib/rspec/core/world.rb
CHANGED
@@ -96,10 +96,12 @@ module RSpec
|
|
96
96
|
# @api private
|
97
97
|
#
|
98
98
|
# Find line number of previous declaration.
|
99
|
-
def preceding_declaration_line(filter_line)
|
100
|
-
|
101
|
-
|
99
|
+
def preceding_declaration_line(absolute_file_name, filter_line)
|
100
|
+
line_numbers = descending_declaration_line_numbers_by_file.fetch(absolute_file_name) do
|
101
|
+
return nil
|
102
102
|
end
|
103
|
+
|
104
|
+
line_numbers.find { |num| num <= filter_line }
|
103
105
|
end
|
104
106
|
|
105
107
|
# @private
|
@@ -179,8 +181,22 @@ module RSpec
|
|
179
181
|
|
180
182
|
private
|
181
183
|
|
182
|
-
def
|
183
|
-
@
|
184
|
+
def descending_declaration_line_numbers_by_file
|
185
|
+
@descending_declaration_line_numbers_by_file ||= begin
|
186
|
+
declaration_locations = FlatMap.flat_map(example_groups, &:declaration_locations)
|
187
|
+
hash_of_arrays = Hash.new { |h, k| h[k] = [] }
|
188
|
+
|
189
|
+
# TODO: change `inject` to `each_with_object` when we drop 1.8.7 support.
|
190
|
+
line_nums_by_file = declaration_locations.inject(hash_of_arrays) do |hash, (file_name, line_number)|
|
191
|
+
hash[file_name] << line_number
|
192
|
+
hash
|
193
|
+
end
|
194
|
+
|
195
|
+
line_nums_by_file.each_value do |list|
|
196
|
+
list.sort!
|
197
|
+
list.reverse!
|
198
|
+
end
|
199
|
+
end
|
184
200
|
end
|
185
201
|
|
186
202
|
def fail_if_config_and_cli_options_invalid
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.
|
4
|
+
version: 3.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Baker
|
@@ -46,7 +46,7 @@ cert_chain:
|
|
46
46
|
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
|
47
47
|
F3MdtaDehhjC
|
48
48
|
-----END CERTIFICATE-----
|
49
|
-
date: 2016-
|
49
|
+
date: 2016-02-18 00:00:00.000000000 Z
|
50
50
|
dependencies:
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
52
|
name: rspec-support
|
@@ -293,9 +293,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
293
293
|
version: '0'
|
294
294
|
requirements: []
|
295
295
|
rubyforge_project:
|
296
|
-
rubygems_version: 2.
|
296
|
+
rubygems_version: 2.5.1
|
297
297
|
signing_key:
|
298
298
|
specification_version: 4
|
299
|
-
summary: rspec-core-3.4.
|
299
|
+
summary: rspec-core-3.4.3
|
300
300
|
test_files: []
|
301
301
|
has_rdoc:
|
metadata.gz.sig
CHANGED
Binary file
|