rspec-core 2.0.0.beta.5 → 2.0.0.beta.6

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.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -Ispec
@@ -63,6 +63,18 @@ Use the documentation formatter to see the resulting spec:
63
63
  Finished in 0.000379 seconds
64
64
  1 example, 0 failures
65
65
 
66
+ ## Configuration
67
+
68
+ You can define runtime configuration options in four places. They
69
+ are loaded and processed in this order:
70
+
71
+ * ~/.rspec
72
+ * .rspec
73
+ * RSpec.configure
74
+ * command line
75
+
76
+ Run `rspec --help` to see supported configuration options.
77
+
66
78
  #### Also see
67
79
 
68
80
  * [http://github.com/rspec/rspec](http://github.com/rspec/rspec)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.beta.5
1
+ 2.0.0.beta.6
@@ -2,9 +2,9 @@ Feature: example name option
2
2
 
3
3
  Use the --example (or -e) option to filter the examples to be run by name.
4
4
 
5
- The submitted argument is compiled to a Ruby Regexp, and matched against the
6
- full description of the example, which is the concatenation of descriptions
7
- of the group (including any nested groups) and the example.
5
+ The argument is compiled to a Ruby Regexp, and matched against the full
6
+ description of the example, which is the concatenation of descriptions of the
7
+ group (including any nested groups) and the example.
8
8
 
9
9
  This allows you to run a single uniquely named example, all examples with
10
10
  similar names, all the example in a uniquely named group, etc, etc.
@@ -7,33 +7,53 @@ Feature: line number appended to file path
7
7
  Background:
8
8
  Given a file named "example_spec.rb" with:
9
9
  """
10
- describe "a group" do
10
+ describe "outer group" do
11
11
 
12
- it "has a first example" do
12
+ it "first example in outer group" do
13
13
 
14
14
  end
15
15
 
16
- it "has a second example" do
16
+ it "second example in outer group" do
17
17
 
18
18
  end
19
+
20
+ describe "nested group" do
21
+
22
+ it "example in nested group" do
23
+
24
+ end
19
25
 
26
+ end
27
+
20
28
  end
21
29
  """
22
30
 
23
- Scenario: two examples - both examples from the group declaration
31
+ @wip
32
+ Scenario: nested groups - outer group on declaration line
24
33
  When I run "rspec example_spec.rb:1 --format doc"
25
- Then I should see "2 examples, 0 failures"
26
- And I should see "has a second example"
27
- And I should see "has a first example"
34
+ Then I should see "3 examples, 0 failures"
35
+ And I should see "second example in outer group"
36
+ And I should see "first example in outer group"
37
+ And I should see "example in nested group"
38
+
39
+ @wip
40
+ Scenario: nested groups - inner group on declaration line
41
+ When I run "rspec example_spec.rb:11 --format doc"
42
+ Then I should see "3 examples, 0 failures"
43
+ And I should see "example in nested group"
44
+ And I should not see "second example in outer group"
45
+ And I should not see "first example in outer group"
28
46
 
29
47
  Scenario: two examples - first example on declaration line
30
48
  When I run "rspec example_spec.rb:3 --format doc"
31
49
  Then I should see "1 example, 0 failures"
32
- And I should see "has a first example"
33
- But the stdout should not contain "has a second example"
50
+ And I should see "first example in outer group"
51
+ But I should not see "second example in outer group"
52
+ And I should not see "example in nested group"
34
53
 
35
54
  Scenario: two examples - second example on declaration line
36
55
  When I run "rspec example_spec.rb:7 --format doc"
37
56
  Then I should see "1 example, 0 failures"
38
- And I should see "has a second example"
39
- But the stdout should not contain "has a first example"
57
+ And I should see "second example in outer group"
58
+ But I should not see "first example in outer group"
59
+ And I should not see "example in nested group"
@@ -7,18 +7,11 @@ Feature: spec/spec.opts
7
7
  Options declared in spec/spec.opts will override configuration
8
8
  set up in Rspec.configure blocks.
9
9
 
10
- Background:
11
- Given a directory named "spec"
12
-
13
10
  Scenario: color set in Rspec.configure
14
- Given a file named "spec/spec_helper.rb" with:
11
+ Given a file named "spec/example_spec.rb" with:
15
12
  """
16
- require "rspec/expectations"
17
13
  Rspec.configure {|c| c.color_enabled = true }
18
- """
19
- And a file named "spec/example_spec.rb" with:
20
- """
21
- require "spec_helper"
14
+
22
15
  describe "color_enabled" do
23
16
  context "when set with Rspec.configure" do
24
17
  it "is true" do
@@ -30,15 +23,13 @@ Feature: spec/spec.opts
30
23
  When I run "rspec spec/example_spec.rb"
31
24
  Then I should see "1 example, 0 failures"
32
25
 
33
- Scenario: color set in spec/spec.opts
34
- Given a file named "spec/spec.opts" with:
26
+ Scenario: color set in .rspec
27
+ Given a file named ".rspec" with:
35
28
  """
36
29
  --color
37
30
  """
38
31
  And a file named "spec/example_spec.rb" with:
39
32
  """
40
- require "rspec/expectations"
41
-
42
33
  describe "color_enabled" do
43
34
  context "when set with Rspec.configure" do
44
35
  it "is true" do
@@ -49,16 +40,15 @@ Feature: spec/spec.opts
49
40
  """
50
41
  When I run "rspec spec/example_spec.rb"
51
42
  Then I should see "1 example, 0 failures"
52
-
53
- @wip
54
- Scenario: formatter set in both (spec.opts wins)
55
- Given a file named "spec/spec.opts" with:
43
+
44
+ @wip
45
+ Scenario: formatter set in both (.rspec wins)
46
+ Given a file named ".rspec" with:
56
47
  """
57
- --formatter documentation
48
+ --format documentation
58
49
  """
59
50
  And a file named "spec/spec_helper.rb" with:
60
51
  """
61
- require "rspec/expectations"
62
52
  Rspec.configure {|c| c.formatter = 'progress'}
63
53
  """
64
54
  And a file named "spec/example_spec.rb" with:
@@ -1,4 +1,4 @@
1
- $LOAD_PATH << File.expand_path("../../../../rspec-expectations/lib", __FILE__)
1
+ $LOAD_PATH.unshift File.expand_path("../../../../rspec-expectations/lib", __FILE__)
2
2
  require 'rspec/expectations'
3
3
  require 'aruba'
4
4
 
@@ -1,15 +1,19 @@
1
1
  require 'rspec/core/load_path'
2
2
  require 'rspec/core/deprecation'
3
- require 'rspec/core/mocking/with_absolutely_nothing'
3
+
4
+ require 'rspec/core/hooks'
5
+ require 'rspec/core/subject'
6
+ require 'rspec/core/let'
7
+ require 'rspec/core/metadata'
8
+
4
9
  require 'rspec/core/around_proxy'
5
10
  require 'rspec/core/world'
6
11
  require 'rspec/core/configuration'
7
- require 'rspec/core/command_line_options'
12
+ require 'rspec/core/configuration_options'
8
13
  require 'rspec/core/runner'
9
14
  require 'rspec/core/example'
10
15
  require 'rspec/core/kernel_extensions'
11
16
  require 'rspec/core/shared_example_group'
12
- require 'rspec/core/example_group_subject'
13
17
  require 'rspec/core/example_group'
14
18
  require 'rspec/core/formatters'
15
19
  require 'rspec/core/backward_compatibility'
@@ -29,7 +33,7 @@ module Rspec
29
33
 
30
34
  def self.configure
31
35
  Rspec.deprecate('Rspec::Core.configure', 'Rspec.configure', '2.0.0')
32
- yield configuration if block_given?
36
+ yield Rspec.configuration if block_given?
33
37
  end
34
38
 
35
39
  def self.world
@@ -92,6 +92,10 @@ module Rspec
92
92
  @options[:backtrace_clean_patterns].clear
93
93
  end
94
94
 
95
+ def libs=(libs)
96
+ libs.map {|lib| $LOAD_PATH.unshift lib}
97
+ end
98
+
95
99
  def debug=(bool)
96
100
  return unless bool
97
101
  begin
@@ -184,19 +188,14 @@ EOM
184
188
  @run_all_when_everything_filtered
185
189
  end
186
190
 
187
- # Where does output go? For now $stdout
188
191
  def output
189
192
  $stdout
190
193
  end
191
194
 
192
- def puts(msg='')
195
+ def puts(msg="")
193
196
  output.puts(msg)
194
197
  end
195
198
 
196
- def parse_command_line_args(args)
197
- @command_line_options = Rspec::Core::CommandLineOptions.parse(args)
198
- end
199
-
200
199
  def include(mod, options={})
201
200
  @include_or_extend_modules << [:include, mod, options]
202
201
  end
@@ -230,6 +229,10 @@ EOM
230
229
  Rspec::Core::ExampleGroup.send(:include, Rspec::Core::MockFrameworkAdapter)
231
230
  end
232
231
 
232
+ def require_files_to_run
233
+ files_to_run.map {|f| require f }
234
+ end
235
+
233
236
  end
234
237
  end
235
238
  end
@@ -0,0 +1,137 @@
1
+ require 'optparse'
2
+ # http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html
3
+
4
+ module Rspec
5
+ module Core
6
+
7
+ class ConfigurationOptions
8
+ LOCAL_OPTIONS_FILE = ".rspec"
9
+ GLOBAL_OPTIONS_FILE = File.join(File.expand_path("~"), ".rspec")
10
+
11
+ attr_reader :args, :options
12
+
13
+ def initialize(args)
14
+ @args = args
15
+ @options = {}
16
+ end
17
+
18
+ def apply_to(config)
19
+ merged_options.each do |key, value|
20
+ config.send("#{key}=", value)
21
+ end
22
+ end
23
+
24
+ def parse_command_line_options
25
+ @options = Parser.parse!(@args)
26
+ @options[:files_or_directories_to_run] = @args
27
+ @options
28
+ end
29
+
30
+ private
31
+
32
+ def merged_options
33
+ [global_options, local_options, command_line_options].inject({}) do |merged, options|
34
+ merged.merge(options)
35
+ end
36
+ end
37
+
38
+ def command_line_options
39
+ parse_command_line_options
40
+ end
41
+
42
+ class Parser
43
+ def self.parse!(args)
44
+ new.parse!(args)
45
+ end
46
+
47
+ class << self
48
+ alias_method :parse, :parse!
49
+ end
50
+
51
+ def parse!(args)
52
+ options = {}
53
+ parser(options).parse!(args)
54
+ options
55
+ end
56
+
57
+ alias_method :parse, :parse!
58
+
59
+ def parser(options)
60
+ OptionParser.new do |parser|
61
+ parser.banner = "Usage: rspec [options] [files or directories]"
62
+
63
+ parser.on('-b', '--backtrace', 'Enable full backtrace') do |o|
64
+ options[:full_backtrace] = true
65
+ end
66
+
67
+ parser.on('-c', '--[no-]color', '--[no-]colour', 'Enable color in the output') do |o|
68
+ options[:color_enabled] = o
69
+ end
70
+
71
+ parser.on('-d', '--debug', 'Enable debugging') do |o|
72
+ options[:debug] = true
73
+ end
74
+
75
+ parser.on('-e', '--example PATTERN', "Run examples whose full descriptions match this pattern",
76
+ "(PATTERN is compiled into a Ruby regular expression)") do |o|
77
+ options[:full_description] = /#{o}/
78
+ end
79
+
80
+ parser.on('-f', '--formatter FORMATTER', 'Choose a formatter',
81
+ ' [p]rogress (default - dots)',
82
+ ' [d]ocumentation (group and example names)') do |o|
83
+ options[:formatter] = o
84
+ end
85
+
86
+ parser.on_tail('-h', '--help', "You're looking at it.") do
87
+ puts parser
88
+ exit
89
+ end
90
+
91
+ parser.on('-I DIRECTORY', 'specify $LOAD_PATH directory (may be used more than once)') do |dir|
92
+ options[:libs] ||= []
93
+ options[:libs] << dir
94
+ end
95
+
96
+ parser.on('-l', '--line_number LINE', 'Specify the line number of a single example to run') do |o|
97
+ options[:line_number] = o
98
+ end
99
+
100
+ parser.on('-o', '--options PATH', 'Read configuration options from a file path. (Defaults to spec/spec.parser)') do |o|
101
+ options[:options_file] = o || local_options_file
102
+ end
103
+
104
+ parser.on('-p', '--profile', 'Enable profiling of examples with output of the top 10 slowest examples') do |o|
105
+ options[:profile_examples] = o
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ def global_options
112
+ parse_options_file(GLOBAL_OPTIONS_FILE)
113
+ end
114
+
115
+ def local_options
116
+ parse_options_file(local_options_file)
117
+ end
118
+
119
+ def parse_options_file(path)
120
+ Parser.parse(args_from_options_file(path))
121
+ end
122
+
123
+ def args_from_options_file(path)
124
+ return [] unless File.exist?(path)
125
+ File.readlines(path).map {|l| l.split}.flatten
126
+ end
127
+
128
+ def local_options_file
129
+ return @options.delete(:options_file) if @options[:options_file]
130
+ return LOCAL_OPTIONS_FILE if File.exist?(LOCAL_OPTIONS_FILE)
131
+ Rspec.deprecate("spec/spec.opts", ".rspec or ~/.rspec", "2.0.0") if File.exist?("spec/spec.opts")
132
+ "spec/spec.opts"
133
+ end
134
+
135
+ end
136
+ end
137
+ end
@@ -1,13 +1,8 @@
1
- require 'rspec/core/hooks'
2
- require 'rspec/core/example_group_subject'
3
- require 'rspec/core/let'
4
- require 'rspec/core/metadata'
5
-
6
1
  module Rspec
7
2
  module Core
8
3
  class ExampleGroup
9
4
  extend Hooks
10
- include ExampleGroupSubject
5
+ include Subject
11
6
  include Let
12
7
 
13
8
  attr_accessor :running_example
@@ -31,10 +26,10 @@ module Rspec
31
26
  def self.alias_example_to(new_alias, extra_options={})
32
27
  new_alias = <<-END_RUBY
33
28
  def self.#{new_alias}(desc=nil, options={}, &block)
34
- updated_options = options.update(:caller => caller)
35
- updated_options.update(:pending => true) unless block
36
- updated_options.update(#{extra_options.inspect})
37
- examples << Rspec::Core::Example.new(self, desc, updated_options, block)
29
+ options.update(:pending => true) unless block
30
+ options.update(:caller => caller)
31
+ options.update(#{extra_options.inspect})
32
+ examples << Rspec::Core::Example.new(self, desc, options, block)
38
33
  end
39
34
  END_RUBY
40
35
  module_eval(new_alias, __FILE__, __LINE__)
@@ -1,7 +1,5 @@
1
1
  module Rspec
2
-
3
2
  module Core
4
-
5
3
  module Formatters
6
4
 
7
5
  class BaseFormatter
@@ -15,20 +13,8 @@ module Rspec
15
13
  @example_group = nil
16
14
  end
17
15
 
18
- def configuration
19
- Rspec.configuration
20
- end
21
-
22
16
  def output
23
- Rspec.configuration.output
24
- end
25
-
26
- def profile_examples?
27
- Rspec.configuration.profile_examples
28
- end
29
-
30
- def color_enabled?
31
- configuration.color_enabled?
17
+ configuration.output
32
18
  end
33
19
 
34
20
  def pending_examples
@@ -39,6 +25,21 @@ module Rspec
39
25
  @failed_examples ||= ::Rspec::Core.world.find(examples, :positive, :execution_result => { :status => 'failed' })
40
26
  end
41
27
 
28
+ def report(count)
29
+ sync_output do
30
+ start(count)
31
+ # TODO - spec that we still dump even when there's
32
+ # an exception
33
+ begin
34
+ yield self
35
+ ensure
36
+ stop
37
+ dump(@duration)
38
+ close
39
+ end
40
+ end
41
+ end
42
+
42
43
  # This method is invoked before any examples are run, right after
43
44
  # they have all been collected. This can be useful for special
44
45
  # formatters that need to provide progress on feedback (graphical ones)
@@ -46,9 +47,14 @@ module Rspec
46
47
  # This method will only be invoked once, and the next one to be invoked
47
48
  # is #add_example_group
48
49
  def start(example_count)
50
+ @start = Time.now
49
51
  @example_count = example_count
50
52
  end
51
53
 
54
+ def stop
55
+ @duration = Time.now - @start
56
+ end
57
+
52
58
  def example_finished(example)
53
59
  examples << example
54
60
  end
@@ -60,8 +66,13 @@ module Rspec
60
66
  def add_example_group(example_group)
61
67
  @example_group = example_group
62
68
  end
63
-
64
- alias_method :add_example_group, :add_example_group
69
+
70
+ def dump(duration)
71
+ start_dump(duration)
72
+ dump_failures
73
+ dump_summary
74
+ dump_pending
75
+ end
65
76
 
66
77
  # This method is invoked after all of the examples have executed. The next method
67
78
  # to be invoked after this one is #dump_failure (once for each failed example),
@@ -95,7 +106,11 @@ module Rspec
95
106
  cleansed.empty? ? backtrace : cleansed
96
107
  end
97
108
 
98
- protected
109
+ protected
110
+
111
+ def configuration
112
+ Rspec.configuration
113
+ end
99
114
 
100
115
  def backtrace_line(line)
101
116
  return nil if configuration.cleaned_from_backtrace?(line)
@@ -119,9 +134,29 @@ module Rspec
119
134
  end
120
135
  end
121
136
 
137
+ def sync_output
138
+ begin
139
+ old_sync, output.sync = output.sync, true if output_supports_sync
140
+ yield
141
+ ensure
142
+ output.sync = old_sync if output_supports_sync
143
+ end
144
+ end
145
+
146
+ def output_supports_sync
147
+ output.respond_to?(:sync=)
148
+ end
149
+
150
+ def profile_examples?
151
+ configuration.profile_examples
152
+ end
153
+
154
+ def color_enabled?
155
+ configuration.color_enabled?
156
+ end
157
+
122
158
  end
123
159
 
124
160
  end
125
161
  end
126
-
127
162
  end
@@ -77,6 +77,12 @@ EOM
77
77
  update(options)
78
78
  end
79
79
 
80
+ def all_apply?(filters)
81
+ filters.all? do |filter_on, filter|
82
+ apply_condition(filter_on, filter)
83
+ end
84
+ end
85
+
80
86
  def apply_condition(filter_on, filter, metadata=nil)
81
87
  metadata ||= self
82
88
  case filter
@@ -97,12 +103,6 @@ EOM
97
103
  end
98
104
  end
99
105
 
100
- def all_apply?(filters)
101
- filters.all? do |filter_on, filter|
102
- apply_condition(filter_on, filter)
103
- end
104
- end
105
-
106
106
  private
107
107
 
108
108
  def superclass_metadata
@@ -1,6 +1,5 @@
1
1
  module Rspec
2
2
  module Core
3
-
4
3
  class Runner
5
4
 
6
5
  def self.installed_at_exit?
@@ -21,47 +20,42 @@ module Rspec
21
20
  configuration.formatter
22
21
  end
23
22
 
24
- def require_all_files(configuration)
25
- configuration.files_to_run.map {|f| require f }
23
+ def run(args = [])
24
+ configure(args)
25
+
26
+ reporter.report(example_count) do |reporter|
27
+ example_groups.run_all(reporter)
28
+ end
29
+
30
+ example_groups.success?
26
31
  end
27
32
 
28
- def run(args = [])
29
- Rspec::Core::CommandLineOptions.parse(args).apply(configuration)
30
-
31
- require_all_files(configuration)
33
+ private
32
34
 
35
+ def configure(args)
36
+ Rspec::Core::ConfigurationOptions.new(args).apply_to(configuration)
37
+ configuration.require_files_to_run
33
38
  configuration.configure_mock_framework
34
-
35
- total_examples_to_run = Rspec::Core.world.total_examples_to_run
36
-
37
- old_sync, reporter.output.sync = reporter.output.sync, true if reporter.output.respond_to?(:sync=)
38
-
39
- suite_success = true
39
+ end
40
40
 
41
- reporter_supports_sync = reporter.output.respond_to?(:sync=)
42
- old_sync, reporter.output.sync = reporter.output.sync, true if reporter_supports_sync
41
+ def example_count
42
+ Rspec::Core.world.total_examples_to_run
43
+ end
43
44
 
44
- reporter.start(total_examples_to_run) # start the clock
45
- start = Time.now
45
+ def example_groups
46
+ Rspec::Core.world.example_groups_to_run.extend(ExampleGroups)
47
+ end
46
48
 
47
- Rspec::Core.world.example_groups_to_run.each do |example_group|
48
- suite_success &= example_group.run(reporter)
49
+ module ExampleGroups
50
+ def run_all(reporter)
51
+ @success = self.inject(true) {|success, group| success &= group.run(reporter)}
49
52
  end
50
53
 
51
- reporter.start_dump(Time.now - start)
52
-
53
- reporter.dump_failures
54
- reporter.dump_summary
55
- reporter.dump_pending
56
- reporter.close
57
-
58
- reporter.output.sync = old_sync if reporter_supports_sync
59
-
60
- suite_success
54
+ def success?
55
+ @success ||= false
56
+ end
61
57
  end
62
58
 
63
-
64
59
  end
65
-
66
60
  end
67
61
  end
@@ -26,7 +26,7 @@ module Rspec
26
26
 
27
27
  alias :shared_examples_for :share_examples_for
28
28
 
29
- private
29
+ private
30
30
 
31
31
  def ensure_shared_example_group_name_not_taken(name)
32
32
  if Rspec::Core.world.shared_example_groups.has_key?(name)
@@ -1,6 +1,6 @@
1
1
  module Rspec
2
2
  module Core
3
- module ExampleGroupSubject
3
+ module Subject
4
4
 
5
5
  def self.included(kls)
6
6
  kls.extend ClassMethods
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rspec-core}
8
- s.version = "2.0.0.beta.5"
8
+ s.version = "2.0.0.beta.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chad Humphries", "David Chelimsky"]
12
- s.date = %q{2010-04-04}
12
+ s.date = %q{2010-04-12}
13
13
  s.description = %q{Rspec runner and example group classes}
14
14
  s.email = %q{dchelimsky@gmail.com;chad.humphries@gmail.com}
15
15
  s.executables = ["rspec", "spec"]
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".gitignore",
22
+ ".rspec",
22
23
  ".treasure_map.rb",
23
24
  "License.txt",
24
25
  "README.markdown",
@@ -80,7 +81,7 @@ Gem::Specification.new do |s|
80
81
  "features/command_line/example_name_option.feature",
81
82
  "features/command_line/line_number_appended_to_path.feature",
82
83
  "features/command_line/line_number_option.feature",
83
- "features/configuration/spec_opts.feature",
84
+ "features/configuration/options_file.feature",
84
85
  "features/example_groups/describe_aliases.feature",
85
86
  "features/example_groups/nested_groups.feature",
86
87
  "features/formatters/custom_formatter.feature",
@@ -101,12 +102,11 @@ Gem::Specification.new do |s|
101
102
  "lib/rspec/core.rb",
102
103
  "lib/rspec/core/around_proxy.rb",
103
104
  "lib/rspec/core/backward_compatibility.rb",
104
- "lib/rspec/core/command_line_options.rb",
105
105
  "lib/rspec/core/configuration.rb",
106
+ "lib/rspec/core/configuration_options.rb",
106
107
  "lib/rspec/core/deprecation.rb",
107
108
  "lib/rspec/core/example.rb",
108
109
  "lib/rspec/core/example_group.rb",
109
- "lib/rspec/core/example_group_subject.rb",
110
110
  "lib/rspec/core/formatters.rb",
111
111
  "lib/rspec/core/formatters/base_formatter.rb",
112
112
  "lib/rspec/core/formatters/base_text_formatter.rb",
@@ -127,17 +127,16 @@ Gem::Specification.new do |s|
127
127
  "lib/rspec/core/ruby_project.rb",
128
128
  "lib/rspec/core/runner.rb",
129
129
  "lib/rspec/core/shared_example_group.rb",
130
- "lib/rspec/core/shared_example_group_kernel_extensions.rb",
130
+ "lib/rspec/core/subject.rb",
131
131
  "lib/rspec/core/version.rb",
132
132
  "lib/rspec/core/world.rb",
133
133
  "rspec-core.gemspec",
134
134
  "script/console",
135
135
  "spec/autotest/failed_results_re_spec.rb",
136
136
  "spec/autotest/rspec_spec.rb",
137
- "spec/rspec/core/command_line_options_spec.rb",
137
+ "spec/rspec/core/configuration_options_spec.rb",
138
138
  "spec/rspec/core/configuration_spec.rb",
139
139
  "spec/rspec/core/example_group_spec.rb",
140
- "spec/rspec/core/example_group_subject_spec.rb",
141
140
  "spec/rspec/core/example_spec.rb",
142
141
  "spec/rspec/core/formatters/base_formatter_spec.rb",
143
142
  "spec/rspec/core/formatters/base_text_formatter_spec.rb",
@@ -156,6 +155,7 @@ Gem::Specification.new do |s|
156
155
  "spec/rspec/core/ruby_project_spec.rb",
157
156
  "spec/rspec/core/runner_spec.rb",
158
157
  "spec/rspec/core/shared_example_group_spec.rb",
158
+ "spec/rspec/core/subject_spec.rb",
159
159
  "spec/rspec/core/world_spec.rb",
160
160
  "spec/rspec/core_spec.rb",
161
161
  "spec/ruby_forker.rb",
@@ -166,7 +166,7 @@ Gem::Specification.new do |s|
166
166
  s.homepage = %q{http://github.com/rspec/core}
167
167
  s.post_install_message = %q{**************************************************
168
168
 
169
- Thank you for installing rspec-core-2.0.0.beta.5
169
+ Thank you for installing rspec-core-2.0.0.beta.6
170
170
 
171
171
  This is beta software. If you are looking
172
172
  for a supported production release, please
@@ -178,14 +178,13 @@ Gem::Specification.new do |s|
178
178
  s.require_paths = ["lib"]
179
179
  s.rubyforge_project = %q{rspec}
180
180
  s.rubygems_version = %q{1.3.6}
181
- s.summary = %q{rspec-core-2.0.0.beta.5}
181
+ s.summary = %q{rspec-core-2.0.0.beta.6}
182
182
  s.test_files = [
183
183
  "spec/autotest/failed_results_re_spec.rb",
184
184
  "spec/autotest/rspec_spec.rb",
185
- "spec/rspec/core/command_line_options_spec.rb",
185
+ "spec/rspec/core/configuration_options_spec.rb",
186
186
  "spec/rspec/core/configuration_spec.rb",
187
187
  "spec/rspec/core/example_group_spec.rb",
188
- "spec/rspec/core/example_group_subject_spec.rb",
189
188
  "spec/rspec/core/example_spec.rb",
190
189
  "spec/rspec/core/formatters/base_formatter_spec.rb",
191
190
  "spec/rspec/core/formatters/base_text_formatter_spec.rb",
@@ -204,6 +203,7 @@ Gem::Specification.new do |s|
204
203
  "spec/rspec/core/ruby_project_spec.rb",
205
204
  "spec/rspec/core/runner_spec.rb",
206
205
  "spec/rspec/core/shared_example_group_spec.rb",
206
+ "spec/rspec/core/subject_spec.rb",
207
207
  "spec/rspec/core/world_spec.rb",
208
208
  "spec/rspec/core_spec.rb",
209
209
  "spec/ruby_forker.rb",
@@ -216,19 +216,19 @@ Gem::Specification.new do |s|
216
216
  s.specification_version = 3
217
217
 
218
218
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
219
- s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.5"])
220
- s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.5"])
219
+ s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.6"])
220
+ s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.6"])
221
221
  s.add_development_dependency(%q<cucumber>, [">= 0.5.3"])
222
222
  s.add_development_dependency(%q<autotest>, [">= 4.2.9"])
223
223
  else
224
- s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.5"])
225
- s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.5"])
224
+ s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.6"])
225
+ s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.6"])
226
226
  s.add_dependency(%q<cucumber>, [">= 0.5.3"])
227
227
  s.add_dependency(%q<autotest>, [">= 4.2.9"])
228
228
  end
229
229
  else
230
- s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.5"])
231
- s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.5"])
230
+ s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.6"])
231
+ s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.6"])
232
232
  s.add_dependency(%q<cucumber>, [">= 0.5.3"])
233
233
  s.add_dependency(%q<autotest>, [">= 4.2.9"])
234
234
  end
@@ -1,29 +1,34 @@
1
1
  require 'spec_helper'
2
2
  require 'ostruct'
3
3
 
4
- describe Rspec::Core::CommandLineOptions do
4
+ describe Rspec::Core::ConfigurationOptions do
5
5
 
6
6
  def options_from_args(*args)
7
- Rspec::Core::CommandLineOptions.new(args).parse.options
7
+ Rspec::Core::ConfigurationOptions.new(args).parse_command_line_options
8
8
  end
9
9
 
10
10
  describe 'color_enabled' do
11
- example "-c, --colour, or --color should be parsed as true" do
11
+ example "-c, --colour, or --color are parsed as true" do
12
12
  options_from_args('-c').should include(:color_enabled => true)
13
13
  options_from_args('--color').should include(:color_enabled => true)
14
14
  options_from_args('--colour').should include(:color_enabled => true)
15
15
  end
16
16
 
17
- example "--no-color should be parsed as false" do
17
+ example "--no-color is parsed as false" do
18
18
  options_from_args('--no-color').should include(:color_enabled => false)
19
19
  end
20
20
  end
21
21
 
22
- describe 'formatter' do
23
- example '-f or --formatter with no arguments should be parsed as nil' do
24
- options_from_args('--formatter').should include(:formatter => nil)
22
+ describe 'load path additions' do
23
+ example "-I parses like it does w/ ruby command" do
24
+ options_from_args('-I', 'a_dir').should include(:libs => ['a_dir'])
25
+ end
26
+ example "-I can be used more than once" do
27
+ options_from_args('-I', 'dir_1', '-I', 'dir_2').should include(:libs => ['dir_1','dir_2'])
25
28
  end
29
+ end
26
30
 
31
+ describe 'formatter' do
27
32
  example '-f or --formatter with an argument should parse' do
28
33
  options_from_args('--formatter', 'd').should include(:formatter => 'd')
29
34
  options_from_args('-f', 'd').should include(:formatter => 'd')
@@ -52,50 +57,10 @@ describe Rspec::Core::CommandLineOptions do
52
57
  end
53
58
  end
54
59
 
55
- describe "options" do
60
+ describe "options file" do
56
61
  it "is parsed from --options or -o" do
57
- options_from_args('--options', 'spec/spec.opts').should include(:options_file => "spec/spec.opts")
58
- options_from_args('-o', 'foo/spec.opts').should include(:options_file => "foo/spec.opts")
59
- end
60
-
61
- it "defaults to spec/spec.opts when you don't give it a file path" do
62
- options_from_args('-o').should include(:options_file => "spec/spec.opts")
63
- options_from_args('--options').should include(:options_file => "spec/spec.opts")
64
- end
65
-
66
- it "loads automatically" do
67
- cli_options = Rspec::Core::CommandLineOptions.new([]).parse
68
- File.stub(:exist?) { true }
69
- File.stub(:readlines) { ["--formatter", "doc"] }
70
- config = OpenStruct.new
71
- cli_options.apply(config)
72
- config.formatter.should == 'doc'
73
- end
74
-
75
- it "allows options on one line" do
76
- cli_options = Rspec::Core::CommandLineOptions.new([]).parse
77
- File.stub(:exist?) { true }
78
- File.stub(:readlines) { ["--formatter doc"] }
79
- config = OpenStruct.new
80
- cli_options.apply(config)
81
- config.formatter.should == 'doc'
82
- end
83
-
84
- it "merges options from the CLI and file options gracefully" do
85
- cli_options = Rspec::Core::CommandLineOptions.new(['--formatter', 'progress', '--options', 'spec/spec.opts']).parse
86
- cli_options.stub!(:parse_spec_file_contents).and_return(:full_backtrace => true)
87
- config = OpenStruct.new
88
- cli_options.apply(config)
89
- config.full_backtrace.should == true
90
- config.formatter.should == 'progress'
91
- end
92
-
93
- it "CLI options trump file options" do
94
- cli_options = Rspec::Core::CommandLineOptions.new(['--formatter', 'progress', '--options', 'spec/spec.opts']).parse
95
- cli_options.stub!(:parse_spec_file_contents).and_return(:formatter => 'documentation')
96
- config = OpenStruct.new
97
- cli_options.apply(config)
98
- config.formatter.should == 'progress'
62
+ options_from_args("--options", "custom/path").should include(:options_file => "custom/path")
63
+ options_from_args("-o", "custom/path").should include(:options_file => "custom/path")
99
64
  end
100
65
  end
101
66
 
@@ -128,5 +93,76 @@ describe Rspec::Core::CommandLineOptions do
128
93
  end
129
94
  end
130
95
 
96
+ describe "options file (override)" do
97
+ let(:config) { OpenStruct.new }
98
+
99
+ it "loads automatically" do
100
+ File.stub(:exist?) { true }
101
+ File.stub(:readlines) { ["--formatter", "doc"] }
102
+
103
+ cli_options = Rspec::Core::ConfigurationOptions.new([])
104
+ cli_options.apply_to(config)
105
+ config.formatter.should == 'doc'
106
+ end
107
+
108
+ it "allows options on one line" do
109
+ File.stub(:exist?) { true }
110
+ File.stub(:readlines) { ["--formatter doc"] }
111
+
112
+ cli_options = Rspec::Core::ConfigurationOptions.new([])
113
+ cli_options.apply_to(config)
114
+ config.formatter.should == 'doc'
115
+ end
116
+
117
+ it "merges options from the global and local .rspec and the command line" do
118
+ File.stub(:exist?){ true }
119
+ File.stub(:readlines) do |path|
120
+ case path
121
+ when ".rspec"
122
+ ["--formatter", "documentation"]
123
+ when /\.rspec/
124
+ ["--line", "37"]
125
+ else
126
+ raise "Unexpected path: #{path}"
127
+ end
128
+ end
129
+ cli_options = Rspec::Core::ConfigurationOptions.new(["--no-color"])
130
+
131
+ cli_options.apply_to(config)
132
+
133
+ config.formatter.should == "documentation"
134
+ config.line_number.should == "37"
135
+ config.color_enabled.should be_false
136
+ end
137
+
138
+ it "prefers local options over global" do
139
+ File.stub(:exist?){ true }
140
+ File.stub(:readlines) do |path|
141
+ case path
142
+ when ".rspec"
143
+ ["--formatter", "local"]
144
+ when /\.rspec/
145
+ ["--formatter", "global"]
146
+ else
147
+ raise "Unexpected path: #{path}"
148
+ end
149
+ end
150
+ cli_options = Rspec::Core::ConfigurationOptions.new([])
151
+
152
+ cli_options.apply_to(config)
153
+
154
+ config.formatter.should == "local"
155
+ end
156
+
157
+ it "prefers CLI options over file options" do
158
+ config_options = Rspec::Core::ConfigurationOptions.new(['--formatter', 'progress'])
159
+ config_options.stub(:parse_options_file).and_return(:formatter => 'documentation')
160
+
161
+ config_options.apply_to(config)
162
+
163
+ config.formatter.should == 'progress'
164
+ end
165
+ end
166
+
131
167
  end
132
168
 
@@ -4,7 +4,7 @@ module Rspec::Core
4
4
 
5
5
  describe Configuration do
6
6
 
7
- let(:config) { Configuration.new }
7
+ let(:config) { subject }
8
8
 
9
9
  describe "#mock_framework_class" do
10
10
  before(:each) do
@@ -237,11 +237,11 @@ module Rspec::Core
237
237
  end
238
238
  end
239
239
 
240
-
241
240
  context "transactional examples" do
242
241
  it "defaults to use transactional examples" do
243
- config.use_transactional_examples?.should be_true
242
+ config.use_transactional_examples?.should be_true
244
243
  end
244
+
245
245
  describe "#use_transactional_examples=" do
246
246
  it "remembers that I don't want transactional exmaples" do
247
247
  config.use_transactional_examples = false
@@ -250,6 +250,13 @@ module Rspec::Core
250
250
  end
251
251
  end
252
252
 
253
+ describe "libs=" do
254
+ it "adds directories to the LOAD_PATH" do
255
+ $LOAD_PATH.should_receive(:unshift).with("a/dir")
256
+ config.libs = ["a/dir"]
257
+ end
258
+ end
259
+
253
260
  end
254
261
 
255
262
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  module Rspec::Core
4
4
 
5
- describe ExampleGroupSubject do
5
+ describe Subject do
6
6
 
7
7
  describe "implicit subject" do
8
8
  describe "with a class" do
@@ -2,7 +2,7 @@ require 'rbconfig'
2
2
 
3
3
  module RubyForker
4
4
  # Forks a ruby interpreter with same type as ourself.
5
- # juby will fork jruby, ruby will fork ruby etc.
5
+ # jruby will fork jruby, ruby will fork ruby etc.
6
6
  def ruby(args, stderr=nil)
7
7
  config = ::Config::CONFIG
8
8
  interpreter = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
@@ -10,4 +10,4 @@ module RubyForker
10
10
  cmd << " 2> #{stderr}" unless stderr.nil?
11
11
  `#{cmd}`
12
12
  end
13
- end
13
+ end
metadata CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
7
7
  - 0
8
8
  - 0
9
9
  - beta
10
- - 5
11
- version: 2.0.0.beta.5
10
+ - 6
11
+ version: 2.0.0.beta.6
12
12
  platform: ruby
13
13
  authors:
14
14
  - Chad Humphries
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-04-04 00:00:00 -03:00
20
+ date: 2010-04-12 00:00:00 -05:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -32,8 +32,8 @@ dependencies:
32
32
  - 0
33
33
  - 0
34
34
  - beta
35
- - 5
36
- version: 2.0.0.beta.5
35
+ - 6
36
+ version: 2.0.0.beta.6
37
37
  type: :development
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
@@ -48,8 +48,8 @@ dependencies:
48
48
  - 0
49
49
  - 0
50
50
  - beta
51
- - 5
52
- version: 2.0.0.beta.5
51
+ - 6
52
+ version: 2.0.0.beta.6
53
53
  type: :development
54
54
  version_requirements: *id002
55
55
  - !ruby/object:Gem::Dependency
@@ -92,6 +92,7 @@ extra_rdoc_files:
92
92
  files:
93
93
  - .document
94
94
  - .gitignore
95
+ - .rspec
95
96
  - .treasure_map.rb
96
97
  - License.txt
97
98
  - README.markdown
@@ -153,7 +154,7 @@ files:
153
154
  - features/command_line/example_name_option.feature
154
155
  - features/command_line/line_number_appended_to_path.feature
155
156
  - features/command_line/line_number_option.feature
156
- - features/configuration/spec_opts.feature
157
+ - features/configuration/options_file.feature
157
158
  - features/example_groups/describe_aliases.feature
158
159
  - features/example_groups/nested_groups.feature
159
160
  - features/formatters/custom_formatter.feature
@@ -174,12 +175,11 @@ files:
174
175
  - lib/rspec/core.rb
175
176
  - lib/rspec/core/around_proxy.rb
176
177
  - lib/rspec/core/backward_compatibility.rb
177
- - lib/rspec/core/command_line_options.rb
178
178
  - lib/rspec/core/configuration.rb
179
+ - lib/rspec/core/configuration_options.rb
179
180
  - lib/rspec/core/deprecation.rb
180
181
  - lib/rspec/core/example.rb
181
182
  - lib/rspec/core/example_group.rb
182
- - lib/rspec/core/example_group_subject.rb
183
183
  - lib/rspec/core/formatters.rb
184
184
  - lib/rspec/core/formatters/base_formatter.rb
185
185
  - lib/rspec/core/formatters/base_text_formatter.rb
@@ -200,17 +200,16 @@ files:
200
200
  - lib/rspec/core/ruby_project.rb
201
201
  - lib/rspec/core/runner.rb
202
202
  - lib/rspec/core/shared_example_group.rb
203
- - lib/rspec/core/shared_example_group_kernel_extensions.rb
203
+ - lib/rspec/core/subject.rb
204
204
  - lib/rspec/core/version.rb
205
205
  - lib/rspec/core/world.rb
206
206
  - rspec-core.gemspec
207
207
  - script/console
208
208
  - spec/autotest/failed_results_re_spec.rb
209
209
  - spec/autotest/rspec_spec.rb
210
- - spec/rspec/core/command_line_options_spec.rb
210
+ - spec/rspec/core/configuration_options_spec.rb
211
211
  - spec/rspec/core/configuration_spec.rb
212
212
  - spec/rspec/core/example_group_spec.rb
213
- - spec/rspec/core/example_group_subject_spec.rb
214
213
  - spec/rspec/core/example_spec.rb
215
214
  - spec/rspec/core/formatters/base_formatter_spec.rb
216
215
  - spec/rspec/core/formatters/base_text_formatter_spec.rb
@@ -229,6 +228,7 @@ files:
229
228
  - spec/rspec/core/ruby_project_spec.rb
230
229
  - spec/rspec/core/runner_spec.rb
231
230
  - spec/rspec/core/shared_example_group_spec.rb
231
+ - spec/rspec/core/subject_spec.rb
232
232
  - spec/rspec/core/world_spec.rb
233
233
  - spec/rspec/core_spec.rb
234
234
  - spec/ruby_forker.rb
@@ -242,7 +242,7 @@ licenses: []
242
242
  post_install_message: |
243
243
  **************************************************
244
244
 
245
- Thank you for installing rspec-core-2.0.0.beta.5
245
+ Thank you for installing rspec-core-2.0.0.beta.6
246
246
 
247
247
  This is beta software. If you are looking
248
248
  for a supported production release, please
@@ -276,14 +276,13 @@ rubyforge_project: rspec
276
276
  rubygems_version: 1.3.6
277
277
  signing_key:
278
278
  specification_version: 3
279
- summary: rspec-core-2.0.0.beta.5
279
+ summary: rspec-core-2.0.0.beta.6
280
280
  test_files:
281
281
  - spec/autotest/failed_results_re_spec.rb
282
282
  - spec/autotest/rspec_spec.rb
283
- - spec/rspec/core/command_line_options_spec.rb
283
+ - spec/rspec/core/configuration_options_spec.rb
284
284
  - spec/rspec/core/configuration_spec.rb
285
285
  - spec/rspec/core/example_group_spec.rb
286
- - spec/rspec/core/example_group_subject_spec.rb
287
286
  - spec/rspec/core/example_spec.rb
288
287
  - spec/rspec/core/formatters/base_formatter_spec.rb
289
288
  - spec/rspec/core/formatters/base_text_formatter_spec.rb
@@ -302,6 +301,7 @@ test_files:
302
301
  - spec/rspec/core/ruby_project_spec.rb
303
302
  - spec/rspec/core/runner_spec.rb
304
303
  - spec/rspec/core/shared_example_group_spec.rb
304
+ - spec/rspec/core/subject_spec.rb
305
305
  - spec/rspec/core/world_spec.rb
306
306
  - spec/rspec/core_spec.rb
307
307
  - spec/ruby_forker.rb
@@ -1,93 +0,0 @@
1
- require 'optparse'
2
- # http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html
3
-
4
- module Rspec
5
- module Core
6
-
7
- class CommandLineOptions
8
- DEFAULT_OPTIONS_FILE = 'spec/spec.opts'
9
-
10
- attr_reader :args, :options
11
-
12
- def self.parse(args)
13
- new(args).parse
14
- end
15
-
16
- def initialize(args)
17
- @args = args
18
- @options = {}
19
- end
20
-
21
- def parse
22
- options[:files_or_directories_to_run] = OptionParser.new do |opts|
23
- opts.banner = "Usage: rspec [options] [files or directories]"
24
-
25
- opts.on('-c', '--[no-]color', '--[no-]colour', 'Enable color in the output') do |o|
26
- options[:color_enabled] = o
27
- end
28
-
29
- opts.on('-f', '--formatter [FORMATTER]', 'Choose a formatter',
30
- ' [p]rogress (default - dots)',
31
- ' [d]ocumentation (group and example names)') do |o|
32
- options[:formatter] = o
33
- end
34
-
35
- opts.on('-l', '--line_number [LINE]', 'Specify the line number of a single example to run') do |o|
36
- options[:line_number] = o
37
- end
38
-
39
- opts.on('-e', '--example [PATTERN]', "Run examples whose full descriptions match this pattern",
40
- "(PATTERN is compiled into a Ruby regular expression)") do |o|
41
- options[:full_description] = /#{o}/
42
- end
43
-
44
- opts.on('-o', '--options [PATH]', 'Read configuration options from a file path. (Defaults to spec/spec.opts)') do |o|
45
- options[:options_file] = o || DEFAULT_OPTIONS_FILE
46
- end
47
-
48
- opts.on('-p', '--profile', 'Enable profiling of examples with output of the top 10 slowest examples') do |o|
49
- options[:profile_examples] = o
50
- end
51
-
52
- opts.on('-b', '--backtrace', 'Enable full backtrace') do |o|
53
- options[:full_backtrace] = true
54
- end
55
-
56
- opts.on('-d', '--debug', 'Enable debugging') do |o|
57
- options[:debug] = true
58
- end
59
-
60
- opts.on_tail('-h', '--help', "You're looking at it.") do
61
- puts opts
62
- exit
63
- end
64
- end.parse!(@args)
65
-
66
- self
67
- end
68
-
69
- def apply(config)
70
- # 1) option file, cli options, rspec core configure
71
- # TODO: Add options_file to configuration
72
- # TODO: Store command line options for reference
73
- options_file = options.delete(:options_file) || DEFAULT_OPTIONS_FILE
74
- merged_options = parse_spec_file_contents(options_file).merge!(options)
75
- options.replace merged_options
76
-
77
- options.each do |key, value|
78
- config.send("#{key}=", value)
79
- end
80
- end
81
-
82
- private
83
-
84
- def parse_spec_file_contents(options_file)
85
- return {} unless File.exist?(options_file)
86
- spec_file_contents = File.readlines(options_file).map {|l| l.split}.flatten
87
- self.class.new(spec_file_contents).parse.options
88
- end
89
-
90
- end
91
-
92
- end
93
- end
@@ -1,31 +0,0 @@
1
- module Rspec
2
- module Core
3
- module SharedExampleGroupKernelExtensions
4
-
5
- def share_examples_for(name, &block)
6
- Rspec::Core.world.shared_example_groups[name] = block
7
- end
8
-
9
- def share_as(name, &block)
10
- if Object.const_defined?(name)
11
- puts "name was defined as #{name.inspect}"
12
- raise NameError, "The first argument (#{name}) to share_as must be a legal name for a constant not already in use."
13
- end
14
-
15
- mod = Module.new do
16
- @shared_block = block
17
-
18
- def self.included(kls)
19
- kls.module_eval(&@shared_block)
20
- end
21
- end
22
-
23
- shared_const = Object.const_set(name, mod)
24
- Rspec::Core.world.shared_example_groups[shared_const] = block
25
- end
26
-
27
- alias :shared_examples_for :share_examples_for
28
-
29
- end
30
- end
31
- end