rspec-core 2.14.8 → 2.99.0.beta1
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 +8 -8
- data/Changelog.md +54 -8
- data/features/command_line/order.feature +5 -8
- data/features/configuration/custom_settings.feature +10 -10
- data/features/configuration/deprecation_stream.feature +3 -3
- data/features/configuration/read_options_from_file.feature +1 -1
- data/features/example_groups/shared_examples.feature +2 -2
- data/features/hooks/around_hooks.feature +1 -1
- data/features/metadata/current_example.feature +43 -4
- data/features/metadata/user_defined.feature +12 -12
- data/lib/autotest/rspec2.rb +60 -56
- data/lib/rspec/core.rb +40 -2
- data/lib/rspec/core/caller_filter.rb +55 -0
- data/lib/rspec/core/command_line.rb +2 -2
- data/lib/rspec/core/configuration.rb +201 -13
- data/lib/rspec/core/deprecation.rb +2 -7
- data/lib/rspec/core/example.rb +5 -8
- data/lib/rspec/core/example_group.rb +101 -17
- data/lib/rspec/core/filter_manager.rb +2 -2
- data/lib/rspec/core/formatters/deprecation_formatter.rb +173 -15
- data/lib/rspec/core/formatters/text_mate_formatter.rb +0 -12
- data/lib/rspec/core/hooks.rb +1 -1
- data/lib/rspec/core/memoized_helpers.rb +49 -17
- data/lib/rspec/core/metadata.rb +1 -1
- data/lib/rspec/core/option_parser.rb +8 -3
- data/lib/rspec/core/pending.rb +14 -10
- data/lib/rspec/core/rake_task.rb +30 -6
- data/lib/rspec/core/runner.rb +9 -0
- data/lib/rspec/core/shared_example_group.rb +11 -9
- data/lib/rspec/core/shared_example_group/collection.rb +3 -1
- data/lib/rspec/core/version.rb +1 -2
- data/spec/command_line/order_spec.rb +4 -4
- data/spec/rspec/core/backtrace_cleaner_spec.rb +10 -10
- data/spec/rspec/core/caller_filter_spec.rb +58 -0
- data/spec/rspec/core/command_line_spec.rb +1 -0
- data/spec/rspec/core/configuration_options_spec.rb +6 -6
- data/spec/rspec/core/configuration_spec.rb +285 -52
- data/spec/rspec/core/deprecation_spec.rb +10 -29
- data/spec/rspec/core/deprecations_spec.rb +0 -14
- data/spec/rspec/core/example_group_spec.rb +74 -56
- data/spec/rspec/core/example_spec.rb +54 -17
- data/spec/rspec/core/filter_manager_spec.rb +2 -2
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +156 -52
- data/spec/rspec/core/formatters/html_formatter_spec.rb +1 -1
- data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +1 -2
- data/spec/rspec/core/hooks_spec.rb +2 -0
- data/spec/rspec/core/memoized_helpers_spec.rb +154 -113
- data/spec/rspec/core/metadata_spec.rb +25 -25
- data/spec/rspec/core/option_parser_spec.rb +19 -1
- data/spec/rspec/core/project_initializer_spec.rb +4 -4
- data/spec/rspec/core/rake_task_spec.rb +25 -4
- data/spec/rspec/core/shared_context_spec.rb +4 -4
- data/spec/rspec/core/shared_example_group_spec.rb +1 -1
- data/spec/rspec/core_spec.rb +36 -2
- data/spec/spec_helper.rb +3 -0
- data/spec/support/helper_methods.rb +16 -1
- data/spec/support/shared_example_groups.rb +1 -0
- data/spec/support/silence_dsl_deprecations.rb +32 -0
- metadata +10 -7
- data/spec/rspec/core/formatters/text_mate_formatted-2.1.0.html +0 -425
data/lib/rspec/core.rb
CHANGED
@@ -2,7 +2,7 @@ require_rspec = if defined?(require_relative)
|
|
2
2
|
lambda do |path|
|
3
3
|
require_relative path
|
4
4
|
end
|
5
|
-
else
|
5
|
+
else # for 1.8.7
|
6
6
|
lambda do |path|
|
7
7
|
require "rspec/#{path}"
|
8
8
|
end
|
@@ -11,6 +11,7 @@ end
|
|
11
11
|
require 'set'
|
12
12
|
require 'time'
|
13
13
|
require 'rbconfig'
|
14
|
+
require_rspec['core/caller_filter']
|
14
15
|
require_rspec['core/filter_manager']
|
15
16
|
require_rspec['core/dsl']
|
16
17
|
require_rspec['core/extensions/kernel']
|
@@ -94,7 +95,7 @@ DEPRECATION WARNING
|
|
94
95
|
* RSpec.configuration with a block is deprecated and has no effect.
|
95
96
|
* please use RSpec.configure with a block instead.
|
96
97
|
|
97
|
-
Called from #{
|
98
|
+
Called from #{CallerFilter.first_non_rspec_line}
|
98
99
|
*****************************************************************
|
99
100
|
|
100
101
|
WARNING
|
@@ -126,6 +127,37 @@ WARNING
|
|
126
127
|
world.example_groups.clear
|
127
128
|
end
|
128
129
|
|
130
|
+
# The example being executed.
|
131
|
+
#
|
132
|
+
# The primary audience for this method is library authors who need access
|
133
|
+
# to the example currently being executed and also want to support all
|
134
|
+
# versions of RSpec 2 and 3.
|
135
|
+
#
|
136
|
+
# @example
|
137
|
+
#
|
138
|
+
# RSpec.configure do |c|
|
139
|
+
# # context.example is deprecated, but RSpec.current_example is not
|
140
|
+
# # available until RSpec 3.0.
|
141
|
+
# fetch_current_example = RSpec.respond_to?(:current_example) ?
|
142
|
+
# proc { RSpec.current_example } : proc { |context| context.example }
|
143
|
+
#
|
144
|
+
# c.before(:each) do
|
145
|
+
# example = fetch_current_example.call(self)
|
146
|
+
#
|
147
|
+
# # ...
|
148
|
+
# end
|
149
|
+
# end
|
150
|
+
#
|
151
|
+
def self.current_example
|
152
|
+
Thread.current[:_rspec_current_example]
|
153
|
+
end
|
154
|
+
|
155
|
+
# Set the current example being executed.
|
156
|
+
# @api private
|
157
|
+
def self.current_example=(example)
|
158
|
+
Thread.current[:_rspec_current_example] = example
|
159
|
+
end
|
160
|
+
|
129
161
|
# @private
|
130
162
|
def self.windows_os?
|
131
163
|
RbConfig::CONFIG['host_os'] =~ /cygwin|mswin|mingw|bccwin|wince|emx/
|
@@ -141,6 +173,12 @@ WARNING
|
|
141
173
|
define_method(:now,&::Time.method(:now))
|
142
174
|
end
|
143
175
|
end
|
176
|
+
|
177
|
+
# @private path to executable file
|
178
|
+
def self.path_to_executable
|
179
|
+
File.expand_path('../../../exe/rspec', __FILE__)
|
180
|
+
end
|
181
|
+
|
144
182
|
end
|
145
183
|
|
146
184
|
MODULES_TO_AUTOLOAD = {
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module RSpec
|
2
|
+
# Consistent implementation for "cleaning" the caller method to strip out
|
3
|
+
# non-rspec lines. This enables errors to be reported at the call site in
|
4
|
+
# the code using the library, which is far more useful than the particular
|
5
|
+
# internal method that raised an error.
|
6
|
+
class CallerFilter
|
7
|
+
|
8
|
+
RSPEC_LIBS = %w[
|
9
|
+
core
|
10
|
+
mocks
|
11
|
+
expectations
|
12
|
+
matchers
|
13
|
+
rails
|
14
|
+
]
|
15
|
+
|
16
|
+
ADDITIONAL_TOP_LEVEL_FILES = %w[ autorun ]
|
17
|
+
|
18
|
+
LIB_REGEX = %r{/lib/rspec/(#{(RSPEC_LIBS + ADDITIONAL_TOP_LEVEL_FILES).join('|')})(\.rb|/)}
|
19
|
+
|
20
|
+
if RUBY_VERSION >= '2.0.0'
|
21
|
+
def self.first_non_rspec_line
|
22
|
+
# `caller` is an expensive method that scales linearly with the size of
|
23
|
+
# the stack. The performance hit for fetching it in chunks is small,
|
24
|
+
# and since the target line is probably near the top of the stack, the
|
25
|
+
# overall improvement of a chunked search like this is significant.
|
26
|
+
#
|
27
|
+
# See benchmarks/caller.rb for measurements.
|
28
|
+
|
29
|
+
# Initial value here is mostly arbitrary, but is chosen to give good
|
30
|
+
# performance on the common case of creating a double.
|
31
|
+
increment = 5
|
32
|
+
i = 1
|
33
|
+
line = nil
|
34
|
+
|
35
|
+
while !line
|
36
|
+
stack = caller(i, increment)
|
37
|
+
raise "No non-lib lines in stack" unless stack
|
38
|
+
|
39
|
+
line = stack.find { |l| l !~ LIB_REGEX }
|
40
|
+
|
41
|
+
i += increment
|
42
|
+
increment *= 2 # The choice of two here is arbitrary.
|
43
|
+
end
|
44
|
+
|
45
|
+
line
|
46
|
+
end
|
47
|
+
else
|
48
|
+
# Earlier rubies do not support the two argument form of `caller`. This
|
49
|
+
# fallback is logically the same, but slower.
|
50
|
+
def self.first_non_rspec_line
|
51
|
+
caller.find { |line| line !~ LIB_REGEX }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -17,12 +17,12 @@ module RSpec
|
|
17
17
|
# @param [IO] out
|
18
18
|
def run(err, out)
|
19
19
|
@configuration.error_stream = err
|
20
|
-
@configuration.output_stream
|
20
|
+
@configuration.output_stream = out if @configuration.output_stream == $stdout
|
21
21
|
@options.configure(@configuration)
|
22
22
|
@configuration.load_spec_files
|
23
23
|
@world.announce_filters
|
24
24
|
|
25
|
-
@configuration.reporter.report(@world.example_count, @configuration.
|
25
|
+
@configuration.reporter.report(@world.example_count, @configuration.send(:_randomize?) ? @configuration.seed : nil) do |reporter|
|
26
26
|
begin
|
27
27
|
@configuration.run_hook(:before, :suite)
|
28
28
|
@world.example_groups.ordered.map {|g| g.run(reporter)}.all? ? 0 : @configuration.failure_exit_code
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'rspec/core/backtrace_cleaner'
|
3
3
|
require 'rspec/core/ruby_project'
|
4
|
-
require 'rspec/core/formatters/deprecation_formatter
|
4
|
+
require 'rspec/core/formatters/deprecation_formatter'
|
5
5
|
|
6
6
|
module RSpec
|
7
7
|
module Core
|
@@ -104,10 +104,6 @@ module RSpec
|
|
104
104
|
# The exit code to return if there are any failures (default: 1).
|
105
105
|
add_setting :failure_exit_code
|
106
106
|
|
107
|
-
# Determines the order in which examples are run (default: OS standard
|
108
|
-
# load order for files, declaration order for groups and examples).
|
109
|
-
define_reader :order
|
110
|
-
|
111
107
|
# Indicates files configured to be required
|
112
108
|
define_reader :requires
|
113
109
|
|
@@ -116,11 +112,53 @@ module RSpec
|
|
116
112
|
|
117
113
|
# Default: `$stdout`.
|
118
114
|
# Also known as `output` and `out`
|
119
|
-
|
115
|
+
define_reader :output_stream
|
116
|
+
def output_stream=(value)
|
117
|
+
if @reporter && !value.equal?(@output_stream)
|
118
|
+
warn "RSpec's reporter has already been initialized with " +
|
119
|
+
"#{output_stream.inspect} as the output stream, so your change to "+
|
120
|
+
"`output_stream` will be ignored. You should configure it earlier for " +
|
121
|
+
"it to take effect. (Called from #{CallerFilter.first_non_rspec_line})"
|
122
|
+
else
|
123
|
+
@output_stream = value
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# @deprecated use RSpec::Core::Configuration#output_stream instead.
|
128
|
+
def output
|
129
|
+
RSpec.deprecate("RSpec::Core::Configuration#output", :replacement => "RSpec::Core::Configuration#output_stream")
|
130
|
+
output_stream
|
131
|
+
end
|
132
|
+
|
133
|
+
# @deprecated use RSpec::Core::Configuration#output_stream= instead.
|
134
|
+
def output=(value)
|
135
|
+
RSpec.deprecate("RSpec::Core::Configuration#output=", :replacement => "RSpec::Core::Configuration#output_stream=")
|
136
|
+
self.output_stream = value
|
137
|
+
end
|
138
|
+
|
139
|
+
# @deprecated use RSpec::Core::Configuration#output_stream instead.
|
140
|
+
def out
|
141
|
+
RSpec.deprecate("RSpec::Core::Configuration#out", :replacement => "RSpec::Core::Configuration#output_stream")
|
142
|
+
output_stream
|
143
|
+
end
|
144
|
+
|
145
|
+
# @deprecated use RSpec::Core::Configuration#output_stream= instead.
|
146
|
+
def out=(value)
|
147
|
+
RSpec.deprecate("RSpec::Core::Configuration#out=", :replacement => "RSpec::Core::Configuration#output_stream=")
|
148
|
+
self.output_stream = value
|
149
|
+
end
|
120
150
|
|
121
151
|
# Load files matching this pattern (default: `'**/*_spec.rb'`)
|
122
152
|
add_setting :pattern, :alias_with => :filename_pattern
|
123
153
|
|
154
|
+
def pattern= value
|
155
|
+
if @spec_files_loaded
|
156
|
+
Kernel.warn "WARNING: Configuring `pattern` to #{value} has no effect since RSpec has already loaded the spec files. Called from #{CallerFilter.first_non_rspec_line}"
|
157
|
+
end
|
158
|
+
@pattern = value
|
159
|
+
end
|
160
|
+
alias :filename_pattern= :pattern=
|
161
|
+
|
124
162
|
# Report the times for the slowest examples (default: `false`).
|
125
163
|
# Use this to specify the number of examples to include in the profile.
|
126
164
|
add_setting :profile_examples
|
@@ -170,6 +208,14 @@ module RSpec
|
|
170
208
|
# end
|
171
209
|
add_setting :treat_symbols_as_metadata_keys_with_true_values
|
172
210
|
|
211
|
+
def treat_symbols_as_metadata_keys_with_true_values=(value)
|
212
|
+
unless value
|
213
|
+
RSpec.deprecate("RSpec.configuration.treat_symbols_as_metadata_keys_with_true_values = false")
|
214
|
+
end
|
215
|
+
|
216
|
+
@treat_symbols_as_metadata_keys_with_true_values = value
|
217
|
+
end
|
218
|
+
|
173
219
|
# @private
|
174
220
|
add_setting :tty
|
175
221
|
# @private
|
@@ -190,13 +236,17 @@ module RSpec
|
|
190
236
|
@files_to_run = []
|
191
237
|
@formatters = []
|
192
238
|
@color = false
|
239
|
+
@order = nil
|
193
240
|
@pattern = '**/*_spec.rb'
|
194
241
|
@failure_exit_code = 1
|
242
|
+
@spec_files_loaded = false
|
195
243
|
|
196
244
|
@backtrace_cleaner = BacktraceCleaner.new
|
197
245
|
|
198
246
|
@default_path = 'spec'
|
199
247
|
@deprecation_stream = $stderr
|
248
|
+
@output_stream = $stdout
|
249
|
+
@reporter = nil
|
200
250
|
@filter_manager = FilterManager.new
|
201
251
|
@preferred_options = {}
|
202
252
|
@seed = srand % 0xFFFF
|
@@ -226,6 +276,7 @@ module RSpec
|
|
226
276
|
|
227
277
|
# @private
|
228
278
|
def reset
|
279
|
+
@spec_files_loaded = false
|
229
280
|
@reporter = nil
|
230
281
|
@formatters.clear
|
231
282
|
end
|
@@ -516,6 +567,18 @@ module RSpec
|
|
516
567
|
end
|
517
568
|
|
518
569
|
def debug=(bool)
|
570
|
+
if bool
|
571
|
+
# Usually this is called automatically by the --debug CLI option, so the
|
572
|
+
# deprecation message doesn't mention `RSpec::Core::Configuration#debug=`
|
573
|
+
RSpec.deprecate("RSpec's built-in debugger support",
|
574
|
+
:replacement => "a CLI option like `-rruby-debug` or `-rdebugger`")
|
575
|
+
else
|
576
|
+
# ...but the only way to call this with a false value is to
|
577
|
+
# call it directly, so here we mention the method name.
|
578
|
+
# There's no replacement for it since it's a no-op, though.
|
579
|
+
RSpec.deprecate("RSpec::Core::Configuration#debug=")
|
580
|
+
end
|
581
|
+
|
519
582
|
return unless bool
|
520
583
|
begin
|
521
584
|
require 'ruby-debug'
|
@@ -537,6 +600,9 @@ EOM
|
|
537
600
|
end
|
538
601
|
|
539
602
|
def debug?
|
603
|
+
RSpec.deprecate("RSpec::Core::Configuration#debug?",
|
604
|
+
:replacement => "defined?(Debugger)")
|
605
|
+
|
540
606
|
!!defined?(Debugger)
|
541
607
|
end
|
542
608
|
|
@@ -574,7 +640,7 @@ EOM
|
|
574
640
|
custom_formatter(formatter_to_use) ||
|
575
641
|
(raise ArgumentError, "Formatter '#{formatter_to_use}' unknown - maybe you meant 'documentation' or 'progress'?.")
|
576
642
|
|
577
|
-
paths <<
|
643
|
+
paths << output_stream if paths.empty?
|
578
644
|
formatters << formatter_class.new(*paths.map {|p| String === p ? file_at(p) : p})
|
579
645
|
end
|
580
646
|
|
@@ -894,6 +960,7 @@ EOM
|
|
894
960
|
# @private
|
895
961
|
def load_spec_files
|
896
962
|
files_to_run.uniq.each {|f| load File.expand_path(f) }
|
963
|
+
@spec_files_loaded = true
|
897
964
|
raise_if_rspec_1_is_loaded
|
898
965
|
end
|
899
966
|
|
@@ -930,8 +997,28 @@ EOM
|
|
930
997
|
order_and_seed_from_order(type)
|
931
998
|
end
|
932
999
|
|
1000
|
+
# Determines the order in which examples are run (default: OS standard
|
1001
|
+
# load order for files, declaration order for groups and examples).
|
1002
|
+
def order
|
1003
|
+
RSpec.warn_deprecation(
|
1004
|
+
"RSpec::Core::Configuration#order is deprecated with no replacement. " +
|
1005
|
+
"In RSpec 3 individal example groups can use a particular ordering, " +
|
1006
|
+
"so `order` is no longer a global property of the entire suite. " +
|
1007
|
+
"Called from #{CallerFilter.first_non_rspec_line}."
|
1008
|
+
)
|
1009
|
+
|
1010
|
+
value_for(:order, @order)
|
1011
|
+
end
|
1012
|
+
|
933
1013
|
def randomize?
|
934
|
-
|
1014
|
+
RSpec.warn_deprecation(
|
1015
|
+
"RSpec::Core::Configuration#randomize? is deprecated with no replacement. " +
|
1016
|
+
"In RSpec 3 individal example groups can use a particular ordering, " +
|
1017
|
+
"so `randomize?` is no longer a binary property of the entire suite. " +
|
1018
|
+
"Called from #{CallerFilter.first_non_rspec_line}."
|
1019
|
+
)
|
1020
|
+
|
1021
|
+
value_for(:order, @order).to_s.match(/rand/)
|
935
1022
|
end
|
936
1023
|
|
937
1024
|
# @private
|
@@ -959,6 +1046,7 @@ EOM
|
|
959
1046
|
# @see #order=
|
960
1047
|
# @see #seed=
|
961
1048
|
def order_examples(&block)
|
1049
|
+
RSpec.deprecate("RSpec::Configuration#order_examples", :replacement => "RSpec::Configuration#register_ordering(:global)")
|
962
1050
|
@example_ordering_block = block
|
963
1051
|
@order = "custom" unless built_in_orderer?(block)
|
964
1052
|
end
|
@@ -982,6 +1070,7 @@ EOM
|
|
982
1070
|
# @see #order=
|
983
1071
|
# @see #seed=
|
984
1072
|
def order_groups(&block)
|
1073
|
+
RSpec.deprecate("RSpec::Configuration#order_groups", :replacement => "RSpec::Configuration#register_ordering(:global)")
|
985
1074
|
@group_ordering_block = block
|
986
1075
|
@order = "custom" unless built_in_orderer?(block)
|
987
1076
|
end
|
@@ -1009,6 +1098,46 @@ EOM
|
|
1009
1098
|
order_examples(&block)
|
1010
1099
|
end
|
1011
1100
|
|
1101
|
+
# In RSpec 3, this registers a named ordering strategy that can later be
|
1102
|
+
# used to order an example group's subgroups by adding
|
1103
|
+
# `:order => <name>` metadata to the example group.
|
1104
|
+
#
|
1105
|
+
# In RSpec 2.99, only `register_ordering(:global)` is supported,
|
1106
|
+
# to set the global ordering.
|
1107
|
+
#
|
1108
|
+
# @param name [Symbol] The name of the ordering.
|
1109
|
+
# @yield Block that will order the given examples or example groups
|
1110
|
+
# @yieldparam list [Array<RSpec::Core::Example>, Array<RSpec::Core::ExampleGropu>] The examples or groups to order
|
1111
|
+
# @yieldreturn [Array<RSpec::Core::Example>, Array<RSpec::Core::ExampleGroup>] The re-ordered examples or groups
|
1112
|
+
#
|
1113
|
+
# @example
|
1114
|
+
# RSpec.configure do |rspec|
|
1115
|
+
# rspec.register_ordering :reverse do |list|
|
1116
|
+
# list.reverse
|
1117
|
+
# end
|
1118
|
+
# end
|
1119
|
+
#
|
1120
|
+
# describe MyClass, :order => :reverse do
|
1121
|
+
# # ...
|
1122
|
+
# end
|
1123
|
+
#
|
1124
|
+
# @note Pass the symbol `:global` to set the ordering strategy that
|
1125
|
+
# will be used to order the top-level example groups and any example
|
1126
|
+
# groups that do not have declared `:order` metadata.
|
1127
|
+
def register_ordering(name, &block)
|
1128
|
+
unless name == :global
|
1129
|
+
raise ArgumentError,
|
1130
|
+
"Ordering name `#{name.inspect}` given, `:global` expected. " +
|
1131
|
+
"RSpec 3 will support named orderings (that can be used for " +
|
1132
|
+
"individual example groups) but 2.99 only supports using this " +
|
1133
|
+
"to set the global order."
|
1134
|
+
end
|
1135
|
+
|
1136
|
+
@group_ordering_block = block
|
1137
|
+
@example_ordering_block = block
|
1138
|
+
@order = "custom"
|
1139
|
+
end
|
1140
|
+
|
1012
1141
|
# Set Ruby warnings on or off
|
1013
1142
|
def warnings= value
|
1014
1143
|
$VERBOSE = !!value
|
@@ -1018,8 +1147,59 @@ EOM
|
|
1018
1147
|
$VERBOSE
|
1019
1148
|
end
|
1020
1149
|
|
1150
|
+
# Exposes the current running example via the named
|
1151
|
+
# helper method. RSpec 2.x exposed this via `example`,
|
1152
|
+
# but in RSpec 3.0, the example is instead exposed via
|
1153
|
+
# an arg yielded to `it`, `before`, `let`, etc. However,
|
1154
|
+
# some extension gems (such as Capybara) depend on the
|
1155
|
+
# RSpec 2.x's `example` method, so this config option
|
1156
|
+
# can be used to maintain compatibility.
|
1157
|
+
#
|
1158
|
+
# @param method_name [Symbol] the name of the helper method
|
1159
|
+
#
|
1160
|
+
# @example
|
1161
|
+
#
|
1162
|
+
# RSpec.configure do |rspec|
|
1163
|
+
# rspec.expose_current_running_example_as :example
|
1164
|
+
# end
|
1165
|
+
#
|
1166
|
+
# describe MyClass do
|
1167
|
+
# before do
|
1168
|
+
# # `example` can be used here because of the above config.
|
1169
|
+
# do_something if example.metadata[:type] == "foo"
|
1170
|
+
# end
|
1171
|
+
# end
|
1172
|
+
def expose_current_running_example_as(method_name)
|
1173
|
+
ExposeCurrentExample.module_eval do
|
1174
|
+
extend RSpec::SharedContext
|
1175
|
+
let(method_name) { |ex| ex }
|
1176
|
+
end
|
1177
|
+
|
1178
|
+
include ExposeCurrentExample
|
1179
|
+
end
|
1180
|
+
|
1181
|
+
module ExposeCurrentExample; end
|
1182
|
+
|
1183
|
+
# Turns deprecation warnings into errors, in order to surface
|
1184
|
+
# the full backtrace of the call site. This can be useful when
|
1185
|
+
# you need more context to address a deprecation than the
|
1186
|
+
# single-line call site normally provided.
|
1187
|
+
#
|
1188
|
+
# @example
|
1189
|
+
#
|
1190
|
+
# RSpec.configure do |rspec|
|
1191
|
+
# rspec.raise_errors_for_deprecations!
|
1192
|
+
# end
|
1193
|
+
def raise_errors_for_deprecations!
|
1194
|
+
self.deprecation_stream = Formatters::DeprecationFormatter::RaiseErrorStream.new
|
1195
|
+
end
|
1196
|
+
|
1021
1197
|
private
|
1022
1198
|
|
1199
|
+
def _randomize?
|
1200
|
+
value_for(:order, @order).to_s.match(/rand/)
|
1201
|
+
end
|
1202
|
+
|
1023
1203
|
def get_files_to_run(paths)
|
1024
1204
|
paths.map do |path|
|
1025
1205
|
path = path.gsub(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
@@ -1140,7 +1320,8 @@ MESSAGE
|
|
1140
1320
|
end
|
1141
1321
|
|
1142
1322
|
def order_and_seed_from_seed(value)
|
1143
|
-
|
1323
|
+
@group_ordering_block = RANDOM_ORDERING
|
1324
|
+
@example_ordering_block = RANDOM_ORDERING
|
1144
1325
|
@order, @seed = 'rand', value.to_i
|
1145
1326
|
[@order, @seed]
|
1146
1327
|
end
|
@@ -1155,11 +1336,18 @@ MESSAGE
|
|
1155
1336
|
@order = order
|
1156
1337
|
@seed = seed = seed.to_i if seed
|
1157
1338
|
|
1158
|
-
if
|
1159
|
-
|
1160
|
-
|
1339
|
+
if order.to_s.match(/rand/)
|
1340
|
+
@group_ordering_block = RANDOM_ORDERING
|
1341
|
+
@example_ordering_block = RANDOM_ORDERING
|
1342
|
+
elsif %w[ default defined ].include?(order)
|
1343
|
+
if order == 'default'
|
1344
|
+
RSpec.deprecate("RSpec::Core::Configuration#order = 'default'",
|
1345
|
+
:replacement => "RSpec::Core::Configuration#order = 'defined'")
|
1346
|
+
end
|
1347
|
+
|
1161
1348
|
@order, @seed = nil, nil
|
1162
|
-
|
1349
|
+
@group_ordering_block = DEFAULT_ORDERING
|
1350
|
+
@example_ordering_block = DEFAULT_ORDERING
|
1163
1351
|
end
|
1164
1352
|
|
1165
1353
|
return order, seed
|