rspec-core 2.5.2 → 2.6.0.rc2

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 (117) hide show
  1. data/.travis.yml +7 -0
  2. data/Gemfile +10 -13
  3. data/README.md +4 -1
  4. data/Rakefile +29 -12
  5. data/cucumber.yml +1 -1
  6. data/features/.nav +10 -4
  7. data/features/Autotest.md +31 -7
  8. data/features/Changelog.md +36 -6
  9. data/features/command_line/configure.feature +2 -2
  10. data/features/command_line/example_name_option.feature +10 -10
  11. data/features/command_line/exit_status.feature +4 -4
  12. data/features/command_line/format_option.feature +4 -4
  13. data/features/command_line/line_number_appended_to_path.feature +11 -11
  14. data/features/command_line/line_number_option.feature +2 -2
  15. data/features/command_line/rake_task.feature +3 -3
  16. data/features/command_line/tag.feature +26 -10
  17. data/features/configuration/alias_example_to.feature +48 -0
  18. data/features/configuration/custom_settings.feature +3 -3
  19. data/features/configuration/fail_fast.feature +3 -3
  20. data/features/configuration/read_options_from_file.feature +4 -4
  21. data/features/example_groups/basic_structure.feature +11 -15
  22. data/features/example_groups/shared_context.feature +74 -0
  23. data/features/example_groups/shared_example_group.feature +21 -17
  24. data/features/expectation_framework_integration/configure_expectation_framework.feature +15 -4
  25. data/features/filtering/exclusion_filters.feature +28 -4
  26. data/features/filtering/{implicit_filters.feature → if_and_unless.feature} +9 -7
  27. data/features/filtering/inclusion_filters.feature +26 -3
  28. data/features/filtering/run_all_when_everything_filtered.feature +1 -1
  29. data/features/formatters/custom_formatter.feature +1 -1
  30. data/features/formatters/text_formatter.feature +45 -0
  31. data/features/helper_methods/arbitrary_methods.feature +2 -2
  32. data/features/helper_methods/let.feature +2 -2
  33. data/features/helper_methods/modules.feature +149 -0
  34. data/features/hooks/around_hooks.feature +11 -11
  35. data/features/hooks/before_and_after_hooks.feature +15 -19
  36. data/features/hooks/filtering.feature +160 -124
  37. data/features/metadata/current_example.feature +17 -0
  38. data/features/metadata/described_class.feature +2 -2
  39. data/features/metadata/user_defined.feature +111 -0
  40. data/features/mock_framework_integration/use_any_framework.feature +1 -1
  41. data/features/mock_framework_integration/use_flexmock.feature +83 -10
  42. data/features/mock_framework_integration/use_mocha.feature +84 -10
  43. data/features/mock_framework_integration/use_rr.feature +85 -10
  44. data/features/mock_framework_integration/use_rspec.feature +84 -10
  45. data/features/pending/pending_examples.feature +8 -8
  46. data/features/spec_files/arbitrary_file_suffix.feature +1 -1
  47. data/features/step_definitions/additional_cli_steps.rb +11 -1
  48. data/features/subject/attribute_of_subject.feature +24 -4
  49. data/features/subject/explicit_subject.feature +5 -5
  50. data/features/subject/implicit_receiver.feature +2 -2
  51. data/features/subject/implicit_subject.feature +2 -2
  52. data/features/support/env.rb +6 -1
  53. data/lib/rspec/core.rb +22 -0
  54. data/lib/rspec/core/backward_compatibility.rb +12 -2
  55. data/lib/rspec/core/command_line.rb +1 -4
  56. data/lib/rspec/core/configuration.rb +25 -17
  57. data/lib/rspec/core/configuration_options.rb +6 -23
  58. data/lib/rspec/core/drb_command_line.rb +5 -11
  59. data/lib/rspec/core/example.rb +29 -21
  60. data/lib/rspec/core/example_group.rb +36 -4
  61. data/lib/rspec/core/formatters/base_formatter.rb +6 -0
  62. data/lib/rspec/core/formatters/base_text_formatter.rb +1 -1
  63. data/lib/rspec/core/formatters/helpers.rb +0 -4
  64. data/lib/rspec/core/hooks.rb +14 -4
  65. data/lib/rspec/core/metadata.rb +1 -1
  66. data/lib/rspec/core/metadata_hash_builder.rb +93 -0
  67. data/lib/rspec/core/mocking/with_flexmock.rb +2 -0
  68. data/lib/rspec/core/mocking/with_mocha.rb +2 -0
  69. data/lib/rspec/core/mocking/with_rr.rb +2 -0
  70. data/lib/rspec/core/mocking/with_rspec.rb +3 -1
  71. data/lib/rspec/core/option_parser.rb +5 -2
  72. data/lib/rspec/core/pending.rb +10 -3
  73. data/lib/rspec/core/reporter.rb +2 -2
  74. data/lib/rspec/core/runner.rb +7 -1
  75. data/lib/rspec/core/shared_example_group.rb +18 -4
  76. data/lib/rspec/core/subject.rb +4 -6
  77. data/lib/rspec/core/version.rb +1 -1
  78. data/lib/rspec/core/world.rb +16 -4
  79. data/rspec-core.gemspec +4 -3
  80. data/spec.txt +1126 -0
  81. data/spec/autotest/failed_results_re_spec.rb +2 -2
  82. data/spec/rspec/core/command_line_spec.rb +0 -2
  83. data/spec/rspec/core/configuration_spec.rb +84 -1
  84. data/spec/rspec/core/deprecations_spec.rb +21 -0
  85. data/spec/rspec/core/drb_command_line_spec.rb +3 -11
  86. data/spec/rspec/core/example_group_spec.rb +213 -56
  87. data/spec/rspec/core/example_spec.rb +110 -0
  88. data/spec/rspec/core/formatters/base_formatter_spec.rb +23 -2
  89. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +9 -0
  90. data/spec/rspec/core/formatters/helpers_spec.rb +1 -1
  91. data/spec/rspec/core/formatters/html_formatted-1.8.6.html +5 -5
  92. data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +8 -10
  93. data/spec/rspec/core/formatters/html_formatted-1.8.7.html +5 -5
  94. data/spec/rspec/core/formatters/html_formatted-1.9.1.html +5 -5
  95. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +5 -5
  96. data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -1
  97. data/spec/rspec/core/formatters/text_mate_formatted-1.8.6.html +5 -5
  98. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +8 -10
  99. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +5 -5
  100. data/spec/rspec/core/formatters/text_mate_formatted-1.9.1.html +5 -5
  101. data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +5 -5
  102. data/spec/rspec/core/hooks_spec.rb +86 -0
  103. data/spec/rspec/core/metadata_spec.rb +7 -7
  104. data/spec/rspec/core/option_parser_spec.rb +8 -0
  105. data/spec/rspec/core/pending_example_spec.rb +12 -51
  106. data/spec/rspec/core/reporter_spec.rb +19 -3
  107. data/spec/rspec/core/resources/formatter_specs.rb +7 -1
  108. data/spec/rspec/core/rspec_matchers_spec.rb +45 -0
  109. data/spec/rspec/core/runner_spec.rb +35 -10
  110. data/spec/rspec/core/shared_example_group_spec.rb +57 -21
  111. data/spec/rspec/core/subject_spec.rb +32 -11
  112. data/spec/rspec/core/world_spec.rb +38 -15
  113. data/spec/rspec/core_spec.rb +28 -0
  114. data/spec/spec_helper.rb +22 -2
  115. data/spec/support/matchers.rb +44 -13
  116. data/spec/support/shared_example_groups.rb +41 -0
  117. metadata +39 -16
@@ -0,0 +1,17 @@
1
+ Feature: current example
2
+
3
+ You can reference the example object, and access its metadata, using
4
+ the `example` method within an example.
5
+
6
+ Scenario: access the example object from within an example
7
+ Given a file named "spec/example_spec.rb" with:
8
+ """
9
+ describe "an example" do
10
+ it "knows itself as example" do
11
+ example.description.should eq("knows itself as example")
12
+ end
13
+ end
14
+ """
15
+ When I run `rspec spec/example_spec.rb`
16
+ Then the example should pass
17
+
@@ -12,6 +12,6 @@ Feature: described class
12
12
  end
13
13
  end
14
14
  """
15
- When I run "rspec ./spec/example_spec.rb"
16
- Then the examples should all pass
15
+ When I run `rspec spec/example_spec.rb`
16
+ Then the example should pass
17
17
 
@@ -0,0 +1,111 @@
1
+ Feature: User-defined metadata
2
+
3
+ You can attach user-defined metadata to any example group or example.
4
+ Pass a hash as the last argument (before the block) to `describe`,
5
+ `context` or `it`. RSpec supports many configuration options that apply
6
+ only to certain examples or groups based on the metadata.
7
+
8
+ Metadata defined on an example group is available (and can be overriden)
9
+ by any sub-group or from any example in that group or a sub-group.
10
+
11
+ In addition, there is a configuration option (which will be the default
12
+ behavior in RSpec 3) that allows you to specify metadata using just
13
+ symbols:
14
+
15
+ RSpec.configure do |c|
16
+ c.treat_symbols_as_metadata_keys_with_true_values = true
17
+ end
18
+
19
+ Each symbol passed as an argument to `describe`, `context` or `it` will
20
+ be a key in the metadata hash, with a corresponding value of `true`.
21
+
22
+ Scenario: define group metadata using a hash
23
+ Given a file named "define_group_metadata_with_hash_spec.rb" with:
24
+ """
25
+ describe "a group with user-defined metadata", :foo => 17 do
26
+ it 'has access to the metadata in the example' do
27
+ example.metadata[:foo].should == 17
28
+ end
29
+
30
+ it 'does not have access to metadata defined on sub-groups' do
31
+ example.metadata.should_not include(:bar)
32
+ end
33
+
34
+ describe 'a sub-group with user-defined metadata', :bar => 12 do
35
+ it 'has access to the sub-group metadata' do
36
+ example.metadata[:foo].should == 17
37
+ end
38
+
39
+ it 'also has access to metadata defined on parent groups' do
40
+ example.metadata[:bar].should == 12
41
+ end
42
+ end
43
+ end
44
+ """
45
+ When I run `rspec define_group_metadata_with_hash_spec.rb`
46
+ Then the examples should all pass
47
+
48
+ Scenario: define example metadata using a hash
49
+ Given a file named "define_example_metadata_with_hash_spec.rb" with:
50
+ """
51
+ describe "a group with no user-defined metadata" do
52
+ it 'has an example with metadata', :foo => 17 do
53
+ example.metadata[:foo].should == 17
54
+ example.metadata.should_not include(:bar)
55
+ end
56
+
57
+ it 'has another example with metadata', :bar => 12, :bazz => 33 do
58
+ example.metadata[:bar].should == 12
59
+ example.metadata[:bazz].should == 33
60
+ example.metadata.should_not include(:foo)
61
+ end
62
+ end
63
+ """
64
+ When I run `rspec define_example_metadata_with_hash_spec.rb`
65
+ Then the examples should all pass
66
+
67
+ Scenario: override user-defined metadata
68
+ Given a file named "override_metadata_spec.rb" with:
69
+ """
70
+ describe "a group with user-defined metadata", :foo => 'bar' do
71
+ it 'can be overriden by an example', :foo => 'bazz' do
72
+ example.metadata[:foo].should == 'bazz'
73
+ end
74
+
75
+ describe "a sub-group with an override", :foo => 'goo' do
76
+ it 'can be overriden by a sub-group' do
77
+ example.metadata[:foo].should == 'goo'
78
+ end
79
+ end
80
+ end
81
+ """
82
+ When I run `rspec override_metadata_spec.rb`
83
+ Then the examples should all pass
84
+
85
+ Scenario: less verbose metadata
86
+ Given a file named "less_verbose_metadata_spec.rb" with:
87
+ """
88
+ RSpec.configure do |c|
89
+ c.treat_symbols_as_metadata_keys_with_true_values = true
90
+ end
91
+
92
+ describe "a group with simple metadata", :fast, :simple, :bug => 73 do
93
+ it 'has `:fast => true` metadata' do
94
+ example.metadata[:fast].should == true
95
+ end
96
+
97
+ it 'has `:simple => true` metadata' do
98
+ example.metadata[:simple].should == true
99
+ end
100
+
101
+ it 'can still use a hash for metadata' do
102
+ example.metadata[:bug].should == 73
103
+ end
104
+
105
+ it 'can define simple metadata on an example', :special do
106
+ example.metadata[:special].should == true
107
+ end
108
+ end
109
+ """
110
+ When I run `rspec less_verbose_metadata_spec.rb`
111
+ Then the examples should all pass
@@ -100,7 +100,7 @@ Feature: mock with an alternative framework
100
100
  end
101
101
  end
102
102
  """
103
- When I run "rspec example_spec.rb --format doc"
103
+ When I run `rspec example_spec.rb --format doc`
104
104
  Then the exit status should be 1
105
105
  And the output should contain "2 examples, 1 failure"
106
106
  And the output should contain "fails when message is received (FAILED - 1)"
@@ -1,23 +1,96 @@
1
1
  Feature: mock with flexmock
2
2
 
3
- As an RSpec user who likes to mock
4
- I want to be able to use flexmock
3
+ Configure RSpec to use flexmock as shown in the scenarios below.
5
4
 
6
- Scenario: Mock with flexmock
7
- Given a file named "flexmock_example_spec.rb" with:
5
+ Scenario: passing message expectation
6
+ Given a file named "example_spec.rb" with:
8
7
  """
9
8
  RSpec.configure do |config|
10
9
  config.mock_framework = :flexmock
11
10
  end
12
11
 
13
- describe "plugging in flexmock" do
14
- it "allows flexmock to be used" do
15
- target = Object.new
16
- flexmock(target).should_receive(:foo).once
17
- target.foo
12
+ describe "mocking with RSpec" do
13
+ it "passes when it should" do
14
+ receiver = flexmock('receiver')
15
+ receiver.should_receive(:message).once
16
+ receiver.message
18
17
  end
19
18
  end
20
19
  """
21
- When I run "rspec ./flexmock_example_spec.rb"
20
+ When I run `rspec example_spec.rb`
22
21
  Then the examples should all pass
22
+
23
+ Scenario: failing message expecation
24
+ Given a file named "example_spec.rb" with:
25
+ """
26
+ RSpec.configure do |config|
27
+ config.mock_framework = :flexmock
28
+ end
29
+
30
+ describe "mocking with RSpec" do
31
+ it "fails when it should" do
32
+ receiver = flexmock('receiver')
33
+ receiver.should_receive(:message).once
34
+ end
35
+ end
36
+ """
37
+ When I run `rspec example_spec.rb`
38
+ Then the output should contain "1 example, 1 failure"
39
+
40
+ Scenario: failing message expectation in pending block (remains pending)
41
+ Given a file named "example_spec.rb" with:
42
+ """
43
+ RSpec.configure do |config|
44
+ config.mock_framework = :flexmock
45
+ end
46
+
47
+ describe "failed message expectation in a pending block" do
48
+ it "is listed as pending" do
49
+ pending do
50
+ receiver = flexmock('receiver')
51
+ receiver.should_receive(:message).once
52
+ end
53
+ end
54
+ end
55
+ """
56
+ When I run `rspec example_spec.rb`
57
+ Then the output should contain "1 example, 0 failures, 1 pending"
23
58
  And the exit status should be 0
59
+
60
+ Scenario: passing message expectation in pending block (fails)
61
+ Given a file named "example_spec.rb" with:
62
+ """
63
+ RSpec.configure do |config|
64
+ config.mock_framework = :flexmock
65
+ end
66
+
67
+ describe "passing message expectation in a pending block" do
68
+ it "fails with FIXED" do
69
+ pending do
70
+ receiver = flexmock('receiver')
71
+ receiver.should_receive(:message).once
72
+ receiver.message
73
+ end
74
+ end
75
+ end
76
+ """
77
+ When I run `rspec example_spec.rb`
78
+ Then the output should contain "FIXED"
79
+ Then the output should contain "1 example, 1 failure"
80
+ And the exit status should be 1
81
+
82
+ Scenario: accessing RSpec.configuration.mock_framework.framework_name
83
+ Given a file named "example_spec.rb" with:
84
+ """
85
+ RSpec.configure do |config|
86
+ config.mock_framework = :flexmock
87
+ end
88
+
89
+ describe "RSpec.configuration.mock_framework.framework_name" do
90
+ it "returns :flexmock" do
91
+ RSpec.configuration.mock_framework.framework_name.should eq(:flexmock)
92
+ end
93
+ end
94
+ """
95
+ When I run `rspec example_spec.rb`
96
+ Then the examples should all pass
@@ -1,23 +1,97 @@
1
1
  Feature: mock with mocha
2
2
 
3
- As an RSpec user who likes to mock
4
- I want to be able to use mocha
3
+ Configure RSpec to use mocha as shown in the scenarios below.
5
4
 
6
- Scenario: Mock with mocha
7
- Given a file named "mocha_example_spec.rb" with:
5
+ Scenario: passing message expectation
6
+ Given a file named "example_spec.rb" with:
8
7
  """
9
8
  RSpec.configure do |config|
10
9
  config.mock_framework = :mocha
11
10
  end
12
11
 
13
- describe "plugging in mocha" do
14
- it "allows mocha to be used" do
15
- target = Object.new
16
- target.expects(:foo).once
17
- target.foo
12
+ describe "mocking with RSpec" do
13
+ it "passes when it should" do
14
+ receiver = mock('receiver')
15
+ receiver.expects(:message).once
16
+ receiver.message
18
17
  end
19
18
  end
20
19
  """
21
- When I run "rspec ./mocha_example_spec.rb"
20
+ When I run `rspec example_spec.rb`
22
21
  Then the examples should all pass
22
+
23
+ Scenario: failing message expecation
24
+ Given a file named "example_spec.rb" with:
25
+ """
26
+ RSpec.configure do |config|
27
+ config.mock_framework = :mocha
28
+ end
29
+
30
+ describe "mocking with RSpec" do
31
+ it "fails when it should" do
32
+ receiver = mock('receiver')
33
+ receiver.expects(:message).once
34
+ end
35
+ end
36
+ """
37
+ When I run `rspec example_spec.rb`
38
+ Then the output should contain "1 example, 1 failure"
39
+
40
+ Scenario: failing message expectation in pending block (remains pending)
41
+ Given a file named "example_spec.rb" with:
42
+ """
43
+ RSpec.configure do |config|
44
+ config.mock_framework = :mocha
45
+ end
46
+
47
+ describe "failed message expectation in a pending block" do
48
+ it "is listed as pending" do
49
+ pending do
50
+ receiver = mock('receiver')
51
+ receiver.expects(:message).once
52
+ end
53
+ end
54
+ end
55
+ """
56
+ When I run `rspec example_spec.rb`
57
+ Then the output should contain "1 example, 0 failures, 1 pending"
23
58
  And the exit status should be 0
59
+
60
+ Scenario: passing message expectation in pending block (fails)
61
+ Given a file named "example_spec.rb" with:
62
+ """
63
+ RSpec.configure do |config|
64
+ config.mock_framework = :mocha
65
+ end
66
+
67
+ describe "passing message expectation in a pending block" do
68
+ it "fails with FIXED" do
69
+ pending do
70
+ receiver = mock('receiver')
71
+ receiver.expects(:message).once
72
+ receiver.message
73
+ end
74
+ end
75
+ end
76
+ """
77
+ When I run `rspec example_spec.rb`
78
+ Then the output should contain "FIXED"
79
+ Then the output should contain "1 example, 1 failure"
80
+ And the exit status should be 1
81
+
82
+ Scenario: accessing RSpec.configuration.mock_framework.framework_name
83
+ Given a file named "example_spec.rb" with:
84
+ """
85
+ RSpec.configure do |config|
86
+ config.mock_framework = :mocha
87
+ end
88
+
89
+ describe "RSpec.configuration.mock_framework.framework_name" do
90
+ it "returns :mocha" do
91
+ RSpec.configuration.mock_framework.framework_name.should eq(:mocha)
92
+ end
93
+ end
94
+ """
95
+ When I run `rspec example_spec.rb`
96
+ Then the examples should all pass
97
+
@@ -1,23 +1,98 @@
1
1
  Feature: mock with rr
2
2
 
3
- As an RSpec user who likes to mock
4
- I want to be able to use rr
3
+ Configure RSpec to use rr as shown in the scenarios below.
5
4
 
6
- Scenario: Mock with rr
7
- Given a file named "rr_example_spec.rb" with:
5
+ Scenario: passing message expectation
6
+ Given a file named "example_spec.rb" with:
8
7
  """
9
8
  RSpec.configure do |config|
10
9
  config.mock_framework = :rr
11
10
  end
12
11
 
13
- describe "plugging in rr" do
14
- it "allows rr to be used" do
15
- target = Object.new
16
- mock(target).foo
17
- target.foo
12
+ describe "mocking with RSpec" do
13
+ it "passes when it should" do
14
+ receiver = Object.new
15
+ mock(receiver).message
16
+ receiver.message
18
17
  end
19
18
  end
20
19
  """
21
- When I run "rspec ./rr_example_spec.rb"
20
+ When I run `rspec example_spec.rb`
22
21
  Then the examples should all pass
22
+
23
+ Scenario: failing message expecation
24
+ Given a file named "example_spec.rb" with:
25
+ """
26
+ RSpec.configure do |config|
27
+ config.mock_framework = :rr
28
+ end
29
+
30
+ describe "mocking with RSpec" do
31
+ it "fails when it should" do
32
+ receiver = Object.new
33
+ mock(receiver).message
34
+ end
35
+ end
36
+ """
37
+ When I run `rspec example_spec.rb`
38
+ Then the output should contain "1 example, 1 failure"
39
+
40
+ Scenario: failing message expectation in pending block (remains pending)
41
+ Given a file named "example_spec.rb" with:
42
+ """
43
+ RSpec.configure do |config|
44
+ config.mock_framework = :rr
45
+ end
46
+
47
+ describe "failed message expectation in a pending block" do
48
+ it "is listed as pending" do
49
+ pending do
50
+ receiver = Object.new
51
+ mock(receiver).message
52
+ end
53
+ end
54
+ end
55
+ """
56
+ When I run `rspec example_spec.rb`
57
+ Then the output should contain "1 example, 0 failures, 1 pending"
23
58
  And the exit status should be 0
59
+
60
+ Scenario: passing message expectation in pending block (fails)
61
+ Given a file named "example_spec.rb" with:
62
+ """
63
+ RSpec.configure do |config|
64
+ config.mock_framework = :rr
65
+ end
66
+
67
+ describe "passing message expectation in a pending block" do
68
+ it "fails with FIXED" do
69
+ pending do
70
+ receiver = Object.new
71
+ mock(receiver).message
72
+ receiver.message
73
+ end
74
+ end
75
+ end
76
+ """
77
+ When I run `rspec example_spec.rb`
78
+ Then the output should contain "FIXED"
79
+ Then the output should contain "1 example, 1 failure"
80
+ And the exit status should be 1
81
+
82
+ Scenario: accessing RSpec.configuration.mock_framework.framework_name
83
+ Given a file named "example_spec.rb" with:
84
+ """
85
+ RSpec.configure do |config|
86
+ config.mock_framework = :rr
87
+ end
88
+
89
+ describe "RSpec.configuration.mock_framework.framework_name" do
90
+ it "returns :rr" do
91
+ RSpec.configuration.mock_framework.framework_name.should eq(:rr)
92
+ end
93
+ end
94
+ """
95
+ When I run `rspec example_spec.rb`
96
+ Then the examples should all pass
97
+
98
+