rspec-core 3.0.0.beta2 → 3.0.0.rc1
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.yardopts +1 -0
- data/Changelog.md +297 -57
- data/README.md +16 -13
- data/lib/rspec/core.rb +55 -84
- data/lib/rspec/core/backport_random.rb +35 -3
- data/lib/rspec/core/backtrace_formatter.rb +4 -13
- data/lib/rspec/core/configuration.rb +330 -114
- data/lib/rspec/core/configuration_options.rb +38 -22
- data/lib/rspec/core/drb.rb +111 -0
- data/lib/rspec/core/dsl.rb +8 -2
- data/lib/rspec/core/example.rb +203 -94
- data/lib/rspec/core/example_group.rb +344 -316
- data/lib/rspec/core/filter_manager.rb +135 -90
- data/lib/rspec/core/flat_map.rb +1 -0
- data/lib/rspec/core/formatters.rb +50 -14
- data/lib/rspec/core/formatters/base_formatter.rb +32 -138
- data/lib/rspec/core/formatters/base_text_formatter.rb +32 -253
- data/lib/rspec/core/formatters/console_codes.rb +65 -0
- data/lib/rspec/core/formatters/deprecation_formatter.rb +24 -15
- data/lib/rspec/core/formatters/documentation_formatter.rb +7 -10
- data/lib/rspec/core/formatters/helpers.rb +15 -9
- data/lib/rspec/core/formatters/html_formatter.rb +17 -16
- data/lib/rspec/core/formatters/html_printer.rb +1 -0
- data/lib/rspec/core/formatters/json_formatter.rb +18 -20
- data/lib/rspec/core/formatters/profile_formatter.rb +67 -0
- data/lib/rspec/core/formatters/progress_formatter.rb +6 -7
- data/lib/rspec/core/formatters/snippet_extractor.rb +8 -6
- data/lib/rspec/core/hooks.rb +131 -125
- data/lib/rspec/core/memoized_helpers.rb +31 -26
- data/lib/rspec/core/metadata.rb +277 -184
- data/lib/rspec/core/metadata_filter.rb +86 -0
- data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
- data/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
- data/lib/rspec/core/mocking_adapters/mocha.rb +1 -1
- data/lib/rspec/core/mocking_adapters/null.rb +1 -1
- data/lib/rspec/core/mocking_adapters/rr.rb +2 -1
- data/lib/rspec/core/mocking_adapters/rspec.rb +1 -1
- data/lib/rspec/core/notifications.rb +435 -24
- data/lib/rspec/core/option_parser.rb +16 -25
- data/lib/rspec/core/ordering.rb +3 -1
- data/lib/rspec/core/pending.rb +57 -33
- data/lib/rspec/core/project_initializer.rb +2 -0
- data/lib/rspec/core/project_initializer/spec_helper.rb +5 -4
- data/lib/rspec/core/rake_task.rb +45 -20
- data/lib/rspec/core/reporter.rb +50 -22
- data/lib/rspec/core/ruby_project.rb +1 -0
- data/lib/rspec/core/runner.rb +93 -39
- data/lib/rspec/core/shared_context.rb +7 -5
- data/lib/rspec/core/shared_example_group.rb +85 -77
- data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/lib/rspec/core/version.rb +3 -1
- data/lib/rspec/core/warnings.rb +35 -17
- data/lib/rspec/core/world.rb +57 -5
- metadata +56 -369
- metadata.gz.sig +3 -3
- data/features/README.md +0 -13
- data/features/Upgrade.md +0 -352
- data/features/command_line/README.md +0 -25
- data/features/command_line/dry_run.feature +0 -29
- data/features/command_line/example_name_option.feature +0 -97
- data/features/command_line/exit_status.feature +0 -82
- data/features/command_line/fail_fast.feature +0 -26
- data/features/command_line/format_option.feature +0 -75
- data/features/command_line/init.feature +0 -57
- data/features/command_line/line_number_appended_to_path.feature +0 -140
- data/features/command_line/line_number_option.feature +0 -58
- data/features/command_line/order.feature +0 -25
- data/features/command_line/pattern_option.feature +0 -49
- data/features/command_line/rake_task.feature +0 -122
- data/features/command_line/randomization.feature +0 -63
- data/features/command_line/require_option.feature +0 -43
- data/features/command_line/ruby.feature +0 -23
- data/features/command_line/tag.feature +0 -98
- data/features/command_line/warnings_option.feature +0 -29
- data/features/configuration/alias_example_to.feature +0 -39
- data/features/configuration/backtrace_exclusion_patterns.feature +0 -105
- data/features/configuration/custom_settings.feature +0 -84
- data/features/configuration/default_path.feature +0 -38
- data/features/configuration/deprecation_stream.feature +0 -58
- data/features/configuration/enable_global_dsl.feature +0 -54
- data/features/configuration/fail_fast.feature +0 -77
- data/features/configuration/failure_exit_code.feature +0 -36
- data/features/configuration/order_and_seed.feature +0 -3
- data/features/configuration/output_stream.feature +0 -24
- data/features/configuration/overriding_global_ordering.feature +0 -93
- data/features/configuration/pattern.feature +0 -38
- data/features/configuration/profile.feature +0 -220
- data/features/configuration/read_options_from_file.feature +0 -90
- data/features/configuration/run_all_when_everything_filtered.feature +0 -76
- data/features/example_groups/aliasing.feature +0 -48
- data/features/example_groups/basic_structure.feature +0 -55
- data/features/example_groups/shared_context.feature +0 -74
- data/features/example_groups/shared_examples.feature +0 -286
- data/features/expectation_framework_integration/configure_expectation_framework.feature +0 -102
- data/features/filtering/exclusion_filters.feature +0 -135
- data/features/filtering/if_and_unless.feature +0 -138
- data/features/filtering/inclusion_filters.feature +0 -101
- data/features/formatters/configurable_colors.feature +0 -31
- data/features/formatters/custom_formatter.feature +0 -68
- data/features/formatters/json_formatter.feature +0 -30
- data/features/formatters/regression_tests.feature +0 -95
- data/features/formatters/text_formatter.feature +0 -46
- data/features/helper_methods/arbitrary_methods.feature +0 -40
- data/features/helper_methods/let.feature +0 -50
- data/features/helper_methods/modules.feature +0 -146
- data/features/hooks/around_hooks.feature +0 -344
- data/features/hooks/before_and_after_hooks.feature +0 -427
- data/features/hooks/filtering.feature +0 -232
- data/features/metadata/current_example.feature +0 -56
- data/features/metadata/described_class.feature +0 -17
- data/features/metadata/user_defined.feature +0 -100
- data/features/mock_framework_integration/use_any_framework.feature +0 -106
- data/features/mock_framework_integration/use_flexmock.feature +0 -94
- data/features/mock_framework_integration/use_mocha.feature +0 -95
- data/features/mock_framework_integration/use_rr.feature +0 -96
- data/features/mock_framework_integration/use_rspec.feature +0 -95
- data/features/pending_and_skipped_examples/README.md +0 -3
- data/features/pending_and_skipped_examples/pending_examples.feature +0 -118
- data/features/pending_and_skipped_examples/skipped_examples.feature +0 -106
- data/features/spec_files/arbitrary_file_suffix.feature +0 -13
- data/features/step_definitions/additional_cli_steps.rb +0 -83
- data/features/subject/explicit_subject.feature +0 -101
- data/features/subject/implicit_subject.feature +0 -63
- data/features/subject/one_liner_syntax.feature +0 -71
- data/features/support/env.rb +0 -21
- data/features/support/require_expect_syntax_in_aruba_specs.rb +0 -16
- data/features/support/rubinius.rb +0 -6
- data/lib/rspec/core/command_line.rb +0 -35
- data/lib/rspec/core/drb_command_line.rb +0 -26
- data/lib/rspec/core/drb_options.rb +0 -87
- data/lib/rspec/core/formatters/legacy_formatter.rb +0 -227
- data/lib/rspec/core/shared_example_group/collection.rb +0 -27
- data/spec/command_line/order_spec.rb +0 -211
- data/spec/rspec/core/backtrace_formatter_spec.rb +0 -230
- data/spec/rspec/core/command_line_spec.rb +0 -112
- data/spec/rspec/core/command_line_spec_output.txt +0 -0
- data/spec/rspec/core/configuration_options_spec.rb +0 -409
- data/spec/rspec/core/configuration_spec.rb +0 -1479
- data/spec/rspec/core/drb_command_line_spec.rb +0 -102
- data/spec/rspec/core/drb_options_spec.rb +0 -193
- data/spec/rspec/core/dsl_spec.rb +0 -88
- data/spec/rspec/core/example_group_spec.rb +0 -1533
- data/spec/rspec/core/example_spec.rb +0 -642
- data/spec/rspec/core/filter_manager_spec.rb +0 -229
- data/spec/rspec/core/formatters/base_formatter_spec.rb +0 -64
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +0 -303
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +0 -208
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +0 -75
- data/spec/rspec/core/formatters/helpers_spec.rb +0 -104
- data/spec/rspec/core/formatters/html_formatted-2.1.0.html +0 -392
- data/spec/rspec/core/formatters/html_formatted.html +0 -397
- data/spec/rspec/core/formatters/html_formatter_spec.rb +0 -122
- data/spec/rspec/core/formatters/json_formatter_spec.rb +0 -206
- data/spec/rspec/core/formatters/legacy_formatter_spec.rb +0 -137
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -43
- data/spec/rspec/core/formatters/snippet_extractor_spec.rb +0 -26
- data/spec/rspec/core/formatters_spec.rb +0 -120
- data/spec/rspec/core/hooks_filtering_spec.rb +0 -227
- data/spec/rspec/core/hooks_spec.rb +0 -294
- data/spec/rspec/core/memoized_helpers_spec.rb +0 -495
- data/spec/rspec/core/metadata_spec.rb +0 -491
- data/spec/rspec/core/option_parser_spec.rb +0 -262
- data/spec/rspec/core/ordering_spec.rb +0 -102
- data/spec/rspec/core/pending_example_spec.rb +0 -117
- data/spec/rspec/core/pending_spec.rb +0 -8
- data/spec/rspec/core/project_initializer_spec.rb +0 -73
- data/spec/rspec/core/rake_task_spec.rb +0 -146
- data/spec/rspec/core/random_spec.rb +0 -47
- data/spec/rspec/core/reporter_spec.rb +0 -155
- data/spec/rspec/core/resources/a_bar.rb +0 -0
- data/spec/rspec/core/resources/a_foo.rb +0 -0
- data/spec/rspec/core/resources/a_spec.rb +0 -1
- data/spec/rspec/core/resources/custom_example_group_runner.rb +0 -14
- data/spec/rspec/core/resources/formatter_specs.rb +0 -58
- data/spec/rspec/core/resources/utf8_encoded.rb +0 -8
- data/spec/rspec/core/rspec_matchers_spec.rb +0 -45
- data/spec/rspec/core/ruby_project_spec.rb +0 -26
- data/spec/rspec/core/runner_spec.rb +0 -151
- data/spec/rspec/core/shared_context_spec.rb +0 -102
- data/spec/rspec/core/shared_example_group/collection_spec.rb +0 -57
- data/spec/rspec/core/shared_example_group_spec.rb +0 -114
- data/spec/rspec/core/warnings_spec.rb +0 -29
- data/spec/rspec/core/world_spec.rb +0 -142
- data/spec/rspec/core_spec.rb +0 -91
- data/spec/spec_helper.rb +0 -160
- data/spec/support/config_options_helper.rb +0 -13
- data/spec/support/formatter_support.rb +0 -83
- data/spec/support/helper_methods.rb +0 -26
- data/spec/support/isolate_load_path_mutation.rb +0 -5
- data/spec/support/isolated_directory.rb +0 -10
- data/spec/support/isolated_home_directory.rb +0 -16
- data/spec/support/legacy_formatter_using_sub_classing_example.rb +0 -87
- data/spec/support/matchers.rb +0 -85
- data/spec/support/mathn_integration_support.rb +0 -12
- data/spec/support/old_style_formatter_example.rb +0 -69
- data/spec/support/shared_example_groups.rb +0 -13
- data/spec/support/spec_files.rb +0 -44
- data/spec/support/stderr_splitter.rb +0 -36
@@ -1,227 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module RSpec::Core
|
4
|
-
RSpec.describe "config block hook filtering" do
|
5
|
-
describe "unfiltered hooks" do
|
6
|
-
it "is run" do
|
7
|
-
filters = []
|
8
|
-
RSpec.configure do |c|
|
9
|
-
c.before(:all) { filters << "before all in config"}
|
10
|
-
c.around(:each) {|example| filters << "around each in config"; example.run}
|
11
|
-
c.before(:each) { filters << "before each in config"}
|
12
|
-
c.after(:each) { filters << "after each in config"}
|
13
|
-
c.after(:all) { filters << "after all in config"}
|
14
|
-
end
|
15
|
-
group = ExampleGroup.describe
|
16
|
-
group.example("example") {}
|
17
|
-
group.run
|
18
|
-
expect(filters).to eq([
|
19
|
-
"before all in config",
|
20
|
-
"around each in config",
|
21
|
-
"before each in config",
|
22
|
-
"after each in config",
|
23
|
-
"after all in config"
|
24
|
-
])
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "hooks with single filters" do
|
29
|
-
|
30
|
-
context "with no scope specified" do
|
31
|
-
it "is run around|before|after :each if the filter matches the example group's filter" do
|
32
|
-
filters = []
|
33
|
-
RSpec.configure do |c|
|
34
|
-
c.around(:match => true) {|example| filters << "around each in config"; example.run}
|
35
|
-
c.before(:match => true) { filters << "before each in config"}
|
36
|
-
c.after(:match => true) { filters << "after each in config"}
|
37
|
-
end
|
38
|
-
group = ExampleGroup.describe(:match => true)
|
39
|
-
group.example("example") {}
|
40
|
-
group.run
|
41
|
-
expect(filters).to eq([
|
42
|
-
"around each in config",
|
43
|
-
"before each in config",
|
44
|
-
"after each in config"
|
45
|
-
])
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
it "is run if the filter matches the example group's filter" do
|
50
|
-
filters = []
|
51
|
-
RSpec.configure do |c|
|
52
|
-
c.before(:all, :match => true) { filters << "before all in config"}
|
53
|
-
c.around(:each, :match => true) {|example| filters << "around each in config"; example.run}
|
54
|
-
c.before(:each, :match => true) { filters << "before each in config"}
|
55
|
-
c.after(:each, :match => true) { filters << "after each in config"}
|
56
|
-
c.after(:all, :match => true) { filters << "after all in config"}
|
57
|
-
end
|
58
|
-
group = ExampleGroup.describe(:match => true)
|
59
|
-
group.example("example") {}
|
60
|
-
group.run
|
61
|
-
expect(filters).to eq([
|
62
|
-
"before all in config",
|
63
|
-
"around each in config",
|
64
|
-
"before each in config",
|
65
|
-
"after each in config",
|
66
|
-
"after all in config"
|
67
|
-
])
|
68
|
-
end
|
69
|
-
|
70
|
-
it "runs before|after :all hooks on matching nested example groups" do
|
71
|
-
filters = []
|
72
|
-
RSpec.configure do |c|
|
73
|
-
c.before(:all, :match => true) { filters << :before_all }
|
74
|
-
c.after(:all, :match => true) { filters << :after_all }
|
75
|
-
end
|
76
|
-
|
77
|
-
example_1_filters = example_2_filters = nil
|
78
|
-
|
79
|
-
group = ExampleGroup.describe "group" do
|
80
|
-
it("example 1") { example_1_filters = filters.dup }
|
81
|
-
describe "subgroup", :match => true do
|
82
|
-
it("example 2") { example_2_filters = filters.dup }
|
83
|
-
end
|
84
|
-
end
|
85
|
-
group.run
|
86
|
-
|
87
|
-
expect(example_1_filters).to be_empty
|
88
|
-
expect(example_2_filters).to eq([:before_all])
|
89
|
-
expect(filters).to eq([:before_all, :after_all])
|
90
|
-
end
|
91
|
-
|
92
|
-
it "runs before|after :all hooks only on the highest level group that matches the filter" do
|
93
|
-
filters = []
|
94
|
-
RSpec.configure do |c|
|
95
|
-
c.before(:all, :match => true) { filters << :before_all }
|
96
|
-
c.after(:all, :match => true) { filters << :after_all }
|
97
|
-
end
|
98
|
-
|
99
|
-
example_1_filters = example_2_filters = example_3_filters = nil
|
100
|
-
|
101
|
-
group = ExampleGroup.describe "group", :match => true do
|
102
|
-
it("example 1") { example_1_filters = filters.dup }
|
103
|
-
describe "subgroup", :match => true do
|
104
|
-
it("example 2") { example_2_filters = filters.dup }
|
105
|
-
describe "sub-subgroup", :match => true do
|
106
|
-
it("example 3") { example_3_filters = filters.dup }
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
group.run
|
111
|
-
|
112
|
-
expect(example_1_filters).to eq([:before_all])
|
113
|
-
expect(example_2_filters).to eq([:before_all])
|
114
|
-
expect(example_3_filters).to eq([:before_all])
|
115
|
-
|
116
|
-
expect(filters).to eq([:before_all, :after_all])
|
117
|
-
end
|
118
|
-
|
119
|
-
it "does not run if the filter doesn't match the example group's filter" do
|
120
|
-
filters = []
|
121
|
-
RSpec.configure do |c|
|
122
|
-
c.before(:all, :match => false) { filters << "before all in config"}
|
123
|
-
c.around(:each, :match => false) {|example| filters << "around each in config"; example.run}
|
124
|
-
c.before(:each, :match => false) { filters << "before each in config"}
|
125
|
-
c.after(:each, :match => false) { filters << "after each in config"}
|
126
|
-
c.after(:all, :match => false) { filters << "after all in config"}
|
127
|
-
end
|
128
|
-
group = ExampleGroup.describe(:match => true)
|
129
|
-
group.example("example") {}
|
130
|
-
group.run
|
131
|
-
expect(filters).to eq([])
|
132
|
-
end
|
133
|
-
|
134
|
-
context "when the hook filters apply to individual examples instead of example groups" do
|
135
|
-
let(:each_filters) { [] }
|
136
|
-
let(:all_filters) { [] }
|
137
|
-
|
138
|
-
let(:group) do
|
139
|
-
md = example_metadata
|
140
|
-
ExampleGroup.describe do
|
141
|
-
it("example", md) { }
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def filters
|
146
|
-
each_filters + all_filters
|
147
|
-
end
|
148
|
-
|
149
|
-
before(:each) do
|
150
|
-
af, ef = all_filters, each_filters
|
151
|
-
|
152
|
-
RSpec.configure do |c|
|
153
|
-
c.before(:all, :foo => :bar) { af << "before all in config"}
|
154
|
-
c.around(:each, :foo => :bar) {|example| ef << "around each in config"; example.run}
|
155
|
-
c.before(:each, :foo => :bar) { ef << "before each in config"}
|
156
|
-
c.after(:each, :foo => :bar) { ef << "after each in config"}
|
157
|
-
c.after(:all, :foo => :bar) { af << "after all in config"}
|
158
|
-
end
|
159
|
-
|
160
|
-
group.run
|
161
|
-
end
|
162
|
-
|
163
|
-
describe 'an example with matching metadata' do
|
164
|
-
let(:example_metadata) { { :foo => :bar } }
|
165
|
-
|
166
|
-
it "runs the `:each` hooks" do
|
167
|
-
expect(each_filters).to eq([
|
168
|
-
'around each in config',
|
169
|
-
'before each in config',
|
170
|
-
'after each in config'
|
171
|
-
])
|
172
|
-
end
|
173
|
-
|
174
|
-
it "does not run the `:all` hooks" do
|
175
|
-
expect(all_filters).to be_empty
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
describe 'an example without matching metadata' do
|
180
|
-
let(:example_metadata) { { :foo => :bazz } }
|
181
|
-
|
182
|
-
it "does not run any of the hooks" do
|
183
|
-
expect(filters).to be_empty
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
describe "hooks with multiple filters" do
|
190
|
-
it "is run if all hook filters match the group's filters" do
|
191
|
-
filters = []
|
192
|
-
RSpec.configure do |c|
|
193
|
-
c.before(:all, :one => 1) { filters << "before all in config"}
|
194
|
-
c.around(:each, :two => 2, :one => 1) {|example| filters << "around each in config"; example.run}
|
195
|
-
c.before(:each, :one => 1, :two => 2) { filters << "before each in config"}
|
196
|
-
c.after(:each, :one => 1, :two => 2, :three => 3) { filters << "after each in config"}
|
197
|
-
c.after(:all, :one => 1, :three => 3) { filters << "after all in config"}
|
198
|
-
end
|
199
|
-
group = ExampleGroup.describe(:one => 1, :two => 2, :three => 3)
|
200
|
-
group.example("example") {}
|
201
|
-
group.run
|
202
|
-
expect(filters).to eq([
|
203
|
-
"before all in config",
|
204
|
-
"around each in config",
|
205
|
-
"before each in config",
|
206
|
-
"after each in config",
|
207
|
-
"after all in config"
|
208
|
-
])
|
209
|
-
end
|
210
|
-
|
211
|
-
it "does not run if some hook filters don't match the group's filters" do
|
212
|
-
filters = []
|
213
|
-
RSpec.configure do |c|
|
214
|
-
c.before(:all, :one => 1, :four => 4) { filters << "before all in config"}
|
215
|
-
c.around(:each, :two => 2, :four => 4) {|example| filters << "around each in config"; example.run}
|
216
|
-
c.before(:each, :one => 1, :two => 2, :four => 4) { filters << "before each in config"}
|
217
|
-
c.after(:each, :one => 1, :two => 2, :three => 3, :four => 4) { filters << "after each in config"}
|
218
|
-
c.after(:all, :one => 1, :three => 3, :four => 4) { filters << "after all in config"}
|
219
|
-
end
|
220
|
-
group = ExampleGroup.describe(:one => 1, :two => 2, :three => 3)
|
221
|
-
group.example("example") {}
|
222
|
-
group.run
|
223
|
-
expect(filters).to eq([])
|
224
|
-
end
|
225
|
-
end
|
226
|
-
end
|
227
|
-
end
|
@@ -1,294 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module RSpec::Core
|
4
|
-
RSpec.describe Hooks do
|
5
|
-
class HooksHost
|
6
|
-
include Hooks
|
7
|
-
|
8
|
-
def parent_groups
|
9
|
-
[]
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
[:before, :after, :around].each do |type|
|
14
|
-
[:each, :all].each do |scope|
|
15
|
-
next if type == :around && scope == :all
|
16
|
-
|
17
|
-
describe "##{type}(#{scope})" do
|
18
|
-
it_behaves_like "metadata hash builder" do
|
19
|
-
define_method :metadata_hash do |*args|
|
20
|
-
instance = HooksHost.new
|
21
|
-
args.unshift scope if scope
|
22
|
-
hooks = instance.send(type, *args) {}
|
23
|
-
hooks.first.options
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "##{type}(no scope)" do
|
30
|
-
let(:instance) { HooksHost.new }
|
31
|
-
|
32
|
-
it "defaults to :each scope if no arguments are given" do
|
33
|
-
hooks = instance.send(type) {}
|
34
|
-
hook = hooks.first
|
35
|
-
expect(instance.hooks[type][:each]).to include(hook)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "defaults to :each scope if the only argument is a metadata hash" do
|
39
|
-
hooks = instance.send(type, :foo => :bar) {}
|
40
|
-
hook = hooks.first
|
41
|
-
expect(instance.hooks[type][:each]).to include(hook)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "raises an error if only metadata symbols are given as arguments" do
|
45
|
-
expect { instance.send(type, :foo, :bar) {} }.to raise_error(ArgumentError)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
[:before, :after].each do |type|
|
51
|
-
[:each, :all, :suite].each do |scope|
|
52
|
-
describe "##{type}(#{scope.inspect})" do
|
53
|
-
let(:instance) { HooksHost.new }
|
54
|
-
let!(:hook) do
|
55
|
-
hooks = instance.send(type, scope) {}
|
56
|
-
hooks.first
|
57
|
-
end
|
58
|
-
|
59
|
-
it "does not make #{scope.inspect} a metadata key" do
|
60
|
-
expect(hook.options).to be_empty
|
61
|
-
end
|
62
|
-
|
63
|
-
it "is scoped to #{scope.inspect}" do
|
64
|
-
expect(instance.hooks[type][scope]).to include(hook)
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'does not run when in dry run mode' do
|
68
|
-
RSpec.configuration.dry_run = true
|
69
|
-
|
70
|
-
expect { |b|
|
71
|
-
instance.send(type, scope, &b)
|
72
|
-
instance.hooks.run(type, scope)
|
73
|
-
}.not_to yield_control
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe "#around" do
|
80
|
-
context "when not running the example within the around block" do
|
81
|
-
it "does not run the example" do
|
82
|
-
examples = []
|
83
|
-
group = ExampleGroup.describe do
|
84
|
-
around do
|
85
|
-
end
|
86
|
-
it "foo" do
|
87
|
-
examples << self
|
88
|
-
end
|
89
|
-
end
|
90
|
-
group.run
|
91
|
-
expect(examples).to eq([])
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context "when running the example within the around block" do
|
96
|
-
it "runs the example" do
|
97
|
-
examples = []
|
98
|
-
group = ExampleGroup.describe do
|
99
|
-
around do |example|
|
100
|
-
example.run
|
101
|
-
end
|
102
|
-
it "foo" do
|
103
|
-
examples << self
|
104
|
-
end
|
105
|
-
end
|
106
|
-
group.run
|
107
|
-
expect(examples.count).to eq(1)
|
108
|
-
end
|
109
|
-
|
110
|
-
it "exposes example metadata to each around hook" do
|
111
|
-
foos = {}
|
112
|
-
group = ExampleGroup.describe do
|
113
|
-
around do |ex|
|
114
|
-
foos[:first] = ex.metadata[:foo]
|
115
|
-
ex.run
|
116
|
-
end
|
117
|
-
around do |ex|
|
118
|
-
foos[:second] = ex.metadata[:foo]
|
119
|
-
ex.run
|
120
|
-
end
|
121
|
-
it "does something", :foo => :bar do
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
group.run
|
126
|
-
expect(foos).to eq({:first => :bar, :second => :bar})
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
context "when running the example within a block passed to a method" do
|
131
|
-
it "runs the example" do
|
132
|
-
examples = []
|
133
|
-
group = ExampleGroup.describe do
|
134
|
-
def yielder
|
135
|
-
yield
|
136
|
-
end
|
137
|
-
|
138
|
-
around do |example|
|
139
|
-
yielder { example.run }
|
140
|
-
end
|
141
|
-
|
142
|
-
it "foo" do
|
143
|
-
examples << self
|
144
|
-
end
|
145
|
-
end
|
146
|
-
group.run
|
147
|
-
expect(examples.count).to eq(1)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
[:all, :each].each do |scope|
|
153
|
-
describe "prepend_before(#{scope})" do
|
154
|
-
it "adds to the front of the list of before(:#{scope}) hooks" do
|
155
|
-
messages = []
|
156
|
-
|
157
|
-
RSpec.configure { |config| config.before(scope) { messages << "config 3" } }
|
158
|
-
RSpec.configure { |config| config.prepend_before(scope) { messages << "config 2" } }
|
159
|
-
RSpec.configure { |config| config.before(scope) { messages << "config 4" } }
|
160
|
-
RSpec.configure { |config| config.prepend_before(scope) { messages << "config 1" } }
|
161
|
-
|
162
|
-
group = ExampleGroup.describe { example {} }
|
163
|
-
group.before(scope) { messages << "group 3" }
|
164
|
-
group.prepend_before(scope) { messages << "group 2" }
|
165
|
-
group.before(scope) { messages << "group 4" }
|
166
|
-
group.prepend_before(scope) { messages << "group 1" }
|
167
|
-
|
168
|
-
group.run
|
169
|
-
|
170
|
-
expect(messages).to eq([
|
171
|
-
'group 1',
|
172
|
-
'group 2',
|
173
|
-
'config 1',
|
174
|
-
'config 2',
|
175
|
-
'config 3',
|
176
|
-
'config 4',
|
177
|
-
'group 3',
|
178
|
-
'group 4'
|
179
|
-
])
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
describe "append_before(#{scope})" do
|
184
|
-
it "adds to the back of the list of before(:#{scope}) hooks (same as `before`)" do
|
185
|
-
messages = []
|
186
|
-
|
187
|
-
RSpec.configure { |config| config.before(scope) { messages << "config 1" } }
|
188
|
-
RSpec.configure { |config| config.append_before(scope) { messages << "config 2" } }
|
189
|
-
RSpec.configure { |config| config.before(scope) { messages << "config 3" } }
|
190
|
-
|
191
|
-
group = ExampleGroup.describe { example {} }
|
192
|
-
group.before(scope) { messages << "group 1" }
|
193
|
-
group.append_before(scope) { messages << "group 2" }
|
194
|
-
group.before(scope) { messages << "group 3" }
|
195
|
-
|
196
|
-
group.run
|
197
|
-
|
198
|
-
expect(messages).to eq([
|
199
|
-
'config 1',
|
200
|
-
'config 2',
|
201
|
-
'config 3',
|
202
|
-
'group 1',
|
203
|
-
'group 2',
|
204
|
-
'group 3'
|
205
|
-
])
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
describe "prepend_after(#{scope})" do
|
210
|
-
it "adds to the front of the list of after(:#{scope}) hooks (same as `after`)" do
|
211
|
-
messages = []
|
212
|
-
|
213
|
-
RSpec.configure { |config| config.after(scope) { messages << "config 3" } }
|
214
|
-
RSpec.configure { |config| config.prepend_after(scope) { messages << "config 2" } }
|
215
|
-
RSpec.configure { |config| config.after(scope) { messages << "config 1" } }
|
216
|
-
|
217
|
-
group = ExampleGroup.describe { example {} }
|
218
|
-
group.after(scope) { messages << "group 3" }
|
219
|
-
group.prepend_after(scope) { messages << "group 2" }
|
220
|
-
group.after(scope) { messages << "group 1" }
|
221
|
-
|
222
|
-
group.run
|
223
|
-
|
224
|
-
expect(messages).to eq([
|
225
|
-
'group 1',
|
226
|
-
'group 2',
|
227
|
-
'group 3',
|
228
|
-
'config 1',
|
229
|
-
'config 2',
|
230
|
-
'config 3'
|
231
|
-
])
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
describe "append_after(#{scope})" do
|
236
|
-
it "adds to the back of the list of after(:#{scope}) hooks" do
|
237
|
-
messages = []
|
238
|
-
|
239
|
-
RSpec.configure { |config| config.after(scope) { messages << "config 2" } }
|
240
|
-
RSpec.configure { |config| config.append_after(scope) { messages << "config 3" } }
|
241
|
-
RSpec.configure { |config| config.after(scope) { messages << "config 1" } }
|
242
|
-
RSpec.configure { |config| config.append_after(scope) { messages << "config 4" } }
|
243
|
-
|
244
|
-
group = ExampleGroup.describe { example {} }
|
245
|
-
group.after(scope) { messages << "group 2" }
|
246
|
-
group.append_after(scope) { messages << "group 3" }
|
247
|
-
group.after(scope) { messages << "group 1" }
|
248
|
-
group.append_after(scope) { messages << "group 4" }
|
249
|
-
|
250
|
-
group.run
|
251
|
-
|
252
|
-
expect(messages).to eq([
|
253
|
-
'group 1',
|
254
|
-
'group 2',
|
255
|
-
'config 1',
|
256
|
-
'config 2',
|
257
|
-
'config 3',
|
258
|
-
'config 4',
|
259
|
-
'group 3',
|
260
|
-
'group 4'
|
261
|
-
])
|
262
|
-
end
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
describe "lambda" do
|
267
|
-
it "can be used as a hook" do
|
268
|
-
messages = []
|
269
|
-
count = 0
|
270
|
-
hook = lambda {|e| messages << "hook #{count = count + 1}"; e.run }
|
271
|
-
|
272
|
-
RSpec.configure do |c|
|
273
|
-
c.around(:each, &hook)
|
274
|
-
c.around(:each, &hook)
|
275
|
-
end
|
276
|
-
|
277
|
-
group = ExampleGroup.describe { example { messages << "example" } }
|
278
|
-
group.run
|
279
|
-
expect(messages).to eq ["hook 1", "hook 2", "example"]
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
it "only defines methods that are intended to be part of RSpec's public API (+ `hooks`)" do
|
284
|
-
expect(Hooks.private_instance_methods).to eq([])
|
285
|
-
|
286
|
-
expect(Hooks.instance_methods.map(&:to_sym)).to match_array([
|
287
|
-
:before, :after, :around,
|
288
|
-
:append_before, :append_after,
|
289
|
-
:prepend_before, :prepend_after,
|
290
|
-
:hooks
|
291
|
-
])
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|