rspec 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +78 -1
- data/EXAMPLES.rd +8 -5
- data/README +1 -0
- data/Rakefile +1 -1
- data/examples/pending_example.rb +20 -0
- data/lib/autotest/rspec.rb +46 -18
- data/lib/spec/dsl.rb +1 -0
- data/lib/spec/dsl/behaviour.rb +37 -27
- data/lib/spec/dsl/behaviour_callbacks.rb +4 -0
- data/lib/spec/dsl/behaviour_eval.rb +27 -16
- data/lib/spec/dsl/behaviour_factory.rb +2 -2
- data/lib/spec/dsl/composite_proc_builder.rb +9 -4
- data/lib/spec/dsl/configuration.rb +20 -4
- data/lib/spec/dsl/description.rb +7 -0
- data/lib/spec/dsl/errors.rb +9 -0
- data/lib/spec/dsl/example.rb +18 -10
- data/lib/spec/matchers/have.rb +10 -13
- data/lib/spec/matchers/operator_matcher.rb +3 -3
- data/lib/spec/matchers/raise_error.rb +8 -3
- data/lib/spec/mocks/error_generator.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +11 -0
- data/lib/spec/mocks/methods.rb +9 -5
- data/lib/spec/mocks/proxy.rb +13 -9
- data/lib/spec/rake/spectask.rb +80 -38
- data/lib/spec/runner/backtrace_tweaker.rb +2 -1
- data/lib/spec/runner/behaviour_runner.rb +37 -16
- data/lib/spec/runner/formatter/base_formatter.rb +23 -15
- data/lib/spec/runner/formatter/base_text_formatter.rb +39 -11
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +7 -3
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -3
- data/lib/spec/runner/formatter/html_formatter.rb +32 -25
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +6 -5
- data/lib/spec/runner/formatter/rdoc_formatter.rb +6 -6
- data/lib/spec/runner/formatter/specdoc_formatter.rb +7 -6
- data/lib/spec/runner/option_parser.rb +6 -5
- data/lib/spec/runner/options.rb +60 -43
- data/lib/spec/runner/reporter.rb +17 -6
- data/lib/spec/runner/spec_parser.rb +1 -1
- data/lib/spec/translator.rb +8 -0
- data/lib/spec/version.rb +3 -3
- data/plugins/mock_frameworks/flexmock.rb +14 -18
- data/plugins/mock_frameworks/mocha.rb +0 -2
- data/plugins/mock_frameworks/rr.rb +21 -0
- data/spec/autotest/discover_spec.rb +19 -0
- data/spec/autotest/rspec_spec.rb +257 -0
- data/spec/autotest_helper.rb +4 -0
- data/spec/spec/dsl/behaviour_eval_spec.rb +30 -0
- data/spec/spec/dsl/behaviour_factory_spec.rb +18 -0
- data/spec/spec/dsl/behaviour_spec.rb +95 -58
- data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -13
- data/spec/spec/dsl/configuration_spec.rb +6 -1
- data/spec/spec/dsl/description_spec.rb +9 -1
- data/spec/spec/dsl/example_class_spec.rb +3 -3
- data/spec/spec/dsl/example_instance_spec.rb +26 -28
- data/spec/spec/dsl/example_matcher_spec.rb +91 -0
- data/spec/spec/dsl/shared_behaviour_spec.rb +24 -0
- data/spec/spec/expectations/extensions/object_spec.rb +2 -2
- data/spec/spec/expectations/fail_with_spec.rb +2 -2
- data/spec/spec/matchers/have_spec.rb +1 -1
- data/spec/spec/matchers/operator_matcher_spec.rb +10 -10
- data/spec/spec/matchers/raise_error_spec.rb +38 -0
- data/spec/spec/mocks/argument_expectation_spec.rb +18 -14
- data/spec/spec/mocks/at_most_spec.rb +1 -1
- data/spec/spec/mocks/bug_report_11545_spec.rb +31 -0
- data/spec/spec/mocks/partial_mock_spec.rb +33 -1
- data/spec/spec/runner/behaviour_runner_spec.rb +72 -49
- data/spec/spec/runner/command_line_spec.rb +1 -1
- data/spec/spec/runner/context_matching_spec.rb +10 -10
- data/spec/spec/runner/drb_command_line_spec.rb +62 -59
- data/spec/spec/runner/extensions/bug_report_10577_spec.rb +35 -0
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +15 -2
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +3 -3
- data/spec/spec/runner/formatter/html_formatter_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +14 -15
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +42 -9
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +40 -40
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +55 -49
- data/spec/spec/runner/option_parser_spec.rb +16 -15
- data/spec/spec/runner/options_spec.rb +64 -31
- data/spec/spec/runner/reporter_spec.rb +67 -15
- data/spec/spec/spec_classes.rb +9 -1
- data/spec/spec/translator_spec.rb +48 -0
- data/spec/spec_helper.rb +5 -2
- metadata +13 -6
- data/examples/not_yet_implemented_spec.rb +0 -12
- data/spec/spec/runner/example_matcher_spec.rb +0 -127
data/CHANGES
CHANGED
@@ -1,7 +1,84 @@
|
|
1
|
+
== Version 1.0.6
|
2
|
+
|
3
|
+
The "holy cow, batman, it's been a long time since we released and there are a ton of bug
|
4
|
+
fixes, patches and even new features" release.
|
5
|
+
|
6
|
+
Warning: Spec::Rails users: In fixing 11508, we've removed the raise_controller_errors method. As long as you
|
7
|
+
follow the upgrade instructions and run 'script/generate rspec' you'll be fine, but if you skip this
|
8
|
+
step you need to manually go into spec_helper.rb and remove the call to that method (if present - it
|
9
|
+
might not be if you haven't upgraded in a while).
|
10
|
+
|
11
|
+
Warning: Implementors of custom formatters. Formatters will now be sent an Example object instead of just a
|
12
|
+
String for #example_started, #example_passed and #example_failed. In certain scenarios
|
13
|
+
(Spec::Ui with Spec::Distributed), the formatter must ask the Example for its sequence number instead of
|
14
|
+
keeping track of a sequence number internal to the formatter. Most of you shouldn't need to upgrade
|
15
|
+
your formatters though - the Example#to_s method returns the example name/description, so you should be
|
16
|
+
able to use the passed Example instance as if it were a String.
|
17
|
+
|
18
|
+
* Applied [#12986] Autotest Specs + Refactoring (Patch from Scott Tayler)
|
19
|
+
* Added a #close method to formatters, which allows them to gracefully close streams.
|
20
|
+
* Applied [#12935] Remove requirement that mocha must be installed as a gem when used as mocking framework. (Patch from Ryan Kinderman).
|
21
|
+
* Fixed [#12893] RSpec's Autotest should work with rspec's trunk
|
22
|
+
* Fixed [#12865] Partial mock error when object has an @options instance var
|
23
|
+
* Applied [#12701] Allow checking of content captured with content_for in view specs (Patch from Jens Kr�mer)
|
24
|
+
* Applied [#12817] Cannot include same shared behaviour when required with absolute paths (Patch from Ian Leitch)
|
25
|
+
* Applied [#12719] rspec_on_rails should not include pagination helper (Patch from Matthijs Langenberg)
|
26
|
+
* Fixed [#12714] helper spec not finding rails core helpers
|
27
|
+
* Applied [#12611] should_not redirect_to implementation (Patch from Yurii Rashkovskii)
|
28
|
+
* Applied [#12682] Not correctly aliasing original 'stub!' and 'should_receive' methods for ApplicationController (Patch from Matthijs Langenberg)
|
29
|
+
* Disabled controller.should_receive(:render) and controller.stub!(:render). Use expect_render or stub_render instead.
|
30
|
+
* Applied [#12484] Allow a Behaviour's Description to flow through to the Formatter (Patch from Bob Cotton)
|
31
|
+
* Fixed [#12448] The spec:plugins rake task from rspec_on_rails should ignore specs from the rspec_on_rails plugin
|
32
|
+
* Applied [#12300] rr integration (patch from Kyle Hargraves)
|
33
|
+
* Implemented [#12284] mock_with :rr (integration with RR mock framework: http://rubyforge.org/projects/pivotalrb/)
|
34
|
+
* Applied [#12237] (tiny) added full path to mate in switch_command (Patch from Carl Porth)
|
35
|
+
* Formatters will now be sent an Example object instead of just a String for certain methods
|
36
|
+
* All Spec::Rake::SpecTask attributes can now be procs, which allows for lazy evaluation.
|
37
|
+
* Changed the Spec::Ui interfaces slightly. See examples.
|
38
|
+
* Applied [#12174] mishandling of paths with spaces in spec_mate switch_command (Patch from Carl Porth)
|
39
|
+
* Implemented [#8315] File "Go to..." functionality
|
40
|
+
* Applied [#11917] Cleaner Spec::Ui error for failed Selenium connection (Patch from Ian Dees)
|
41
|
+
* Applied [#11888] rspec_on_rails spews out warnings when assert_select is used with an XML response (Patch from Ian Leitch)
|
42
|
+
* Applied [#12010] Nicer failure message formatting (Patch from Wincent Colaiuta)
|
43
|
+
* Applied [#12156] smooth open mate patch (Patch from Ienaga Eiji)
|
44
|
+
* Applied [#10577] Rails with Oracle breaks 0.9.2. (Patch from Sinclair Bain)
|
45
|
+
* Fixed [#12079] auto-generated example name incomplete: should have 1 error on ....]
|
46
|
+
* Applied [#12066] Docfix for mocks/mocks.page (Patch from Kyle Hargraves)
|
47
|
+
* Fixed [#11891] script/generate rspec_controller fails to create appropriate views (from templates) on edge rails
|
48
|
+
* Applied [#11921] Adds the correct controller_name from derived_controller_name() to the ViewExampleController (Patch from Eloy Duran)
|
49
|
+
* Fixed [#11903] config.include with behaviour_type 'hash' does not work
|
50
|
+
* Examples without blocks and pending is now reported with a P instead of a *
|
51
|
+
* Pending blocks that now pass are rendered blue
|
52
|
+
* New behaviour for after: If an after block raises an error, the other ones will still run instead of bailing at the first.
|
53
|
+
* Made it possible to run spec from RSpec.tmbundle with --drb against a Rails spec_server.
|
54
|
+
* Applied [#11868] Add ability for pending to optionally hold a failing block and to fail when it passes (Patch from Bob Cotton)
|
55
|
+
* Fixed [#11843] watir_behaviour missing from spec_ui gem
|
56
|
+
* Added 'switch between source and spec file' command in Spec::Mate (based on code from Ruy Asan)
|
57
|
+
* Applied [#11509] Documentation - RSpec requires hpricot
|
58
|
+
* Applied [#11807] Daemonize spec_server and rake tasks to manage them. (patch from Kyosuke MOROHASHI)
|
59
|
+
* Added pending(message) method
|
60
|
+
* Fixed [#11777] should render_template doesn't check paths correctly
|
61
|
+
* Fixed [#11749] Use of 'rescue => e' does not catch all exceptions
|
62
|
+
* Fixed [#11793] should raise_error('with a message') does not work correctly
|
63
|
+
* Fixed [#11774] Mocks should respond to :kind_of? in the same way they respond to :is_a?
|
64
|
+
* Fixed [#11508] Exceptions are not raised for Controller Specs (removed experimental raise_controller_errors)
|
65
|
+
* Applied [#11615] Partial mock methods give ambiguous failures when given a method name as a String (Patch from Jay Phillips)
|
66
|
+
* Fixed [#11545] Rspec doesn't handle should_receive on ActiveRecord associations (Patch from Ian White)
|
67
|
+
* Fixed [#11514] configuration.use_transactional_fixtures is ALWAYS true, regardless of assignment
|
68
|
+
* Improved generated RESTful controller examples to cover both successful and unsuccessful POST and PUT
|
69
|
+
* Changed TextMate snippets for controllers to pass controller class names to #describe rather than controller_name.
|
70
|
+
* Changed TextMate snippets for mocks to use no_args() and any_args() instead of the deprecated Symbols.
|
71
|
+
* Applied [#11500] Documentation: no rails integration specs in 1.0
|
72
|
+
* Renamed SpecMate's shortcuts for running all examples and focused examples to avoid conflicts (CMD-d and CMD-i)
|
73
|
+
* Added a TextMate snippet for custom matchers, lifted from Geoffrey Grosenbach's RSpec peepcode show.
|
74
|
+
* The translator translates mock constraints to the new matchers that were introduced in 1.0.4
|
75
|
+
* Documented environment variables for Spec::Rake::SpecTask. Renamed SPECOPTS and RCOVOPTS to SPEC_OPTS and RCOV_OPTS.
|
76
|
+
* Fixed [#10534] Windows: undefined method 'controller_name'
|
77
|
+
|
1
78
|
== Version 1.0.5
|
2
79
|
Bug fixes. Autotest plugin tweaks.
|
3
80
|
|
4
|
-
* Fixed [#11378] fix to 10814 broke drb
|
81
|
+
* Fixed [#11378] fix to 10814 broke drb (re-opened #10814)
|
5
82
|
* Fixed [#11223] Unable to access flash from rails helper specs
|
6
83
|
* Fixed [#11337] autotest runs specs redundantly
|
7
84
|
* Fixed [#11258] windows: autotest won't run
|
data/EXAMPLES.rd
CHANGED
@@ -43,13 +43,16 @@
|
|
43
43
|
# a mock
|
44
44
|
# * should be able to mock the same message twice w/ different args
|
45
45
|
# * should be able to mock the same message twice w/ different args in reverse order
|
46
|
-
# Stack (not implemented features)
|
47
|
-
# * should transform to xml using #to_xml [NOT IMPLEMENTED]
|
48
|
-
# * should convert from xml using #from_xml [NOT IMPLEMENTED]
|
49
46
|
# A partial mock
|
50
47
|
# * should work at the class level
|
51
48
|
# * should revert to the original after each spec
|
52
49
|
# * can be mocked w/ ordering
|
50
|
+
# pending example (using pending method)
|
51
|
+
# * pending example (using pending method) should be reported as "PENDING: for some reason" [PENDING: for some reason]
|
52
|
+
# pending example (with no block)
|
53
|
+
# * pending example (with no block) should be reported as "PENDING: Not Yet Implemented" [PENDING: Not Yet Implemented]
|
54
|
+
# pending example (with block for pending)
|
55
|
+
# * pending example (with block for pending) should have a failing block, passed to pending, reported as "PENDING: for some reason" [PENDING: for some reason]
|
53
56
|
# BDD framework
|
54
57
|
# * should be adopted quickly
|
55
58
|
# * should be intuitive
|
@@ -103,6 +106,6 @@
|
|
103
106
|
# * RSpec should be able to access TestCase methods
|
104
107
|
# * RSpec should be able to accept included modules
|
105
108
|
|
106
|
-
Finished in 0.
|
109
|
+
Finished in 0.030625 seconds
|
107
110
|
|
108
|
-
|
111
|
+
78 examples, 0 failures, 3 pending
|
data/README
CHANGED
@@ -46,6 +46,7 @@ In order to run RSpec's full suite of specs (rake pre_commit) you must install t
|
|
46
46
|
* win32console # Required by the --colour switch if you're on Windows
|
47
47
|
* meta_project # Required in order to make releases at RubyForge
|
48
48
|
* heckle # Required if you use the --heckle switch
|
49
|
+
* hpricot # Used for parsing HTML from the HTML output formatter in RSpec's own specs
|
49
50
|
|
50
51
|
Once those are all installed, you should be able to run the suite with the following steps:
|
51
52
|
|
data/Rakefile
CHANGED
@@ -107,7 +107,7 @@ spec = Gem::Specification.new do |s|
|
|
107
107
|
s.bindir = 'bin'
|
108
108
|
s.executables = ['spec', 'spec_translator']
|
109
109
|
s.default_executable = 'spec'
|
110
|
-
s.author =
|
110
|
+
s.author = "RSpec Development Team"
|
111
111
|
s.email = "rspec-devel@rubyforge.org"
|
112
112
|
s.homepage = "http://rspec.rubyforge.org"
|
113
113
|
s.rubyforge_project = "rspec"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "pending example (using pending method)" do
|
4
|
+
it %Q|should be reported as "PENDING: for some reason"| do
|
5
|
+
pending("for some reason")
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "pending example (with no block)" do
|
10
|
+
it %Q|should be reported as "PENDING: Not Yet Implemented"|
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "pending example (with block for pending)" do
|
14
|
+
it %Q|should have a failing block, passed to pending, reported as "PENDING: for some reason"| do
|
15
|
+
pending("for some reason") do
|
16
|
+
raise "some reason"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
data/lib/autotest/rspec.rb
CHANGED
@@ -1,30 +1,42 @@
|
|
1
1
|
require 'autotest'
|
2
2
|
|
3
|
+
class RspecCommandError < StandardError; end
|
4
|
+
|
3
5
|
class Autotest::Rspec < Autotest
|
6
|
+
|
7
|
+
def initialize(kernel=Kernel, separator=File::SEPARATOR, alt_separator=File::ALT_SEPARATOR) # :nodoc:
|
8
|
+
super()
|
9
|
+
@kernel, @separator, @alt_separator = kernel, separator, alt_separator
|
10
|
+
@spec_command = spec_command
|
4
11
|
|
5
|
-
|
6
|
-
|
7
|
-
|
12
|
+
# watch out: Ruby bug (1.8.6):
|
13
|
+
# %r(/) != /\//
|
14
|
+
# since Ruby compares the REGEXP source, not the resulting pattern
|
8
15
|
@test_mappings = {
|
9
|
-
%r%^spec/.*\.rb$% => proc { |filename, _|
|
10
|
-
filename
|
11
|
-
},
|
12
|
-
%r%^lib/(.*)\.rb$% => proc { |_, m|
|
13
|
-
["spec/#{m[1]}_spec.rb"]
|
16
|
+
%r%^spec/.*\.rb$% => kernel.proc { |filename, _|
|
17
|
+
filename
|
14
18
|
},
|
15
|
-
%r%^
|
16
|
-
|
19
|
+
%r%^lib/(.*)\.rb$% => kernel.proc { |_, m|
|
20
|
+
["spec/#{m[1]}_spec.rb"]
|
17
21
|
},
|
22
|
+
%r%^spec/(spec_helper|shared/.*)\.rb$% => kernel.proc {
|
23
|
+
files_matching %r%^spec/.*_spec\.rb$%
|
24
|
+
}
|
18
25
|
}
|
19
26
|
end
|
20
27
|
|
21
28
|
def tests_for_file(filename)
|
22
29
|
super.select { |f| @files.has_key? f }
|
23
30
|
end
|
31
|
+
|
32
|
+
alias :specs_for_file :tests_for_file
|
33
|
+
|
34
|
+
def failed_results(results)
|
35
|
+
results.scan(/^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m)
|
36
|
+
end
|
24
37
|
|
25
38
|
def handle_results(results)
|
26
|
-
|
27
|
-
@files_to_test = consolidate_failures failed
|
39
|
+
@files_to_test = consolidate_failures failed_results(results)
|
28
40
|
unless @files_to_test.empty? then
|
29
41
|
hook :red
|
30
42
|
else
|
@@ -54,14 +66,30 @@ class Autotest::Rspec < Autotest
|
|
54
66
|
File.exist?("spec/spec.opts") ? "-O spec/spec.opts " : ""
|
55
67
|
end
|
56
68
|
|
69
|
+
# Finds the proper spec command to use. Precendence
|
70
|
+
# is set in the lazily-evaluated method spec_commands. Alias + Override
|
71
|
+
# that in ~/.autotest to provide a different spec command
|
72
|
+
# then the default paths provided.
|
57
73
|
def spec_command
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
74
|
+
spec_commands.each do |command|
|
75
|
+
if File.exists?(command)
|
76
|
+
return @alt_separator ? (command.gsub @separator, @alt_separator) : command
|
77
|
+
end
|
62
78
|
end
|
63
|
-
|
64
|
-
|
79
|
+
|
80
|
+
raise RspecCommandError, "No spec command could be found!"
|
81
|
+
end
|
82
|
+
|
83
|
+
# Autotest will look for spec commands in the following
|
84
|
+
# locations, in this order:
|
85
|
+
#
|
86
|
+
# * bin/spec
|
87
|
+
# * default spec bin/loader installed in Rubygems
|
88
|
+
def spec_commands
|
89
|
+
[
|
90
|
+
File.join('bin', 'spec'),
|
91
|
+
File.join(Config::CONFIG['bindir'], 'spec')
|
92
|
+
]
|
65
93
|
end
|
66
94
|
|
67
95
|
end
|
data/lib/spec/dsl.rb
CHANGED
data/lib/spec/dsl/behaviour.rb
CHANGED
@@ -7,7 +7,7 @@ module Spec
|
|
7
7
|
class << self
|
8
8
|
def add_shared_behaviour(behaviour)
|
9
9
|
return if behaviour.equal?(found_behaviour = find_shared_behaviour(behaviour.description))
|
10
|
-
return if found_behaviour and behaviour.description[:spec_path] == found_behaviour.description[:spec_path]
|
10
|
+
return if found_behaviour and File.expand_path(behaviour.description[:spec_path]) == File.expand_path(found_behaviour.description[:spec_path])
|
11
11
|
raise ArgumentError.new("Shared Behaviour '#{behaviour.description}' already exists") if found_behaviour
|
12
12
|
shared_behaviours << behaviour
|
13
13
|
end
|
@@ -63,18 +63,22 @@ module Spec
|
|
63
63
|
|
64
64
|
def run(reporter, dry_run=false, reverse=false, timeout=nil)
|
65
65
|
raise "shared behaviours should never run" if shared?
|
66
|
-
|
66
|
+
# TODO - change add_behaviour to add_description ??????
|
67
|
+
reporter.add_behaviour(@description)
|
67
68
|
prepare_execution_context_class
|
68
|
-
|
69
|
+
before_all_errors = run_before_all(reporter, dry_run)
|
69
70
|
|
70
|
-
|
71
|
+
exs = reverse ? examples.reverse : examples
|
71
72
|
example_execution_context = nil
|
72
73
|
|
73
|
-
if
|
74
|
-
|
74
|
+
if before_all_errors.empty?
|
75
|
+
exs.each do |example|
|
75
76
|
example_execution_context = execution_context(example)
|
76
77
|
example_execution_context.copy_instance_variables_from(@before_and_after_all_context_instance) unless before_all_proc(behaviour_type).nil?
|
77
|
-
|
78
|
+
|
79
|
+
befores = before_each_proc(behaviour_type) {|e| raise e}
|
80
|
+
afters = after_each_proc(behaviour_type)
|
81
|
+
example.run(reporter, befores, afters, dry_run, example_execution_context, timeout)
|
78
82
|
end
|
79
83
|
end
|
80
84
|
|
@@ -115,20 +119,25 @@ module Spec
|
|
115
119
|
|
116
120
|
# Includes modules in the Behaviour (the <tt>describe</tt> block).
|
117
121
|
def include(*args)
|
118
|
-
args
|
119
|
-
modules, options = args_and_options(*args)
|
120
|
-
required_behaviour_type = options[:behaviour_type]
|
121
|
-
if required_behaviour_type.nil? || required_behaviour_type.to_sym == behaviour_type.to_sym
|
122
|
-
@eval_module.include(*modules)
|
123
|
-
end
|
122
|
+
@eval_module.include(*args)
|
124
123
|
end
|
125
124
|
|
126
125
|
def behaviour_type #:nodoc:
|
127
126
|
@description[:behaviour_type]
|
128
127
|
end
|
128
|
+
|
129
|
+
# Sets the #number on each Example and returns the next number
|
130
|
+
def set_sequence_numbers(number, reverse) #:nodoc:
|
131
|
+
exs = reverse ? examples.reverse : examples
|
132
|
+
exs.each do |example|
|
133
|
+
example.number = number
|
134
|
+
number += 1
|
135
|
+
end
|
136
|
+
number
|
137
|
+
end
|
129
138
|
|
130
139
|
protected
|
131
|
-
|
140
|
+
|
132
141
|
# Messages that this class does not understand
|
133
142
|
# are passed directly to the @eval_module.
|
134
143
|
def method_missing(sym, *args, &block)
|
@@ -143,16 +152,15 @@ module Spec
|
|
143
152
|
end
|
144
153
|
|
145
154
|
def weave_in_included_modules
|
146
|
-
mods =
|
147
|
-
|
155
|
+
mods = [@eval_module]
|
156
|
+
mods << included_modules.dup
|
157
|
+
mods << Spec::Runner.configuration.modules_for(behaviour_type)
|
148
158
|
execution_context_class.class_eval do
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
mods.each
|
154
|
-
include mod
|
155
|
-
end
|
159
|
+
# WARNING - the following can be executed in the context of any
|
160
|
+
# class, and should never pass more than one module to include
|
161
|
+
# even though we redefine include in this class. This is NOT
|
162
|
+
# tested anywhere, hence this comment.
|
163
|
+
mods.flatten.each {|mod| include mod}
|
156
164
|
end
|
157
165
|
end
|
158
166
|
|
@@ -166,10 +174,12 @@ module Spec
|
|
166
174
|
begin
|
167
175
|
@before_and_after_all_context_instance = execution_context(nil)
|
168
176
|
@before_and_after_all_context_instance.instance_eval(&before_all_proc(behaviour_type))
|
169
|
-
rescue => e
|
177
|
+
rescue Exception => e
|
170
178
|
errors << e
|
171
179
|
location = "before(:all)"
|
172
|
-
|
180
|
+
# The easiest is to report this as an example failure. We don't have an Example
|
181
|
+
# at this point, so we'll just create a placeholder.
|
182
|
+
reporter.example_finished(Example.new(location), e, location) if reporter
|
173
183
|
end
|
174
184
|
end
|
175
185
|
errors
|
@@ -180,9 +190,9 @@ module Spec
|
|
180
190
|
begin
|
181
191
|
@before_and_after_all_context_instance ||= execution_context(nil)
|
182
192
|
@before_and_after_all_context_instance.instance_eval(&after_all_proc(behaviour_type))
|
183
|
-
rescue => e
|
193
|
+
rescue Exception => e
|
184
194
|
location = "after(:all)"
|
185
|
-
reporter.example_finished(location, e, location) if reporter
|
195
|
+
reporter.example_finished(Example.new(location), e, location) if reporter
|
186
196
|
end
|
187
197
|
end
|
188
198
|
end
|
@@ -137,6 +137,15 @@ module Spec
|
|
137
137
|
super
|
138
138
|
end
|
139
139
|
|
140
|
+
def before_each_proc(behaviour_type, &error_handler)
|
141
|
+
parts = []
|
142
|
+
parts.push(*Behaviour.before_each_parts(nil))
|
143
|
+
parts.push(*Behaviour.before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
144
|
+
parts.push(*before_each_parts(nil))
|
145
|
+
parts.push(*before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
146
|
+
CompositeProcBuilder.new(parts).proc(&error_handler)
|
147
|
+
end
|
148
|
+
|
140
149
|
def before_all_proc(behaviour_type, &error_handler)
|
141
150
|
parts = []
|
142
151
|
parts.push(*Behaviour.before_all_parts(nil))
|
@@ -146,31 +155,22 @@ module Spec
|
|
146
155
|
CompositeProcBuilder.new(parts).proc(&error_handler)
|
147
156
|
end
|
148
157
|
|
149
|
-
def after_all_proc(behaviour_type
|
158
|
+
def after_all_proc(behaviour_type)
|
150
159
|
parts = []
|
151
160
|
parts.push(*after_all_parts(behaviour_type)) unless behaviour_type.nil?
|
152
161
|
parts.push(*after_all_parts(nil))
|
153
162
|
parts.push(*Behaviour.after_all_parts(behaviour_type)) unless behaviour_type.nil?
|
154
163
|
parts.push(*Behaviour.after_all_parts(nil))
|
155
|
-
CompositeProcBuilder.new(parts).proc
|
164
|
+
CompositeProcBuilder.new(parts).proc
|
156
165
|
end
|
157
166
|
|
158
|
-
def
|
159
|
-
parts = []
|
160
|
-
parts.push(*Behaviour.before_each_parts(nil))
|
161
|
-
parts.push(*Behaviour.before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
162
|
-
parts.push(*before_each_parts(nil))
|
163
|
-
parts.push(*before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
164
|
-
CompositeProcBuilder.new(parts).proc(&error_handler)
|
165
|
-
end
|
166
|
-
|
167
|
-
def after_each_proc(behaviour_type, &error_handler)
|
167
|
+
def after_each_proc(behaviour_type)
|
168
168
|
parts = []
|
169
169
|
parts.push(*after_each_parts(behaviour_type)) unless behaviour_type.nil?
|
170
170
|
parts.push(*after_each_parts(nil))
|
171
171
|
parts.push(*Behaviour.after_each_parts(behaviour_type)) unless behaviour_type.nil?
|
172
172
|
parts.push(*Behaviour.after_each_parts(nil))
|
173
|
-
CompositeProcBuilder.new(parts).proc
|
173
|
+
CompositeProcBuilder.new(parts).proc
|
174
174
|
end
|
175
175
|
|
176
176
|
private
|
@@ -210,11 +210,22 @@ module Spec
|
|
210
210
|
end
|
211
211
|
|
212
212
|
def inspect
|
213
|
-
"[
|
213
|
+
"[RSpec example]"
|
214
|
+
end
|
215
|
+
|
216
|
+
def pending(message)
|
217
|
+
if block_given?
|
218
|
+
begin
|
219
|
+
yield
|
220
|
+
rescue Exception => e
|
221
|
+
raise Spec::DSL::ExamplePendingError.new(message)
|
222
|
+
end
|
223
|
+
raise Spec::DSL::PendingFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
|
224
|
+
else
|
225
|
+
raise Spec::DSL::ExamplePendingError.new(message)
|
226
|
+
end
|
214
227
|
end
|
215
|
-
|
216
228
|
end
|
217
|
-
|
218
229
|
end
|
219
230
|
end
|
220
231
|
end
|