opal-rspec-cj 0.4.4
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.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.gitmodules +15 -0
- data/.travis.yml +13 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile +8 -0
- data/README.md +147 -0
- data/Rakefile +26 -0
- data/config.ru +10 -0
- data/example/Gemfile +4 -0
- data/example/README.md +13 -0
- data/example/Rakefile +8 -0
- data/example/opal/user.rb +11 -0
- data/example/spec/user_spec.rb +15 -0
- data/lib/opal-rspec.rb +2 -0
- data/lib/opal/rspec.rb +20 -0
- data/lib/opal/rspec/rake_task.rb +63 -0
- data/lib/opal/rspec/version.rb +5 -0
- data/opal-rspec.gemspec +21 -0
- data/opal/opal-rspec.rb +1 -0
- data/opal/opal/rspec.rb +25 -0
- data/opal/opal/rspec/async.rb +289 -0
- data/opal/opal/rspec/browser_formatter.rb +188 -0
- data/opal/opal/rspec/fixes.rb +116 -0
- data/opal/opal/rspec/requires.rb +45 -0
- data/opal/opal/rspec/runner.rb +69 -0
- data/opal/opal/rspec/sprockets_runner.rb.erb +11 -0
- data/opal/opal/rspec/text_formatter.rb +74 -0
- data/spec/async_spec.rb +38 -0
- data/spec/example_spec.rb +163 -0
- data/spec/matchers_spec.rb +201 -0
- data/spec/mock_spec.rb +63 -0
- data/spec/named_subject_spec.rb +11 -0
- data/spec/should_syntax_spec.rb +17 -0
- data/vendor/spec_runner.js +50 -0
- data/vendor_lib/rspec-expectations.rb +1 -0
- data/vendor_lib/rspec.rb +3 -0
- data/vendor_lib/rspec/autorun.rb +2 -0
- data/vendor_lib/rspec/core.rb +203 -0
- data/vendor_lib/rspec/core/backport_random.rb +302 -0
- data/vendor_lib/rspec/core/backtrace_formatter.rb +65 -0
- data/vendor_lib/rspec/core/command_line.rb +36 -0
- data/vendor_lib/rspec/core/configuration.rb +1129 -0
- data/vendor_lib/rspec/core/configuration_options.rb +143 -0
- data/vendor_lib/rspec/core/drb_command_line.rb +26 -0
- data/vendor_lib/rspec/core/drb_options.rb +87 -0
- data/vendor_lib/rspec/core/dsl.rb +26 -0
- data/vendor_lib/rspec/core/example.rb +312 -0
- data/vendor_lib/rspec/core/example_group.rb +540 -0
- data/vendor_lib/rspec/core/filter_manager.rb +224 -0
- data/vendor_lib/rspec/core/flat_map.rb +17 -0
- data/vendor_lib/rspec/core/formatters.rb +54 -0
- data/vendor_lib/rspec/core/formatters/base_formatter.rb +291 -0
- data/vendor_lib/rspec/core/formatters/base_text_formatter.rb +307 -0
- data/vendor_lib/rspec/core/formatters/deprecation_formatter.rb +193 -0
- data/vendor_lib/rspec/core/formatters/documentation_formatter.rb +67 -0
- data/vendor_lib/rspec/core/formatters/helpers.rb +82 -0
- data/vendor_lib/rspec/core/formatters/html_formatter.rb +155 -0
- data/vendor_lib/rspec/core/formatters/html_printer.rb +408 -0
- data/vendor_lib/rspec/core/formatters/json_formatter.rb +99 -0
- data/vendor_lib/rspec/core/formatters/progress_formatter.rb +32 -0
- data/vendor_lib/rspec/core/formatters/snippet_extractor.rb +101 -0
- data/vendor_lib/rspec/core/hooks.rb +535 -0
- data/vendor_lib/rspec/core/memoized_helpers.rb +431 -0
- data/vendor_lib/rspec/core/metadata.rb +313 -0
- data/vendor_lib/rspec/core/mocking/with_absolutely_nothing.rb +11 -0
- data/vendor_lib/rspec/core/mocking/with_flexmock.rb +27 -0
- data/vendor_lib/rspec/core/mocking/with_mocha.rb +52 -0
- data/vendor_lib/rspec/core/mocking/with_rr.rb +27 -0
- data/vendor_lib/rspec/core/mocking/with_rspec.rb +27 -0
- data/vendor_lib/rspec/core/option_parser.rb +234 -0
- data/vendor_lib/rspec/core/ordering.rb +154 -0
- data/vendor_lib/rspec/core/pending.rb +110 -0
- data/vendor_lib/rspec/core/project_initializer.rb +88 -0
- data/vendor_lib/rspec/core/rake_task.rb +128 -0
- data/vendor_lib/rspec/core/reporter.rb +132 -0
- data/vendor_lib/rspec/core/ruby_project.rb +44 -0
- data/vendor_lib/rspec/core/runner.rb +97 -0
- data/vendor_lib/rspec/core/shared_context.rb +53 -0
- data/vendor_lib/rspec/core/shared_example_group.rb +146 -0
- data/vendor_lib/rspec/core/shared_example_group/collection.rb +27 -0
- data/vendor_lib/rspec/core/version.rb +7 -0
- data/vendor_lib/rspec/core/warnings.rb +22 -0
- data/vendor_lib/rspec/core/world.rb +131 -0
- data/vendor_lib/rspec/expectations.rb +75 -0
- data/vendor_lib/rspec/expectations/differ.rb +154 -0
- data/vendor_lib/rspec/expectations/errors.rb +9 -0
- data/vendor_lib/rspec/expectations/expectation_target.rb +87 -0
- data/vendor_lib/rspec/expectations/extensions.rb +1 -0
- data/vendor_lib/rspec/expectations/extensions/object.rb +29 -0
- data/vendor_lib/rspec/expectations/fail_with.rb +79 -0
- data/vendor_lib/rspec/expectations/handler.rb +68 -0
- data/vendor_lib/rspec/expectations/syntax.rb +182 -0
- data/vendor_lib/rspec/expectations/version.rb +8 -0
- data/vendor_lib/rspec/matchers.rb +633 -0
- data/vendor_lib/rspec/matchers/built_in.rb +39 -0
- data/vendor_lib/rspec/matchers/built_in/base_matcher.rb +68 -0
- data/vendor_lib/rspec/matchers/built_in/be.rb +213 -0
- data/vendor_lib/rspec/matchers/built_in/be_instance_of.rb +15 -0
- data/vendor_lib/rspec/matchers/built_in/be_kind_of.rb +11 -0
- data/vendor_lib/rspec/matchers/built_in/be_within.rb +55 -0
- data/vendor_lib/rspec/matchers/built_in/change.rb +141 -0
- data/vendor_lib/rspec/matchers/built_in/cover.rb +21 -0
- data/vendor_lib/rspec/matchers/built_in/eq.rb +22 -0
- data/vendor_lib/rspec/matchers/built_in/eql.rb +23 -0
- data/vendor_lib/rspec/matchers/built_in/equal.rb +48 -0
- data/vendor_lib/rspec/matchers/built_in/exist.rb +26 -0
- data/vendor_lib/rspec/matchers/built_in/has.rb +48 -0
- data/vendor_lib/rspec/matchers/built_in/include.rb +61 -0
- data/vendor_lib/rspec/matchers/built_in/match.rb +17 -0
- data/vendor_lib/rspec/matchers/built_in/match_array.rb +51 -0
- data/vendor_lib/rspec/matchers/built_in/raise_error.rb +154 -0
- data/vendor_lib/rspec/matchers/built_in/respond_to.rb +74 -0
- data/vendor_lib/rspec/matchers/built_in/satisfy.rb +30 -0
- data/vendor_lib/rspec/matchers/built_in/start_and_end_with.rb +48 -0
- data/vendor_lib/rspec/matchers/built_in/throw_symbol.rb +94 -0
- data/vendor_lib/rspec/matchers/built_in/yield.rb +297 -0
- data/vendor_lib/rspec/matchers/compatibility.rb +14 -0
- data/vendor_lib/rspec/matchers/configuration.rb +113 -0
- data/vendor_lib/rspec/matchers/dsl.rb +23 -0
- data/vendor_lib/rspec/matchers/generated_descriptions.rb +35 -0
- data/vendor_lib/rspec/matchers/matcher.rb +301 -0
- data/vendor_lib/rspec/matchers/method_missing.rb +12 -0
- data/vendor_lib/rspec/matchers/operator_matcher.rb +99 -0
- data/vendor_lib/rspec/matchers/pretty.rb +70 -0
- data/vendor_lib/rspec/matchers/test_unit_integration.rb +11 -0
- data/vendor_lib/rspec/mocks.rb +100 -0
- data/vendor_lib/rspec/mocks/any_instance/chain.rb +92 -0
- data/vendor_lib/rspec/mocks/any_instance/expectation_chain.rb +47 -0
- data/vendor_lib/rspec/mocks/any_instance/message_chains.rb +75 -0
- data/vendor_lib/rspec/mocks/any_instance/recorder.rb +200 -0
- data/vendor_lib/rspec/mocks/any_instance/stub_chain.rb +45 -0
- data/vendor_lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
- data/vendor_lib/rspec/mocks/argument_list_matcher.rb +104 -0
- data/vendor_lib/rspec/mocks/argument_matchers.rb +264 -0
- data/vendor_lib/rspec/mocks/arity_calculator.rb +66 -0
- data/vendor_lib/rspec/mocks/configuration.rb +111 -0
- data/vendor_lib/rspec/mocks/error_generator.rb +203 -0
- data/vendor_lib/rspec/mocks/errors.rb +12 -0
- data/vendor_lib/rspec/mocks/example_methods.rb +201 -0
- data/vendor_lib/rspec/mocks/extensions/marshal.rb +17 -0
- data/vendor_lib/rspec/mocks/framework.rb +36 -0
- data/vendor_lib/rspec/mocks/instance_method_stasher.rb +112 -0
- data/vendor_lib/rspec/mocks/matchers/have_received.rb +99 -0
- data/vendor_lib/rspec/mocks/matchers/receive.rb +112 -0
- data/vendor_lib/rspec/mocks/matchers/receive_messages.rb +72 -0
- data/vendor_lib/rspec/mocks/message_expectation.rb +643 -0
- data/vendor_lib/rspec/mocks/method_double.rb +209 -0
- data/vendor_lib/rspec/mocks/method_reference.rb +95 -0
- data/vendor_lib/rspec/mocks/mock.rb +7 -0
- data/vendor_lib/rspec/mocks/mutate_const.rb +406 -0
- data/vendor_lib/rspec/mocks/object_reference.rb +90 -0
- data/vendor_lib/rspec/mocks/order_group.rb +82 -0
- data/vendor_lib/rspec/mocks/proxy.rb +269 -0
- data/vendor_lib/rspec/mocks/proxy_for_nil.rb +37 -0
- data/vendor_lib/rspec/mocks/space.rb +95 -0
- data/vendor_lib/rspec/mocks/standalone.rb +3 -0
- data/vendor_lib/rspec/mocks/stub_chain.rb +51 -0
- data/vendor_lib/rspec/mocks/syntax.rb +374 -0
- data/vendor_lib/rspec/mocks/targets.rb +90 -0
- data/vendor_lib/rspec/mocks/test_double.rb +109 -0
- data/vendor_lib/rspec/mocks/verifying_double.rb +77 -0
- data/vendor_lib/rspec/mocks/verifying_message_expecation.rb +60 -0
- data/vendor_lib/rspec/mocks/verifying_proxy.rb +151 -0
- data/vendor_lib/rspec/mocks/version.rb +7 -0
- data/vendor_lib/rspec/support.rb +6 -0
- data/vendor_lib/rspec/support/caller_filter.rb +56 -0
- data/vendor_lib/rspec/support/spec.rb +14 -0
- data/vendor_lib/rspec/support/spec/deprecation_helpers.rb +29 -0
- data/vendor_lib/rspec/support/spec/in_sub_process.rb +40 -0
- data/vendor_lib/rspec/support/spec/stderr_splitter.rb +50 -0
- data/vendor_lib/rspec/support/version.rb +7 -0
- data/vendor_lib/rspec/support/warnings.rb +41 -0
- data/vendor_lib/rspec/version.rb +5 -0
- metadata +268 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Core
|
|
3
|
+
module Pending
|
|
4
|
+
class PendingDeclaredInExample < StandardError; end
|
|
5
|
+
|
|
6
|
+
# If Test::Unit is loaed, we'll use its error as baseclass, so that Test::Unit
|
|
7
|
+
# will report unmet RSpec expectations as failures rather than errors.
|
|
8
|
+
begin
|
|
9
|
+
class PendingExampleFixedError < Test::Unit::AssertionFailedError; end
|
|
10
|
+
rescue
|
|
11
|
+
class PendingExampleFixedError < StandardError; end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
NO_REASON_GIVEN = 'No reason given'
|
|
15
|
+
NOT_YET_IMPLEMENTED = 'Not yet implemented'
|
|
16
|
+
|
|
17
|
+
# @overload pending()
|
|
18
|
+
# @overload pending(message)
|
|
19
|
+
# @overload pending(message, &block)
|
|
20
|
+
#
|
|
21
|
+
# Stops execution of an example, and reports it as pending. Takes an
|
|
22
|
+
# optional message and block.
|
|
23
|
+
#
|
|
24
|
+
# @param [String] message optional message to add to the summary report.
|
|
25
|
+
# @param [Block] block optional block. If it fails, the example is
|
|
26
|
+
# reported as pending. If it executes cleanly the example fails.
|
|
27
|
+
#
|
|
28
|
+
# @example
|
|
29
|
+
#
|
|
30
|
+
# describe "an example" do
|
|
31
|
+
# # reported as "Pending: no reason given"
|
|
32
|
+
# it "is pending with no message" do
|
|
33
|
+
# pending
|
|
34
|
+
# this_does_not_get_executed
|
|
35
|
+
# end
|
|
36
|
+
#
|
|
37
|
+
# # reported as "Pending: something else getting finished"
|
|
38
|
+
# it "is pending with a custom message" do
|
|
39
|
+
# pending("something else getting finished")
|
|
40
|
+
# this_does_not_get_executed
|
|
41
|
+
# end
|
|
42
|
+
#
|
|
43
|
+
# # reported as "Pending: something else getting finished"
|
|
44
|
+
# it "is pending with a failing block" do
|
|
45
|
+
# pending("something else getting finished") do
|
|
46
|
+
# raise "this is the failure"
|
|
47
|
+
# end
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
# # reported as failure, saying we expected the block to fail but
|
|
51
|
+
# # it passed.
|
|
52
|
+
# it "is pending with a passing block" do
|
|
53
|
+
# pending("something else getting finished") do
|
|
54
|
+
# true.should be(true)
|
|
55
|
+
# end
|
|
56
|
+
# end
|
|
57
|
+
# end
|
|
58
|
+
#
|
|
59
|
+
# @note `before(:each)` hooks are eval'd when you use the `pending`
|
|
60
|
+
# method within an example. If you want to declare an example `pending`
|
|
61
|
+
# and bypass the `before` hooks as well, you can pass `:pending => true`
|
|
62
|
+
# to the `it` method:
|
|
63
|
+
#
|
|
64
|
+
# it "does something", :pending => true do
|
|
65
|
+
# # ...
|
|
66
|
+
# end
|
|
67
|
+
#
|
|
68
|
+
# or pass `:pending => "something else getting finished"` to add a
|
|
69
|
+
# message to the summary report:
|
|
70
|
+
#
|
|
71
|
+
# it "does something", :pending => "something else getting finished" do
|
|
72
|
+
# # ...
|
|
73
|
+
# end
|
|
74
|
+
def pending(*args)
|
|
75
|
+
current_example = RSpec.current_example
|
|
76
|
+
|
|
77
|
+
return self.class.before(:each) { pending(*args) } unless current_example
|
|
78
|
+
|
|
79
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
80
|
+
message = args.first || NO_REASON_GIVEN
|
|
81
|
+
|
|
82
|
+
if options[:unless] || (options.has_key?(:if) && !options[:if])
|
|
83
|
+
return block_given? ? yield : nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
current_example.metadata[:pending] = true
|
|
87
|
+
current_example.metadata[:execution_result][:pending_message] = message
|
|
88
|
+
current_example.execution_result[:pending_fixed] = false
|
|
89
|
+
if block_given?
|
|
90
|
+
begin
|
|
91
|
+
result = begin
|
|
92
|
+
yield
|
|
93
|
+
current_example.example_group_instance.instance_eval { verify_mocks_for_rspec }
|
|
94
|
+
end
|
|
95
|
+
current_example.metadata[:pending] = false
|
|
96
|
+
rescue Exception => e
|
|
97
|
+
current_example.execution_result[:exception] = e
|
|
98
|
+
ensure
|
|
99
|
+
teardown_mocks_for_rspec
|
|
100
|
+
end
|
|
101
|
+
if result
|
|
102
|
+
current_example.execution_result[:pending_fixed] = true
|
|
103
|
+
raise PendingExampleFixedError.new
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
raise PendingDeclaredInExample.new(message)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Core
|
|
3
|
+
class ProjectInitializer
|
|
4
|
+
def initialize(arg=nil)
|
|
5
|
+
@arg = arg
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def run
|
|
9
|
+
create_spec_helper_file
|
|
10
|
+
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
|
+
end
|
|
17
|
+
|
|
18
|
+
def create_dot_rspec_file
|
|
19
|
+
if File.exist?('.rspec')
|
|
20
|
+
report_exists('.rspec')
|
|
21
|
+
else
|
|
22
|
+
report_creating('.rspec')
|
|
23
|
+
File.open('.rspec','w') do |f|
|
|
24
|
+
f.write <<-CONTENT
|
|
25
|
+
--color
|
|
26
|
+
--format progress
|
|
27
|
+
CONTENT
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def create_spec_helper_file
|
|
33
|
+
if File.exist?('spec/spec_helper.rb')
|
|
34
|
+
report_exists('spec/spec_helper.rb')
|
|
35
|
+
else
|
|
36
|
+
report_creating('spec/spec_helper.rb')
|
|
37
|
+
FileUtils.mkdir_p('spec')
|
|
38
|
+
File.open('spec/spec_helper.rb','w') do |f|
|
|
39
|
+
f.write <<-CONTENT
|
|
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
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
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
|
+
def report_exists(file)
|
|
79
|
+
puts " exist #{file}"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def report_creating(file)
|
|
83
|
+
puts " create #{file}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
require 'rspec/support/warnings'
|
|
2
|
+
require 'rake'
|
|
3
|
+
require 'rake/tasklib'
|
|
4
|
+
require 'shellwords'
|
|
5
|
+
|
|
6
|
+
module RSpec
|
|
7
|
+
module Core
|
|
8
|
+
class RakeTask < ::Rake::TaskLib
|
|
9
|
+
include ::Rake::DSL if defined?(::Rake::DSL)
|
|
10
|
+
|
|
11
|
+
# Name of task.
|
|
12
|
+
#
|
|
13
|
+
# default:
|
|
14
|
+
# :spec
|
|
15
|
+
attr_accessor :name
|
|
16
|
+
|
|
17
|
+
# Glob pattern to match files.
|
|
18
|
+
#
|
|
19
|
+
# default:
|
|
20
|
+
# 'spec/**/*_spec.rb'
|
|
21
|
+
attr_accessor :pattern
|
|
22
|
+
|
|
23
|
+
# Whether or not to fail Rake when an error occurs (typically when examples fail).
|
|
24
|
+
#
|
|
25
|
+
# default:
|
|
26
|
+
# true
|
|
27
|
+
attr_accessor :fail_on_error
|
|
28
|
+
|
|
29
|
+
# A message to print to stderr when there are failures.
|
|
30
|
+
attr_accessor :failure_message
|
|
31
|
+
|
|
32
|
+
# Use verbose output. If this is set to true, the task will print the
|
|
33
|
+
# executed spec command to stdout.
|
|
34
|
+
#
|
|
35
|
+
# default:
|
|
36
|
+
# true
|
|
37
|
+
attr_accessor :verbose
|
|
38
|
+
|
|
39
|
+
# Command line options to pass to ruby.
|
|
40
|
+
#
|
|
41
|
+
# default:
|
|
42
|
+
# nil
|
|
43
|
+
attr_accessor :ruby_opts
|
|
44
|
+
|
|
45
|
+
# Path to rspec
|
|
46
|
+
#
|
|
47
|
+
# default:
|
|
48
|
+
# 'rspec'
|
|
49
|
+
attr_accessor :rspec_path
|
|
50
|
+
|
|
51
|
+
# Command line options to pass to rspec.
|
|
52
|
+
#
|
|
53
|
+
# default:
|
|
54
|
+
# nil
|
|
55
|
+
attr_accessor :rspec_opts
|
|
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
|
+
def initialize(*args, &task_block)
|
|
70
|
+
setup_ivars(args)
|
|
71
|
+
|
|
72
|
+
desc "Run RSpec code examples" unless ::Rake.application.last_comment
|
|
73
|
+
|
|
74
|
+
task name, *args do |_, task_args|
|
|
75
|
+
RakeFileUtils.send(:verbose, verbose) do
|
|
76
|
+
task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
|
|
77
|
+
run_task verbose
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def setup_ivars(args)
|
|
83
|
+
@name = args.shift || :spec
|
|
84
|
+
@ruby_opts, @rspec_opts = nil, nil, nil
|
|
85
|
+
@verbose, @fail_on_error = true, true
|
|
86
|
+
|
|
87
|
+
@rspec_path = 'rspec'
|
|
88
|
+
@pattern = './spec{,/*/**}/*_spec.rb'
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def run_task(verbose)
|
|
92
|
+
command = spec_command
|
|
93
|
+
|
|
94
|
+
begin
|
|
95
|
+
puts command if verbose
|
|
96
|
+
success = system(command)
|
|
97
|
+
rescue
|
|
98
|
+
puts failure_message if failure_message
|
|
99
|
+
end
|
|
100
|
+
abort("#{command} failed") if fail_on_error unless success
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
def files_to_run
|
|
106
|
+
if ENV['SPEC']
|
|
107
|
+
FileList[ ENV['SPEC'] ].sort
|
|
108
|
+
else
|
|
109
|
+
FileList[ pattern ].sort.map(&:shellescape)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def spec_command
|
|
114
|
+
cmd_parts = []
|
|
115
|
+
cmd_parts << RUBY
|
|
116
|
+
cmd_parts << ruby_opts
|
|
117
|
+
cmd_parts << "-S" << rspec_path
|
|
118
|
+
cmd_parts << files_to_run
|
|
119
|
+
cmd_parts << rspec_opts
|
|
120
|
+
cmd_parts.flatten.reject(&blank).join(" ")
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def blank
|
|
124
|
+
lambda {|s| s.nil? || s == ""}
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
module RSpec::Core
|
|
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
|
+
|
|
7
|
+
def initialize(configuration, *formatters)
|
|
8
|
+
@configuration = configuration
|
|
9
|
+
@listeners = Hash.new { |h,k| h[k] = [] }
|
|
10
|
+
formatters.each do |formatter|
|
|
11
|
+
register_listener(formatter, *NOTIFICATIONS)
|
|
12
|
+
end
|
|
13
|
+
@example_count = @failure_count = @pending_count = 0
|
|
14
|
+
@duration = @start = nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @api
|
|
18
|
+
# @param [Object] An obect that wishes to be notified of reporter events
|
|
19
|
+
# @param [Array] Array of symbols represents the events a listener wishes to subscribe too
|
|
20
|
+
#
|
|
21
|
+
# Registers a listener to a list of notifications. The reporter will send notification of
|
|
22
|
+
# events to all registered listeners
|
|
23
|
+
def register_listener(listener, *notifications)
|
|
24
|
+
notifications.each do |notification|
|
|
25
|
+
@listeners[notification.to_sym] << listener if listener.respond_to?(notification)
|
|
26
|
+
end
|
|
27
|
+
true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def registered_listeners(notification)
|
|
31
|
+
@listeners[notification]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @api
|
|
35
|
+
# @overload report(count, &block)
|
|
36
|
+
# @overload report(count, &block)
|
|
37
|
+
# @param [Integer] count the number of examples being run
|
|
38
|
+
# @param [Block] block yields itself for further reporting.
|
|
39
|
+
#
|
|
40
|
+
# Initializes the report run and yields itself for further reporting. The
|
|
41
|
+
# block is required, so that the reporter can manage cleaning up after the
|
|
42
|
+
# run.
|
|
43
|
+
#
|
|
44
|
+
# @example
|
|
45
|
+
#
|
|
46
|
+
# reporter.report(group.examples.size) do |r|
|
|
47
|
+
# example_groups.map {|g| g.run(r) }
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
def report(expected_example_count)
|
|
51
|
+
start(expected_example_count)
|
|
52
|
+
begin
|
|
53
|
+
yield self
|
|
54
|
+
ensure
|
|
55
|
+
finish
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def start(expected_example_count)
|
|
60
|
+
@start = RSpec::Core::Time.now
|
|
61
|
+
notify :start, expected_example_count
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def message(message)
|
|
65
|
+
notify :message, message
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def example_group_started(group)
|
|
69
|
+
notify :example_group_started, group unless group.descendant_filtered_examples.empty?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def example_group_finished(group)
|
|
73
|
+
notify :example_group_finished, group unless group.descendant_filtered_examples.empty?
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def example_started(example)
|
|
77
|
+
@example_count += 1
|
|
78
|
+
notify :example_started, example
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def example_passed(example)
|
|
82
|
+
notify :example_passed, example
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def example_failed(example)
|
|
86
|
+
@failure_count += 1
|
|
87
|
+
notify :example_failed, example
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def example_pending(example)
|
|
91
|
+
@pending_count += 1
|
|
92
|
+
notify :example_pending, example
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def deprecation(message)
|
|
96
|
+
notify :deprecation, message
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def finish
|
|
100
|
+
begin
|
|
101
|
+
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 if seed_used?
|
|
108
|
+
ensure
|
|
109
|
+
notify :close
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
alias_method :abort, :finish
|
|
114
|
+
|
|
115
|
+
def stop
|
|
116
|
+
@duration = (RSpec::Core::Time.now - @start).to_f if @start
|
|
117
|
+
notify :stop
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def notify(event, *args, &block)
|
|
121
|
+
registered_listeners(event).each do |formatter|
|
|
122
|
+
formatter.send(event, *args, &block)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
private
|
|
127
|
+
|
|
128
|
+
def seed_used?
|
|
129
|
+
@configuration.seed && @configuration.seed_used?
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|