rspec-core 3.6.0.beta1 → 3.6.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Changelog.md +11 -0
- data/lib/rspec/core/configuration.rb +16 -13
- data/lib/rspec/core/example_group.rb +6 -2
- data/lib/rspec/core/formatters/exception_presenter.rb +4 -1
- data/lib/rspec/core/formatters/html_formatter.rb +4 -2
- data/lib/rspec/core/formatters/html_snippet_extractor.rb +2 -0
- data/lib/rspec/core/formatters/protocol.rb +23 -23
- data/lib/rspec/core/notifications.rb +16 -1
- data/lib/rspec/core/reporter.rb +4 -1
- data/lib/rspec/core/shared_example_group.rb +6 -0
- data/lib/rspec/core/source/syntax_highlighter.rb +20 -0
- data/lib/rspec/core/version.rb +1 -1
- metadata +6 -6
- 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: cedf9914463a5f8470ddb33bef491f31615a7b63
|
4
|
+
data.tar.gz: 8eecab50a480c797c96f53932f955643f23db6eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a162b44414bcbd3ac23ee749f456976c10858bc84b8703a4ef63f370fcf8a691b7366ef8a9d0d2e15f7cecea6f38ce78379da1a25be1f75bf09ea9e913aa4939
|
7
|
+
data.tar.gz: f9a9b8815b6a42d5da60f033443dbf145b025058a6ec327c8a16fde556c83a753b1ed2bfd54ae85e02772fa54e8d7169c7323e034622b52ffbd9e3eab0826841
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
### 3.6.0.beta2 / 2016-12-12
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-core/compare/v3.6.0.beta1...v3.6.0.beta2)
|
3
|
+
|
4
|
+
Enhancements:
|
5
|
+
|
6
|
+
* Include count of errors occurring outside examples in default summaries.
|
7
|
+
(#2351, Jon Rowe)
|
8
|
+
* Warn when including shared example groups recursively. (#2356, Jon Rowe)
|
9
|
+
* Improve failure snippet syntax highlighting with CodeRay to highlight
|
10
|
+
RSpec "keywords" like `expect`. (#2358, Myron Marston)
|
11
|
+
|
1
12
|
### 3.6.0.beta1 / 2016-10-09
|
2
13
|
[Full Changelog](http://github.com/rspec/rspec-core/compare/v3.5.4...v3.6.0.beta1)
|
3
14
|
|
@@ -850,19 +850,22 @@ module RSpec
|
|
850
850
|
end
|
851
851
|
|
852
852
|
# @overload add_formatter(formatter)
|
853
|
-
#
|
854
|
-
#
|
855
|
-
#
|
856
|
-
#
|
857
|
-
#
|
858
|
-
#
|
859
|
-
#
|
860
|
-
#
|
861
|
-
#
|
862
|
-
#
|
863
|
-
|
864
|
-
|
865
|
-
|
853
|
+
# @overload add_formatter(formatter, output)
|
854
|
+
#
|
855
|
+
# @param formatter [Class, String] formatter to use. Can be any of the
|
856
|
+
# string values supported from the CLI (`p`/`progress`,
|
857
|
+
# `d`/`doc`/`documentation`, `h`/`html`, or `j`/`json`) or any
|
858
|
+
# class that implements the formatter protocol and has registered
|
859
|
+
# itself with RSpec as a formatter.
|
860
|
+
# @param output [String, IO] where the formatter will write its output.
|
861
|
+
# Can be an IO object or a string path to a file. If not provided,
|
862
|
+
# the configured `output_stream` (`$stdout`, by default) will be used.
|
863
|
+
#
|
864
|
+
# Adds a formatter to the set RSpec will use for this run.
|
865
|
+
#
|
866
|
+
# @see RSpec::Core::Formatters::Protocol
|
867
|
+
def add_formatter(formatter, output=output_stream)
|
868
|
+
formatter_loader.add(formatter, output)
|
866
869
|
end
|
867
870
|
alias_method :formatter=, :add_formatter
|
868
871
|
|
@@ -793,8 +793,12 @@ module RSpec
|
|
793
793
|
# @private
|
794
794
|
def self.with_frame(name, location)
|
795
795
|
current_stack = shared_example_group_inclusions
|
796
|
-
current_stack
|
797
|
-
|
796
|
+
if current_stack.any? { |frame| frame.shared_group_name == name }
|
797
|
+
raise ArgumentError, "can't include shared examples recursively"
|
798
|
+
else
|
799
|
+
current_stack << new(name, location)
|
800
|
+
yield
|
801
|
+
end
|
798
802
|
ensure
|
799
803
|
current_stack.pop
|
800
804
|
end
|
@@ -346,7 +346,10 @@ module RSpec
|
|
346
346
|
|
347
347
|
failure = common_backtrace_truncater.with_truncated_backtrace(failure)
|
348
348
|
presenter = ExceptionPresenter.new(failure, @example, options)
|
349
|
-
presenter.fully_formatted_lines(
|
349
|
+
presenter.fully_formatted_lines(
|
350
|
+
"#{failure_number ? "#{failure_number}." : ''}#{index + 1}",
|
351
|
+
colorizer
|
352
|
+
)
|
350
353
|
end
|
351
354
|
end
|
352
355
|
end
|
@@ -69,10 +69,12 @@ module RSpec
|
|
69
69
|
example = failure.example
|
70
70
|
|
71
71
|
exception = failure.exception
|
72
|
+
message_lines = failure.fully_formatted_lines(nil, RSpec::Core::Notifications::NullColorizer)
|
72
73
|
exception_details = if exception
|
73
74
|
{
|
74
|
-
|
75
|
-
:
|
75
|
+
# drop 2 removes the description (regardless of newlines) and leading blank line
|
76
|
+
:message => message_lines.drop(2).join("\n"),
|
77
|
+
:backtrace => failure.formatted_backtrace.join("\n"),
|
76
78
|
}
|
77
79
|
end
|
78
80
|
extra = extra_failure_content(failure)
|
@@ -24,6 +24,8 @@ module RSpec
|
|
24
24
|
@@converter = NullConverter
|
25
25
|
begin
|
26
26
|
require 'coderay'
|
27
|
+
RSpec::Support.require_rspec_core 'source/syntax_highlighter'
|
28
|
+
RSpec::Core::Source::SyntaxHighlighter.attempt_to_add_rspec_terms_to_coderay_keywords
|
27
29
|
@@converter = CoderayConverter
|
28
30
|
# rubocop:disable Lint/HandleExceptions
|
29
31
|
rescue LoadError
|
@@ -33,7 +33,7 @@ module RSpec
|
|
33
33
|
# This will only be invoked once, and the next one to be invoked
|
34
34
|
# is {#example_group_started}.
|
35
35
|
#
|
36
|
-
# @param notification [StartNotification]
|
36
|
+
# @param notification [Notifications::StartNotification]
|
37
37
|
|
38
38
|
# @method example_group_started
|
39
39
|
# @api public
|
@@ -45,8 +45,8 @@ module RSpec
|
|
45
45
|
# The next method to be invoked after this is {#example_passed},
|
46
46
|
# {#example_pending}, or {#example_group_finished}.
|
47
47
|
#
|
48
|
-
# @param notification [GroupNotification] containing example_group
|
49
|
-
# subclass of
|
48
|
+
# @param notification [Notifications::GroupNotification] containing example_group
|
49
|
+
# subclass of {ExampleGroup}
|
50
50
|
|
51
51
|
# @method example_group_finished
|
52
52
|
# @api public
|
@@ -54,8 +54,8 @@ module RSpec
|
|
54
54
|
#
|
55
55
|
# Invoked at the end of the execution of each example group.
|
56
56
|
#
|
57
|
-
# @param notification [GroupNotification] containing example_group
|
58
|
-
# subclass of
|
57
|
+
# @param notification [Notifications::GroupNotification] containing example_group
|
58
|
+
# subclass of {ExampleGroup}
|
59
59
|
|
60
60
|
# @method example_started
|
61
61
|
# @api public
|
@@ -63,8 +63,8 @@ module RSpec
|
|
63
63
|
#
|
64
64
|
# Invoked at the beginning of the execution of each example.
|
65
65
|
#
|
66
|
-
# @param notification [ExampleNotification] containing example subclass
|
67
|
-
# of
|
66
|
+
# @param notification [Notifications::ExampleNotification] containing example subclass
|
67
|
+
# of {Example}
|
68
68
|
|
69
69
|
# @method example_finished
|
70
70
|
# @api public
|
@@ -72,8 +72,8 @@ module RSpec
|
|
72
72
|
#
|
73
73
|
# Invoked at the end of the execution of each example.
|
74
74
|
#
|
75
|
-
# @param notification [ExampleNotification] containing example subclass
|
76
|
-
# of
|
75
|
+
# @param notification [Notifications::ExampleNotification] containing example subclass
|
76
|
+
# of {Example}
|
77
77
|
|
78
78
|
# @method example_passed
|
79
79
|
# @api public
|
@@ -81,8 +81,8 @@ module RSpec
|
|
81
81
|
#
|
82
82
|
# Invoked when an example passes.
|
83
83
|
#
|
84
|
-
# @param notification [ExampleNotification] containing example subclass
|
85
|
-
# of
|
84
|
+
# @param notification [Notifications::ExampleNotification] containing example subclass
|
85
|
+
# of {Example}
|
86
86
|
|
87
87
|
# @method example_pending
|
88
88
|
# @api public
|
@@ -90,8 +90,8 @@ module RSpec
|
|
90
90
|
#
|
91
91
|
# Invoked when an example is pending.
|
92
92
|
#
|
93
|
-
# @param notification [ExampleNotification] containing example subclass
|
94
|
-
# of
|
93
|
+
# @param notification [Notifications::ExampleNotification] containing example subclass
|
94
|
+
# of {Example}
|
95
95
|
|
96
96
|
# @method example_failed
|
97
97
|
# @api public
|
@@ -99,8 +99,8 @@ module RSpec
|
|
99
99
|
#
|
100
100
|
# Invoked when an example fails.
|
101
101
|
#
|
102
|
-
# @param notification [ExampleNotification] containing example subclass
|
103
|
-
# of
|
102
|
+
# @param notification [Notifications::ExampleNotification] containing example subclass
|
103
|
+
# of {Example}
|
104
104
|
|
105
105
|
# @method message
|
106
106
|
# @api public
|
@@ -108,7 +108,7 @@ module RSpec
|
|
108
108
|
#
|
109
109
|
# Used by the reporter to send messages to the output stream.
|
110
110
|
#
|
111
|
-
# @param notification [MessageNotification] containing message
|
111
|
+
# @param notification [Notifications::MessageNotification] containing message
|
112
112
|
|
113
113
|
# @method stop
|
114
114
|
# @api public
|
@@ -117,7 +117,7 @@ module RSpec
|
|
117
117
|
# Invoked after all examples have executed, before dumping post-run
|
118
118
|
# reports.
|
119
119
|
#
|
120
|
-
# @param notification [NullNotification]
|
120
|
+
# @param notification [Notifications::NullNotification]
|
121
121
|
|
122
122
|
# @method start_dump
|
123
123
|
# @api public
|
@@ -128,7 +128,7 @@ module RSpec
|
|
128
128
|
# (BaseTextFormatter then calls {#dump_failures} once for each failed
|
129
129
|
# example).
|
130
130
|
#
|
131
|
-
# @param notification [NullNotification]
|
131
|
+
# @param notification [Notifications::NullNotification]
|
132
132
|
|
133
133
|
# @method dump_failures
|
134
134
|
# @api public
|
@@ -136,7 +136,7 @@ module RSpec
|
|
136
136
|
#
|
137
137
|
# Dumps detailed information about each example failure.
|
138
138
|
#
|
139
|
-
# @param notification [NullNotification]
|
139
|
+
# @param notification [Notifications::NullNotification]
|
140
140
|
|
141
141
|
# @method dump_summary
|
142
142
|
# @api public
|
@@ -145,7 +145,7 @@ module RSpec
|
|
145
145
|
# This method is invoked after the dumping of examples and failures.
|
146
146
|
# Each parameter is assigned to a corresponding attribute.
|
147
147
|
#
|
148
|
-
# @param summary [SummaryNotification] containing duration,
|
148
|
+
# @param summary [Notifications::SummaryNotification] containing duration,
|
149
149
|
# example_count, failure_count and pending_count
|
150
150
|
|
151
151
|
# @method dump_profile
|
@@ -155,7 +155,7 @@ module RSpec
|
|
155
155
|
# This method is invoked after the dumping the summary if profiling is
|
156
156
|
# enabled.
|
157
157
|
#
|
158
|
-
# @param profile [ProfileNotification] containing duration,
|
158
|
+
# @param profile [Notifications::ProfileNotification] containing duration,
|
159
159
|
# slowest_examples and slowest_example_groups
|
160
160
|
|
161
161
|
# @method dump_pending
|
@@ -165,7 +165,7 @@ module RSpec
|
|
165
165
|
# Outputs a report of pending examples. This gets invoked
|
166
166
|
# after the summary if option is set to do so.
|
167
167
|
#
|
168
|
-
# @param notification [NullNotification]
|
168
|
+
# @param notification [Notifications::NullNotification]
|
169
169
|
|
170
170
|
# @method close
|
171
171
|
# @api public
|
@@ -174,7 +174,7 @@ module RSpec
|
|
174
174
|
# Invoked at the very end, `close` allows the formatter to clean
|
175
175
|
# up resources, e.g. open streams, etc.
|
176
176
|
#
|
177
|
-
# @param notification [NullNotification]
|
177
|
+
# @param notification [Notifications::NullNotification]
|
178
178
|
end
|
179
179
|
end
|
180
180
|
end
|
@@ -200,6 +200,12 @@ module RSpec::Core
|
|
200
200
|
@exception_presenter.fully_formatted(failure_number, colorizer)
|
201
201
|
end
|
202
202
|
|
203
|
+
# @return [Array<string>] The failure information fully formatted in the way that
|
204
|
+
# RSpec's built-in formatters emit, split by line.
|
205
|
+
def fully_formatted_lines(failure_number, colorizer=::RSpec::Core::Formatters::ConsoleCodes)
|
206
|
+
@exception_presenter.fully_formatted_lines(failure_number, colorizer)
|
207
|
+
end
|
208
|
+
|
203
209
|
private
|
204
210
|
|
205
211
|
def initialize(example, exception_presenter=Formatters::ExceptionPresenter::Factory.new(example).build)
|
@@ -281,8 +287,12 @@ module RSpec::Core
|
|
281
287
|
# @attr pending_examples [Array<RSpec::Core::Example>] the pending examples
|
282
288
|
# @attr load_time [Float] the number of seconds taken to boot RSpec
|
283
289
|
# and load the spec files
|
290
|
+
# @attr errors_outside_of_examples_count [Integer] the number of errors that
|
291
|
+
# have occurred processing
|
292
|
+
# the spec suite
|
284
293
|
SummaryNotification = Struct.new(:duration, :examples, :failed_examples,
|
285
|
-
:pending_examples, :load_time
|
294
|
+
:pending_examples, :load_time,
|
295
|
+
:errors_outside_of_examples_count)
|
286
296
|
class SummaryNotification
|
287
297
|
# @api
|
288
298
|
# @return [Fixnum] the number of examples run
|
@@ -308,6 +318,11 @@ module RSpec::Core
|
|
308
318
|
summary = Formatters::Helpers.pluralize(example_count, "example")
|
309
319
|
summary << ", " << Formatters::Helpers.pluralize(failure_count, "failure")
|
310
320
|
summary << ", #{pending_count} pending" if pending_count > 0
|
321
|
+
if errors_outside_of_examples_count > 0
|
322
|
+
summary << ", "
|
323
|
+
summary << Formatters::Helpers.pluralize(errors_outside_of_examples_count, "error")
|
324
|
+
summary << " occurred outside of examples"
|
325
|
+
end
|
311
326
|
summary
|
312
327
|
end
|
313
328
|
|
data/lib/rspec/core/reporter.rb
CHANGED
@@ -18,6 +18,7 @@ module RSpec::Core
|
|
18
18
|
@failed_examples = []
|
19
19
|
@pending_examples = []
|
20
20
|
@duration = @start = @load_time = nil
|
21
|
+
@non_example_exception_count = 0
|
21
22
|
end
|
22
23
|
|
23
24
|
# @private
|
@@ -157,6 +158,7 @@ module RSpec::Core
|
|
157
158
|
# Exceptions will be formatted the same way they normally are.
|
158
159
|
def notify_non_example_exception(exception, context_description)
|
159
160
|
@configuration.world.non_example_failure = true
|
161
|
+
@non_example_exception_count += 1
|
160
162
|
|
161
163
|
example = Example.new(AnonymousExampleGroup, context_description, {})
|
162
164
|
presenter = Formatters::ExceptionPresenter.new(exception, example, :indentation => 0)
|
@@ -177,7 +179,8 @@ module RSpec::Core
|
|
177
179
|
@profiler.example_groups)
|
178
180
|
end
|
179
181
|
notify :dump_summary, Notifications::SummaryNotification.new(@duration, @examples, @failed_examples,
|
180
|
-
@pending_examples, @load_time
|
182
|
+
@pending_examples, @load_time,
|
183
|
+
@non_example_exception_count)
|
181
184
|
notify :seed, Notifications::SeedNotification.new(@configuration.seed, seed_used?)
|
182
185
|
end
|
183
186
|
end
|
@@ -153,6 +153,12 @@ module RSpec
|
|
153
153
|
# @private
|
154
154
|
class Registry
|
155
155
|
def add(context, name, *metadata_args, &block)
|
156
|
+
unless block
|
157
|
+
RSpec.warning "Shared example group #{name} was defined without a "\
|
158
|
+
"block and will have no effect. Please define a "\
|
159
|
+
"block or remove the definition."
|
160
|
+
end
|
161
|
+
|
156
162
|
if RSpec.configuration.shared_context_metadata_behavior == :trigger_inclusion
|
157
163
|
return legacy_add(context, name, *metadata_args, &block)
|
158
164
|
end
|
@@ -31,12 +31,32 @@ module RSpec
|
|
31
31
|
def color_enabled_implementation
|
32
32
|
@color_enabled_implementation ||= begin
|
33
33
|
require 'coderay'
|
34
|
+
self.class.attempt_to_add_rspec_terms_to_coderay_keywords
|
34
35
|
CodeRayImplementation
|
35
36
|
rescue LoadError
|
36
37
|
NoSyntaxHighlightingImplementation
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
41
|
+
# rubocop:disable Lint/RescueException
|
42
|
+
# rubocop:disable Lint/HandleExceptions
|
43
|
+
def self.attempt_to_add_rspec_terms_to_coderay_keywords
|
44
|
+
CodeRay::Scanners::Ruby::Patterns::IDENT_KIND.add(%w[
|
45
|
+
describe context
|
46
|
+
it specify
|
47
|
+
before after around
|
48
|
+
let subject
|
49
|
+
expect allow
|
50
|
+
], :keyword)
|
51
|
+
rescue Exception
|
52
|
+
# Mutating CodeRay's contants like this is not a public API
|
53
|
+
# and might not always work. If we cannot add our keywords
|
54
|
+
# to CodeRay it is not a big deal and not worth raising an
|
55
|
+
# error over, so we ignore it.
|
56
|
+
end
|
57
|
+
# rubocop:enable Lint/HandleExceptions
|
58
|
+
# rubocop:enable Lint/RescueException
|
59
|
+
|
40
60
|
# @private
|
41
61
|
module CodeRayImplementation
|
42
62
|
RESET_CODE = "\e[0m"
|
data/lib/rspec/core/version.rb
CHANGED
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.6.0.
|
4
|
+
version: 3.6.0.beta2
|
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-12-12 00:00:00.000000000 Z
|
50
50
|
dependencies:
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
52
|
name: rspec-support
|
@@ -54,14 +54,14 @@ dependencies:
|
|
54
54
|
requirements:
|
55
55
|
- - '='
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version: 3.6.0.
|
57
|
+
version: 3.6.0.beta2
|
58
58
|
type: :runtime
|
59
59
|
prerelease: false
|
60
60
|
version_requirements: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
62
|
- - '='
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: 3.6.0.
|
64
|
+
version: 3.6.0.beta2
|
65
65
|
- !ruby/object:Gem::Dependency
|
66
66
|
name: cucumber
|
67
67
|
requirement: !ruby/object:Gem::Requirement
|
@@ -280,9 +280,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
280
280
|
version: 1.3.1
|
281
281
|
requirements: []
|
282
282
|
rubyforge_project:
|
283
|
-
rubygems_version: 2.
|
283
|
+
rubygems_version: 2.5.1
|
284
284
|
signing_key:
|
285
285
|
specification_version: 4
|
286
|
-
summary: rspec-core-3.6.0.
|
286
|
+
summary: rspec-core-3.6.0.beta2
|
287
287
|
test_files: []
|
288
288
|
has_rdoc:
|
metadata.gz.sig
CHANGED
Binary file
|