rspec-core 3.0.0.beta2 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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,230 +0,0 @@
1
- require "spec_helper"
2
-
3
- module RSpec::Core
4
- RSpec.describe BacktraceFormatter do
5
- def make_backtrace_formatter(exclusion_patterns=nil, inclusion_patterns=nil)
6
- BacktraceFormatter.new.tap do |bc|
7
- bc.exclusion_patterns = exclusion_patterns if exclusion_patterns
8
- bc.inclusion_patterns = inclusion_patterns if inclusion_patterns
9
- end
10
- end
11
-
12
- describe "defaults" do
13
- it "excludes rspec files" do
14
- expect(make_backtrace_formatter.exclude?("lib/rspec/core.rb")).to be true
15
- expect(make_backtrace_formatter.exclude?("lib/rspec/core/foo.rb")).to be true
16
- expect(make_backtrace_formatter.exclude?("lib/rspec/expectations/foo.rb")).to be true
17
- expect(make_backtrace_formatter.exclude?("lib/rspec/matchers/foo.rb")).to be true
18
- expect(make_backtrace_formatter.exclude?("lib/rspec/mocks/foo.rb")).to be true
19
- end
20
-
21
- it "excludes java files (for JRuby)" do
22
- expect(make_backtrace_formatter.exclude?("org/jruby/RubyArray.java:2336")).to be true
23
- end
24
-
25
- it "excludes files within installed gems" do
26
- expect(make_backtrace_formatter.exclude?('ruby-1.8.7-p334/gems/mygem-2.3.0/lib/mygem.rb')).to be true
27
- end
28
-
29
- it "includes files in projects containing 'gems' in the name" do
30
- expect(make_backtrace_formatter.exclude?('code/my-gems-plugin/lib/plugin.rb')).to be false
31
- end
32
-
33
- it "includes something in the current working directory" do
34
- expect(make_backtrace_formatter.exclude?("#{Dir.getwd}/arbitrary")).to be false
35
- end
36
-
37
- it "includes something in the current working directory even with a matching exclusion pattern" do
38
- formatter = make_backtrace_formatter([/foo/])
39
- expect(formatter.exclude? "#{Dir.getwd}/foo").to be false
40
- end
41
- end
42
-
43
- describe "#format_backtrace" do
44
- it "excludes lines from rspec libs by default", :unless => RSpec.windows_os? do
45
- backtrace = [
46
- "/path/to/rspec-expectations/lib/rspec/expectations/foo.rb:37",
47
- "/path/to/rspec-expectations/lib/rspec/matchers/foo.rb:37",
48
- "./my_spec.rb:5",
49
- "/path/to/rspec-mocks/lib/rspec/mocks/foo.rb:37",
50
- "/path/to/rspec-core/lib/rspec/core/foo.rb:37"
51
- ]
52
-
53
- expect(BacktraceFormatter.new.format_backtrace(backtrace)).to eq(["./my_spec.rb:5"])
54
- end
55
-
56
- it "excludes lines from rspec libs by default", :if => RSpec.windows_os? do
57
- backtrace = [
58
- "\\path\\to\\rspec-expectations\\lib\\rspec\\expectations\\foo.rb:37",
59
- "\\path\\to\\rspec-expectations\\lib\\rspec\\matchers\\foo.rb:37",
60
- ".\\my_spec.rb:5",
61
- "\\path\\to\\rspec-mocks\\lib\\rspec\\mocks\\foo.rb:37",
62
- "\\path\\to\\rspec-core\\lib\\rspec\\core\\foo.rb:37"
63
- ]
64
-
65
- expect(BacktraceFormatter.new.format_backtrace(backtrace)).to eq([".\\my_spec.rb:5"])
66
- end
67
-
68
- it "excludes lines that come before at_exit autorun hook" do
69
- backtrace = [
70
- "./spec/my_spec.rb:7",
71
- "./spec/my_spec.rb:5",
72
- RSpec::Core::Runner::AT_EXIT_HOOK_BACKTRACE_LINE,
73
- "./spec/my_spec.rb:3"
74
- ]
75
- expect(BacktraceFormatter.new.format_backtrace(backtrace)).to eq(["./spec/my_spec.rb:7", "./spec/my_spec.rb:5"])
76
- end
77
-
78
- context "when every line is filtered out" do
79
- let(:backtrace) do
80
- [
81
- "/path/to/rspec-expectations/lib/rspec/expectations/foo.rb:37",
82
- "/path/to/rspec-expectations/lib/rspec/matchers/foo.rb:37",
83
- "/path/to/rspec-mocks/lib/rspec/mocks/foo.rb:37",
84
- "/path/to/rspec-core/lib/rspec/core/foo.rb:37"
85
- ]
86
- end
87
-
88
- it "includes full backtrace" do
89
- expect(BacktraceFormatter.new.format_backtrace(backtrace).take(4)).to eq backtrace
90
- end
91
-
92
- it "adds a message explaining everything was filtered" do
93
- expect(BacktraceFormatter.new.format_backtrace(backtrace).drop(4).join).to match(/Showing full backtrace/)
94
- end
95
- end
96
-
97
- context "when rspec is installed in the current working directory" do
98
- it "excludes lines from rspec libs by default", :unless => RSpec.windows_os? do
99
- backtrace = [
100
- "#{Dir.getwd}/.bundle/path/to/rspec-expectations/lib/rspec/expectations/foo.rb:37",
101
- "#{Dir.getwd}/.bundle/path/to/rspec-expectations/lib/rspec/matchers/foo.rb:37",
102
- "#{Dir.getwd}/my_spec.rb:5",
103
- "#{Dir.getwd}/.bundle/path/to/rspec-mocks/lib/rspec/mocks/foo.rb:37",
104
- "#{Dir.getwd}/.bundle/path/to/rspec-core/lib/rspec/core/foo.rb:37"
105
- ]
106
-
107
- expect(BacktraceFormatter.new.format_backtrace(backtrace)).to eq(["./my_spec.rb:5"])
108
- end
109
- end
110
- end
111
-
112
- describe "#full_backtrace=true" do
113
- it "sets full_backtrace true" do
114
- formatter = make_backtrace_formatter([/discard/],[/keep/])
115
- formatter.full_backtrace = true
116
- expect(formatter.full_backtrace?).to be true
117
- end
118
-
119
- it "preserves exclusion and inclusion patterns" do
120
- formatter = make_backtrace_formatter([/discard/],[/keep/])
121
- formatter.full_backtrace = true
122
- expect(formatter.exclusion_patterns).to eq [/discard/]
123
- expect(formatter.inclusion_patterns).to eq [/keep/]
124
- end
125
-
126
- it "keeps all lines, even those that match exclusions" do
127
- formatter = make_backtrace_formatter([/discard/],[/keep/])
128
- formatter.full_backtrace = true
129
- expect(formatter.exclude? "discard").to be false
130
- end
131
- end
132
-
133
- describe "#full_backtrace=false (after it was true)" do
134
- it "sets full_backtrace false" do
135
- formatter = make_backtrace_formatter([/discard/],[/keep/])
136
- formatter.full_backtrace = true
137
- formatter.full_backtrace = false
138
- expect(formatter.full_backtrace?).to be false
139
- end
140
-
141
- it "preserves exclusion and inclusion patterns" do
142
- formatter = make_backtrace_formatter([/discard/],[/keep/])
143
- formatter.full_backtrace = true
144
- formatter.full_backtrace = false
145
- expect(formatter.exclusion_patterns).to eq [/discard/]
146
- expect(formatter.inclusion_patterns).to eq [/keep/]
147
- end
148
-
149
- it "excludes lines that match exclusions" do
150
- formatter = make_backtrace_formatter([/discard/],[/keep/])
151
- formatter.full_backtrace = true
152
- formatter.full_backtrace = false
153
- expect(formatter.exclude? "discard").to be true
154
- end
155
- end
156
-
157
- describe "#backtrace_line" do
158
- let(:formatter) { BacktraceFormatter.new }
159
-
160
- it "trims current working directory" do
161
- expect(formatter.__send__(:backtrace_line, File.expand_path(__FILE__))).to eq("./spec/rspec/core/backtrace_formatter_spec.rb")
162
- end
163
-
164
- it "preserves the original line" do
165
- original_line = File.expand_path(__FILE__)
166
- formatter.__send__(:backtrace_line, original_line)
167
- expect(original_line).to eq(File.expand_path(__FILE__))
168
- end
169
-
170
- it "deals gracefully with a security error" do
171
- safely do
172
- formatter.__send__(:backtrace_line, __FILE__)
173
- # on some rubies, this doesn't raise a SecurityError; this test just
174
- # assures that if it *does* raise an error, the error is caught inside
175
- end
176
- end
177
- end
178
-
179
- context "with no patterns" do
180
- it "keeps all lines" do
181
- lines = ["/tmp/a_file", "some_random_text", "hello\330\271!"]
182
- formatter = make_backtrace_formatter([], [])
183
- expect(lines.all? {|line| formatter.exclude? line}).to be false
184
- end
185
-
186
- it "is considered a full backtrace" do
187
- expect(make_backtrace_formatter([], []).full_backtrace?).to be true
188
- end
189
- end
190
-
191
- context "with an exclusion pattern but no inclusion patterns" do
192
- it "excludes lines that match the exclusion pattern" do
193
- formatter = make_backtrace_formatter([/discard/],[])
194
- expect(formatter.exclude? "discard me").to be true
195
- end
196
-
197
- it "keeps lines that do not match the exclusion pattern" do
198
- formatter = make_backtrace_formatter([/discard/],[])
199
- expect(formatter.exclude? "apple").to be false
200
- end
201
-
202
- it "is considered a partial backtrace" do
203
- formatter = make_backtrace_formatter([/discard/],[])
204
- expect(formatter.full_backtrace?).to be false
205
- end
206
- end
207
-
208
- context "with an exclusion pattern and an inclusion pattern" do
209
- it "excludes lines that match the exclusion pattern but not the inclusion pattern" do
210
- formatter = make_backtrace_formatter([/discard/],[/keep/])
211
- expect(formatter.exclude? "discard").to be true
212
- end
213
-
214
- it "keeps lines that match both patterns" do
215
- formatter = make_backtrace_formatter([/discard/],[/keep/])
216
- expect(formatter.exclude? "discard/keep").to be false
217
- end
218
-
219
- it "keeps lines that match neither pattern" do
220
- formatter = make_backtrace_formatter([/discard/],[/keep/])
221
- expect(formatter.exclude? "fish").to be false
222
- end
223
-
224
- it "is considered a partial backtrace" do
225
- formatter = make_backtrace_formatter([/discard/],[/keep/])
226
- expect(formatter.full_backtrace?).to be false
227
- end
228
- end
229
- end
230
- end
@@ -1,112 +0,0 @@
1
- require "spec_helper"
2
- require "stringio"
3
- require 'tmpdir'
4
-
5
- module RSpec::Core
6
- RSpec.describe CommandLine do
7
-
8
- let(:out) { StringIO.new }
9
- let(:err) { StringIO.new }
10
- let(:config) { RSpec::configuration }
11
- let(:world) { RSpec::world }
12
-
13
- before do
14
- allow(config.hooks).to receive(:run)
15
- end
16
-
17
- it "configures streams before command line options" do
18
- allow(RSpec).to receive(:deprecate) # remove this and should_receive when ordered
19
- stdout = StringIO.new
20
- allow(config).to receive(:load_spec_files)
21
- allow(config).to receive(:reporter).and_return(double.as_null_object)
22
- config.output_stream = $stdout
23
-
24
- # this is necessary to ensure that color works correctly on windows
25
- expect(config).to receive(:error_stream=).ordered
26
- expect(config).to receive(:output_stream=).ordered
27
- expect(config).to receive(:force).at_least(:once).ordered
28
-
29
- command_line = build_command_line
30
- command_line.run err, stdout
31
- end
32
-
33
- it "assigns ConfigurationOptions built from Array of options to @options" do
34
- config_options = ConfigurationOptions.new(%w[--color])
35
- command_line = CommandLine.new(%w[--color])
36
- expect(command_line.instance_eval { @options.options }).to eq(config_options.options)
37
- end
38
-
39
- it "assigns submitted ConfigurationOptions to @options" do
40
- config_options = ConfigurationOptions.new(%w[--color])
41
- command_line = CommandLine.new(config_options)
42
- expect(command_line.instance_eval { @options }).to be(config_options)
43
- end
44
-
45
- describe "#run" do
46
- context "running files" do
47
- include_context "spec files"
48
-
49
- it "returns 0 if spec passes" do
50
- command_line = build_command_line passing_spec_filename
51
- expect(command_line.run(err, out)).to eq 0
52
- end
53
-
54
- it "returns 1 if spec fails" do
55
- command_line = build_command_line failing_spec_filename
56
- expect(command_line.run(err, out)).to eq 1
57
- end
58
-
59
- it "returns 2 if spec fails and --failure-exit-code is 2" do
60
- command_line = build_command_line failing_spec_filename, "--failure-exit-code", "2"
61
- expect(command_line.run(err, out)).to eq 2
62
- end
63
- end
64
-
65
- context "running hooks" do
66
- before { allow(config).to receive :load_spec_files }
67
-
68
- it "runs before suite hooks" do
69
- expect(config.hooks).to receive(:run).with(:before, :suite)
70
- command_line = build_command_line
71
- command_line.run err, out
72
- end
73
-
74
- it "runs after suite hooks" do
75
- expect(config.hooks).to receive(:run).with(:after, :suite)
76
- command_line = build_command_line
77
- command_line.run err, out
78
- end
79
-
80
- it "runs after suite hooks even after an error" do
81
- expect(config.hooks).to receive(:run).with(:before, :suite).and_raise "this error"
82
- expect(config.hooks).to receive(:run).with(:after , :suite)
83
- expect do
84
- command_line = build_command_line
85
- command_line.run err, out
86
- end.to raise_error
87
- end
88
- end
89
- end
90
-
91
- describe "#run with custom output" do
92
- before { allow(config).to receive_messages :files_to_run => [] }
93
-
94
- let(:output_file) { File.new("#{Dir.tmpdir}/command_line_spec_output.txt", 'w') }
95
-
96
- it "doesn't override output_stream" do
97
- config.output_stream = output_file
98
- command_line = build_command_line
99
- command_line.run err, nil
100
- expect(command_line.instance_eval { @configuration.output_stream }).to eq output_file
101
- end
102
- end
103
-
104
- def build_command_line *args
105
- CommandLine.new build_config_options(*args)
106
- end
107
-
108
- def build_config_options *args
109
- ConfigurationOptions.new args
110
- end
111
- end
112
- end
@@ -1,409 +0,0 @@
1
- require 'spec_helper'
2
- require 'ostruct'
3
- require 'rspec/core/drb_options'
4
-
5
- RSpec.describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolated_home => true do
6
- include ConfigOptionsHelper
7
-
8
- it "warns when HOME env var is not set", :unless => (RUBY_PLATFORM == 'java') do
9
- without_env_vars 'HOME' do
10
- expect_warning_with_call_site(__FILE__, __LINE__ + 1)
11
- RSpec::Core::ConfigurationOptions.new([]).options
12
- end
13
- end
14
-
15
- it "does not mutate the provided args array" do
16
- args = ['-e', 'some spec']
17
- RSpec::Core::ConfigurationOptions.new(args).options
18
- expect(args).to eq(['-e', 'some spec'])
19
- end
20
-
21
- describe "#configure" do
22
- let(:config) { RSpec::Core::Configuration.new }
23
-
24
- it "sends libs before requires" do
25
- opts = config_options_object(*%w[--require a/path -I a/lib])
26
- config = double("config").as_null_object
27
- expect(config).to receive(:libs=).ordered
28
- expect(config).to receive(:requires=).ordered
29
- opts.configure(config)
30
- end
31
-
32
- it "loads requires before loading specs" do
33
- opts = config_options_object(*%w[-rspec_helper])
34
- config = RSpec::Core::Configuration.new
35
- expect(config).to receive(:requires=).ordered
36
- expect(config).to receive(:get_files_to_run).ordered
37
- opts.configure(config)
38
- config.files_to_run
39
- end
40
-
41
- it "sets up load path and requires before formatter" do
42
- opts = config_options_object(*%w[--require a/path -f a/formatter])
43
- config = double("config").as_null_object
44
- expect(config).to receive(:requires=).ordered
45
- expect(config).to receive(:add_formatter).ordered
46
- opts.configure(config)
47
- end
48
-
49
- it "sets default_path before loading specs" do
50
- opts = config_options_object(*%w[--default_path spec])
51
- config = RSpec::Core::Configuration.new
52
- expect(config).to receive(:force).with(:default_path => 'spec').ordered
53
- expect(config).to receive(:get_files_to_run).ordered
54
- opts.configure(config)
55
- config.files_to_run
56
- end
57
-
58
- it "sets `files_or_directories_to_run` before `requires` so users can check `files_to_run` in a spec_helper loaded by `--require`" do
59
- opts = config_options_object(*%w[--require spec_helper])
60
- config = RSpec::Core::Configuration.new
61
- expect(config).to receive(:files_or_directories_to_run=).ordered
62
- expect(config).to receive(:requires=).ordered
63
- opts.configure(config)
64
- end
65
-
66
- it "sets default_path before `files_or_directories_to_run` since it relies on it" do
67
- opts = config_options_object(*%w[--default_path spec])
68
- config = RSpec::Core::Configuration.new
69
- expect(config).to receive(:force).with(:default_path => 'spec').ordered
70
- expect(config).to receive(:files_or_directories_to_run=).ordered
71
- opts.configure(config)
72
- end
73
-
74
- it "sets pattern before loading specs" do
75
- opts = config_options_object(*%w[--pattern **/*.spec])
76
- config = RSpec::Core::Configuration.new
77
- expect(config).to receive(:force).with(:pattern => '**/*.spec').ordered
78
- expect(config).to receive(:get_files_to_run).ordered
79
- opts.configure(config)
80
- config.files_to_run
81
- end
82
-
83
- it "assigns inclusion_filter" do
84
- opts = config_options_object(*%w[--tag awesome])
85
- opts.configure(config)
86
- expect(config.inclusion_filter).to have_key(:awesome)
87
- end
88
-
89
- it "merges the :exclusion_filter option with the default exclusion_filter" do
90
- opts = config_options_object(*%w[--tag ~slow])
91
- opts.configure(config)
92
- expect(config.exclusion_filter).to have_key(:slow)
93
- end
94
-
95
- it "forces color_enabled" do
96
- opts = config_options_object(*%w[--color])
97
- config = RSpec::Core::Configuration.new
98
- expect(config).to receive(:force).with(:color => true)
99
- opts.configure(config)
100
- end
101
-
102
- [
103
- ["--failure-exit-code", "3", :failure_exit_code, 3 ],
104
- ["--pattern", "foo/bar", :pattern, "foo/bar"],
105
- ["--failure-exit-code", "37", :failure_exit_code, 37],
106
- ["--default_path", "behavior", :default_path, "behavior"],
107
- ["--order", "rand", :order, "rand"],
108
- ["--seed", "37", :order, "rand:37"],
109
- ["--drb-port", "37", :drb_port, 37]
110
- ].each do |cli_option, cli_value, config_key, config_value|
111
- it "forces #{config_key}" do
112
- opts = config_options_object(cli_option, cli_value)
113
- config = RSpec::Core::Configuration.new
114
- expect(config).to receive(:force) do |pair|
115
- expect(pair.keys.first).to eq(config_key)
116
- expect(pair.values.first).to eq(config_value)
117
- end
118
- opts.configure(config)
119
- end
120
- end
121
-
122
- it "merges --require specified by multiple configuration sources" do
123
- with_env_vars 'SPEC_OPTS' => "--require file_from_env" do
124
- opts = config_options_object(*%w[--require file_from_opts])
125
- expect(config).to receive(:require).with("file_from_opts")
126
- expect(config).to receive(:require).with("file_from_env")
127
- opts.configure(config)
128
- end
129
- end
130
-
131
- it "merges --I specified by multiple configuration sources" do
132
- with_env_vars 'SPEC_OPTS' => "-I dir_from_env" do
133
- opts = config_options_object(*%w[-I dir_from_opts])
134
- expect(config).to receive(:libs=).with(["dir_from_opts", "dir_from_env"])
135
- opts.configure(config)
136
- end
137
- end
138
- end
139
-
140
- describe "-c, --color, and --colour" do
141
- it "sets :color => true" do
142
- expect(parse_options('-c')).to include(:color => true)
143
- expect(parse_options('--color')).to include(:color => true)
144
- expect(parse_options('--colour')).to include(:color => true)
145
- end
146
- end
147
-
148
- describe "--no-color" do
149
- it "sets :color => false" do
150
- expect(parse_options('--no-color')).to include(:color => false)
151
- end
152
-
153
- it "overrides previous :color => true" do
154
- expect(parse_options('--color', '--no-color')).to include(:color => false)
155
- end
156
-
157
- it "gets overriden by a subsequent :color => true" do
158
- expect(parse_options('--no-color', '--color')).to include(:color => true)
159
- end
160
- end
161
-
162
- describe "-I" do
163
- example "adds to :libs" do
164
- expect(parse_options('-I', 'a_dir')).to include(:libs => ['a_dir'])
165
- end
166
- example "can be used more than once" do
167
- expect(parse_options('-I', 'dir_1', '-I', 'dir_2')).to include(:libs => ['dir_1','dir_2'])
168
- end
169
- end
170
-
171
- describe '--require' do
172
- example "requires files" do
173
- expect(parse_options('--require', 'a/path')).to include(:requires => ['a/path'])
174
- end
175
- example "can be used more than once" do
176
- expect(parse_options('--require', 'path/1', '--require', 'path/2')).to include(:requires => ['path/1','path/2'])
177
- end
178
- end
179
-
180
- describe "--format, -f" do
181
- it "sets :formatter" do
182
- [['--format', 'd'], ['-f', 'd'], '-fd'].each do |args|
183
- expect(parse_options(*args)).to include(:formatters => [['d']])
184
- end
185
- end
186
-
187
- example "can accept a class name" do
188
- expect(parse_options('-fSome::Formatter::Class')).to include(:formatters => [['Some::Formatter::Class']])
189
- end
190
- end
191
-
192
- describe "--profile, -p" do
193
- it "sets :profile_examples" do
194
- expect(parse_options('-p')).to include(:profile_examples => true)
195
- expect(parse_options('--profile')).to include(:profile_examples => true)
196
- expect(parse_options('-p', '4')).to include(:profile_examples => 4)
197
- expect(parse_options('--profile', '3')).to include(:profile_examples => 3)
198
- end
199
- end
200
-
201
- describe "--no-profile" do
202
- it "sets :profile_examples to false" do
203
- expect(parse_options('--no-profile')).to include(:profile_examples => false)
204
- end
205
- end
206
-
207
- describe '--line_number' do
208
- it "sets :line_number" do
209
- expect(parse_options('-l','3')).to include(:line_numbers => ['3'])
210
- expect(parse_options('--line_number','3')).to include(:line_numbers => ['3'])
211
- end
212
-
213
- it "can be specified multiple times" do
214
- expect(parse_options('-l','3', '-l', '6')).to include(:line_numbers => ['3', '6'])
215
- expect(parse_options('--line_number','3', '--line_number', '6')).to include(:line_numbers => ['3', '6'])
216
- end
217
- end
218
-
219
- describe "--example" do
220
- it "sets :full_description" do
221
- expect(parse_options('--example','foo')).to include(:full_description => [/foo/])
222
- expect(parse_options('-e','bar')).to include(:full_description => [/bar/])
223
- end
224
- end
225
-
226
- describe "--backtrace, -b" do
227
- it "sets full_backtrace on config" do
228
- expect(parse_options("--backtrace")).to include(:full_backtrace => true)
229
- expect(parse_options("-b")).to include(:full_backtrace => true)
230
- end
231
- end
232
-
233
- describe "--fail-fast" do
234
- it "defaults to false" do
235
- expect(parse_options[:fail_fast]).to be_falsey
236
- end
237
-
238
- it "sets fail_fast on config" do
239
- expect(parse_options("--fail-fast")[:fail_fast]).to be_truthy
240
- end
241
-
242
- it "sets fail_fast on config" do
243
- expect(parse_options("--no-fail-fast")[:fail_fast]).to be_falsey
244
- end
245
- end
246
-
247
- describe "--failure-exit-code" do
248
- it "sets :failure_exit_code" do
249
- expect(parse_options('--failure-exit-code', '0')).to include(:failure_exit_code => 0)
250
- expect(parse_options('--failure-exit-code', '1')).to include(:failure_exit_code => 1)
251
- expect(parse_options('--failure-exit-code', '2')).to include(:failure_exit_code => 2)
252
- end
253
-
254
- it "overrides previous :failure_exit_code" do
255
- expect(parse_options('--failure-exit-code', '2', '--failure-exit-code', '3')).to include(:failure_exit_code => 3)
256
- end
257
- end
258
-
259
- describe "--dry-run" do
260
- it "defaults to false" do
261
- expect(parse_options[:dry_run]).to be_falsey
262
- end
263
-
264
- it "sets dry_run on config" do
265
- expect(parse_options("--dry-run")[:dry_run]).to be_truthy
266
- end
267
- end
268
-
269
- describe "--options" do
270
- it "sets :custom_options_file" do
271
- expect(parse_options(*%w[-O my.opts])).to include(:custom_options_file => "my.opts")
272
- expect(parse_options(*%w[--options my.opts])).to include(:custom_options_file => "my.opts")
273
- end
274
- end
275
-
276
- describe "--drb, -X" do
277
- it "does not send --drb back to the parser after parsing options" do
278
- expect(config_options_object("--drb", "--color").drb_argv).not_to include("--drb")
279
- end
280
- end
281
-
282
- describe "--no-drb" do
283
- it "disables drb" do
284
- expect(parse_options("--no-drb")).to include(:drb => false)
285
- end
286
-
287
- it "overrides a previous drb => true" do
288
- expect(parse_options("--drb", "--no-drb")).to include(:drb => false)
289
- end
290
-
291
- it "gets overriden by a subsquent drb => true" do
292
- expect(parse_options("--no-drb", "--drb")).to include(:drb => true)
293
- end
294
- end
295
-
296
-
297
- describe "files_or_directories_to_run" do
298
- it "parses files from '-c file.rb dir/file.rb'" do
299
- expect(parse_options("-c", "file.rb", "dir/file.rb")).to include(
300
- :files_or_directories_to_run => ["file.rb", "dir/file.rb"]
301
- )
302
- end
303
-
304
- it "parses dir from 'dir'" do
305
- expect(parse_options("dir")).to include(:files_or_directories_to_run => ["dir"])
306
- end
307
-
308
- it "parses dir and files from 'spec/file1_spec.rb, spec/file2_spec.rb'" do
309
- expect(parse_options("dir", "spec/file1_spec.rb", "spec/file2_spec.rb")).to include(
310
- :files_or_directories_to_run => ["dir", "spec/file1_spec.rb", "spec/file2_spec.rb"]
311
- )
312
- end
313
-
314
- it "parses file names that look like options line-number and default-path" do
315
- expect(parse_options("spec/default_path_spec.rb", "spec/line_number_spec.rb")).to include(
316
- :files_or_directories_to_run => ["spec/default_path_spec.rb", "spec/line_number_spec.rb"]
317
- )
318
- end
319
-
320
- it "provides no files or directories if spec directory does not exist" do
321
- allow(FileTest).to receive(:directory?).with("spec").and_return false
322
- expect(parse_options()).to include(:files_or_directories_to_run => [])
323
- end
324
- end
325
-
326
- describe "default_path" do
327
- it "gets set before files_or_directories_to_run" do
328
- config = RSpec::Core::Configuration.new
329
- expect(config).to receive(:force).with(:default_path => 'foo').ordered
330
- expect(config).to receive(:get_files_to_run).ordered
331
- opts = config_options_object("--default_path", "foo")
332
- opts.configure(config)
333
- config.files_to_run
334
- end
335
- end
336
-
337
- describe "#filter_manager" do
338
- it "returns the same object as RSpec::configuration.filter_manager" do
339
- expect(config_options_object.filter_manager).to be(RSpec::configuration.filter_manager)
340
- end
341
- end
342
-
343
- describe "sources: ~/.rspec, ./.rspec, ./.rspec-local, custom, CLI, and SPEC_OPTS" do
344
- it "merges global, local, SPEC_OPTS, and CLI" do
345
- File.open("./.rspec", "w") {|f| f << "--line 37"}
346
- File.open("./.rspec-local", "w") {|f| f << "--format global"}
347
- File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--color"}
348
- with_env_vars 'SPEC_OPTS' => "--example 'foo bar'" do
349
- options = parse_options("--drb")
350
- expect(options[:color]).to be_truthy
351
- expect(options[:line_numbers]).to eq(["37"])
352
- expect(options[:full_description]).to eq([/foo\ bar/])
353
- expect(options[:drb]).to be_truthy
354
- expect(options[:formatters]).to eq([['global']])
355
- end
356
- end
357
-
358
- it "prefers SPEC_OPTS over CLI" do
359
- with_env_vars 'SPEC_OPTS' => "--format spec_opts" do
360
- expect(parse_options("--format", "cli")[:formatters]).to eq([['spec_opts']])
361
- end
362
- end
363
-
364
- it "prefers CLI over file options" do
365
- File.open("./.rspec", "w") {|f| f << "--format project"}
366
- File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--format global"}
367
- expect(parse_options("--format", "cli")[:formatters]).to eq([['cli']])
368
- end
369
-
370
- it "prefers project file options over global file options" do
371
- File.open("./.rspec", "w") {|f| f << "--format project"}
372
- File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--format global"}
373
- expect(parse_options[:formatters]).to eq([['project']])
374
- end
375
-
376
- it "prefers local file options over project file options" do
377
- File.open("./.rspec-local", "w") {|f| f << "--format local"}
378
- File.open("./.rspec", "w") {|f| f << "--format global"}
379
- expect(parse_options[:formatters]).to eq([['local']])
380
- end
381
-
382
- it "parses options file correctly if erb code has trimming options" do
383
- File.open("./.rspec", "w") do |f|
384
- f << "<% if true -%>\n"
385
- f << "--format local\n"
386
- f << "<%- end %>\n"
387
- end
388
-
389
- expect(parse_options[:formatters]).to eq([['local']])
390
- end
391
-
392
- context "with custom options file" do
393
- it "ignores project and global options files" do
394
- File.open("./.rspec", "w") {|f| f << "--format project"}
395
- File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--format global"}
396
- File.open("./custom.opts", "w") {|f| f << "--color"}
397
- options = parse_options("-O", "./custom.opts")
398
- expect(options[:format]).to be_nil
399
- expect(options[:color]).to be_truthy
400
- end
401
-
402
- it "parses -e 'full spec description'" do
403
- File.open("./custom.opts", "w") {|f| f << "-e 'The quick brown fox jumps over the lazy dog'"}
404
- options = parse_options("-O", "./custom.opts")
405
- expect(options[:full_description]).to eq([/The\ quick\ brown\ fox\ jumps\ over\ the\ lazy\ dog/])
406
- end
407
- end
408
- end
409
- end