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,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