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
@@ -1,18 +1,9 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Core
|
3
3
|
class ProjectInitializer
|
4
|
-
def initialize(arg=nil)
|
5
|
-
@arg = arg
|
6
|
-
end
|
7
|
-
|
8
4
|
def run
|
9
5
|
create_spec_helper_file
|
10
6
|
create_dot_rspec_file
|
11
|
-
|
12
|
-
delete_if_confirmed("lib/tasks/rspec.rake", <<-MESSAGE)
|
13
|
-
If the file in lib/tasks/rspec.rake is the one generated by rspec-rails-1x,
|
14
|
-
you can get rid of it, as it is no longer needed with rspec-2.
|
15
|
-
MESSAGE
|
16
7
|
end
|
17
8
|
|
18
9
|
def create_dot_rspec_file
|
@@ -21,10 +12,7 @@ module RSpec
|
|
21
12
|
else
|
22
13
|
report_creating('.rspec')
|
23
14
|
File.open('.rspec','w') do |f|
|
24
|
-
f.write
|
25
|
-
--color
|
26
|
-
--format progress
|
27
|
-
CONTENT
|
15
|
+
f.write File.read(File.expand_path("../project_initializer/dot_rspec", __FILE__))
|
28
16
|
end
|
29
17
|
end
|
30
18
|
end
|
@@ -36,45 +24,11 @@ CONTENT
|
|
36
24
|
report_creating('spec/spec_helper.rb')
|
37
25
|
FileUtils.mkdir_p('spec')
|
38
26
|
File.open('spec/spec_helper.rb','w') do |f|
|
39
|
-
f.write
|
40
|
-
# This file was generated by the `rspec --init` command. Conventionally, all
|
41
|
-
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
42
|
-
# Require this file using `require "spec_helper"` to ensure that it is only
|
43
|
-
# loaded once.
|
44
|
-
#
|
45
|
-
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
46
|
-
RSpec.configure do |config|
|
47
|
-
# Limit the spec run to only specs with the focus metadata. If no specs have
|
48
|
-
# the filtering metadata and `run_all_when_everything_filtered = true` then
|
49
|
-
# all specs will run.
|
50
|
-
#config.filter_run :focus
|
51
|
-
|
52
|
-
# Run all specs when none match the provided filter. This works well in
|
53
|
-
# conjunction with `config.filter_run :focus`, as it will run the entire
|
54
|
-
# suite when no specs have `:filter` metadata.
|
55
|
-
#config.run_all_when_everything_filtered = true
|
56
|
-
|
57
|
-
# Run specs in random order to surface order dependencies. If you find an
|
58
|
-
# order dependency and want to debug it, you can fix the order by providing
|
59
|
-
# the seed, which is printed after each run.
|
60
|
-
# --seed 1234
|
61
|
-
#config.order = 'random'
|
62
|
-
end
|
63
|
-
CONTENT
|
27
|
+
f.write File.read(File.expand_path("../project_initializer/spec_helper.rb", __FILE__))
|
64
28
|
end
|
65
29
|
end
|
66
30
|
end
|
67
31
|
|
68
|
-
def delete_if_confirmed(path, message)
|
69
|
-
if File.exist?(path)
|
70
|
-
puts
|
71
|
-
puts message
|
72
|
-
puts
|
73
|
-
puts " delete #{path}? [y/n]"
|
74
|
-
FileUtils.rm_rf(path) if gets =~ /y/i
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
32
|
def report_exists(file)
|
79
33
|
puts " exist #{file}"
|
80
34
|
end
|
@@ -82,7 +36,6 @@ CONTENT
|
|
82
36
|
def report_creating(file)
|
83
37
|
puts " create #{file}"
|
84
38
|
end
|
85
|
-
|
86
39
|
end
|
87
40
|
end
|
88
41
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# The generated `.rspec` file contains `--require spec_helper` which will cause this
|
4
|
+
# file to always be loaded, without a need to explicitly require it in any files.
|
5
|
+
#
|
6
|
+
# Given that it is always loaded, you are encouraged to keep this file as
|
7
|
+
# light-weight as possible. Requiring heavyweight dependencies from this file
|
8
|
+
# (such as loading up an entire rails app) will add to the boot time of your
|
9
|
+
# test suite on EVERY test run, even for an individual file that may not need
|
10
|
+
# all of that loaded.
|
11
|
+
#
|
12
|
+
# The `.rspec` file also contains a few flags that are not defaults but that
|
13
|
+
# users commonly want.
|
14
|
+
#
|
15
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
16
|
+
RSpec.configure do |config|
|
17
|
+
# The settings below are suggested to provide a good initial experience
|
18
|
+
# with RSpec, but feel free to customize to your heart's content.
|
19
|
+
=begin
|
20
|
+
# These two settings work together to allow you to limit a spec run
|
21
|
+
# to individual examples or groups you care about by tagging them with
|
22
|
+
# `:focus` metadata. When nothing is tagged with `:focus`, all examples
|
23
|
+
# get run.
|
24
|
+
config.filter_run :focus
|
25
|
+
config.run_all_when_everything_filtered = true
|
26
|
+
|
27
|
+
# Many RSpec users commonly either run the entire suite or an individual
|
28
|
+
# file, and it's useful to allow more verbose output when running an
|
29
|
+
# individual spec file.
|
30
|
+
if config.files_to_run.one?
|
31
|
+
# RSpec filters the backtrace by default so as not to be so noisy.
|
32
|
+
# This causes the full backtrace to be printed when running a single
|
33
|
+
# spec file (e.g. to troubleshoot a particular spec failure).
|
34
|
+
config.full_backtrace = true
|
35
|
+
|
36
|
+
# Use the documentation formatter for detailed output,
|
37
|
+
# unless a formatter has already been configured
|
38
|
+
# (e.g. via a command-line flag).
|
39
|
+
config.formatter = 'doc' if config.formatters.none?
|
40
|
+
end
|
41
|
+
|
42
|
+
# Print the 10 slowest examples and example groups at the
|
43
|
+
# end of the spec run, to help surface which specs are running
|
44
|
+
# particularly slow.
|
45
|
+
config.profile_examples = 10
|
46
|
+
|
47
|
+
# Run specs in random order to surface order dependencies. If you find an
|
48
|
+
# order dependency and want to debug it, you can fix the order by providing
|
49
|
+
# the seed, which is printed after each run.
|
50
|
+
# --seed 1234
|
51
|
+
config.order = :random
|
52
|
+
|
53
|
+
# Seed global randomization in this process using the `--seed` CLI option.
|
54
|
+
# Setting this allows you to use `--seed` to deterministically reproduce
|
55
|
+
# test failures related to randomization by passing the same `--seed` value
|
56
|
+
# as the one that triggered the failure.
|
57
|
+
Kernel.srand config.seed
|
58
|
+
|
59
|
+
# rspec-expectations config goes here. You can use an alternate
|
60
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
61
|
+
# assertions if you prefer.
|
62
|
+
config.expect_with :rspec do |expectations|
|
63
|
+
# Enable only the newer, non-monkey-patching expect syntax.
|
64
|
+
# For more details, see:
|
65
|
+
# - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
|
66
|
+
expectations.syntax = :expect
|
67
|
+
end
|
68
|
+
|
69
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
70
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
71
|
+
config.mock_with :rspec do |mocks|
|
72
|
+
# Enable only the newer, non-monkey-patching expect syntax.
|
73
|
+
# For more details, see:
|
74
|
+
# - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
75
|
+
mocks.syntax = :expect
|
76
|
+
|
77
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
78
|
+
# a real object. This is generally recommended.
|
79
|
+
mocks.verify_partial_doubles = true
|
80
|
+
end
|
81
|
+
=end
|
82
|
+
end
|
data/lib/rspec/core/rake_task.rb
CHANGED
@@ -54,25 +54,13 @@ module RSpec
|
|
54
54
|
# nil
|
55
55
|
attr_accessor :rspec_opts
|
56
56
|
|
57
|
-
# @deprecated
|
58
|
-
# Use rspec_opts instead.
|
59
|
-
#
|
60
|
-
# Command line options to pass to rspec.
|
61
|
-
#
|
62
|
-
# default:
|
63
|
-
# nil
|
64
|
-
def spec_opts=(opts)
|
65
|
-
RSpec.deprecate('RSpec::Core::RakeTask#spec_opts=', :replacement => 'rspec_opts=')
|
66
|
-
@rspec_opts = opts
|
67
|
-
end
|
68
|
-
|
69
57
|
def initialize(*args, &task_block)
|
70
58
|
setup_ivars(args)
|
71
59
|
|
72
60
|
desc "Run RSpec code examples" unless ::Rake.application.last_comment
|
73
61
|
|
74
62
|
task name, *args do |_, task_args|
|
75
|
-
RakeFileUtils.
|
63
|
+
RakeFileUtils.__send__(:verbose, verbose) do
|
76
64
|
task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
|
77
65
|
run_task verbose
|
78
66
|
end
|
@@ -97,7 +85,10 @@ module RSpec
|
|
97
85
|
rescue
|
98
86
|
puts failure_message if failure_message
|
99
87
|
end
|
100
|
-
|
88
|
+
if fail_on_error && !success
|
89
|
+
$stderr.puts "#{command} failed"
|
90
|
+
exit $?.exitstatus
|
91
|
+
end
|
101
92
|
end
|
102
93
|
|
103
94
|
private
|
data/lib/rspec/core/reporter.rb
CHANGED
@@ -1,15 +1,9 @@
|
|
1
1
|
module RSpec::Core
|
2
2
|
class Reporter
|
3
|
-
NOTIFICATIONS = %W[start message example_group_started example_group_finished example_started
|
4
|
-
example_passed example_failed example_pending start_dump dump_pending
|
5
|
-
dump_failures dump_summary seed close stop deprecation deprecation_summary].map(&:to_sym)
|
6
3
|
|
7
|
-
def initialize(configuration
|
4
|
+
def initialize(configuration)
|
8
5
|
@configuration = configuration
|
9
|
-
@listeners = Hash.new { |h,k| h[k] =
|
10
|
-
formatters.each do |formatter|
|
11
|
-
register_listener(formatter, *NOTIFICATIONS)
|
12
|
-
end
|
6
|
+
@listeners = Hash.new { |h,k| h[k] = Set.new }
|
13
7
|
@example_count = @failure_count = @pending_count = 0
|
14
8
|
@duration = @start = nil
|
15
9
|
end
|
@@ -22,13 +16,13 @@ module RSpec::Core
|
|
22
16
|
# events to all registered listeners
|
23
17
|
def register_listener(listener, *notifications)
|
24
18
|
notifications.each do |notification|
|
25
|
-
@listeners[notification.to_sym] << listener
|
19
|
+
@listeners[notification.to_sym] << listener
|
26
20
|
end
|
27
21
|
true
|
28
22
|
end
|
29
23
|
|
30
24
|
def registered_listeners(notification)
|
31
|
-
@listeners[notification]
|
25
|
+
@listeners[notification].to_a
|
32
26
|
end
|
33
27
|
|
34
28
|
# @api
|
@@ -58,68 +52,66 @@ module RSpec::Core
|
|
58
52
|
|
59
53
|
def start(expected_example_count)
|
60
54
|
@start = RSpec::Core::Time.now
|
61
|
-
notify :start, expected_example_count
|
55
|
+
notify :start, Notifications::CountNotification.new(expected_example_count)
|
62
56
|
end
|
63
57
|
|
64
58
|
def message(message)
|
65
|
-
notify :message, message
|
59
|
+
notify :message, Notifications::MessageNotification.new(message)
|
66
60
|
end
|
67
61
|
|
68
62
|
def example_group_started(group)
|
69
|
-
notify :example_group_started, group unless group.descendant_filtered_examples.empty?
|
63
|
+
notify :example_group_started, Notifications::GroupNotification.new(group) unless group.descendant_filtered_examples.empty?
|
70
64
|
end
|
71
65
|
|
72
66
|
def example_group_finished(group)
|
73
|
-
notify :example_group_finished, group unless group.descendant_filtered_examples.empty?
|
67
|
+
notify :example_group_finished, Notifications::GroupNotification.new(group) unless group.descendant_filtered_examples.empty?
|
74
68
|
end
|
75
69
|
|
76
70
|
def example_started(example)
|
77
71
|
@example_count += 1
|
78
|
-
notify :example_started, example
|
72
|
+
notify :example_started, Notifications::ExampleNotification.new(example)
|
79
73
|
end
|
80
74
|
|
81
75
|
def example_passed(example)
|
82
|
-
notify :example_passed, example
|
76
|
+
notify :example_passed, Notifications::ExampleNotification.new(example)
|
83
77
|
end
|
84
78
|
|
85
79
|
def example_failed(example)
|
86
80
|
@failure_count += 1
|
87
|
-
notify :example_failed, example
|
81
|
+
notify :example_failed, Notifications::ExampleNotification.new(example)
|
88
82
|
end
|
89
83
|
|
90
84
|
def example_pending(example)
|
91
85
|
@pending_count += 1
|
92
|
-
notify :example_pending, example
|
86
|
+
notify :example_pending, Notifications::ExampleNotification.new(example)
|
93
87
|
end
|
94
88
|
|
95
|
-
def deprecation(
|
96
|
-
notify :deprecation,
|
89
|
+
def deprecation(hash)
|
90
|
+
notify :deprecation, Notifications::DeprecationNotification.from_hash(hash)
|
97
91
|
end
|
98
92
|
|
99
93
|
def finish
|
100
94
|
begin
|
101
95
|
stop
|
102
|
-
notify :start_dump
|
103
|
-
notify :dump_pending
|
104
|
-
notify :dump_failures
|
105
|
-
notify :dump_summary, @duration, @example_count, @failure_count, @pending_count
|
106
|
-
notify :deprecation_summary
|
107
|
-
notify :seed, @configuration.seed
|
96
|
+
notify :start_dump, Notifications::NullNotification
|
97
|
+
notify :dump_pending, Notifications::NullNotification
|
98
|
+
notify :dump_failures, Notifications::NullNotification
|
99
|
+
notify :dump_summary, Notifications::SummaryNotification.new(@duration, @example_count, @failure_count, @pending_count)
|
100
|
+
notify :deprecation_summary, Notifications::NullNotification
|
101
|
+
notify :seed, Notifications::SeedNotification.new(@configuration.seed, seed_used?)
|
108
102
|
ensure
|
109
|
-
notify :close
|
103
|
+
notify :close, Notifications::NullNotification
|
110
104
|
end
|
111
105
|
end
|
112
106
|
|
113
|
-
alias_method :abort, :finish
|
114
|
-
|
115
107
|
def stop
|
116
108
|
@duration = (RSpec::Core::Time.now - @start).to_f if @start
|
117
|
-
notify :stop
|
109
|
+
notify :stop, Notifications::NullNotification
|
118
110
|
end
|
119
111
|
|
120
|
-
def notify(event,
|
112
|
+
def notify(event, notification)
|
121
113
|
registered_listeners(event).each do |formatter|
|
122
|
-
formatter.
|
114
|
+
formatter.__send__(event, notification)
|
123
115
|
end
|
124
116
|
end
|
125
117
|
|
data/lib/rspec/core/runner.rb
CHANGED
@@ -4,7 +4,13 @@ module RSpec
|
|
4
4
|
|
5
5
|
# Register an at_exit hook that runs the suite.
|
6
6
|
def self.autorun
|
7
|
-
|
7
|
+
if autorun_disabled?
|
8
|
+
RSpec.deprecate("Requiring `rspec/autorun` when running RSpec via the `rspec` command")
|
9
|
+
return
|
10
|
+
elsif installed_at_exit? || running_in_drb?
|
11
|
+
return
|
12
|
+
end
|
13
|
+
|
8
14
|
at_exit do
|
9
15
|
# Don't bother running any specs and just let the program terminate
|
10
16
|
# if we got here due to an unrescued exception (anything other than
|
@@ -14,13 +20,18 @@ module RSpec
|
|
14
20
|
# We got here because either the end of the program was reached or
|
15
21
|
# somebody called Kernel#exit. Run the specs and then override any
|
16
22
|
# existing exit status with RSpec's exit status if any specs failed.
|
17
|
-
|
18
|
-
exit status if status != 0
|
23
|
+
invoke
|
19
24
|
end
|
20
25
|
@installed_at_exit = true
|
21
26
|
end
|
22
27
|
AT_EXIT_HOOK_BACKTRACE_LINE = "#{__FILE__}:#{__LINE__ - 2}:in `autorun'"
|
23
28
|
|
29
|
+
def self.invoke
|
30
|
+
disable_autorun!
|
31
|
+
status = run(ARGV, $stderr, $stdout).to_i
|
32
|
+
exit(status) if status != 0
|
33
|
+
end
|
34
|
+
|
24
35
|
def self.disable_autorun!
|
25
36
|
@autorun_disabled = true
|
26
37
|
end
|
@@ -76,7 +87,6 @@ module RSpec
|
|
76
87
|
def self.run(args, err=$stderr, out=$stdout)
|
77
88
|
trap_interrupt
|
78
89
|
options = ConfigurationOptions.new(args)
|
79
|
-
options.parse_options
|
80
90
|
|
81
91
|
if options.options[:drb]
|
82
92
|
require 'rspec/core/drb_command_line'
|
@@ -41,17 +41,45 @@ module RSpec
|
|
41
41
|
end
|
42
42
|
|
43
43
|
module TopLevelDSL
|
44
|
-
def
|
45
|
-
|
44
|
+
def self.definitions
|
45
|
+
proc do
|
46
|
+
def shared_examples(*args, &block)
|
47
|
+
SharedExampleGroup.registry.add_group('main', *args, &block)
|
48
|
+
end
|
49
|
+
alias :shared_context :shared_examples
|
50
|
+
alias :share_examples_for :shared_examples
|
51
|
+
alias :shared_examples_for :shared_examples
|
52
|
+
def shared_example_groups
|
53
|
+
SharedExampleGroup.registry.shared_example_groups_for('main')
|
54
|
+
end
|
55
|
+
end
|
46
56
|
end
|
47
57
|
|
48
|
-
|
49
|
-
|
50
|
-
|
58
|
+
# @private
|
59
|
+
def self.exposed_globally?
|
60
|
+
@exposed_globally ||= false
|
61
|
+
end
|
51
62
|
|
52
|
-
def
|
53
|
-
|
63
|
+
def self.expose_globally!
|
64
|
+
return if exposed_globally?
|
65
|
+
Core::DSL.change_global_dsl(&definitions)
|
66
|
+
@exposed_globally = true
|
54
67
|
end
|
68
|
+
|
69
|
+
def self.remove_globally!
|
70
|
+
return unless exposed_globally?
|
71
|
+
|
72
|
+
Core::DSL.change_global_dsl do
|
73
|
+
undef shared_examples
|
74
|
+
undef shared_context
|
75
|
+
undef share_examples_for
|
76
|
+
undef shared_examples_for
|
77
|
+
undef shared_example_groups
|
78
|
+
end
|
79
|
+
|
80
|
+
@exposed_globally = false
|
81
|
+
end
|
82
|
+
|
55
83
|
end
|
56
84
|
|
57
85
|
def self.registry
|
@@ -77,10 +105,10 @@ module RSpec
|
|
77
105
|
|
78
106
|
unless args.empty?
|
79
107
|
mod = Module.new
|
80
|
-
(class << mod; self; end).
|
108
|
+
(class << mod; self; end).__send__(:define_method, :included) do |host|
|
81
109
|
host.class_eval(&block)
|
82
110
|
end
|
83
|
-
RSpec.configuration.
|
111
|
+
RSpec.configuration.include mod, *args
|
84
112
|
end
|
85
113
|
end
|
86
114
|
|
@@ -89,7 +117,7 @@ module RSpec
|
|
89
117
|
end
|
90
118
|
|
91
119
|
def shared_example_groups
|
92
|
-
@shared_example_groups ||= Hash.new { |hash,key| hash[key] = Hash.new }
|
120
|
+
@shared_example_groups ||= Hash.new { |hash, key| hash[key] = Hash.new }
|
93
121
|
end
|
94
122
|
|
95
123
|
def clear
|
@@ -140,7 +168,6 @@ module RSpec
|
|
140
168
|
end
|
141
169
|
end
|
142
170
|
end
|
143
|
-
end
|
144
171
|
|
145
|
-
|
146
|
-
|
172
|
+
instance_eval(&Core::SharedExampleGroup::TopLevelDSL.definitions)
|
173
|
+
end
|