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.
- data/Changelog.md +80 -0
- data/exe/autospec +1 -1
- data/features/README.md +2 -2
- data/features/command_line/format_option.feature +8 -14
- data/features/command_line/line_number_appended_to_path.feature +4 -4
- data/features/command_line/line_number_option.feature +1 -1
- data/features/command_line/rake_task.feature +2 -2
- data/features/command_line/require_option.feature +43 -0
- data/features/command_line/ruby.feature +2 -2
- data/features/command_line/warnings_option.feature +27 -0
- data/features/configuration/backtrace_clean_patterns.feature +2 -2
- data/features/configuration/deprecation_stream.feature +58 -0
- data/features/configuration/pattern.feature +8 -0
- data/features/configuration/profile.feature +59 -2
- data/features/configuration/read_options_from_file.feature +8 -5
- data/features/configuration/run_all_when_everything_filtered.feature +20 -4
- data/features/example_groups/basic_structure.feature +1 -1
- data/features/example_groups/shared_context.feature +1 -1
- data/features/example_groups/shared_examples.feature +72 -0
- data/features/filtering/exclusion_filters.feature +10 -10
- data/features/formatters/custom_formatter.feature +1 -1
- data/features/hooks/before_and_after_hooks.feature +19 -19
- data/features/mock_framework_integration/use_any_framework.feature +6 -6
- data/features/mock_framework_integration/use_flexmock.feature +3 -3
- data/features/mock_framework_integration/use_mocha.feature +3 -3
- data/features/mock_framework_integration/use_rr.feature +3 -3
- data/features/mock_framework_integration/use_rspec.feature +3 -3
- data/features/subject/implicit_subject.feature +1 -1
- data/lib/rspec/core.rb +20 -3
- data/lib/rspec/core/backtrace_cleaner.rb +46 -0
- data/lib/rspec/core/backward_compatibility.rb +3 -13
- data/lib/rspec/core/configuration.rb +136 -49
- data/lib/rspec/core/configuration_options.rb +19 -8
- data/lib/rspec/core/deprecation.rb +18 -30
- data/lib/rspec/core/example.rb +3 -3
- data/lib/rspec/core/example_group.rb +4 -3
- data/lib/rspec/core/extensions/kernel.rb +1 -1
- data/lib/rspec/core/filter_manager.rb +1 -1
- data/lib/rspec/core/formatters.rb +1 -1
- data/lib/rspec/core/formatters/base_formatter.rb +10 -1
- data/lib/rspec/core/formatters/base_text_formatter.rb +47 -10
- data/lib/rspec/core/formatters/deprecation_formatter.rb +35 -0
- data/lib/rspec/core/formatters/helpers.rb +12 -5
- data/lib/rspec/core/formatters/html_formatter.rb +7 -6
- data/lib/rspec/core/formatters/html_printer.rb +13 -12
- data/lib/rspec/core/formatters/json_formatter.rb +1 -2
- data/lib/rspec/core/formatters/text_mate_formatter.rb +1 -1
- data/lib/rspec/core/hooks.rb +9 -0
- data/lib/rspec/core/memoized_helpers.rb +19 -8
- data/lib/rspec/core/metadata.rb +3 -1
- data/lib/rspec/core/mocking/with_flexmock.rb +1 -1
- data/lib/rspec/core/mocking/with_rr.rb +1 -1
- data/lib/rspec/core/option_parser.rb +6 -2
- data/lib/rspec/core/pending.rb +1 -0
- data/lib/rspec/core/rake_task.rb +11 -19
- data/lib/rspec/core/reporter.rb +33 -4
- data/lib/rspec/core/shared_example_group.rb +56 -16
- data/lib/rspec/core/shared_example_group/collection.rb +42 -0
- data/lib/rspec/core/version.rb +1 -1
- data/lib/rspec/core/world.rb +2 -3
- data/spec/autotest/rspec_spec.rb +2 -2
- data/spec/rspec/core/backtrace_cleaner_spec.rb +68 -0
- data/spec/rspec/core/configuration_options_spec.rb +15 -4
- data/spec/rspec/core/configuration_spec.rb +202 -19
- data/spec/rspec/core/deprecation_spec.rb +41 -0
- data/spec/rspec/core/deprecations_spec.rb +10 -12
- data/spec/rspec/core/drb_command_line_spec.rb +1 -1
- data/spec/rspec/core/example_group_spec.rb +37 -36
- data/spec/rspec/core/example_spec.rb +25 -4
- data/spec/rspec/core/filter_manager_spec.rb +6 -6
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +101 -36
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +78 -0
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +2 -2
- data/spec/rspec/core/formatters/helpers_spec.rb +23 -7
- data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +20 -14
- data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +69 -169
- data/spec/rspec/core/formatters/html_formatted-1.8.7.html +28 -23
- data/spec/rspec/core/formatters/html_formatted-1.9.2.html +42 -33
- data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +17 -23
- data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +57 -157
- data/spec/rspec/core/formatters/html_formatted-1.9.3.html +42 -33
- data/spec/rspec/core/formatters/html_formatted-2.0.0.html +42 -33
- data/spec/rspec/core/formatters/html_formatter_spec.rb +1 -0
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +3 -3
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +11 -14
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-rbx.html +103 -203
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +30 -25
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +42 -33
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-jruby.html +20 -14
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-rbx.html +103 -203
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3.html +42 -33
- data/spec/rspec/core/formatters/text_mate_formatted-2.0.0.html +42 -33
- data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +1 -0
- data/spec/rspec/core/memoized_helpers_spec.rb +28 -0
- data/spec/rspec/core/metadata_spec.rb +8 -3
- data/spec/rspec/core/option_parser_spec.rb +8 -0
- data/spec/rspec/core/project_initializer_spec.rb +2 -2
- data/spec/rspec/core/rake_task_spec.rb +8 -8
- data/spec/rspec/core/reporter_spec.rb +26 -6
- data/spec/rspec/core/resources/formatter_specs.rb +3 -3
- data/spec/rspec/core/shared_context_spec.rb +20 -0
- data/spec/rspec/core/shared_example_group/collection_spec.rb +70 -0
- data/spec/rspec/core/shared_example_group_spec.rb +4 -4
- data/spec/rspec/core/world_spec.rb +1 -3
- data/spec/rspec/core_spec.rb +20 -0
- data/spec/spec_helper.rb +29 -29
- data/spec/support/helper_methods.rb +9 -1
- data/spec/support/isolate_load_path_mutation.rb +6 -0
- data/spec/support/sandboxed_mock_space.rb +100 -0
- metadata +28 -13
- data/features/filtering/run_all_when_everything_filtered.feature +0 -46
- data/lib/rspec/core/load_path.rb +0 -3
@@ -0,0 +1,41 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe RSpec::Core::Deprecation do
|
4
|
+
describe "#deprecate" do
|
5
|
+
context "old API with individual args" do
|
6
|
+
it "includes the method to deprecate" do
|
7
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :deprecated => "deprecated_method")
|
8
|
+
RSpec.deprecate("deprecated_method")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "includes the replacement when provided" do
|
12
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :deprecated => "deprecated_method", :replacement => "replacement")
|
13
|
+
RSpec.deprecate("deprecated_method", "replacement")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "adds the call site" do
|
17
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :call_site => caller(0)[1])
|
18
|
+
RSpec.deprecate("deprecated_method")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "new API with a hash after the first arg" do
|
23
|
+
it "passes the hash to the reporter" do
|
24
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :deprecated => "deprecated_method", :replacement => "replacement")
|
25
|
+
RSpec.deprecate("deprecated_method", :replacement => "replacement")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "adds the call site" do
|
29
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :call_site => caller(0)[1])
|
30
|
+
RSpec.deprecate("deprecated_method")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#warn_deprecation" do
|
36
|
+
it "puts message in a hash" do
|
37
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :message => "this is the message")
|
38
|
+
RSpec.warn_deprecation("this is the message")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,19 +1,19 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "deprecated methods" do
|
4
4
|
describe "Spec" do
|
5
5
|
it "is deprecated" do
|
6
|
-
RSpec.should_receive(:
|
6
|
+
RSpec.should_receive(:deprecate)
|
7
7
|
Spec
|
8
8
|
end
|
9
9
|
|
10
10
|
it "returns RSpec" do
|
11
|
-
RSpec.stub(:
|
11
|
+
RSpec.stub(:deprecate)
|
12
12
|
expect(Spec).to eq(RSpec)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "doesn't include backward compatibility in const_missing backtrace" do
|
16
|
-
RSpec.stub(:
|
16
|
+
RSpec.stub(:deprecate)
|
17
17
|
exception = nil
|
18
18
|
begin
|
19
19
|
ConstantThatDoesNotExist
|
@@ -26,12 +26,12 @@ describe "deprecations" do
|
|
26
26
|
describe RSpec::Core::ExampleGroup do
|
27
27
|
describe 'running_example' do
|
28
28
|
it 'is deprecated' do
|
29
|
-
RSpec.should_receive(:
|
29
|
+
RSpec.should_receive(:deprecate).at_least(:once)
|
30
30
|
self.running_example
|
31
31
|
end
|
32
32
|
|
33
33
|
it "delegates to example" do
|
34
|
-
RSpec.stub(:
|
34
|
+
RSpec.stub(:deprecate)
|
35
35
|
expect(running_example).to eq(example)
|
36
36
|
end
|
37
37
|
end
|
@@ -40,7 +40,7 @@ describe "deprecations" do
|
|
40
40
|
describe RSpec::Core::SharedExampleGroup do
|
41
41
|
describe 'share_as' do
|
42
42
|
it 'is deprecated' do
|
43
|
-
RSpec.should_receive(:
|
43
|
+
RSpec.should_receive(:deprecate).at_least(:once)
|
44
44
|
RSpec::Core::SharedExampleGroup.share_as(:DeprecatedSharedConst) {}
|
45
45
|
end
|
46
46
|
end
|
@@ -48,21 +48,19 @@ describe "deprecations" do
|
|
48
48
|
|
49
49
|
describe "Spec::Runner.configure" do
|
50
50
|
it "is deprecated" do
|
51
|
-
RSpec.
|
52
|
-
RSpec.should_receive(:deprecate)
|
51
|
+
RSpec.should_receive(:deprecate).at_least(:once)
|
53
52
|
Spec::Runner.configure
|
54
53
|
end
|
55
54
|
end
|
56
55
|
|
57
56
|
describe "Spec::Rake::SpecTask" do
|
58
57
|
it "is deprecated" do
|
59
|
-
RSpec.
|
60
|
-
RSpec.should_receive(:deprecate)
|
58
|
+
RSpec.should_receive(:deprecate).at_least(:once)
|
61
59
|
Spec::Rake::SpecTask
|
62
60
|
end
|
63
61
|
|
64
62
|
it "doesn't include backward compatibility in const_missing backtrace" do
|
65
|
-
RSpec.stub(:
|
63
|
+
RSpec.stub(:deprecate)
|
66
64
|
exception = nil
|
67
65
|
begin
|
68
66
|
Spec::Rake::ConstantThatDoesNotExist
|
@@ -96,7 +96,7 @@ describe "::DRbCommandLine", :type => :drb, :unless => RUBY_PLATFORM == 'java' d
|
|
96
96
|
pending "figure out a way to tell the output to say it's tty"
|
97
97
|
command_line(failing_spec_filename, "--color", "--drb-port", @drb_port).run(err, out)
|
98
98
|
out.rewind
|
99
|
-
expect(out.read).to match
|
99
|
+
expect(out.read).to match(/\e\[31m/m)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
@@ -906,7 +906,7 @@ module RSpec::Core
|
|
906
906
|
|
907
907
|
it "sets RSpec.wants_to_quit flag if encountering an exception in before(:all)" do
|
908
908
|
group.before(:all) { raise "error in before all" }
|
909
|
-
|
909
|
+
group.example("equality") { expect(1).to eq(2) }
|
910
910
|
expect(group.run).to be_false
|
911
911
|
expect(RSpec.wants_to_quit).to be_true
|
912
912
|
end
|
@@ -995,20 +995,19 @@ module RSpec::Core
|
|
995
995
|
|
996
996
|
%w[include_examples include_context].each do |name|
|
997
997
|
describe "##{name}" do
|
998
|
+
let(:group) { ExampleGroup.describe }
|
998
999
|
before do
|
999
|
-
shared_examples "named this" do
|
1000
|
+
group.shared_examples "named this" do
|
1000
1001
|
example("does something") {}
|
1001
1002
|
end
|
1002
1003
|
end
|
1003
1004
|
|
1004
1005
|
it "includes the named examples" do
|
1005
|
-
group = ExampleGroup.describe
|
1006
1006
|
group.send(name, "named this")
|
1007
1007
|
expect(group.examples.first.description).to eq("does something")
|
1008
1008
|
end
|
1009
1009
|
|
1010
1010
|
it "raises a helpful error message when shared content is not found" do
|
1011
|
-
group = ExampleGroup.describe
|
1012
1011
|
expect do
|
1013
1012
|
group.send(name, "shared stuff")
|
1014
1013
|
end.to raise_error(ArgumentError, /Could not find .* "shared stuff"/)
|
@@ -1016,15 +1015,15 @@ module RSpec::Core
|
|
1016
1015
|
|
1017
1016
|
it "passes parameters to the shared content" do
|
1018
1017
|
passed_params = {}
|
1018
|
+
group = ExampleGroup.describe
|
1019
1019
|
|
1020
|
-
shared_examples "named this with params" do |param1, param2|
|
1020
|
+
group.shared_examples "named this with params" do |param1, param2|
|
1021
1021
|
it("has access to the given parameters") do
|
1022
1022
|
passed_params[:param1] = param1
|
1023
1023
|
passed_params[:param2] = param2
|
1024
1024
|
end
|
1025
1025
|
end
|
1026
1026
|
|
1027
|
-
group = ExampleGroup.describe
|
1028
1027
|
group.send(name, "named this with params", :value1, :value2)
|
1029
1028
|
group.run
|
1030
1029
|
|
@@ -1032,30 +1031,31 @@ module RSpec::Core
|
|
1032
1031
|
end
|
1033
1032
|
|
1034
1033
|
it "adds shared instance methods to the group" do
|
1035
|
-
|
1034
|
+
group = ExampleGroup.describe('fake group')
|
1035
|
+
group.shared_examples "named this with params" do |param1|
|
1036
1036
|
def foo; end
|
1037
1037
|
end
|
1038
|
-
group = ExampleGroup.describe('fake group')
|
1039
1038
|
group.send(name, "named this with params", :a)
|
1040
1039
|
expect(group.public_instance_methods.map{|m| m.to_s}).to include("foo")
|
1041
1040
|
end
|
1042
1041
|
|
1043
1042
|
it "evals the shared example group only once" do
|
1044
1043
|
eval_count = 0
|
1045
|
-
shared_examples("named this with params") { |p| eval_count += 1 }
|
1046
1044
|
group = ExampleGroup.describe('fake group')
|
1045
|
+
group.shared_examples("named this with params") { |p| eval_count += 1 }
|
1047
1046
|
group.send(name, "named this with params", :a)
|
1048
1047
|
expect(eval_count).to eq(1)
|
1049
1048
|
end
|
1050
1049
|
|
1051
1050
|
it "evals the block when given" do
|
1052
1051
|
key = "#{__FILE__}:#{__LINE__}"
|
1053
|
-
shared_examples(key) do
|
1054
|
-
it("does something") do
|
1055
|
-
expect(foo).to eq("bar")
|
1056
|
-
end
|
1057
|
-
end
|
1058
1052
|
group = ExampleGroup.describe do
|
1053
|
+
shared_examples(key) do
|
1054
|
+
it("does something") do
|
1055
|
+
expect(foo).to eq("bar")
|
1056
|
+
end
|
1057
|
+
end
|
1058
|
+
|
1059
1059
|
send name, key do
|
1060
1060
|
def foo; "bar"; end
|
1061
1061
|
end
|
@@ -1067,43 +1067,43 @@ module RSpec::Core
|
|
1067
1067
|
|
1068
1068
|
describe "#it_should_behave_like" do
|
1069
1069
|
it "creates a nested group" do
|
1070
|
-
shared_examples_for("thing") {}
|
1071
1070
|
group = ExampleGroup.describe('fake group')
|
1071
|
+
group.shared_examples_for("thing") {}
|
1072
1072
|
group.it_should_behave_like("thing")
|
1073
1073
|
expect(group).to have(1).children
|
1074
1074
|
end
|
1075
1075
|
|
1076
1076
|
it "creates a nested group for a class" do
|
1077
1077
|
klass = Class.new
|
1078
|
-
shared_examples_for(klass) {}
|
1079
1078
|
group = ExampleGroup.describe('fake group')
|
1079
|
+
group.shared_examples_for(klass) {}
|
1080
1080
|
group.it_should_behave_like(klass)
|
1081
1081
|
expect(group).to have(1).children
|
1082
1082
|
end
|
1083
1083
|
|
1084
1084
|
it "adds shared examples to nested group" do
|
1085
|
-
|
1085
|
+
group = ExampleGroup.describe('fake group')
|
1086
|
+
group.shared_examples_for("thing") do
|
1086
1087
|
it("does something")
|
1087
1088
|
end
|
1088
|
-
group = ExampleGroup.describe('fake group')
|
1089
1089
|
shared_group = group.it_should_behave_like("thing")
|
1090
1090
|
expect(shared_group).to have(1).examples
|
1091
1091
|
end
|
1092
1092
|
|
1093
1093
|
it "adds shared instance methods to nested group" do
|
1094
|
-
|
1094
|
+
group = ExampleGroup.describe('fake group')
|
1095
|
+
group.shared_examples_for("thing") do
|
1095
1096
|
def foo; end
|
1096
1097
|
end
|
1097
|
-
group = ExampleGroup.describe('fake group')
|
1098
1098
|
shared_group = group.it_should_behave_like("thing")
|
1099
1099
|
expect(shared_group.public_instance_methods.map{|m| m.to_s}).to include("foo")
|
1100
1100
|
end
|
1101
1101
|
|
1102
1102
|
it "adds shared class methods to nested group" do
|
1103
|
-
|
1103
|
+
group = ExampleGroup.describe('fake group')
|
1104
|
+
group.shared_examples_for("thing") do
|
1104
1105
|
def self.foo; end
|
1105
1106
|
end
|
1106
|
-
group = ExampleGroup.describe('fake group')
|
1107
1107
|
shared_group = group.it_should_behave_like("thing")
|
1108
1108
|
expect(shared_group.methods.map{|m| m.to_s}).to include("foo")
|
1109
1109
|
end
|
@@ -1111,34 +1111,35 @@ module RSpec::Core
|
|
1111
1111
|
it "passes parameters to the shared example group" do
|
1112
1112
|
passed_params = {}
|
1113
1113
|
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1114
|
+
group = ExampleGroup.describe("group") do
|
1115
|
+
shared_examples_for("thing") do |param1, param2|
|
1116
|
+
it("has access to the given parameters") do
|
1117
|
+
passed_params[:param1] = param1
|
1118
|
+
passed_params[:param2] = param2
|
1119
|
+
end
|
1118
1120
|
end
|
1119
|
-
end
|
1120
1121
|
|
1121
|
-
group = ExampleGroup.describe("group") do
|
1122
1122
|
it_should_behave_like "thing", :value1, :value2
|
1123
1123
|
end
|
1124
|
+
|
1124
1125
|
group.run
|
1125
1126
|
|
1126
1127
|
expect(passed_params).to eq({ :param1 => :value1, :param2 => :value2 })
|
1127
1128
|
end
|
1128
1129
|
|
1129
1130
|
it "adds shared instance methods to nested group" do
|
1130
|
-
|
1131
|
+
group = ExampleGroup.describe('fake group')
|
1132
|
+
group.shared_examples_for("thing") do |param1|
|
1131
1133
|
def foo; end
|
1132
1134
|
end
|
1133
|
-
group = ExampleGroup.describe('fake group')
|
1134
1135
|
shared_group = group.it_should_behave_like("thing", :a)
|
1135
1136
|
expect(shared_group.public_instance_methods.map{|m| m.to_s}).to include("foo")
|
1136
1137
|
end
|
1137
1138
|
|
1138
1139
|
it "evals the shared example group only once" do
|
1139
1140
|
eval_count = 0
|
1140
|
-
shared_examples_for("thing") { |p| eval_count += 1 }
|
1141
1141
|
group = ExampleGroup.describe('fake group')
|
1142
|
+
group.shared_examples_for("thing") { |p| eval_count += 1 }
|
1142
1143
|
group.it_should_behave_like("thing", :a)
|
1143
1144
|
expect(eval_count).to eq(1)
|
1144
1145
|
end
|
@@ -1146,12 +1147,12 @@ module RSpec::Core
|
|
1146
1147
|
context "given a block" do
|
1147
1148
|
it "evaluates the block in nested group" do
|
1148
1149
|
scopes = []
|
1149
|
-
shared_examples_for("thing") do
|
1150
|
-
it("gets run in the nested group") do
|
1151
|
-
scopes << self.class
|
1152
|
-
end
|
1153
|
-
end
|
1154
1150
|
group = ExampleGroup.describe("group") do
|
1151
|
+
shared_examples_for("thing") do
|
1152
|
+
it("gets run in the nested group") do
|
1153
|
+
scopes << self.class
|
1154
|
+
end
|
1155
|
+
end
|
1155
1156
|
it_should_behave_like "thing" do
|
1156
1157
|
it("gets run in the same nested group") do
|
1157
1158
|
scopes << self.class
|
@@ -8,7 +8,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
let(:example_instance) do
|
11
|
-
example_group.example('example description')
|
11
|
+
example_group.example('example description') { }
|
12
12
|
end
|
13
13
|
|
14
14
|
it_behaves_like "metadata hash builder" do
|
@@ -28,7 +28,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'can be pretty printed' do
|
31
|
-
output = capture_stdout { pp example_instance }
|
31
|
+
output = ignoring_warnings { capture_stdout { pp example_instance } }
|
32
32
|
expect(output).to include("RSpec::Core::Example")
|
33
33
|
end
|
34
34
|
|
@@ -104,6 +104,12 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
104
104
|
expect(example_group.examples.first.description).to eq("should eq 5")
|
105
105
|
end
|
106
106
|
|
107
|
+
it "uses the matcher-generated description in the full description" do
|
108
|
+
example_group.example { expect(5).to eq(5) }
|
109
|
+
example_group.run
|
110
|
+
expect(example_group.examples.first.full_description).to eq("group description should eq 5")
|
111
|
+
end
|
112
|
+
|
107
113
|
it "uses the file and line number if there is no matcher-generated description" do
|
108
114
|
example = example_group.example {}
|
109
115
|
example_group.run
|
@@ -314,7 +320,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
314
320
|
end
|
315
321
|
|
316
322
|
message = run_and_capture_reported_message(group)
|
317
|
-
expect(message).to match
|
323
|
+
expect(message).to match(/An error occurred in an around.* hook/i)
|
318
324
|
end
|
319
325
|
|
320
326
|
it "prints any after hook errors rather than silencing them" do
|
@@ -324,7 +330,7 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
324
330
|
end
|
325
331
|
|
326
332
|
message = run_and_capture_reported_message(group)
|
327
|
-
expect(message).to match
|
333
|
+
expect(message).to match(/An error occurred in an after.* hook/i)
|
328
334
|
end
|
329
335
|
|
330
336
|
it 'does not print mock expectation errors' do
|
@@ -415,4 +421,19 @@ describe RSpec::Core::Example, :parent_metadata => 'sample' do
|
|
415
421
|
expect(example.metadata[:execution_result][:run_time]).to be < 0.2
|
416
422
|
end
|
417
423
|
end
|
424
|
+
|
425
|
+
it 'does not interfere with per-example randomness when running examples in a random order' do
|
426
|
+
values = []
|
427
|
+
|
428
|
+
RSpec.configuration.order = :random
|
429
|
+
|
430
|
+
RSpec::Core::ExampleGroup.describe do
|
431
|
+
# The bug was only triggered when the examples
|
432
|
+
# were in nested contexts; see https://github.com/rspec/rspec-core/pull/837
|
433
|
+
context { example { values << rand } }
|
434
|
+
context { example { values << rand } }
|
435
|
+
end.run
|
436
|
+
|
437
|
+
expect(values.uniq).to have(2).values
|
438
|
+
end
|
418
439
|
end
|
@@ -205,38 +205,38 @@ module RSpec::Core
|
|
205
205
|
end
|
206
206
|
|
207
207
|
it 'deprecates an overridden :if filter' do
|
208
|
-
RSpec.
|
208
|
+
expect(RSpec).to receive(:deprecate).with(/exclude\(:if/)
|
209
209
|
filter_manager = FilterManager.new
|
210
210
|
filter_manager.exclude :if => :custom_filter
|
211
211
|
end
|
212
212
|
|
213
213
|
it 'deprecates an :if filter overridden with low priority' do
|
214
|
-
RSpec.
|
214
|
+
expect(RSpec).to receive(:deprecate).with(/exclude\(:if/)
|
215
215
|
filter_manager = FilterManager.new
|
216
216
|
filter_manager.exclude_with_low_priority :if => :custom_filter
|
217
217
|
end
|
218
218
|
|
219
219
|
it 'deprecates an overridden :unless filter' do
|
220
|
-
RSpec.
|
220
|
+
expect(RSpec).to receive(:deprecate).with(/exclude\(:unless/)
|
221
221
|
filter_manager = FilterManager.new
|
222
222
|
filter_manager.exclude :unless => :custom_filter
|
223
223
|
end
|
224
224
|
|
225
225
|
it 'deprecates an :unless filter overridden with low priority' do
|
226
|
-
RSpec.
|
226
|
+
expect(RSpec).to receive(:deprecate).with(/exclude\(:unless/)
|
227
227
|
filter_manager = FilterManager.new
|
228
228
|
filter_manager.exclude_with_low_priority :unless => :custom_filter
|
229
229
|
end
|
230
230
|
|
231
231
|
it 'includes an overriden :if filter' do
|
232
|
-
RSpec.
|
232
|
+
allow(RSpec).to receive(:deprecate)
|
233
233
|
filter_manager = FilterManager.new
|
234
234
|
filter_manager.exclude :if => :custom_filter
|
235
235
|
expect(filter_manager.exclusions.description).to eq({ :if => :custom_filter }.inspect)
|
236
236
|
end
|
237
237
|
|
238
238
|
it 'includes an overriden :unless filter' do
|
239
|
-
RSpec.
|
239
|
+
allow(RSpec).to receive(:deprecate)
|
240
240
|
filter_manager = FilterManager.new
|
241
241
|
filter_manager.exclude :unless => :custom_filter
|
242
242
|
expect(filter_manager.exclusions.description).to eq({ :unless => :custom_filter }.inspect)
|
@@ -46,8 +46,8 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
46
46
|
|
47
47
|
run_all_and_dump_failures
|
48
48
|
|
49
|
-
expect(output.string).to match
|
50
|
-
expect(output.string).to match
|
49
|
+
expect(output.string).to match(/group name example name/m)
|
50
|
+
expect(output.string).to match(/(\s+)expected: \"that\"\n\1 got: \"this\"/m)
|
51
51
|
end
|
52
52
|
|
53
53
|
context "with an exception without a message" do
|
@@ -55,7 +55,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
55
55
|
exception_without_message = Exception.new()
|
56
56
|
exception_without_message.stub(:message) { nil }
|
57
57
|
group.example("example name") { raise exception_without_message }
|
58
|
-
expect { run_all_and_dump_failures }.not_to raise_error
|
58
|
+
expect { run_all_and_dump_failures }.not_to raise_error
|
59
59
|
end
|
60
60
|
|
61
61
|
it "preserves ancestry" do
|
@@ -70,7 +70,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
70
70
|
gonzo_exception = RuntimeError.new
|
71
71
|
gonzo_exception.stub(:message) { gonzo_exception }
|
72
72
|
group.example("example name") { raise gonzo_exception }
|
73
|
-
expect { run_all_and_dump_failures }.not_to raise_error
|
73
|
+
expect { run_all_and_dump_failures }.not_to raise_error
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -87,7 +87,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
87
87
|
it "does not show the error class" do
|
88
88
|
group.example("example name") { raise NameError.new('foo') }
|
89
89
|
run_all_and_dump_failures
|
90
|
-
expect(output.string).to match
|
90
|
+
expect(output.string).to match(/NameError/m)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
@@ -95,7 +95,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
95
95
|
it "does not show the error class" do
|
96
96
|
group.example("example name") { expect("this").to eq("that") }
|
97
97
|
run_all_and_dump_failures
|
98
|
-
expect(output.string).not_to match
|
98
|
+
expect(output.string).not_to match(/RSpec/m)
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
@@ -103,14 +103,14 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
103
103
|
it "does not show the error class" do
|
104
104
|
group.example("example name") { "this".should_receive("that") }
|
105
105
|
run_all_and_dump_failures
|
106
|
-
expect(output.string).not_to match
|
106
|
+
expect(output.string).not_to match(/RSpec/m)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
110
110
|
context 'for #share_examples_for' do
|
111
111
|
it 'outputs the name and location' do
|
112
112
|
|
113
|
-
share_examples_for 'foo bar' do
|
113
|
+
group.share_examples_for 'foo bar' do
|
114
114
|
it("example name") { expect("this").to eq("that") }
|
115
115
|
end
|
116
116
|
|
@@ -127,7 +127,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
127
127
|
|
128
128
|
context 'that contains nested example groups' do
|
129
129
|
it 'outputs the name and location' do
|
130
|
-
share_examples_for 'foo bar' do
|
130
|
+
group.share_examples_for 'foo bar' do
|
131
131
|
describe 'nested group' do
|
132
132
|
it("example name") { expect("this").to eq("that") }
|
133
133
|
end
|
@@ -147,11 +147,11 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
147
147
|
end
|
148
148
|
|
149
149
|
context 'for #share_as' do
|
150
|
-
before { RSpec.
|
150
|
+
before { allow(RSpec).to receive(:deprecate) }
|
151
151
|
|
152
152
|
it 'outputs the name and location' do
|
153
153
|
|
154
|
-
share_as :FooBar do
|
154
|
+
group.share_as :FooBar do
|
155
155
|
it("example name") { expect("this").to eq("that") }
|
156
156
|
end
|
157
157
|
|
@@ -169,7 +169,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
169
169
|
context 'that contains nested example groups' do
|
170
170
|
it 'outputs the name and location' do
|
171
171
|
|
172
|
-
share_as :NestedFoo do
|
172
|
+
group.share_as :NestedFoo do
|
173
173
|
describe 'nested group' do
|
174
174
|
describe 'hell' do
|
175
175
|
it("example name") { expect("this").to eq("that") }
|
@@ -209,8 +209,8 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
209
209
|
|
210
210
|
run_all_and_dump_pending
|
211
211
|
|
212
|
-
expect(output.string).to match
|
213
|
-
expect(output.string).to match
|
212
|
+
expect(output.string).to match(/group name example name/m)
|
213
|
+
expect(output.string).to match(/(\s+)expected: \"that\"\n\1 got: \"this\"/m)
|
214
214
|
end
|
215
215
|
|
216
216
|
context "with an exception without a message" do
|
@@ -218,7 +218,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
218
218
|
exception_without_message = Exception.new()
|
219
219
|
exception_without_message.stub(:message) { nil }
|
220
220
|
group.example("example name") { pending { raise exception_without_message } }
|
221
|
-
expect { run_all_and_dump_pending }.not_to raise_error
|
221
|
+
expect { run_all_and_dump_pending }.not_to raise_error
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
@@ -226,7 +226,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
226
226
|
it "does not show the error class" do
|
227
227
|
group.example("example name") { pending { raise NameError.new('foo') } }
|
228
228
|
run_all_and_dump_pending
|
229
|
-
expect(output.string).to match
|
229
|
+
expect(output.string).to match(/NameError/m)
|
230
230
|
end
|
231
231
|
end
|
232
232
|
|
@@ -234,7 +234,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
234
234
|
it "does not show the error class" do
|
235
235
|
group.example("example name") { pending { expect("this").to eq("that") } }
|
236
236
|
run_all_and_dump_pending
|
237
|
-
expect(output.string).not_to match
|
237
|
+
expect(output.string).not_to match(/RSpec/m)
|
238
238
|
end
|
239
239
|
end
|
240
240
|
|
@@ -242,14 +242,14 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
242
242
|
it "does not show the error class" do
|
243
243
|
group.example("example name") { pending { "this".should_receive("that") } }
|
244
244
|
run_all_and_dump_pending
|
245
|
-
expect(output.string).not_to match
|
245
|
+
expect(output.string).not_to match(/RSpec/m)
|
246
246
|
end
|
247
247
|
end
|
248
248
|
|
249
249
|
context 'for #share_examples_for' do
|
250
250
|
it 'outputs the name and location' do
|
251
251
|
|
252
|
-
share_examples_for 'foo bar' do
|
252
|
+
group.share_examples_for 'foo bar' do
|
253
253
|
it("example name") { pending { expect("this").to eq("that") } }
|
254
254
|
end
|
255
255
|
|
@@ -266,7 +266,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
266
266
|
|
267
267
|
context 'that contains nested example groups' do
|
268
268
|
it 'outputs the name and location' do
|
269
|
-
share_examples_for 'foo bar' do
|
269
|
+
group.share_examples_for 'foo bar' do
|
270
270
|
describe 'nested group' do
|
271
271
|
it("example name") { pending { expect("this").to eq("that") } }
|
272
272
|
end
|
@@ -286,11 +286,11 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
286
286
|
end
|
287
287
|
|
288
288
|
context 'for #share_as' do
|
289
|
-
before { RSpec.
|
289
|
+
before { allow(RSpec).to receive(:deprecate) }
|
290
290
|
|
291
291
|
it 'outputs the name and location' do
|
292
292
|
|
293
|
-
share_as :FooBar2 do
|
293
|
+
group.share_as :FooBar2 do
|
294
294
|
it("example name") { pending { expect("this").to eq("that") } }
|
295
295
|
end
|
296
296
|
|
@@ -308,7 +308,7 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
308
308
|
context 'that contains nested example groups' do
|
309
309
|
it 'outputs the name and location' do
|
310
310
|
|
311
|
-
share_as :NestedFoo2 do
|
311
|
+
group.share_as :NestedFoo2 do
|
312
312
|
describe 'nested group' do
|
313
313
|
describe 'hell' do
|
314
314
|
it("example name") { pending { expect("this").to eq("that") } }
|
@@ -336,12 +336,12 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
336
336
|
it "does not output the failure information" do
|
337
337
|
group.example("example name") { pending { expect("this").to eq("that") } }
|
338
338
|
run_all_and_dump_pending
|
339
|
-
expect(output.string).not_to match
|
339
|
+
expect(output.string).not_to match(/(\s+)expected: \"that\"\n\1 got: \"this\"/m)
|
340
340
|
end
|
341
341
|
end
|
342
342
|
end
|
343
343
|
|
344
|
-
describe "#
|
344
|
+
describe "#dump_profile_slowest_examples" do
|
345
345
|
example_line_number = nil
|
346
346
|
|
347
347
|
before do
|
@@ -358,25 +358,88 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
358
358
|
end
|
359
359
|
|
360
360
|
it "names the example" do
|
361
|
-
formatter.
|
362
|
-
expect(output.string).to match
|
361
|
+
formatter.dump_profile_slowest_examples
|
362
|
+
expect(output.string).to match(/group example/m)
|
363
363
|
end
|
364
364
|
|
365
365
|
it "prints the time" do
|
366
|
-
formatter.
|
367
|
-
expect(output.string).to match
|
366
|
+
formatter.dump_profile_slowest_examples
|
367
|
+
expect(output.string).to match(/0(\.\d+)? seconds/)
|
368
368
|
end
|
369
369
|
|
370
370
|
it "prints the path" do
|
371
|
-
formatter.
|
371
|
+
formatter.dump_profile_slowest_examples
|
372
372
|
filename = __FILE__.split(File::SEPARATOR).last
|
373
373
|
|
374
|
-
expect(output.string).to match
|
374
|
+
expect(output.string).to match(/#{filename}\:#{example_line_number}/)
|
375
375
|
end
|
376
376
|
|
377
377
|
it "prints the percentage taken from the total runtime" do
|
378
|
-
formatter.
|
379
|
-
expect(output.string).to match
|
378
|
+
formatter.dump_profile_slowest_examples
|
379
|
+
expect(output.string).to match(/, 100.0% of total time\):/)
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
383
|
+
describe "#dump_profile_slowest_example_groups" do
|
384
|
+
let(:group) do
|
385
|
+
RSpec::Core::ExampleGroup.describe("slow group") do
|
386
|
+
# Use a sleep so there is some measurable time, to ensure
|
387
|
+
# the reported percent is 100%, not 0%.
|
388
|
+
example("example") { sleep 0.01 }
|
389
|
+
end
|
390
|
+
end
|
391
|
+
let(:rpt) { double('reporter').as_null_object }
|
392
|
+
|
393
|
+
before do
|
394
|
+
group.run(rpt)
|
395
|
+
RSpec.configuration.stub(:profile_examples) { 10 }
|
396
|
+
end
|
397
|
+
|
398
|
+
context "with one example group" do
|
399
|
+
before { formatter.stub(:examples) { group.examples } }
|
400
|
+
|
401
|
+
it "doesn't profile a single example group" do
|
402
|
+
formatter.dump_profile_slowest_example_groups
|
403
|
+
expect(output.string).not_to match(/slowest example groups/)
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
context "with multiple example groups" do
|
408
|
+
before do
|
409
|
+
group2 = RSpec::Core::ExampleGroup.describe("fast group") do
|
410
|
+
example("example 1") { sleep 0.004 }
|
411
|
+
example("example 2") { sleep 0.007 }
|
412
|
+
end
|
413
|
+
group2.run(rpt)
|
414
|
+
|
415
|
+
formatter.stub(:examples) { group.examples + group2.examples }
|
416
|
+
end
|
417
|
+
|
418
|
+
it "prints the slowest example groups" do
|
419
|
+
formatter.dump_profile_slowest_example_groups
|
420
|
+
expect(output.string).to match(/slowest example groups/)
|
421
|
+
end
|
422
|
+
|
423
|
+
it "prints the time" do
|
424
|
+
formatter.dump_profile_slowest_example_groups
|
425
|
+
expect(output.string).to match(/0(\.\d+)? seconds/)
|
426
|
+
end
|
427
|
+
|
428
|
+
it "ranks the example groups by average time" do
|
429
|
+
formatter.dump_profile_slowest_example_groups
|
430
|
+
expect(output.string).to match(/slow group(.*)fast group/m)
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
it "depends on parent_groups to get the top level example group" do
|
435
|
+
ex = ""
|
436
|
+
group.describe("group 2") do
|
437
|
+
describe "group 3" do
|
438
|
+
ex = example("nested example 1")
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
expect(ex.example_group.parent_groups.last).to eq(group)
|
380
443
|
end
|
381
444
|
end
|
382
445
|
|
@@ -411,8 +474,8 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
411
474
|
|
412
475
|
describe "##{name}" do
|
413
476
|
before do
|
414
|
-
RSpec.configuration.
|
415
|
-
RSpec.
|
477
|
+
allow(RSpec.configuration).to receive(:color_enabled?) { true }
|
478
|
+
allow(RSpec).to receive(:deprecate)
|
416
479
|
end
|
417
480
|
|
418
481
|
it "prints the text using the color code for #{name}" do
|
@@ -420,7 +483,9 @@ describe RSpec::Core::Formatters::BaseTextFormatter do
|
|
420
483
|
end
|
421
484
|
|
422
485
|
it "prints a deprecation warning" do
|
423
|
-
RSpec.
|
486
|
+
expect(RSpec).to receive(:deprecate) {|*args|
|
487
|
+
expect(args.first).to match(/#{name}/)
|
488
|
+
}
|
424
489
|
formatter.send(name, "text")
|
425
490
|
end
|
426
491
|
end
|