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.
- data.tar.gz.sig +0 -0
- data/Changelog.md +137 -0
- data/README.md +2 -2
- data/exe/rspec +2 -23
- data/features/README.md +1 -5
- data/features/command_line/README.md +7 -10
- data/features/command_line/exit_status.feature +1 -1
- data/features/command_line/format_option.feature +1 -1
- data/features/command_line/init.feature +40 -1
- data/features/command_line/line_number_option.feature +2 -2
- data/features/command_line/ruby.feature +5 -4
- data/features/configuration/enable_global_dsl.feature +54 -0
- data/features/example_groups/aliasing.feature +48 -0
- data/features/example_groups/basic_structure.feature +1 -1
- data/features/expectation_framework_integration/configure_expectation_framework.feature +1 -1
- data/features/filtering/if_and_unless.feature +0 -30
- data/features/formatters/custom_formatter.feature +32 -0
- data/features/formatters/regression_tests.feature +95 -0
- data/features/hooks/around_hooks.feature +1 -0
- data/features/hooks/before_and_after_hooks.feature +2 -2
- data/features/mock_framework_integration/use_flexmock.feature +11 -13
- data/features/mock_framework_integration/use_mocha.feature +11 -13
- data/features/mock_framework_integration/use_rr.feature +11 -13
- data/features/mock_framework_integration/use_rspec.feature +11 -13
- data/features/pending_and_skipped_examples/README.md +3 -0
- data/features/pending_and_skipped_examples/pending_examples.feature +118 -0
- data/features/pending_and_skipped_examples/skipped_examples.feature +106 -0
- data/features/step_definitions/additional_cli_steps.rb +34 -0
- data/features/subject/explicit_subject.feature +1 -1
- data/features/subject/one_liner_syntax.feature +71 -0
- data/lib/rspec/core.rb +6 -14
- data/lib/rspec/core/backtrace_formatter.rb +16 -4
- data/lib/rspec/core/command_line.rb +2 -3
- data/lib/rspec/core/configuration.rb +114 -125
- data/lib/rspec/core/configuration_options.rb +32 -18
- data/lib/rspec/core/dsl.rb +80 -18
- data/lib/rspec/core/example.rb +84 -33
- data/lib/rspec/core/example_group.rb +95 -43
- data/lib/rspec/core/filter_manager.rb +31 -40
- data/lib/rspec/core/formatters.rb +137 -0
- data/lib/rspec/core/formatters/base_formatter.rb +28 -41
- data/lib/rspec/core/formatters/base_text_formatter.rb +26 -37
- data/lib/rspec/core/formatters/deprecation_formatter.rb +48 -27
- data/lib/rspec/core/formatters/documentation_formatter.rb +27 -22
- data/lib/rspec/core/formatters/html_formatter.rb +48 -56
- data/lib/rspec/core/formatters/html_printer.rb +11 -18
- data/lib/rspec/core/formatters/json_formatter.rb +18 -22
- data/lib/rspec/core/formatters/legacy_formatter.rb +227 -0
- data/lib/rspec/core/formatters/progress_formatter.rb +7 -10
- data/lib/rspec/core/hooks.rb +250 -217
- data/lib/rspec/core/memoized_helpers.rb +43 -9
- data/lib/rspec/core/mocking_adapters/flexmock.rb +29 -0
- data/lib/rspec/core/{mocking/with_mocha.rb → mocking_adapters/mocha.rb} +19 -16
- data/lib/rspec/core/mocking_adapters/null.rb +12 -0
- data/lib/rspec/core/mocking_adapters/rr.rb +28 -0
- data/lib/rspec/core/mocking_adapters/rspec.rb +30 -0
- data/lib/rspec/core/notifications.rb +100 -0
- data/lib/rspec/core/option_parser.rb +11 -18
- data/lib/rspec/core/pending.rb +78 -47
- data/lib/rspec/core/project_initializer.rb +2 -49
- data/lib/rspec/core/project_initializer/dot_rspec +3 -0
- data/lib/rspec/core/project_initializer/spec_helper.rb +82 -0
- data/lib/rspec/core/rake_task.rb +5 -14
- data/lib/rspec/core/reporter.rb +24 -32
- data/lib/rspec/core/ruby_project.rb +1 -1
- data/lib/rspec/core/runner.rb +14 -4
- data/lib/rspec/core/shared_example_group.rb +40 -13
- data/lib/rspec/core/version.rb +1 -1
- data/spec/command_line/order_spec.rb +15 -15
- data/spec/rspec/core/backtrace_formatter_spec.rb +15 -1
- data/spec/rspec/core/command_line_spec.rb +18 -17
- data/spec/rspec/core/configuration_options_spec.rb +57 -34
- data/spec/rspec/core/configuration_spec.rb +162 -184
- data/spec/rspec/core/drb_command_line_spec.rb +5 -7
- data/spec/rspec/core/drb_options_spec.rb +2 -2
- data/spec/rspec/core/dsl_spec.rb +79 -15
- data/spec/rspec/core/example_group_spec.rb +253 -39
- data/spec/rspec/core/example_spec.rb +149 -33
- data/spec/rspec/core/filter_manager_spec.rb +9 -26
- data/spec/rspec/core/formatters/base_formatter_spec.rb +2 -5
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +42 -145
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +64 -34
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +15 -28
- data/spec/rspec/core/formatters/helpers_spec.rb +2 -2
- data/spec/rspec/core/formatters/{html_formatted-1.8.7.html → html_formatted-2.1.0.html} +22 -44
- data/spec/rspec/core/formatters/{html_formatted-1.8.7-jruby.html → html_formatted.html} +30 -49
- data/spec/rspec/core/formatters/html_formatter_spec.rb +35 -19
- data/spec/rspec/core/formatters/json_formatter_spec.rb +42 -40
- data/spec/rspec/core/formatters/legacy_formatter_spec.rb +137 -0
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +38 -25
- data/spec/rspec/core/formatters/snippet_extractor_spec.rb +1 -1
- data/spec/rspec/core/formatters_spec.rb +120 -0
- data/spec/rspec/core/hooks_filtering_spec.rb +1 -1
- data/spec/rspec/core/hooks_spec.rb +13 -2
- data/spec/rspec/core/memoized_helpers_spec.rb +17 -8
- data/spec/rspec/core/metadata_spec.rb +3 -3
- data/spec/rspec/core/option_parser_spec.rb +53 -46
- data/spec/rspec/core/ordering_spec.rb +4 -4
- data/spec/rspec/core/pending_example_spec.rb +23 -126
- data/spec/rspec/core/pending_spec.rb +8 -0
- data/spec/rspec/core/project_initializer_spec.rb +8 -41
- data/spec/rspec/core/rake_task_spec.rb +15 -4
- data/spec/rspec/core/random_spec.rb +1 -1
- data/spec/rspec/core/reporter_spec.rb +50 -37
- data/spec/rspec/core/resources/formatter_specs.rb +9 -11
- data/spec/rspec/core/rspec_matchers_spec.rb +1 -1
- data/spec/rspec/core/ruby_project_spec.rb +3 -3
- data/spec/rspec/core/runner_spec.rb +65 -23
- data/spec/rspec/core/shared_context_spec.rb +4 -4
- data/spec/rspec/core/shared_example_group/collection_spec.rb +1 -1
- data/spec/rspec/core/shared_example_group_spec.rb +20 -11
- data/spec/rspec/core/warnings_spec.rb +1 -1
- data/spec/rspec/core/world_spec.rb +10 -10
- data/spec/rspec/core_spec.rb +2 -2
- data/spec/spec_helper.rb +12 -24
- data/spec/support/config_options_helper.rb +1 -3
- data/spec/support/formatter_support.rb +83 -0
- data/spec/support/isolate_load_path_mutation.rb +1 -2
- data/spec/support/isolated_directory.rb +1 -1
- data/spec/support/isolated_home_directory.rb +1 -1
- data/spec/support/legacy_formatter_using_sub_classing_example.rb +87 -0
- data/spec/support/matchers.rb +20 -0
- data/spec/support/mathn_integration_support.rb +2 -2
- data/spec/support/old_style_formatter_example.rb +69 -0
- data/spec/support/shared_example_groups.rb +1 -1
- data/spec/support/spec_files.rb +3 -3
- metadata +192 -69
- metadata.gz.sig +3 -1
- checksums.yaml +0 -15
- checksums.yaml.gz.sig +0 -2
- data/features/configuration/show_failures_in_pending_blocks.feature +0 -61
- data/features/pending/pending_examples.feature +0 -229
- data/features/subject/implicit_receiver.feature +0 -29
- data/lib/rspec/core/mocking/with_absolutely_nothing.rb +0 -11
- data/lib/rspec/core/mocking/with_flexmock.rb +0 -27
- data/lib/rspec/core/mocking/with_rr.rb +0 -27
- data/lib/rspec/core/mocking/with_rspec.rb +0 -27
- data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +0 -477
- data/spec/rspec/core/formatters/html_formatted-1.9.2.html +0 -425
- data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +0 -416
- data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +0 -477
- data/spec/rspec/core/formatters/html_formatted-1.9.3.html +0 -419
- data/spec/rspec/core/formatters/html_formatted-2.0.0.html +0 -425
- data/spec/support/in_sub_process.rb +0 -37
- data/spec/support/sandboxed_mock_space.rb +0 -100
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'pp'
|
3
3
|
require 'stringio'
|
4
4
|
|
5
|
-
describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
5
|
+
RSpec.describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
6
6
|
let(:example_group) do
|
7
7
|
RSpec::Core::ExampleGroup.describe('group description')
|
8
8
|
end
|
@@ -62,7 +62,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
62
62
|
|
63
63
|
describe "when there is no explicit description" do
|
64
64
|
def expect_with(*frameworks)
|
65
|
-
RSpec.configuration.
|
65
|
+
allow(RSpec.configuration).to receive(:expecting_with_rspec?).and_return(frameworks.include?(:rspec))
|
66
66
|
|
67
67
|
if frameworks.include?(:stdlib)
|
68
68
|
example_group.class_eval do
|
@@ -110,6 +110,20 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
110
110
|
example_group.run
|
111
111
|
expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 3}/)
|
112
112
|
end
|
113
|
+
|
114
|
+
context "if the example is pending" do
|
115
|
+
it "still uses the matcher-generated description if a matcher ran" do
|
116
|
+
example = example_group.example { pending; expect(4).to eq(5) }
|
117
|
+
example_group.run
|
118
|
+
expect(example.description).to eq("should eq 5")
|
119
|
+
end
|
120
|
+
|
121
|
+
it "uses the file and line number of the example if no matcher ran" do
|
122
|
+
example = example_group.example { pending; fail }
|
123
|
+
example_group.run
|
124
|
+
expect(example.description).to match(/example at #{relative_path(__FILE__)}:#{__LINE__ - 2}/)
|
125
|
+
end
|
126
|
+
end
|
113
127
|
end
|
114
128
|
|
115
129
|
context "when `expect_with :rspec, :stdlib` is configured" do
|
@@ -139,7 +153,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
139
153
|
before(:each) { expect_with :stdlib }
|
140
154
|
|
141
155
|
it "does not attempt to get the generated description from RSpec::Matchers" do
|
142
|
-
RSpec::Matchers.
|
156
|
+
expect(RSpec::Matchers).not_to receive(:generated_description)
|
143
157
|
example_group.example { assert 5 == 5 }
|
144
158
|
example_group.run
|
145
159
|
end
|
@@ -296,7 +310,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
296
310
|
# We can't use should_receive(:message).with(/.../) here,
|
297
311
|
# because if that fails, it would fail within our example-under-test,
|
298
312
|
# and since there's already two errors, it would just be reported again.
|
299
|
-
RSpec.configuration.reporter.
|
313
|
+
allow(RSpec.configuration.reporter).to receive(:message) { |msg| reported_msg = msg }
|
300
314
|
group.run
|
301
315
|
reported_msg
|
302
316
|
end
|
@@ -325,7 +339,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
325
339
|
group = RSpec::Core::ExampleGroup.describe do
|
326
340
|
example do
|
327
341
|
foo = double
|
328
|
-
foo.
|
342
|
+
expect(foo).to receive(:bar)
|
329
343
|
raise "boom"
|
330
344
|
end
|
331
345
|
end
|
@@ -392,13 +406,19 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
392
406
|
end
|
393
407
|
|
394
408
|
describe "#pending" do
|
409
|
+
def expect_pending_result(example)
|
410
|
+
expect(example).to be_pending
|
411
|
+
expect(example.metadata[:execution_result][:status]).to eq("pending")
|
412
|
+
expect(example.metadata[:execution_result][:pending_message]).to be
|
413
|
+
end
|
414
|
+
|
395
415
|
context "in the example" do
|
396
416
|
it "sets the example to pending" do
|
397
417
|
group = RSpec::Core::ExampleGroup.describe do
|
398
|
-
example { pending }
|
418
|
+
example { pending; fail }
|
399
419
|
end
|
400
420
|
group.run
|
401
|
-
|
421
|
+
expect_pending_result(group.examples.first)
|
402
422
|
end
|
403
423
|
|
404
424
|
it "allows post-example processing in around hooks (see https://github.com/rspec/rspec-core/issues/322)" do
|
@@ -414,65 +434,161 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
414
434
|
expect(blah).to be(:success)
|
415
435
|
end
|
416
436
|
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
437
|
+
it 'sets the backtrace to the example definition so it can be located by the user' do
|
438
|
+
expected = [__FILE__, __LINE__ + 2].map(&:to_s)
|
439
|
+
group = RSpec::Core::ExampleGroup.describe do
|
440
|
+
example {
|
441
|
+
pending
|
442
|
+
}
|
443
|
+
end
|
444
|
+
group.run
|
445
|
+
# TODO: De-dup this logic in rspec-support
|
446
|
+
actual = group.examples.first.exception.backtrace.
|
447
|
+
find { |line| line !~ RSpec::CallerFilter::LIB_REGEX }.
|
448
|
+
split(':')[0..1]
|
449
|
+
expect(actual).to eq(expected)
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
context "in before(:each)" do
|
454
|
+
it "sets each example to pending" do
|
455
|
+
group = RSpec::Core::ExampleGroup.describe do
|
456
|
+
before(:each) { pending }
|
457
|
+
example { fail }
|
458
|
+
example { fail }
|
459
|
+
end
|
460
|
+
group.run
|
461
|
+
expect_pending_result(group.examples.first)
|
462
|
+
expect_pending_result(group.examples.last)
|
463
|
+
end
|
464
|
+
|
465
|
+
it 'sets example to pending when failure occurs in before(:each)' do
|
466
|
+
group = RSpec::Core::ExampleGroup.describe do
|
467
|
+
before(:each) { pending; fail }
|
468
|
+
example {}
|
469
|
+
end
|
470
|
+
group.run
|
471
|
+
expect_pending_result(group.examples.first)
|
472
|
+
end
|
473
|
+
end
|
474
|
+
|
475
|
+
context "in before(:all)" do
|
476
|
+
it "is forbidden" do
|
477
|
+
group = RSpec::Core::ExampleGroup.describe do
|
478
|
+
before(:all) { pending }
|
479
|
+
example { fail }
|
480
|
+
example { fail }
|
481
|
+
end
|
482
|
+
group.run
|
483
|
+
expect(group.examples.first.exception).to be
|
484
|
+
expect(group.examples.first.exception.message).to \
|
485
|
+
match(/may not be used outside of examples/)
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
context "in around(:each)" do
|
490
|
+
it "sets the example to pending" do
|
491
|
+
group = RSpec::Core::ExampleGroup.describe do
|
492
|
+
around(:each) { pending }
|
493
|
+
example { fail }
|
494
|
+
end
|
495
|
+
group.run
|
496
|
+
expect_pending_result(group.examples.first)
|
497
|
+
end
|
498
|
+
|
499
|
+
it 'sets example to pending when failure occurs in around(:each)' do
|
500
|
+
group = RSpec::Core::ExampleGroup.describe do
|
501
|
+
around(:each) { pending; fail }
|
502
|
+
example {}
|
503
|
+
end
|
504
|
+
group.run
|
505
|
+
expect_pending_result(group.examples.first)
|
506
|
+
end
|
507
|
+
end
|
508
|
+
|
509
|
+
context "in after(:each)" do
|
510
|
+
it "sets each example to pending" do
|
511
|
+
group = RSpec::Core::ExampleGroup.describe do
|
512
|
+
after(:each) { pending; fail }
|
513
|
+
example { }
|
514
|
+
example { }
|
515
|
+
end
|
516
|
+
group.run
|
517
|
+
expect_pending_result(group.examples.first)
|
518
|
+
expect_pending_result(group.examples.last)
|
519
|
+
end
|
520
|
+
end
|
521
|
+
|
522
|
+
end
|
523
|
+
|
524
|
+
describe "#skip" do
|
525
|
+
context "in the example" do
|
526
|
+
it "sets the example to skipped" do
|
527
|
+
group = RSpec::Core::ExampleGroup.describe do
|
528
|
+
example { skip }
|
529
|
+
end
|
530
|
+
group.run
|
531
|
+
expect(group.examples.first).to be_skipped
|
532
|
+
end
|
533
|
+
|
534
|
+
it "allows post-example processing in around hooks (see https://github.com/rspec/rspec-core/issues/322)" do
|
535
|
+
blah = nil
|
536
|
+
group = RSpec::Core::ExampleGroup.describe do
|
537
|
+
around do |example|
|
538
|
+
example.run
|
539
|
+
blah = :success
|
423
540
|
end
|
424
|
-
|
425
|
-
expect(group.examples.first.metadata[:execution_result][:status]).to eq('pending')
|
426
|
-
expect(group.examples.first.metadata[:execution_result][:pending_fixed]).to eq(false)
|
541
|
+
example { skip }
|
427
542
|
end
|
543
|
+
group.run
|
544
|
+
expect(blah).to be(:success)
|
545
|
+
end
|
428
546
|
|
429
|
-
|
547
|
+
context "with a message" do
|
548
|
+
it "sets the example to skipped with the provided message" do
|
430
549
|
group = RSpec::Core::ExampleGroup.describe do
|
431
|
-
example
|
432
|
-
pending {}
|
433
|
-
end
|
550
|
+
example { skip "lorem ipsum" }
|
434
551
|
end
|
435
552
|
group.run
|
436
|
-
expect(group.examples.first
|
437
|
-
expect(group.examples.first.metadata[:execution_result][:pending_fixed]).to eq(true)
|
553
|
+
expect(group.examples.first).to be_skipped_with("lorem ipsum")
|
438
554
|
end
|
439
555
|
end
|
440
556
|
end
|
441
557
|
|
442
558
|
context "in before(:each)" do
|
443
|
-
it "sets each example to
|
559
|
+
it "sets each example to skipped" do
|
444
560
|
group = RSpec::Core::ExampleGroup.describe do
|
445
|
-
before(:each) {
|
561
|
+
before(:each) { skip }
|
446
562
|
example {}
|
447
563
|
example {}
|
448
564
|
end
|
449
565
|
group.run
|
450
|
-
expect(group.examples.first).to
|
451
|
-
expect(group.examples.last).to
|
566
|
+
expect(group.examples.first).to be_skipped
|
567
|
+
expect(group.examples.last).to be_skipped
|
452
568
|
end
|
453
569
|
end
|
454
570
|
|
455
571
|
context "in before(:all)" do
|
456
572
|
it "sets each example to pending" do
|
457
573
|
group = RSpec::Core::ExampleGroup.describe do
|
458
|
-
before(:all) {
|
574
|
+
before(:all) { skip("not done"); fail }
|
459
575
|
example {}
|
460
576
|
example {}
|
461
577
|
end
|
462
578
|
group.run
|
463
|
-
expect(group.examples.first).to
|
464
|
-
expect(group.examples.last).to
|
579
|
+
expect(group.examples.first).to be_skipped_with("not done")
|
580
|
+
expect(group.examples.last).to be_skipped_with("not done")
|
465
581
|
end
|
466
582
|
end
|
467
583
|
|
468
584
|
context "in around(:each)" do
|
469
|
-
it "sets the example to
|
585
|
+
it "sets the example to skipped" do
|
470
586
|
group = RSpec::Core::ExampleGroup.describe do
|
471
|
-
around(:each) {
|
587
|
+
around(:each) { skip }
|
472
588
|
example {}
|
473
589
|
end
|
474
590
|
group.run
|
475
|
-
expect(group.examples.first).to
|
591
|
+
expect(group.examples.first).to be_skipped
|
476
592
|
end
|
477
593
|
end
|
478
594
|
end
|
@@ -483,7 +599,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
483
599
|
group = RSpec::Core::ExampleGroup.describe
|
484
600
|
example = group.example
|
485
601
|
example.__send__ :start, reporter
|
486
|
-
Time.
|
602
|
+
allow(Time).to receive_messages(:now => Time.utc(2012, 10, 1))
|
487
603
|
example.__send__ :finish, reporter
|
488
604
|
expect(example.metadata[:execution_result][:run_time]).to be < 0.2
|
489
605
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module RSpec::Core
|
4
|
-
describe FilterManager do
|
4
|
+
RSpec.describe FilterManager do
|
5
5
|
def opposite(name)
|
6
6
|
name =~ /^in/ ? name.sub(/^(in)/,'ex') : name.sub(/^(ex)/,'in')
|
7
7
|
end
|
@@ -43,6 +43,13 @@ module RSpec::Core
|
|
43
43
|
expect(filter_manager.inclusions).to eq({filter => "value"})
|
44
44
|
end
|
45
45
|
|
46
|
+
it "clears previous exclusion" do
|
47
|
+
filter_manager = FilterManager.new
|
48
|
+
filter_manager.include :foo => :bar
|
49
|
+
filter_manager.include filter => "value"
|
50
|
+
expect(filter_manager.exclusions).to be_empty
|
51
|
+
end
|
52
|
+
|
46
53
|
it "does nothing when :#{filter} previously set" do
|
47
54
|
filter_manager = FilterManager.new
|
48
55
|
filter_manager.include filter => "a_value"
|
@@ -105,7 +112,7 @@ module RSpec::Core
|
|
105
112
|
describe "#prune" do
|
106
113
|
def filterable_object_with(args = {})
|
107
114
|
object = double('a filterable object')
|
108
|
-
object.
|
115
|
+
allow(object).to receive(:any_apply?) { |f| Metadata.new(args).any_apply?(f) }
|
109
116
|
object
|
110
117
|
end
|
111
118
|
|
@@ -204,30 +211,6 @@ module RSpec::Core
|
|
204
211
|
expect(filter_manager.exclusions.description).to eq({ :foo => :bar }.inspect)
|
205
212
|
end
|
206
213
|
|
207
|
-
it 'deprecates an overridden :if filter' do
|
208
|
-
expect(RSpec).to receive(:deprecate).with(/exclude\(:if/)
|
209
|
-
filter_manager = FilterManager.new
|
210
|
-
filter_manager.exclude :if => :custom_filter
|
211
|
-
end
|
212
|
-
|
213
|
-
it 'deprecates an :if filter overridden with low priority' do
|
214
|
-
expect(RSpec).to receive(:deprecate).with(/exclude\(:if/)
|
215
|
-
filter_manager = FilterManager.new
|
216
|
-
filter_manager.exclude_with_low_priority :if => :custom_filter
|
217
|
-
end
|
218
|
-
|
219
|
-
it 'deprecates an overridden :unless filter' do
|
220
|
-
expect(RSpec).to receive(:deprecate).with(/exclude\(:unless/)
|
221
|
-
filter_manager = FilterManager.new
|
222
|
-
filter_manager.exclude :unless => :custom_filter
|
223
|
-
end
|
224
|
-
|
225
|
-
it 'deprecates an :unless filter overridden with low priority' do
|
226
|
-
expect(RSpec).to receive(:deprecate).with(/exclude\(:unless/)
|
227
|
-
filter_manager = FilterManager.new
|
228
|
-
filter_manager.exclude_with_low_priority :unless => :custom_filter
|
229
|
-
end
|
230
|
-
|
231
214
|
it 'includes an overriden :if filter' do
|
232
215
|
allow(RSpec).to receive(:deprecate)
|
233
216
|
filter_manager = FilterManager.new
|
@@ -1,10 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'rspec/core/formatters/base_formatter'
|
3
3
|
|
4
|
-
describe RSpec::Core::Formatters::BaseFormatter do
|
5
|
-
|
6
|
-
let(:output) { StringIO.new }
|
7
|
-
let(:formatter) { RSpec::Core::Formatters::BaseFormatter.new(output) }
|
4
|
+
RSpec.describe RSpec::Core::Formatters::BaseFormatter do
|
5
|
+
include FormatterSupport
|
8
6
|
|
9
7
|
describe "read_failed_line" do
|
10
8
|
it "deals gracefully with a heterogeneous language stack trace" do
|
@@ -54,7 +52,6 @@ describe RSpec::Core::Formatters::BaseFormatter do
|
|
54
52
|
end
|
55
53
|
|
56
54
|
it "doesn't hang when file exists" do
|
57
|
-
pending("This issue still exists on JRuby, but should be resolved shortly: https://github.com/rspec/rspec-core/issues/295", :if => RUBY_PLATFORM == 'java')
|
58
55
|
exception = double(:Exception, :backtrace => [ "#{__FILE__}:#{__LINE__}"])
|
59
56
|
|
60
57
|
example = double(:Example, :file_path => __FILE__)
|
@@ -1,21 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'rspec/core/formatters/base_text_formatter'
|
3
3
|
|
4
|
-
describe RSpec::Core::Formatters::BaseTextFormatter do
|
5
|
-
|
6
|
-
let(:formatter) { RSpec::Core::Formatters::BaseTextFormatter.new(output) }
|
4
|
+
RSpec.describe RSpec::Core::Formatters::BaseTextFormatter do
|
5
|
+
include FormatterSupport
|
7
6
|
|
8
|
-
describe "#
|
7
|
+
describe "#dump_summary" do
|
9
8
|
it "with 0s outputs pluralized (excluding pending)" do
|
10
|
-
|
9
|
+
send_notification :dump_summary, summary_notification(0, 0, 0, 0)
|
10
|
+
expect(output.string).to match("0 examples, 0 failures")
|
11
11
|
end
|
12
12
|
|
13
13
|
it "with 1s outputs singular (including pending)" do
|
14
|
-
|
14
|
+
send_notification :dump_summary, summary_notification(1, 1, 1, 1)
|
15
|
+
expect(output.string).to match("1 example, 1 failure, 1 pending")
|
15
16
|
end
|
16
17
|
|
17
18
|
it "with 2s outputs pluralized (including pending)" do
|
18
|
-
|
19
|
+
send_notification :dump_summary, summary_notification(2, 2, 2, 2)
|
20
|
+
expect(output.string).to match("2 examples, 2 failures, 2 pending")
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -25,7 +27,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
25
27
|
it("fails") { fail }
|
26
28
|
end
|
27
29
|
line = __LINE__ - 2
|
28
|
-
group.run(
|
30
|
+
group.run(reporter)
|
29
31
|
formatter.dump_commands_to_rerun_failed_examples
|
30
32
|
expect(output.string).to include("rspec #{RSpec::Core::Metadata::relative_path("#{__FILE__}:#{line}")} # example group fails")
|
31
33
|
end
|
@@ -34,11 +36,11 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
34
36
|
describe "#dump_failures" do
|
35
37
|
let(:group) { RSpec::Core::ExampleGroup.describe("group name") }
|
36
38
|
|
37
|
-
before { RSpec.configuration.
|
39
|
+
before { allow(RSpec.configuration).to receive(:color_enabled?) { false } }
|
38
40
|
|
39
41
|
def run_all_and_dump_failures
|
40
|
-
group.run(
|
41
|
-
|
42
|
+
group.run(reporter)
|
43
|
+
send_notification :dump_failures, null_notification
|
42
44
|
end
|
43
45
|
|
44
46
|
it "preserves formatting" do
|
@@ -53,7 +55,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
53
55
|
context "with an exception without a message" do
|
54
56
|
it "does not throw NoMethodError" do
|
55
57
|
exception_without_message = Exception.new()
|
56
|
-
exception_without_message.
|
58
|
+
allow(exception_without_message).to receive(:message) { nil }
|
57
59
|
group.example("example name") { raise exception_without_message }
|
58
60
|
expect { run_all_and_dump_failures }.not_to raise_error
|
59
61
|
end
|
@@ -68,7 +70,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
68
70
|
context "with an exception that has an exception instance as its message" do
|
69
71
|
it "does not raise NoMethodError" do
|
70
72
|
gonzo_exception = RuntimeError.new
|
71
|
-
gonzo_exception.
|
73
|
+
allow(gonzo_exception).to receive(:message) { gonzo_exception }
|
72
74
|
group.example("example name") { raise gonzo_exception }
|
73
75
|
expect { run_all_and_dump_failures }.not_to raise_error
|
74
76
|
end
|
@@ -101,7 +103,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
101
103
|
|
102
104
|
context "with a failed message expectation (rspec-mocks)" do
|
103
105
|
it "does not show the error class" do
|
104
|
-
group.example("example name") { "this".
|
106
|
+
group.example("example name") { expect("this").to receive("that") }
|
105
107
|
run_all_and_dump_failures
|
106
108
|
expect(output.string).not_to match(/RSpec/m)
|
107
109
|
end
|
@@ -147,126 +149,21 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
147
149
|
end
|
148
150
|
end
|
149
151
|
|
150
|
-
describe "#
|
151
|
-
let(:group) { RSpec::Core::ExampleGroup.describe("group name") }
|
152
|
-
|
153
|
-
before { RSpec.configuration.stub(:color_enabled?) { false } }
|
154
|
-
|
155
|
-
def run_all_and_dump_pending
|
156
|
-
group.run(formatter)
|
157
|
-
formatter.dump_pending
|
158
|
-
end
|
159
|
-
|
160
|
-
context "with show_failures_in_pending_blocks setting enabled" do
|
161
|
-
before { RSpec.configuration.stub(:show_failures_in_pending_blocks?) { true } }
|
162
|
-
|
163
|
-
it "preserves formatting" do
|
164
|
-
group.example("example name") { pending { expect("this").to eq("that") } }
|
165
|
-
|
166
|
-
run_all_and_dump_pending
|
167
|
-
|
168
|
-
expect(output.string).to match(/group name example name/m)
|
169
|
-
expect(output.string).to match(/(\s+)expected: \"that\"\n\1 got: \"this\"/m)
|
170
|
-
end
|
171
|
-
|
172
|
-
context "with an exception without a message" do
|
173
|
-
it "does not throw NoMethodError" do
|
174
|
-
exception_without_message = Exception.new()
|
175
|
-
exception_without_message.stub(:message) { nil }
|
176
|
-
group.example("example name") { pending { raise exception_without_message } }
|
177
|
-
expect { run_all_and_dump_pending }.not_to raise_error
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
context "with an exception class other than RSpec" do
|
182
|
-
it "does not show the error class" do
|
183
|
-
group.example("example name") { pending { raise NameError.new('foo') } }
|
184
|
-
run_all_and_dump_pending
|
185
|
-
expect(output.string).to match(/NameError/m)
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
context "with a failed expectation (rspec-expectations)" do
|
190
|
-
it "does not show the error class" do
|
191
|
-
group.example("example name") { pending { expect("this").to eq("that") } }
|
192
|
-
run_all_and_dump_pending
|
193
|
-
expect(output.string).not_to match(/RSpec/m)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
context "with a failed message expectation (rspec-mocks)" do
|
198
|
-
it "does not show the error class" do
|
199
|
-
group.example("example name") { pending { "this".should_receive("that") } }
|
200
|
-
run_all_and_dump_pending
|
201
|
-
expect(output.string).not_to match(/RSpec/m)
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
context 'for #share_examples_for' do
|
206
|
-
it 'outputs the name and location' do
|
207
|
-
|
208
|
-
group.share_examples_for 'foo bar' do
|
209
|
-
it("example name") { pending { expect("this").to eq("that") } }
|
210
|
-
end
|
211
|
-
|
212
|
-
line = __LINE__.next
|
213
|
-
group.it_should_behave_like('foo bar')
|
214
|
-
|
215
|
-
run_all_and_dump_pending
|
216
|
-
|
217
|
-
expect(output.string).to include(
|
218
|
-
'Shared Example Group: "foo bar" called from ' +
|
219
|
-
"./spec/rspec/core/formatters/base_text_formatter_spec.rb:#{line}"
|
220
|
-
)
|
221
|
-
end
|
222
|
-
|
223
|
-
context 'that contains nested example groups' do
|
224
|
-
it 'outputs the name and location' do
|
225
|
-
group.share_examples_for 'foo bar' do
|
226
|
-
describe 'nested group' do
|
227
|
-
it("example name") { pending { expect("this").to eq("that") } }
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
line = __LINE__.next
|
232
|
-
group.it_should_behave_like('foo bar')
|
233
|
-
|
234
|
-
run_all_and_dump_pending
|
235
|
-
|
236
|
-
expect(output.string).to include(
|
237
|
-
'Shared Example Group: "foo bar" called from ' +
|
238
|
-
"./spec/rspec/core/formatters/base_text_formatter_spec.rb:#{line}"
|
239
|
-
)
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
context "with show_failures_in_pending_blocks setting disabled" do
|
246
|
-
before { RSpec.configuration.stub(:show_failures_in_pending_blocks?) { false } }
|
247
|
-
|
248
|
-
it "does not output the failure information" do
|
249
|
-
group.example("example name") { pending { expect("this").to eq("that") } }
|
250
|
-
run_all_and_dump_pending
|
251
|
-
expect(output.string).not_to match(/(\s+)expected: \"that\"\n\1 got: \"this\"/m)
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
describe "#dump_profile_slowest_examples" do
|
152
|
+
describe "#dump_profile_slowest_examples", :slow do
|
257
153
|
example_line_number = nil
|
258
154
|
|
259
155
|
before do
|
260
156
|
group = RSpec::Core::ExampleGroup.describe("group") do
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
157
|
+
example("example") do |example|
|
158
|
+
# make it look slow without actually taking up precious time
|
159
|
+
example.clock = class_double(RSpec::Core::Time, :now => RSpec::Core::Time.now + 0.5)
|
160
|
+
end
|
161
|
+
example_line_number = __LINE__ - 4
|
265
162
|
end
|
266
|
-
group.run(
|
163
|
+
group.run(reporter)
|
267
164
|
|
268
|
-
formatter.
|
269
|
-
RSpec.configuration.
|
165
|
+
allow(formatter).to receive(:examples) { group.examples }
|
166
|
+
allow(RSpec.configuration).to receive(:profile_examples) { 10 }
|
270
167
|
end
|
271
168
|
|
272
169
|
it "names the example" do
|
@@ -292,23 +189,23 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
292
189
|
end
|
293
190
|
end
|
294
191
|
|
295
|
-
describe "#dump_profile_slowest_example_groups" do
|
296
|
-
let(:group) do
|
192
|
+
describe "#dump_profile_slowest_example_groups", :slow do
|
193
|
+
let(:group) do
|
297
194
|
RSpec::Core::ExampleGroup.describe("slow group") do
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
195
|
+
example("example") do |example|
|
196
|
+
# make it look slow without actually taking up precious time
|
197
|
+
example.clock = class_double(RSpec::Core::Time, :now => RSpec::Core::Time.now + 0.5)
|
198
|
+
end
|
199
|
+
end
|
302
200
|
end
|
303
|
-
let(:rpt) { double('reporter').as_null_object }
|
304
201
|
|
305
202
|
before do
|
306
|
-
group.run(
|
307
|
-
RSpec.configuration.
|
203
|
+
group.run(reporter)
|
204
|
+
allow(RSpec.configuration).to receive(:profile_examples) { 10 }
|
308
205
|
end
|
309
206
|
|
310
207
|
context "with one example group" do
|
311
|
-
before { formatter.
|
208
|
+
before { allow(formatter).to receive(:examples) { group.examples } }
|
312
209
|
|
313
210
|
it "doesn't profile a single example group" do
|
314
211
|
formatter.dump_profile_slowest_example_groups
|
@@ -319,12 +216,12 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
319
216
|
context "with multiple example groups" do
|
320
217
|
before do
|
321
218
|
group2 = RSpec::Core::ExampleGroup.describe("fast group") do
|
322
|
-
example("example 1") {
|
323
|
-
example("example 2") {
|
219
|
+
example("example 1") { }
|
220
|
+
example("example 2") { }
|
324
221
|
end
|
325
|
-
group2.run(
|
222
|
+
group2.run(reporter)
|
326
223
|
|
327
|
-
formatter.
|
224
|
+
allow(formatter).to receive(:examples) { group.examples + group2.examples }
|
328
225
|
end
|
329
226
|
|
330
227
|
it "prints the slowest example groups" do
|
@@ -345,9 +242,9 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
345
242
|
|
346
243
|
it "depends on parent_groups to get the top level example group" do
|
347
244
|
ex = ""
|
348
|
-
group.describe("group 2") do
|
245
|
+
group.describe("group 2") do
|
349
246
|
describe "group 3" do
|
350
|
-
ex = example("nested example 1")
|
247
|
+
ex = example("nested example 1")
|
351
248
|
end
|
352
249
|
end
|
353
250
|
|
@@ -362,7 +259,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
362
259
|
config.tty = true
|
363
260
|
config.success_color = :cyan
|
364
261
|
end
|
365
|
-
|
262
|
+
send_notification :dump_summary, summary_notification(0, 1, 0, 0)
|
366
263
|
expect(output.string).to include("\e[36m")
|
367
264
|
end
|
368
265
|
end
|