rspec-core 2.13.1 → 2.14.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. data/Changelog.md +80 -0
  2. data/exe/autospec +1 -1
  3. data/features/README.md +2 -2
  4. data/features/command_line/format_option.feature +8 -14
  5. data/features/command_line/line_number_appended_to_path.feature +4 -4
  6. data/features/command_line/line_number_option.feature +1 -1
  7. data/features/command_line/rake_task.feature +2 -2
  8. data/features/command_line/require_option.feature +43 -0
  9. data/features/command_line/ruby.feature +2 -2
  10. data/features/command_line/warnings_option.feature +27 -0
  11. data/features/configuration/backtrace_clean_patterns.feature +2 -2
  12. data/features/configuration/deprecation_stream.feature +58 -0
  13. data/features/configuration/pattern.feature +8 -0
  14. data/features/configuration/profile.feature +59 -2
  15. data/features/configuration/read_options_from_file.feature +8 -5
  16. data/features/configuration/run_all_when_everything_filtered.feature +20 -4
  17. data/features/example_groups/basic_structure.feature +1 -1
  18. data/features/example_groups/shared_context.feature +1 -1
  19. data/features/example_groups/shared_examples.feature +72 -0
  20. data/features/filtering/exclusion_filters.feature +10 -10
  21. data/features/formatters/custom_formatter.feature +1 -1
  22. data/features/hooks/before_and_after_hooks.feature +19 -19
  23. data/features/mock_framework_integration/use_any_framework.feature +6 -6
  24. data/features/mock_framework_integration/use_flexmock.feature +3 -3
  25. data/features/mock_framework_integration/use_mocha.feature +3 -3
  26. data/features/mock_framework_integration/use_rr.feature +3 -3
  27. data/features/mock_framework_integration/use_rspec.feature +3 -3
  28. data/features/subject/implicit_subject.feature +1 -1
  29. data/lib/rspec/core.rb +20 -3
  30. data/lib/rspec/core/backtrace_cleaner.rb +46 -0
  31. data/lib/rspec/core/backward_compatibility.rb +3 -13
  32. data/lib/rspec/core/configuration.rb +136 -49
  33. data/lib/rspec/core/configuration_options.rb +19 -8
  34. data/lib/rspec/core/deprecation.rb +18 -30
  35. data/lib/rspec/core/example.rb +3 -3
  36. data/lib/rspec/core/example_group.rb +4 -3
  37. data/lib/rspec/core/extensions/kernel.rb +1 -1
  38. data/lib/rspec/core/filter_manager.rb +1 -1
  39. data/lib/rspec/core/formatters.rb +1 -1
  40. data/lib/rspec/core/formatters/base_formatter.rb +10 -1
  41. data/lib/rspec/core/formatters/base_text_formatter.rb +47 -10
  42. data/lib/rspec/core/formatters/deprecation_formatter.rb +35 -0
  43. data/lib/rspec/core/formatters/helpers.rb +12 -5
  44. data/lib/rspec/core/formatters/html_formatter.rb +7 -6
  45. data/lib/rspec/core/formatters/html_printer.rb +13 -12
  46. data/lib/rspec/core/formatters/json_formatter.rb +1 -2
  47. data/lib/rspec/core/formatters/text_mate_formatter.rb +1 -1
  48. data/lib/rspec/core/hooks.rb +9 -0
  49. data/lib/rspec/core/memoized_helpers.rb +19 -8
  50. data/lib/rspec/core/metadata.rb +3 -1
  51. data/lib/rspec/core/mocking/with_flexmock.rb +1 -1
  52. data/lib/rspec/core/mocking/with_rr.rb +1 -1
  53. data/lib/rspec/core/option_parser.rb +6 -2
  54. data/lib/rspec/core/pending.rb +1 -0
  55. data/lib/rspec/core/rake_task.rb +11 -19
  56. data/lib/rspec/core/reporter.rb +33 -4
  57. data/lib/rspec/core/shared_example_group.rb +56 -16
  58. data/lib/rspec/core/shared_example_group/collection.rb +42 -0
  59. data/lib/rspec/core/version.rb +1 -1
  60. data/lib/rspec/core/world.rb +2 -3
  61. data/spec/autotest/rspec_spec.rb +2 -2
  62. data/spec/rspec/core/backtrace_cleaner_spec.rb +68 -0
  63. data/spec/rspec/core/configuration_options_spec.rb +15 -4
  64. data/spec/rspec/core/configuration_spec.rb +202 -19
  65. data/spec/rspec/core/deprecation_spec.rb +41 -0
  66. data/spec/rspec/core/deprecations_spec.rb +10 -12
  67. data/spec/rspec/core/drb_command_line_spec.rb +1 -1
  68. data/spec/rspec/core/example_group_spec.rb +37 -36
  69. data/spec/rspec/core/example_spec.rb +25 -4
  70. data/spec/rspec/core/filter_manager_spec.rb +6 -6
  71. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +101 -36
  72. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +78 -0
  73. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +2 -2
  74. data/spec/rspec/core/formatters/helpers_spec.rb +23 -7
  75. data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +20 -14
  76. data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +69 -169
  77. data/spec/rspec/core/formatters/html_formatted-1.8.7.html +28 -23
  78. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +42 -33
  79. data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +17 -23
  80. data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +57 -157
  81. data/spec/rspec/core/formatters/html_formatted-1.9.3.html +42 -33
  82. data/spec/rspec/core/formatters/html_formatted-2.0.0.html +42 -33
  83. data/spec/rspec/core/formatters/html_formatter_spec.rb +1 -0
  84. data/spec/rspec/core/formatters/progress_formatter_spec.rb +3 -3
  85. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +11 -14
  86. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-rbx.html +103 -203
  87. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +30 -25
  88. data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +42 -33
  89. data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-jruby.html +20 -14
  90. data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-rbx.html +103 -203
  91. data/spec/rspec/core/formatters/text_mate_formatted-1.9.3.html +42 -33
  92. data/spec/rspec/core/formatters/text_mate_formatted-2.0.0.html +42 -33
  93. data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +1 -0
  94. data/spec/rspec/core/memoized_helpers_spec.rb +28 -0
  95. data/spec/rspec/core/metadata_spec.rb +8 -3
  96. data/spec/rspec/core/option_parser_spec.rb +8 -0
  97. data/spec/rspec/core/project_initializer_spec.rb +2 -2
  98. data/spec/rspec/core/rake_task_spec.rb +8 -8
  99. data/spec/rspec/core/reporter_spec.rb +26 -6
  100. data/spec/rspec/core/resources/formatter_specs.rb +3 -3
  101. data/spec/rspec/core/shared_context_spec.rb +20 -0
  102. data/spec/rspec/core/shared_example_group/collection_spec.rb +70 -0
  103. data/spec/rspec/core/shared_example_group_spec.rb +4 -4
  104. data/spec/rspec/core/world_spec.rb +1 -3
  105. data/spec/rspec/core_spec.rb +20 -0
  106. data/spec/spec_helper.rb +29 -29
  107. data/spec/support/helper_methods.rb +9 -1
  108. data/spec/support/isolate_load_path_mutation.rb +6 -0
  109. data/spec/support/sandboxed_mock_space.rb +100 -0
  110. metadata +28 -13
  111. data/features/filtering/run_all_when_everything_filtered.feature +0 -46
  112. data/lib/rspec/core/load_path.rb +0 -3
@@ -0,0 +1,42 @@
1
+ module RSpec
2
+ module Core
3
+ module SharedExampleGroup
4
+ class Collection
5
+
6
+ def initialize(sources, examples)
7
+ @sources, @examples = sources, examples
8
+ end
9
+
10
+ def [](key)
11
+ fetch_examples(key) || warn_deprecation_and_fetch_anyway(key)
12
+ end
13
+
14
+ private
15
+
16
+ def fetch_examples(key)
17
+ @examples[source_for key][key]
18
+ end
19
+
20
+ def source_for(key)
21
+ @sources.reverse.find { |source| @examples[source].has_key? key }
22
+ end
23
+
24
+ def fetch_anyway(key)
25
+ @examples.values.inject({}, &:merge)[key]
26
+ end
27
+
28
+ def warn_deprecation_and_fetch_anyway(key)
29
+ if (example = fetch_anyway key)
30
+ RSpec.warn_deprecation <<-WARNING.gsub(/^ /, '')
31
+ Accessing shared_examples defined across contexts is deprecated.
32
+ Please declare shared_examples within a shared context, or at the top level.
33
+ This message was generated at: #{caller(0)[8]}
34
+ WARNING
35
+ example
36
+ end
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,7 +1,7 @@
1
1
  module RSpec
2
2
  module Core
3
3
  module Version
4
- STRING = '2.13.1'
4
+ STRING = '2.14.0.rc1'
5
5
  end
6
6
  end
7
7
  end
@@ -4,13 +4,12 @@ module RSpec
4
4
 
5
5
  include RSpec::Core::Hooks
6
6
 
7
- attr_reader :example_groups, :shared_example_groups, :filtered_examples
7
+ attr_reader :example_groups, :filtered_examples
8
8
  attr_accessor :wants_to_quit
9
9
 
10
10
  def initialize(configuration=RSpec.configuration)
11
11
  @configuration = configuration
12
12
  @example_groups = [].extend(Extensions::Ordered::ExampleGroups)
13
- @shared_example_groups = {}
14
13
  @filtered_examples = Hash.new { |hash,group|
15
14
  hash[group] = begin
16
15
  examples = group.examples.dup
@@ -23,7 +22,7 @@ module RSpec
23
22
 
24
23
  def reset
25
24
  example_groups.clear
26
- shared_example_groups.clear
25
+ SharedExampleGroup::Registry.clear
27
26
  end
28
27
 
29
28
  def filter_manager
@@ -40,8 +40,8 @@ describe Autotest::Rspec2 do
40
40
  expect(actual_command).to match(expected_command)
41
41
 
42
42
  actual_command =~ expected_command
43
- expect($1).to match /#{File.expand_path('file_one')}/
44
- expect($1).to match /#{File.expand_path('file_two')}/
43
+ expect($1).to match(/#{File.expand_path('file_one')}/)
44
+ expect($1).to match(/#{File.expand_path('file_two')}/)
45
45
  end
46
46
 
47
47
  it "returns a blank command for no files" do
@@ -0,0 +1,68 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Core
4
+ describe BacktraceCleaner do
5
+ context "with no patterns" do
6
+ it "keeps all lines" do
7
+ lines = ["/tmp/a_file", "some_random_text", "hello\330\271!"]
8
+ cleaner = BacktraceCleaner.new([], [])
9
+ expect(lines.all? {|line| cleaner.exclude? line}).to be_false
10
+ end
11
+
12
+ it 'is considered a full backtrace' do
13
+ expect(BacktraceCleaner.new([], []).full_backtrace?).to be_true
14
+ end
15
+ end
16
+
17
+ context "with an exclusion pattern but no inclusion patterns" do
18
+ it "excludes lines that match the exclusion pattern" do
19
+ cleaner = BacktraceCleaner.new([], [/remove/])
20
+ expect(cleaner.exclude? "remove me").to be_true
21
+ end
22
+
23
+ it "keeps lines that do not match the exclusion pattern" do
24
+ cleaner = BacktraceCleaner.new([], [/remove/])
25
+ expect(cleaner.exclude? "apple").to be_false
26
+ end
27
+
28
+ it 'is considered a partial backtrace' do
29
+ expect(BacktraceCleaner.new([], [/remove/]).full_backtrace?).to be_false
30
+ end
31
+ end
32
+
33
+ context "with an exclusion pattern and an inclusion pattern" do
34
+ it "excludes lines that match the exclusion pattern but not the inclusion pattern" do
35
+ cleaner = BacktraceCleaner.new([/keep/], [/discard/])
36
+ expect(cleaner.exclude? "discard").to be_true
37
+ end
38
+
39
+ it "keeps lines that match the inclusion pattern and the exclusion pattern" do
40
+ cleaner = BacktraceCleaner.new([/hi/], [/.*/])
41
+ expect(cleaner.exclude? "hi").to be_false
42
+ end
43
+
44
+ it "keeps lines that match neither pattern" do
45
+ cleaner = BacktraceCleaner.new([/hi/], [/delete/])
46
+ expect(cleaner.exclude? "fish").to be_false
47
+ end
48
+
49
+ it 'is considered a partial backtrace' do
50
+ expect(BacktraceCleaner.new([], [/remove/]).full_backtrace?).to be_false
51
+ end
52
+ end
53
+
54
+ context "with an exclusion pattern that matches the current working directory" do
55
+ it "defaults to having one inclusion pattern, the current working directory" do
56
+ cleaner = BacktraceCleaner.new(nil, [/.*/])
57
+ expect(Dir.getwd =~ cleaner.inclusion_patterns.first).to be_true
58
+ end
59
+ end
60
+
61
+ context "with an exclusion pattern that does not match the current working directory" do
62
+ it "defaults to having no exclusion patterns" do
63
+ cleaner = BacktraceCleaner.new(nil, [/i_wont_match_a_directory/])
64
+ expect(cleaner.inclusion_patterns.length).to be_zero
65
+ end
66
+ end
67
+ end
68
+ end
@@ -25,14 +25,14 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
25
25
  opts = config_options_object(*%w[--require a/path -I a/lib])
26
26
  config = double("config").as_null_object
27
27
  config.should_receive(:libs=).ordered
28
- config.should_receive(:requires=).ordered
28
+ config.should_receive(:setup_load_path_and_require).ordered
29
29
  opts.configure(config)
30
30
  end
31
31
 
32
- it "sends requires before formatter" do
32
+ it "sets up load path and requires before formatter" do
33
33
  opts = config_options_object(*%w[--require a/path -f a/formatter])
34
34
  config = double("config").as_null_object
35
- config.should_receive(:requires=).ordered
35
+ config.should_receive(:setup_load_path_and_require).ordered
36
36
  config.should_receive(:add_formatter).ordered
37
37
  opts.configure(config)
38
38
  end
@@ -105,7 +105,8 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
105
105
  with_env_vars 'SPEC_OPTS' => "--require file_from_env" do
106
106
  opts = config_options_object(*%w[--require file_from_opts])
107
107
  config = RSpec::Core::Configuration.new
108
- config.should_receive(:requires=).with(["file_from_opts", "file_from_env"])
108
+ config.should_receive(:require).with("file_from_opts")
109
+ config.should_receive(:require).with("file_from_env")
109
110
  opts.configure(config)
110
111
  end
111
112
  end
@@ -378,6 +379,16 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
378
379
  expect(parse_options[:formatters]).to eq([['local']])
379
380
  end
380
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
+
381
392
  context "with custom options file" do
382
393
  it "ignores project and global options files" do
383
394
  File.open("./.rspec", "w") {|f| f << "--format project"}
@@ -16,8 +16,59 @@ module RSpec::Core
16
16
  end
17
17
  end
18
18
 
19
- describe "#load_spec_files" do
19
+ describe '#deprecation_stream' do
20
+ it 'defaults to standard error' do
21
+ expect(config.deprecation_stream).to eq $stderr
22
+ end
23
+
24
+ it 'is configurable' do
25
+ io = double 'deprecation io'
26
+ config.deprecation_stream = io
27
+ expect(config.deprecation_stream).to eq io
28
+ end
29
+ end
30
+
31
+ describe "#setup_load_path_and_require" do
32
+ include_context "isolate load path mutation"
33
+
34
+ def absolute_path_to(dir)
35
+ File.expand_path("../../../../#{dir}", __FILE__)
36
+ end
37
+
38
+ it 'adds `lib` to the load path' do
39
+ lib_dir = absolute_path_to("lib")
40
+ $LOAD_PATH.delete(lib_dir)
41
+
42
+ expect($LOAD_PATH).not_to include(lib_dir)
43
+ config.setup_load_path_and_require []
44
+ expect($LOAD_PATH).to include(lib_dir)
45
+ end
20
46
 
47
+ it 'adds the configured `default_path` to the load path' do
48
+ config.default_path = 'features'
49
+ foo_dir = absolute_path_to("features")
50
+
51
+ expect($LOAD_PATH).not_to include(foo_dir)
52
+ config.setup_load_path_and_require []
53
+ expect($LOAD_PATH).to include(foo_dir)
54
+ end
55
+
56
+ it 'stores the required files' do
57
+ config.should_receive(:require).with('a/path')
58
+ config.setup_load_path_and_require ['a/path']
59
+ expect(config.requires).to eq ['a/path']
60
+ end
61
+
62
+ context "when `default_path` refers to a file rather than a directory" do
63
+ it 'does not add it to the load path' do
64
+ config.default_path = 'Rakefile'
65
+ config.setup_load_path_and_require []
66
+ expect($LOAD_PATH).not_to include(match(/Rakefile/))
67
+ end
68
+ end
69
+ end
70
+
71
+ describe "#load_spec_files" do
21
72
  it "loads files using load" do
22
73
  config.files_to_run = ["foo.bar", "blah_spec.rb"]
23
74
  config.should_receive(:load).twice
@@ -354,7 +405,7 @@ module RSpec::Core
354
405
  %w[ a/2.rb a/1.rb a/3.rb ],
355
406
  %w[ a/3.rb a/2.rb a/1.rb ]
356
407
  ].map do |files|
357
- Dir.should_receive(:[]).with(/^a/) { files }
408
+ Dir.should_receive(:[]).with(/^\{?a/) { files }
358
409
  yield
359
410
  config.files_to_run
360
411
  end
@@ -435,6 +486,14 @@ module RSpec::Core
435
486
  expect(config.files_to_run).to include("#{dir}/a_foo.rb")
436
487
  expect(config.files_to_run).to include("#{dir}/a_bar.rb")
437
488
  end
489
+
490
+ it "supports curly braces glob syntax" do
491
+ config.send(setter, "**/*_{foo,bar}.rb")
492
+ dir = File.expand_path(File.dirname(__FILE__) + "/resources")
493
+ config.files_or_directories_to_run = dir
494
+ expect(config.files_to_run).to include("#{dir}/a_foo.rb")
495
+ expect(config.files_to_run).to include("#{dir}/a_bar.rb")
496
+ end
438
497
  end
439
498
  end
440
499
  end
@@ -446,16 +505,26 @@ module RSpec::Core
446
505
  end
447
506
  end
448
507
 
449
- context "with full_description" do
508
+ context "with full_description set" do
450
509
  it "overrides filters" do
451
510
  config.filter_run :focused => true
452
511
  config.full_description = "foo"
453
512
  expect(config.filter).not_to have_key(:focused)
454
513
  end
514
+
515
+ it 'is possible to access the full description regular expression' do
516
+ config.full_description = "foo"
517
+ expect(config.full_description).to eq(/foo/)
518
+ end
455
519
  end
456
520
 
457
- context "with line number" do
521
+ context "without full_description having been set" do
522
+ it 'returns nil from #full_description' do
523
+ expect(config.full_description).to eq nil
524
+ end
525
+ end
458
526
 
527
+ context "with line number" do
459
528
  it "assigns the file and line number as a location filter" do
460
529
  config.files_or_directories_to_run = "path/to/a_spec.rb:37"
461
530
  expect(config.filter).to eq({:locations => {File.expand_path("path/to/a_spec.rb") => [37]}})
@@ -490,6 +559,11 @@ module RSpec::Core
490
559
  expect(config.filter).to eq({:full_description => Regexp.union(/foo/, /bar/)})
491
560
  end
492
561
 
562
+ it 'is possible to access the full description regular expression' do
563
+ config.full_description = "foo","bar"
564
+ expect(config.full_description).to eq Regexp.union(/foo/,/bar/)
565
+ end
566
+
493
567
  describe "#default_path" do
494
568
  it 'defaults to "spec"' do
495
569
  expect(config.default_path).to eq('spec')
@@ -907,18 +981,29 @@ module RSpec::Core
907
981
  end
908
982
  end
909
983
 
984
+ describe "line_numbers" do
985
+ it "returns the line numbers from the filter" do
986
+ config.line_numbers = ['42']
987
+ expect(config.line_numbers).to eq [42]
988
+ end
989
+
990
+ it "defaults to empty" do
991
+ expect(config.line_numbers).to eq []
992
+ end
993
+ end
994
+
910
995
  describe "#full_backtrace=" do
911
996
  context "given true" do
912
- it "clears the backtrace clean patterns" do
997
+ it "clears the backtrace exclusion patterns" do
913
998
  config.full_backtrace = true
914
- expect(config.backtrace_clean_patterns).to eq([])
999
+ expect(config.backtrace_exclusion_patterns).to eq([])
915
1000
  end
916
1001
  end
917
1002
 
918
1003
  context "given false" do
919
1004
  it "restores backtrace clean patterns" do
920
1005
  config.full_backtrace = false
921
- expect(config.backtrace_clean_patterns).to eq(RSpec::Core::Configuration::DEFAULT_BACKTRACE_PATTERNS)
1006
+ expect(config.backtrace_exclusion_patterns).to eq(RSpec::Core::BacktraceCleaner::DEFAULT_EXCLUSION_PATTERNS)
922
1007
  end
923
1008
  end
924
1009
 
@@ -927,29 +1012,69 @@ module RSpec::Core
927
1012
  config_2 = Configuration.new
928
1013
 
929
1014
  config_1.full_backtrace = true
930
- expect(config_2.backtrace_clean_patterns).not_to be_empty
1015
+ expect(config_2.backtrace_exclusion_patterns).not_to be_empty
1016
+ end
1017
+ end
1018
+
1019
+ describe "#backtrace_clean_patterns=" do
1020
+ it "actually receives the new filter values" do
1021
+ RSpec.stub(:deprecate)
1022
+ config = Configuration.new
1023
+ config.backtrace_clean_patterns = [/.*/]
1024
+ expect(config.backtrace_cleaner.exclude? "this").to be_true
931
1025
  end
932
1026
  end
933
1027
 
934
- describe "#cleaned_from_backtrace? defaults" do
1028
+ describe 'full_backtrace' do
1029
+ it 'returns true when backtrace patterns is empty' do
1030
+ config.backtrace_exclusion_patterns = []
1031
+ expect(config.full_backtrace?).to eq true
1032
+ end
1033
+
1034
+ it 'returns false when backtrace patterns isnt empty' do
1035
+ config.backtrace_exclusion_patterns = [:lib]
1036
+ expect(config.full_backtrace?).to eq false
1037
+ end
1038
+ end
1039
+
1040
+ describe "#backtrace_clean_patterns" do
1041
+ before { allow(RSpec).to receive(:deprecate) }
1042
+ it "is deprecated" do
1043
+ RSpec.should_receive(:deprecate)
1044
+ config = Configuration.new
1045
+ config.backtrace_clean_patterns
1046
+ end
1047
+
1048
+ it "can be appended to" do
1049
+ config = Configuration.new
1050
+ config.backtrace_clean_patterns << /.*/
1051
+ expect(config.backtrace_cleaner.exclude? "this").to be_true
1052
+ end
1053
+ end
1054
+
1055
+ describe ".backtrace_cleaner#exclude? defaults" do
935
1056
  it "returns true for rspec files" do
936
- expect(config.cleaned_from_backtrace?("lib/rspec/core.rb")).to be_true
1057
+ expect(config.backtrace_cleaner.exclude?("lib/rspec/core.rb")).to be_true
937
1058
  end
938
1059
 
939
1060
  it "returns true for spec_helper" do
940
- expect(config.cleaned_from_backtrace?("spec/spec_helper.rb")).to be_true
1061
+ expect(config.backtrace_cleaner.exclude?("spec/spec_helper.rb")).to be_true
941
1062
  end
942
1063
 
943
1064
  it "returns true for java files (for JRuby)" do
944
- expect(config.cleaned_from_backtrace?("org/jruby/RubyArray.java:2336")).to be_true
1065
+ expect(config.backtrace_cleaner.exclude?("org/jruby/RubyArray.java:2336")).to be_true
945
1066
  end
946
1067
 
947
1068
  it "returns true for files within installed gems" do
948
- expect(config.cleaned_from_backtrace?('ruby-1.8.7-p334/gems/mygem-2.3.0/lib/mygem.rb')).to be_true
1069
+ expect(config.backtrace_cleaner.exclude?('ruby-1.8.7-p334/gems/mygem-2.3.0/lib/mygem.rb')).to be_true
949
1070
  end
950
1071
 
951
1072
  it "returns false for files in projects containing 'gems' in the name" do
952
- expect(config.cleaned_from_backtrace?('code/my-gems-plugin/lib/plugin.rb')).to be_false
1073
+ expect(config.backtrace_cleaner.exclude?('code/my-gems-plugin/lib/plugin.rb')).to be_false
1074
+ end
1075
+
1076
+ it "returns false for something in the current working directory" do
1077
+ expect(config.backtrace_cleaner.exclude?("#{Dir.getwd}/arbitrary")).to be_false
953
1078
  end
954
1079
  end
955
1080
 
@@ -961,6 +1086,7 @@ module RSpec::Core
961
1086
  else
962
1087
  @orig_debugger = nil
963
1088
  end
1089
+ config.stub(:require)
964
1090
  Object.const_set("Debugger", debugger)
965
1091
  end
966
1092
 
@@ -977,10 +1103,14 @@ module RSpec::Core
977
1103
  end
978
1104
 
979
1105
  it "starts the debugger" do
980
- config.stub(:require)
981
1106
  debugger.should_receive(:start)
982
1107
  config.debug = true
983
1108
  end
1109
+
1110
+ it 'sets the reader to true' do
1111
+ config.debug = true
1112
+ expect(config.debug?).to eq true
1113
+ end
984
1114
  end
985
1115
 
986
1116
  describe "#debug=false" do
@@ -988,6 +1118,11 @@ module RSpec::Core
988
1118
  config.should_not_receive(:require).with('ruby-debug')
989
1119
  config.debug = false
990
1120
  end
1121
+
1122
+ it 'sets the reader to false' do
1123
+ config.debug = false
1124
+ expect(config.debug?).to eq false
1125
+ end
991
1126
  end
992
1127
 
993
1128
  describe "#output=" do
@@ -999,16 +1134,36 @@ module RSpec::Core
999
1134
  end
1000
1135
 
1001
1136
  describe "#libs=" do
1137
+ include_context "isolate load path mutation"
1138
+
1002
1139
  it "adds directories to the LOAD_PATH" do
1003
1140
  $LOAD_PATH.should_receive(:unshift).with("a/dir")
1004
1141
  config.libs = ["a/dir"]
1005
1142
  end
1006
1143
  end
1007
1144
 
1145
+ describe "libs" do
1146
+ include_context "isolate load path mutation"
1147
+
1148
+ it 'records paths added to the load path' do
1149
+ config.libs = ["a/dir"]
1150
+ expect(config.libs).to eq ["a/dir"]
1151
+ end
1152
+ end
1153
+
1008
1154
  describe "#requires=" do
1009
- it "requires paths" do
1155
+ before { RSpec.should_receive :deprecate }
1156
+
1157
+ it "requires the configured files" do
1158
+ config.should_receive(:require).with('foo').ordered
1159
+ config.should_receive(:require).with('bar').ordered
1160
+ config.requires = ['foo', 'bar']
1161
+ end
1162
+
1163
+ it "stores require paths" do
1010
1164
  config.should_receive(:require).with("a/path")
1011
1165
  config.requires = ["a/path"]
1166
+ expect(config.requires).to eq ['a/path']
1012
1167
  end
1013
1168
  end
1014
1169
 
@@ -1065,7 +1220,7 @@ module RSpec::Core
1065
1220
 
1066
1221
  context "with :alias => " do
1067
1222
  it "is deprecated" do
1068
- RSpec::should_receive(:warn).with(/deprecated/)
1223
+ RSpec::should_receive(:deprecate).with(/:alias option/, :replacement => ":alias_with")
1069
1224
  config.add_setting :custom_option
1070
1225
  config.add_setting :another_custom_option, :alias => :custom_option
1071
1226
  end
@@ -1317,7 +1472,7 @@ module RSpec::Core
1317
1472
  it 'sets a block that determines the ordering of a collection extended with Extensions::Ordered::Examples' do
1318
1473
  examples = [1, 2, 3, 4]
1319
1474
  examples.extend Extensions::Ordered::Examples
1320
- config.order_examples { |examples| examples.reverse }
1475
+ config.order_examples { |examples_to_order| examples_to_order.reverse }
1321
1476
  expect(examples.ordered).to eq([4, 3, 2, 1])
1322
1477
  end
1323
1478
 
@@ -1339,7 +1494,7 @@ module RSpec::Core
1339
1494
  it 'sets a block that determines the ordering of a collection extended with Extensions::Ordered::ExampleGroups' do
1340
1495
  groups = [1, 2, 3, 4]
1341
1496
  groups.extend Extensions::Ordered::ExampleGroups
1342
- config.order_groups { |groups| groups.reverse }
1497
+ config.order_groups { |groups_to_order| groups_to_order.reverse }
1343
1498
  expect(groups.ordered).to eq([4, 3, 2, 1])
1344
1499
  end
1345
1500
 
@@ -1372,5 +1527,33 @@ module RSpec::Core
1372
1527
  expect(groups.ordered).to eq([4, 3, 2, 1])
1373
1528
  end
1374
1529
  end
1530
+
1531
+ describe '#warnings' do
1532
+ around do |example|
1533
+ @_original_setting = $VERBOSE
1534
+ example.run
1535
+ $VERBOSE = @_original_setting
1536
+ end
1537
+
1538
+ it "sets verbose to true when true" do
1539
+ config.warnings = true
1540
+ expect($VERBOSE).to eq true
1541
+ end
1542
+
1543
+ it "sets verbose to false when true" do
1544
+ config.warnings = false
1545
+ expect($VERBOSE).to eq false
1546
+ end
1547
+
1548
+ it 'returns the verbosity setting' do
1549
+ expect(config.warnings).to eq $VERBOSE
1550
+ end
1551
+
1552
+ it 'is loaded from config by #force' do
1553
+ config.force :warnings => true
1554
+ expect($VERBOSE).to eq true
1555
+ end
1556
+ end
1557
+
1375
1558
  end
1376
1559
  end