rspec-core 3.0.0.beta1 → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
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