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.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.yardopts +1 -0
  5. data/Changelog.md +297 -57
  6. data/README.md +16 -13
  7. data/lib/rspec/core.rb +55 -84
  8. data/lib/rspec/core/backport_random.rb +35 -3
  9. data/lib/rspec/core/backtrace_formatter.rb +4 -13
  10. data/lib/rspec/core/configuration.rb +330 -114
  11. data/lib/rspec/core/configuration_options.rb +38 -22
  12. data/lib/rspec/core/drb.rb +111 -0
  13. data/lib/rspec/core/dsl.rb +8 -2
  14. data/lib/rspec/core/example.rb +203 -94
  15. data/lib/rspec/core/example_group.rb +344 -316
  16. data/lib/rspec/core/filter_manager.rb +135 -90
  17. data/lib/rspec/core/flat_map.rb +1 -0
  18. data/lib/rspec/core/formatters.rb +50 -14
  19. data/lib/rspec/core/formatters/base_formatter.rb +32 -138
  20. data/lib/rspec/core/formatters/base_text_formatter.rb +32 -253
  21. data/lib/rspec/core/formatters/console_codes.rb +65 -0
  22. data/lib/rspec/core/formatters/deprecation_formatter.rb +24 -15
  23. data/lib/rspec/core/formatters/documentation_formatter.rb +7 -10
  24. data/lib/rspec/core/formatters/helpers.rb +15 -9
  25. data/lib/rspec/core/formatters/html_formatter.rb +17 -16
  26. data/lib/rspec/core/formatters/html_printer.rb +1 -0
  27. data/lib/rspec/core/formatters/json_formatter.rb +18 -20
  28. data/lib/rspec/core/formatters/profile_formatter.rb +67 -0
  29. data/lib/rspec/core/formatters/progress_formatter.rb +6 -7
  30. data/lib/rspec/core/formatters/snippet_extractor.rb +8 -6
  31. data/lib/rspec/core/hooks.rb +131 -125
  32. data/lib/rspec/core/memoized_helpers.rb +31 -26
  33. data/lib/rspec/core/metadata.rb +277 -184
  34. data/lib/rspec/core/metadata_filter.rb +86 -0
  35. data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
  36. data/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  37. data/lib/rspec/core/mocking_adapters/mocha.rb +1 -1
  38. data/lib/rspec/core/mocking_adapters/null.rb +1 -1
  39. data/lib/rspec/core/mocking_adapters/rr.rb +2 -1
  40. data/lib/rspec/core/mocking_adapters/rspec.rb +1 -1
  41. data/lib/rspec/core/notifications.rb +435 -24
  42. data/lib/rspec/core/option_parser.rb +16 -25
  43. data/lib/rspec/core/ordering.rb +3 -1
  44. data/lib/rspec/core/pending.rb +57 -33
  45. data/lib/rspec/core/project_initializer.rb +2 -0
  46. data/lib/rspec/core/project_initializer/spec_helper.rb +5 -4
  47. data/lib/rspec/core/rake_task.rb +45 -20
  48. data/lib/rspec/core/reporter.rb +50 -22
  49. data/lib/rspec/core/ruby_project.rb +1 -0
  50. data/lib/rspec/core/runner.rb +93 -39
  51. data/lib/rspec/core/shared_context.rb +7 -5
  52. data/lib/rspec/core/shared_example_group.rb +85 -77
  53. data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  54. data/lib/rspec/core/version.rb +3 -1
  55. data/lib/rspec/core/warnings.rb +35 -17
  56. data/lib/rspec/core/world.rb +57 -5
  57. metadata +56 -369
  58. metadata.gz.sig +3 -3
  59. data/features/README.md +0 -13
  60. data/features/Upgrade.md +0 -352
  61. data/features/command_line/README.md +0 -25
  62. data/features/command_line/dry_run.feature +0 -29
  63. data/features/command_line/example_name_option.feature +0 -97
  64. data/features/command_line/exit_status.feature +0 -82
  65. data/features/command_line/fail_fast.feature +0 -26
  66. data/features/command_line/format_option.feature +0 -75
  67. data/features/command_line/init.feature +0 -57
  68. data/features/command_line/line_number_appended_to_path.feature +0 -140
  69. data/features/command_line/line_number_option.feature +0 -58
  70. data/features/command_line/order.feature +0 -25
  71. data/features/command_line/pattern_option.feature +0 -49
  72. data/features/command_line/rake_task.feature +0 -122
  73. data/features/command_line/randomization.feature +0 -63
  74. data/features/command_line/require_option.feature +0 -43
  75. data/features/command_line/ruby.feature +0 -23
  76. data/features/command_line/tag.feature +0 -98
  77. data/features/command_line/warnings_option.feature +0 -29
  78. data/features/configuration/alias_example_to.feature +0 -39
  79. data/features/configuration/backtrace_exclusion_patterns.feature +0 -105
  80. data/features/configuration/custom_settings.feature +0 -84
  81. data/features/configuration/default_path.feature +0 -38
  82. data/features/configuration/deprecation_stream.feature +0 -58
  83. data/features/configuration/enable_global_dsl.feature +0 -54
  84. data/features/configuration/fail_fast.feature +0 -77
  85. data/features/configuration/failure_exit_code.feature +0 -36
  86. data/features/configuration/order_and_seed.feature +0 -3
  87. data/features/configuration/output_stream.feature +0 -24
  88. data/features/configuration/overriding_global_ordering.feature +0 -93
  89. data/features/configuration/pattern.feature +0 -38
  90. data/features/configuration/profile.feature +0 -220
  91. data/features/configuration/read_options_from_file.feature +0 -90
  92. data/features/configuration/run_all_when_everything_filtered.feature +0 -76
  93. data/features/example_groups/aliasing.feature +0 -48
  94. data/features/example_groups/basic_structure.feature +0 -55
  95. data/features/example_groups/shared_context.feature +0 -74
  96. data/features/example_groups/shared_examples.feature +0 -286
  97. data/features/expectation_framework_integration/configure_expectation_framework.feature +0 -102
  98. data/features/filtering/exclusion_filters.feature +0 -135
  99. data/features/filtering/if_and_unless.feature +0 -138
  100. data/features/filtering/inclusion_filters.feature +0 -101
  101. data/features/formatters/configurable_colors.feature +0 -31
  102. data/features/formatters/custom_formatter.feature +0 -68
  103. data/features/formatters/json_formatter.feature +0 -30
  104. data/features/formatters/regression_tests.feature +0 -95
  105. data/features/formatters/text_formatter.feature +0 -46
  106. data/features/helper_methods/arbitrary_methods.feature +0 -40
  107. data/features/helper_methods/let.feature +0 -50
  108. data/features/helper_methods/modules.feature +0 -146
  109. data/features/hooks/around_hooks.feature +0 -344
  110. data/features/hooks/before_and_after_hooks.feature +0 -427
  111. data/features/hooks/filtering.feature +0 -232
  112. data/features/metadata/current_example.feature +0 -56
  113. data/features/metadata/described_class.feature +0 -17
  114. data/features/metadata/user_defined.feature +0 -100
  115. data/features/mock_framework_integration/use_any_framework.feature +0 -106
  116. data/features/mock_framework_integration/use_flexmock.feature +0 -94
  117. data/features/mock_framework_integration/use_mocha.feature +0 -95
  118. data/features/mock_framework_integration/use_rr.feature +0 -96
  119. data/features/mock_framework_integration/use_rspec.feature +0 -95
  120. data/features/pending_and_skipped_examples/README.md +0 -3
  121. data/features/pending_and_skipped_examples/pending_examples.feature +0 -118
  122. data/features/pending_and_skipped_examples/skipped_examples.feature +0 -106
  123. data/features/spec_files/arbitrary_file_suffix.feature +0 -13
  124. data/features/step_definitions/additional_cli_steps.rb +0 -83
  125. data/features/subject/explicit_subject.feature +0 -101
  126. data/features/subject/implicit_subject.feature +0 -63
  127. data/features/subject/one_liner_syntax.feature +0 -71
  128. data/features/support/env.rb +0 -21
  129. data/features/support/require_expect_syntax_in_aruba_specs.rb +0 -16
  130. data/features/support/rubinius.rb +0 -6
  131. data/lib/rspec/core/command_line.rb +0 -35
  132. data/lib/rspec/core/drb_command_line.rb +0 -26
  133. data/lib/rspec/core/drb_options.rb +0 -87
  134. data/lib/rspec/core/formatters/legacy_formatter.rb +0 -227
  135. data/lib/rspec/core/shared_example_group/collection.rb +0 -27
  136. data/spec/command_line/order_spec.rb +0 -211
  137. data/spec/rspec/core/backtrace_formatter_spec.rb +0 -230
  138. data/spec/rspec/core/command_line_spec.rb +0 -112
  139. data/spec/rspec/core/command_line_spec_output.txt +0 -0
  140. data/spec/rspec/core/configuration_options_spec.rb +0 -409
  141. data/spec/rspec/core/configuration_spec.rb +0 -1479
  142. data/spec/rspec/core/drb_command_line_spec.rb +0 -102
  143. data/spec/rspec/core/drb_options_spec.rb +0 -193
  144. data/spec/rspec/core/dsl_spec.rb +0 -88
  145. data/spec/rspec/core/example_group_spec.rb +0 -1533
  146. data/spec/rspec/core/example_spec.rb +0 -642
  147. data/spec/rspec/core/filter_manager_spec.rb +0 -229
  148. data/spec/rspec/core/formatters/base_formatter_spec.rb +0 -64
  149. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +0 -303
  150. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +0 -208
  151. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +0 -75
  152. data/spec/rspec/core/formatters/helpers_spec.rb +0 -104
  153. data/spec/rspec/core/formatters/html_formatted-2.1.0.html +0 -392
  154. data/spec/rspec/core/formatters/html_formatted.html +0 -397
  155. data/spec/rspec/core/formatters/html_formatter_spec.rb +0 -122
  156. data/spec/rspec/core/formatters/json_formatter_spec.rb +0 -206
  157. data/spec/rspec/core/formatters/legacy_formatter_spec.rb +0 -137
  158. data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -43
  159. data/spec/rspec/core/formatters/snippet_extractor_spec.rb +0 -26
  160. data/spec/rspec/core/formatters_spec.rb +0 -120
  161. data/spec/rspec/core/hooks_filtering_spec.rb +0 -227
  162. data/spec/rspec/core/hooks_spec.rb +0 -294
  163. data/spec/rspec/core/memoized_helpers_spec.rb +0 -495
  164. data/spec/rspec/core/metadata_spec.rb +0 -491
  165. data/spec/rspec/core/option_parser_spec.rb +0 -262
  166. data/spec/rspec/core/ordering_spec.rb +0 -102
  167. data/spec/rspec/core/pending_example_spec.rb +0 -117
  168. data/spec/rspec/core/pending_spec.rb +0 -8
  169. data/spec/rspec/core/project_initializer_spec.rb +0 -73
  170. data/spec/rspec/core/rake_task_spec.rb +0 -146
  171. data/spec/rspec/core/random_spec.rb +0 -47
  172. data/spec/rspec/core/reporter_spec.rb +0 -155
  173. data/spec/rspec/core/resources/a_bar.rb +0 -0
  174. data/spec/rspec/core/resources/a_foo.rb +0 -0
  175. data/spec/rspec/core/resources/a_spec.rb +0 -1
  176. data/spec/rspec/core/resources/custom_example_group_runner.rb +0 -14
  177. data/spec/rspec/core/resources/formatter_specs.rb +0 -58
  178. data/spec/rspec/core/resources/utf8_encoded.rb +0 -8
  179. data/spec/rspec/core/rspec_matchers_spec.rb +0 -45
  180. data/spec/rspec/core/ruby_project_spec.rb +0 -26
  181. data/spec/rspec/core/runner_spec.rb +0 -151
  182. data/spec/rspec/core/shared_context_spec.rb +0 -102
  183. data/spec/rspec/core/shared_example_group/collection_spec.rb +0 -57
  184. data/spec/rspec/core/shared_example_group_spec.rb +0 -114
  185. data/spec/rspec/core/warnings_spec.rb +0 -29
  186. data/spec/rspec/core/world_spec.rb +0 -142
  187. data/spec/rspec/core_spec.rb +0 -91
  188. data/spec/spec_helper.rb +0 -160
  189. data/spec/support/config_options_helper.rb +0 -13
  190. data/spec/support/formatter_support.rb +0 -83
  191. data/spec/support/helper_methods.rb +0 -26
  192. data/spec/support/isolate_load_path_mutation.rb +0 -5
  193. data/spec/support/isolated_directory.rb +0 -10
  194. data/spec/support/isolated_home_directory.rb +0 -16
  195. data/spec/support/legacy_formatter_using_sub_classing_example.rb +0 -87
  196. data/spec/support/matchers.rb +0 -85
  197. data/spec/support/mathn_integration_support.rb +0 -12
  198. data/spec/support/old_style_formatter_example.rb +0 -69
  199. data/spec/support/shared_example_groups.rb +0 -13
  200. data/spec/support/spec_files.rb +0 -44
  201. data/spec/support/stderr_splitter.rb +0 -36
@@ -1,642 +0,0 @@
1
- require 'spec_helper'
2
- require 'pp'
3
- require 'stringio'
4
-
5
- RSpec.describe RSpec::Core::Example, :parent_metadata => 'sample' do
6
- let(:example_group) do
7
- RSpec::Core::ExampleGroup.describe('group description')
8
- end
9
-
10
- let(:example_instance) do
11
- example_group.example('example description') { }
12
- end
13
-
14
- it_behaves_like "metadata hash builder" do
15
- def metadata_hash(*args)
16
- example = example_group.example('example description', *args)
17
- example.metadata
18
- end
19
- end
20
-
21
- def capture_stdout
22
- orig_stdout = $stdout
23
- $stdout = StringIO.new
24
- yield
25
- $stdout.string
26
- ensure
27
- $stdout = orig_stdout
28
- end
29
-
30
- it "can be pretty printed" do
31
- output = ignoring_warnings { capture_stdout { pp example_instance } }
32
- expect(output).to include("RSpec::Core::Example")
33
- end
34
-
35
- describe "#exception" do
36
- it "supplies the first exception raised, if any" do
37
- RSpec.configuration.output_stream = StringIO.new
38
-
39
- example = example_group.example { raise "first" }
40
- example_group.after { raise "second" }
41
- example_group.run
42
- expect(example.exception.message).to eq("first")
43
- end
44
-
45
- it "returns nil if there is no exception" do
46
- example = example_group.example('example') { }
47
- example_group.run
48
- expect(example.exception).to be_nil
49
- end
50
- end
51
-
52
- describe "when there is an explicit description" do
53
- context "when RSpec.configuration.format_docstrings is set to a block" do
54
- it "formats the description using the block" do
55
- RSpec.configuration.format_docstrings { |s| s.strip }
56
- example = example_group.example(' an example with whitespace ') {}
57
- example_group.run
58
- expect(example.description).to eql('an example with whitespace')
59
- end
60
- end
61
- end
62
-
63
- describe "when there is no explicit description" do
64
- def expect_with(*frameworks)
65
- allow(RSpec.configuration).to receive(:expecting_with_rspec?).and_return(frameworks.include?(:rspec))
66
-
67
- if frameworks.include?(:stdlib)
68
- example_group.class_eval do
69
- def assert(val)
70
- raise "Expected #{val} to be true" unless val
71
- end
72
- end
73
- end
74
- end
75
-
76
- context "when RSpec.configuration.format_docstrings is set to a block" do
77
- it "formats the description using the block" do
78
- RSpec.configuration.format_docstrings { |s| s.upcase }
79
- example_group.example { expect(5).to eq(5) }
80
- example_group.run
81
- pattern = /EXAMPLE AT #{relative_path(__FILE__).upcase}:#{__LINE__ - 2}/
82
- expect(example_group.examples.first.description).to match(pattern)
83
- end
84
- end
85
-
86
- context "when `expect_with :rspec` is configured" do
87
- before(:each) { expect_with :rspec }
88
-
89
- it "uses the matcher-generated description" do
90
- example_group.example { expect(5).to eq(5) }
91
- example_group.run
92
- expect(example_group.examples.first.description).to eq("should eq 5")
93
- end
94
-
95
- it "uses the matcher-generated description in the full description" do
96
- example_group.example { expect(5).to eq(5) }
97
- example_group.run
98
- expect(example_group.examples.first.full_description).to eq("group description should eq 5")
99
- end
100
-
101
- it "uses the file and line number if there is no matcher-generated description" do
102
- example = example_group.example {}
103
- example_group.run
104
- expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 2}/)
105
- end
106
-
107
- it "uses the file and line number if there is an error before the matcher" do
108
- example = example_group.example { expect(5).to eq(5) }
109
- example_group.before { raise }
110
- example_group.run
111
- expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 3}/)
112
- end
113
-
114
- context "if the example is pending" do
115
- it "still uses the matcher-generated description if a matcher ran" do
116
- example = example_group.example { pending; expect(4).to eq(5) }
117
- example_group.run
118
- expect(example.description).to eq("should eq 5")
119
- end
120
-
121
- it "uses the file and line number of the example if no matcher ran" do
122
- example = example_group.example { pending; fail }
123
- example_group.run
124
- expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 2}/)
125
- end
126
- end
127
- end
128
-
129
- context "when `expect_with :rspec, :stdlib` is configured" do
130
- before(:each) { expect_with :rspec, :stdlib }
131
-
132
- it "uses the matcher-generated description" do
133
- example_group.example { expect(5).to eq(5) }
134
- example_group.run
135
- expect(example_group.examples.first.description).to eq("should eq 5")
136
- end
137
-
138
- it "uses the file and line number if there is no matcher-generated description" do
139
- example = example_group.example {}
140
- example_group.run
141
- expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 2}/)
142
- end
143
-
144
- it "uses the file and line number if there is an error before the matcher" do
145
- example = example_group.example { expect(5).to eq(5) }
146
- example_group.before { raise }
147
- example_group.run
148
- expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 3}/)
149
- end
150
- end
151
-
152
- context "when `expect_with :stdlib` is configured" do
153
- before(:each) { expect_with :stdlib }
154
-
155
- it "does not attempt to get the generated description from RSpec::Matchers" do
156
- expect(RSpec::Matchers).not_to receive(:generated_description)
157
- example_group.example { assert 5 == 5 }
158
- example_group.run
159
- end
160
-
161
- it "uses the file and line number" do
162
- example = example_group.example { assert 5 == 5 }
163
- example_group.run
164
- expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 2}/)
165
- end
166
- end
167
- end
168
-
169
- describe "#described_class" do
170
- it "returns the class (if any) of the outermost example group" do
171
- expect(described_class).to eq(RSpec::Core::Example)
172
- end
173
- end
174
-
175
- describe "accessing metadata within a running example" do
176
- it "has a reference to itself when running" do |ex|
177
- expect(ex.description).to eq("has a reference to itself when running")
178
- end
179
-
180
- it "can access the example group's top level metadata as if it were its own" do |ex|
181
- expect(ex.example_group.metadata).to include(:parent_metadata => 'sample')
182
- expect(ex.metadata).to include(:parent_metadata => 'sample')
183
- end
184
- end
185
-
186
- describe "accessing options within a running example" do
187
- it "can look up option values by key", :demo => :data do |ex|
188
- expect(ex.metadata[:demo]).to eq(:data)
189
- end
190
- end
191
-
192
- describe "#run" do
193
- it "sets its reference to the example group instance to nil" do
194
- group = RSpec::Core::ExampleGroup.describe do
195
- example('example') { expect(1).to eq(1) }
196
- end
197
- group.run
198
- expect(group.examples.first.instance_variable_get("@example_group_instance")).to be_nil
199
- end
200
-
201
- it "runs after(:each) when the example passes" do
202
- after_run = false
203
- group = RSpec::Core::ExampleGroup.describe do
204
- after(:each) { after_run = true }
205
- example('example') { expect(1).to eq(1) }
206
- end
207
- group.run
208
- expect(after_run).to be_truthy, "expected after(:each) to be run"
209
- end
210
-
211
- it "runs after(:each) when the example fails" do
212
- after_run = false
213
- group = RSpec::Core::ExampleGroup.describe do
214
- after(:each) { after_run = true }
215
- example('example') { expect(1).to eq(2) }
216
- end
217
- group.run
218
- expect(after_run).to be_truthy, "expected after(:each) to be run"
219
- end
220
-
221
- it "runs after(:each) when the example raises an Exception" do
222
- after_run = false
223
- group = RSpec::Core::ExampleGroup.describe do
224
- after(:each) { after_run = true }
225
- example('example') { raise "this error" }
226
- end
227
- group.run
228
- expect(after_run).to be_truthy, "expected after(:each) to be run"
229
- end
230
-
231
- context "with an after(:each) that raises" do
232
- it "runs subsequent after(:each)'s" do
233
- after_run = false
234
- group = RSpec::Core::ExampleGroup.describe do
235
- after(:each) { after_run = true }
236
- after(:each) { raise "FOO" }
237
- example('example') { expect(1).to eq(1) }
238
- end
239
- group.run
240
- expect(after_run).to be_truthy, "expected after(:each) to be run"
241
- end
242
-
243
- it "stores the exception" do
244
- group = RSpec::Core::ExampleGroup.describe
245
- group.after(:each) { raise "FOO" }
246
- example = group.example('example') { expect(1).to eq(1) }
247
-
248
- group.run
249
-
250
- expect(example.metadata[:execution_result][:exception].message).to eq("FOO")
251
- end
252
- end
253
-
254
- it "wraps before/after(:each) inside around" do
255
- results = []
256
- group = RSpec::Core::ExampleGroup.describe do
257
- around(:each) do |e|
258
- results << "around (before)"
259
- e.run
260
- results << "around (after)"
261
- end
262
- before(:each) { results << "before" }
263
- after(:each) { results << "after" }
264
- example { results << "example" }
265
- end
266
-
267
- group.run
268
- expect(results).to eq([
269
- "around (before)",
270
- "before",
271
- "example",
272
- "after",
273
- "around (after)"
274
- ])
275
- end
276
-
277
- context "clearing ivars" do
278
- it "sets ivars to nil to prep them for GC" do
279
- group = RSpec::Core::ExampleGroup.describe do
280
- before(:all) { @before_all = :before_all }
281
- before(:each) { @before_each = :before_each }
282
- after(:each) { @after_each = :after_each }
283
- after(:all) { @after_all = :after_all }
284
- end
285
- group.example("does something") do
286
- expect(@before_all).to eq(:before_all)
287
- expect(@before_each).to eq(:before_each)
288
- end
289
- expect(group.run(double.as_null_object)).to be_truthy
290
- group.new do |example|
291
- %w[@before_all @before_each @after_each @after_all].each do |ivar|
292
- expect(example.instance_variable_get(ivar)).to be_nil
293
- end
294
- end
295
- end
296
-
297
- it "does not impact the before_all_ivars which are copied to each example" do
298
- group = RSpec::Core::ExampleGroup.describe do
299
- before(:all) { @before_all = "abc" }
300
- example("first") { expect(@before_all).not_to be_nil }
301
- example("second") { expect(@before_all).not_to be_nil }
302
- end
303
- expect(group.run).to be_truthy
304
- end
305
- end
306
-
307
- context 'when the example raises an error' do
308
- def run_and_capture_reported_message(group)
309
- reported_msg = nil
310
- # We can't use should_receive(:message).with(/.../) here,
311
- # because if that fails, it would fail within our example-under-test,
312
- # and since there's already two errors, it would just be reported again.
313
- allow(RSpec.configuration.reporter).to receive(:message) { |msg| reported_msg = msg }
314
- group.run
315
- reported_msg
316
- end
317
-
318
- it "prints any around hook errors rather than silencing them" do
319
- group = RSpec::Core::ExampleGroup.describe do
320
- around(:each) { |e| e.run; raise "around" }
321
- example("e") { raise "example" }
322
- end
323
-
324
- message = run_and_capture_reported_message(group)
325
- expect(message).to match(/An error occurred in an around.* hook/i)
326
- end
327
-
328
- it "prints any after hook errors rather than silencing them" do
329
- group = RSpec::Core::ExampleGroup.describe do
330
- after(:each) { raise "after" }
331
- example("e") { raise "example" }
332
- end
333
-
334
- message = run_and_capture_reported_message(group)
335
- expect(message).to match(/An error occurred in an after.* hook/i)
336
- end
337
-
338
- it "does not print mock expectation errors" do
339
- group = RSpec::Core::ExampleGroup.describe do
340
- example do
341
- foo = double
342
- expect(foo).to receive(:bar)
343
- raise "boom"
344
- end
345
- end
346
-
347
- message = run_and_capture_reported_message(group)
348
- expect(message).to be_nil
349
- end
350
-
351
- it "leaves a raised exception unmodified (GH-1103)" do
352
- # set the backtrace, otherwise MRI will build a whole new object,
353
- # and thus mess with our expectations. Rubinius and JRuby are not
354
- # affected.
355
- exception = StandardError.new
356
- exception.set_backtrace([])
357
-
358
- group = RSpec::Core::ExampleGroup.describe do
359
- example { raise exception.freeze }
360
- end
361
- group.run
362
-
363
- actual = group.examples.first.metadata[:execution_result][:exception]
364
- expect(actual.__id__).to eq(exception.__id__)
365
- end
366
- end
367
-
368
- context "with --dry-run" do
369
- before { RSpec.configuration.dry_run = true }
370
-
371
- it "does not execute any examples or hooks" do
372
- executed = []
373
-
374
- RSpec.configure do |c|
375
- c.before(:each) { executed << :before_each_config }
376
- c.before(:all) { executed << :before_all_config }
377
- c.after(:each) { executed << :after_each_config }
378
- c.after(:all) { executed << :after_all_config }
379
- c.around(:each) { |ex| executed << :around_each_config; ex.run }
380
- end
381
-
382
- group = RSpec::Core::ExampleGroup.describe do
383
- before(:all) { executed << :before_all }
384
- before(:each) { executed << :before_each }
385
- after(:all) { executed << :after_all }
386
- after(:each) { executed << :after_each }
387
- around(:each) { |ex| executed << :around_each; ex.run }
388
-
389
- example { executed << :example }
390
-
391
- context "nested" do
392
- before(:all) { executed << :nested_before_all }
393
- before(:each) { executed << :nested_before_each }
394
- after(:all) { executed << :nested_after_all }
395
- after(:each) { executed << :nested_after_each }
396
- around(:each) { |ex| executed << :nested_around_each; ex.run }
397
-
398
- example { executed << :nested_example }
399
- end
400
- end
401
-
402
- group.run
403
- expect(executed).to eq([])
404
- end
405
- end
406
- end
407
-
408
- describe "#pending" do
409
- def expect_pending_result(example)
410
- expect(example).to be_pending
411
- expect(example.metadata[:execution_result][:status]).to eq("pending")
412
- expect(example.metadata[:execution_result][:pending_message]).to be
413
- end
414
-
415
- context "in the example" do
416
- it "sets the example to pending" do
417
- group = RSpec::Core::ExampleGroup.describe do
418
- example { pending; fail }
419
- end
420
- group.run
421
- expect_pending_result(group.examples.first)
422
- end
423
-
424
- it "allows post-example processing in around hooks (see https://github.com/rspec/rspec-core/issues/322)" do
425
- blah = nil
426
- group = RSpec::Core::ExampleGroup.describe do
427
- around do |example|
428
- example.run
429
- blah = :success
430
- end
431
- example { pending }
432
- end
433
- group.run
434
- expect(blah).to be(:success)
435
- end
436
-
437
- it 'sets the backtrace to the example definition so it can be located by the user' do
438
- expected = [__FILE__, __LINE__ + 2].map(&:to_s)
439
- group = RSpec::Core::ExampleGroup.describe do
440
- example {
441
- pending
442
- }
443
- end
444
- group.run
445
- # TODO: De-dup this logic in rspec-support
446
- actual = group.examples.first.exception.backtrace.
447
- find { |line| line !~ RSpec::CallerFilter::LIB_REGEX }.
448
- split(':')[0..1]
449
- expect(actual).to eq(expected)
450
- end
451
- end
452
-
453
- context "in before(:each)" do
454
- it "sets each example to pending" do
455
- group = RSpec::Core::ExampleGroup.describe do
456
- before(:each) { pending }
457
- example { fail }
458
- example { fail }
459
- end
460
- group.run
461
- expect_pending_result(group.examples.first)
462
- expect_pending_result(group.examples.last)
463
- end
464
-
465
- it 'sets example to pending when failure occurs in before(:each)' do
466
- group = RSpec::Core::ExampleGroup.describe do
467
- before(:each) { pending; fail }
468
- example {}
469
- end
470
- group.run
471
- expect_pending_result(group.examples.first)
472
- end
473
- end
474
-
475
- context "in before(:all)" do
476
- it "is forbidden" do
477
- group = RSpec::Core::ExampleGroup.describe do
478
- before(:all) { pending }
479
- example { fail }
480
- example { fail }
481
- end
482
- group.run
483
- expect(group.examples.first.exception).to be
484
- expect(group.examples.first.exception.message).to \
485
- match(/may not be used outside of examples/)
486
- end
487
- end
488
-
489
- context "in around(:each)" do
490
- it "sets the example to pending" do
491
- group = RSpec::Core::ExampleGroup.describe do
492
- around(:each) { pending }
493
- example { fail }
494
- end
495
- group.run
496
- expect_pending_result(group.examples.first)
497
- end
498
-
499
- it 'sets example to pending when failure occurs in around(:each)' do
500
- group = RSpec::Core::ExampleGroup.describe do
501
- around(:each) { pending; fail }
502
- example {}
503
- end
504
- group.run
505
- expect_pending_result(group.examples.first)
506
- end
507
- end
508
-
509
- context "in after(:each)" do
510
- it "sets each example to pending" do
511
- group = RSpec::Core::ExampleGroup.describe do
512
- after(:each) { pending; fail }
513
- example { }
514
- example { }
515
- end
516
- group.run
517
- expect_pending_result(group.examples.first)
518
- expect_pending_result(group.examples.last)
519
- end
520
- end
521
-
522
- end
523
-
524
- describe "#skip" do
525
- context "in the example" do
526
- it "sets the example to skipped" do
527
- group = RSpec::Core::ExampleGroup.describe do
528
- example { skip }
529
- end
530
- group.run
531
- expect(group.examples.first).to be_skipped
532
- end
533
-
534
- it "allows post-example processing in around hooks (see https://github.com/rspec/rspec-core/issues/322)" do
535
- blah = nil
536
- group = RSpec::Core::ExampleGroup.describe do
537
- around do |example|
538
- example.run
539
- blah = :success
540
- end
541
- example { skip }
542
- end
543
- group.run
544
- expect(blah).to be(:success)
545
- end
546
-
547
- context "with a message" do
548
- it "sets the example to skipped with the provided message" do
549
- group = RSpec::Core::ExampleGroup.describe do
550
- example { skip "lorem ipsum" }
551
- end
552
- group.run
553
- expect(group.examples.first).to be_skipped_with("lorem ipsum")
554
- end
555
- end
556
- end
557
-
558
- context "in before(:each)" do
559
- it "sets each example to skipped" do
560
- group = RSpec::Core::ExampleGroup.describe do
561
- before(:each) { skip }
562
- example {}
563
- example {}
564
- end
565
- group.run
566
- expect(group.examples.first).to be_skipped
567
- expect(group.examples.last).to be_skipped
568
- end
569
- end
570
-
571
- context "in before(:all)" do
572
- it "sets each example to pending" do
573
- group = RSpec::Core::ExampleGroup.describe do
574
- before(:all) { skip("not done"); fail }
575
- example {}
576
- example {}
577
- end
578
- group.run
579
- expect(group.examples.first).to be_skipped_with("not done")
580
- expect(group.examples.last).to be_skipped_with("not done")
581
- end
582
- end
583
-
584
- context "in around(:each)" do
585
- it "sets the example to skipped" do
586
- group = RSpec::Core::ExampleGroup.describe do
587
- around(:each) { skip }
588
- example {}
589
- end
590
- group.run
591
- expect(group.examples.first).to be_skipped
592
- end
593
- end
594
- end
595
-
596
- describe "timing" do
597
- it "uses RSpec::Core::Time as to not be affected by changes to time in examples" do
598
- reporter = double(:reporter).as_null_object
599
- group = RSpec::Core::ExampleGroup.describe
600
- example = group.example
601
- example.__send__ :start, reporter
602
- allow(Time).to receive_messages(:now => Time.utc(2012, 10, 1))
603
- example.__send__ :finish, reporter
604
- expect(example.metadata[:execution_result][:run_time]).to be < 0.2
605
- end
606
- end
607
-
608
- it "does not interfere with per-example randomness when running examples in a random order" do
609
- values = []
610
-
611
- RSpec.configuration.order = :random
612
-
613
- RSpec::Core::ExampleGroup.describe do
614
- # The bug was only triggered when the examples
615
- # were in nested contexts; see https://github.com/rspec/rspec-core/pull/837
616
- context { example { values << rand } }
617
- context { example { values << rand } }
618
- end.run
619
-
620
- expect(values.uniq.count).to eq(2)
621
- end
622
-
623
- describe "optional block argument" do
624
- it "contains the example" do |ex|
625
- expect(ex).to be_an(RSpec::Core::Example)
626
- expect(ex.description).to match(/contains the example/)
627
- end
628
- end
629
-
630
- describe "setting the current example" do
631
- it "sets RSpec.current_example to the example that is currently running" do
632
- group = RSpec::Core::ExampleGroup.describe("an example group")
633
-
634
- current_examples = []
635
- example1 = group.example("example 1") { current_examples << RSpec.current_example }
636
- example2 = group.example("example 2") { current_examples << RSpec.current_example }
637
-
638
- group.run
639
- expect(current_examples).to eq([example1, example2])
640
- end
641
- end
642
- end