rspec 1.2.0 → 1.2.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.
Files changed (100) hide show
  1. data/.document +4 -4
  2. data/{History.txt → History.rdoc} +27 -4
  3. data/Manifest.txt +18 -7
  4. data/{README.txt → README.rdoc} +0 -0
  5. data/Rakefile +16 -9
  6. data/{Ruby1.9.markdown → Ruby1.9.rdoc} +3 -3
  7. data/TODO.txt +0 -7
  8. data/Upgrade.rdoc +110 -0
  9. data/features/matchers/create_matcher.feature +40 -0
  10. data/features/matchers/create_matcher_outside_rspec.feature +39 -0
  11. data/features/pending/pending_examples.feature +5 -5
  12. data/features/step_definitions/running_rspec.rb +13 -0
  13. data/features/subject/explicit_subject.feature +31 -0
  14. data/features/subject/implicit_subject.feature +31 -0
  15. data/lib/spec/adapters/mock_frameworks/flexmock.rb +1 -0
  16. data/lib/spec/adapters/mock_frameworks/mocha.rb +1 -0
  17. data/lib/spec/adapters/mock_frameworks/rr.rb +1 -0
  18. data/lib/spec/adapters/mock_frameworks/rspec.rb +12 -10
  19. data/lib/spec/dsl.rb +0 -1
  20. data/lib/spec/dsl/main.rb +3 -3
  21. data/lib/spec/example.rb +4 -3
  22. data/lib/spec/example/example_group_factory.rb +1 -3
  23. data/lib/spec/example/example_group_methods.rb +22 -28
  24. data/lib/spec/example/example_group_proxy.rb +64 -0
  25. data/lib/spec/example/example_methods.rb +8 -11
  26. data/lib/spec/example/example_proxy.rb +42 -0
  27. data/lib/spec/example/shared_example_group.rb +1 -1
  28. data/lib/spec/example/subject.rb +14 -3
  29. data/lib/spec/expectations.rb +1 -1
  30. data/lib/spec/expectations/differs/default.rb +46 -49
  31. data/lib/spec/expectations/differs/load-diff-lcs.rb +12 -0
  32. data/lib/spec/interop/test/unit/testcase.rb +2 -2
  33. data/lib/spec/matchers.rb +49 -9
  34. data/lib/spec/matchers/be.rb +12 -15
  35. data/lib/spec/matchers/change.rb +1 -0
  36. data/lib/spec/matchers/dsl.rb +15 -0
  37. data/lib/spec/matchers/have.rb +9 -8
  38. data/lib/spec/matchers/include.rb +2 -16
  39. data/lib/spec/matchers/match_array.rb +2 -14
  40. data/lib/spec/matchers/matcher.rb +16 -11
  41. data/lib/spec/matchers/pretty.rb +36 -0
  42. data/lib/spec/matchers/raise_error.rb +9 -8
  43. data/lib/spec/matchers/simple_matcher.rb +1 -0
  44. data/lib/spec/matchers/throw_symbol.rb +1 -1
  45. data/lib/spec/mocks/argument_expectation.rb +2 -0
  46. data/lib/spec/mocks/message_expectation.rb +2 -0
  47. data/lib/spec/mocks/proxy.rb +9 -10
  48. data/lib/spec/runner.rb +1 -0
  49. data/lib/spec/runner/extensions/kernel.rb +9 -0
  50. data/lib/spec/runner/formatter/base_formatter.rb +22 -9
  51. data/lib/spec/runner/formatter/html_formatter.rb +2 -1
  52. data/lib/spec/runner/heckle_runner.rb +1 -0
  53. data/lib/spec/runner/option_parser.rb +4 -1
  54. data/lib/spec/runner/options.rb +11 -0
  55. data/lib/spec/runner/spec_parser.rb +15 -22
  56. data/lib/spec/version.rb +4 -6
  57. data/spec/autotest/autotest_helper.rb +6 -1
  58. data/spec/spec/dsl/main_spec.rb +3 -3
  59. data/spec/spec/example/example_group_factory_spec.rb +11 -23
  60. data/spec/spec/example/example_group_methods_spec.rb +45 -20
  61. data/spec/spec/example/example_group_proxy_spec.rb +63 -0
  62. data/spec/spec/example/example_group_spec.rb +15 -0
  63. data/spec/spec/example/example_methods_spec.rb +5 -35
  64. data/spec/spec/example/example_proxy_spec.rb +47 -0
  65. data/spec/spec/example/nested_example_group_spec.rb +3 -3
  66. data/spec/spec/example/shared_example_group_spec.rb +4 -4
  67. data/spec/spec/example/subject_spec.rb +77 -0
  68. data/spec/spec/matchers/be_close_spec.rb +10 -10
  69. data/spec/spec/matchers/be_instance_of_spec.rb +13 -8
  70. data/spec/spec/matchers/be_kind_of_spec.rb +10 -8
  71. data/spec/spec/{dsl/matchers_spec.rb → matchers/dsl_spec.rb} +4 -4
  72. data/spec/spec/matchers/matcher_spec.rb +53 -1
  73. data/spec/spec/matchers/matchers_spec.rb +2 -0
  74. data/spec/spec/package/bin_spec_spec.rb +4 -4
  75. data/spec/spec/runner/command_line_spec.rb +2 -2
  76. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +4 -4
  77. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +2 -2
  78. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +1 -1
  79. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +1 -1
  80. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +1 -1
  81. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +1 -1
  82. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +1 -1
  83. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +1 -1
  84. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +1 -1
  85. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +12 -11
  86. data/spec/spec/runner/formatter/profile_formatter_spec.rb +2 -2
  87. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +2 -2
  88. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +2 -2
  89. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +1 -1
  90. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +1 -1
  91. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +1 -1
  92. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +1 -1
  93. data/spec/spec/runner/option_parser_spec.rb +20 -0
  94. data/spec/spec/runner/options_spec.rb +23 -1
  95. data/spec/spec/runner/reporter_spec.rb +20 -17
  96. data/spec/spec/runner/spec_parser_spec.rb +1 -1
  97. metadata +33 -15
  98. data/Upgrade.markdown +0 -63
  99. data/lib/spec/dsl/matchers.rb +0 -13
  100. data/lib/spec/example/example_description.rb +0 -15
@@ -14,7 +14,7 @@ Feature: pending examples
14
14
  Then the exit code should be 0
15
15
  And the stdout should match "1 example, 0 failures, 1 pending"
16
16
  And the stdout should match "Not Yet Implemented"
17
- And the stdout should match "current_example.rb:2"
17
+ And the stdout should match "current_example.rb:3"
18
18
 
19
19
  Scenario: pending implementation with spec/test/unit
20
20
  Given the following spec:
@@ -28,7 +28,7 @@ Feature: pending examples
28
28
  Then the exit code should be 0
29
29
  And the stdout should match "1 example, 0 failures, 1 pending"
30
30
  And the stdout should match "Not Yet Implemented"
31
- And the stdout should match "current_example.rb:3"
31
+ And the stdout should match "current_example.rb:4"
32
32
 
33
33
  Scenario: pending any arbitary reason, with no block
34
34
  Given the following spec:
@@ -43,7 +43,7 @@ Feature: pending examples
43
43
  Then the exit code should be 0
44
44
  And the stdout should match "1 example, 0 failures, 1 pending"
45
45
  And the stdout should match "(something else getting finished)"
46
- And the stdout should match "current_example.rb:3"
46
+ And the stdout should match "current_example.rb:4"
47
47
 
48
48
  Scenario: pending any arbitary reason, with a block
49
49
  Given the following spec:
@@ -60,7 +60,7 @@ Feature: pending examples
60
60
  Then the exit code should be 0
61
61
  And the stdout should match "1 example, 0 failures, 1 pending"
62
62
  And the stdout should match "(something else getting finished)"
63
- And the stdout should match "current_example.rb:3"
63
+ And the stdout should match "current_example.rb:4"
64
64
 
65
65
  Scenario: pending any arbitary reason, with a block that passes
66
66
  Given the following spec:
@@ -78,4 +78,4 @@ Feature: pending examples
78
78
  And the stdout should match "1 example, 1 failure"
79
79
  And the stdout should match "FIXED"
80
80
  And the stdout should match "Expected pending 'something else getting finished' to fail. No Error was raised."
81
- And the stdout should match "current_example.rb:3"
81
+ And the stdout should match "current_example.rb:4"
@@ -10,10 +10,23 @@ Given /^the following spec:$/ do |spec|
10
10
  FileUtils.mkdir(dir) unless test ?d, dir
11
11
  @path = "#{dir}/current_example.rb"
12
12
  File.open(@path, "w") do |f|
13
+ f.write %Q[$:.unshift File.join(File.dirname(__FILE__), "/../lib")]
14
+ f.write "\n"
13
15
  f.write spec
14
16
  end
15
17
  end
16
18
 
19
+ Given /^a file named (.*) with:$/ do |filename, code|
20
+ dir = File.join(File.dirname(__FILE__), "/../../tmp")
21
+ FileUtils.mkdir(dir) unless test ?d, dir
22
+ @path = "#{dir}/#{filename}"
23
+ File.open(@path, "w") do |f|
24
+ f.write %Q[$:.unshift File.join(File.dirname(__FILE__), "/../lib")]
25
+ f.write "\n"
26
+ f.write code
27
+ end
28
+ end
29
+
17
30
  When /^I run it with the (.*)$/ do |interpreter|
18
31
  stderr_file = Tempfile.new('rspec')
19
32
  stderr_file.close
@@ -0,0 +1,31 @@
1
+ Feature: explicit subject
2
+
3
+ You can override the implicit subject using the subject() method.
4
+
5
+ Scenario: subject in top level group
6
+ Given the following spec:
7
+ """
8
+ describe Array, "with some elements" do
9
+ subject { [1,2,3] }
10
+ it "should have the prescribed elements" do
11
+ subject.should == [1,2,3]
12
+ end
13
+ end
14
+ """
15
+ When I run it with the spec command
16
+ Then the stdout should match "1 example, 0 failures"
17
+
18
+ Scenario: subject in a nested group
19
+ Given the following spec:
20
+ """
21
+ describe Array do
22
+ subject { [1,2,3] }
23
+ describe "with some elements" do
24
+ it "should have the prescribed elements" do
25
+ subject.should == [1,2,3]
26
+ end
27
+ end
28
+ end
29
+ """
30
+ When I run it with the spec command
31
+ Then the stdout should match "1 example, 0 failures"
@@ -0,0 +1,31 @@
1
+ Feature: implicit subject
2
+
3
+ The first argument to the outermost example group block is
4
+ made available to each example as an implicit subject of
5
+ that example.
6
+
7
+ Scenario: subject in top level group
8
+ Given the following spec:
9
+ """
10
+ describe Array, "when first created" do
11
+ it "should be empty" do
12
+ subject.should == []
13
+ end
14
+ end
15
+ """
16
+ When I run it with the spec command
17
+ Then the stdout should match "1 example, 0 failures"
18
+
19
+ Scenario: subject in a nested group
20
+ Given the following spec:
21
+ """
22
+ describe Array do
23
+ describe "when first created" do
24
+ it "should be empty" do
25
+ subject.should == []
26
+ end
27
+ end
28
+ end
29
+ """
30
+ When I run it with the spec command
31
+ Then the stdout should match "1 example, 0 failures"
@@ -3,6 +3,7 @@
3
3
  # Created by Jim Weirich on 2007-04-10.
4
4
  # Copyright (c) 2007. All rights reserved.
5
5
 
6
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
6
7
  require 'flexmock/rspec'
7
8
 
8
9
  module Spec
@@ -1,3 +1,4 @@
1
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
1
2
  require 'mocha/standalone'
2
3
  require 'mocha/object'
3
4
 
@@ -1,3 +1,4 @@
1
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
1
2
  require 'rr'
2
3
 
3
4
  patterns = ::Spec::Runner::QuietBacktraceTweaker::IGNORE_PATTERNS
@@ -3,16 +3,18 @@ require 'spec/mocks/extensions'
3
3
 
4
4
  module Spec
5
5
  module Adapters
6
- module MockFramework
7
- include Spec::Mocks::ExampleMethods
8
- def setup_mocks_for_rspec
9
- $rspec_mocks ||= Spec::Mocks::Space.new
10
- end
11
- def verify_mocks_for_rspec
12
- $rspec_mocks.verify_all
13
- end
14
- def teardown_mocks_for_rspec
15
- $rspec_mocks.reset_all
6
+ unless defined?(MockFramework)
7
+ module MockFramework
8
+ include Spec::Mocks::ExampleMethods
9
+ def setup_mocks_for_rspec
10
+ $rspec_mocks ||= Spec::Mocks::Space.new
11
+ end
12
+ def verify_mocks_for_rspec
13
+ $rspec_mocks.verify_all
14
+ end
15
+ def teardown_mocks_for_rspec
16
+ $rspec_mocks.reset_all
17
+ end
16
18
  end
17
19
  end
18
20
  end
@@ -1,3 +1,2 @@
1
1
  require 'spec/dsl/main'
2
- require 'spec/dsl/matchers'
3
2
 
@@ -20,7 +20,7 @@ module Spec
20
20
  # register special implementations.
21
21
  #
22
22
  def describe(*args, &block)
23
- Spec::Example::add_spec_path_to(args)
23
+ Spec::Example::set_location(args, caller(0)[1])
24
24
  Spec::Example::ExampleGroupFactory.assign_scope(self, args)
25
25
  Spec::Example::ExampleGroupFactory.create_example_group(*args, &block)
26
26
  end
@@ -42,7 +42,7 @@ module Spec
42
42
  # end
43
43
  # end
44
44
  def share_examples_for(*args, &block)
45
- Spec::Example::add_spec_path_to(args)
45
+ Spec::Example::set_location(args, caller(0)[1])
46
46
  Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block)
47
47
  end
48
48
  alias :shared_examples_for :share_examples_for
@@ -74,7 +74,7 @@ module Spec
74
74
  def share_as(name, &block)
75
75
  begin
76
76
  args = [name]
77
- Spec::Example::add_spec_path_to(args)
77
+ Spec::Example::set_location(args, caller(0)[1])
78
78
  Object.const_set(name, Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block))
79
79
  rescue NameError => e
80
80
  raise NameError.new(e.message + "\nThe first argument to share_as must be a legal name for a constant\n")
@@ -158,9 +158,9 @@ module Spec
158
158
  return scope_from(*args), options
159
159
  end
160
160
 
161
- def add_spec_path_to(args) # :nodoc:
161
+ def set_location(args, location) # :nodoc:
162
162
  args << {} unless Hash === args.last
163
- args.last[:spec_path] ||= caller(0)[2]
163
+ args.last[:location] ||= location
164
164
  end
165
165
 
166
166
  private
@@ -174,7 +174,8 @@ end
174
174
 
175
175
  require 'timeout'
176
176
  require 'spec/example/predicate_matchers'
177
- require 'spec/example/example_description'
177
+ require 'spec/example/example_group_proxy'
178
+ require 'spec/example/example_proxy'
178
179
  require 'spec/example/subject'
179
180
  require 'spec/example/before_and_after_hooks'
180
181
  require 'spec/example/pending'
@@ -19,14 +19,12 @@ module Spec
19
19
  end
20
20
 
21
21
  def create_shared_example_group(*args, &example_group_block) # :nodoc:
22
- ::Spec::Example::add_spec_path_to(args)
23
22
  ::Spec::Example::SharedExampleGroup.register(*args, &example_group_block)
24
23
  end
25
24
 
26
25
  def create_example_group(*args, &block)
27
26
  raise ArgumentError if args.empty?
28
27
  raise ArgumentError unless block
29
- Spec::Example::add_spec_path_to(args)
30
28
  superclass = determine_superclass(args.last)
31
29
  superclass.describe(*args, &block)
32
30
  end
@@ -71,7 +69,7 @@ module Spec
71
69
  def determine_superclass(opts)
72
70
  if type = opts[:type]
73
71
  self[type]
74
- elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.sort_by{|k| k.to_s.length}.reverse.join('|')})/
72
+ elsif opts[:location] =~ /spec(\\|\/)(#{@example_group_types.keys.sort_by{|k| k.to_s.length}.reverse.join('|')})/
75
73
  self[$2 == '' ? nil : $2.to_sym]
76
74
  else
77
75
  self[nil]
@@ -10,7 +10,7 @@ module Spec
10
10
  include Spec::Example::Subject::ExampleGroupMethods
11
11
  include Spec::Example::PredicateMatchers
12
12
 
13
- attr_reader :options, :spec_path
13
+ attr_reader :options, :location
14
14
 
15
15
  def inherited(klass) # :nodoc:
16
16
  super
@@ -19,7 +19,7 @@ module Spec
19
19
 
20
20
  # Provides the backtrace up to where this example_group was declared.
21
21
  def backtrace
22
- @backtrace
22
+ defined?(@backtrace) ? @backtrace : nil
23
23
  end
24
24
 
25
25
  # Deprecated - use +backtrace()+
@@ -47,7 +47,7 @@ WARNING
47
47
  #
48
48
  def describe(*args, &example_group_block)
49
49
  if example_group_block
50
- Spec::Example::add_spec_path_to(args)
50
+ Spec::Example::set_location(args, caller(0)[1])
51
51
  options = args.last
52
52
  if options[:shared]
53
53
  ExampleGroupFactory.create_shared_example_group(*args, &example_group_block)
@@ -70,10 +70,10 @@ WARNING
70
70
  # Creates an instance of the current example group class and adds it to
71
71
  # a collection of examples of the current example group.
72
72
  def example(description=nil, options={}, backtrace=nil, &implementation)
73
- example_description = ExampleDescription.new(description, options, backtrace || caller(0)[1])
74
- example_descriptions << example_description
75
- example_implementations[example_description] = implementation || pending_implementation
76
- example_description
73
+ example_proxy = ExampleProxy.new(description, options, backtrace || caller(0)[1])
74
+ example_proxies << example_proxy
75
+ example_implementations[example_proxy] = implementation || pending_implementation
76
+ example_proxy
77
77
  end
78
78
 
79
79
  def pending_implementation
@@ -108,12 +108,12 @@ WARNING
108
108
  def set_description(*args)
109
109
  @description_args, @options = Spec::Example.args_and_options(*args)
110
110
  @backtrace = caller(1)
111
- @spec_path = File.expand_path(options[:spec_path]) if options[:spec_path]
111
+ @location = File.expand_path(options[:location]) if options[:location]
112
112
  self
113
113
  end
114
114
 
115
115
  def notify(listener) # :nodoc:
116
- listener.add_example_group(self)
116
+ listener.add_example_group(ExampleGroupProxy.new(self))
117
117
  end
118
118
 
119
119
  def description
@@ -138,8 +138,8 @@ WARNING
138
138
  end
139
139
  end
140
140
 
141
- def example_descriptions # :nodoc:
142
- @example_descriptions ||= []
141
+ def example_proxies # :nodoc:
142
+ @example_proxies ||= []
143
143
  end
144
144
 
145
145
  def example_implementations # :nodoc:
@@ -147,25 +147,17 @@ WARNING
147
147
  end
148
148
 
149
149
  def examples(run_options=nil) #:nodoc:
150
- (run_options && run_options.reverse) ? example_descriptions.reverse : example_descriptions
150
+ (run_options && run_options.reverse) ? example_proxies.reverse : example_proxies
151
151
  end
152
152
 
153
153
  def number_of_examples #:nodoc:
154
- example_descriptions.length
154
+ example_proxies.length
155
155
  end
156
156
 
157
157
  def example_group_hierarchy
158
158
  @example_group_hierarchy ||= ExampleGroupHierarchy.new(self)
159
159
  end
160
160
 
161
- def filtered_description(filter)
162
- build_description_from(
163
- *nested_descriptions.collect do |description|
164
- description =~ filter ? $1 : description
165
- end
166
- )
167
- end
168
-
169
161
  def nested_descriptions
170
162
  example_group_hierarchy.nested_descriptions
171
163
  end
@@ -195,12 +187,13 @@ WARNING
195
187
 
196
188
  def run_before_all(run_options)
197
189
  return [true,{}] if example_group_hierarchy.before_all_parts.empty?
198
- before_all = new("before(:all)")
190
+ example_proxy = ExampleProxy.new("before(:all)")
191
+ before_all = new(example_proxy)
199
192
  begin
200
193
  example_group_hierarchy.run_before_all(before_all)
201
194
  return [true, before_all.instance_variable_hash]
202
195
  rescue Exception => e
203
- run_options.reporter.example_failed(ExampleDescription.new("before(:all)"), e)
196
+ run_options.reporter.example_failed(example_proxy, e)
204
197
  return [false, before_all.instance_variable_hash]
205
198
  end
206
199
  end
@@ -211,7 +204,7 @@ WARNING
211
204
  after_all_instance_variables = instance_variables
212
205
 
213
206
  examples.each do |example|
214
- example_group_instance = new(example.description,example.options,&example_implementations[example])
207
+ example_group_instance = new(example, &example_implementations[example])
215
208
  success &= example_group_instance.execute(run_options, instance_variables)
216
209
  after_all_instance_variables = example_group_instance.instance_variable_hash
217
210
  end
@@ -221,18 +214,19 @@ WARNING
221
214
 
222
215
  def run_after_all(success, instance_variables, run_options)
223
216
  return success if example_group_hierarchy.after_all_parts.empty?
224
- after_all = new("after(:all)")
217
+ example_proxy = ExampleProxy.new("after(:all)")
218
+ after_all = new(example_proxy)
225
219
  after_all.set_instance_variables_from_hash(instance_variables)
226
220
  example_group_hierarchy.run_after_all(after_all)
227
221
  return success
228
222
  rescue Exception => e
229
- run_options.reporter.example_failed(ExampleDescription.new("after(:all)"), e)
223
+ run_options.reporter.example_failed(example_proxy, e)
230
224
  return false
231
225
  end
232
226
 
233
227
  def examples_to_run(run_options)
234
- return example_descriptions unless specified_examples?(run_options)
235
- example_descriptions.reject do |example|
228
+ return example_proxies unless specified_examples?(run_options)
229
+ example_proxies.reject do |example|
236
230
  matcher = ExampleGroupMethods.matcher_class.
237
231
  new(description.to_s, example.description)
238
232
  !matcher.matches?(run_options.examples)
@@ -0,0 +1,64 @@
1
+ module Spec
2
+ module Example
3
+ # Lightweight representation of an example group. This is the object
4
+ # that is passed to Spec::Runner::Formatter::BaseFormatter#add_example_group
5
+ class ExampleGroupProxy
6
+
7
+ def initialize(example_group) # :nodoc:
8
+ @description = example_group.description
9
+ @nested_descriptions = example_group.nested_descriptions
10
+ @examples = example_group.example_proxies
11
+ @location = example_group.location
12
+ @backtrace = example_group.backtrace
13
+ end
14
+
15
+ # This is the docstring passed to the <tt>describe()</tt> method or any
16
+ # of its aliases
17
+ attr_reader :description
18
+
19
+ # Used by Spec::Runner::Formatter::NestedTextFormatter to access the
20
+ # docstrings for each example group in a nested group.
21
+ attr_reader :nested_descriptions
22
+
23
+ # A collection of ExampleGroupProxy instances, one for each example
24
+ # declared in this group.
25
+ attr_reader :examples
26
+
27
+ # The file and line number at which the represented example group
28
+ # was declared. This is extracted from <tt>caller</tt>, and is therefore
29
+ # formatted as an individual line in a backtrace.
30
+ attr_reader :location
31
+
32
+ # Deprecated - use location() instead
33
+ def backtrace
34
+ @backtrace
35
+ end
36
+
37
+ # Returns the nested_descriptions collection with any descriptions
38
+ # matching the submitted regexp removed.
39
+ def filtered_description(regexp)
40
+ build_description_from(
41
+ *nested_descriptions.collect do |description|
42
+ description =~ regexp ? $1 : description
43
+ end
44
+ )
45
+ end
46
+
47
+ def ==(other) # :nodoc:
48
+ other.description == description
49
+ end
50
+
51
+ private
52
+
53
+ # FIXME - this is duplicated from ExampleGroupMethods
54
+ def build_description_from(*args)
55
+ text = args.inject("") do |description, arg|
56
+ description << " " unless (description == "" || arg.to_s =~ /^(\s|\.|#)/)
57
+ description << arg.to_s
58
+ end
59
+ text == "" ? nil : text
60
+ end
61
+ end
62
+ end
63
+ end
64
+