rspec-core 2.0.0.beta.11 → 2.0.0.beta.12

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -28,10 +28,6 @@ begin
28
28
  #{"*"*50}
29
29
 
30
30
  Thank you for installing #{gem.summary}
31
-
32
- This is beta software. If you are looking
33
- for a supported production release, please
34
- "gem install rspec" (without --pre).
35
31
 
36
32
  #{"*"*50}
37
33
  EOM
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.beta.11
1
+ 2.0.0.beta.12
@@ -29,7 +29,7 @@ Feature: example name option
29
29
  When I run "rspec . --example nothing_like_this"
30
30
  Then I should see "0 examples, 0 failures"
31
31
 
32
- Scenario: all matches
32
+ Scenario: match on one word
33
33
  When I run "rspec . --example example"
34
34
  Then I should see "4 examples, 0 failures"
35
35
 
@@ -37,10 +37,14 @@ Feature: example name option
37
37
  When I run "rspec . --example 'first example'"
38
38
  Then I should see "2 examples, 0 failures"
39
39
 
40
- Scenario: one match in one file
40
+ Scenario: one match in one file using just the example name
41
41
  When I run "rspec . --example 'first example in first group'"
42
42
  Then I should see "1 example, 0 failures"
43
43
 
44
+ Scenario: one match in one file using the example name and the group name
45
+ When I run "rspec . --example 'first group first example in first group'"
46
+ Then I should see "1 example, 0 failures"
47
+
44
48
  Scenario: one match in one file using regexp
45
49
  When I run "rspec . --example 'first .* first example'"
46
50
  Then I should see "1 example, 0 failures"
@@ -41,15 +41,14 @@ Feature: spec/spec.opts
41
41
  When I run "rspec ./spec/example_spec.rb"
42
42
  Then I should see "1 example, 0 failures"
43
43
 
44
- @wip
45
- Scenario: formatter set in both (.rspec wins)
44
+ Scenario: formatter set in both (RSpec.configure wins)
46
45
  Given a file named ".rspec" with:
47
46
  """
48
- --format documentation
47
+ --format progress
49
48
  """
50
49
  And a file named "spec/spec_helper.rb" with:
51
50
  """
52
- RSpec.configure {|c| c.formatter = 'progress'}
51
+ RSpec.configure {|c| c.formatter = 'documentation'}
53
52
  """
54
53
  And a file named "spec/example_spec.rb" with:
55
54
  """
@@ -197,6 +197,36 @@ Feature: before and after hooks
197
197
  Then I should see "1 example, 0 failures"
198
198
  Then I should see matching /outer before all\n.outer after all\n\n\n\nFinished/
199
199
 
200
+ Scenario: nested examples have access to state set in outer before(:all)
201
+ Given a file named "before_all_spec.rb" with:
202
+ """
203
+ describe "something" do
204
+ before :all do
205
+ @value = 123
206
+ end
207
+
208
+ describe "nested" do
209
+ it "access state set in before(:all)" do
210
+ @value.should eq(123)
211
+ end
212
+
213
+ describe "nested more deeply" do
214
+ it "access state set in before(:all)" do
215
+ @value.should eq(123)
216
+ end
217
+ end
218
+ end
219
+
220
+ describe "nested in parallel" do
221
+ it "access state set in before(:all)" do
222
+ @value.should == 123
223
+ end
224
+ end
225
+ end
226
+ """
227
+ When I run "rspec before_all_spec.rb"
228
+ Then I should see "3 examples, 0 failures"
229
+
200
230
  Scenario: before/after all blocks have access to state
201
231
  Given a file named "before_and_after_all_spec.rb" with:
202
232
  """
@@ -1,10 +1,9 @@
1
1
  Feature: halt
2
2
 
3
- In an example, before hook, after hook, or around hook, you can
4
- halt the current example, group, or suite based on arbitrary
5
- criteria.
3
+ In an example, before or after hook, you can halt the current example, group,
4
+ or suite based on arbitrary criteria.
6
5
 
7
- @wip
6
+ @wip
8
7
  Scenario: halt group on failure
9
8
  Given a directory named "spec"
10
9
  And a file named "spec/example_spec.rb" with:
@@ -3,6 +3,7 @@ module RSpec
3
3
  class CommandLine
4
4
  def initialize(argv)
5
5
  @options = RSpec::Core::ConfigurationOptions.new(argv)
6
+ @options.parse_options
6
7
  @options.configure(configuration)
7
8
  configuration.require_files_to_run
8
9
  configuration.configure_mock_framework
@@ -120,10 +120,30 @@ module RSpec
120
120
  backtrace_clean_patterns.clear
121
121
  end
122
122
 
123
+ def color_enabled=(bool)
124
+ return unless bool
125
+ settings[:color_enabled] = true
126
+ if bool && Config::CONFIG['host_os'] =~ /mswin|mingw/
127
+ orig_output_stream = settings[:output_stream]
128
+ begin
129
+ require 'Win32/Console/ANSI'
130
+ rescue LoadError
131
+ warn "You must 'gem install win32console' to use colour on Windows"
132
+ settings[:color_enabled] = false
133
+ ensure
134
+ settings[:output_stream] = orig_output_stream
135
+ end
136
+ end
137
+ end
138
+
123
139
  def libs=(libs)
124
140
  libs.map {|lib| $LOAD_PATH.unshift lib}
125
141
  end
126
142
 
143
+ def requires=(paths)
144
+ paths.map {|path| require path}
145
+ end
146
+
127
147
  def debug=(bool)
128
148
  return unless bool
129
149
  begin
@@ -151,13 +171,17 @@ EOM
151
171
  end
152
172
 
153
173
  def formatter=(formatter_to_use)
154
- formatter_class = case formatter_to_use.to_s
155
- when 'd', 'doc', 'documentation', 's', 'n', 'spec', 'nested'
156
- RSpec::Core::Formatters::DocumentationFormatter
157
- when 'progress'
158
- RSpec::Core::Formatters::ProgressFormatter
159
- else
160
- raise ArgumentError, "Formatter '#{formatter_to_use}' unknown - maybe you meant 'documentation' or 'progress'?."
174
+ if formatter_to_use.is_a?(Class)
175
+ formatter_class = formatter_to_use
176
+ else
177
+ formatter_class = case formatter_to_use.to_s
178
+ when 'd', 'doc', 'documentation', 's', 'n', 'spec', 'nested'
179
+ RSpec::Core::Formatters::DocumentationFormatter
180
+ when 'progress'
181
+ RSpec::Core::Formatters::ProgressFormatter
182
+ else
183
+ raise ArgumentError, "Formatter '#{formatter_to_use}' unknown - maybe you meant 'documentation' or 'progress'?."
184
+ end
161
185
  end
162
186
  self.formatter_class = formatter_class
163
187
  end
@@ -189,10 +213,16 @@ EOM
189
213
  RSpec::Core::ExampleGroup.alias_example_to(new_name, extra_options)
190
214
  end
191
215
 
192
- def filter_run(options={})
216
+ def filter_run_including(options={})
193
217
  self.filter = options unless filter and filter[:line_number] || filter[:full_description]
194
218
  end
195
219
 
220
+ alias_method :filter_run, :filter_run_including
221
+
222
+ def filter_run_excluding(options={})
223
+ self.exclusion_filter = options
224
+ end
225
+
196
226
  def include(mod, filters={})
197
227
  include_or_extend_modules << [:include, mod, filters]
198
228
  end
@@ -12,37 +12,47 @@ module RSpec
12
12
 
13
13
  def initialize(args)
14
14
  @args = args
15
- @options = parse_options
16
15
  end
17
16
 
18
17
  def configure(config)
19
- options.each do |key, value|
20
- config.send("#{key}=", value) rescue nil
18
+ sorted_keys.each do |key|
19
+ config.send("#{key}=", options[key])
21
20
  end
22
21
  end
23
22
 
23
+ def sorted_keys
24
+ options.keys.sort{|a,b| a.to_s <=> b.to_s}
25
+ end
26
+
24
27
  def drb_argv
25
28
  argv = []
26
29
  argv << "--color" if options[:color_enabled]
27
30
  argv << "--profile" if options[:profile_examples]
28
31
  argv << "--backtrace" if options[:full_backtrace]
29
- argv << "--formatter" << options[:formatter] if options[:formatter]
32
+ argv << "--format" << options[:formatter] if options[:formatter]
30
33
  argv << "--line_number" << options[:line_number] if options[:line_number]
31
34
  argv << "--options_file" << options[:options_file] if options[:options_file]
32
35
  argv << "--example" << options[:full_description].source if options[:full_description]
33
36
  argv + options[:files_or_directories_to_run]
34
37
  end
35
38
 
36
- private
37
-
38
39
  def parse_options
39
- command_line_options = parse_command_line_options
40
- local_options = parse_local_options(command_line_options)
41
- global_options = parse_global_options
40
+ @options = begin
41
+ command_line_options = parse_command_line_options
42
+ local_options = parse_local_options(command_line_options)
43
+ global_options = parse_global_options
44
+ env_options = parse_env_options
42
45
 
43
- [global_options, local_options, command_line_options].inject do |merged, options|
44
- merged.merge(options)
45
- end
46
+ [global_options, local_options, command_line_options, env_options].inject do |merged, options|
47
+ merged.merge(options)
48
+ end
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def parse_env_options
55
+ ENV["SPEC_OPTS"] ? Parser.parse!(ENV["SPEC_OPTS"].split) : {}
46
56
  end
47
57
 
48
58
  def parse_command_line_options
@@ -3,6 +3,7 @@ module RSpec
3
3
  class DRbCommandLine
4
4
  def initialize(argv)
5
5
  @options = RSpec::Core::ConfigurationOptions.new(argv)
6
+ @options.parse_options
6
7
  end
7
8
 
8
9
  def drb_port
@@ -65,13 +65,17 @@ module RSpec
65
65
  end
66
66
 
67
67
  def self.examples
68
- @_examples ||= []
68
+ @examples ||= []
69
69
  end
70
70
 
71
71
  def self.filtered_examples
72
72
  world.filtered_examples[self]
73
73
  end
74
74
 
75
+ def self.descendant_filtered_examples
76
+ filtered_examples + children.collect{|c| c.descendant_filtered_examples}
77
+ end
78
+
75
79
  def self.metadata
76
80
  @metadata
77
81
  end
@@ -111,8 +115,8 @@ module RSpec
111
115
  @children ||= []
112
116
  end
113
117
 
114
- def self.descendents
115
- [self] + children.collect {|c| c.descendents}.flatten
118
+ def self.descendants
119
+ [self] + children.collect {|c| c.descendants}.flatten
116
120
  end
117
121
 
118
122
  def self.ancestors
@@ -132,14 +136,12 @@ module RSpec
132
136
  end
133
137
 
134
138
  def self.eval_before_alls(running_example)
135
- return if filtered_examples.empty?
139
+ return if descendant_filtered_examples.empty?
136
140
  superclass.before_all_ivars.each { |ivar, val| running_example.instance_variable_set(ivar, val) }
137
141
  world.run_hook(:before, :all, self, running_example)
138
142
 
139
- ancestors.reverse.each do |ancestor|
140
- until ancestor.before_alls.empty?
141
- running_example.instance_eval &ancestor.before_alls.shift
142
- end
143
+ until before_alls.empty?
144
+ running_example.instance_eval &before_alls.shift
143
145
  end
144
146
  running_example.instance_variables.each { |ivar| before_all_ivars[ivar] = running_example.instance_variable_get(ivar) }
145
147
  end
@@ -155,7 +157,7 @@ module RSpec
155
157
  end
156
158
 
157
159
  def self.eval_after_alls(running_example)
158
- return if filtered_examples.empty?
160
+ return if descendant_filtered_examples.empty?
159
161
  before_all_ivars.each { |ivar, val| running_example.instance_variable_set(ivar, val) }
160
162
  ancestors.each do |ancestor|
161
163
  until ancestor.after_alls.empty?
@@ -171,8 +173,8 @@ module RSpec
171
173
  begin
172
174
  eval_before_alls(example_group_instance)
173
175
  result_for_this_group = run_examples(example_group_instance, reporter)
174
- results_for_descendents = children.map {|child| child.run(reporter)}
175
- result_for_this_group && (children.empty? ? true : results_for_descendents)
176
+ results_for_descendants = children.map {|child| child.run(reporter)}
177
+ result_for_this_group && (children.empty? ? true : results_for_descendants)
176
178
  ensure
177
179
  eval_after_alls(example_group_instance)
178
180
  end
@@ -42,6 +42,7 @@ module RSpec
42
42
  end
43
43
 
44
44
  def around(type=:each, &block)
45
+ RSpec::deprecate("around", "before and after")
45
46
  around_blocks[type] << block
46
47
  end
47
48
  end
@@ -9,6 +9,10 @@ module RSpec::Core
9
9
  end
10
10
 
11
11
  def parse!(args)
12
+ if args.include?("--formatter")
13
+ args[args.index("--formatter")] = "--format"
14
+ RSpec.deprecate("the --formatter option", "-f or --format")
15
+ end
12
16
  options = {}
13
17
  parser(options).parse!(args)
14
18
  options
@@ -37,9 +41,10 @@ module RSpec::Core
37
41
  options[:full_description] = /#{o}/
38
42
  end
39
43
 
40
- parser.on('-f', '--formatter FORMATTER', 'Choose a formatter',
44
+ parser.on('-f', '--format FORMATTER', 'Choose a formatter',
41
45
  ' [p]rogress (default - dots)',
42
- ' [d]ocumentation (group and example names)') do |o|
46
+ ' [d]ocumentation (group and example names)',
47
+ ' custom formatter class name') do |o|
43
48
  options[:formatter] = o
44
49
  end
45
50
 
@@ -57,7 +62,7 @@ module RSpec::Core
57
62
  options[:line_number] = o
58
63
  end
59
64
 
60
- parser.on('-o', '--options PATH', 'Read configuration options from a file path. (Defaults to spec/spec.parser)') do |o|
65
+ parser.on('-o', '--options PATH', 'Read configuration options from a file path. (Defaults to .rspec)') do |o|
61
66
  options[:options_file] = o || local_options_file
62
67
  end
63
68
 
@@ -65,6 +70,11 @@ module RSpec::Core
65
70
  options[:profile_examples] = o
66
71
  end
67
72
 
73
+ parser.on('-r', '--require PATH', 'Require a file') do |path|
74
+ options[:requires] ||= []
75
+ options[:requires] << path
76
+ end
77
+
68
78
  parser.on('-v', '--version', 'Show version') do
69
79
  puts RSpec::Core::Version::STRING
70
80
  exit
@@ -37,7 +37,7 @@ module RSpec
37
37
  end
38
38
 
39
39
  def example_count
40
- example_groups.collect {|g| g.descendents}.flatten.inject(0) { |sum, g| sum += g.filtered_examples.size }
40
+ example_groups.collect {|g| g.descendants}.flatten.inject(0) { |sum, g| sum += g.filtered_examples.size }
41
41
  end
42
42
 
43
43
  def apply_inclusion_filters(examples, conditions={})
@@ -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.11"
8
+ s.version = "2.0.0.beta.12"
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-06-06}
12
+ s.date = %q{2010-06-14}
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"]
@@ -39,7 +39,6 @@ Gem::Specification.new do |s|
39
39
  "features/example_groups/nested_groups.feature",
40
40
  "features/filtering/inclusion_filters.feature",
41
41
  "features/formatters/custom_formatter.feature",
42
- "features/hooks/around_hook.feature",
43
42
  "features/hooks/before_and_after_hooks.feature",
44
43
  "features/hooks/described_class.feature",
45
44
  "features/hooks/halt.feature",
@@ -107,9 +106,11 @@ Gem::Specification.new do |s|
107
106
  "spec/rspec/core/formatters/documentation_formatter_spec.rb",
108
107
  "spec/rspec/core/formatters/helpers_spec.rb",
109
108
  "spec/rspec/core/formatters/progress_formatter_spec.rb",
109
+ "spec/rspec/core/hooks_spec.rb",
110
110
  "spec/rspec/core/kernel_extensions_spec.rb",
111
111
  "spec/rspec/core/let_spec.rb",
112
112
  "spec/rspec/core/metadata_spec.rb",
113
+ "spec/rspec/core/option_parser_spec.rb",
113
114
  "spec/rspec/core/pending_example_spec.rb",
114
115
  "spec/rspec/core/resources/a_bar.rb",
115
116
  "spec/rspec/core/resources/a_foo.rb",
@@ -130,11 +131,7 @@ Gem::Specification.new do |s|
130
131
  s.homepage = %q{http://github.com/rspec/core}
131
132
  s.post_install_message = %q{**************************************************
132
133
 
133
- Thank you for installing rspec-core-2.0.0.beta.11
134
-
135
- This is beta software. If you are looking
136
- for a supported production release, please
137
- "gem install rspec" (without --pre).
134
+ Thank you for installing rspec-core-2.0.0.beta.12
138
135
 
139
136
  **************************************************
140
137
  }
@@ -142,7 +139,7 @@ Gem::Specification.new do |s|
142
139
  s.require_paths = ["lib"]
143
140
  s.rubyforge_project = %q{rspec}
144
141
  s.rubygems_version = %q{1.3.6}
145
- s.summary = %q{rspec-core-2.0.0.beta.11}
142
+ s.summary = %q{rspec-core-2.0.0.beta.12}
146
143
  s.test_files = [
147
144
  "spec/autotest/failed_results_re_spec.rb",
148
145
  "spec/autotest/rspec_spec.rb",
@@ -157,9 +154,11 @@ Gem::Specification.new do |s|
157
154
  "spec/rspec/core/formatters/documentation_formatter_spec.rb",
158
155
  "spec/rspec/core/formatters/helpers_spec.rb",
159
156
  "spec/rspec/core/formatters/progress_formatter_spec.rb",
157
+ "spec/rspec/core/hooks_spec.rb",
160
158
  "spec/rspec/core/kernel_extensions_spec.rb",
161
159
  "spec/rspec/core/let_spec.rb",
162
160
  "spec/rspec/core/metadata_spec.rb",
161
+ "spec/rspec/core/option_parser_spec.rb",
163
162
  "spec/rspec/core/pending_example_spec.rb",
164
163
  "spec/rspec/core/resources/a_bar.rb",
165
164
  "spec/rspec/core/resources/a_foo.rb",
@@ -182,19 +181,19 @@ Gem::Specification.new do |s|
182
181
  s.specification_version = 3
183
182
 
184
183
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
185
- s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.11"])
186
- s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.11"])
184
+ s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.12"])
185
+ s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.12"])
187
186
  s.add_development_dependency(%q<cucumber>, [">= 0.5.3"])
188
187
  s.add_development_dependency(%q<autotest>, [">= 4.2.9"])
189
188
  else
190
- s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.11"])
191
- s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.11"])
189
+ s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.12"])
190
+ s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.12"])
192
191
  s.add_dependency(%q<cucumber>, [">= 0.5.3"])
193
192
  s.add_dependency(%q<autotest>, [">= 4.2.9"])
194
193
  end
195
194
  else
196
- s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.11"])
197
- s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.11"])
195
+ s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.12"])
196
+ s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.12"])
198
197
  s.add_dependency(%q<cucumber>, [">= 0.5.3"])
199
198
  s.add_dependency(%q<autotest>, [">= 4.2.9"])
200
199
  end
@@ -5,13 +5,25 @@ require 'ostruct'
5
5
  describe RSpec::Core::ConfigurationOptions do
6
6
 
7
7
  def config_options_object(*args)
8
- RSpec::Core::ConfigurationOptions.new(args)
8
+ coo = RSpec::Core::ConfigurationOptions.new(args)
9
+ coo.parse_options
10
+ coo
9
11
  end
10
12
 
11
13
  def options_from_args(*args)
12
14
  config_options_object(*args).options
13
15
  end
14
16
 
17
+ describe "#configure" do
18
+ it "sends libs before requires" do
19
+ opts = config_options_object(*%w[--require a/path -I a/lib])
20
+ config = double("config").as_null_object
21
+ config.should_receive(:libs=).ordered
22
+ config.should_receive(:requires=).ordered
23
+ opts.configure(config)
24
+ end
25
+ end
26
+
15
27
  describe 'color_enabled' do
16
28
  example "-c, --colour, or --color are parsed as true" do
17
29
  options_from_args('-c').should include(:color_enabled => true)
@@ -33,12 +45,25 @@ describe RSpec::Core::ConfigurationOptions do
33
45
  end
34
46
  end
35
47
 
36
- describe 'formatter' do
37
- example '-f or --formatter with an argument should parse' do
38
- options_from_args('--formatter', 'd').should include(:formatter => 'd')
48
+ describe '--require' do
49
+ example "--requires files" do
50
+ options_from_args('--require', 'a/path').should include(:requires => ['a/path'])
51
+ end
52
+ example "--require can be used more than once" do
53
+ options_from_args('--require', 'path/1', '--require', 'path/2').should include(:requires => ['path/1','path/2'])
54
+ end
55
+ end
56
+
57
+ describe 'format' do
58
+ example '-f or --format with an argument should parse' do
59
+ options_from_args('--format', 'd').should include(:formatter => 'd')
39
60
  options_from_args('-f', 'd').should include(:formatter => 'd')
40
61
  options_from_args('-fd').should include(:formatter => 'd')
41
62
  end
63
+
64
+ example "-f/--format can accept a class name" do
65
+ options_from_args('-fSome::Formatter::Class').should include(:formatter => 'Some::Formatter::Class')
66
+ end
42
67
  end
43
68
 
44
69
  describe 'profile_examples' do
@@ -155,8 +180,8 @@ describe RSpec::Core::ConfigurationOptions do
155
180
 
156
181
  context "--drb specified in ARGV" do
157
182
  it "renders all the original arguments except --drb" do
158
- config_options_object(*%w[ --drb --color --formatter s --line_number 1 --example pattern --profile --backtrace]).
159
- drb_argv.should eq(%w[ --color --profile --backtrace --formatter s --line_number 1 --example pattern ])
183
+ config_options_object(*%w[ --drb --color --format s --line_number 1 --example pattern --profile --backtrace]).
184
+ drb_argv.should eq(%w[ --color --profile --backtrace --format s --line_number 1 --example pattern ])
160
185
  end
161
186
  end
162
187
 
@@ -164,8 +189,8 @@ describe RSpec::Core::ConfigurationOptions do
164
189
  it "renders all the original arguments except --drb" do
165
190
  File.stub(:exist?) { true }
166
191
  File.stub(:readlines) { %w[ --drb --color ] }
167
- config_options_object(*%w[ --formatter s --line_number 1 --example pattern --profile --backtrace ]).
168
- drb_argv.should eq(%w[ --color --profile --backtrace --formatter s --line_number 1 --example pattern ])
192
+ config_options_object(*%w[ --format s --line_number 1 --example pattern --profile --backtrace ]).
193
+ drb_argv.should eq(%w[ --color --profile --backtrace --format s --line_number 1 --example pattern ])
169
194
  end
170
195
  end
171
196
 
@@ -173,8 +198,8 @@ describe RSpec::Core::ConfigurationOptions do
173
198
  it "renders all the original arguments except --drb" do
174
199
  File.stub(:exist?) { true }
175
200
  File.stub(:readlines) { %w[ --drb --color ] }
176
- config_options_object(*%w[ --drb --formatter s --line_number 1 --example pattern --profile --backtrace]).
177
- drb_argv.should eq(%w[ --color --profile --backtrace --formatter s --line_number 1 --example pattern ])
201
+ config_options_object(*%w[ --drb --format s --line_number 1 --example pattern --profile --backtrace]).
202
+ drb_argv.should eq(%w[ --color --profile --backtrace --format s --line_number 1 --example pattern ])
178
203
  end
179
204
  end
180
205
 
@@ -182,8 +207,8 @@ describe RSpec::Core::ConfigurationOptions do
182
207
  it "renders all the original arguments except --drb and --options" do
183
208
  File.stub(:exist?) { true }
184
209
  File.stub(:readlines) { %w[ --drb --color ] }
185
- config_options_object(*%w[ --drb --formatter s --line_number 1 --example pattern --profile --backtrace]).
186
- drb_argv.should eq(%w[ --color --profile --backtrace --formatter s --line_number 1 --example pattern ])
210
+ config_options_object(*%w[ --drb --format s --line_number 1 --example pattern --profile --backtrace]).
211
+ drb_argv.should eq(%w[ --color --profile --backtrace --format s --line_number 1 --example pattern ])
187
212
  end
188
213
  end
189
214
  end
@@ -193,19 +218,21 @@ describe RSpec::Core::ConfigurationOptions do
193
218
 
194
219
  it "loads automatically" do
195
220
  File.stub(:exist?) { true }
196
- File.stub(:readlines) { ["--formatter", "doc"] }
221
+ File.stub(:readlines) { ["--format", "doc"] }
197
222
 
198
- cli_options = RSpec::Core::ConfigurationOptions.new([])
199
- cli_options.configure(config)
223
+ config_options = RSpec::Core::ConfigurationOptions.new([])
224
+ config_options.parse_options
225
+ config_options.configure(config)
200
226
  config.formatter.should == 'doc'
201
227
  end
202
228
 
203
229
  it "allows options on one line" do
204
230
  File.stub(:exist?) { true }
205
- File.stub(:readlines) { ["--formatter doc"] }
231
+ File.stub(:readlines) { ["--format doc"] }
206
232
 
207
- cli_options = RSpec::Core::ConfigurationOptions.new([])
208
- cli_options.configure(config)
233
+ config_options = RSpec::Core::ConfigurationOptions.new([])
234
+ config_options.parse_options
235
+ config_options.configure(config)
209
236
  config.formatter.should == 'doc'
210
237
  end
211
238
 
@@ -214,16 +241,17 @@ describe RSpec::Core::ConfigurationOptions do
214
241
  File.stub(:readlines) do |path|
215
242
  case path
216
243
  when ".rspec"
217
- ["--formatter", "documentation"]
244
+ ["--format", "documentation"]
218
245
  when /\.rspec/
219
246
  ["--line", "37"]
220
247
  else
221
248
  raise "Unexpected path: #{path}"
222
249
  end
223
250
  end
224
- cli_options = RSpec::Core::ConfigurationOptions.new(["--no-color"])
251
+ config_options = RSpec::Core::ConfigurationOptions.new(["--no-color"])
252
+ config_options.parse_options
225
253
 
226
- cli_options.configure(config)
254
+ config_options.configure(config)
227
255
 
228
256
  config.formatter.should == "documentation"
229
257
  config.line_number.should == "37"
@@ -235,28 +263,51 @@ describe RSpec::Core::ConfigurationOptions do
235
263
  File.stub(:readlines) do |path|
236
264
  case path
237
265
  when ".rspec"
238
- ["--formatter", "local"]
266
+ ["--format", "local"]
239
267
  when /\.rspec/
240
- ["--formatter", "global"]
268
+ ["--format", "global"]
241
269
  else
242
270
  raise "Unexpected path: #{path}"
243
271
  end
244
272
  end
245
- cli_options = RSpec::Core::ConfigurationOptions.new([])
273
+ config_options = RSpec::Core::ConfigurationOptions.new([])
274
+ config_options.parse_options
246
275
 
247
- cli_options.configure(config)
276
+ config_options.configure(config)
248
277
 
249
278
  config.formatter.should == "local"
250
279
  end
251
280
 
252
281
  it "prefers CLI options over file options" do
253
- config_options = RSpec::Core::ConfigurationOptions.new(['--formatter', 'progress'])
282
+ config_options = RSpec::Core::ConfigurationOptions.new(['--format', 'progress'])
254
283
  config_options.stub(:parse_options_file).and_return(:formatter => 'documentation')
255
284
 
285
+ config_options.parse_options
256
286
  config_options.configure(config)
257
287
 
258
288
  config.formatter.should == 'progress'
259
289
  end
290
+
291
+ context "with SPEC_OPTS" do
292
+ before do
293
+ @orig_spec_opts = ENV["SPEC_OPTS"]
294
+ end
295
+
296
+ after do
297
+ ENV["SPEC_OPTS"] = @orig_spec_opts
298
+ end
299
+
300
+ it "prefers SPEC_OPTS options over file options" do
301
+ config = OpenStruct.new
302
+ ENV["SPEC_OPTS"] = "--format documentation"
303
+ config_options = RSpec::Core::ConfigurationOptions.new(['--format', 'progress'])
304
+
305
+ config_options.parse_options
306
+ config_options.configure(config)
307
+
308
+ config.formatter.should == 'documentation'
309
+ end
310
+ end
260
311
  end
261
312
  end
262
313
 
@@ -181,6 +181,55 @@ module RSpec::Core
181
181
  config.run_all_when_everything_filtered?.should == true
182
182
  end
183
183
  end
184
+
185
+ describe 'color_enabled=' do
186
+ context "given true" do
187
+ context "on windows" do
188
+ before do
189
+ @original_host = Config::CONFIG['host_os']
190
+ Config::CONFIG['host_os'] = 'mswin'
191
+ config.stub(:require)
192
+ config.stub(:warn)
193
+ end
194
+
195
+ after do
196
+ Config::CONFIG['host_os'] = @original_host
197
+ end
198
+
199
+ context "with win32console available" do
200
+ it "requires win32console" do
201
+ config.should_receive(:require).
202
+ with("Win32/Console/ANSI")
203
+ config.color_enabled = true
204
+ end
205
+
206
+ it "leaves output stream intact" do
207
+ config.output_stream = $stdout
208
+ config.stub(:require) do |what|
209
+ config.output_stream = 'foo' if what =~ /Win32/
210
+ end
211
+ config.color_enabled = true
212
+ config.output_stream.should eq($stdout)
213
+ end
214
+ end
215
+
216
+ context "with win32console NOT available" do
217
+ it "warns to install win32console" do
218
+ config.stub(:require) { raise LoadError }
219
+ config.should_receive(:warn).
220
+ with /You must 'gem install win32console'/
221
+ config.color_enabled = true
222
+ end
223
+
224
+ it "sets color_enabled to false" do
225
+ config.stub(:require) { raise LoadError }
226
+ config.color_enabled = true
227
+ config.color_enabled.should be_false
228
+ end
229
+ end
230
+ end
231
+ end
232
+ end
184
233
 
185
234
  describe 'formatter=' do
186
235
 
@@ -190,6 +239,12 @@ module RSpec::Core
190
239
  config.formatter = 'documentation'
191
240
  config.formatter.should be_an_instance_of(Formatters::DocumentationFormatter)
192
241
  end
242
+
243
+ it "sets a formatter based on its class" do
244
+ formatter_class = Class.new(Formatters::BaseTextFormatter)
245
+ config.formatter = formatter_class
246
+ config.formatter.should be_an_instance_of(formatter_class)
247
+ end
193
248
 
194
249
  it "raises ArgumentError if formatter is unknown" do
195
250
  lambda { config.formatter = :progresss }.should raise_error(ArgumentError)
@@ -197,6 +252,20 @@ module RSpec::Core
197
252
 
198
253
  end
199
254
 
255
+ describe "#filter_run" do
256
+ it "sets the filter" do
257
+ config.filter_run :focus => true
258
+ config.filter.should eq({:focus => true})
259
+ end
260
+ end
261
+
262
+ describe "#filter_run_excluding" do
263
+ it "sets the filter" do
264
+ config.filter_run_excluding :slow => true
265
+ config.exclusion_filter.should eq({:slow => true})
266
+ end
267
+ end
268
+
200
269
  describe "line_number=" do
201
270
  it "sets the line number" do
202
271
  config.line_number = '37'
@@ -260,6 +329,13 @@ module RSpec::Core
260
329
  end
261
330
  end
262
331
 
332
+ describe "requires=" do
333
+ it "requires paths" do
334
+ config.should_receive(:require).with("a/path")
335
+ config.requires = ["a/path"]
336
+ end
337
+ end
338
+
263
339
  describe "#add_setting" do
264
340
  describe "with no modifiers" do
265
341
  context "with no additional options" do
@@ -29,15 +29,15 @@ module RSpec::Core
29
29
  examples_run.should have(1).example
30
30
  end
31
31
 
32
- describe "descendents" do
33
- it "returns self + all descendents" do
32
+ describe "descendants" do
33
+ it "returns self + all descendants" do
34
34
  group = ExampleGroup.describe("parent") do
35
35
  describe("child") do
36
36
  describe("grandchild 1") {}
37
37
  describe("grandchild 2") {}
38
38
  end
39
39
  end
40
- group.descendents.size.should == 4
40
+ group.descendants.size.should == 4
41
41
  end
42
42
  end
43
43
  end
@@ -249,12 +249,6 @@ module RSpec::Core
249
249
  end.to_not raise_error
250
250
  end
251
251
 
252
- it "exposes the around each blocks at after_alls" do
253
- group = ExampleGroup.describe
254
- group.around(:each) { 'foo' }
255
- group.should have(1).around_eachs
256
- end
257
-
258
252
  it "treats an error in before(:each) as a failure" do
259
253
  group = ExampleGroup.describe
260
254
  group.before(:each) { raise "error in before each" }
@@ -426,22 +420,6 @@ module RSpec::Core
426
420
  end
427
421
  end
428
422
 
429
- describe "#around" do
430
- around(:each) do |example|
431
- SelfObserver.new
432
- example.run
433
- SelfObserver.cache.clear
434
- end
435
-
436
- it "has 1 SelfObserver (1)" do
437
- SelfObserver.cache.length.should == 1
438
- end
439
-
440
- it "has 1 SelfObserver (2)" do
441
- SelfObserver.cache.length.should == 1
442
- end
443
- end
444
-
445
423
  describe "#its" do
446
424
  its(:class) { should == RSpec::Core::ExampleGroup }
447
425
  it "does not interfere between examples" do
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Core
4
+ describe Hooks do
5
+ describe "#around" do
6
+ it "is deprecated" do
7
+ RSpec.should_receive(:deprecate)
8
+ subject = Object.new.extend(Hooks)
9
+ subject.around(:each) {}
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Core
4
+ describe OptionParser do
5
+ before do
6
+ RSpec.stub(:deprecate)
7
+ end
8
+
9
+ it "deprecates the --formatter option" do
10
+ RSpec.should_receive(:deprecate)
11
+ Parser.parse!(%w[--formatter doc])
12
+ end
13
+
14
+ it "converts --formatter to --format" do
15
+ options = Parser.parse!(%w[--formatter doc])
16
+ options.should eq( {:formatter=>"doc"} )
17
+ end
18
+ end
19
+ end
@@ -24,6 +24,7 @@ module RSpec::Core
24
24
  @err = @out = StringIO.new
25
25
 
26
26
  @options = RSpec::Core::ConfigurationOptions.new(%w[--drb --drb-port 8181 --color])
27
+ @options.parse_options
27
28
  RSpec::Core::ConfigurationOptions.stub(:new) { @options }
28
29
 
29
30
  @drb_proxy = double(RSpec::Core::DRbCommandLine, :run => true)
@@ -52,9 +52,11 @@ Spork.prefork do
52
52
 
53
53
  RSpec.configure do |c|
54
54
  c.color_enabled = !in_editor?
55
- c.exclusion_filter = { :ruby => lambda {|version|
55
+ c.filter_run :focus => true
56
+ c.run_all_when_everything_filtered = true
57
+ c.filter_run_excluding :ruby => lambda {|version|
56
58
  !(RUBY_VERSION.to_s =~ /^#{version.to_s}/)
57
- }}
59
+ }
58
60
  c.before(:each) do
59
61
  @real_world = RSpec.world
60
62
  RSpec.instance_variable_set(:@world, RSpec::Core::World.new)
metadata CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
7
7
  - 0
8
8
  - 0
9
9
  - beta
10
- - 11
11
- version: 2.0.0.beta.11
10
+ - 12
11
+ version: 2.0.0.beta.12
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-06-06 00:00:00 -04:00
20
+ date: 2010-06-14 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
- - 11
36
- version: 2.0.0.beta.11
35
+ - 12
36
+ version: 2.0.0.beta.12
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
- - 11
52
- version: 2.0.0.beta.11
51
+ - 12
52
+ version: 2.0.0.beta.12
53
53
  type: :development
54
54
  version_requirements: *id002
55
55
  - !ruby/object:Gem::Dependency
@@ -112,7 +112,6 @@ files:
112
112
  - features/example_groups/nested_groups.feature
113
113
  - features/filtering/inclusion_filters.feature
114
114
  - features/formatters/custom_formatter.feature
115
- - features/hooks/around_hook.feature
116
115
  - features/hooks/before_and_after_hooks.feature
117
116
  - features/hooks/described_class.feature
118
117
  - features/hooks/halt.feature
@@ -180,9 +179,11 @@ files:
180
179
  - spec/rspec/core/formatters/documentation_formatter_spec.rb
181
180
  - spec/rspec/core/formatters/helpers_spec.rb
182
181
  - spec/rspec/core/formatters/progress_formatter_spec.rb
182
+ - spec/rspec/core/hooks_spec.rb
183
183
  - spec/rspec/core/kernel_extensions_spec.rb
184
184
  - spec/rspec/core/let_spec.rb
185
185
  - spec/rspec/core/metadata_spec.rb
186
+ - spec/rspec/core/option_parser_spec.rb
186
187
  - spec/rspec/core/pending_example_spec.rb
187
188
  - spec/rspec/core/resources/a_bar.rb
188
189
  - spec/rspec/core/resources/a_foo.rb
@@ -206,11 +207,7 @@ licenses: []
206
207
  post_install_message: |
207
208
  **************************************************
208
209
 
209
- Thank you for installing rspec-core-2.0.0.beta.11
210
-
211
- This is beta software. If you are looking
212
- for a supported production release, please
213
- "gem install rspec" (without --pre).
210
+ Thank you for installing rspec-core-2.0.0.beta.12
214
211
 
215
212
  **************************************************
216
213
 
@@ -240,7 +237,7 @@ rubyforge_project: rspec
240
237
  rubygems_version: 1.3.6
241
238
  signing_key:
242
239
  specification_version: 3
243
- summary: rspec-core-2.0.0.beta.11
240
+ summary: rspec-core-2.0.0.beta.12
244
241
  test_files:
245
242
  - spec/autotest/failed_results_re_spec.rb
246
243
  - spec/autotest/rspec_spec.rb
@@ -255,9 +252,11 @@ test_files:
255
252
  - spec/rspec/core/formatters/documentation_formatter_spec.rb
256
253
  - spec/rspec/core/formatters/helpers_spec.rb
257
254
  - spec/rspec/core/formatters/progress_formatter_spec.rb
255
+ - spec/rspec/core/hooks_spec.rb
258
256
  - spec/rspec/core/kernel_extensions_spec.rb
259
257
  - spec/rspec/core/let_spec.rb
260
258
  - spec/rspec/core/metadata_spec.rb
259
+ - spec/rspec/core/option_parser_spec.rb
261
260
  - spec/rspec/core/pending_example_spec.rb
262
261
  - spec/rspec/core/resources/a_bar.rb
263
262
  - spec/rspec/core/resources/a_foo.rb
@@ -1,36 +0,0 @@
1
- Feature: around hook
2
-
3
- Scenario: define around(:each) block in example group
4
- Given a file named "around_each_in_example_group_spec.rb" with:
5
- """
6
- require 'rspec/expectations'
7
-
8
- class Thing
9
- def self.cache
10
- @cache ||= []
11
- end
12
-
13
- def initialize
14
- self.class.cache << self
15
- end
16
- end
17
-
18
- describe Thing do
19
- around(:each) do |example|
20
- Thing.new
21
- example.run
22
- Thing.cache.clear
23
- end
24
-
25
- it "has 1 Thing (1)" do
26
- Thing.cache.length.should == 1
27
- end
28
-
29
- it "has 1 Thing (2)" do
30
- Thing.cache.length.should == 1
31
- end
32
- end
33
- """
34
- When I run "rspec ./around_each_in_example_group_spec.rb"
35
- Then the stderr should not contain "NoMethodError"
36
- Then I should see "2 examples, 0 failures"