rspec-core 2.12.2 → 2.13.0
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.
- data/Changelog.md +31 -0
- data/README.md +11 -10
- data/features/command_line/example_name_option.feature +6 -10
- data/features/command_line/tag.feature +15 -8
- data/features/configuration/backtrace_clean_patterns.feature +102 -0
- data/features/configuration/failure_exit_code.feature +36 -0
- data/features/configuration/order_and_seed.feature +3 -0
- data/features/configuration/output_stream.feature +24 -0
- data/features/configuration/pattern.feature +30 -0
- data/features/configuration/profile.feature +163 -0
- data/features/configuration/run_all_when_everything_filtered.feature +60 -0
- data/features/configuration/show_failures_in_pending_blocks.feature +61 -0
- data/features/configuration/treat_symbols_as_metadata_keys_with_true_values.feature +52 -0
- data/features/filtering/exclusion_filters.feature +1 -2
- data/features/formatters/configurable_colors.feature +31 -0
- data/features/step_definitions/additional_cli_steps.rb +21 -0
- data/features/subject/explicit_subject.feature +19 -0
- data/lib/autotest/rspec2.rb +1 -1
- data/lib/rspec/core.rb +1 -2
- data/lib/rspec/core/configuration.rb +33 -3
- data/lib/rspec/core/configuration_options.rb +5 -5
- data/lib/rspec/core/deprecation.rb +1 -1
- data/lib/rspec/core/example.rb +2 -2
- data/lib/rspec/core/example_group.rb +1 -3
- data/lib/rspec/core/formatters/base_text_formatter.rb +93 -27
- data/lib/rspec/core/formatters/documentation_formatter.rb +3 -3
- data/lib/rspec/core/formatters/progress_formatter.rb +3 -3
- data/lib/rspec/core/memoized_helpers.rb +425 -0
- data/lib/rspec/core/metadata.rb +6 -2
- data/lib/rspec/core/option_parser.rb +8 -2
- data/lib/rspec/core/pending.rb +7 -0
- data/lib/rspec/core/shared_context.rb +1 -1
- data/lib/rspec/core/version.rb +1 -1
- data/spec/autotest/failed_results_re_spec.rb +4 -4
- data/spec/autotest/rspec_spec.rb +25 -20
- data/spec/command_line/order_spec.rb +21 -21
- data/spec/rspec/core/command_line_spec.rb +6 -6
- data/spec/rspec/core/configuration_options_spec.rb +86 -72
- data/spec/rspec/core/configuration_spec.rb +161 -156
- data/spec/rspec/core/deprecations_spec.rb +4 -4
- data/spec/rspec/core/drb_command_line_spec.rb +9 -9
- data/spec/rspec/core/drb_options_spec.rb +46 -33
- data/spec/rspec/core/dsl_spec.rb +3 -3
- data/spec/rspec/core/example_group_spec.rb +156 -124
- data/spec/rspec/core/example_spec.rb +68 -52
- data/spec/rspec/core/filter_manager_spec.rb +36 -36
- data/spec/rspec/core/formatters/base_formatter_spec.rb +9 -9
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +104 -42
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +4 -4
- data/spec/rspec/core/formatters/helpers_spec.rb +13 -13
- data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +5 -17
- data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +159 -44
- data/spec/rspec/core/formatters/html_formatted-1.8.7.html +14 -14
- data/spec/rspec/core/formatters/html_formatted-1.9.2.html +20 -20
- data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +5 -5
- data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +159 -44
- data/spec/rspec/core/formatters/html_formatted-1.9.3.html +20 -20
- data/spec/rspec/core/formatters/{html_formatted-1.9.2-jruby.html → html_formatted-2.0.0.html} +24 -18
- data/spec/rspec/core/formatters/html_formatter_spec.rb +9 -5
- data/spec/rspec/core/formatters/json_formatter_spec.rb +9 -9
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +4 -4
- data/spec/rspec/core/formatters/snippet_extractor_spec.rb +3 -3
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +5 -17
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-rbx.html +159 -44
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +16 -16
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +23 -23
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-jruby.html +5 -17
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-rbx.html +159 -44
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3.html +23 -23
- data/spec/rspec/core/formatters/{text_mate_formatted-1.9.2-jruby.html → text_mate_formatted-2.0.0.html} +25 -19
- data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +8 -4
- data/spec/rspec/core/hooks_filtering_spec.rb +16 -16
- data/spec/rspec/core/hooks_spec.rb +11 -11
- data/spec/rspec/core/kernel_extensions_spec.rb +1 -1
- data/spec/rspec/core/memoized_helpers_spec.rb +458 -0
- data/spec/rspec/core/metadata_spec.rb +74 -74
- data/spec/rspec/core/option_parser_spec.rb +27 -27
- data/spec/rspec/core/pending_example_spec.rb +32 -32
- data/spec/rspec/core/project_initializer_spec.rb +8 -8
- data/spec/rspec/core/rake_task_spec.rb +16 -16
- data/spec/rspec/core/reporter_spec.rb +3 -3
- data/spec/rspec/core/resources/formatter_specs.rb +4 -4
- data/spec/rspec/core/ruby_project_spec.rb +4 -2
- data/spec/rspec/core/shared_context_spec.rb +34 -7
- data/spec/rspec/core/shared_example_group_spec.rb +14 -14
- data/spec/rspec/core/world_spec.rb +9 -9
- data/spec/rspec/core_spec.rb +5 -5
- data/spec/spec_helper.rb +4 -0
- data/spec/support/shared_example_groups.rb +4 -4
- data/spec/support/spec_files.rb +2 -2
- metadata +158 -150
- data/lib/rspec/core/let.rb +0 -110
- data/lib/rspec/core/subject.rb +0 -223
- data/spec/rspec/core/let_spec.rb +0 -55
- data/spec/rspec/core/subject_spec.rb +0 -255
data/lib/rspec/core/metadata.rb
CHANGED
|
@@ -126,8 +126,12 @@ module RSpec
|
|
|
126
126
|
|
|
127
127
|
def described_class
|
|
128
128
|
container_stack.each do |g|
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
[:described_class, :describes].each do |key|
|
|
130
|
+
if g.has_key?(key)
|
|
131
|
+
value = g[key]
|
|
132
|
+
return value unless value.nil?
|
|
133
|
+
end
|
|
134
|
+
end
|
|
131
135
|
end
|
|
132
136
|
|
|
133
137
|
container_stack.reverse.each do |g|
|
|
@@ -135,8 +135,14 @@ module RSpec::Core
|
|
|
135
135
|
options[:color] = o
|
|
136
136
|
end
|
|
137
137
|
|
|
138
|
-
parser.on('-p', '--profile', 'Enable profiling of examples and list
|
|
139
|
-
options[:profile_examples] =
|
|
138
|
+
parser.on('-p', '--[no-]profile [COUNT]', 'Enable profiling of examples and list the slowest examples (default: 10).') do |argument|
|
|
139
|
+
options[:profile_examples] = if argument.nil?
|
|
140
|
+
true
|
|
141
|
+
elsif argument == false
|
|
142
|
+
false
|
|
143
|
+
else
|
|
144
|
+
argument.to_i
|
|
145
|
+
end
|
|
140
146
|
end
|
|
141
147
|
|
|
142
148
|
parser.separator <<-FILTERING
|
data/lib/rspec/core/pending.rb
CHANGED
|
@@ -68,6 +68,13 @@ module RSpec
|
|
|
68
68
|
# it "does something", :pending => true do
|
|
69
69
|
# # ...
|
|
70
70
|
# end
|
|
71
|
+
#
|
|
72
|
+
# or pass `:pending => "something else getting finished"` to add a
|
|
73
|
+
# message to the summary report:
|
|
74
|
+
#
|
|
75
|
+
# it "does something", :pending => "something else getting finished" do
|
|
76
|
+
# # ...
|
|
77
|
+
# end
|
|
71
78
|
def pending(*args)
|
|
72
79
|
return self.class.before(:each) { pending(*args) } unless example
|
|
73
80
|
|
data/lib/rspec/core/version.rb
CHANGED
|
@@ -16,14 +16,14 @@ describe "failed_results_re for autotest" do
|
|
|
16
16
|
shared_examples "autotest failed_results_re" do
|
|
17
17
|
it "matches a failure" do
|
|
18
18
|
output = run_example { fail }
|
|
19
|
-
output.
|
|
20
|
-
output.
|
|
19
|
+
expect(output).to match(Autotest::Rspec2.new.failed_results_re)
|
|
20
|
+
expect(output).to include(__FILE__.sub(File.expand_path('.'),'.'))
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
it "does not match when there are no failures" do
|
|
24
24
|
output = run_example { } # pass
|
|
25
|
-
output.
|
|
26
|
-
output.
|
|
25
|
+
expect(output).not_to match(Autotest::Rspec2.new.failed_results_re)
|
|
26
|
+
expect(output).not_to include(__FILE__.sub(File.expand_path('.'),'.'))
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
data/spec/autotest/rspec_spec.rb
CHANGED
|
@@ -11,8 +11,7 @@ describe Autotest::Rspec2 do
|
|
|
11
11
|
|
|
12
12
|
it "uses autotest's prefix" do
|
|
13
13
|
rspec_autotest.prefix = "this is the prefix "
|
|
14
|
-
rspec_autotest.
|
|
15
|
-
make_test_cmd({'a' => 'b'}).should match(/this is the prefix/)
|
|
14
|
+
expect(rspec_autotest.make_test_cmd({'a' => 'b'})).to match(/this is the prefix/)
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
describe "commands" do
|
|
@@ -28,37 +27,43 @@ describe Autotest::Rspec2 do
|
|
|
28
27
|
@to_test = files.map { |f| File.expand_path(f) }.join ' '
|
|
29
28
|
end
|
|
30
29
|
|
|
30
|
+
it "uses double quotes for windows compatibility" do
|
|
31
|
+
command = rspec_autotest.make_test_cmd(@files_to_test)
|
|
32
|
+
expect(command).to include('"')
|
|
33
|
+
expect(command).not_to include("'")
|
|
34
|
+
end
|
|
35
|
+
|
|
31
36
|
it "makes the appropriate test command" do
|
|
32
37
|
actual_command = rspec_autotest.make_test_cmd(@files_to_test)
|
|
33
|
-
expected_command = /#{ruby_cmd}.*
|
|
38
|
+
expected_command = /#{ruby_cmd}.*"#{spec_cmd}" (.*)/
|
|
34
39
|
|
|
35
|
-
actual_command.
|
|
40
|
+
expect(actual_command).to match(expected_command)
|
|
36
41
|
|
|
37
42
|
actual_command =~ expected_command
|
|
38
|
-
$1.
|
|
39
|
-
$1.
|
|
43
|
+
expect($1).to match /#{File.expand_path('file_one')}/
|
|
44
|
+
expect($1).to match /#{File.expand_path('file_two')}/
|
|
40
45
|
end
|
|
41
46
|
|
|
42
47
|
it "returns a blank command for no files" do
|
|
43
|
-
rspec_autotest.make_test_cmd({}).
|
|
48
|
+
expect(rspec_autotest.make_test_cmd({})).to eq('')
|
|
44
49
|
end
|
|
45
50
|
|
|
46
51
|
it "quotes the paths of files to test" do
|
|
47
52
|
cmd = rspec_autotest.make_test_cmd(@files_to_test)
|
|
48
53
|
@files_to_test.keys.each do |file_to_test|
|
|
49
|
-
cmd.
|
|
54
|
+
expect(cmd).to match(/"#{File.expand_path(file_to_test)}"/)
|
|
50
55
|
end
|
|
51
56
|
end
|
|
52
57
|
|
|
53
58
|
it "quotes the path of the ruby executable" do
|
|
54
59
|
cmd = rspec_autotest.make_test_cmd(@files_to_test)
|
|
55
|
-
cmd.
|
|
60
|
+
expect(cmd).to match(%r("/path/to/ruby"))
|
|
56
61
|
end
|
|
57
62
|
|
|
58
63
|
it "gives '--tty' to #{Autotest::Rspec2::RSPEC_EXECUTABLE}, not '--autotest'" do
|
|
59
64
|
cmd = rspec_autotest.make_test_cmd(@files_to_test)
|
|
60
|
-
cmd.
|
|
61
|
-
cmd.
|
|
65
|
+
expect(cmd).to match(' --tty ')
|
|
66
|
+
expect(cmd).not_to match(' --autotest ')
|
|
62
67
|
end
|
|
63
68
|
end
|
|
64
69
|
|
|
@@ -70,19 +75,19 @@ describe Autotest::Rspec2 do
|
|
|
70
75
|
end
|
|
71
76
|
|
|
72
77
|
it "finds the spec file for a given lib file" do
|
|
73
|
-
rspec_autotest.
|
|
78
|
+
expect(rspec_autotest).to map_specs([@spec_file]).to(@lib_file)
|
|
74
79
|
end
|
|
75
80
|
|
|
76
81
|
it "finds the spec file if given a spec file" do
|
|
77
|
-
rspec_autotest.
|
|
82
|
+
expect(rspec_autotest).to map_specs([@spec_file]).to(@spec_file)
|
|
78
83
|
end
|
|
79
84
|
|
|
80
85
|
it "ignores files in spec dir that aren't specs" do
|
|
81
|
-
rspec_autotest.
|
|
86
|
+
expect(rspec_autotest).to map_specs([]).to("spec/spec_helper.rb")
|
|
82
87
|
end
|
|
83
88
|
|
|
84
89
|
it "ignores untracked files (in @file)" do
|
|
85
|
-
rspec_autotest.
|
|
90
|
+
expect(rspec_autotest).to map_specs([]).to("lib/untracked_file")
|
|
86
91
|
end
|
|
87
92
|
end
|
|
88
93
|
|
|
@@ -91,12 +96,12 @@ describe Autotest::Rspec2 do
|
|
|
91
96
|
let(:spec_file) { "spec/autotest/some_spec.rb" }
|
|
92
97
|
|
|
93
98
|
it "returns no failures if no failures were given in the output" do
|
|
94
|
-
rspec_autotest.consolidate_failures([[]]).
|
|
99
|
+
expect(rspec_autotest.consolidate_failures([[]])).to eq({})
|
|
95
100
|
end
|
|
96
101
|
|
|
97
102
|
it "returns a hash with the spec filename => spec name for each failure or error" do
|
|
98
103
|
failures = [ [ "false should be false", spec_file ] ]
|
|
99
|
-
rspec_autotest.consolidate_failures(failures).
|
|
104
|
+
expect(rspec_autotest.consolidate_failures(failures)).to eq({
|
|
100
105
|
spec_file => ["false should be false"]
|
|
101
106
|
})
|
|
102
107
|
end
|
|
@@ -107,11 +112,11 @@ describe Autotest::Rspec2 do
|
|
|
107
112
|
end
|
|
108
113
|
|
|
109
114
|
it "excludes the subject file" do
|
|
110
|
-
rspec_autotest.consolidate_failures(failures).keys.
|
|
115
|
+
expect(rspec_autotest.consolidate_failures(failures).keys).not_to include(subject_file)
|
|
111
116
|
end
|
|
112
117
|
|
|
113
118
|
it "includes the spec file" do
|
|
114
|
-
rspec_autotest.consolidate_failures(failures).keys.
|
|
119
|
+
expect(rspec_autotest.consolidate_failures(failures).keys).to include(spec_file)
|
|
115
120
|
end
|
|
116
121
|
end
|
|
117
122
|
end
|
|
@@ -122,7 +127,7 @@ describe Autotest::Rspec2 do
|
|
|
122
127
|
['filename.rb', './filename.rb', File.expand_path('filename.rb')].each do |file|
|
|
123
128
|
@files_to_test[file] = []
|
|
124
129
|
end
|
|
125
|
-
rspec_autotest.normalize(@files_to_test).
|
|
130
|
+
expect(rspec_autotest.normalize(@files_to_test)).to have(1).file
|
|
126
131
|
end
|
|
127
132
|
end
|
|
128
133
|
end
|
|
@@ -87,12 +87,12 @@ describe 'command line', :ui do
|
|
|
87
87
|
RSpec.configuration.seed = srand && srand # reset seed in same process
|
|
88
88
|
run_command 'tmp/aruba/spec/order_spec.rb --order rand -f doc'
|
|
89
89
|
|
|
90
|
-
stdout.string.
|
|
90
|
+
expect(stdout.string).to match(/Randomized with seed \d+/)
|
|
91
91
|
|
|
92
|
-
top_level_groups {|first_run, second_run| first_run.
|
|
93
|
-
nested_groups {|first_run, second_run| first_run.
|
|
94
|
-
examples('group 1') {|first_run, second_run| first_run.
|
|
95
|
-
examples('group 1-1') {|first_run, second_run| first_run.
|
|
92
|
+
top_level_groups {|first_run, second_run| expect(first_run).to_not eq(second_run)}
|
|
93
|
+
nested_groups {|first_run, second_run| expect(first_run).to_not eq(second_run)}
|
|
94
|
+
examples('group 1') {|first_run, second_run| expect(first_run).to_not eq(second_run)}
|
|
95
|
+
examples('group 1-1') {|first_run, second_run| expect(first_run).to_not eq(second_run)}
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
@@ -100,12 +100,12 @@ describe 'command line', :ui do
|
|
|
100
100
|
it 'runs the examples and groups in the same order each time' do
|
|
101
101
|
2.times { run_command 'tmp/aruba/spec/order_spec.rb --order rand:123 -f doc' }
|
|
102
102
|
|
|
103
|
-
stdout.string.
|
|
103
|
+
expect(stdout.string).to match(/Randomized with seed 123/)
|
|
104
104
|
|
|
105
|
-
top_level_groups {|first_run, second_run| first_run.
|
|
106
|
-
nested_groups {|first_run, second_run| first_run.
|
|
107
|
-
examples('group 1') {|first_run, second_run| first_run.
|
|
108
|
-
examples('group 1-1') {|first_run, second_run| first_run.
|
|
105
|
+
top_level_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
106
|
+
nested_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
107
|
+
examples('group 1') {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
108
|
+
examples('group 1-1') {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
111
|
|
|
@@ -113,20 +113,20 @@ describe 'command line', :ui do
|
|
|
113
113
|
it "forces '--order rand' and runs the examples and groups in the same order each time" do
|
|
114
114
|
2.times { run_command 'tmp/aruba/spec/order_spec.rb --seed 123 -f doc' }
|
|
115
115
|
|
|
116
|
-
stdout.string.
|
|
116
|
+
expect(stdout.string).to match(/Randomized with seed \d+/)
|
|
117
117
|
|
|
118
|
-
top_level_groups {|first_run, second_run| first_run.
|
|
119
|
-
nested_groups {|first_run, second_run| first_run.
|
|
120
|
-
examples('group 1') {|first_run, second_run| first_run.
|
|
121
|
-
examples('group 1-1') {|first_run, second_run| first_run.
|
|
118
|
+
top_level_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
119
|
+
nested_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
120
|
+
examples('group 1') {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
121
|
+
examples('group 1-1') {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
it "runs examples in the same order, regardless of the order in which files are given" do
|
|
125
125
|
run_command 'tmp/aruba/spec/simple_spec.rb tmp/aruba/spec/simple_spec2.rb --seed 1337 -f doc'
|
|
126
126
|
run_command 'tmp/aruba/spec/simple_spec2.rb tmp/aruba/spec/simple_spec.rb --seed 1337 -f doc'
|
|
127
127
|
|
|
128
|
-
top_level_groups {|first_run, second_run| first_run.
|
|
129
|
-
nested_groups {|first_run, second_run| first_run.
|
|
128
|
+
top_level_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
129
|
+
nested_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
|
|
130
130
|
end
|
|
131
131
|
end
|
|
132
132
|
|
|
@@ -136,9 +136,9 @@ describe 'command line', :ui do
|
|
|
136
136
|
|
|
137
137
|
run_command 'tmp/aruba/spec/order_spec.rb --order default -f doc'
|
|
138
138
|
|
|
139
|
-
stdout.string.
|
|
139
|
+
expect(stdout.string).not_to match(/Randomized/)
|
|
140
140
|
|
|
141
|
-
stdout.string.
|
|
141
|
+
expect(stdout.string).to match(
|
|
142
142
|
/group 1.*group 1 example 1.*group 1 example 2.*group 1-1.*group 1-2.*group 2.*/m
|
|
143
143
|
)
|
|
144
144
|
end
|
|
@@ -169,10 +169,10 @@ describe 'command line', :ui do
|
|
|
169
169
|
it 'orders the groups and examples by the provided strategy' do
|
|
170
170
|
run_command 'tmp/aruba/spec/custom_order_spec.rb -f doc'
|
|
171
171
|
|
|
172
|
-
top_level_groups { |groups| groups.flatten.
|
|
172
|
+
top_level_groups { |groups| expect(groups.flatten).to eq(['group A', 'group B']) }
|
|
173
173
|
examples('group B') do |examples|
|
|
174
174
|
letters = examples.flatten.map { |e| e[/(.)\z/, 1] }
|
|
175
|
-
letters.
|
|
175
|
+
expect(letters).to eq(['A', 'B', 'C', 'D'])
|
|
176
176
|
end
|
|
177
177
|
end
|
|
178
178
|
end
|
|
@@ -27,13 +27,13 @@ module RSpec::Core
|
|
|
27
27
|
it "assigns ConfigurationOptions built from Array of options to @options" do
|
|
28
28
|
config_options = ConfigurationOptions.new(%w[--color])
|
|
29
29
|
command_line = CommandLine.new(%w[--color])
|
|
30
|
-
command_line.instance_eval { @options.options }.
|
|
30
|
+
expect(command_line.instance_eval { @options.options }).to eq(config_options.parse_options)
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
it "assigns submitted ConfigurationOptions to @options" do
|
|
34
34
|
config_options = ConfigurationOptions.new(%w[--color])
|
|
35
35
|
command_line = CommandLine.new(config_options)
|
|
36
|
-
command_line.instance_eval { @options }.
|
|
36
|
+
expect(command_line.instance_eval { @options }).to be(config_options)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
describe "#run" do
|
|
@@ -42,17 +42,17 @@ module RSpec::Core
|
|
|
42
42
|
|
|
43
43
|
it "returns 0 if spec passes" do
|
|
44
44
|
command_line = build_command_line passing_spec_filename
|
|
45
|
-
command_line.run(err, out).
|
|
45
|
+
expect(command_line.run(err, out)).to eq 0
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
it "returns 1 if spec fails" do
|
|
49
49
|
command_line = build_command_line failing_spec_filename
|
|
50
|
-
command_line.run(err, out).
|
|
50
|
+
expect(command_line.run(err, out)).to eq 1
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
it "returns 2 if spec fails and --failure-exit-code is 2" do
|
|
54
54
|
command_line = build_command_line failing_spec_filename, "--failure-exit-code", "2"
|
|
55
|
-
command_line.run(err, out).
|
|
55
|
+
expect(command_line.run(err, out)).to eq 2
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
@@ -91,7 +91,7 @@ module RSpec::Core
|
|
|
91
91
|
config.output_stream = output_file
|
|
92
92
|
command_line = build_command_line
|
|
93
93
|
command_line.run err, out
|
|
94
|
-
command_line.instance_eval { @configuration.output_stream }.
|
|
94
|
+
expect(command_line.instance_eval { @configuration.output_stream }).to eq output_file
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
97
|
|
|
@@ -13,6 +13,13 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
it "duplicates the arguments array" do
|
|
17
|
+
args = ['-e', 'some spec']
|
|
18
|
+
coo = RSpec::Core::ConfigurationOptions.new(args)
|
|
19
|
+
coo.parse_options
|
|
20
|
+
expect(args).to eq(['-e', 'some spec'])
|
|
21
|
+
end
|
|
22
|
+
|
|
16
23
|
describe "#configure" do
|
|
17
24
|
it "sends libs before requires" do
|
|
18
25
|
opts = config_options_object(*%w[--require a/path -I a/lib])
|
|
@@ -50,14 +57,14 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
|
50
57
|
opts = config_options_object(*%w[--tag awesome])
|
|
51
58
|
config = RSpec::Core::Configuration.new
|
|
52
59
|
opts.configure(config)
|
|
53
|
-
config.inclusion_filter.
|
|
60
|
+
expect(config.inclusion_filter).to have_key(:awesome)
|
|
54
61
|
end
|
|
55
62
|
|
|
56
63
|
it "merges the :exclusion_filter option with the default exclusion_filter" do
|
|
57
64
|
opts = config_options_object(*%w[--tag ~slow])
|
|
58
65
|
config = RSpec::Core::Configuration.new
|
|
59
66
|
opts.configure(config)
|
|
60
|
-
config.exclusion_filter.
|
|
67
|
+
expect(config.exclusion_filter).to have_key(:slow)
|
|
61
68
|
end
|
|
62
69
|
|
|
63
70
|
it "forces color_enabled" do
|
|
@@ -80,8 +87,8 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
|
80
87
|
opts = config_options_object(*[cli_option, cli_value].compact)
|
|
81
88
|
config = RSpec::Core::Configuration.new
|
|
82
89
|
config.should_receive(:force) do |pair|
|
|
83
|
-
pair.keys.first.
|
|
84
|
-
pair.values.first.
|
|
90
|
+
expect(pair.keys.first).to eq(config_key)
|
|
91
|
+
expect(pair.values.first).to eq(config_value)
|
|
85
92
|
end
|
|
86
93
|
opts.configure(config)
|
|
87
94
|
end
|
|
@@ -115,195 +122,203 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
|
115
122
|
|
|
116
123
|
describe "-c, --color, and --colour" do
|
|
117
124
|
it "sets :color => true" do
|
|
118
|
-
parse_options('-c').
|
|
119
|
-
parse_options('--color').
|
|
120
|
-
parse_options('--colour').
|
|
125
|
+
expect(parse_options('-c')).to include(:color => true)
|
|
126
|
+
expect(parse_options('--color')).to include(:color => true)
|
|
127
|
+
expect(parse_options('--colour')).to include(:color => true)
|
|
121
128
|
end
|
|
122
129
|
end
|
|
123
130
|
|
|
124
131
|
describe "--no-color" do
|
|
125
132
|
it "sets :color => false" do
|
|
126
|
-
parse_options('--no-color').
|
|
133
|
+
expect(parse_options('--no-color')).to include(:color => false)
|
|
127
134
|
end
|
|
128
135
|
|
|
129
136
|
it "overrides previous :color => true" do
|
|
130
|
-
parse_options('--color', '--no-color').
|
|
137
|
+
expect(parse_options('--color', '--no-color')).to include(:color => false)
|
|
131
138
|
end
|
|
132
139
|
|
|
133
140
|
it "gets overriden by a subsequent :color => true" do
|
|
134
|
-
parse_options('--no-color', '--color').
|
|
141
|
+
expect(parse_options('--no-color', '--color')).to include(:color => true)
|
|
135
142
|
end
|
|
136
143
|
end
|
|
137
144
|
|
|
138
145
|
describe "-I" do
|
|
139
146
|
example "adds to :libs" do
|
|
140
|
-
parse_options('-I', 'a_dir').
|
|
147
|
+
expect(parse_options('-I', 'a_dir')).to include(:libs => ['a_dir'])
|
|
141
148
|
end
|
|
142
149
|
example "can be used more than once" do
|
|
143
|
-
parse_options('-I', 'dir_1', '-I', 'dir_2').
|
|
150
|
+
expect(parse_options('-I', 'dir_1', '-I', 'dir_2')).to include(:libs => ['dir_1','dir_2'])
|
|
144
151
|
end
|
|
145
152
|
end
|
|
146
153
|
|
|
147
154
|
describe '--require' do
|
|
148
155
|
example "requires files" do
|
|
149
|
-
parse_options('--require', 'a/path').
|
|
156
|
+
expect(parse_options('--require', 'a/path')).to include(:requires => ['a/path'])
|
|
150
157
|
end
|
|
151
158
|
example "can be used more than once" do
|
|
152
|
-
parse_options('--require', 'path/1', '--require', 'path/2').
|
|
159
|
+
expect(parse_options('--require', 'path/1', '--require', 'path/2')).to include(:requires => ['path/1','path/2'])
|
|
153
160
|
end
|
|
154
161
|
end
|
|
155
162
|
|
|
156
163
|
describe "--format, -f" do
|
|
157
164
|
it "sets :formatter" do
|
|
158
165
|
[['--format', 'd'], ['-f', 'd'], '-fd'].each do |args|
|
|
159
|
-
parse_options(*args).
|
|
166
|
+
expect(parse_options(*args)).to include(:formatters => [['d']])
|
|
160
167
|
end
|
|
161
168
|
end
|
|
162
169
|
|
|
163
170
|
example "can accept a class name" do
|
|
164
|
-
parse_options('-fSome::Formatter::Class').
|
|
171
|
+
expect(parse_options('-fSome::Formatter::Class')).to include(:formatters => [['Some::Formatter::Class']])
|
|
165
172
|
end
|
|
166
173
|
end
|
|
167
174
|
|
|
168
175
|
describe "--profile, -p" do
|
|
169
|
-
it "sets :profile_examples
|
|
170
|
-
parse_options('-p').
|
|
171
|
-
parse_options('--profile').
|
|
176
|
+
it "sets :profile_examples" do
|
|
177
|
+
expect(parse_options('-p')).to include(:profile_examples => true)
|
|
178
|
+
expect(parse_options('--profile')).to include(:profile_examples => true)
|
|
179
|
+
expect(parse_options('-p', '4')).to include(:profile_examples => 4)
|
|
180
|
+
expect(parse_options('--profile', '3')).to include(:profile_examples => 3)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe "--no-profile" do
|
|
185
|
+
it "sets :profile_examples to false" do
|
|
186
|
+
expect(parse_options('--no-profile')).to include(:profile_examples => false)
|
|
172
187
|
end
|
|
173
188
|
end
|
|
174
189
|
|
|
175
190
|
describe '--line_number' do
|
|
176
191
|
it "sets :line_number" do
|
|
177
|
-
parse_options('-l','3').
|
|
178
|
-
parse_options('--line_number','3').
|
|
192
|
+
expect(parse_options('-l','3')).to include(:line_numbers => ['3'])
|
|
193
|
+
expect(parse_options('--line_number','3')).to include(:line_numbers => ['3'])
|
|
179
194
|
end
|
|
180
195
|
|
|
181
196
|
it "can be specified multiple times" do
|
|
182
|
-
parse_options('-l','3', '-l', '6').
|
|
183
|
-
parse_options('--line_number','3', '--line_number', '6').
|
|
197
|
+
expect(parse_options('-l','3', '-l', '6')).to include(:line_numbers => ['3', '6'])
|
|
198
|
+
expect(parse_options('--line_number','3', '--line_number', '6')).to include(:line_numbers => ['3', '6'])
|
|
184
199
|
end
|
|
185
200
|
end
|
|
186
201
|
|
|
187
202
|
describe "--example" do
|
|
188
203
|
it "sets :full_description" do
|
|
189
|
-
parse_options('--example','foo').
|
|
190
|
-
parse_options('-e','bar').
|
|
204
|
+
expect(parse_options('--example','foo')).to include(:full_description => [/foo/])
|
|
205
|
+
expect(parse_options('-e','bar')).to include(:full_description => [/bar/])
|
|
191
206
|
end
|
|
192
207
|
end
|
|
193
208
|
|
|
194
209
|
describe "--backtrace, -b" do
|
|
195
210
|
it "sets full_backtrace on config" do
|
|
196
|
-
parse_options("--backtrace").
|
|
197
|
-
parse_options("-b").
|
|
211
|
+
expect(parse_options("--backtrace")).to include(:full_backtrace => true)
|
|
212
|
+
expect(parse_options("-b")).to include(:full_backtrace => true)
|
|
198
213
|
end
|
|
199
214
|
end
|
|
200
215
|
|
|
201
216
|
describe "--debug, -d" do
|
|
202
217
|
it "sets :debug => true" do
|
|
203
|
-
parse_options("--debug").
|
|
204
|
-
parse_options("-d").
|
|
218
|
+
expect(parse_options("--debug")).to include(:debug => true)
|
|
219
|
+
expect(parse_options("-d")).to include(:debug => true)
|
|
205
220
|
end
|
|
206
221
|
end
|
|
207
222
|
|
|
208
223
|
describe "--fail-fast" do
|
|
209
224
|
it "defaults to false" do
|
|
210
|
-
parse_options[:fail_fast].
|
|
225
|
+
expect(parse_options[:fail_fast]).to be_false
|
|
211
226
|
end
|
|
212
227
|
|
|
213
228
|
it "sets fail_fast on config" do
|
|
214
|
-
parse_options("--fail-fast")[:fail_fast].
|
|
229
|
+
expect(parse_options("--fail-fast")[:fail_fast]).to be_true
|
|
215
230
|
end
|
|
216
231
|
end
|
|
217
232
|
|
|
218
233
|
describe "--failure-exit-code" do
|
|
219
234
|
it "sets :failure_exit_code" do
|
|
220
|
-
parse_options('--failure-exit-code', '0').
|
|
221
|
-
parse_options('--failure-exit-code', '1').
|
|
222
|
-
parse_options('--failure-exit-code', '2').
|
|
235
|
+
expect(parse_options('--failure-exit-code', '0')).to include(:failure_exit_code => 0)
|
|
236
|
+
expect(parse_options('--failure-exit-code', '1')).to include(:failure_exit_code => 1)
|
|
237
|
+
expect(parse_options('--failure-exit-code', '2')).to include(:failure_exit_code => 2)
|
|
223
238
|
end
|
|
224
239
|
|
|
225
240
|
it "overrides previous :failure_exit_code" do
|
|
226
|
-
parse_options('--failure-exit-code', '2', '--failure-exit-code', '3').
|
|
241
|
+
expect(parse_options('--failure-exit-code', '2', '--failure-exit-code', '3')).to include(:failure_exit_code => 3)
|
|
227
242
|
end
|
|
228
243
|
end
|
|
229
244
|
|
|
230
245
|
describe "--options" do
|
|
231
246
|
it "sets :custom_options_file" do
|
|
232
|
-
parse_options(*%w[-O my.opts]).
|
|
233
|
-
parse_options(*%w[--options my.opts]).
|
|
247
|
+
expect(parse_options(*%w[-O my.opts])).to include(:custom_options_file => "my.opts")
|
|
248
|
+
expect(parse_options(*%w[--options my.opts])).to include(:custom_options_file => "my.opts")
|
|
234
249
|
end
|
|
235
250
|
end
|
|
236
251
|
|
|
237
252
|
describe "--drb, -X" do
|
|
238
253
|
context "combined with --debug" do
|
|
239
254
|
it "turns off the debugger if --drb is specified first" do
|
|
240
|
-
config_options_object("--drb", "--debug").drb_argv.
|
|
241
|
-
config_options_object("--drb", "-d" ).drb_argv.
|
|
242
|
-
config_options_object("-X", "--debug").drb_argv.
|
|
243
|
-
config_options_object("-X", "-d" ).drb_argv.
|
|
255
|
+
expect(config_options_object("--drb", "--debug").drb_argv).not_to include("--debug")
|
|
256
|
+
expect(config_options_object("--drb", "-d" ).drb_argv).not_to include("--debug")
|
|
257
|
+
expect(config_options_object("-X", "--debug").drb_argv).not_to include("--debug")
|
|
258
|
+
expect(config_options_object("-X", "-d" ).drb_argv).not_to include("--debug")
|
|
244
259
|
end
|
|
245
260
|
|
|
246
261
|
it "turns off the debugger option if --drb is specified later" do
|
|
247
|
-
config_options_object("--debug", "--drb").drb_argv.
|
|
248
|
-
config_options_object("-d", "--drb").drb_argv.
|
|
249
|
-
config_options_object("--debug", "-X" ).drb_argv.
|
|
250
|
-
config_options_object("-d", "-X" ).drb_argv.
|
|
262
|
+
expect(config_options_object("--debug", "--drb").drb_argv).not_to include("--debug")
|
|
263
|
+
expect(config_options_object("-d", "--drb").drb_argv).not_to include("--debug")
|
|
264
|
+
expect(config_options_object("--debug", "-X" ).drb_argv).not_to include("--debug")
|
|
265
|
+
expect(config_options_object("-d", "-X" ).drb_argv).not_to include("--debug")
|
|
251
266
|
end
|
|
252
267
|
|
|
253
268
|
it "turns off the debugger option if --drb is specified in the options file" do
|
|
254
269
|
File.open("./.rspec", "w") {|f| f << "--drb"}
|
|
255
|
-
config_options_object("--debug").drb_argv.
|
|
256
|
-
config_options_object("-d" ).drb_argv.
|
|
270
|
+
expect(config_options_object("--debug").drb_argv).not_to include("--debug")
|
|
271
|
+
expect(config_options_object("-d" ).drb_argv).not_to include("--debug")
|
|
257
272
|
end
|
|
258
273
|
|
|
259
274
|
it "turns off the debugger option if --debug is specified in the options file" do
|
|
260
275
|
File.open("./.rspec", "w") {|f| f << "--debug"}
|
|
261
|
-
config_options_object("--drb").drb_argv.
|
|
262
|
-
config_options_object("-X" ).drb_argv.
|
|
276
|
+
expect(config_options_object("--drb").drb_argv).not_to include("--debug")
|
|
277
|
+
expect(config_options_object("-X" ).drb_argv).not_to include("--debug")
|
|
263
278
|
end
|
|
264
279
|
end
|
|
265
280
|
|
|
266
281
|
it "does not send --drb back to the parser after parsing options" do
|
|
267
|
-
config_options_object("--drb", "--color").drb_argv.
|
|
282
|
+
expect(config_options_object("--drb", "--color").drb_argv).not_to include("--drb")
|
|
268
283
|
end
|
|
269
284
|
|
|
270
285
|
end
|
|
271
286
|
|
|
272
287
|
describe "--no-drb" do
|
|
273
288
|
it "disables drb" do
|
|
274
|
-
parse_options("--no-drb").
|
|
289
|
+
expect(parse_options("--no-drb")).to include(:drb => false)
|
|
275
290
|
end
|
|
276
291
|
|
|
277
292
|
it "overrides a previous drb => true" do
|
|
278
|
-
parse_options("--drb", "--no-drb").
|
|
293
|
+
expect(parse_options("--drb", "--no-drb")).to include(:drb => false)
|
|
279
294
|
end
|
|
280
295
|
|
|
281
296
|
it "gets overriden by a subsquent drb => true" do
|
|
282
|
-
parse_options("--no-drb", "--drb").
|
|
297
|
+
expect(parse_options("--no-drb", "--drb")).to include(:drb => true)
|
|
283
298
|
end
|
|
284
299
|
end
|
|
285
300
|
|
|
286
301
|
|
|
287
302
|
describe "files_or_directories_to_run" do
|
|
288
303
|
it "parses files from '-c file.rb dir/file.rb'" do
|
|
289
|
-
parse_options("-c", "file.rb", "dir/file.rb").
|
|
304
|
+
expect(parse_options("-c", "file.rb", "dir/file.rb")).to include(
|
|
290
305
|
:files_or_directories_to_run => ["file.rb", "dir/file.rb"]
|
|
291
306
|
)
|
|
292
307
|
end
|
|
293
308
|
|
|
294
309
|
it "parses dir from 'dir'" do
|
|
295
|
-
parse_options("dir").
|
|
310
|
+
expect(parse_options("dir")).to include(:files_or_directories_to_run => ["dir"])
|
|
296
311
|
end
|
|
297
312
|
|
|
298
313
|
it "parses dir and files from 'spec/file1_spec.rb, spec/file2_spec.rb'" do
|
|
299
|
-
parse_options("dir", "spec/file1_spec.rb", "spec/file2_spec.rb").
|
|
314
|
+
expect(parse_options("dir", "spec/file1_spec.rb", "spec/file2_spec.rb")).to include(
|
|
300
315
|
:files_or_directories_to_run => ["dir", "spec/file1_spec.rb", "spec/file2_spec.rb"]
|
|
301
316
|
)
|
|
302
317
|
end
|
|
303
318
|
|
|
304
319
|
it "provides no files or directories if spec directory does not exist" do
|
|
305
320
|
FileTest.stub(:directory?).with("spec").and_return false
|
|
306
|
-
parse_options().
|
|
321
|
+
expect(parse_options()).to include(:files_or_directories_to_run => [])
|
|
307
322
|
end
|
|
308
323
|
end
|
|
309
324
|
|
|
@@ -319,8 +334,7 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
|
319
334
|
|
|
320
335
|
describe "#filter_manager" do
|
|
321
336
|
it "returns the same object as RSpec::configuration.filter_manager" do
|
|
322
|
-
config_options_object.filter_manager.
|
|
323
|
-
should be(RSpec::configuration.filter_manager)
|
|
337
|
+
expect(config_options_object.filter_manager).to be(RSpec::configuration.filter_manager)
|
|
324
338
|
end
|
|
325
339
|
end
|
|
326
340
|
|
|
@@ -331,37 +345,37 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
|
331
345
|
File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--color"}
|
|
332
346
|
with_env_vars 'SPEC_OPTS' => "--debug --example 'foo bar'" do
|
|
333
347
|
options = parse_options("--drb")
|
|
334
|
-
options[:color].
|
|
335
|
-
options[:line_numbers].
|
|
336
|
-
options[:debug].
|
|
337
|
-
options[:full_description].
|
|
338
|
-
options[:drb].
|
|
339
|
-
options[:formatters].
|
|
348
|
+
expect(options[:color]).to be_true
|
|
349
|
+
expect(options[:line_numbers]).to eq(["37"])
|
|
350
|
+
expect(options[:debug]).to be_true
|
|
351
|
+
expect(options[:full_description]).to eq([/foo\ bar/])
|
|
352
|
+
expect(options[:drb]).to be_true
|
|
353
|
+
expect(options[:formatters]).to eq([['global']])
|
|
340
354
|
end
|
|
341
355
|
end
|
|
342
356
|
|
|
343
357
|
it "prefers SPEC_OPTS over CLI" do
|
|
344
358
|
with_env_vars 'SPEC_OPTS' => "--format spec_opts" do
|
|
345
|
-
parse_options("--format", "cli")[:formatters].
|
|
359
|
+
expect(parse_options("--format", "cli")[:formatters]).to eq([['spec_opts']])
|
|
346
360
|
end
|
|
347
361
|
end
|
|
348
362
|
|
|
349
363
|
it "prefers CLI over file options" do
|
|
350
364
|
File.open("./.rspec", "w") {|f| f << "--format project"}
|
|
351
365
|
File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--format global"}
|
|
352
|
-
parse_options("--format", "cli")[:formatters].
|
|
366
|
+
expect(parse_options("--format", "cli")[:formatters]).to eq([['cli']])
|
|
353
367
|
end
|
|
354
368
|
|
|
355
369
|
it "prefers project file options over global file options" do
|
|
356
370
|
File.open("./.rspec", "w") {|f| f << "--format project"}
|
|
357
371
|
File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--format global"}
|
|
358
|
-
parse_options[:formatters].
|
|
372
|
+
expect(parse_options[:formatters]).to eq([['project']])
|
|
359
373
|
end
|
|
360
374
|
|
|
361
375
|
it "prefers local file options over project file options" do
|
|
362
376
|
File.open("./.rspec-local", "w") {|f| f << "--format local"}
|
|
363
377
|
File.open("./.rspec", "w") {|f| f << "--format global"}
|
|
364
|
-
parse_options[:formatters].
|
|
378
|
+
expect(parse_options[:formatters]).to eq([['local']])
|
|
365
379
|
end
|
|
366
380
|
|
|
367
381
|
context "with custom options file" do
|
|
@@ -370,14 +384,14 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
|
370
384
|
File.open(File.expand_path("~/.rspec"), "w") {|f| f << "--format global"}
|
|
371
385
|
File.open("./custom.opts", "w") {|f| f << "--color"}
|
|
372
386
|
options = parse_options("-O", "./custom.opts")
|
|
373
|
-
options[:format].
|
|
374
|
-
options[:color].
|
|
387
|
+
expect(options[:format]).to be_nil
|
|
388
|
+
expect(options[:color]).to be_true
|
|
375
389
|
end
|
|
376
390
|
|
|
377
391
|
it "parses -e 'full spec description'" do
|
|
378
392
|
File.open("./custom.opts", "w") {|f| f << "-e 'The quick brown fox jumps over the lazy dog'"}
|
|
379
393
|
options = parse_options("-O", "./custom.opts")
|
|
380
|
-
options[:full_description].
|
|
394
|
+
expect(options[:full_description]).to eq([/The\ quick\ brown\ fox\ jumps\ over\ the\ lazy\ dog/])
|
|
381
395
|
end
|
|
382
396
|
end
|
|
383
397
|
end
|