rspec-core 2.99.0.beta2 → 2.99.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.
- checksums.yaml +7 -0
- data/Changelog.md +122 -43
- data/features/command_line/line_number_option.feature +6 -11
- data/features/configuration/read_options_from_file.feature +2 -2
- data/features/expectation_framework_integration/configure_expectation_framework.feature +120 -25
- data/lib/autotest/discover.rb +10 -1
- data/lib/autotest/rspec2.rb +1 -1
- data/lib/rspec/core/command_line.rb +16 -5
- data/lib/rspec/core/configuration.rb +151 -119
- data/lib/rspec/core/deprecated_mutable_array_proxy.rb +32 -0
- data/lib/rspec/core/example.rb +3 -1
- data/lib/rspec/core/example_group.rb +174 -125
- data/lib/rspec/core/filter_manager.rb +48 -10
- data/lib/rspec/core/formatters.rb +137 -0
- data/lib/rspec/core/formatters/base_text_formatter.rb +25 -29
- data/lib/rspec/core/formatters/console_codes.rb +42 -0
- data/lib/rspec/core/formatters/deprecation_formatter.rb +14 -5
- data/lib/rspec/core/formatters/helpers.rb +1 -1
- data/lib/rspec/core/memoized_helpers.rb +2 -1
- data/lib/rspec/core/metadata.rb +63 -1
- data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
- data/lib/rspec/core/option_parser.rb +20 -1
- data/lib/rspec/core/pending.rb +26 -4
- data/lib/rspec/core/reporter.rb +1 -1
- data/lib/rspec/core/runner.rb +2 -2
- data/lib/rspec/core/shared_example_group.rb +11 -4
- data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/lib/rspec/core/version.rb +1 -1
- data/lib/rspec/core/world.rb +2 -2
- data/spec/autotest/discover_spec.rb +38 -8
- data/spec/rspec/core/command_line_spec.rb +47 -29
- data/spec/rspec/core/configuration_options_spec.rb +1 -1
- data/spec/rspec/core/configuration_spec.rb +223 -37
- data/spec/rspec/core/example_group_spec.rb +116 -6
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +24 -4
- data/spec/rspec/core/formatters/console_codes_spec.rb +50 -0
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +20 -3
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +1 -0
- data/spec/rspec/core/formatters/html_formatted.html +3 -4
- data/spec/rspec/core/formatters/html_formatter_spec.rb +10 -4
- data/spec/rspec/core/formatters/text_mate_formatted.html +3 -4
- data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +9 -3
- data/spec/rspec/core/hooks_filtering_spec.rb +5 -5
- data/spec/rspec/core/memoized_helpers_spec.rb +38 -0
- data/spec/rspec/core/metadata_spec.rb +24 -1
- data/spec/rspec/core/option_parser_spec.rb +39 -2
- data/spec/rspec/core/pending_example_spec.rb +14 -0
- data/spec/rspec/core/pending_spec.rb +27 -0
- data/spec/rspec/core/runner_spec.rb +3 -3
- data/spec/rspec/core/shared_context_spec.rb +1 -1
- data/spec/rspec/core/shared_example_group_spec.rb +18 -0
- data/spec/support/helper_methods.rb +4 -0
- metadata +105 -106
@@ -75,7 +75,7 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
75
75
|
expect(config.exclusion_filter).to have_key(:slow)
|
76
76
|
end
|
77
77
|
|
78
|
-
it "forces
|
78
|
+
it "forces color" do
|
79
79
|
opts = config_options_object(*%w[--color])
|
80
80
|
config = RSpec::Core::Configuration.new
|
81
81
|
config.should_receive(:force).with(:color => true)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'tmpdir'
|
3
|
+
require 'pathname'
|
3
4
|
|
4
5
|
module RSpec::Core
|
5
6
|
|
@@ -26,6 +27,28 @@ module RSpec::Core
|
|
26
27
|
config.deprecation_stream = io
|
27
28
|
expect(config.deprecation_stream).to eq io
|
28
29
|
end
|
30
|
+
|
31
|
+
context 'when the reporter has already been initialized' do
|
32
|
+
before do
|
33
|
+
config.reporter
|
34
|
+
allow(config).to receive(:warn)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'prints a notice indicating the reconfigured output_stream will be ignored' do
|
38
|
+
config.deprecation_stream = double("IO")
|
39
|
+
expect(config).to have_received(:warn).with(/deprecation_stream.*#{__FILE__}:#{__LINE__ - 1}/)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'does not change the value of `output_stream`' do
|
43
|
+
config.deprecation_stream = double("IO")
|
44
|
+
expect(config.deprecation_stream).to eq($stderr)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'does not print a warning if set to the value it already has' do
|
48
|
+
config.deprecation_stream = config.deprecation_stream
|
49
|
+
expect(config).not_to have_received(:warn)
|
50
|
+
end
|
51
|
+
end
|
29
52
|
end
|
30
53
|
|
31
54
|
shared_examples_for "output_stream" do |attribute|
|
@@ -344,35 +367,92 @@ module RSpec::Core
|
|
344
367
|
end
|
345
368
|
end
|
346
369
|
|
370
|
+
def stub_expectation_adapters
|
371
|
+
stub_const("Test::Unit::Assertions", Module.new)
|
372
|
+
stub_const("Minitest::Assertions", Module.new)
|
373
|
+
stub_const("RSpec::Core::TestUnitAssertionsAdapter", Module.new)
|
374
|
+
stub_const("RSpec::Core::MinitestAssertionsAdapter", Module.new)
|
375
|
+
allow(config).to receive(:require)
|
376
|
+
end
|
377
|
+
|
347
378
|
describe "#expect_with" do
|
348
379
|
before do
|
349
|
-
|
350
|
-
config.stub(:require)
|
380
|
+
stub_expectation_adapters
|
351
381
|
end
|
352
382
|
|
353
383
|
it_behaves_like "a configurable framework adapter", :expect_with
|
354
384
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
385
|
+
context "with :stdlib" do
|
386
|
+
it "is deprecated" do
|
387
|
+
expect_deprecation_with_call_site __FILE__, __LINE__ + 1, /:stdlib/
|
388
|
+
config.expect_with :stdlib
|
389
|
+
end
|
390
|
+
|
391
|
+
it "requires test/unit/assertions" do
|
392
|
+
expect(config).to receive(:require).with('test/unit/assertions')
|
393
|
+
config.expect_with :stdlib
|
394
|
+
end
|
395
|
+
|
396
|
+
it "sets the expectation framework to ::Test::Unit::Assertions" do
|
397
|
+
config.expect_with :stdlib
|
398
|
+
expect(config.expectation_frameworks).to eq [::Test::Unit::Assertions]
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
context "with :rspec" do
|
403
|
+
it "requires rspec/expectations" do
|
404
|
+
expect(config).to receive(:require).with('rspec/expectations')
|
405
|
+
config.expect_with :rspec
|
406
|
+
end
|
407
|
+
|
408
|
+
it "sets the expectation framework to ::RSpec::Matchers" do
|
409
|
+
config.expect_with :rspec
|
410
|
+
expect(config.expectation_frameworks).to eq [::RSpec::Matchers]
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
context "with :test_unit" do
|
415
|
+
it "requires rspec/core/test_unit_assertions_adapter" do
|
416
|
+
expect(config).to receive(:require).
|
417
|
+
with('rspec/core/test_unit_assertions_adapter')
|
418
|
+
config.expect_with :test_unit
|
419
|
+
end
|
420
|
+
|
421
|
+
it "sets the expectation framework to ::Test::Unit::Assertions" do
|
422
|
+
config.expect_with :test_unit
|
423
|
+
expect(config.expectation_frameworks).to eq [
|
424
|
+
::RSpec::Core::TestUnitAssertionsAdapter
|
425
|
+
]
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
context "with :minitest" do
|
430
|
+
it "requires rspec/core/minitest_assertions_adapter" do
|
431
|
+
expect(config).to receive(:require).
|
432
|
+
with('rspec/core/minitest_assertions_adapter')
|
433
|
+
config.expect_with :minitest
|
434
|
+
end
|
435
|
+
|
436
|
+
it "sets the expectation framework to ::Minitest::Assertions" do
|
437
|
+
config.expect_with :minitest
|
438
|
+
expect(config.expectation_frameworks).to eq [
|
439
|
+
::RSpec::Core::MinitestAssertionsAdapter
|
440
|
+
]
|
364
441
|
end
|
365
442
|
end
|
366
443
|
|
367
444
|
it "supports multiple calls" do
|
368
445
|
config.expect_with :rspec
|
369
|
-
config.expect_with :
|
370
|
-
expect(config.expectation_frameworks).to eq [
|
446
|
+
config.expect_with :minitest
|
447
|
+
expect(config.expectation_frameworks).to eq [
|
448
|
+
RSpec::Matchers,
|
449
|
+
RSpec::Core::MinitestAssertionsAdapter
|
450
|
+
]
|
371
451
|
end
|
372
452
|
|
373
453
|
it "raises if block given with multiple args" do
|
374
454
|
expect {
|
375
|
-
config.expect_with :rspec, :
|
455
|
+
config.expect_with :rspec, :minitest do |mod_config|
|
376
456
|
end
|
377
457
|
}.to raise_error(/expect_with only accepts/)
|
378
458
|
end
|
@@ -400,17 +480,16 @@ module RSpec::Core
|
|
400
480
|
it 'does not raise an error if re-setting the same config' do
|
401
481
|
groups = []
|
402
482
|
RSpec.world.stub(:example_groups => groups)
|
403
|
-
config.expect_with :
|
483
|
+
config.expect_with :minitest
|
404
484
|
groups << double.as_null_object
|
405
|
-
config.expect_with :
|
485
|
+
config.expect_with :minitest
|
406
486
|
end
|
407
487
|
end
|
408
488
|
end
|
409
489
|
|
410
490
|
describe "#expecting_with_rspec?" do
|
411
491
|
before do
|
412
|
-
|
413
|
-
config.stub(:require)
|
492
|
+
stub_expectation_adapters
|
414
493
|
end
|
415
494
|
|
416
495
|
it "returns false by default" do
|
@@ -422,18 +501,18 @@ module RSpec::Core
|
|
422
501
|
expect(config).to be_expecting_with_rspec
|
423
502
|
end
|
424
503
|
|
425
|
-
it "returns true when `expect_with :rspec, :
|
426
|
-
config.expect_with :rspec, :
|
504
|
+
it "returns true when `expect_with :rspec, :minitest` has been configured" do
|
505
|
+
config.expect_with :rspec, :minitest
|
427
506
|
expect(config).to be_expecting_with_rspec
|
428
507
|
end
|
429
508
|
|
430
|
-
it "returns true when `expect_with :
|
431
|
-
config.expect_with :
|
509
|
+
it "returns true when `expect_with :minitest, :rspec` has been configured" do
|
510
|
+
config.expect_with :minitest, :rspec
|
432
511
|
expect(config).to be_expecting_with_rspec
|
433
512
|
end
|
434
513
|
|
435
|
-
it "returns false when `expect_with :
|
436
|
-
config.expect_with :
|
514
|
+
it "returns false when `expect_with :minitest` has been configured" do
|
515
|
+
config.expect_with :minitest
|
437
516
|
expect(config).not_to be_expecting_with_rspec
|
438
517
|
end
|
439
518
|
end
|
@@ -576,8 +655,20 @@ module RSpec::Core
|
|
576
655
|
end
|
577
656
|
end
|
578
657
|
|
658
|
+
specify "#filename_pattern is deprecated" do
|
659
|
+
expect_deprecation_with_call_site __FILE__, __LINE__ + 1
|
660
|
+
config.filename_pattern
|
661
|
+
end
|
662
|
+
|
663
|
+
specify "#filename_pattern= is deprecated" do
|
664
|
+
expect_deprecation_with_call_site __FILE__, __LINE__ + 1
|
665
|
+
config.filename_pattern = "/whatever"
|
666
|
+
end
|
667
|
+
|
579
668
|
%w[pattern= filename_pattern=].each do |setter|
|
580
669
|
describe "##{setter}" do
|
670
|
+
before { allow_deprecation } if setter == "filename_pattern="
|
671
|
+
|
581
672
|
context "with single pattern" do
|
582
673
|
before { config.send(setter, "**/*_foo.rb") }
|
583
674
|
it "loads files following pattern" do
|
@@ -793,8 +884,53 @@ module RSpec::Core
|
|
793
884
|
end
|
794
885
|
end
|
795
886
|
|
887
|
+
specify '#color? is deprecated' do
|
888
|
+
expect_deprecation_with_call_site __FILE__, __LINE__+1
|
889
|
+
config.color?
|
890
|
+
end
|
891
|
+
|
892
|
+
specify "#color_enabled? is not deprecated" do
|
893
|
+
expect_no_deprecation
|
894
|
+
config.color_enabled?
|
895
|
+
config.color_enabled? double("output")
|
896
|
+
end
|
897
|
+
|
898
|
+
specify '#color with no argument is not deprecated' do
|
899
|
+
expect_no_deprecation
|
900
|
+
config.color
|
901
|
+
end
|
902
|
+
|
903
|
+
specify '#color with a non tty output and color = true is deprecated' do
|
904
|
+
allow(config.output_stream).to receive(:tty?).and_return(false)
|
905
|
+
config.color = true
|
906
|
+
expect_warn_deprecation_with_call_site __FILE__, __LINE__+1
|
907
|
+
expect(config.color).to be_falsey
|
908
|
+
end
|
909
|
+
|
910
|
+
specify '#color with an argument is deprecated' do
|
911
|
+
expect_deprecation_with_call_site __FILE__, __LINE__+1
|
912
|
+
config.color config.output_stream
|
913
|
+
end
|
914
|
+
|
915
|
+
specify '#color_enabled with no argument is deprecated' do
|
916
|
+
expect_deprecation_with_call_site __FILE__, __LINE__+1
|
917
|
+
config.color_enabled
|
918
|
+
end
|
919
|
+
|
920
|
+
specify '#color_enabled with an argument is deprecated in favour of #color_enabled?' do
|
921
|
+
expect_deprecation_with_call_site __FILE__, __LINE__+1
|
922
|
+
config.color_enabled config.output_stream
|
923
|
+
end
|
924
|
+
|
796
925
|
%w[color color_enabled].each do |color_option|
|
797
926
|
describe "##{color_option}=" do
|
927
|
+
before { allow_deprecation } if color_option == 'color_enabled'
|
928
|
+
|
929
|
+
specify "color_enabled is deprecated" do
|
930
|
+
expect_deprecation_with_call_site __FILE__, __LINE__+1
|
931
|
+
config.color_enabled = true
|
932
|
+
end
|
933
|
+
|
798
934
|
context "given true" do
|
799
935
|
before { config.send "#{color_option}=", true }
|
800
936
|
|
@@ -953,7 +1089,7 @@ module RSpec::Core
|
|
953
1089
|
end
|
954
1090
|
|
955
1091
|
it "requires a formatter file based on its fully qualified name" do
|
956
|
-
config.should_receive(:require).with('rspec/custom_formatter') do
|
1092
|
+
config.formatter_loader.should_receive(:require).with('rspec/custom_formatter') do
|
957
1093
|
stub_const("RSpec::CustomFormatter", Class.new(Formatters::BaseFormatter))
|
958
1094
|
end
|
959
1095
|
config.add_formatter "RSpec::CustomFormatter"
|
@@ -961,7 +1097,7 @@ module RSpec::Core
|
|
961
1097
|
end
|
962
1098
|
|
963
1099
|
it "raises NameError if class is unresolvable" do
|
964
|
-
config.should_receive(:require).with('rspec/custom_formatter3')
|
1100
|
+
config.formatter_loader.should_receive(:require).with('rspec/custom_formatter3')
|
965
1101
|
expect(lambda { config.add_formatter "RSpec::CustomFormatter3" }).to raise_error(NameError)
|
966
1102
|
end
|
967
1103
|
|
@@ -975,13 +1111,39 @@ module RSpec::Core
|
|
975
1111
|
expect(config.formatters.first).to be_an_instance_of Formatters::DocumentationFormatter
|
976
1112
|
end
|
977
1113
|
|
1114
|
+
it 'warns of deprecation of the text mate formatter' do
|
1115
|
+
expect_deprecation_with_call_site __FILE__, __LINE__ + 1, /rspec-core/
|
1116
|
+
config.add_formatter 't'
|
1117
|
+
end
|
1118
|
+
|
1119
|
+
it 'warns of deprecation of the shortcut for the text mate formatter' do
|
1120
|
+
stub_const("::RSpec::Mate::Formatters::TextMateFormatter", double)
|
1121
|
+
expect_deprecation_with_call_site __FILE__, __LINE__ + 1, /shortcut/
|
1122
|
+
config.add_formatter 't'
|
1123
|
+
end
|
1124
|
+
|
978
1125
|
context "with a 2nd arg defining the output" do
|
1126
|
+
let(:path) { File.join(Dir.tmpdir, 'output.txt') }
|
1127
|
+
|
979
1128
|
it "creates a file at that path and sets it as the output" do
|
980
|
-
path = File.join(Dir.tmpdir, 'output.txt')
|
981
1129
|
config.add_formatter('doc', path)
|
982
1130
|
expect(config.formatters.first.output).to be_a(File)
|
983
1131
|
expect(config.formatters.first.output.path).to eq(path)
|
984
1132
|
end
|
1133
|
+
|
1134
|
+
it "accepts Pathname objects for file paths" do
|
1135
|
+
pathname = Pathname.new(path)
|
1136
|
+
config.add_formatter('doc', pathname)
|
1137
|
+
expect(config.formatters.first.output).to be_a(File)
|
1138
|
+
expect(config.formatters.first.output.path).to eq(path)
|
1139
|
+
end
|
1140
|
+
end
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
describe "#formatters" do
|
1144
|
+
it "is deprecated to mutate the array" do
|
1145
|
+
expect_deprecation_with_call_site __FILE__, __LINE__ + 1
|
1146
|
+
config.formatters.clear
|
985
1147
|
end
|
986
1148
|
end
|
987
1149
|
|
@@ -1011,6 +1173,18 @@ module RSpec::Core
|
|
1011
1173
|
expect(config.inclusion_filter[:foo]).to be(true)
|
1012
1174
|
expect(config.inclusion_filter[:bar]).to be(false)
|
1013
1175
|
end
|
1176
|
+
|
1177
|
+
context "given `:focused => true`" do
|
1178
|
+
it "issues a deprecation warning" do
|
1179
|
+
expect_warn_deprecation_with_call_site(__FILE__, __LINE__ + 1, /filter_run_including :focused/)
|
1180
|
+
config.filter_run_including :focused => true
|
1181
|
+
end
|
1182
|
+
|
1183
|
+
it "issues a deprecation warning when using `filter_run`" do
|
1184
|
+
expect_warn_deprecation_with_call_site(__FILE__, __LINE__ + 1, /filter_run :focused/)
|
1185
|
+
config.filter_run :focused => true
|
1186
|
+
end
|
1187
|
+
end
|
1014
1188
|
end
|
1015
1189
|
|
1016
1190
|
describe "#filter_run_excluding" do
|
@@ -1172,7 +1346,7 @@ module RSpec::Core
|
|
1172
1346
|
RSpec.stub(:deprecate)
|
1173
1347
|
config = Configuration.new
|
1174
1348
|
config.backtrace_clean_patterns = [/.*/]
|
1175
|
-
expect(config.
|
1349
|
+
expect(config.backtrace_formatter.exclude? "this").to be_truthy
|
1176
1350
|
end
|
1177
1351
|
end
|
1178
1352
|
|
@@ -1199,33 +1373,40 @@ module RSpec::Core
|
|
1199
1373
|
it "can be appended to" do
|
1200
1374
|
config = Configuration.new
|
1201
1375
|
config.backtrace_clean_patterns << /.*/
|
1202
|
-
expect(config.
|
1376
|
+
expect(config.backtrace_formatter.exclude? "this").to be_truthy
|
1203
1377
|
end
|
1204
1378
|
end
|
1205
1379
|
|
1206
|
-
|
1380
|
+
specify "#backtrace_cleaner is deprecated" do
|
1381
|
+
expect_deprecation_with_call_site __FILE__, __LINE__ + 1
|
1382
|
+
config.backtrace_cleaner
|
1383
|
+
end
|
1384
|
+
|
1385
|
+
describe ".backtrace_formatter#exclude? defaults" do
|
1386
|
+
before { allow_deprecation }
|
1387
|
+
|
1207
1388
|
it "returns true for rspec files" do
|
1208
|
-
expect(config.
|
1389
|
+
expect(config.backtrace_formatter.exclude?("lib/rspec/core.rb")).to be_truthy
|
1209
1390
|
end
|
1210
1391
|
|
1211
1392
|
it "returns true for spec_helper" do
|
1212
|
-
expect(config.
|
1393
|
+
expect(config.backtrace_formatter.exclude?("spec/spec_helper.rb")).to be_truthy
|
1213
1394
|
end
|
1214
1395
|
|
1215
1396
|
it "returns true for java files (for JRuby)" do
|
1216
|
-
expect(config.
|
1397
|
+
expect(config.backtrace_formatter.exclude?("org/jruby/RubyArray.java:2336")).to be_truthy
|
1217
1398
|
end
|
1218
1399
|
|
1219
1400
|
it "returns true for files within installed gems" do
|
1220
|
-
expect(config.
|
1401
|
+
expect(config.backtrace_formatter.exclude?('ruby-1.8.7-p334/gems/mygem-2.3.0/lib/mygem.rb')).to be_truthy
|
1221
1402
|
end
|
1222
1403
|
|
1223
1404
|
it "returns false for files in projects containing 'gems' in the name" do
|
1224
|
-
expect(config.
|
1405
|
+
expect(config.backtrace_formatter.exclude?('code/my-gems-plugin/lib/plugin.rb')).to be_falsey
|
1225
1406
|
end
|
1226
1407
|
|
1227
1408
|
it "returns false for something in the current working directory" do
|
1228
|
-
expect(config.
|
1409
|
+
expect(config.backtrace_formatter.exclude?("#{Dir.getwd}/arbitrary")).to be_falsey
|
1229
1410
|
end
|
1230
1411
|
end
|
1231
1412
|
|
@@ -1801,7 +1982,12 @@ module RSpec::Core
|
|
1801
1982
|
expect($VERBOSE).to eq false
|
1802
1983
|
end
|
1803
1984
|
|
1804
|
-
it 'returns the verbosity setting' do
|
1985
|
+
it 'returns the verbosity setting as a predicate' do
|
1986
|
+
expect(config.warnings?).to eq $VERBOSE
|
1987
|
+
end
|
1988
|
+
|
1989
|
+
it 'warns when using the deprecated `warnings` reader' do
|
1990
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 1, /warnings/)
|
1805
1991
|
expect(config.warnings).to eq $VERBOSE
|
1806
1992
|
end
|
1807
1993
|
|
@@ -292,7 +292,7 @@ module RSpec::Core
|
|
292
292
|
context "and a string in an inner group" do
|
293
293
|
it "is the top level constant" do
|
294
294
|
group = ExampleGroup.describe(String) do
|
295
|
-
describe
|
295
|
+
describe "some string" do
|
296
296
|
example "described_class is String" do
|
297
297
|
expect(described_class).to eq(String)
|
298
298
|
end
|
@@ -308,7 +308,7 @@ module RSpec::Core
|
|
308
308
|
group = ExampleGroup.describe(String) do
|
309
309
|
described_class
|
310
310
|
metadata[:example_group][:described_class] = Object
|
311
|
-
describe
|
311
|
+
describe "inner" do
|
312
312
|
example "described_class is Object" do
|
313
313
|
expect(described_class).to eq(Object)
|
314
314
|
end
|
@@ -332,6 +332,63 @@ module RSpec::Core
|
|
332
332
|
|
333
333
|
expect(group.run).to be_truthy, "expected examples in group to pass"
|
334
334
|
end
|
335
|
+
|
336
|
+
def capture_deprecation_options
|
337
|
+
warn_opts = nil
|
338
|
+
allow(RSpec.configuration.reporter).to receive(:deprecation) do |opts|
|
339
|
+
warn_opts = opts
|
340
|
+
end
|
341
|
+
|
342
|
+
yield
|
343
|
+
|
344
|
+
warn_opts
|
345
|
+
end
|
346
|
+
|
347
|
+
it "prints a deprecation warning since the semantics are changing in RSpec 3" do
|
348
|
+
warn_opts = capture_deprecation_options do
|
349
|
+
ExampleGroup.describe(String) do
|
350
|
+
describe Array do
|
351
|
+
example { described_class }
|
352
|
+
end
|
353
|
+
end.run
|
354
|
+
end
|
355
|
+
|
356
|
+
expect(warn_opts[:message]).to include("#{__FILE__}:#{__LINE__ - 5}")
|
357
|
+
expect(warn_opts[:message]).to include("described_class")
|
358
|
+
end
|
359
|
+
|
360
|
+
it "prints a deprecation even when `described_class` has already been referenced in the outer group" do
|
361
|
+
warn_opts = capture_deprecation_options do
|
362
|
+
outer_dc = inner_dc = nil
|
363
|
+
ExampleGroup.describe(String) do
|
364
|
+
outer_dc = described_class
|
365
|
+
describe Array do
|
366
|
+
example { inner_dc = described_class }
|
367
|
+
end
|
368
|
+
end.run
|
369
|
+
|
370
|
+
expect(outer_dc).to eq(String)
|
371
|
+
expect(inner_dc).to eq(String)
|
372
|
+
end
|
373
|
+
|
374
|
+
expect(warn_opts[:message]).to include("#{__FILE__}:#{__LINE__ - 8}")
|
375
|
+
expect(warn_opts[:message]).to include("described_class")
|
376
|
+
end
|
377
|
+
|
378
|
+
it "does not print a deprecation warning when the inner example group has no description args" do
|
379
|
+
dc = :unset
|
380
|
+
deprecations = []
|
381
|
+
allow(RSpec).to receive(:warn_deprecation) { |msg| deprecations << msg }
|
382
|
+
|
383
|
+
ExampleGroup.describe(String) do
|
384
|
+
describe do
|
385
|
+
example { dc = described_class }
|
386
|
+
end
|
387
|
+
end.run
|
388
|
+
|
389
|
+
expect(dc).to be(String)
|
390
|
+
expect(deprecations).to eq([])
|
391
|
+
end
|
335
392
|
end
|
336
393
|
|
337
394
|
context "for `describe(SomeClass)` within a `describe 'some string' group" do
|
@@ -677,6 +734,7 @@ module RSpec::Core
|
|
677
734
|
it "has access to example options within before(:each)" do
|
678
735
|
group = ExampleGroup.describe
|
679
736
|
option = nil
|
737
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 1, /options/)
|
680
738
|
group.before(:each) {|ex| option = ex.options[:data] }
|
681
739
|
group.example("no-op", :data => :sample) { }
|
682
740
|
group.run
|
@@ -686,6 +744,7 @@ module RSpec::Core
|
|
686
744
|
it "has access to example options within after(:each)" do
|
687
745
|
group = ExampleGroup.describe
|
688
746
|
option = nil
|
747
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 1, /options/)
|
689
748
|
group.after(:each) {|ex| option = ex.options[:data] }
|
690
749
|
group.example("no-op", :data => :sample) { }
|
691
750
|
group.run
|
@@ -693,19 +752,37 @@ module RSpec::Core
|
|
693
752
|
end
|
694
753
|
end
|
695
754
|
|
755
|
+
context 'skip in metadata' do
|
756
|
+
let(:group) { ExampleGroup.describe do
|
757
|
+
it 'is skipped', :skip => 'skip this' do
|
758
|
+
end
|
759
|
+
end
|
760
|
+
}
|
761
|
+
|
762
|
+
before { group.run }
|
763
|
+
|
764
|
+
it 'generates a pending example' do
|
765
|
+
expect(group.examples.first).to be_pending
|
766
|
+
end
|
767
|
+
|
768
|
+
it 'sets the pending message' do
|
769
|
+
expect(group.examples.first.metadata[:execution_result][:pending_message]).to eq('skip this')
|
770
|
+
end
|
771
|
+
end
|
772
|
+
|
696
773
|
%w[pending skip].each do |method_name|
|
697
774
|
describe ".#{method_name}" do
|
698
775
|
let(:group) { ExampleGroup.describe.tap {|x|
|
699
776
|
x.send(method_name, "is pending") { }
|
700
777
|
}}
|
701
778
|
|
779
|
+
before { group.run }
|
780
|
+
|
702
781
|
it "generates a pending example" do
|
703
|
-
group.run
|
704
782
|
expect(group.examples.first).to be_pending
|
705
783
|
end
|
706
784
|
|
707
785
|
it "sets the pending message" do
|
708
|
-
group.run
|
709
786
|
expect(group.examples.first.metadata[:execution_result][:pending_message]).to eq(RSpec::Core::Pending::NO_REASON_GIVEN)
|
710
787
|
end
|
711
788
|
end
|
@@ -717,13 +794,13 @@ module RSpec::Core
|
|
717
794
|
x.send(method_name, "is pending") { }
|
718
795
|
}}
|
719
796
|
|
797
|
+
before { group.run }
|
798
|
+
|
720
799
|
it "generates a pending example" do
|
721
|
-
group.run
|
722
800
|
expect(group.examples.first).to be_pending
|
723
801
|
end
|
724
802
|
|
725
803
|
it "sets the pending message" do
|
726
|
-
group.run
|
727
804
|
expect(group.examples.first.metadata[:execution_result][:pending_message]).to eq("Temporarily disabled with #{method_name}")
|
728
805
|
end
|
729
806
|
end
|
@@ -1223,5 +1300,38 @@ module RSpec::Core
|
|
1223
1300
|
end.to raise_error(ArgumentError,%q|Could not find shared examples "shared stuff"|)
|
1224
1301
|
end
|
1225
1302
|
end
|
1303
|
+
|
1304
|
+
describe "deprecated methods" do
|
1305
|
+
specify ".describes is deprecated" do
|
1306
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 1, /describes/)
|
1307
|
+
expect(self.class.describes).to eq(self.class.described_class)
|
1308
|
+
end
|
1309
|
+
|
1310
|
+
specify ".display_name is deprecated" do
|
1311
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 1, /display_name/)
|
1312
|
+
expect(self.class.display_name).to eq(self.class.description)
|
1313
|
+
end
|
1314
|
+
|
1315
|
+
specify ".alias_it_behaves_like_to is deprecated" do
|
1316
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 2, /alias_it_behaves_like_to/)
|
1317
|
+
expect {
|
1318
|
+
ExampleGroup.alias_it_behaves_like_to(:it_does_something, "it does something")
|
1319
|
+
}.to change { ExampleGroup.respond_to?(:it_does_something) }.from(false).to(true)
|
1320
|
+
end
|
1321
|
+
|
1322
|
+
specify ".alias_example_to is deprecated" do
|
1323
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 2, /alias_example_to/)
|
1324
|
+
expect {
|
1325
|
+
ExampleGroup.alias_example_to(:an_example)
|
1326
|
+
}.to change { ExampleGroup.respond_to?(:an_example) }.from(false).to(true)
|
1327
|
+
end
|
1328
|
+
|
1329
|
+
specify ".focused is deprecated" do
|
1330
|
+
expect_deprecation_with_call_site(__FILE__, __LINE__ + 2, /focused/)
|
1331
|
+
ExampleGroup.describe("group") do
|
1332
|
+
focused("example") { }
|
1333
|
+
end
|
1334
|
+
end
|
1335
|
+
end
|
1226
1336
|
end
|
1227
1337
|
end
|