rspec-core 3.0.0.beta1 → 3.0.0.beta2
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.tar.gz.sig +0 -0
- data/Changelog.md +137 -0
- data/README.md +2 -2
- data/exe/rspec +2 -23
- data/features/README.md +1 -5
- data/features/command_line/README.md +7 -10
- data/features/command_line/exit_status.feature +1 -1
- data/features/command_line/format_option.feature +1 -1
- data/features/command_line/init.feature +40 -1
- data/features/command_line/line_number_option.feature +2 -2
- data/features/command_line/ruby.feature +5 -4
- data/features/configuration/enable_global_dsl.feature +54 -0
- data/features/example_groups/aliasing.feature +48 -0
- data/features/example_groups/basic_structure.feature +1 -1
- data/features/expectation_framework_integration/configure_expectation_framework.feature +1 -1
- data/features/filtering/if_and_unless.feature +0 -30
- data/features/formatters/custom_formatter.feature +32 -0
- data/features/formatters/regression_tests.feature +95 -0
- data/features/hooks/around_hooks.feature +1 -0
- data/features/hooks/before_and_after_hooks.feature +2 -2
- data/features/mock_framework_integration/use_flexmock.feature +11 -13
- data/features/mock_framework_integration/use_mocha.feature +11 -13
- data/features/mock_framework_integration/use_rr.feature +11 -13
- data/features/mock_framework_integration/use_rspec.feature +11 -13
- data/features/pending_and_skipped_examples/README.md +3 -0
- data/features/pending_and_skipped_examples/pending_examples.feature +118 -0
- data/features/pending_and_skipped_examples/skipped_examples.feature +106 -0
- data/features/step_definitions/additional_cli_steps.rb +34 -0
- data/features/subject/explicit_subject.feature +1 -1
- data/features/subject/one_liner_syntax.feature +71 -0
- data/lib/rspec/core.rb +6 -14
- data/lib/rspec/core/backtrace_formatter.rb +16 -4
- data/lib/rspec/core/command_line.rb +2 -3
- data/lib/rspec/core/configuration.rb +114 -125
- data/lib/rspec/core/configuration_options.rb +32 -18
- data/lib/rspec/core/dsl.rb +80 -18
- data/lib/rspec/core/example.rb +84 -33
- data/lib/rspec/core/example_group.rb +95 -43
- data/lib/rspec/core/filter_manager.rb +31 -40
- data/lib/rspec/core/formatters.rb +137 -0
- data/lib/rspec/core/formatters/base_formatter.rb +28 -41
- data/lib/rspec/core/formatters/base_text_formatter.rb +26 -37
- data/lib/rspec/core/formatters/deprecation_formatter.rb +48 -27
- data/lib/rspec/core/formatters/documentation_formatter.rb +27 -22
- data/lib/rspec/core/formatters/html_formatter.rb +48 -56
- data/lib/rspec/core/formatters/html_printer.rb +11 -18
- data/lib/rspec/core/formatters/json_formatter.rb +18 -22
- data/lib/rspec/core/formatters/legacy_formatter.rb +227 -0
- data/lib/rspec/core/formatters/progress_formatter.rb +7 -10
- data/lib/rspec/core/hooks.rb +250 -217
- data/lib/rspec/core/memoized_helpers.rb +43 -9
- data/lib/rspec/core/mocking_adapters/flexmock.rb +29 -0
- data/lib/rspec/core/{mocking/with_mocha.rb → mocking_adapters/mocha.rb} +19 -16
- data/lib/rspec/core/mocking_adapters/null.rb +12 -0
- data/lib/rspec/core/mocking_adapters/rr.rb +28 -0
- data/lib/rspec/core/mocking_adapters/rspec.rb +30 -0
- data/lib/rspec/core/notifications.rb +100 -0
- data/lib/rspec/core/option_parser.rb +11 -18
- data/lib/rspec/core/pending.rb +78 -47
- data/lib/rspec/core/project_initializer.rb +2 -49
- data/lib/rspec/core/project_initializer/dot_rspec +3 -0
- data/lib/rspec/core/project_initializer/spec_helper.rb +82 -0
- data/lib/rspec/core/rake_task.rb +5 -14
- data/lib/rspec/core/reporter.rb +24 -32
- data/lib/rspec/core/ruby_project.rb +1 -1
- data/lib/rspec/core/runner.rb +14 -4
- data/lib/rspec/core/shared_example_group.rb +40 -13
- data/lib/rspec/core/version.rb +1 -1
- data/spec/command_line/order_spec.rb +15 -15
- data/spec/rspec/core/backtrace_formatter_spec.rb +15 -1
- data/spec/rspec/core/command_line_spec.rb +18 -17
- data/spec/rspec/core/configuration_options_spec.rb +57 -34
- data/spec/rspec/core/configuration_spec.rb +162 -184
- data/spec/rspec/core/drb_command_line_spec.rb +5 -7
- data/spec/rspec/core/drb_options_spec.rb +2 -2
- data/spec/rspec/core/dsl_spec.rb +79 -15
- data/spec/rspec/core/example_group_spec.rb +253 -39
- data/spec/rspec/core/example_spec.rb +149 -33
- data/spec/rspec/core/filter_manager_spec.rb +9 -26
- data/spec/rspec/core/formatters/base_formatter_spec.rb +2 -5
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +42 -145
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +64 -34
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +15 -28
- data/spec/rspec/core/formatters/helpers_spec.rb +2 -2
- data/spec/rspec/core/formatters/{html_formatted-1.8.7.html → html_formatted-2.1.0.html} +22 -44
- data/spec/rspec/core/formatters/{html_formatted-1.8.7-jruby.html → html_formatted.html} +30 -49
- data/spec/rspec/core/formatters/html_formatter_spec.rb +35 -19
- data/spec/rspec/core/formatters/json_formatter_spec.rb +42 -40
- data/spec/rspec/core/formatters/legacy_formatter_spec.rb +137 -0
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +38 -25
- data/spec/rspec/core/formatters/snippet_extractor_spec.rb +1 -1
- data/spec/rspec/core/formatters_spec.rb +120 -0
- data/spec/rspec/core/hooks_filtering_spec.rb +1 -1
- data/spec/rspec/core/hooks_spec.rb +13 -2
- data/spec/rspec/core/memoized_helpers_spec.rb +17 -8
- data/spec/rspec/core/metadata_spec.rb +3 -3
- data/spec/rspec/core/option_parser_spec.rb +53 -46
- data/spec/rspec/core/ordering_spec.rb +4 -4
- data/spec/rspec/core/pending_example_spec.rb +23 -126
- data/spec/rspec/core/pending_spec.rb +8 -0
- data/spec/rspec/core/project_initializer_spec.rb +8 -41
- data/spec/rspec/core/rake_task_spec.rb +15 -4
- data/spec/rspec/core/random_spec.rb +1 -1
- data/spec/rspec/core/reporter_spec.rb +50 -37
- data/spec/rspec/core/resources/formatter_specs.rb +9 -11
- data/spec/rspec/core/rspec_matchers_spec.rb +1 -1
- data/spec/rspec/core/ruby_project_spec.rb +3 -3
- data/spec/rspec/core/runner_spec.rb +65 -23
- data/spec/rspec/core/shared_context_spec.rb +4 -4
- data/spec/rspec/core/shared_example_group/collection_spec.rb +1 -1
- data/spec/rspec/core/shared_example_group_spec.rb +20 -11
- data/spec/rspec/core/warnings_spec.rb +1 -1
- data/spec/rspec/core/world_spec.rb +10 -10
- data/spec/rspec/core_spec.rb +2 -2
- data/spec/spec_helper.rb +12 -24
- data/spec/support/config_options_helper.rb +1 -3
- data/spec/support/formatter_support.rb +83 -0
- data/spec/support/isolate_load_path_mutation.rb +1 -2
- data/spec/support/isolated_directory.rb +1 -1
- data/spec/support/isolated_home_directory.rb +1 -1
- data/spec/support/legacy_formatter_using_sub_classing_example.rb +87 -0
- data/spec/support/matchers.rb +20 -0
- data/spec/support/mathn_integration_support.rb +2 -2
- data/spec/support/old_style_formatter_example.rb +69 -0
- data/spec/support/shared_example_groups.rb +1 -1
- data/spec/support/spec_files.rb +3 -3
- metadata +192 -69
- metadata.gz.sig +3 -1
- checksums.yaml +0 -15
- checksums.yaml.gz.sig +0 -2
- data/features/configuration/show_failures_in_pending_blocks.feature +0 -61
- data/features/pending/pending_examples.feature +0 -229
- data/features/subject/implicit_receiver.feature +0 -29
- data/lib/rspec/core/mocking/with_absolutely_nothing.rb +0 -11
- data/lib/rspec/core/mocking/with_flexmock.rb +0 -27
- data/lib/rspec/core/mocking/with_rr.rb +0 -27
- data/lib/rspec/core/mocking/with_rspec.rb +0 -27
- data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +0 -477
- data/spec/rspec/core/formatters/html_formatted-1.9.2.html +0 -425
- data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +0 -416
- data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +0 -477
- data/spec/rspec/core/formatters/html_formatted-1.9.3.html +0 -419
- data/spec/rspec/core/formatters/html_formatted-2.0.0.html +0 -425
- data/spec/support/in_sub_process.rb +0 -37
- data/spec/support/sandboxed_mock_space.rb +0 -100
|
@@ -3,13 +3,13 @@ require "spec_helper"
|
|
|
3
3
|
module RSpec
|
|
4
4
|
module Core
|
|
5
5
|
module Ordering
|
|
6
|
-
describe Identity do
|
|
6
|
+
RSpec.describe Identity do
|
|
7
7
|
it "does not affect the ordering of the items" do
|
|
8
8
|
expect(Identity.new.order([1, 2, 3])).to eq([1, 2, 3])
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
describe Random do
|
|
12
|
+
RSpec.describe Random do
|
|
13
13
|
describe '.order' do
|
|
14
14
|
subject { described_class.new(configuration) }
|
|
15
15
|
|
|
@@ -48,7 +48,7 @@ module RSpec
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
describe Custom do
|
|
51
|
+
RSpec.describe Custom do
|
|
52
52
|
it 'uses the block to order the list' do
|
|
53
53
|
strategy = Custom.new(proc { |list| list.reverse })
|
|
54
54
|
|
|
@@ -56,7 +56,7 @@ module RSpec
|
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
describe Registry do
|
|
59
|
+
RSpec.describe Registry do
|
|
60
60
|
let(:configuration) { Configuration.new }
|
|
61
61
|
subject(:registry) { Registry.new(configuration) }
|
|
62
62
|
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe "an example" do
|
|
4
|
-
matcher :be_pending_with do |message|
|
|
5
|
-
match do |example|
|
|
6
|
-
example.pending? && example.metadata[:execution_result][:pending_message] == message
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
failure_message_for_should do |example|
|
|
10
|
-
"expected: example pending with #{message.inspect}\n got: #{example.metadata[:execution_result][:pending_message].inspect}"
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
3
|
+
RSpec.describe "an example" do
|
|
14
4
|
context "declared pending with metadata" do
|
|
15
5
|
it "uses the value assigned to :pending as the message" do
|
|
16
6
|
group = RSpec::Core::ExampleGroup.describe('group') do
|
|
17
7
|
example "example", :pending => 'just because' do
|
|
8
|
+
fail
|
|
18
9
|
end
|
|
19
10
|
end
|
|
20
11
|
example = group.examples.first
|
|
@@ -25,6 +16,7 @@ describe "an example" do
|
|
|
25
16
|
it "sets the message to 'No reason given' if :pending => true" do
|
|
26
17
|
group = RSpec::Core::ExampleGroup.describe('group') do
|
|
27
18
|
example "example", :pending => true do
|
|
19
|
+
fail
|
|
28
20
|
end
|
|
29
21
|
end
|
|
30
22
|
example = group.examples.first
|
|
@@ -40,7 +32,7 @@ describe "an example" do
|
|
|
40
32
|
end
|
|
41
33
|
example = group.examples.first
|
|
42
34
|
example.run(group.new, double.as_null_object)
|
|
43
|
-
expect(example).to
|
|
35
|
+
expect(example).to be_skipped_with('Not yet implemented')
|
|
44
36
|
end
|
|
45
37
|
end
|
|
46
38
|
|
|
@@ -49,12 +41,30 @@ describe "an example" do
|
|
|
49
41
|
group = RSpec::Core::ExampleGroup.describe('group') do
|
|
50
42
|
it "does something" do
|
|
51
43
|
pending
|
|
44
|
+
fail
|
|
52
45
|
end
|
|
53
46
|
end
|
|
54
47
|
example = group.examples.first
|
|
55
48
|
example.run(group.new, double.as_null_object)
|
|
56
49
|
expect(example).to be_pending_with(RSpec::Core::Pending::NO_REASON_GIVEN)
|
|
57
50
|
end
|
|
51
|
+
|
|
52
|
+
it "fails when the rest of the example passes" do
|
|
53
|
+
called = false
|
|
54
|
+
group = RSpec::Core::ExampleGroup.describe('group') do
|
|
55
|
+
it "does something" do
|
|
56
|
+
pending
|
|
57
|
+
called = true
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
example = group.examples.first
|
|
62
|
+
example.run(group.new, double.as_null_object)
|
|
63
|
+
expect(called).to eq(true)
|
|
64
|
+
result = example.metadata[:execution_result]
|
|
65
|
+
expect(result[:pending_fixed]).to eq(true)
|
|
66
|
+
expect(result[:status]).to eq("failed")
|
|
67
|
+
end
|
|
58
68
|
end
|
|
59
69
|
|
|
60
70
|
context "with no docstring" do
|
|
@@ -96,6 +106,7 @@ describe "an example" do
|
|
|
96
106
|
group = RSpec::Core::ExampleGroup.describe('group') do
|
|
97
107
|
it "does something" do
|
|
98
108
|
pending("just because")
|
|
109
|
+
fail
|
|
99
110
|
end
|
|
100
111
|
end
|
|
101
112
|
example = group.examples.first
|
|
@@ -103,118 +114,4 @@ describe "an example" do
|
|
|
103
114
|
expect(example).to be_pending_with('just because')
|
|
104
115
|
end
|
|
105
116
|
end
|
|
106
|
-
|
|
107
|
-
context "with a block" do
|
|
108
|
-
def run_example(*pending_args, &block)
|
|
109
|
-
group = RSpec::Core::ExampleGroup.describe('group') do
|
|
110
|
-
it "does something" do
|
|
111
|
-
pending(*pending_args) { block.call if block }
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
example = group.examples.first
|
|
115
|
-
example.run(group.new, double.as_null_object)
|
|
116
|
-
example
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
context "that fails" do
|
|
120
|
-
def run_example(*pending_args)
|
|
121
|
-
super(*pending_args) { raise ArgumentError.new }
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
context "when given no options" do
|
|
125
|
-
it "is listed as pending with the supplied message" do
|
|
126
|
-
expect(run_example("just because")).to be_pending_with("just because")
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "is listed as pending with the default message when no message is given" do
|
|
130
|
-
expect(run_example).to be_pending_with(RSpec::Core::Pending::NO_REASON_GIVEN)
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
context "when given a truthy :if option" do
|
|
135
|
-
it "is listed as pending with the supplied message" do
|
|
136
|
-
expect(run_example("just because", :if => true)).to be_pending_with("just because")
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "is listed as pending with the default message when no message is given" do
|
|
140
|
-
expect(run_example(:if => true)).to be_pending_with(RSpec::Core::Pending::NO_REASON_GIVEN)
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
context "when given a falsey :if option" do
|
|
145
|
-
it "runs the example and fails" do
|
|
146
|
-
expect(run_example( :if => false)).to fail_with(ArgumentError)
|
|
147
|
-
expect(run_example("just because", :if => false)).to fail_with(ArgumentError)
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
context "when given a truthy :unless option" do
|
|
152
|
-
it "runs the example and fails" do
|
|
153
|
-
expect(run_example( :unless => true)).to fail_with(ArgumentError)
|
|
154
|
-
expect(run_example("just because", :unless => true)).to fail_with(ArgumentError)
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
context "when given a falsey :unless option" do
|
|
159
|
-
it "is listed as pending with the supplied message" do
|
|
160
|
-
expect(run_example("just because", :unless => false)).to be_pending_with("just because")
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "is listed as pending with the default message when no message is given" do
|
|
164
|
-
expect(run_example(:unless => false)).to be_pending_with(RSpec::Core::Pending::NO_REASON_GIVEN)
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
context "that fails due to a failed message expectation" do
|
|
170
|
-
def run_example(*pending_args)
|
|
171
|
-
super(*pending_args) { "foo".should_receive(:bar) }
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
it "passes" do
|
|
175
|
-
expect(run_example("just because")).to be_pending
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
context "that passes" do
|
|
180
|
-
def run_example(*pending_args)
|
|
181
|
-
super(*pending_args) { expect(3).to eq(3) }
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
context "when given no options" do
|
|
185
|
-
it "fails with a PendingExampleFixedError" do
|
|
186
|
-
expect(run_example("just because")).to fail_with(RSpec::Core::Pending::PendingExampleFixedError)
|
|
187
|
-
expect(run_example).to fail_with(RSpec::Core::Pending::PendingExampleFixedError)
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
context "when given a truthy :if option" do
|
|
192
|
-
it "fails with a PendingExampleFixedError" do
|
|
193
|
-
expect(run_example("just because", :if => true)).to fail_with(RSpec::Core::Pending::PendingExampleFixedError)
|
|
194
|
-
expect(run_example( :if => true)).to fail_with(RSpec::Core::Pending::PendingExampleFixedError)
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
context "when given a falsey :if option" do
|
|
199
|
-
it "runs the example and it passes" do
|
|
200
|
-
expect(run_example( :if => false)).to pass
|
|
201
|
-
expect(run_example("just because", :if => false)).to pass
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
context "when given a truthy :unless option" do
|
|
206
|
-
it "runs the example and it passes" do
|
|
207
|
-
expect(run_example( :unless => true)).to pass
|
|
208
|
-
expect(run_example("just because", :unless => true)).to pass
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
context "when given a falsey :unless option" do
|
|
213
|
-
it "fails with a PendingExampleFixedError" do
|
|
214
|
-
expect(run_example("just because", :unless => false)).to fail_with(RSpec::Core::Pending::PendingExampleFixedError)
|
|
215
|
-
expect(run_example( :unless => false)).to fail_with(RSpec::Core::Pending::PendingExampleFixedError)
|
|
216
|
-
end
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
117
|
end
|
|
@@ -2,33 +2,33 @@ require "spec_helper"
|
|
|
2
2
|
require 'rspec/core/project_initializer'
|
|
3
3
|
|
|
4
4
|
module RSpec::Core
|
|
5
|
-
describe ProjectInitializer, :isolated_directory => true do
|
|
5
|
+
RSpec.describe ProjectInitializer, :isolated_directory => true do
|
|
6
6
|
|
|
7
7
|
describe "#run" do
|
|
8
8
|
context "with no args" do
|
|
9
9
|
let(:command_line_config) { ProjectInitializer.new }
|
|
10
10
|
|
|
11
11
|
before do
|
|
12
|
-
command_line_config.
|
|
13
|
-
command_line_config.
|
|
12
|
+
allow(command_line_config).to receive(:puts)
|
|
13
|
+
allow(command_line_config).to receive_messages(:gets => 'no')
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
context "with no .rspec file" do
|
|
17
17
|
it "says it's creating .rspec " do
|
|
18
|
-
command_line_config.
|
|
18
|
+
expect(command_line_config).to receive(:puts).with(/create\s+\.rspec/)
|
|
19
19
|
command_line_config.run
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
it "generates a .rspec" do
|
|
23
23
|
command_line_config.run
|
|
24
|
-
expect(File.read('.rspec')).to match(/--color
|
|
24
|
+
expect(File.read('.rspec')).to match(/--color/m)
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
context "with a .rspec file" do
|
|
29
29
|
it "says .rspec exists" do
|
|
30
30
|
FileUtils.touch('.rspec')
|
|
31
|
-
command_line_config.
|
|
31
|
+
expect(command_line_config).to receive(:puts).with(/exist\s+\.rspec/)
|
|
32
32
|
command_line_config.run
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -41,7 +41,7 @@ module RSpec::Core
|
|
|
41
41
|
|
|
42
42
|
context "with no spec/spec_helper.rb file" do
|
|
43
43
|
it "says it's creating spec/spec_helper.rb " do
|
|
44
|
-
command_line_config.
|
|
44
|
+
expect(command_line_config).to receive(:puts).with(/create\s+spec\/spec_helper.rb/)
|
|
45
45
|
command_line_config.run
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -56,7 +56,7 @@ module RSpec::Core
|
|
|
56
56
|
|
|
57
57
|
it "says spec/spec_helper.rb exists" do
|
|
58
58
|
FileUtils.touch('spec/spec_helper.rb')
|
|
59
|
-
command_line_config.
|
|
59
|
+
expect(command_line_config).to receive(:puts).with(/exist\s+spec\/spec_helper.rb/)
|
|
60
60
|
command_line_config.run
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -67,39 +67,6 @@ module RSpec::Core
|
|
|
67
67
|
expect(File.read('spec/spec_helper.rb')).to eq(random_content)
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
|
-
|
|
71
|
-
context "with lib/tasks/rspec.rake" do
|
|
72
|
-
before do
|
|
73
|
-
FileUtils.mkdir_p('lib/tasks')
|
|
74
|
-
FileUtils.touch 'lib/tasks/rspec.rake'
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "asks whether to delete the file" do
|
|
78
|
-
command_line_config.should_receive(:puts).with(/delete/)
|
|
79
|
-
command_line_config.run
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "removes it if confirmed" do
|
|
83
|
-
command_line_config.stub(:gets => 'yes')
|
|
84
|
-
command_line_config.run
|
|
85
|
-
expect(File.exist?('lib/tasks/rspec.rake')).to be_falsey
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "leaves it if not confirmed" do
|
|
89
|
-
command_line_config.stub(:gets => 'no')
|
|
90
|
-
command_line_config.run
|
|
91
|
-
expect(File.exist?('lib/tasks/rspec.rake')).to be_truthy
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
context "given an arg" do
|
|
97
|
-
it "warns if arg received (no longer necessary)" do
|
|
98
|
-
config = ProjectInitializer.new("another_arg")
|
|
99
|
-
config.stub(:puts)
|
|
100
|
-
config.stub(:gets => 'no')
|
|
101
|
-
config.run
|
|
102
|
-
end
|
|
103
70
|
end
|
|
104
71
|
end
|
|
105
72
|
end
|
|
@@ -3,7 +3,7 @@ require "rspec/core/rake_task"
|
|
|
3
3
|
require 'tempfile'
|
|
4
4
|
|
|
5
5
|
module RSpec::Core
|
|
6
|
-
describe RakeTask do
|
|
6
|
+
RSpec.describe RakeTask do
|
|
7
7
|
let(:task) { RakeTask.new }
|
|
8
8
|
|
|
9
9
|
def ruby
|
|
@@ -28,7 +28,7 @@ module RSpec::Core
|
|
|
28
28
|
expect(args[:files]).to eq "first_spec.rb"
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
task.
|
|
31
|
+
expect(task).to receive(:run_task) { true }
|
|
32
32
|
expect(Rake.application.invoke_task("rake_task_args[first_spec.rb]")).to be_truthy
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -53,13 +53,24 @@ module RSpec::Core
|
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
context 'with custom exit status' do
|
|
57
|
+
it 'returns the correct status on exit', :slow do
|
|
58
|
+
with_isolated_stderr do
|
|
59
|
+
expect($stderr).to receive(:puts) { |cmd| expect(cmd).to match(/-e "exit\(2\);".* failed/) }
|
|
60
|
+
expect(task).to receive(:exit).with(2)
|
|
61
|
+
task.ruby_opts = '-e "exit(2);" ;#'
|
|
62
|
+
task.run_task false
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
56
67
|
def specify_consistent_ordering_of_files_to_run(pattern, task)
|
|
57
68
|
orderings = [
|
|
58
69
|
%w[ a/1.rb a/2.rb a/3.rb ],
|
|
59
70
|
%w[ a/2.rb a/1.rb a/3.rb ],
|
|
60
71
|
%w[ a/3.rb a/2.rb a/1.rb ]
|
|
61
72
|
].map do |files|
|
|
62
|
-
FileList.
|
|
73
|
+
expect(FileList).to receive(:[]).with(pattern) { files }
|
|
63
74
|
task.__send__(:files_to_run)
|
|
64
75
|
end
|
|
65
76
|
|
|
@@ -87,7 +98,7 @@ module RSpec::Core
|
|
|
87
98
|
|
|
88
99
|
# since the config block is deferred til task invocation, must fake
|
|
89
100
|
# calling the task so the expected pattern is picked up
|
|
90
|
-
task.
|
|
101
|
+
expect(task).to receive(:run_task) { true }
|
|
91
102
|
expect(Rake.application.invoke_task(task.name)).to be_truthy
|
|
92
103
|
|
|
93
104
|
specify_consistent_ordering_of_files_to_run('a/*.rb', task)
|
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
3
|
module RSpec::Core
|
|
4
|
-
describe Reporter do
|
|
5
|
-
let(:config)
|
|
4
|
+
RSpec.describe Reporter do
|
|
5
|
+
let(:config) { Configuration.new }
|
|
6
|
+
let(:reporter) { Reporter.new config }
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
Reporter.new(config, *formatters)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
describe "abort" do
|
|
8
|
+
describe "finish" do
|
|
12
9
|
let(:formatter) { double("formatter") }
|
|
13
10
|
let(:example) { double("example") }
|
|
14
|
-
let(:reporter) { reporter_for(formatter) }
|
|
15
11
|
|
|
16
|
-
%w[start_dump dump_pending dump_failures dump_summary close].each do |message|
|
|
12
|
+
%w[start_dump dump_pending dump_failures dump_summary close].map(&:to_sym).each do |message|
|
|
17
13
|
it "sends #{message} to the formatter(s) that respond to message" do
|
|
18
|
-
formatter
|
|
19
|
-
|
|
14
|
+
reporter.register_listener formatter, message
|
|
15
|
+
expect(formatter.as_null_object).to receive(message)
|
|
16
|
+
reporter.finish
|
|
20
17
|
end
|
|
21
18
|
|
|
22
19
|
it "doesnt notify formatters about messages they dont implement" do
|
|
23
|
-
expect { reporter.
|
|
20
|
+
expect { reporter.finish }.to_not raise_error
|
|
24
21
|
end
|
|
25
22
|
end
|
|
26
23
|
end
|
|
@@ -29,10 +26,11 @@ module RSpec::Core
|
|
|
29
26
|
it "passes messages to that formatter" do
|
|
30
27
|
formatter = double("formatter", :example_started => nil)
|
|
31
28
|
example = double("example")
|
|
32
|
-
reporter
|
|
29
|
+
reporter.register_listener formatter, :example_started
|
|
33
30
|
|
|
34
|
-
formatter.
|
|
35
|
-
|
|
31
|
+
expect(formatter).to receive(:example_started) do |notification|
|
|
32
|
+
expect(notification.example).to eq example
|
|
33
|
+
end
|
|
36
34
|
|
|
37
35
|
reporter.example_started(example)
|
|
38
36
|
end
|
|
@@ -40,9 +38,11 @@ module RSpec::Core
|
|
|
40
38
|
it "passes example_group_started and example_group_finished messages to that formatter in that order" do
|
|
41
39
|
order = []
|
|
42
40
|
|
|
43
|
-
formatter = double("formatter")
|
|
44
|
-
formatter.
|
|
45
|
-
formatter.
|
|
41
|
+
formatter = double("formatter")
|
|
42
|
+
allow(formatter).to receive(:example_group_started) { |n| order << "Started: #{n.group.description}" }
|
|
43
|
+
allow(formatter).to receive(:example_group_finished) { |n| order << "Finished: #{n.group.description}" }
|
|
44
|
+
|
|
45
|
+
reporter.register_listener formatter, :example_group_started, :example_group_finished
|
|
46
46
|
|
|
47
47
|
group = ExampleGroup.describe("root")
|
|
48
48
|
group.describe("context 1") do
|
|
@@ -52,7 +52,7 @@ module RSpec::Core
|
|
|
52
52
|
example("ignore") {}
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
group.run(
|
|
55
|
+
group.run(reporter)
|
|
56
56
|
|
|
57
57
|
expect(order).to eq([
|
|
58
58
|
"Started: root",
|
|
@@ -67,13 +67,15 @@ module RSpec::Core
|
|
|
67
67
|
|
|
68
68
|
context "given an example group with no examples" do
|
|
69
69
|
it "does not pass example_group_started or example_group_finished to formatter" do
|
|
70
|
-
formatter = double("formatter")
|
|
71
|
-
formatter.
|
|
72
|
-
formatter.
|
|
70
|
+
formatter = double("formatter")
|
|
71
|
+
expect(formatter).not_to receive(:example_group_started)
|
|
72
|
+
expect(formatter).not_to receive(:example_group_finished)
|
|
73
|
+
|
|
74
|
+
reporter.register_listener formatter, :example_group_started, :example_group_finished
|
|
73
75
|
|
|
74
76
|
group = ExampleGroup.describe("root")
|
|
75
77
|
|
|
76
|
-
group.run(
|
|
78
|
+
group.run(reporter)
|
|
77
79
|
end
|
|
78
80
|
end
|
|
79
81
|
|
|
@@ -81,12 +83,12 @@ module RSpec::Core
|
|
|
81
83
|
it "passes messages to all formatters" do
|
|
82
84
|
formatters = (1..2).map { double("formatter", :example_started => nil) }
|
|
83
85
|
example = double("example")
|
|
84
|
-
reporter = reporter_for(*formatters)
|
|
85
86
|
|
|
86
87
|
formatters.each do |formatter|
|
|
87
|
-
formatter.
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
expect(formatter).to receive(:example_started) do |notification|
|
|
89
|
+
expect(notification.example).to eq example
|
|
90
|
+
end
|
|
91
|
+
reporter.register_listener formatter, :example_started
|
|
90
92
|
end
|
|
91
93
|
|
|
92
94
|
reporter.example_started(example)
|
|
@@ -95,19 +97,17 @@ module RSpec::Core
|
|
|
95
97
|
|
|
96
98
|
describe "#report" do
|
|
97
99
|
it "supports one arg (count)" do
|
|
98
|
-
|
|
100
|
+
reporter.report(1) {}
|
|
99
101
|
end
|
|
100
102
|
|
|
101
103
|
it "yields itself" do
|
|
102
|
-
reporter = reporter_for
|
|
103
104
|
yielded = nil
|
|
104
|
-
reporter.report(3) {|r| yielded = r}
|
|
105
|
+
reporter.report(3) { |r| yielded = r }
|
|
105
106
|
expect(yielded).to eq(reporter)
|
|
106
107
|
end
|
|
107
108
|
end
|
|
108
109
|
|
|
109
110
|
describe "#register_listener" do
|
|
110
|
-
let(:reporter) { reporter_for }
|
|
111
111
|
let(:listener) { double("listener", :start => nil) }
|
|
112
112
|
|
|
113
113
|
before { reporter.register_listener listener, :start }
|
|
@@ -116,22 +116,35 @@ module RSpec::Core
|
|
|
116
116
|
expect(reporter.registered_listeners :start).to eq [listener]
|
|
117
117
|
end
|
|
118
118
|
|
|
119
|
+
it 'will match string notification names' do
|
|
120
|
+
reporter.register_listener listener, "stop"
|
|
121
|
+
expect(reporter.registered_listeners :stop).to eq [listener]
|
|
122
|
+
end
|
|
123
|
+
|
|
119
124
|
it 'will send notifications when a subscribed event is triggered' do
|
|
120
|
-
listener.
|
|
125
|
+
expect(listener).to receive(:start) do |notification|
|
|
126
|
+
expect(notification.count).to eq 42
|
|
127
|
+
end
|
|
128
|
+
reporter.start 42
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'will ignore duplicated listeners' do
|
|
132
|
+
reporter.register_listener listener, :start
|
|
133
|
+
expect(listener).to receive(:start).once
|
|
121
134
|
reporter.start 42
|
|
122
135
|
end
|
|
123
136
|
end
|
|
124
137
|
|
|
125
138
|
describe "timing" do
|
|
126
139
|
it "uses RSpec::Core::Time as to not be affected by changes to time in examples" do
|
|
127
|
-
formatter = double(:formatter)
|
|
128
|
-
reporter
|
|
140
|
+
formatter = double(:formatter)
|
|
141
|
+
reporter.register_listener formatter, :dump_summary
|
|
129
142
|
reporter.start 1
|
|
130
|
-
Time.
|
|
143
|
+
allow(Time).to receive_messages(:now => ::Time.utc(2012, 10, 1))
|
|
131
144
|
|
|
132
145
|
duration = nil
|
|
133
|
-
formatter.
|
|
134
|
-
duration =
|
|
146
|
+
allow(formatter).to receive(:dump_summary) do |notification|
|
|
147
|
+
duration = notification.duration
|
|
135
148
|
end
|
|
136
149
|
|
|
137
150
|
reporter.finish
|