rspec-core 2.99.2 → 3.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +14 -6
  2. checksums.yaml.gz.sig +2 -0
  3. data.tar.gz.sig +0 -0
  4. data/Changelog.md +103 -191
  5. data/License.txt +1 -0
  6. data/README.md +4 -25
  7. data/features/Upgrade.md +2 -14
  8. data/features/command_line/dry_run.feature +29 -0
  9. data/features/command_line/example_name_option.feature +1 -1
  10. data/features/command_line/fail_fast.feature +26 -0
  11. data/features/command_line/format_option.feature +3 -3
  12. data/features/command_line/line_number_option.feature +16 -11
  13. data/features/command_line/order.feature +2 -3
  14. data/features/command_line/pattern_option.feature +3 -3
  15. data/features/command_line/randomization.feature +63 -0
  16. data/features/command_line/require_option.feature +2 -2
  17. data/features/command_line/ruby.feature +1 -1
  18. data/features/configuration/alias_example_to.feature +13 -22
  19. data/features/configuration/{backtrace_clean_patterns.feature → backtrace_exclusion_patterns.feature} +17 -14
  20. data/features/configuration/custom_settings.feature +11 -11
  21. data/features/configuration/overriding_global_ordering.feature +93 -0
  22. data/features/configuration/profile.feature +13 -13
  23. data/features/configuration/read_options_from_file.feature +7 -7
  24. data/features/example_groups/basic_structure.feature +1 -1
  25. data/features/example_groups/shared_context.feature +8 -8
  26. data/features/example_groups/shared_examples.feature +6 -14
  27. data/features/expectation_framework_integration/configure_expectation_framework.feature +27 -122
  28. data/features/filtering/exclusion_filters.feature +2 -5
  29. data/features/filtering/inclusion_filters.feature +1 -5
  30. data/features/formatters/json_formatter.feature +2 -2
  31. data/features/formatters/text_formatter.feature +4 -4
  32. data/features/helper_methods/arbitrary_methods.feature +2 -2
  33. data/features/helper_methods/let.feature +5 -5
  34. data/features/helper_methods/modules.feature +5 -8
  35. data/features/hooks/around_hooks.feature +2 -2
  36. data/features/hooks/before_and_after_hooks.feature +14 -14
  37. data/features/hooks/filtering.feature +12 -14
  38. data/features/metadata/described_class.feature +1 -1
  39. data/features/metadata/user_defined.feature +16 -29
  40. data/features/mock_framework_integration/use_flexmock.feature +1 -1
  41. data/features/mock_framework_integration/use_mocha.feature +1 -1
  42. data/features/mock_framework_integration/use_rr.feature +1 -1
  43. data/features/mock_framework_integration/use_rspec.feature +5 -5
  44. data/features/pending/pending_examples.feature +5 -5
  45. data/features/spec_files/arbitrary_file_suffix.feature +1 -1
  46. data/features/step_definitions/additional_cli_steps.rb +3 -3
  47. data/features/subject/explicit_subject.feature +8 -8
  48. data/features/subject/implicit_receiver.feature +29 -0
  49. data/features/subject/implicit_subject.feature +4 -4
  50. data/features/support/env.rb +10 -3
  51. data/features/support/require_expect_syntax_in_aruba_specs.rb +16 -0
  52. data/lib/rspec/core.rb +11 -48
  53. data/lib/rspec/core/backport_random.rb +302 -0
  54. data/lib/rspec/core/backtrace_formatter.rb +65 -0
  55. data/lib/rspec/core/command_line.rb +7 -18
  56. data/lib/rspec/core/configuration.rb +202 -507
  57. data/lib/rspec/core/configuration_options.rb +17 -30
  58. data/lib/rspec/core/example.rb +29 -39
  59. data/lib/rspec/core/example_group.rb +166 -259
  60. data/lib/rspec/core/filter_manager.rb +30 -47
  61. data/lib/rspec/core/flat_map.rb +17 -0
  62. data/lib/rspec/core/formatters.rb +0 -138
  63. data/lib/rspec/core/formatters/base_formatter.rb +46 -1
  64. data/lib/rspec/core/formatters/base_text_formatter.rb +38 -61
  65. data/lib/rspec/core/formatters/deprecation_formatter.rb +21 -52
  66. data/lib/rspec/core/formatters/helpers.rb +0 -28
  67. data/lib/rspec/core/formatters/html_formatter.rb +1 -1
  68. data/lib/rspec/core/formatters/json_formatter.rb +38 -9
  69. data/lib/rspec/core/formatters/snippet_extractor.rb +14 -5
  70. data/lib/rspec/core/hooks.rb +55 -39
  71. data/lib/rspec/core/memoized_helpers.rb +17 -167
  72. data/lib/rspec/core/metadata.rb +16 -64
  73. data/lib/rspec/core/option_parser.rb +30 -39
  74. data/lib/rspec/core/ordering.rb +154 -0
  75. data/lib/rspec/core/pending.rb +12 -69
  76. data/lib/rspec/core/project_initializer.rb +12 -10
  77. data/lib/rspec/core/rake_task.rb +5 -108
  78. data/lib/rspec/core/reporter.rb +15 -18
  79. data/lib/rspec/core/runner.rb +16 -30
  80. data/lib/rspec/core/shared_context.rb +3 -5
  81. data/lib/rspec/core/shared_example_group.rb +3 -51
  82. data/lib/rspec/core/shared_example_group/collection.rb +1 -19
  83. data/lib/rspec/core/version.rb +1 -1
  84. data/lib/rspec/core/warnings.rb +22 -0
  85. data/lib/rspec/core/world.rb +12 -8
  86. data/spec/command_line/order_spec.rb +20 -23
  87. data/spec/rspec/core/backtrace_formatter_spec.rb +216 -0
  88. data/spec/rspec/core/command_line_spec.rb +32 -48
  89. data/spec/rspec/core/configuration_options_spec.rb +19 -50
  90. data/spec/rspec/core/configuration_spec.rb +142 -713
  91. data/spec/rspec/core/drb_command_line_spec.rb +2 -0
  92. data/spec/rspec/core/dsl_spec.rb +0 -1
  93. data/spec/rspec/core/example_group_spec.rb +192 -223
  94. data/spec/rspec/core/example_spec.rb +40 -16
  95. data/spec/rspec/core/filter_manager_spec.rb +2 -2
  96. data/spec/rspec/core/formatters/base_formatter_spec.rb +0 -41
  97. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +5 -123
  98. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +2 -87
  99. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +2 -3
  100. data/spec/rspec/core/formatters/{text_mate_formatted.html → html_formatted-1.8.7-jruby.html} +44 -25
  101. data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +477 -0
  102. data/spec/rspec/core/formatters/{html_formatted.html → html_formatted-1.8.7.html} +42 -25
  103. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +425 -0
  104. data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +416 -0
  105. data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +477 -0
  106. data/spec/rspec/core/formatters/html_formatted-1.9.3.html +419 -0
  107. data/spec/rspec/core/formatters/html_formatted-2.0.0.html +425 -0
  108. data/spec/rspec/core/formatters/html_formatter_spec.rb +21 -46
  109. data/spec/rspec/core/formatters/json_formatter_spec.rb +97 -8
  110. data/spec/rspec/core/hooks_filtering_spec.rb +5 -5
  111. data/spec/rspec/core/hooks_spec.rb +61 -47
  112. data/spec/rspec/core/memoized_helpers_spec.rb +20 -322
  113. data/spec/rspec/core/metadata_spec.rb +1 -24
  114. data/spec/rspec/core/option_parser_spec.rb +20 -62
  115. data/spec/rspec/core/ordering_spec.rb +102 -0
  116. data/spec/rspec/core/pending_example_spec.rb +0 -40
  117. data/spec/rspec/core/project_initializer_spec.rb +1 -25
  118. data/spec/rspec/core/rake_task_spec.rb +5 -72
  119. data/spec/rspec/core/random_spec.rb +47 -0
  120. data/spec/rspec/core/reporter_spec.rb +23 -48
  121. data/spec/rspec/core/runner_spec.rb +31 -39
  122. data/spec/rspec/core/shared_context_spec.rb +3 -15
  123. data/spec/rspec/core/shared_example_group/collection_spec.rb +4 -17
  124. data/spec/rspec/core/shared_example_group_spec.rb +12 -45
  125. data/spec/rspec/core/{deprecation_spec.rb → warnings_spec.rb} +3 -1
  126. data/spec/rspec/core_spec.rb +4 -21
  127. data/spec/spec_helper.rb +41 -5
  128. data/spec/support/helper_methods.rb +0 -29
  129. data/spec/support/sandboxed_mock_space.rb +0 -16
  130. data/spec/support/shared_example_groups.rb +7 -36
  131. data/spec/support/stderr_splitter.rb +36 -0
  132. metadata +163 -157
  133. metadata.gz.sig +1 -0
  134. data/exe/autospec +0 -13
  135. data/features/Autotest.md +0 -38
  136. data/features/configuration/treat_symbols_as_metadata_keys_with_true_values.feature +0 -52
  137. data/features/subject/attribute_of_subject.feature +0 -124
  138. data/features/subject/one_liner_syntax.feature +0 -71
  139. data/lib/autotest/discover.rb +0 -10
  140. data/lib/autotest/rspec2.rb +0 -77
  141. data/lib/rspec/core/backtrace_cleaner.rb +0 -46
  142. data/lib/rspec/core/backward_compatibility.rb +0 -55
  143. data/lib/rspec/core/caller_filter.rb +0 -60
  144. data/lib/rspec/core/deprecated_mutable_array_proxy.rb +0 -32
  145. data/lib/rspec/core/deprecation.rb +0 -26
  146. data/lib/rspec/core/extensions/instance_eval_with_args.rb +0 -44
  147. data/lib/rspec/core/extensions/kernel.rb +0 -9
  148. data/lib/rspec/core/extensions/module_eval_with_args.rb +0 -38
  149. data/lib/rspec/core/extensions/ordered.rb +0 -27
  150. data/lib/rspec/core/formatters/console_codes.rb +0 -42
  151. data/lib/rspec/core/formatters/text_mate_formatter.rb +0 -34
  152. data/lib/rspec/core/metadata_hash_builder.rb +0 -97
  153. data/lib/rspec/core/minitest_assertions_adapter.rb +0 -28
  154. data/lib/rspec/core/test_unit_assertions_adapter.rb +0 -30
  155. data/spec/autotest/discover_spec.rb +0 -49
  156. data/spec/autotest/failed_results_re_spec.rb +0 -45
  157. data/spec/autotest/rspec_spec.rb +0 -133
  158. data/spec/rspec/core/backtrace_cleaner_spec.rb +0 -68
  159. data/spec/rspec/core/caller_filter_spec.rb +0 -58
  160. data/spec/rspec/core/deprecations_spec.rb +0 -59
  161. data/spec/rspec/core/formatters/console_codes_spec.rb +0 -50
  162. data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +0 -107
  163. data/spec/rspec/core/kernel_extensions_spec.rb +0 -9
  164. data/spec/rspec/core/pending_spec.rb +0 -27
  165. data/spec/support/silence_dsl_deprecations.rb +0 -32
@@ -5,8 +5,6 @@ module RSpec
5
5
  # syntax embraced by shoulda matchers:
6
6
  #
7
7
  # describe Widget do
8
- # it { is_expected.to validate_presence_of(:name) }
9
- # # or
10
8
  # it { should validate_presence_of(:name) }
11
9
  # end
12
10
  #
@@ -33,10 +31,8 @@ module RSpec
33
31
  # end
34
32
  # end
35
33
  #
36
- # # one-liner syntax - expectation is set on the subject
34
+ # # one-liner syntax - should is invoked on subject
37
35
  # describe Person do
38
- # it { is_expected.to be_eligible_to_vote }
39
- # # or
40
36
  # it { should be_eligible_to_vote }
41
37
  # end
42
38
  #
@@ -68,11 +64,6 @@ module RSpec
68
64
  # end
69
65
  #
70
66
  # @see #subject
71
- # @see #is_expected
72
- #
73
- # @note This only works if you are using rspec-expectations.
74
- # @note If you are using RSpec's newer expect-based syntax you may
75
- # want to use `is_expected.to` instead of `should`.
76
67
  def should(matcher=nil, message=nil)
77
68
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(subject, matcher, message)
78
69
  end
@@ -87,34 +78,10 @@ module RSpec
87
78
  # end
88
79
  #
89
80
  # @see #subject
90
- # @see #is_expected
91
- #
92
- # @note This only works if you are using rspec-expectations.
93
- # @note If you are using RSpec's newer expect-based syntax you may
94
- # want to use `is_expected.to_not` instead of `should_not`.
95
81
  def should_not(matcher=nil, message=nil)
96
82
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(subject, matcher, message)
97
83
  end
98
84
 
99
- # Wraps the `subject` in `expect` to make it the target of an expectation.
100
- # Designed to read nicely for one-liners.
101
- #
102
- # @example
103
- #
104
- # describe [1, 2, 3] do
105
- # it { is_expected.to be_an Array }
106
- # it { is_expected.not_to include 4 }
107
- # end
108
- #
109
- # @see #subject
110
- # @see #should
111
- # @see #should_not
112
- #
113
- # @note This only works if you are using rspec-expectations.
114
- def is_expected
115
- expect(subject)
116
- end
117
-
118
85
  private
119
86
 
120
87
  # @private
@@ -128,85 +95,61 @@ module RSpec
128
95
  # @private
129
96
  class AllHookMemoizedHash
130
97
  def self.isolate_for_all_hook(example_group_instance)
131
- hash_type = self
98
+ hash = self
132
99
 
133
100
  example_group_instance.instance_eval do
134
- @__memoized = hash_type.new(example_group_instance)
101
+ @__memoized = hash
135
102
 
136
103
  begin
137
104
  yield
138
105
  ensure
139
- @__memoized.preserve_accessed_lets
140
106
  @__memoized = nil
141
107
  end
142
108
  end
143
109
  end
144
110
 
145
- def initialize(example_group_instance)
146
- @example_group_instance = example_group_instance
147
- @hash = {}
148
- end
149
-
150
- def fetch(key, &block)
111
+ def self.fetch(key, &block)
151
112
  description = if key == :subject
152
113
  "subject"
153
114
  else
154
115
  "let declaration `#{key}`"
155
116
  end
156
117
 
157
- ::RSpec.warn_deprecation <<-EOS
158
- DEPRECATION: #{description} accessed in #{article} #{hook_expression} hook at:
118
+ raise <<-EOS
119
+ #{description} accessed in #{article} #{hook_expression} hook at:
159
120
  #{CallerFilter.first_non_rspec_line}
160
121
 
161
122
  `let` and `subject` declarations are not intended to be called
162
123
  in #{article} #{hook_expression} hook, as they exist to define state that
163
124
  is reset between each example, while #{hook_expression} exists to
164
125
  #{hook_intention}.
165
-
166
- This is deprecated behavior that will not be supported in RSpec 3.
167
126
  EOS
168
- @hash.fetch(key, &block)
169
- end
170
-
171
- def []=(key, value)
172
- @hash[key] = value
173
- end
174
-
175
- def preserve_accessed_lets
176
- hash = @hash
177
-
178
- @example_group_instance.class.class_eval do
179
- hash.each do |key, value|
180
- undef_method(key) if method_defined?(key)
181
- define_method(key) { value }
182
- end
183
- end
184
127
  end
185
128
 
186
129
  class Before < self
187
- def hook_expression
130
+ def self.hook_expression
188
131
  "`before(:all)`"
189
132
  end
190
133
 
191
- def article
134
+ def self.article
192
135
  "a"
193
136
  end
194
137
 
195
- def hook_intention
138
+ def self.hook_intention
196
139
  "define state that is shared across examples in an example group"
197
140
  end
198
141
  end
199
142
 
200
143
  class After < self
201
- def hook_expression
144
+ def self.hook_expression
202
145
  "`after(:all)`"
203
146
  end
204
147
 
205
- def article
148
+ def self.article
206
149
  "an"
207
150
  end
208
151
 
209
- def hook_intention
152
+ def self.hook_intention
210
153
  "cleanup state that is shared across examples in an example group"
211
154
  end
212
155
  end
@@ -322,9 +265,8 @@ EOS
322
265
  before { __send__(name) }
323
266
  end
324
267
 
325
- # Declares a `subject` for an example group which can then be wrapped
326
- # with `expect` using `is_expected` to make it the target of an expectation
327
- # in a concise, one-line example.
268
+ # Declares a `subject` for an example group which can then be the
269
+ # implicit receiver (through delegation) of calls to `should`.
328
270
  #
329
271
  # Given a `name`, defines a method with that name which returns the
330
272
  # `subject`. This lets you declare the subject once and access it
@@ -339,13 +281,13 @@ EOS
339
281
  #
340
282
  # describe CheckingAccount, "with $50" do
341
283
  # subject { CheckingAccount.new(Money.new(50, :USD)) }
342
- # it { is_expected.to have_a_balance_of(Money.new(50, :USD)) }
343
- # it { is_expected.not_to be_overdrawn }
284
+ # it { should have_a_balance_of(Money.new(50, :USD)) }
285
+ # it { should_not be_overdrawn }
344
286
  # end
345
287
  #
346
288
  # describe CheckingAccount, "with a non-zero starting balance" do
347
289
  # subject(:account) { CheckingAccount.new(Money.new(50, :USD)) }
348
- # it { is_expected.not_to be_overdrawn }
290
+ # it { should_not be_overdrawn }
349
291
  # it "has a balance equal to the starting balance" do
350
292
  # account.balance.should eq(Money.new(50, :USD))
351
293
  # end
@@ -422,98 +364,6 @@ EOS
422
364
  subject(name, &block)
423
365
  before { subject }
424
366
  end
425
-
426
- # Creates a nested example group named by the submitted `attribute`,
427
- # and then generates an example using the submitted block.
428
- #
429
- # @example
430
- #
431
- # # This ...
432
- # describe Array do
433
- # its(:size) { should eq(0) }
434
- # end
435
- #
436
- # # ... generates the same runtime structure as this:
437
- # describe Array do
438
- # describe "size" do
439
- # it "should eq(0)" do
440
- # subject.size.should eq(0)
441
- # end
442
- # end
443
- # end
444
- #
445
- # The attribute can be a `Symbol` or a `String`. Given a `String`
446
- # with dots, the result is as though you concatenated that `String`
447
- # onto the subject in an expression.
448
- #
449
- # @example
450
- #
451
- # describe Person do
452
- # subject do
453
- # Person.new.tap do |person|
454
- # person.phone_numbers << "555-1212"
455
- # end
456
- # end
457
- #
458
- # its("phone_numbers.first") { should eq("555-1212") }
459
- # end
460
- #
461
- # When the subject is a `Hash`, you can refer to the Hash keys by
462
- # specifying a `Symbol` or `String` in an array.
463
- #
464
- # @example
465
- #
466
- # describe "a configuration Hash" do
467
- # subject do
468
- # { :max_users => 3,
469
- # 'admin' => :all_permissions }
470
- # end
471
- #
472
- # its([:max_users]) { should eq(3) }
473
- # its(['admin']) { should eq(:all_permissions) }
474
- #
475
- # # You can still access to its regular methods this way:
476
- # its(:keys) { should include(:max_users) }
477
- # its(:count) { should eq(2) }
478
- # end
479
- #
480
- # Note that this method does not modify `subject` in any way, so if you
481
- # refer to `subject` in `let` or `before` blocks, you're still
482
- # referring to the outer subject.
483
- #
484
- # @example
485
- #
486
- # describe Person do
487
- # subject { Person.new }
488
- # before { subject.age = 25 }
489
- # its(:age) { should eq(25) }
490
- # end
491
- def its(attribute, &block)
492
- RSpec.deprecate("Use of rspec-core's `its` method", :replacement => 'the rspec-its gem')
493
-
494
- describe(attribute.to_s) do
495
- if Array === attribute
496
- let(:__its_subject) { subject[*attribute] }
497
- else
498
- let(:__its_subject) do
499
- attribute_chain = attribute.to_s.split('.')
500
- attribute_chain.inject(subject) do |inner_subject, attr|
501
- inner_subject.send(attr)
502
- end
503
- end
504
- end
505
-
506
- def should(matcher=nil, message=nil)
507
- RSpec::Expectations::PositiveExpectationHandler.handle_matcher(__its_subject, matcher, message)
508
- end
509
-
510
- def should_not(matcher=nil, message=nil)
511
- RSpec::Expectations::NegativeExpectationHandler.handle_matcher(__its_subject, matcher, message)
512
- end
513
-
514
- example(&block)
515
- end
516
- end
517
367
  end
518
368
 
519
369
  # @api private
@@ -25,9 +25,6 @@ module RSpec
25
25
  # @see Configuration#filter_run_including
26
26
  # @see Configuration#filter_run_excluding
27
27
  class Metadata < Hash
28
- class << self
29
- attr_accessor :line_number_filter_deprecation_issued
30
- end
31
28
 
32
29
  def self.relative_path(line)
33
30
  line = line.sub(File.expand_path("."), ".")
@@ -39,6 +36,20 @@ module RSpec
39
36
  end
40
37
 
41
38
  # @private
39
+ # Used internally to build a hash from an args array.
40
+ # Symbols are converted into hash keys with a value of `true`.
41
+ # This is done to support simple tagging using a symbol, rather
42
+ # than needing to do `:symbol => true`.
43
+ def self.build_hash_from(args)
44
+ hash = args.last.is_a?(Hash) ? args.pop : {}
45
+
46
+ while args.last.is_a?(Symbol)
47
+ hash[args.pop] = true
48
+ end
49
+
50
+ hash
51
+ end
52
+
42
53
  module MetadataHash
43
54
 
44
55
  # @private
@@ -130,30 +141,6 @@ module RSpec
130
141
  include MetadataHash
131
142
 
132
143
  def described_class
133
- warn_about_first_description_arg_behavioral_change_in_rspec_3
134
-
135
- value_for_rspec_2 = described_class_for_rspec_2
136
- value_for_rspec_3 = described_class_for_rspec_3
137
-
138
- if value_for_rspec_2 != value_for_rspec_3
139
- RSpec.warn_deprecation(<<-EOS.gsub(/^\s+\|/, ''))
140
- |The semantics of `described_class` in a nested `describe <SomeClass>`
141
- |example group are changing in RSpec 3. In RSpec 2.x, `described_class`
142
- |would return the outermost described class (#{value_for_rspec_2.inspect}).
143
- |In RSpec 3, it will return the innermost described class (#{value_for_rspec_3.inspect}).
144
- |In general, we recommend not describing multiple classes or objects in a
145
- |nested manner as it creates confusion.
146
- |
147
- |To make your code compatible with RSpec 3, change from `described_class` to a reference
148
- |to `#{value_for_rspec_3.inspect}`, or change the arg of the inner `describe` to a string.
149
- |(Called from #{CallerFilter.first_non_rspec_line})
150
- EOS
151
- end
152
-
153
- value_for_rspec_2
154
- end
155
-
156
- def described_class_for_rspec_2
157
144
  container_stack.each do |g|
158
145
  [:described_class, :describes].each do |key|
159
146
  if g.has_key?(key)
@@ -171,33 +158,8 @@ module RSpec
171
158
  nil
172
159
  end
173
160
 
174
- def described_class_for_rspec_3
175
- container_stack.each do |g|
176
- [:described_class, :describes].each do |key|
177
- if g.has_key?(key)
178
- value = g[key]
179
- return value unless value.nil?
180
- end
181
- end
182
-
183
- candidate = g[:description_args].first
184
- return candidate unless NilClass === candidate || String === candidate || Symbol === candidate
185
- end
186
-
187
- nil
188
- end
189
-
190
- def warn_about_first_description_arg_behavioral_change_in_rspec_3
191
- return unless behavior_change = self[:description_arg_behavior_changing_in_rspec_3]
192
- RSpec.warn_deprecation(behavior_change.warning)
193
- end
194
-
195
- def first_description_arg
196
- self[:description_args].first
197
- end
198
-
199
161
  def full_description
200
- build_description_from(*container_stack.reverse.map {|a| a[:description_args]}.flatten)
162
+ build_description_from(*FlatMap.flat_map(container_stack.reverse) {|a| a[:description_args]})
201
163
  end
202
164
 
203
165
  def container_stack
@@ -230,7 +192,6 @@ module RSpec
230
192
 
231
193
  self[:example_group].store(:description_args, args)
232
194
  self[:example_group].store(:caller, user_metadata.delete(:caller) || caller)
233
- self[:example_group][:description_arg_behavior_changing_in_rspec_3] = user_metadata.delete(:description_arg_behavior_changing_in_rspec_3)
234
195
 
235
196
  update(user_metadata)
236
197
  end
@@ -253,16 +214,7 @@ module RSpec
253
214
  # @private
254
215
  def filter_applies?(key, value, metadata=self)
255
216
  return metadata.filter_applies_to_any_value?(key, value) if Array === metadata[key] && !(Proc === value)
256
-
257
- if key == :line_numbers
258
- unless Metadata.line_number_filter_deprecation_issued
259
- RSpec.deprecate("Filtering by `:line_numbers`",
260
- :replacement => "filtering by `:locations`")
261
- end
262
-
263
- return metadata.line_number_filter_applies?(value)
264
- end
265
-
217
+ return metadata.line_number_filter_applies?(value) if key == :line_numbers
266
218
  return metadata.location_filter_applies?(value) if key == :locations
267
219
  return metadata.filters_apply?(key, value) if Hash === value
268
220
 
@@ -14,7 +14,6 @@ module RSpec::Core
14
14
  def parse!(args)
15
15
  return {} if args.empty?
16
16
 
17
- pre_parse(args)
18
17
  convert_deprecated_args(args)
19
18
 
20
19
  options = args.delete('--tty') ? {:tty => true} : {}
@@ -31,10 +30,9 @@ module RSpec::Core
31
30
  args.map! { |arg|
32
31
  case arg
33
32
  when "--formatter"
34
- RSpec.deprecate("The `--formatter` option", :replacement => "-f or --format", :call_site => nil)
33
+ RSpec.deprecate("the --formatter option", :replacement => "-f or --format")
35
34
  "--format"
36
35
  when "--default_path"
37
- RSpec.deprecate("The `--default_path` option", :replacement => "--default-path", :call_site => nil)
38
36
  "--default-path"
39
37
  when "--line_number"
40
38
  "--line-number"
@@ -65,35 +63,34 @@ module RSpec::Core
65
63
  end
66
64
 
67
65
  parser.on('--order TYPE[:SEED]', 'Run examples by the specified order type.',
68
- ' [defined] groups and examples are run in the order they are defined',
69
- ' [default] deprecated alias for defined',
70
- ' [rand] randomize the order of files, groups and examples',
66
+ ' [defined] examples and groups are run in the order they are defined',
67
+ ' [rand] randomize the order of groups and examples',
71
68
  ' [random] alias for rand',
72
69
  ' [random:SEED] e.g. --order random:123') do |o|
73
- options[:order] = if o == 'default'
74
- RSpec.deprecate("RSpec's `--order default` CLI option", :replacement => "`--order defined`", :call_site => nil)
75
- 'defined'
76
- else
77
- o
78
- end
70
+ options[:order] = o
79
71
  end
80
72
 
81
73
  parser.on('--seed SEED', Integer, 'Equivalent of --order rand:SEED.') do |seed|
82
74
  options[:order] = "rand:#{seed}"
83
75
  end
84
76
 
85
- parser.on('-d', '--debugger', 'Enable debugging.') do |o|
86
- options[:debug] = :cli
87
- end
88
-
89
77
  parser.on('--fail-fast', 'Abort the run on first failure.') do |o|
90
78
  options[:fail_fast] = true
91
79
  end
92
80
 
81
+ parser.on('--no-fail-fast', 'Do not abort the run on first failure.') do |o|
82
+ options[:fail_fast] = false
83
+ end
84
+
93
85
  parser.on('--failure-exit-code CODE', Integer, 'Override the exit code used when there are failing specs.') do |code|
94
86
  options[:failure_exit_code] = code
95
87
  end
96
88
 
89
+ parser.on('--dry-run', 'Print the formatter output of your suite without',
90
+ ' running any examples or hooks') do |o|
91
+ options[:dry_run] = true
92
+ end
93
+
97
94
  parser.on('-X', '--[no-]drb', 'Run examples via DRb.') do |o|
98
95
  options[:drb] = o
99
96
  end
@@ -103,12 +100,13 @@ module RSpec::Core
103
100
  end
104
101
 
105
102
  parser.on('--init', 'Initialize your project with RSpec.') do |cmd|
103
+ require 'rspec/core/project_initializer'
106
104
  ProjectInitializer.new(cmd).run
107
105
  exit
108
106
  end
109
107
 
110
108
  parser.on('--configure', 'Deprecated. Use --init instead.') do |cmd|
111
- warn "--configure is deprecated with no effect. Use --init instead."
109
+ RSpec.warning "--configure is deprecated with no effect. Use --init instead.", :call_site => nil
112
110
  exit
113
111
  end
114
112
 
@@ -118,7 +116,6 @@ module RSpec::Core
118
116
  ' [p]rogress (default - dots)',
119
117
  ' [d]ocumentation (group and example names)',
120
118
  ' [h]tml',
121
- ' [t]extmate',
122
119
  ' [j]son',
123
120
  ' custom formatter class name') do |o|
124
121
  options[:formatters] ||= []
@@ -134,11 +131,6 @@ module RSpec::Core
134
131
  options[:formatters].last << o
135
132
  end
136
133
 
137
- parser.on('--deprecation-out FILE', 'Write deprecation warnings to a file instead of $stdout.') do |file|
138
- # Handled in `pre_parse` so we can set the deprecation stream as early as
139
- # possible in case any other options cause deprecations to be issued.
140
- end
141
-
142
134
  parser.on('-b', '--backtrace', 'Enable full backtrace.') do |o|
143
135
  options[:full_backtrace] = true
144
136
  end
@@ -156,9 +148,10 @@ module RSpec::Core
156
148
  begin
157
149
  Integer(argument)
158
150
  rescue ArgumentError
159
- Kernel.warn "Non integer specified as profile count, seperate " +
151
+ RSpec.warning "Non integer specified as profile count, seperate " +
160
152
  "your path from options with -- e.g. " +
161
- "`rspec --profile -- #{argument}`"
153
+ "`rspec --profile -- #{argument}`",
154
+ :call_site => nil
162
155
  true
163
156
  end
164
157
  end
@@ -191,10 +184,6 @@ FILTERING
191
184
 
192
185
  parser.on('-l', '--line-number LINE', 'Specify line number of an example or group (may be',
193
186
  ' used more than once).') do |o|
194
- Metadata.line_number_filter_deprecation_issued = true
195
- RSpec.deprecate("The `--line-number`/`-l` CLI option",
196
- :replacement => "the `path/to/file.rb:num` form",
197
- :call_site => nil)
198
187
  (options[:line_numbers] ||= []) << o
199
188
  end
200
189
 
@@ -205,11 +194,21 @@ FILTERING
205
194
  ' - TAG is always converted to a symbol') do |tag|
206
195
  filter_type = tag =~ /^~/ ? :exclusion_filter : :inclusion_filter
207
196
 
208
- name,value = tag.gsub(/^(~@|~|@)/, '').split(':')
197
+ name,value = tag.gsub(/^(~@|~|@)/, '').split(':',2)
209
198
  name = name.to_sym
210
199
 
211
200
  options[filter_type] ||= {}
212
- options[filter_type][name] = value.nil? ? true : eval(value) rescue value
201
+ options[filter_type][name] = case value
202
+ when nil then true # The default value for tags is true
203
+ when 'true' then true
204
+ when 'false' then false
205
+ when 'nil' then nil
206
+ when /^:/ then value[1..-1].to_sym
207
+ when /^\d+$/ then Integer(value)
208
+ when /^\d+.\d+$/ then Float(value)
209
+ else
210
+ value
211
+ end
213
212
  end
214
213
 
215
214
  parser.on('--default-path PATH', 'Set the default path where RSpec looks for examples (can',
@@ -231,13 +230,5 @@ FILTERING
231
230
 
232
231
  end
233
232
  end
234
-
235
- def pre_parse(args)
236
- args.each_cons(2) do |arg, value|
237
- if arg == "--deprecation-out"
238
- RSpec.configuration.deprecation_stream = value
239
- end
240
- end
241
- end
242
233
  end
243
234
  end