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
data/lib/rspec/core/version.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe 'command line', :ui do
|
3
|
+
RSpec.describe 'command line', :ui, :slow do
|
4
4
|
let(:stderr) { StringIO.new }
|
5
5
|
let(:stdout) { StringIO.new }
|
6
6
|
|
7
7
|
before :all do
|
8
8
|
write_file 'spec/simple_spec.rb', """
|
9
|
-
describe 'group 1' do
|
9
|
+
RSpec.describe 'group 1' do
|
10
10
|
specify('group 1 example 1') {}
|
11
11
|
specify('group 1 example 2') {}
|
12
12
|
specify('group 1 example 3') {}
|
@@ -19,7 +19,7 @@ describe 'command line', :ui do
|
|
19
19
|
"""
|
20
20
|
|
21
21
|
write_file 'spec/simple_spec2.rb', """
|
22
|
-
describe 'group 2' do
|
22
|
+
RSpec.describe 'group 2' do
|
23
23
|
specify('group 2 example 1') {}
|
24
24
|
specify('group 2 example 2') {}
|
25
25
|
specify('group 2 example 3') {}
|
@@ -32,7 +32,7 @@ describe 'command line', :ui do
|
|
32
32
|
"""
|
33
33
|
|
34
34
|
write_file 'spec/order_spec.rb', """
|
35
|
-
describe 'group 1' do
|
35
|
+
RSpec.describe 'group 1' do
|
36
36
|
specify('group 1 example 1') {}
|
37
37
|
specify('group 1 example 2') {}
|
38
38
|
specify('group 1 example 3') {}
|
@@ -68,15 +68,15 @@ describe 'command line', :ui do
|
|
68
68
|
describe('group 1-10') { specify('example') {} }
|
69
69
|
end
|
70
70
|
|
71
|
-
describe('group 2') { specify('example') {} }
|
72
|
-
describe('group 3') { specify('example') {} }
|
73
|
-
describe('group 4') { specify('example') {} }
|
74
|
-
describe('group 5') { specify('example') {} }
|
75
|
-
describe('group 6') { specify('example') {} }
|
76
|
-
describe('group 7') { specify('example') {} }
|
77
|
-
describe('group 8') { specify('example') {} }
|
78
|
-
describe('group 9') { specify('example') {} }
|
79
|
-
describe('group 10') { specify('example') {} }
|
71
|
+
RSpec.describe('group 2') { specify('example') {} }
|
72
|
+
RSpec.describe('group 3') { specify('example') {} }
|
73
|
+
RSpec.describe('group 4') { specify('example') {} }
|
74
|
+
RSpec.describe('group 5') { specify('example') {} }
|
75
|
+
RSpec.describe('group 6') { specify('example') {} }
|
76
|
+
RSpec.describe('group 7') { specify('example') {} }
|
77
|
+
RSpec.describe('group 8') { specify('example') {} }
|
78
|
+
RSpec.describe('group 9') { specify('example') {} }
|
79
|
+
RSpec.describe('group 10') { specify('example') {} }
|
80
80
|
"""
|
81
81
|
end
|
82
82
|
|
@@ -158,14 +158,14 @@ describe 'command line', :ui do
|
|
158
158
|
end
|
159
159
|
end
|
160
160
|
|
161
|
-
describe 'group B' do
|
161
|
+
RSpec.describe 'group B' do
|
162
162
|
specify('group B example D') {}
|
163
163
|
specify('group B example B') {}
|
164
164
|
specify('group B example A') {}
|
165
165
|
specify('group B example C') {}
|
166
166
|
end
|
167
167
|
|
168
|
-
describe 'group A' do
|
168
|
+
RSpec.describe 'group A' do
|
169
169
|
specify('group A example 1') {}
|
170
170
|
end
|
171
171
|
"""
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
module RSpec::Core
|
4
|
-
describe BacktraceFormatter do
|
4
|
+
RSpec.describe BacktraceFormatter do
|
5
5
|
def make_backtrace_formatter(exclusion_patterns=nil, inclusion_patterns=nil)
|
6
6
|
BacktraceFormatter.new.tap do |bc|
|
7
7
|
bc.exclusion_patterns = exclusion_patterns if exclusion_patterns
|
@@ -93,6 +93,20 @@ module RSpec::Core
|
|
93
93
|
expect(BacktraceFormatter.new.format_backtrace(backtrace).drop(4).join).to match(/Showing full backtrace/)
|
94
94
|
end
|
95
95
|
end
|
96
|
+
|
97
|
+
context "when rspec is installed in the current working directory" do
|
98
|
+
it "excludes lines from rspec libs by default", :unless => RSpec.windows_os? do
|
99
|
+
backtrace = [
|
100
|
+
"#{Dir.getwd}/.bundle/path/to/rspec-expectations/lib/rspec/expectations/foo.rb:37",
|
101
|
+
"#{Dir.getwd}/.bundle/path/to/rspec-expectations/lib/rspec/matchers/foo.rb:37",
|
102
|
+
"#{Dir.getwd}/my_spec.rb:5",
|
103
|
+
"#{Dir.getwd}/.bundle/path/to/rspec-mocks/lib/rspec/mocks/foo.rb:37",
|
104
|
+
"#{Dir.getwd}/.bundle/path/to/rspec-core/lib/rspec/core/foo.rb:37"
|
105
|
+
]
|
106
|
+
|
107
|
+
expect(BacktraceFormatter.new.format_backtrace(backtrace)).to eq(["./my_spec.rb:5"])
|
108
|
+
end
|
109
|
+
end
|
96
110
|
end
|
97
111
|
|
98
112
|
describe "#full_backtrace=true" do
|
@@ -3,25 +3,28 @@ require "stringio"
|
|
3
3
|
require 'tmpdir'
|
4
4
|
|
5
5
|
module RSpec::Core
|
6
|
-
describe CommandLine do
|
6
|
+
RSpec.describe CommandLine do
|
7
7
|
|
8
8
|
let(:out) { StringIO.new }
|
9
9
|
let(:err) { StringIO.new }
|
10
10
|
let(:config) { RSpec::configuration }
|
11
11
|
let(:world) { RSpec::world }
|
12
12
|
|
13
|
-
before
|
13
|
+
before do
|
14
|
+
allow(config.hooks).to receive(:run)
|
15
|
+
end
|
14
16
|
|
15
17
|
it "configures streams before command line options" do
|
18
|
+
allow(RSpec).to receive(:deprecate) # remove this and should_receive when ordered
|
16
19
|
stdout = StringIO.new
|
17
|
-
config.
|
18
|
-
config.
|
20
|
+
allow(config).to receive(:load_spec_files)
|
21
|
+
allow(config).to receive(:reporter).and_return(double.as_null_object)
|
19
22
|
config.output_stream = $stdout
|
20
23
|
|
21
24
|
# this is necessary to ensure that color works correctly on windows
|
22
|
-
config.
|
23
|
-
config.
|
24
|
-
config.
|
25
|
+
expect(config).to receive(:error_stream=).ordered
|
26
|
+
expect(config).to receive(:output_stream=).ordered
|
27
|
+
expect(config).to receive(:force).at_least(:once).ordered
|
25
28
|
|
26
29
|
command_line = build_command_line
|
27
30
|
command_line.run err, stdout
|
@@ -30,7 +33,7 @@ module RSpec::Core
|
|
30
33
|
it "assigns ConfigurationOptions built from Array of options to @options" do
|
31
34
|
config_options = ConfigurationOptions.new(%w[--color])
|
32
35
|
command_line = CommandLine.new(%w[--color])
|
33
|
-
expect(command_line.instance_eval { @options.options }).to eq(config_options.
|
36
|
+
expect(command_line.instance_eval { @options.options }).to eq(config_options.options)
|
34
37
|
end
|
35
38
|
|
36
39
|
it "assigns submitted ConfigurationOptions to @options" do
|
@@ -60,23 +63,23 @@ module RSpec::Core
|
|
60
63
|
end
|
61
64
|
|
62
65
|
context "running hooks" do
|
63
|
-
before { config.
|
66
|
+
before { allow(config).to receive :load_spec_files }
|
64
67
|
|
65
68
|
it "runs before suite hooks" do
|
66
|
-
config.
|
69
|
+
expect(config.hooks).to receive(:run).with(:before, :suite)
|
67
70
|
command_line = build_command_line
|
68
71
|
command_line.run err, out
|
69
72
|
end
|
70
73
|
|
71
74
|
it "runs after suite hooks" do
|
72
|
-
config.
|
75
|
+
expect(config.hooks).to receive(:run).with(:after, :suite)
|
73
76
|
command_line = build_command_line
|
74
77
|
command_line.run err, out
|
75
78
|
end
|
76
79
|
|
77
80
|
it "runs after suite hooks even after an error" do
|
78
|
-
config.
|
79
|
-
config.
|
81
|
+
expect(config.hooks).to receive(:run).with(:before, :suite).and_raise "this error"
|
82
|
+
expect(config.hooks).to receive(:run).with(:after , :suite)
|
80
83
|
expect do
|
81
84
|
command_line = build_command_line
|
82
85
|
command_line.run err, out
|
@@ -86,7 +89,7 @@ module RSpec::Core
|
|
86
89
|
end
|
87
90
|
|
88
91
|
describe "#run with custom output" do
|
89
|
-
before { config.
|
92
|
+
before { allow(config).to receive_messages :files_to_run => [] }
|
90
93
|
|
91
94
|
let(:output_file) { File.new("#{Dir.tmpdir}/command_line_spec_output.txt", 'w') }
|
92
95
|
|
@@ -103,9 +106,7 @@ module RSpec::Core
|
|
103
106
|
end
|
104
107
|
|
105
108
|
def build_config_options *args
|
106
|
-
|
107
|
-
options.parse_options
|
108
|
-
options
|
109
|
+
ConfigurationOptions.new args
|
109
110
|
end
|
110
111
|
end
|
111
112
|
end
|
@@ -2,74 +2,92 @@ require 'spec_helper'
|
|
2
2
|
require 'ostruct'
|
3
3
|
require 'rspec/core/drb_options'
|
4
4
|
|
5
|
-
describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolated_home => true do
|
5
|
+
RSpec.describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolated_home => true do
|
6
6
|
include ConfigOptionsHelper
|
7
7
|
|
8
8
|
it "warns when HOME env var is not set", :unless => (RUBY_PLATFORM == 'java') do
|
9
9
|
without_env_vars 'HOME' do
|
10
10
|
expect_warning_with_call_site(__FILE__, __LINE__ + 1)
|
11
|
-
RSpec::Core::ConfigurationOptions.new([]).
|
11
|
+
RSpec::Core::ConfigurationOptions.new([]).options
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
15
|
+
it "does not mutate the provided args array" do
|
16
16
|
args = ['-e', 'some spec']
|
17
|
-
|
18
|
-
coo.parse_options
|
17
|
+
RSpec::Core::ConfigurationOptions.new(args).options
|
19
18
|
expect(args).to eq(['-e', 'some spec'])
|
20
19
|
end
|
21
20
|
|
22
21
|
describe "#configure" do
|
22
|
+
let(:config) { RSpec::Core::Configuration.new }
|
23
|
+
|
23
24
|
it "sends libs before requires" do
|
24
25
|
opts = config_options_object(*%w[--require a/path -I a/lib])
|
25
26
|
config = double("config").as_null_object
|
26
|
-
config.
|
27
|
-
config.
|
27
|
+
expect(config).to receive(:libs=).ordered
|
28
|
+
expect(config).to receive(:requires=).ordered
|
28
29
|
opts.configure(config)
|
29
30
|
end
|
30
31
|
|
31
|
-
it "
|
32
|
+
it "loads requires before loading specs" do
|
32
33
|
opts = config_options_object(*%w[-rspec_helper])
|
33
|
-
config =
|
34
|
-
expect(config).to receive(:
|
35
|
-
expect(config).to receive(:
|
34
|
+
config = RSpec::Core::Configuration.new
|
35
|
+
expect(config).to receive(:requires=).ordered
|
36
|
+
expect(config).to receive(:get_files_to_run).ordered
|
36
37
|
opts.configure(config)
|
38
|
+
config.files_to_run
|
37
39
|
end
|
38
40
|
|
39
41
|
it "sets up load path and requires before formatter" do
|
40
42
|
opts = config_options_object(*%w[--require a/path -f a/formatter])
|
41
43
|
config = double("config").as_null_object
|
42
|
-
config.
|
43
|
-
config.
|
44
|
+
expect(config).to receive(:requires=).ordered
|
45
|
+
expect(config).to receive(:add_formatter).ordered
|
44
46
|
opts.configure(config)
|
45
47
|
end
|
46
48
|
|
47
|
-
it "
|
49
|
+
it "sets default_path before loading specs" do
|
48
50
|
opts = config_options_object(*%w[--default_path spec])
|
49
|
-
config =
|
50
|
-
config.
|
51
|
-
config.
|
51
|
+
config = RSpec::Core::Configuration.new
|
52
|
+
expect(config).to receive(:force).with(:default_path => 'spec').ordered
|
53
|
+
expect(config).to receive(:get_files_to_run).ordered
|
54
|
+
opts.configure(config)
|
55
|
+
config.files_to_run
|
56
|
+
end
|
57
|
+
|
58
|
+
it "sets `files_or_directories_to_run` before `requires` so users can check `files_to_run` in a spec_helper loaded by `--require`" do
|
59
|
+
opts = config_options_object(*%w[--require spec_helper])
|
60
|
+
config = RSpec::Core::Configuration.new
|
61
|
+
expect(config).to receive(:files_or_directories_to_run=).ordered
|
62
|
+
expect(config).to receive(:requires=).ordered
|
63
|
+
opts.configure(config)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "sets default_path before `files_or_directories_to_run` since it relies on it" do
|
67
|
+
opts = config_options_object(*%w[--default_path spec])
|
68
|
+
config = RSpec::Core::Configuration.new
|
69
|
+
expect(config).to receive(:force).with(:default_path => 'spec').ordered
|
70
|
+
expect(config).to receive(:files_or_directories_to_run=).ordered
|
52
71
|
opts.configure(config)
|
53
72
|
end
|
54
73
|
|
55
|
-
it "
|
74
|
+
it "sets pattern before loading specs" do
|
56
75
|
opts = config_options_object(*%w[--pattern **/*.spec])
|
57
|
-
config =
|
58
|
-
config.
|
59
|
-
config.
|
76
|
+
config = RSpec::Core::Configuration.new
|
77
|
+
expect(config).to receive(:force).with(:pattern => '**/*.spec').ordered
|
78
|
+
expect(config).to receive(:get_files_to_run).ordered
|
60
79
|
opts.configure(config)
|
80
|
+
config.files_to_run
|
61
81
|
end
|
62
82
|
|
63
83
|
it "assigns inclusion_filter" do
|
64
84
|
opts = config_options_object(*%w[--tag awesome])
|
65
|
-
config = RSpec::Core::Configuration.new
|
66
85
|
opts.configure(config)
|
67
86
|
expect(config.inclusion_filter).to have_key(:awesome)
|
68
87
|
end
|
69
88
|
|
70
89
|
it "merges the :exclusion_filter option with the default exclusion_filter" do
|
71
90
|
opts = config_options_object(*%w[--tag ~slow])
|
72
|
-
config = RSpec::Core::Configuration.new
|
73
91
|
opts.configure(config)
|
74
92
|
expect(config.exclusion_filter).to have_key(:slow)
|
75
93
|
end
|
@@ -77,7 +95,7 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
77
95
|
it "forces color_enabled" do
|
78
96
|
opts = config_options_object(*%w[--color])
|
79
97
|
config = RSpec::Core::Configuration.new
|
80
|
-
config.
|
98
|
+
expect(config).to receive(:force).with(:color => true)
|
81
99
|
opts.configure(config)
|
82
100
|
end
|
83
101
|
|
@@ -93,7 +111,7 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
93
111
|
it "forces #{config_key}" do
|
94
112
|
opts = config_options_object(cli_option, cli_value)
|
95
113
|
config = RSpec::Core::Configuration.new
|
96
|
-
config.
|
114
|
+
expect(config).to receive(:force) do |pair|
|
97
115
|
expect(pair.keys.first).to eq(config_key)
|
98
116
|
expect(pair.values.first).to eq(config_value)
|
99
117
|
end
|
@@ -104,9 +122,8 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
104
122
|
it "merges --require specified by multiple configuration sources" do
|
105
123
|
with_env_vars 'SPEC_OPTS' => "--require file_from_env" do
|
106
124
|
opts = config_options_object(*%w[--require file_from_opts])
|
107
|
-
config
|
108
|
-
config.
|
109
|
-
config.should_receive(:require).with("file_from_env")
|
125
|
+
expect(config).to receive(:require).with("file_from_opts")
|
126
|
+
expect(config).to receive(:require).with("file_from_env")
|
110
127
|
opts.configure(config)
|
111
128
|
end
|
112
129
|
end
|
@@ -114,8 +131,7 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
114
131
|
it "merges --I specified by multiple configuration sources" do
|
115
132
|
with_env_vars 'SPEC_OPTS' => "-I dir_from_env" do
|
116
133
|
opts = config_options_object(*%w[-I dir_from_opts])
|
117
|
-
config =
|
118
|
-
config.should_receive(:libs=).with(["dir_from_opts", "dir_from_env"])
|
134
|
+
expect(config).to receive(:libs=).with(["dir_from_opts", "dir_from_env"])
|
119
135
|
opts.configure(config)
|
120
136
|
end
|
121
137
|
end
|
@@ -295,19 +311,26 @@ describe RSpec::Core::ConfigurationOptions, :isolated_directory => true, :isolat
|
|
295
311
|
)
|
296
312
|
end
|
297
313
|
|
314
|
+
it "parses file names that look like options line-number and default-path" do
|
315
|
+
expect(parse_options("spec/default_path_spec.rb", "spec/line_number_spec.rb")).to include(
|
316
|
+
:files_or_directories_to_run => ["spec/default_path_spec.rb", "spec/line_number_spec.rb"]
|
317
|
+
)
|
318
|
+
end
|
319
|
+
|
298
320
|
it "provides no files or directories if spec directory does not exist" do
|
299
|
-
FileTest.
|
321
|
+
allow(FileTest).to receive(:directory?).with("spec").and_return false
|
300
322
|
expect(parse_options()).to include(:files_or_directories_to_run => [])
|
301
323
|
end
|
302
324
|
end
|
303
325
|
|
304
326
|
describe "default_path" do
|
305
327
|
it "gets set before files_or_directories_to_run" do
|
306
|
-
config =
|
307
|
-
config.
|
308
|
-
config.
|
328
|
+
config = RSpec::Core::Configuration.new
|
329
|
+
expect(config).to receive(:force).with(:default_path => 'foo').ordered
|
330
|
+
expect(config).to receive(:get_files_to_run).ordered
|
309
331
|
opts = config_options_object("--default_path", "foo")
|
310
332
|
opts.configure(config)
|
333
|
+
config.files_to_run
|
311
334
|
end
|
312
335
|
end
|
313
336
|
|
@@ -3,19 +3,10 @@ require 'tmpdir'
|
|
3
3
|
|
4
4
|
module RSpec::Core
|
5
5
|
|
6
|
-
describe Configuration do
|
6
|
+
RSpec.describe Configuration do
|
7
7
|
|
8
8
|
let(:config) { Configuration.new }
|
9
9
|
|
10
|
-
describe "RSpec.configuration with a block" do
|
11
|
-
before { RSpec.stub(:warn_deprecation) }
|
12
|
-
|
13
|
-
it "is deprecated" do
|
14
|
-
RSpec.should_receive(:warn_deprecation)
|
15
|
-
RSpec.configuration {}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
10
|
describe '#deprecation_stream' do
|
20
11
|
it 'defaults to standard error' do
|
21
12
|
expect($rspec_core_without_stderr_monkey_patch.deprecation_stream).to eq STDERR
|
@@ -62,7 +53,7 @@ module RSpec::Core
|
|
62
53
|
end
|
63
54
|
end
|
64
55
|
|
65
|
-
describe "#
|
56
|
+
describe "#requires=" do
|
66
57
|
include_context "isolate load path mutation"
|
67
58
|
|
68
59
|
def absolute_path_to(dir)
|
@@ -74,7 +65,7 @@ module RSpec::Core
|
|
74
65
|
$LOAD_PATH.delete(lib_dir)
|
75
66
|
|
76
67
|
expect($LOAD_PATH).not_to include(lib_dir)
|
77
|
-
config.
|
68
|
+
config.requires = []
|
78
69
|
expect($LOAD_PATH).to include(lib_dir)
|
79
70
|
end
|
80
71
|
|
@@ -83,20 +74,20 @@ module RSpec::Core
|
|
83
74
|
foo_dir = absolute_path_to("features")
|
84
75
|
|
85
76
|
expect($LOAD_PATH).not_to include(foo_dir)
|
86
|
-
config.
|
77
|
+
config.requires = []
|
87
78
|
expect($LOAD_PATH).to include(foo_dir)
|
88
79
|
end
|
89
80
|
|
90
81
|
it 'stores the required files' do
|
91
|
-
config.
|
92
|
-
config.
|
82
|
+
expect(config).to receive(:require).with('a/path')
|
83
|
+
config.requires = ['a/path']
|
93
84
|
expect(config.requires).to eq ['a/path']
|
94
85
|
end
|
95
86
|
|
96
87
|
context "when `default_path` refers to a file rather than a directory" do
|
97
88
|
it 'does not add it to the load path' do
|
98
89
|
config.default_path = 'Rakefile'
|
99
|
-
config.
|
90
|
+
config.requires = []
|
100
91
|
expect($LOAD_PATH).not_to include(match(/Rakefile/))
|
101
92
|
end
|
102
93
|
end
|
@@ -105,27 +96,27 @@ module RSpec::Core
|
|
105
96
|
describe "#load_spec_files" do
|
106
97
|
it "loads files using load" do
|
107
98
|
config.files_to_run = ["foo.bar", "blah_spec.rb"]
|
108
|
-
config.
|
99
|
+
expect(config).to receive(:load).twice
|
109
100
|
config.load_spec_files
|
110
101
|
end
|
111
102
|
|
112
103
|
it "loads each file once, even if duplicated in list" do
|
113
104
|
config.files_to_run = ["a_spec.rb", "a_spec.rb"]
|
114
|
-
config.
|
105
|
+
expect(config).to receive(:load).once
|
115
106
|
config.load_spec_files
|
116
107
|
end
|
117
108
|
end
|
118
109
|
|
119
110
|
describe "#mock_framework" do
|
120
111
|
it "defaults to :rspec" do
|
121
|
-
config.
|
112
|
+
expect(config).to receive(:require).with('rspec/core/mocking_adapters/rspec')
|
122
113
|
config.mock_framework
|
123
114
|
end
|
124
115
|
end
|
125
116
|
|
126
117
|
describe "#mock_framework="do
|
127
118
|
it "delegates to mock_with" do
|
128
|
-
config.
|
119
|
+
expect(config).to receive(:mock_with).with(:rspec)
|
129
120
|
config.mock_framework = :rspec
|
130
121
|
end
|
131
122
|
end
|
@@ -134,7 +125,7 @@ module RSpec::Core
|
|
134
125
|
it "yields a config object if the framework_module supports it" do
|
135
126
|
custom_config = Struct.new(:custom_setting).new
|
136
127
|
mod = Module.new
|
137
|
-
mod.
|
128
|
+
allow(mod).to receive_messages(:configuration => custom_config)
|
138
129
|
|
139
130
|
config.send m, mod do |mod_config|
|
140
131
|
mod_config.custom_setting = true
|
@@ -154,23 +145,14 @@ module RSpec::Core
|
|
154
145
|
end
|
155
146
|
|
156
147
|
describe "#mock_with" do
|
157
|
-
before { config.
|
148
|
+
before { allow(config).to receive(:require) }
|
158
149
|
|
159
150
|
it_behaves_like "a configurable framework adapter", :mock_with
|
160
151
|
|
161
|
-
[:rspec, :mocha, :rr, :flexmock].each do |framework|
|
162
|
-
context "with #{framework}" do
|
163
|
-
it "requires the adapter for #{framework}" do
|
164
|
-
config.should_receive(:require).with("rspec/core/mocking/with_#{framework}")
|
165
|
-
config.mock_with framework
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
152
|
it "allows rspec-mocks to be configured with a provided block" do
|
171
153
|
mod = Module.new
|
172
154
|
|
173
|
-
RSpec::Mocks.configuration.
|
155
|
+
expect(RSpec::Mocks.configuration).to receive(:add_stub_and_should_receive_to).with(mod)
|
174
156
|
|
175
157
|
config.mock_with :rspec do |c|
|
176
158
|
c.add_stub_and_should_receive_to mod
|
@@ -185,14 +167,33 @@ module RSpec::Core
|
|
185
167
|
end
|
186
168
|
end
|
187
169
|
|
188
|
-
it
|
189
|
-
config.
|
190
|
-
|
170
|
+
it 'uses the named adapter' do
|
171
|
+
expect(config).to receive(:require).with("rspec/core/mocking_adapters/mocha")
|
172
|
+
stub_const("RSpec::Core::MockingAdapters::Mocha", Module.new)
|
173
|
+
config.mock_with :mocha
|
174
|
+
end
|
175
|
+
|
176
|
+
it "uses the null adapter when given :nothing" do
|
177
|
+
expect(config).to receive(:require).with('rspec/core/mocking_adapters/null').and_call_original
|
178
|
+
config.mock_with :nothing
|
179
|
+
end
|
180
|
+
|
181
|
+
it "raises an error when given an unknown key" do
|
182
|
+
expect {
|
183
|
+
config.mock_with :crazy_new_mocking_framework_ive_not_yet_heard_of
|
184
|
+
}.to raise_error(ArgumentError, /unknown mocking framework/i)
|
185
|
+
end
|
186
|
+
|
187
|
+
it "raises an error when given another type of object" do
|
188
|
+
expect {
|
189
|
+
config.mock_with Object.new
|
190
|
+
}.to raise_error(ArgumentError, /unknown mocking framework/i)
|
191
191
|
end
|
192
192
|
|
193
193
|
context 'when there are already some example groups defined' do
|
194
194
|
it 'raises an error since this setting must be applied before any groups are defined' do
|
195
|
-
RSpec.world.
|
195
|
+
allow(RSpec.world).to receive(:example_groups).and_return([double.as_null_object])
|
196
|
+
stub_const("RSpec::Core::MockingAdapters::Mocha", double(:framework_name => :mocha))
|
196
197
|
expect {
|
197
198
|
config.mock_with :mocha
|
198
199
|
}.to raise_error(/must be configured before any example groups are defined/)
|
@@ -200,13 +201,14 @@ module RSpec::Core
|
|
200
201
|
|
201
202
|
it 'does not raise an error if the default `mock_with :rspec` is re-configured' do
|
202
203
|
config.mock_framework # called by RSpec when configuring the first example group
|
203
|
-
RSpec.world.
|
204
|
+
allow(RSpec.world).to receive(:example_groups).and_return([double.as_null_object])
|
204
205
|
config.mock_with :rspec
|
205
206
|
end
|
206
207
|
|
207
208
|
it 'does not raise an error if re-setting the same config' do
|
209
|
+
stub_const("RSpec::Core::MockingAdapters::Mocha", double(:framework_name => :mocha))
|
208
210
|
groups = []
|
209
|
-
RSpec.world.
|
211
|
+
allow(RSpec.world).to receive_messages(:example_groups => groups)
|
210
212
|
config.mock_with :mocha
|
211
213
|
groups << double.as_null_object
|
212
214
|
config.mock_with :mocha
|
@@ -216,14 +218,14 @@ module RSpec::Core
|
|
216
218
|
|
217
219
|
describe "#expectation_framework" do
|
218
220
|
it "defaults to :rspec" do
|
219
|
-
config.
|
221
|
+
expect(config).to receive(:require).with('rspec/expectations')
|
220
222
|
config.expectation_frameworks
|
221
223
|
end
|
222
224
|
end
|
223
225
|
|
224
226
|
describe "#expectation_framework=" do
|
225
227
|
it "delegates to expect_with=" do
|
226
|
-
config.
|
228
|
+
expect(config).to receive(:expect_with).with(:rspec)
|
227
229
|
config.expectation_framework = :rspec
|
228
230
|
end
|
229
231
|
end
|
@@ -231,7 +233,7 @@ module RSpec::Core
|
|
231
233
|
describe "#expect_with" do
|
232
234
|
before do
|
233
235
|
stub_const("Test::Unit::Assertions", Module.new)
|
234
|
-
config.
|
236
|
+
allow(config).to receive(:require)
|
235
237
|
end
|
236
238
|
|
237
239
|
it_behaves_like "a configurable framework adapter", :expect_with
|
@@ -242,7 +244,7 @@ module RSpec::Core
|
|
242
244
|
].each do |framework, required_file|
|
243
245
|
context "with #{framework}" do
|
244
246
|
it "requires #{required_file}" do
|
245
|
-
config.
|
247
|
+
expect(config).to receive(:require).with(required_file)
|
246
248
|
config.expect_with framework
|
247
249
|
end
|
248
250
|
end
|
@@ -269,7 +271,7 @@ module RSpec::Core
|
|
269
271
|
|
270
272
|
context 'when there are already some example groups defined' do
|
271
273
|
it 'raises an error since this setting must be applied before any groups are defined' do
|
272
|
-
RSpec.world.
|
274
|
+
allow(RSpec.world).to receive(:example_groups).and_return([double.as_null_object])
|
273
275
|
expect {
|
274
276
|
config.expect_with :rspec
|
275
277
|
}.to raise_error(/must be configured before any example groups are defined/)
|
@@ -277,13 +279,13 @@ module RSpec::Core
|
|
277
279
|
|
278
280
|
it 'does not raise an error if the default `expect_with :rspec` is re-configured' do
|
279
281
|
config.expectation_frameworks # called by RSpec when configuring the first example group
|
280
|
-
RSpec.world.
|
282
|
+
allow(RSpec.world).to receive(:example_groups).and_return([double.as_null_object])
|
281
283
|
config.expect_with :rspec
|
282
284
|
end
|
283
285
|
|
284
286
|
it 'does not raise an error if re-setting the same config' do
|
285
287
|
groups = []
|
286
|
-
RSpec.world.
|
288
|
+
allow(RSpec.world).to receive_messages(:example_groups => groups)
|
287
289
|
config.expect_with :stdlib
|
288
290
|
groups << double.as_null_object
|
289
291
|
config.expect_with :stdlib
|
@@ -294,7 +296,7 @@ module RSpec::Core
|
|
294
296
|
describe "#expecting_with_rspec?" do
|
295
297
|
before do
|
296
298
|
stub_const("Test::Unit::Assertions", Module.new)
|
297
|
-
config.
|
299
|
+
allow(config).to receive(:require)
|
298
300
|
end
|
299
301
|
|
300
302
|
it "returns false by default" do
|
@@ -324,26 +326,36 @@ module RSpec::Core
|
|
324
326
|
|
325
327
|
describe "#files_to_run" do
|
326
328
|
it "loads files not following pattern if named explicitly" do
|
327
|
-
|
329
|
+
assign_files_or_directories_to_run "spec/rspec/core/resources/a_bar.rb"
|
328
330
|
expect(config.files_to_run).to eq([ "spec/rspec/core/resources/a_bar.rb"])
|
329
331
|
end
|
330
332
|
|
331
333
|
it "prevents repetition of dir when start of the pattern" do
|
332
334
|
config.pattern = "spec/**/a_spec.rb"
|
333
|
-
|
335
|
+
assign_files_or_directories_to_run "spec"
|
334
336
|
expect(config.files_to_run).to eq(["spec/rspec/core/resources/a_spec.rb"])
|
335
337
|
end
|
336
338
|
|
337
339
|
it "does not prevent repetition of dir when later of the pattern" do
|
338
340
|
config.pattern = "rspec/**/a_spec.rb"
|
339
|
-
|
341
|
+
assign_files_or_directories_to_run "spec"
|
340
342
|
expect(config.files_to_run).to eq(["spec/rspec/core/resources/a_spec.rb"])
|
341
343
|
end
|
342
344
|
|
345
|
+
it 'reloads when `files_or_directories_to_run` is reassigned' do
|
346
|
+
config.pattern = "spec/**/a_spec.rb"
|
347
|
+
config.files_or_directories_to_run = "empty_dir"
|
348
|
+
|
349
|
+
expect {
|
350
|
+
config.files_or_directories_to_run = "spec"
|
351
|
+
}.to change { config.files_to_run }.
|
352
|
+
to(["spec/rspec/core/resources/a_spec.rb"])
|
353
|
+
end
|
354
|
+
|
343
355
|
context "with <path>:<line_number>" do
|
344
356
|
it "overrides inclusion filters set on config" do
|
345
357
|
config.filter_run_including :foo => :bar
|
346
|
-
|
358
|
+
assign_files_or_directories_to_run "path/to/file.rb:37"
|
347
359
|
expect(config.inclusion_filter.size).to eq(1)
|
348
360
|
expect(config.inclusion_filter[:locations].keys.first).to match(/path\/to\/file\.rb$/)
|
349
361
|
expect(config.inclusion_filter[:locations].values.first).to eq([37])
|
@@ -351,7 +363,7 @@ module RSpec::Core
|
|
351
363
|
|
352
364
|
it "overrides inclusion filters set before config" do
|
353
365
|
config.force(:inclusion_filter => {:foo => :bar})
|
354
|
-
|
366
|
+
assign_files_or_directories_to_run "path/to/file.rb:37"
|
355
367
|
expect(config.inclusion_filter.size).to eq(1)
|
356
368
|
expect(config.inclusion_filter[:locations].keys.first).to match(/path\/to\/file\.rb$/)
|
357
369
|
expect(config.inclusion_filter[:locations].values.first).to eq([37])
|
@@ -359,14 +371,14 @@ module RSpec::Core
|
|
359
371
|
|
360
372
|
it "clears exclusion filters set on config" do
|
361
373
|
config.exclusion_filter = { :foo => :bar }
|
362
|
-
|
374
|
+
assign_files_or_directories_to_run "path/to/file.rb:37"
|
363
375
|
expect(config.exclusion_filter).to be_empty,
|
364
376
|
"expected exclusion filter to be empty:\n#{config.exclusion_filter}"
|
365
377
|
end
|
366
378
|
|
367
379
|
it "clears exclusion filters set before config" do
|
368
380
|
config.force(:exclusion_filter => { :foo => :bar })
|
369
|
-
|
381
|
+
assign_files_or_directories_to_run "path/to/file.rb:37"
|
370
382
|
expect(config.exclusion_filter).to be_empty,
|
371
383
|
"expected exclusion filter to be empty:\n#{config.exclusion_filter}"
|
372
384
|
end
|
@@ -374,51 +386,53 @@ module RSpec::Core
|
|
374
386
|
|
375
387
|
context "with default pattern" do
|
376
388
|
it "loads files named _spec.rb" do
|
377
|
-
|
389
|
+
assign_files_or_directories_to_run "spec/rspec/core/resources"
|
378
390
|
expect(config.files_to_run).to eq([ "spec/rspec/core/resources/a_spec.rb"])
|
379
391
|
end
|
380
392
|
|
381
393
|
it "loads files in Windows", :if => RSpec.windows_os? do
|
382
|
-
|
394
|
+
assign_files_or_directories_to_run "C:\\path\\to\\project\\spec\\sub\\foo_spec.rb"
|
383
395
|
expect(config.files_to_run).to eq([ "C:/path/to/project/spec/sub/foo_spec.rb"])
|
384
396
|
end
|
385
397
|
|
386
398
|
it "loads files in Windows when directory is specified", :if => RSpec.windows_os? do
|
387
|
-
|
399
|
+
assign_files_or_directories_to_run "spec\\rspec\\core\\resources"
|
388
400
|
expect(config.files_to_run).to eq([ "spec/rspec/core/resources/a_spec.rb"])
|
389
401
|
end
|
390
402
|
end
|
391
403
|
|
392
404
|
context "with default default_path" do
|
393
405
|
it "loads files in the default path when run by rspec" do
|
394
|
-
config.
|
395
|
-
|
406
|
+
allow(config).to receive(:command) { 'rspec' }
|
407
|
+
assign_files_or_directories_to_run []
|
396
408
|
expect(config.files_to_run).not_to be_empty
|
397
409
|
end
|
398
410
|
|
399
411
|
it "loads files in the default path when run with DRB (e.g., spork)" do
|
400
|
-
config.
|
401
|
-
RSpec::Core::Runner.
|
402
|
-
|
412
|
+
allow(config).to receive(:command) { 'spork' }
|
413
|
+
allow(RSpec::Core::Runner).to receive(:running_in_drb?) { true }
|
414
|
+
assign_files_or_directories_to_run []
|
403
415
|
expect(config.files_to_run).not_to be_empty
|
404
416
|
end
|
405
417
|
|
406
418
|
it "does not load files in the default path when run by ruby" do
|
407
|
-
config.
|
408
|
-
|
419
|
+
allow(config).to receive(:command) { 'ruby' }
|
420
|
+
assign_files_or_directories_to_run []
|
409
421
|
expect(config.files_to_run).to be_empty
|
410
422
|
end
|
411
423
|
end
|
412
424
|
|
413
425
|
def specify_consistent_ordering_of_files_to_run
|
414
|
-
File.
|
426
|
+
allow(File).to receive(:directory?).with('a') { true }
|
427
|
+
globbed_files = nil
|
428
|
+
allow(Dir).to receive(:[]).with(/^\{?a/) { globbed_files }
|
415
429
|
|
416
430
|
orderings = [
|
417
431
|
%w[ a/1.rb a/2.rb a/3.rb ],
|
418
432
|
%w[ a/2.rb a/1.rb a/3.rb ],
|
419
433
|
%w[ a/3.rb a/2.rb a/1.rb ]
|
420
434
|
].map do |files|
|
421
|
-
|
435
|
+
globbed_files = files
|
422
436
|
yield
|
423
437
|
config.files_to_run
|
424
438
|
end
|
@@ -430,7 +444,7 @@ module RSpec::Core
|
|
430
444
|
it 'orders the files in a consistent ordering, regardless of the underlying OS ordering' do
|
431
445
|
specify_consistent_ordering_of_files_to_run do
|
432
446
|
config.pattern = 'a/*.rb'
|
433
|
-
|
447
|
+
assign_files_or_directories_to_run 'a'
|
434
448
|
end
|
435
449
|
end
|
436
450
|
end
|
@@ -439,20 +453,20 @@ module RSpec::Core
|
|
439
453
|
it 'orders the files in a consistent ordering, regardless of the underlying OS ordering' do
|
440
454
|
specify_consistent_ordering_of_files_to_run do
|
441
455
|
config.pattern = '*.rb'
|
442
|
-
|
456
|
+
assign_files_or_directories_to_run 'a'
|
443
457
|
end
|
444
458
|
end
|
445
459
|
end
|
446
460
|
|
447
461
|
context 'when given multiple file paths' do
|
448
462
|
it 'orders the files in a consistent ordering, regardless of the given order' do
|
449
|
-
File.
|
463
|
+
allow(File).to receive(:directory?) { false } # fake it into thinking these a full file paths
|
450
464
|
|
451
465
|
files = ['a/b/c_spec.rb', 'c/b/a_spec.rb']
|
452
|
-
|
466
|
+
assign_files_or_directories_to_run(*files)
|
453
467
|
ordering_1 = config.files_to_run
|
454
468
|
|
455
|
-
|
469
|
+
assign_files_or_directories_to_run(*files.reverse)
|
456
470
|
ordering_2 = config.files_to_run
|
457
471
|
|
458
472
|
expect(ordering_1).to eq(ordering_2)
|
@@ -466,19 +480,19 @@ module RSpec::Core
|
|
466
480
|
before { config.send(setter, "**/*_foo.rb") }
|
467
481
|
it "loads files following pattern" do
|
468
482
|
file = File.expand_path(File.dirname(__FILE__) + "/resources/a_foo.rb")
|
469
|
-
|
483
|
+
assign_files_or_directories_to_run file
|
470
484
|
expect(config.files_to_run).to include(file)
|
471
485
|
end
|
472
486
|
|
473
487
|
it "loads files in directories following pattern" do
|
474
488
|
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
|
475
|
-
|
489
|
+
assign_files_or_directories_to_run dir
|
476
490
|
expect(config.files_to_run).to include("#{dir}/a_foo.rb")
|
477
491
|
end
|
478
492
|
|
479
493
|
it "does not load files in directories not following pattern" do
|
480
494
|
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
|
481
|
-
|
495
|
+
assign_files_or_directories_to_run dir
|
482
496
|
expect(config.files_to_run).not_to include("#{dir}/a_bar.rb")
|
483
497
|
end
|
484
498
|
end
|
@@ -487,7 +501,7 @@ module RSpec::Core
|
|
487
501
|
it "supports comma separated values" do
|
488
502
|
config.send(setter, "**/*_foo.rb,**/*_bar.rb")
|
489
503
|
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
|
490
|
-
|
504
|
+
assign_files_or_directories_to_run dir
|
491
505
|
expect(config.files_to_run).to include("#{dir}/a_foo.rb")
|
492
506
|
expect(config.files_to_run).to include("#{dir}/a_bar.rb")
|
493
507
|
end
|
@@ -495,7 +509,7 @@ module RSpec::Core
|
|
495
509
|
it "supports comma separated values with spaces" do
|
496
510
|
config.send(setter, "**/*_foo.rb, **/*_bar.rb")
|
497
511
|
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
|
498
|
-
|
512
|
+
assign_files_or_directories_to_run dir
|
499
513
|
expect(config.files_to_run).to include("#{dir}/a_foo.rb")
|
500
514
|
expect(config.files_to_run).to include("#{dir}/a_bar.rb")
|
501
515
|
end
|
@@ -503,7 +517,7 @@ module RSpec::Core
|
|
503
517
|
it "supports curly braces glob syntax" do
|
504
518
|
config.send(setter, "**/*_{foo,bar}.rb")
|
505
519
|
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
|
506
|
-
|
520
|
+
assign_files_or_directories_to_run dir
|
507
521
|
expect(config.files_to_run).to include("#{dir}/a_foo.rb")
|
508
522
|
expect(config.files_to_run).to include("#{dir}/a_bar.rb")
|
509
523
|
end
|
@@ -528,7 +542,7 @@ module RSpec::Core
|
|
528
542
|
|
529
543
|
describe "path with line number" do
|
530
544
|
it "assigns the line number as a location filter" do
|
531
|
-
|
545
|
+
assign_files_or_directories_to_run "path/to/a_spec.rb:37"
|
532
546
|
expect(config.filter).to eq({:locations => {File.expand_path("path/to/a_spec.rb") => [37]}})
|
533
547
|
end
|
534
548
|
end
|
@@ -554,25 +568,25 @@ module RSpec::Core
|
|
554
568
|
|
555
569
|
context "with line number" do
|
556
570
|
it "assigns the file and line number as a location filter" do
|
557
|
-
|
571
|
+
assign_files_or_directories_to_run "path/to/a_spec.rb:37"
|
558
572
|
expect(config.filter).to eq({:locations => {File.expand_path("path/to/a_spec.rb") => [37]}})
|
559
573
|
end
|
560
574
|
|
561
575
|
it "assigns multiple files with line numbers as location filters" do
|
562
|
-
|
576
|
+
assign_files_or_directories_to_run "path/to/a_spec.rb:37", "other_spec.rb:44"
|
563
577
|
expect(config.filter).to eq({:locations => {File.expand_path("path/to/a_spec.rb") => [37],
|
564
578
|
File.expand_path("other_spec.rb") => [44]}})
|
565
579
|
end
|
566
580
|
|
567
581
|
it "assigns files with multiple line numbers as location filters" do
|
568
|
-
|
582
|
+
assign_files_or_directories_to_run "path/to/a_spec.rb:37", "path/to/a_spec.rb:44"
|
569
583
|
expect(config.filter).to eq({:locations => {File.expand_path("path/to/a_spec.rb") => [37, 44]}})
|
570
584
|
end
|
571
585
|
end
|
572
586
|
|
573
587
|
context "with multiple line numbers" do
|
574
588
|
it "assigns the file and line numbers as a location filter" do
|
575
|
-
|
589
|
+
assign_files_or_directories_to_run "path/to/a_spec.rb:1:3:5:7"
|
576
590
|
expect(config.filter).to eq({:locations => {File.expand_path("path/to/a_spec.rb") => [1,3,5,7]}})
|
577
591
|
end
|
578
592
|
end
|
@@ -687,7 +701,7 @@ module RSpec::Core
|
|
687
701
|
config.output_stream = output
|
688
702
|
|
689
703
|
config.tty = true
|
690
|
-
config.output_stream.
|
704
|
+
allow(config.output_stream).to receive_messages :tty? => true
|
691
705
|
|
692
706
|
expect(config.send(color_option)).to be_truthy
|
693
707
|
expect(config.send(color_option, output)).to be_truthy
|
@@ -700,7 +714,7 @@ module RSpec::Core
|
|
700
714
|
config.output_stream = output
|
701
715
|
|
702
716
|
config.tty = true
|
703
|
-
config.output_stream.
|
717
|
+
allow(config.output_stream).to receive_messages :tty? => false
|
704
718
|
|
705
719
|
expect(config.send(color_option)).to be_truthy
|
706
720
|
expect(config.send(color_option, output)).to be_truthy
|
@@ -713,7 +727,7 @@ module RSpec::Core
|
|
713
727
|
config.output_stream = output
|
714
728
|
|
715
729
|
config.tty = false
|
716
|
-
config.output_stream.
|
730
|
+
allow(config.output_stream).to receive_messages :tty? => true
|
717
731
|
|
718
732
|
expect(config.send(color_option)).to be_truthy
|
719
733
|
expect(config.send(color_option, output)).to be_truthy
|
@@ -726,7 +740,7 @@ module RSpec::Core
|
|
726
740
|
config.output_stream = output
|
727
741
|
|
728
742
|
config.tty = false
|
729
|
-
config.output_stream.
|
743
|
+
allow(config.output_stream).to receive_messages :tty? => false
|
730
744
|
|
731
745
|
expect(config.send(color_option)).to be_falsey
|
732
746
|
expect(config.send(color_option, output)).to be_falsey
|
@@ -737,7 +751,7 @@ module RSpec::Core
|
|
737
751
|
before do
|
738
752
|
@original_host = RbConfig::CONFIG['host_os']
|
739
753
|
RbConfig::CONFIG['host_os'] = 'mingw'
|
740
|
-
config.
|
754
|
+
allow(config).to receive(:require)
|
741
755
|
end
|
742
756
|
|
743
757
|
after do
|
@@ -749,14 +763,14 @@ module RSpec::Core
|
|
749
763
|
|
750
764
|
it "enables colors" do
|
751
765
|
config.output_stream = StringIO.new
|
752
|
-
config.output_stream.
|
766
|
+
allow(config.output_stream).to receive_messages :tty? => true
|
753
767
|
config.send "#{color_option}=", true
|
754
768
|
expect(config.send(color_option)).to be_truthy
|
755
769
|
end
|
756
770
|
|
757
771
|
it "leaves output stream intact" do
|
758
772
|
config.output_stream = $stdout
|
759
|
-
config.
|
773
|
+
allow(config).to receive(:require) do |what|
|
760
774
|
config.output_stream = 'foo' if what =~ /Win32/
|
761
775
|
end
|
762
776
|
config.send "#{color_option}=", true
|
@@ -770,13 +784,13 @@ module RSpec::Core
|
|
770
784
|
end
|
771
785
|
|
772
786
|
it "warns to install ANSICON" do
|
773
|
-
config.
|
787
|
+
allow(config).to receive(:require) { raise LoadError }
|
774
788
|
expect_warning_with_call_site(__FILE__, __LINE__ + 1, /You must use ANSICON/)
|
775
789
|
config.send "#{color_option}=", true
|
776
790
|
end
|
777
791
|
|
778
792
|
it "sets color_enabled to false" do
|
779
|
-
config.
|
793
|
+
allow(config).to receive(:require) { raise LoadError }
|
780
794
|
config.send "#{color_option}=", true
|
781
795
|
config.color_enabled = true
|
782
796
|
expect(config.send(color_option)).to be_falsey
|
@@ -788,78 +802,18 @@ module RSpec::Core
|
|
788
802
|
|
789
803
|
it "prefers incoming cli_args" do
|
790
804
|
config.output_stream = StringIO.new
|
791
|
-
config.output_stream.
|
805
|
+
allow(config.output_stream).to receive_messages :tty? => true
|
792
806
|
config.force :color => true
|
793
807
|
config.color = false
|
794
808
|
expect(config.color).to be_truthy
|
795
809
|
end
|
796
810
|
end
|
797
811
|
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
end
|
804
|
-
|
805
|
-
describe "#add_formatter" do
|
806
|
-
|
807
|
-
it "adds to the list of formatters" do
|
808
|
-
config.add_formatter :documentation
|
809
|
-
expect(config.formatters.first).to be_an_instance_of(Formatters::DocumentationFormatter)
|
810
|
-
end
|
811
|
-
|
812
|
-
it "finds a formatter by name (w/ Symbol)" do
|
813
|
-
config.add_formatter :documentation
|
814
|
-
expect(config.formatters.first).to be_an_instance_of(Formatters::DocumentationFormatter)
|
815
|
-
end
|
816
|
-
|
817
|
-
it "finds a formatter by name (w/ String)" do
|
818
|
-
config.add_formatter 'documentation'
|
819
|
-
expect(config.formatters.first).to be_an_instance_of(Formatters::DocumentationFormatter)
|
820
|
-
end
|
821
|
-
|
822
|
-
it "finds a formatter by class" do
|
823
|
-
formatter_class = Class.new(Formatters::BaseTextFormatter)
|
824
|
-
config.add_formatter formatter_class
|
825
|
-
expect(config.formatters.first).to be_an_instance_of(formatter_class)
|
826
|
-
end
|
827
|
-
|
828
|
-
it "finds a formatter by class name" do
|
829
|
-
stub_const("CustomFormatter", Class.new(Formatters::BaseFormatter))
|
830
|
-
config.add_formatter "CustomFormatter"
|
831
|
-
expect(config.formatters.first).to be_an_instance_of(CustomFormatter)
|
832
|
-
end
|
833
|
-
|
834
|
-
it "finds a formatter by class fully qualified name" do
|
835
|
-
stub_const("RSpec::CustomFormatter", Class.new(Formatters::BaseFormatter))
|
836
|
-
config.add_formatter "RSpec::CustomFormatter"
|
837
|
-
expect(config.formatters.first).to be_an_instance_of(RSpec::CustomFormatter)
|
838
|
-
end
|
839
|
-
|
840
|
-
it "requires a formatter file based on its fully qualified name" do
|
841
|
-
config.should_receive(:require).with('rspec/custom_formatter') do
|
842
|
-
stub_const("RSpec::CustomFormatter", Class.new(Formatters::BaseFormatter))
|
843
|
-
end
|
844
|
-
config.add_formatter "RSpec::CustomFormatter"
|
845
|
-
expect(config.formatters.first).to be_an_instance_of(RSpec::CustomFormatter)
|
846
|
-
end
|
847
|
-
|
848
|
-
it "raises NameError if class is unresolvable" do
|
849
|
-
config.should_receive(:require).with('rspec/custom_formatter3')
|
850
|
-
expect(lambda { config.add_formatter "RSpec::CustomFormatter3" }).to raise_error(NameError)
|
851
|
-
end
|
852
|
-
|
853
|
-
it "raises ArgumentError if formatter is unknown" do
|
854
|
-
expect(lambda { config.add_formatter :progresss }).to raise_error(ArgumentError)
|
855
|
-
end
|
856
|
-
|
857
|
-
context "with a 2nd arg defining the output" do
|
858
|
-
it "creates a file at that path and sets it as the output" do
|
859
|
-
path = File.join(Dir.tmpdir, 'output.txt')
|
860
|
-
config.add_formatter('doc', path)
|
861
|
-
expect(config.formatters.first.output).to be_a(File)
|
862
|
-
expect(config.formatters.first.output.path).to eq(path)
|
812
|
+
%w[formatter= add_formatter].each do |config_method|
|
813
|
+
describe "##{config_method}" do
|
814
|
+
it "delegates to formatters#add" do
|
815
|
+
expect(config.formatter_loader).to receive(:add).with('these','options')
|
816
|
+
config.send(config_method,'these','options')
|
863
817
|
end
|
864
818
|
end
|
865
819
|
end
|
@@ -1065,7 +1019,7 @@ module RSpec::Core
|
|
1065
1019
|
include_context "isolate load path mutation"
|
1066
1020
|
|
1067
1021
|
it "adds directories to the LOAD_PATH" do
|
1068
|
-
$LOAD_PATH.
|
1022
|
+
expect($LOAD_PATH).to receive(:unshift).with("a/dir")
|
1069
1023
|
config.libs = ["a/dir"]
|
1070
1024
|
end
|
1071
1025
|
end
|
@@ -1079,22 +1033,6 @@ module RSpec::Core
|
|
1079
1033
|
end
|
1080
1034
|
end
|
1081
1035
|
|
1082
|
-
describe "#requires=" do
|
1083
|
-
before { RSpec.should_receive :deprecate }
|
1084
|
-
|
1085
|
-
it "requires the configured files" do
|
1086
|
-
config.should_receive(:require).with('foo').ordered
|
1087
|
-
config.should_receive(:require).with('bar').ordered
|
1088
|
-
config.requires = ['foo', 'bar']
|
1089
|
-
end
|
1090
|
-
|
1091
|
-
it "stores require paths" do
|
1092
|
-
config.should_receive(:require).with("a/path")
|
1093
|
-
config.requires = ["a/path"]
|
1094
|
-
expect(config.requires).to eq ['a/path']
|
1095
|
-
end
|
1096
|
-
end
|
1097
|
-
|
1098
1036
|
describe "#add_setting" do
|
1099
1037
|
describe "with no modifiers" do
|
1100
1038
|
context "with no additional options" do
|
@@ -1146,14 +1084,6 @@ module RSpec::Core
|
|
1146
1084
|
end
|
1147
1085
|
end
|
1148
1086
|
|
1149
|
-
context "with :alias => " do
|
1150
|
-
it "is deprecated" do
|
1151
|
-
RSpec::should_receive(:deprecate).with(/:alias option/, :replacement => ":alias_with")
|
1152
|
-
config.add_setting :custom_option
|
1153
|
-
config.add_setting :another_custom_option, :alias => :custom_option
|
1154
|
-
end
|
1155
|
-
end
|
1156
|
-
|
1157
1087
|
context "with :alias_with => " do
|
1158
1088
|
before do
|
1159
1089
|
config.add_setting :custom_option, :alias_with => :another_custom_option
|
@@ -1254,6 +1184,48 @@ module RSpec::Core
|
|
1254
1184
|
end
|
1255
1185
|
end
|
1256
1186
|
|
1187
|
+
describe "#alias_example_group_to" do
|
1188
|
+
after do
|
1189
|
+
RSpec::Core::DSL.example_group_aliases.delete(:my_group_method)
|
1190
|
+
|
1191
|
+
RSpec.module_eval do
|
1192
|
+
class << self
|
1193
|
+
undef :my_group_method if method_defined? :my_group_method
|
1194
|
+
end
|
1195
|
+
end
|
1196
|
+
|
1197
|
+
RSpec::Core::ExampleGroup.module_eval do
|
1198
|
+
class << self
|
1199
|
+
undef :my_group_method if method_defined? :my_group_method
|
1200
|
+
end
|
1201
|
+
end
|
1202
|
+
end
|
1203
|
+
|
1204
|
+
it_behaves_like "metadata hash builder" do
|
1205
|
+
def metadata_hash(*args)
|
1206
|
+
config.alias_example_group_to :my_group_method, *args
|
1207
|
+
group = ExampleGroup.my_group_method("a group")
|
1208
|
+
group.metadata
|
1209
|
+
end
|
1210
|
+
end
|
1211
|
+
|
1212
|
+
it "allows adding additional metadata" do
|
1213
|
+
config.alias_example_group_to :my_group_method, { :some => "thing" }
|
1214
|
+
group = ExampleGroup.my_group_method("a group", :another => "thing")
|
1215
|
+
expect(group.metadata).to include(:some => "thing", :another => "thing")
|
1216
|
+
end
|
1217
|
+
|
1218
|
+
context 'when the aliased method is used' do
|
1219
|
+
it_behaves_like "metadata hash builder" do
|
1220
|
+
def metadata_hash(*args)
|
1221
|
+
config.alias_example_group_to :my_group_method
|
1222
|
+
group = ExampleGroup.my_group_method("a group", *args)
|
1223
|
+
group.metadata
|
1224
|
+
end
|
1225
|
+
end
|
1226
|
+
end
|
1227
|
+
end
|
1228
|
+
|
1257
1229
|
describe "#alias_example_to" do
|
1258
1230
|
it_behaves_like "metadata hash builder" do
|
1259
1231
|
after do
|
@@ -1368,7 +1340,7 @@ module RSpec::Core
|
|
1368
1340
|
end
|
1369
1341
|
|
1370
1342
|
it 'sets up random ordering' do
|
1371
|
-
RSpec.
|
1343
|
+
allow(RSpec).to receive_messages(:configuration => config)
|
1372
1344
|
global_ordering = config.ordering_registry.fetch(:global)
|
1373
1345
|
expect(global_ordering).to be_an_instance_of(Ordering::Random)
|
1374
1346
|
end
|
@@ -1382,7 +1354,7 @@ module RSpec::Core
|
|
1382
1354
|
end
|
1383
1355
|
|
1384
1356
|
it 'sets up random ordering' do
|
1385
|
-
RSpec.
|
1357
|
+
allow(RSpec).to receive_messages(:configuration => config)
|
1386
1358
|
global_ordering = config.ordering_registry.fetch(:global)
|
1387
1359
|
expect(global_ordering).to be_an_instance_of(Ordering::Random)
|
1388
1360
|
end
|
@@ -1399,7 +1371,7 @@ module RSpec::Core
|
|
1399
1371
|
end
|
1400
1372
|
|
1401
1373
|
it 'clears the random ordering' do
|
1402
|
-
RSpec.
|
1374
|
+
allow(RSpec).to receive_messages(:configuration => config)
|
1403
1375
|
list = [1, 2, 3, 4]
|
1404
1376
|
ordering_strategy = config.ordering_registry.fetch(:global)
|
1405
1377
|
expect(ordering_strategy.order(list)).to eq([1, 2, 3, 4])
|
@@ -1497,5 +1469,11 @@ module RSpec::Core
|
|
1497
1469
|
end
|
1498
1470
|
end
|
1499
1471
|
|
1472
|
+
# assigns files_or_directories_to_run and triggers post-processing
|
1473
|
+
# via `files_to_run`.
|
1474
|
+
def assign_files_or_directories_to_run(*value)
|
1475
|
+
config.files_or_directories_to_run = value
|
1476
|
+
config.files_to_run
|
1477
|
+
end
|
1500
1478
|
end
|
1501
1479
|
end
|