rspec-core 3.0.0.beta1 → 3.0.0.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. data.tar.gz.sig +0 -0
  2. data/Changelog.md +137 -0
  3. data/README.md +2 -2
  4. data/exe/rspec +2 -23
  5. data/features/README.md +1 -5
  6. data/features/command_line/README.md +7 -10
  7. data/features/command_line/exit_status.feature +1 -1
  8. data/features/command_line/format_option.feature +1 -1
  9. data/features/command_line/init.feature +40 -1
  10. data/features/command_line/line_number_option.feature +2 -2
  11. data/features/command_line/ruby.feature +5 -4
  12. data/features/configuration/enable_global_dsl.feature +54 -0
  13. data/features/example_groups/aliasing.feature +48 -0
  14. data/features/example_groups/basic_structure.feature +1 -1
  15. data/features/expectation_framework_integration/configure_expectation_framework.feature +1 -1
  16. data/features/filtering/if_and_unless.feature +0 -30
  17. data/features/formatters/custom_formatter.feature +32 -0
  18. data/features/formatters/regression_tests.feature +95 -0
  19. data/features/hooks/around_hooks.feature +1 -0
  20. data/features/hooks/before_and_after_hooks.feature +2 -2
  21. data/features/mock_framework_integration/use_flexmock.feature +11 -13
  22. data/features/mock_framework_integration/use_mocha.feature +11 -13
  23. data/features/mock_framework_integration/use_rr.feature +11 -13
  24. data/features/mock_framework_integration/use_rspec.feature +11 -13
  25. data/features/pending_and_skipped_examples/README.md +3 -0
  26. data/features/pending_and_skipped_examples/pending_examples.feature +118 -0
  27. data/features/pending_and_skipped_examples/skipped_examples.feature +106 -0
  28. data/features/step_definitions/additional_cli_steps.rb +34 -0
  29. data/features/subject/explicit_subject.feature +1 -1
  30. data/features/subject/one_liner_syntax.feature +71 -0
  31. data/lib/rspec/core.rb +6 -14
  32. data/lib/rspec/core/backtrace_formatter.rb +16 -4
  33. data/lib/rspec/core/command_line.rb +2 -3
  34. data/lib/rspec/core/configuration.rb +114 -125
  35. data/lib/rspec/core/configuration_options.rb +32 -18
  36. data/lib/rspec/core/dsl.rb +80 -18
  37. data/lib/rspec/core/example.rb +84 -33
  38. data/lib/rspec/core/example_group.rb +95 -43
  39. data/lib/rspec/core/filter_manager.rb +31 -40
  40. data/lib/rspec/core/formatters.rb +137 -0
  41. data/lib/rspec/core/formatters/base_formatter.rb +28 -41
  42. data/lib/rspec/core/formatters/base_text_formatter.rb +26 -37
  43. data/lib/rspec/core/formatters/deprecation_formatter.rb +48 -27
  44. data/lib/rspec/core/formatters/documentation_formatter.rb +27 -22
  45. data/lib/rspec/core/formatters/html_formatter.rb +48 -56
  46. data/lib/rspec/core/formatters/html_printer.rb +11 -18
  47. data/lib/rspec/core/formatters/json_formatter.rb +18 -22
  48. data/lib/rspec/core/formatters/legacy_formatter.rb +227 -0
  49. data/lib/rspec/core/formatters/progress_formatter.rb +7 -10
  50. data/lib/rspec/core/hooks.rb +250 -217
  51. data/lib/rspec/core/memoized_helpers.rb +43 -9
  52. data/lib/rspec/core/mocking_adapters/flexmock.rb +29 -0
  53. data/lib/rspec/core/{mocking/with_mocha.rb → mocking_adapters/mocha.rb} +19 -16
  54. data/lib/rspec/core/mocking_adapters/null.rb +12 -0
  55. data/lib/rspec/core/mocking_adapters/rr.rb +28 -0
  56. data/lib/rspec/core/mocking_adapters/rspec.rb +30 -0
  57. data/lib/rspec/core/notifications.rb +100 -0
  58. data/lib/rspec/core/option_parser.rb +11 -18
  59. data/lib/rspec/core/pending.rb +78 -47
  60. data/lib/rspec/core/project_initializer.rb +2 -49
  61. data/lib/rspec/core/project_initializer/dot_rspec +3 -0
  62. data/lib/rspec/core/project_initializer/spec_helper.rb +82 -0
  63. data/lib/rspec/core/rake_task.rb +5 -14
  64. data/lib/rspec/core/reporter.rb +24 -32
  65. data/lib/rspec/core/ruby_project.rb +1 -1
  66. data/lib/rspec/core/runner.rb +14 -4
  67. data/lib/rspec/core/shared_example_group.rb +40 -13
  68. data/lib/rspec/core/version.rb +1 -1
  69. data/spec/command_line/order_spec.rb +15 -15
  70. data/spec/rspec/core/backtrace_formatter_spec.rb +15 -1
  71. data/spec/rspec/core/command_line_spec.rb +18 -17
  72. data/spec/rspec/core/configuration_options_spec.rb +57 -34
  73. data/spec/rspec/core/configuration_spec.rb +162 -184
  74. data/spec/rspec/core/drb_command_line_spec.rb +5 -7
  75. data/spec/rspec/core/drb_options_spec.rb +2 -2
  76. data/spec/rspec/core/dsl_spec.rb +79 -15
  77. data/spec/rspec/core/example_group_spec.rb +253 -39
  78. data/spec/rspec/core/example_spec.rb +149 -33
  79. data/spec/rspec/core/filter_manager_spec.rb +9 -26
  80. data/spec/rspec/core/formatters/base_formatter_spec.rb +2 -5
  81. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +42 -145
  82. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +64 -34
  83. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +15 -28
  84. data/spec/rspec/core/formatters/helpers_spec.rb +2 -2
  85. data/spec/rspec/core/formatters/{html_formatted-1.8.7.html → html_formatted-2.1.0.html} +22 -44
  86. data/spec/rspec/core/formatters/{html_formatted-1.8.7-jruby.html → html_formatted.html} +30 -49
  87. data/spec/rspec/core/formatters/html_formatter_spec.rb +35 -19
  88. data/spec/rspec/core/formatters/json_formatter_spec.rb +42 -40
  89. data/spec/rspec/core/formatters/legacy_formatter_spec.rb +137 -0
  90. data/spec/rspec/core/formatters/progress_formatter_spec.rb +38 -25
  91. data/spec/rspec/core/formatters/snippet_extractor_spec.rb +1 -1
  92. data/spec/rspec/core/formatters_spec.rb +120 -0
  93. data/spec/rspec/core/hooks_filtering_spec.rb +1 -1
  94. data/spec/rspec/core/hooks_spec.rb +13 -2
  95. data/spec/rspec/core/memoized_helpers_spec.rb +17 -8
  96. data/spec/rspec/core/metadata_spec.rb +3 -3
  97. data/spec/rspec/core/option_parser_spec.rb +53 -46
  98. data/spec/rspec/core/ordering_spec.rb +4 -4
  99. data/spec/rspec/core/pending_example_spec.rb +23 -126
  100. data/spec/rspec/core/pending_spec.rb +8 -0
  101. data/spec/rspec/core/project_initializer_spec.rb +8 -41
  102. data/spec/rspec/core/rake_task_spec.rb +15 -4
  103. data/spec/rspec/core/random_spec.rb +1 -1
  104. data/spec/rspec/core/reporter_spec.rb +50 -37
  105. data/spec/rspec/core/resources/formatter_specs.rb +9 -11
  106. data/spec/rspec/core/rspec_matchers_spec.rb +1 -1
  107. data/spec/rspec/core/ruby_project_spec.rb +3 -3
  108. data/spec/rspec/core/runner_spec.rb +65 -23
  109. data/spec/rspec/core/shared_context_spec.rb +4 -4
  110. data/spec/rspec/core/shared_example_group/collection_spec.rb +1 -1
  111. data/spec/rspec/core/shared_example_group_spec.rb +20 -11
  112. data/spec/rspec/core/warnings_spec.rb +1 -1
  113. data/spec/rspec/core/world_spec.rb +10 -10
  114. data/spec/rspec/core_spec.rb +2 -2
  115. data/spec/spec_helper.rb +12 -24
  116. data/spec/support/config_options_helper.rb +1 -3
  117. data/spec/support/formatter_support.rb +83 -0
  118. data/spec/support/isolate_load_path_mutation.rb +1 -2
  119. data/spec/support/isolated_directory.rb +1 -1
  120. data/spec/support/isolated_home_directory.rb +1 -1
  121. data/spec/support/legacy_formatter_using_sub_classing_example.rb +87 -0
  122. data/spec/support/matchers.rb +20 -0
  123. data/spec/support/mathn_integration_support.rb +2 -2
  124. data/spec/support/old_style_formatter_example.rb +69 -0
  125. data/spec/support/shared_example_groups.rb +1 -1
  126. data/spec/support/spec_files.rb +3 -3
  127. metadata +192 -69
  128. metadata.gz.sig +3 -1
  129. checksums.yaml +0 -15
  130. checksums.yaml.gz.sig +0 -2
  131. data/features/configuration/show_failures_in_pending_blocks.feature +0 -61
  132. data/features/pending/pending_examples.feature +0 -229
  133. data/features/subject/implicit_receiver.feature +0 -29
  134. data/lib/rspec/core/mocking/with_absolutely_nothing.rb +0 -11
  135. data/lib/rspec/core/mocking/with_flexmock.rb +0 -27
  136. data/lib/rspec/core/mocking/with_rr.rb +0 -27
  137. data/lib/rspec/core/mocking/with_rspec.rb +0 -27
  138. data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +0 -477
  139. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +0 -425
  140. data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +0 -416
  141. data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +0 -477
  142. data/spec/rspec/core/formatters/html_formatted-1.9.3.html +0 -419
  143. data/spec/rspec/core/formatters/html_formatted-2.0.0.html +0 -425
  144. data/spec/support/in_sub_process.rb +0 -37
  145. data/spec/support/sandboxed_mock_space.rb +0 -100
@@ -4,7 +4,7 @@ require 'rspec/core/formatters/snippet_extractor'
4
4
  module RSpec
5
5
  module Core
6
6
  module Formatters
7
- describe SnippetExtractor do
7
+ RSpec.describe SnippetExtractor do
8
8
  it "falls back on a default message when it doesn't understand a line" do
9
9
  expect(RSpec::Core::Formatters::SnippetExtractor.new.snippet_for("blech")).to eq(["# Couldn't get snippet for blech", 1])
10
10
  end
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ module RSpec::Core::Formatters
4
+ describe Loader do
5
+
6
+ describe "#add(formatter)" do
7
+ let(:loader) { Loader.new reporter }
8
+ let(:output) { StringIO.new }
9
+ let(:path) { File.join(Dir.tmpdir, 'output.txt') }
10
+ let(:reporter) { double "reporter", :register_listener => nil }
11
+
12
+ it "adds to the list of formatters" do
13
+ loader.add :documentation, output
14
+ expect(loader.formatters.first).to be_an_instance_of(DocumentationFormatter)
15
+ end
16
+
17
+ it "finds a formatter by name (w/ Symbol)" do
18
+ loader.add :documentation, output
19
+ expect(loader.formatters.first).to be_an_instance_of(DocumentationFormatter)
20
+ end
21
+
22
+ it "finds a formatter by name (w/ String)" do
23
+ loader.add 'documentation', output
24
+ expect(loader.formatters.first).to be_an_instance_of(DocumentationFormatter)
25
+ end
26
+
27
+ it "finds a formatter by class" do
28
+ formatter_class = Class.new(BaseTextFormatter)
29
+ Loader.formatters[formatter_class] = []
30
+ loader.add formatter_class, output
31
+ expect(loader.formatters.first).to be_an_instance_of(formatter_class)
32
+ end
33
+
34
+ it "finds a formatter by class name" do
35
+ stub_const("CustomFormatter", Class.new(BaseFormatter))
36
+ Loader.formatters[CustomFormatter] = []
37
+ loader.add "CustomFormatter", output
38
+ expect(loader.formatters.first).to be_an_instance_of(CustomFormatter)
39
+ end
40
+
41
+ it "handles formatters that dont implement notifications" do
42
+ formatter_class = Struct.new(:output)
43
+ loader.add formatter_class, output
44
+ expect(loader.formatters.first).to be_an_instance_of(RSpec::Core::Formatters::LegacyFormatter)
45
+ end
46
+
47
+ context "when a legacy formatter is added" do
48
+ formatter_class = Struct.new(:output)
49
+
50
+ it "issues a deprecation" do
51
+ expect_warn_deprecation_with_call_site(__FILE__, __LINE__ + 2,
52
+ /The #{formatter_class} formatter uses the deprecated formatter interface/)
53
+ loader.add formatter_class, output
54
+ end
55
+
56
+ it "does not mistakenly add in the progress formatter" do
57
+ # When we issue a deprecation warning it triggers `setup_defaults`,
58
+ # which adds the progress formatter if it thinks no formatter has been
59
+ # added yet.
60
+ allow(RSpec).to receive(:warn_deprecation) do
61
+ loader.setup_default(StringIO.new, StringIO.new)
62
+ end
63
+
64
+ loader.add formatter_class, output
65
+
66
+ expect(loader.formatters.grep(RSpec::Core::Formatters::ProgressFormatter)).to eq([])
67
+ end
68
+ end
69
+
70
+ it "finds a formatter by class fully qualified name" do
71
+ stub_const("RSpec::CustomFormatter", (Class.new(BaseFormatter)))
72
+ Loader.formatters[RSpec::CustomFormatter] = []
73
+ loader.add "RSpec::CustomFormatter", output
74
+ expect(loader.formatters.first).to be_an_instance_of(RSpec::CustomFormatter)
75
+ end
76
+
77
+ it "requires a formatter file based on its fully qualified name" do
78
+ expect(loader).to receive(:require).with('rspec/custom_formatter') do
79
+ stub_const("RSpec::CustomFormatter", (Class.new(BaseFormatter)))
80
+ Loader.formatters[RSpec::CustomFormatter] = []
81
+ end
82
+ loader.add "RSpec::CustomFormatter", output
83
+ expect(loader.formatters.first).to be_an_instance_of(RSpec::CustomFormatter)
84
+ end
85
+
86
+ it "raises NameError if class is unresolvable" do
87
+ expect(loader).to receive(:require).with('rspec/custom_formatter3')
88
+ expect { loader.add "RSpec::CustomFormatter3", output }.to raise_error(NameError)
89
+ end
90
+
91
+ it "raises ArgumentError if formatter is unknown" do
92
+ expect { loader.add :progresss, output }.to raise_error(ArgumentError)
93
+ end
94
+
95
+ context "with a 2nd arg defining the output" do
96
+ it "creates a file at that path and sets it as the output" do
97
+ loader.add('doc', path)
98
+ expect(loader.formatters.first.output).to be_a(File)
99
+ expect(loader.formatters.first.output.path).to eq(path)
100
+ end
101
+ end
102
+
103
+ context "when a duplicate formatter exists" do
104
+ before { loader.add :documentation, output }
105
+
106
+ it "doesn't add the formatter for the same output target" do
107
+ expect {
108
+ loader.add :documentation, output
109
+ }.not_to change { loader.formatters.length }
110
+ end
111
+
112
+ it "adds the formatter for different output targets" do
113
+ expect {
114
+ loader.add :documentation, path
115
+ }.to change { loader.formatters.length }
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  module RSpec::Core
4
- describe "config block hook filtering" do
4
+ RSpec.describe "config block hook filtering" do
5
5
  describe "unfiltered hooks" do
6
6
  it "is run" do
7
7
  filters = []
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  module RSpec::Core
4
- describe Hooks do
4
+ RSpec.describe Hooks do
5
5
  class HooksHost
6
6
  include Hooks
7
7
 
@@ -69,7 +69,7 @@ module RSpec::Core
69
69
 
70
70
  expect { |b|
71
71
  instance.send(type, scope, &b)
72
- instance.run_hook(type, scope)
72
+ instance.hooks.run(type, scope)
73
73
  }.not_to yield_control
74
74
  end
75
75
  end
@@ -279,5 +279,16 @@ module RSpec::Core
279
279
  expect(messages).to eq ["hook 1", "hook 2", "example"]
280
280
  end
281
281
  end
282
+
283
+ it "only defines methods that are intended to be part of RSpec's public API (+ `hooks`)" do
284
+ expect(Hooks.private_instance_methods).to eq([])
285
+
286
+ expect(Hooks.instance_methods.map(&:to_sym)).to match_array([
287
+ :before, :after, :around,
288
+ :append_before, :append_after,
289
+ :prepend_before, :prepend_after,
290
+ :hooks
291
+ ])
292
+ end
282
293
  end
283
294
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module RSpec::Core
4
- describe MemoizedHelpers do
4
+ RSpec.describe MemoizedHelpers do
5
5
  before(:each) { RSpec.configuration.configure_expectation_framework }
6
6
 
7
7
  def subject_value_for(describe_arg, &block)
@@ -73,7 +73,7 @@ module RSpec::Core
73
73
  it "is evaluated once per example" do
74
74
  group = ExampleGroup.describe(Array)
75
75
  group.before do
76
- Object.should_receive(:this_question?).once.and_return(falsy_value)
76
+ expect(Object).to receive(:this_question?).once.and_return(falsy_value)
77
77
  end
78
78
  group.subject do
79
79
  Object.this_question?
@@ -298,7 +298,16 @@ module RSpec::Core
298
298
  it { should_not be_not_ok }
299
299
  end
300
300
 
301
- expect(group.run).to be_truthy
301
+ expect(group.run).to be true
302
+ end
303
+
304
+ it 'supports a new expect-based syntax' do
305
+ group = ExampleGroup.describe([1, 2, 3]) do
306
+ it { is_expected.to be_an Array }
307
+ it { is_expected.not_to include 4 }
308
+ end
309
+
310
+ expect(group.run).to be true
302
311
  end
303
312
  end
304
313
 
@@ -316,7 +325,7 @@ module RSpec::Core
316
325
  end
317
326
  end
318
327
 
319
- describe "#let" do
328
+ RSpec.describe "#let" do
320
329
  let(:counter) do
321
330
  Class.new do
322
331
  def initialize
@@ -434,7 +443,7 @@ module RSpec::Core
434
443
  end
435
444
  end
436
445
 
437
- describe "#let!" do
446
+ RSpec.describe "#let!" do
438
447
  subject { [1,2,3] }
439
448
  let!(:popped) { subject.pop }
440
449
 
@@ -447,7 +456,7 @@ module RSpec::Core
447
456
  end
448
457
  end
449
458
 
450
- describe 'using subject in before and let blocks' do
459
+ RSpec.describe 'using subject in before and let blocks' do
451
460
  shared_examples_for 'a subject' do
452
461
  let(:subject_id_in_let) { subject.object_id }
453
462
  before { @subject_id_in_before = subject.object_id }
@@ -456,7 +465,7 @@ module RSpec::Core
456
465
  expect(subject_id_in_let).to eq(@subject_id_in_before)
457
466
  end
458
467
 
459
- it { should eq(subject) }
468
+ it { is_expected.to eq(subject) }
460
469
  end
461
470
 
462
471
  describe Object do
@@ -476,7 +485,7 @@ module RSpec::Core
476
485
  end
477
486
  end
478
487
 
479
- describe 'Module#define_method' do
488
+ RSpec.describe 'Module#define_method' do
480
489
  it 'is still a private method' do
481
490
  a_module = Module.new
482
491
  expect { a_module.define_method(:name) { "implementation" } }.to raise_error NoMethodError
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  module RSpec
4
4
  module Core
5
- describe Metadata do
5
+ RSpec.describe Metadata do
6
6
 
7
7
  describe '.relative_path' do
8
8
  let(:here) { File.expand_path(".") }
@@ -50,7 +50,7 @@ module RSpec
50
50
  let(:next_example_metadata) { group_metadata.for_example('next_example', :caller => ["foo_spec.rb:#{example_line_number + 2}"]) }
51
51
  let(:world) { World.new }
52
52
 
53
- before { RSpec.stub(:world) { world } }
53
+ before { allow(RSpec).to receive(:world) { world } }
54
54
 
55
55
  shared_examples_for "matching by line number" do
56
56
  let(:preceeding_declaration_lines) {{
@@ -61,7 +61,7 @@ module RSpec
61
61
  (example_metadata[:line_number] + 2) => example_metadata[:line_number] + 2,
62
62
  }}
63
63
  before do
64
- world.should_receive(:preceding_declaration_line).at_least(:once).and_return do |v|
64
+ expect(world).to receive(:preceding_declaration_line).at_least(:once) do |v|
65
65
  preceeding_declaration_lines[v]
66
66
  end
67
67
  end
@@ -1,53 +1,60 @@
1
1
  require "spec_helper"
2
2
 
3
3
  module RSpec::Core
4
- describe OptionParser do
4
+ RSpec.describe OptionParser do
5
5
  let(:output_file){ mock File }
6
6
 
7
7
  before do
8
- RSpec.stub(:deprecate)
9
- File.stub(:open).with("foo.txt",'w') { (output_file) }
8
+ allow(RSpec).to receive(:deprecate)
9
+ allow(File).to receive(:open).with("foo.txt",'w') { (output_file) }
10
10
  end
11
11
 
12
12
  it "does not parse empty args" do
13
13
  parser = Parser.new
14
- OptionParser.should_not_receive(:new)
15
- parser.parse!([])
14
+ expect(OptionParser).not_to receive(:new)
15
+ parser.parse([])
16
16
  end
17
17
 
18
18
  it "proposes you to use --help and returns an error on incorrect argument" do
19
19
  parser = Parser.new
20
20
  option = "--my_wrong_arg"
21
21
 
22
- parser.should_receive(:abort) do |msg|
22
+ expect(parser).to receive(:abort) do |msg|
23
23
  expect(msg).to include('use --help', option)
24
24
  end
25
25
 
26
- parser.parse!([option])
26
+ parser.parse([option])
27
27
  end
28
28
 
29
- describe "--formatter" do
30
- it "is deprecated" do
31
- RSpec.should_receive(:deprecate)
32
- Parser.parse!(%w[--formatter doc])
33
- end
29
+ {
30
+ '--init' => ['-i','--I'],
31
+ '--default-path' => ['-d'],
32
+ '--dry-run' => ['-d'],
33
+ '--drb-port' => ['-d'],
34
+ }.each do |long, shorts|
35
+ shorts.each do |option|
36
+ it "won't parse #{option} as a shorthand for #{long}" do
37
+ parser = Parser.new
38
+
39
+ expect(parser).to receive(:abort) do |msg|
40
+ expect(msg).to include('use --help', option)
41
+ end
34
42
 
35
- it "gets converted to --format" do
36
- options = Parser.parse!(%w[--formatter doc])
37
- expect(options[:formatters].first).to eq(["doc"])
43
+ parser.parse([option])
44
+ end
38
45
  end
39
46
  end
40
47
 
41
48
  describe "--default_path" do
42
49
  it "gets converted to --default-path" do
43
- options = Parser.parse!(%w[--default_path foo])
50
+ options = Parser.parse(%w[--default_path foo])
44
51
  expect(options[:default_path]).to eq "foo"
45
52
  end
46
53
  end
47
54
 
48
55
  describe "--line_number" do
49
56
  it "gets converted to --line-number" do
50
- options = Parser.parse!(%w[--line_number 3])
57
+ options = Parser.parse(%w[--line_number 3])
51
58
  expect(options[:line_numbers]).to eq ["3"]
52
59
  end
53
60
  end
@@ -55,7 +62,7 @@ module RSpec::Core
55
62
 
56
63
  describe "--default-path" do
57
64
  it "sets the default path where RSpec looks for examples" do
58
- options = Parser.parse!(%w[--default-path foo])
65
+ options = Parser.parse(%w[--default-path foo])
59
66
  expect(options[:default_path]).to eq "foo"
60
67
  end
61
68
  end
@@ -63,7 +70,7 @@ module RSpec::Core
63
70
  %w[--line-number -l].each do |option|
64
71
  describe option do
65
72
  it "sets the line number of an example to run" do
66
- options = Parser.parse!([option, "3"])
73
+ options = Parser.parse([option, "3"])
67
74
  expect(options[:line_numbers]).to eq ["3"]
68
75
  end
69
76
  end
@@ -72,7 +79,7 @@ module RSpec::Core
72
79
  %w[--format -f].each do |option|
73
80
  describe option do
74
81
  it "defines the formatter" do
75
- options = Parser.parse!([option, 'doc'])
82
+ options = Parser.parse([option, 'doc'])
76
83
  expect(options[:formatters].first).to eq(["doc"])
77
84
  end
78
85
  end
@@ -80,7 +87,7 @@ module RSpec::Core
80
87
 
81
88
  %w[--out -o].each do |option|
82
89
  describe option do
83
- let(:options) { Parser.parse!([option, 'out.txt']) }
90
+ let(:options) { Parser.parse([option, 'out.txt']) }
84
91
 
85
92
  it "sets the output stream for the formatter" do
86
93
  expect(options[:formatters].last).to eq(['progress', 'out.txt'])
@@ -89,7 +96,7 @@ module RSpec::Core
89
96
  context "with multiple formatters" do
90
97
  context "after last formatter" do
91
98
  it "sets the output stream for the last formatter" do
92
- options = Parser.parse!(['-f', 'progress', '-f', 'doc', option, 'out.txt'])
99
+ options = Parser.parse(['-f', 'progress', '-f', 'doc', option, 'out.txt'])
93
100
  expect(options[:formatters][0]).to eq(['progress'])
94
101
  expect(options[:formatters][1]).to eq(['doc', 'out.txt'])
95
102
  end
@@ -97,7 +104,7 @@ module RSpec::Core
97
104
 
98
105
  context "after first formatter" do
99
106
  it "sets the output stream for the first formatter" do
100
- options = Parser.parse!(['-f', 'progress', option, 'out.txt', '-f', 'doc'])
107
+ options = Parser.parse(['-f', 'progress', option, 'out.txt', '-f', 'doc'])
101
108
  expect(options[:formatters][0]).to eq(['progress', 'out.txt'])
102
109
  expect(options[:formatters][1]).to eq(['doc'])
103
110
  end
@@ -109,7 +116,7 @@ module RSpec::Core
109
116
  %w[--example -e].each do |option|
110
117
  describe option do
111
118
  it "escapes the arg" do
112
- options = Parser.parse!([option, "this (and that)"])
119
+ options = Parser.parse([option, "this (and that)"])
113
120
  expect(options[:full_description].length).to eq(1)
114
121
  expect("this (and that)").to match(options[:full_description].first)
115
122
  end
@@ -119,7 +126,7 @@ module RSpec::Core
119
126
  %w[--pattern -P].each do |option|
120
127
  describe option do
121
128
  it "sets the filename pattern" do
122
- options = Parser.parse!([option, 'spec/**/*.spec'])
129
+ options = Parser.parse([option, 'spec/**/*.spec'])
123
130
  expect(options[:pattern]).to eq('spec/**/*.spec')
124
131
  end
125
132
  end
@@ -129,69 +136,69 @@ module RSpec::Core
129
136
  describe option do
130
137
  context "without ~" do
131
138
  it "treats no value as true" do
132
- options = Parser.parse!([option, 'foo'])
139
+ options = Parser.parse([option, 'foo'])
133
140
  expect(options[:inclusion_filter]).to eq(:foo => true)
134
141
  end
135
142
 
136
143
  it "treats 'true' as true" do
137
- options = Parser.parse!([option, 'foo:true'])
144
+ options = Parser.parse([option, 'foo:true'])
138
145
  expect(options[:inclusion_filter]).to eq(:foo => true)
139
146
  end
140
147
 
141
148
  it "treats 'nil' as nil" do
142
- options = Parser.parse!([option, 'foo:nil'])
149
+ options = Parser.parse([option, 'foo:nil'])
143
150
  expect(options[:inclusion_filter]).to eq(:foo => nil)
144
151
  end
145
152
 
146
153
  it "treats 'false' as false" do
147
- options = Parser.parse!([option, 'foo:false'])
154
+ options = Parser.parse([option, 'foo:false'])
148
155
  expect(options[:inclusion_filter]).to eq(:foo => false)
149
156
  end
150
157
 
151
158
  it "merges muliple invocations" do
152
- options = Parser.parse!([option, 'foo:false', option, 'bar:true', option, 'foo:true'])
159
+ options = Parser.parse([option, 'foo:false', option, 'bar:true', option, 'foo:true'])
153
160
  expect(options[:inclusion_filter]).to eq(:foo => true, :bar => true)
154
161
  end
155
162
 
156
163
  it "treats 'any_string' as 'any_string'" do
157
- options = Parser.parse!([option, 'foo:any_string'])
164
+ options = Parser.parse([option, 'foo:any_string'])
158
165
  expect(options[:inclusion_filter]).to eq(:foo => 'any_string')
159
166
  end
160
167
 
161
168
  it "treats ':any_sym' as :any_sym" do
162
- options = Parser.parse!([option, 'foo::any_sym'])
169
+ options = Parser.parse([option, 'foo::any_sym'])
163
170
  expect(options[:inclusion_filter]).to eq(:foo => :any_sym)
164
171
  end
165
172
 
166
173
  it "treats '42' as 42" do
167
- options = Parser.parse!([option, 'foo:42'])
174
+ options = Parser.parse([option, 'foo:42'])
168
175
  expect(options[:inclusion_filter]).to eq(:foo => 42)
169
176
  end
170
177
 
171
178
  it "treats '3.146' as 3.146" do
172
- options = Parser.parse!([option, 'foo:3.146'])
179
+ options = Parser.parse([option, 'foo:3.146'])
173
180
  expect(options[:inclusion_filter]).to eq(:foo => 3.146)
174
181
  end
175
182
  end
176
183
 
177
184
  context "with ~" do
178
185
  it "treats no value as true" do
179
- options = Parser.parse!([option, '~foo'])
186
+ options = Parser.parse([option, '~foo'])
180
187
  expect(options[:exclusion_filter]).to eq(:foo => true)
181
188
  end
182
189
 
183
190
  it "treats 'true' as true" do
184
- options = Parser.parse!([option, '~foo:true'])
191
+ options = Parser.parse([option, '~foo:true'])
185
192
  expect(options[:exclusion_filter]).to eq(:foo => true)
186
193
  end
187
194
 
188
195
  it "treats 'nil' as nil" do
189
- options = Parser.parse!([option, '~foo:nil'])
196
+ options = Parser.parse([option, '~foo:nil'])
190
197
  expect(options[:exclusion_filter]).to eq(:foo => nil)
191
198
  end
192
199
 
193
200
  it "treats 'false' as false" do
194
- options = Parser.parse!([option, '~foo:false'])
201
+ options = Parser.parse([option, '~foo:false'])
195
202
  expect(options[:exclusion_filter]).to eq(:foo => false)
196
203
  end
197
204
  end
@@ -200,13 +207,13 @@ module RSpec::Core
200
207
 
201
208
  describe "--order" do
202
209
  it "is nil by default" do
203
- expect(Parser.parse!([])[:order]).to be_nil
210
+ expect(Parser.parse([])[:order]).to be_nil
204
211
  end
205
212
 
206
213
  %w[rand random].each do |option|
207
214
  context "with #{option}" do
208
215
  it "defines the order as random" do
209
- options = Parser.parse!(['--order', option])
216
+ options = Parser.parse(['--order', option])
210
217
  expect(options[:order]).to eq(option)
211
218
  end
212
219
  end
@@ -215,38 +222,38 @@ module RSpec::Core
215
222
 
216
223
  describe "--seed" do
217
224
  it "sets the order to rand:SEED" do
218
- options = Parser.parse!(%w[--seed 123])
225
+ options = Parser.parse(%w[--seed 123])
219
226
  expect(options[:order]).to eq("rand:123")
220
227
  end
221
228
  end
222
229
 
223
230
  describe '--profile' do
224
231
  it 'sets profile_examples to true by default' do
225
- options = Parser.parse!(%w[--profile])
232
+ options = Parser.parse(%w[--profile])
226
233
  expect(options[:profile_examples]).to eq true
227
234
  end
228
235
 
229
236
  it 'sets profile_examples to supplied int' do
230
- options = Parser.parse!(%w[--profile 10])
237
+ options = Parser.parse(%w[--profile 10])
231
238
  expect(options[:profile_examples]).to eq 10
232
239
  end
233
240
 
234
241
  it 'sets profile_examples to true when accidentally combined with path' do
235
242
  allow_warning
236
- options = Parser.parse!(%w[--profile some/path])
243
+ options = Parser.parse(%w[--profile some/path])
237
244
  expect(options[:profile_examples]).to eq true
238
245
  end
239
246
 
240
247
  it 'warns when accidentally combined with path' do
241
248
  expect_warning_without_call_site "Non integer specified as profile count"
242
- options = Parser.parse!(%w[--profile some/path])
249
+ options = Parser.parse(%w[--profile some/path])
243
250
  expect(options[:profile_examples]).to eq true
244
251
  end
245
252
  end
246
253
 
247
254
  describe '--warning' do
248
255
  it 'enables warnings' do
249
- options = Parser.parse!(%w[--warnings])
256
+ options = Parser.parse(%w[--warnings])
250
257
  expect(options[:warnings]).to eq true
251
258
  end
252
259
  end