rspec-core 2.3.1 → 2.4.0

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 (48) hide show
  1. data/History.markdown +22 -0
  2. data/Rakefile +2 -2
  3. data/features/command_line/README.md +6 -0
  4. data/features/command_line/configure.feature +16 -14
  5. data/features/command_line/example_name_option.feature +3 -3
  6. data/features/command_line/format_option.feature +73 -0
  7. data/features/command_line/line_number_appended_to_path.feature +1 -1
  8. data/features/command_line/line_number_option.feature +2 -2
  9. data/features/command_line/tag.feature +7 -7
  10. data/features/configuration/read_options_from_file.feature +29 -16
  11. data/features/hooks/before_and_after_hooks.feature +9 -14
  12. data/features/hooks/filtering.feature +174 -0
  13. data/features/step_definitions/additional_cli_steps.rb +4 -0
  14. data/features/subject/attribute_of_subject.feature +68 -18
  15. data/lib/rspec/core/command_line_configuration.rb +16 -16
  16. data/lib/rspec/core/configuration.rb +14 -15
  17. data/lib/rspec/core/configuration_options.rb +46 -22
  18. data/lib/rspec/core/example.rb +16 -6
  19. data/lib/rspec/core/example_group.rb +11 -11
  20. data/lib/rspec/core/formatters/base_text_formatter.rb +2 -1
  21. data/lib/rspec/core/hooks.rb +8 -8
  22. data/lib/rspec/core/option_parser.rb +13 -3
  23. data/lib/rspec/core/pending.rb +2 -0
  24. data/lib/rspec/core/rake_task.rb +1 -1
  25. data/lib/rspec/core/subject.rb +2 -0
  26. data/lib/rspec/core/version.rb +1 -1
  27. data/lib/rspec/core/world.rb +2 -2
  28. data/spec/rspec/core/configuration_options_spec.rb +147 -151
  29. data/spec/rspec/core/configuration_spec.rb +67 -19
  30. data/spec/rspec/core/example_spec.rb +12 -10
  31. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +25 -1
  32. data/spec/rspec/core/formatters/html_formatted-1.8.6.html +5 -5
  33. data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +37 -24
  34. data/spec/rspec/core/formatters/html_formatted-1.8.7.html +5 -5
  35. data/spec/rspec/core/formatters/html_formatted-1.9.1.html +5 -5
  36. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +5 -5
  37. data/spec/rspec/core/formatters/html_formatter_spec.rb +7 -7
  38. data/spec/rspec/core/formatters/text_mate_formatted-1.8.6.html +19 -19
  39. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +51 -33
  40. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +19 -19
  41. data/spec/rspec/core/formatters/text_mate_formatted-1.9.1.html +26 -26
  42. data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +26 -26
  43. data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +7 -7
  44. data/spec/rspec/core/hooks_filtering_spec.rb +54 -0
  45. data/spec/rspec/core/option_parser_spec.rb +53 -17
  46. data/spec/rspec/core/rake_task_spec.rb +21 -0
  47. data/spec/spec_helper.rb +1 -1
  48. metadata +14 -8
@@ -1,5 +1,27 @@
1
1
  ## rspec-core release history (incomplete)
2
2
 
3
+ ### 2.4.0 / 2011-01-02
4
+
5
+ [full changelog](http://github.com/rspec/rspec-core/compare/v2.3.1...v2.4.0)
6
+
7
+ * Enhancements
8
+ * start the debugger on -d so the stack trace is visible when it stops
9
+ (Clifford Heath)
10
+ * apply hook filtering to examples as well as groups (Myron Marston)
11
+ * support multiple formatters, each with their own output
12
+ * show exception classes in failure messages unless they come from RSpec
13
+ matchers or message expectations
14
+ * before(:all) { pending } sets all examples to pending
15
+
16
+ * Bug fixes
17
+ * fix bug due to change in behavior of reject in Ruby 1.9.3-dev (Shota Fukumori)
18
+ * fix bug when running in jruby: be explicit about passing block to super
19
+ (John Firebaugh)
20
+ * rake task doesn't choke on paths with quotes (Janmejay Singh)
21
+ * restore --options option from rspec-1
22
+ * require 'ostruct' to fix bug with its([key]) (Kim Burgestrand)
23
+ * --configure option generates .rspec file instead of autotest/discover.rb
24
+
3
25
  ### 2.3.1 / 2010-12-16
4
26
 
5
27
  [full changelog](http://github.com/rspec/rspec-core/compare/v2.3.0...v2.3.1)
data/Rakefile CHANGED
@@ -57,10 +57,10 @@ task :clobber do
57
57
  rm_rf 'coverage'
58
58
  end
59
59
 
60
- desc "Push cukes to relishapp using the relish-client-gem"
60
+ desc "Push docs/cukes to relishapp using the relish-client-gem"
61
61
  task :relish, :version do |t, args|
62
62
  raise "rake relish[VERSION]" unless args[:version]
63
- sh "relish push --organization rspec --project rspec-core -v #{args[:version]}"
63
+ sh "relish push rspec/rspec-core:#{args[:version]}"
64
64
  end
65
65
 
66
66
  Rake::RDocTask.new do |rdoc|
@@ -0,0 +1,6 @@
1
+ The `rspec` command comes with several options you can use to customize RSpec's
2
+ behavior, including output formats, filtering examples, etc.
3
+
4
+ For a full list of options, run the `rspec` command with the `--help` flag:
5
+
6
+ $ rspec --help
@@ -1,20 +1,22 @@
1
- Feature: configure
1
+ Feature: --configure option
2
2
 
3
3
  Use the --configure option on the command line to generate configuration
4
4
  files.
5
5
 
6
- The only supported argument, so far, is "autotest", which creates an
7
- autotest/discover.rb file in your project root directory.
6
+ The only supported argument, so far, is "autotest", which creates a .rspec
7
+ file in your project root directory. When autotest sees this file, it knows
8
+ to load RSpec's Autotest subclass.
8
9
 
9
- Background:
10
- Given a directory named "rspec_project"
10
+ Scenario: generate .rspec file for autotest
11
+ When I run "rspec --configure autotest"
12
+ Then the following files should exist:
13
+ | .rspec |
14
+ And the stdout should contain ".rspec file did not exist, so it was created."
11
15
 
12
- Scenario: generate autotest directory and discover file
13
- When I cd to "rspec_project"
14
- And I run "rspec --configure autotest"
15
- Then the following directories should exist:
16
- | autotest |
17
- And the following files should exist:
18
- | autotest/discover.rb |
19
- And the file "autotest/discover.rb" should contain "Autotest.add_discovery"
20
- And the stdout should contain "autotest/discover.rb has been added"
16
+ Scenario: .rspec file already exists
17
+ Given a file named ".rspec" with:
18
+ """
19
+ --color
20
+ """
21
+ When I run "rspec --configure autotest"
22
+ Then the stdout should contain ".rspec file already exists, so nothing was changed."
@@ -1,13 +1,13 @@
1
- Feature: example name option
1
+ Feature: --example option
2
2
 
3
- Use the --example (or -e) option to filter the examples to be run by name.
3
+ Use the --example (or -e) option to filter examples by name.
4
4
 
5
5
  The argument is compiled to a Ruby Regexp, and matched against the full
6
6
  description of the example, which is the concatenation of descriptions of the
7
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
- similar names, all the example in a uniquely named group, etc, etc.
10
+ similar names, all the examples in a uniquely named group, etc, etc.
11
11
 
12
12
  Background:
13
13
  Given a file named "first_spec.rb" with:
@@ -0,0 +1,73 @@
1
+ Feature: --format option
2
+
3
+ Use the --format option to tell RSpec how to format the output.
4
+
5
+ RSpec ships with a few formatters built in. By default, it uses the progress
6
+ formatter, which generates output like this:
7
+
8
+ ....F.....*.....
9
+
10
+ A '.' represents a passing example, 'F' is failing, and '*' is pending.
11
+
12
+ To see the documentation strings passed to each describe(), context(), and it()
13
+ method, use the documentation formatter:
14
+
15
+ $ rspec spec --format documentation
16
+
17
+ You can also specify an output target (STDOUT by default) by appending a
18
+ filename to the argument:
19
+
20
+ $ rspec spec --format documentation:rspec.output.txt
21
+
22
+ Background:
23
+ Given a file named "example_spec.rb" with:
24
+ """
25
+ describe "something" do
26
+ it "does something that passes" do
27
+ 5.should eq(5)
28
+ end
29
+
30
+ it "does something that fails" do
31
+ 5.should eq(4)
32
+ end
33
+
34
+ it "does something that is pending", :pending => true do
35
+ 5.should be > 3
36
+ end
37
+ end
38
+ """
39
+
40
+ Scenario: progress bar format (default)
41
+ When I run "rspec example_spec.rb"
42
+ Then the output should contain ".F*"
43
+
44
+ Scenario: documentation format
45
+ When I run "rspec example_spec.rb --format documentation"
46
+ Then the output should contain:
47
+ """
48
+ something
49
+ does something that passes
50
+ does something that fails (FAILED - 1)
51
+ does something that is pending (PENDING: Not Yet Implemented)
52
+ """
53
+
54
+ Scenario: documentation format saved to a file
55
+ When I run "rspec example_spec.rb --format documentation --out rspec.txt"
56
+ Then the file "rspec.txt" should contain:
57
+ """
58
+ something
59
+ does something that passes
60
+ does something that fails (FAILED - 1)
61
+ does something that is pending (PENDING: Not Yet Implemented)
62
+ """
63
+
64
+ Scenario: multiple formats
65
+ When I run "rspec example_spec.rb --format progress --format documentation --out rspec.txt"
66
+ Then the output should contain ".F*"
67
+ And the file "rspec.txt" should contain:
68
+ """
69
+ something
70
+ does something that passes
71
+ does something that fails (FAILED - 1)
72
+ does something that is pending (PENDING: Not Yet Implemented)
73
+ """
@@ -2,7 +2,7 @@ Feature: line number appended to file path
2
2
 
3
3
  To run a single example or group, you can append the line number to the path, e.g.
4
4
 
5
- rspec path/to/example_spec.rb:37
5
+ rspec path/to/example_spec.rb:37
6
6
 
7
7
  Background:
8
8
  Given a file named "example_spec.rb" with:
@@ -1,8 +1,8 @@
1
- Feature: line number option
1
+ Feature: --line option
2
2
 
3
3
  To run a single example or group, you can use the --line option:
4
4
 
5
- rspec path/to/example_spec.rb --line 37
5
+ rspec path/to/example_spec.rb --line 37
6
6
 
7
7
  Scenario: standard examples
8
8
  Given a file named "example_spec.rb" with:
@@ -1,18 +1,18 @@
1
- Feature: tag option
1
+ Feature: --tag option
2
2
 
3
- Use the --tag (or -t) option to filter the examples to be run by tag.
3
+ Use the --tag (or -t) option to filter the examples by tags.
4
4
 
5
5
  The tag can be a simple name or a name:value pair. In the first case,
6
6
  examples with :name => true will be filtered. In the second case, examples
7
- with :name => value will be filtered, where value is always a string.
8
- In both cases, name is converted to a symbol.
7
+ with :name => value will be filtered, where value is always a string. In
8
+ both cases, name is converted to a symbol.
9
9
 
10
- Tags can also be used to exclude examples by adding a ~ before the tag.
11
- For example ~tag will exclude all examples marked with :tag => true and
10
+ Tags can also be used to exclude examples by adding a ~ before the tag. For
11
+ example ~tag will exclude all examples marked with :tag => true and
12
12
  ~tag:value will exclude all examples marked with :tag => value.
13
13
 
14
14
  To be compatible with the Cucumber syntax, tags can optionally start with
15
- a @, that will be ignored.
15
+ an @ symbol, which will be ignored.
16
16
 
17
17
  Background:
18
18
  Given a file named "tagged_spec.rb" with:
@@ -8,7 +8,7 @@ Feature: read command line configuration options from files
8
8
 
9
9
  Options declared in the local file override those in the global file, while
10
10
  those declared in RSpec.configure will override any ".rspec" file.
11
-
11
+
12
12
  Scenario: color set in .rspec
13
13
  Given a file named ".rspec" with:
14
14
  """
@@ -33,30 +33,43 @@ Feature: read command line configuration options from files
33
33
  When I run "rspec ./spec/example_spec.rb"
34
34
  Then the output should contain "1 example, 0 failures"
35
35
 
36
- Scenario: formatter set in RSpec.configure overrides .rspec
37
- Given a file named ".rspec" with:
36
+ Scenario: custom options file
37
+ Given a file named "my.options" with:
38
+ """
39
+ --format documentation
40
+ """
41
+ And a file named "spec/example_spec.rb" with:
42
+ """
43
+ describe "formatter set in custom options file" do
44
+ it "sets formatter" do
45
+ RSpec.configuration.formatters.first.
46
+ should be_a(RSpec::Core::Formatters::DocumentationFormatter)
47
+ end
48
+ end
38
49
  """
39
- --format progress
50
+ When I run "rspec spec/example_spec.rb --options my.options"
51
+ Then the output should contain "1 example, 0 failures"
52
+
53
+ Scenario: RSpec ignores ./.rspec when custom options file is used
54
+ Given a file named "my.options" with:
40
55
  """
41
- And a file named "spec/spec_helper.rb" with:
56
+ --format documentation
42
57
  """
43
- RSpec.configure {|c| c.formatter = 'documentation'}
58
+ And a file named ".rspec" with:
59
+ """
60
+ --color
44
61
  """
45
62
  And a file named "spec/example_spec.rb" with:
46
63
  """
47
- require "spec_helper"
48
-
49
- describe "formatter" do
50
- context "when set with RSpec.configure and in spec.opts" do
51
- it "takes the value set in spec.opts" do
52
- RSpec.configuration.formatter.should be_an(RSpec::Core::Formatters::DocumentationFormatter)
53
- end
64
+ describe "custom options file" do
65
+ it "causes .rspec to be ignored" do
66
+ RSpec.configuration.color_enabled.should be_false
54
67
  end
55
68
  end
56
69
  """
57
- When I run "rspec ./spec/example_spec.rb"
70
+ When I run "rspec spec/example_spec.rb --options my.options"
58
71
  Then the output should contain "1 example, 0 failures"
59
-
72
+
60
73
  Scenario: using ERB in .rspec
61
74
  Given a file named ".rspec" with:
62
75
  """
@@ -66,7 +79,7 @@ Feature: read command line configuration options from files
66
79
  """
67
80
  describe "formatter" do
68
81
  it "is set to documentation" do
69
- RSpec.configuration.formatter.should be_an(RSpec::Core::Formatters::DocumentationFormatter)
82
+ RSpec.configuration.formatters.first.should be_an(RSpec::Core::Formatters::DocumentationFormatter)
70
83
  end
71
84
  end
72
85
  """
@@ -1,19 +1,16 @@
1
1
  Feature: before and after hooks
2
2
 
3
- As a developer using RSpec
4
- I want to execute arbitrary code before and after each example
5
- So that I can control the environment in which it is run
3
+ Use `before` and `after` hooks to execute arbitrary code before and/or
4
+ after the body of an example is run:
6
5
 
7
- This is supported by the before and after methods which each take a symbol
8
- indicating the scope, and a block of code to execute.
6
+ before(:each) # run before each example
7
+ before(:all) # run one time only, before all of the examples in a group
9
8
 
10
- before(:each) blocks are run before each example
11
- before(:all) blocks are run once before all of the examples in a group
9
+ after(:each) # run after each example
10
+ after(:all) # run one time only, after all of the examples in a group
12
11
 
13
- after(:each) blocks are run after each example
14
- after(:all) blocks are run once after all of the examples in a group
12
+ Before and after blocks are called in the following order:
15
13
 
16
- Before and after blocks are called in the following order:
17
14
  before suite
18
15
  before all
19
16
  before each
@@ -21,10 +18,8 @@ Feature: before and after hooks
21
18
  after all
22
19
  after suite
23
20
 
24
- Before and after blocks can be defined in the example groups to which they
25
- apply or in a configuration. When defined in a configuration, they can be
26
- applied to all groups or subsets of all groups defined by example group
27
- types.
21
+ `before` and `after` hooks can be defined directly in the example groups they
22
+ should run in, or in a global RSpec.configure block.
28
23
 
29
24
  Scenario: define before(:each) block
30
25
  Given a file named "before_each_spec.rb" with:
@@ -0,0 +1,174 @@
1
+ Feature: Global Hook Filtering
2
+
3
+ Before/After/Around hooks defined in the RSpec configuration block
4
+ can be filtered using metadata. Arbitrary metadata can be applied
5
+ to an example or example group, and used to make a hook only apply
6
+ to examples with the given metadata.
7
+
8
+ Scenario: Filter before(:each) hooks using arbitrary metadata
9
+ Given a file named "filter_before_each_hooks_spec.rb" with:
10
+ """
11
+ RSpec.configure do |config|
12
+ config.before(:each, :foo => :bar) { puts "In hook" }
13
+ end
14
+
15
+ describe "group 1" do
16
+ it("example 1") { }
17
+ it("example 2", :foo => :bar) { }
18
+ end
19
+
20
+ describe "group 2", :foo => :bar do
21
+ it("example 1") { }
22
+ it("example 2", :foo => :bar) { }
23
+ end
24
+ """
25
+ When I run "rspec filter_before_each_hooks_spec.rb --format documentation"
26
+ Then the output should contain "4 examples, 0 failures"
27
+ And the output should contain:
28
+ """
29
+ group 1
30
+ example 1
31
+ In hook
32
+ example 2
33
+
34
+ group 2
35
+ In hook
36
+ example 1
37
+ In hook
38
+ example 2
39
+ """
40
+
41
+ Scenario: Filter after(:each) hooks using arbitrary metadata
42
+ Given a file named "filter_after_each_hooks_spec.rb" with:
43
+ """
44
+ RSpec.configure do |config|
45
+ config.after(:each, :foo => :bar) { puts "In hook" }
46
+ end
47
+
48
+ describe "group 1" do
49
+ it("example 1") { }
50
+ it("example 2", :foo => :bar) { }
51
+ end
52
+
53
+ describe "group 2", :foo => :bar do
54
+ it("example 1") { }
55
+ it("example 2", :foo => :bar) { }
56
+ end
57
+ """
58
+ When I run "rspec filter_after_each_hooks_spec.rb --format documentation"
59
+ Then the output should contain "4 examples, 0 failures"
60
+ And the output should contain:
61
+ """
62
+ group 1
63
+ example 1
64
+ In hook
65
+ example 2
66
+
67
+ group 2
68
+ In hook
69
+ example 1
70
+ In hook
71
+ example 2
72
+ """
73
+
74
+ Scenario: Filter around(:each) hooks using arbitrary metadata
75
+ Given a file named "filter_around_each_hooks_spec.rb" with:
76
+ """
77
+ RSpec.configure do |config|
78
+ config.around(:each, :foo => :bar) do |example|
79
+ puts "Start hook"
80
+ example.run
81
+ puts "End hook"
82
+ end
83
+ end
84
+
85
+ describe "group 1" do
86
+ it("example 1") { }
87
+ it("example 2", :foo => :bar) { }
88
+ end
89
+
90
+ describe "group 2", :foo => :bar do
91
+ it("example 1") { }
92
+ it("example 2", :foo => :bar) { }
93
+ end
94
+ """
95
+ When I run "rspec filter_around_each_hooks_spec.rb --format documentation"
96
+ Then the output should contain "4 examples, 0 failures"
97
+ And the output should contain:
98
+ """
99
+ group 1
100
+ example 1
101
+ Start hook
102
+ End hook
103
+ example 2
104
+
105
+ group 2
106
+ Start hook
107
+ End hook
108
+ example 1
109
+ Start hook
110
+ End hook
111
+ example 2
112
+ """
113
+
114
+ Scenario: Filter before(:all) hooks using arbitrary metadata
115
+ Given a file named "filter_before_all_hooks_spec.rb" with:
116
+ """
117
+ RSpec.configure do |config|
118
+ config.before(:all, :foo => :bar) { puts "In hook" }
119
+ end
120
+
121
+ describe "group 1" do
122
+ it("example 1") { }
123
+ it("example 2") { }
124
+ end
125
+
126
+ describe "group 2", :foo => :bar do
127
+ it("example 1") { }
128
+ it("example 2") { }
129
+ end
130
+ """
131
+ When I run "rspec filter_before_all_hooks_spec.rb --format documentation"
132
+ Then the output should contain "4 examples, 0 failures"
133
+ And the output should contain:
134
+ """
135
+ group 1
136
+ example 1
137
+ example 2
138
+
139
+ group 2
140
+ In hook
141
+ example 1
142
+ example 2
143
+ """
144
+
145
+ Scenario: Filter after(:all) hooks using arbitrary metadata
146
+ Given a file named "filter_after_all_hooks_spec.rb" with:
147
+ """
148
+ RSpec.configure do |config|
149
+ config.after(:all, :foo => :bar) { puts "In hook" }
150
+ end
151
+
152
+ describe "group 1" do
153
+ it("example 1") { }
154
+ it("example 2") { }
155
+ end
156
+
157
+ describe "group 2", :foo => :bar do
158
+ it("example 1") { }
159
+ it("example 2") { }
160
+ end
161
+ """
162
+ When I run "rspec filter_after_all_hooks_spec.rb --format documentation"
163
+ Then the output should contain "4 examples, 0 failures"
164
+ And the output should contain:
165
+ """
166
+ group 1
167
+ example 1
168
+ example 2
169
+
170
+ group 2
171
+ example 1
172
+ example 2
173
+ In hook
174
+ """