rspec 0.9.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +24 -0
- data/EXAMPLES.rd +6 -2
- data/README +9 -9
- data/Rakefile +32 -29
- data/examples/not_yet_implemented_spec.rb +12 -0
- data/examples/shared_behaviours_example.rb +8 -0
- data/examples/stack_spec.rb +1 -0
- data/lib/spec/dsl/behaviour.rb +21 -6
- data/lib/spec/dsl/behaviour_callbacks.rb +44 -26
- data/lib/spec/dsl/behaviour_eval.rb +21 -12
- data/lib/spec/dsl/behaviour_factory.rb +23 -13
- data/lib/spec/dsl/configuration.rb +85 -5
- data/lib/spec/dsl/description.rb +14 -6
- data/lib/spec/dsl/example.rb +2 -2
- data/lib/spec/matchers.rb +5 -5
- data/lib/spec/matchers/be.rb +16 -0
- data/lib/spec/matchers/operator_matcher.rb +21 -1
- data/lib/spec/matchers/raise_error.rb +1 -1
- data/lib/spec/rake/verify_rcov.rb +5 -1
- data/lib/spec/runner.rb +7 -27
- data/lib/spec/runner/behaviour_runner.rb +1 -1
- data/lib/spec/runner/extensions/kernel.rb +20 -0
- data/lib/spec/runner/formatter/base_formatter.rb +6 -1
- data/lib/spec/runner/formatter/base_text_formatter.rb +10 -2
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +1 -1
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +1 -1
- data/lib/spec/runner/formatter/html_formatter.rb +63 -31
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +5 -0
- data/lib/spec/runner/formatter/rdoc_formatter.rb +4 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +6 -1
- data/lib/spec/runner/option_parser.rb +1 -1
- data/lib/spec/runner/reporter.rb +13 -4
- data/lib/spec/runner/spec_parser.rb +1 -1
- data/lib/spec/version.rb +5 -5
- data/spec/spec/dsl/behaviour_spec.rb +88 -24
- data/spec/spec/dsl/configuration_spec.rb +8 -1
- data/spec/spec/dsl/example_class_spec.rb +1 -1
- data/spec/spec/dsl/example_instance_spec.rb +5 -5
- data/spec/spec/dsl/shared_behaviour_spec.rb +24 -2
- data/spec/spec/matchers/be_spec.rb +20 -2
- data/spec/spec/matchers/operator_matcher_spec.rb +158 -0
- data/spec/spec/runner/command_line_spec.rb +5 -4
- data/spec/spec/runner/drb_command_line_spec.rb +15 -8
- data/spec/spec/runner/formatter/html_formatter_spec.rb +22 -5
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +7 -2
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +1 -1
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +6 -1
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +1 -1
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +15 -5
- data/spec/spec/runner/option_parser_spec.rb +5 -0
- data/spec/spec/runner/reporter_spec.rb +23 -5
- data/spec/spec/runner/spec_matcher_spec.rb +1 -1
- data/spec/spec/runner/spec_parser_spec.rb +1 -1
- data/spec/spec_helper.rb +38 -2
- metadata +41 -42
- data/spec/spec/matchers/should_===_spec.rb +0 -38
- data/spec/spec/matchers/should_==_spec.rb +0 -37
- data/spec/spec/matchers/should_=~_spec.rb +0 -36
data/CHANGES
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
= RSpec Changelog
|
2
2
|
|
3
|
+
== Version 1.0.0
|
4
|
+
The stake in the ground release. This represents a commitment to the API as it is. No significant
|
5
|
+
backwards compatibility changes in the API are expected after this release.
|
6
|
+
|
7
|
+
* Fixed [#10923] have_text matcher does not support should_not
|
8
|
+
* Fixed [#10673] should > and should >= broken
|
9
|
+
* Applied [#10921] Allow verify_rcov to accept greater than threshold coverage %'s via configuration
|
10
|
+
* Applied [#10920] Added support for not implemented examples (Patch from Chad Humphries)
|
11
|
+
* Patch to allow not implemented examples. This works by not providing a block to the example. (Patch from Chad Humphries, Ken Barker)
|
12
|
+
* Yanked support for Rails 1.1.6 in Spec::Rails
|
13
|
+
* RSpec.tmbundle uses CMD-SHIFT-R to run focused examples now.
|
14
|
+
* Spec::Rails now bundles a spec:rcov task by default (suggestion from Kurt Schrader)
|
15
|
+
* Fixed [#10814] Runner loads shared code, test cases require them again
|
16
|
+
* Fixed [#10753] Global before and after
|
17
|
+
* Fixed [#10774] Allow before and after to be specified in config II
|
18
|
+
* Refactored Spec::Ui examples to use new global before and after blocks.
|
19
|
+
* Added instructions about how to get Selenium working with Spec::Ui (spec_ui/examples/selenium/README.txt)
|
20
|
+
* Fixed [#10805] selenium.rb missing from gem?
|
21
|
+
* Added rdocs explaining how to deal with errors in Rails' controller actions
|
22
|
+
* Applied [#10770] Finer grained includes.
|
23
|
+
* Fixed [#10747] Helper methods defined in shared specs are not visible when shared spec is used
|
24
|
+
* Fixed [#10748] Shared descriptions in separate files causes 'already exists' error
|
25
|
+
* Applied [#10698] Running with --drb executes specs twice (patch from Ruy Asan)
|
26
|
+
|
3
27
|
== Version 0.9.4
|
4
28
|
This release introduces massive improvements to Spec::Ui - the user interface functional testing
|
5
29
|
extension to RSpec. There are also some minor bug fixes to the RSpec core.
|
data/EXAMPLES.rd
CHANGED
@@ -43,6 +43,9 @@
|
|
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]
|
46
49
|
# A partial mock
|
47
50
|
# * should work at the class level
|
48
51
|
# * should revert to the original after each spec
|
@@ -52,6 +55,7 @@
|
|
52
55
|
# * should be intuitive
|
53
56
|
# SharedBehaviourExample::OneThing
|
54
57
|
# * should do what things do
|
58
|
+
# * should have access to helper methods defined in the shared behaviour
|
55
59
|
# SharedBehaviourExample::AnotherThing
|
56
60
|
# * should do what things do
|
57
61
|
# Stack (empty)
|
@@ -99,6 +103,6 @@
|
|
99
103
|
# * RSpec should be able to access TestCase methods
|
100
104
|
# * RSpec should be able to accept included modules
|
101
105
|
|
102
|
-
Finished in 0.
|
106
|
+
Finished in 0.025956 seconds
|
103
107
|
|
104
|
-
|
108
|
+
77 examples, 0 failures, 2 not implemented
|
data/README
CHANGED
@@ -49,15 +49,15 @@ In order to run RSpec's full suite of specs (rake pre_commit) you must install t
|
|
49
49
|
|
50
50
|
Once those are all installed, you should be able to run the suite with the following steps:
|
51
51
|
|
52
|
-
svn co svn://rubyforge.org/var/svn/rspec/trunk rspec
|
53
|
-
cd rspec
|
54
|
-
rake install_dependencies
|
55
|
-
cd example_rails_app
|
56
|
-
export RSPEC_RAILS_VERSION=1.2.3
|
57
|
-
rake rspec:generate_mysql_config
|
58
|
-
mysql -u root < db/mysql_setup.sql
|
59
|
-
cd ..
|
60
|
-
rake pre_commit
|
52
|
+
* svn co svn://rubyforge.org/var/svn/rspec/trunk rspec
|
53
|
+
* cd rspec
|
54
|
+
* rake install_dependencies
|
55
|
+
* cd example_rails_app
|
56
|
+
* export RSPEC_RAILS_VERSION=1.2.3
|
57
|
+
* rake rspec:generate_mysql_config
|
58
|
+
* mysql -u root < db/mysql_setup.sql
|
59
|
+
* cd ..
|
60
|
+
* rake pre_commit
|
61
61
|
|
62
62
|
|
63
63
|
Note that RSpec itself - once built - doesn't have any dependencies outside the Ruby core
|
data/Rakefile
CHANGED
@@ -5,6 +5,9 @@ require 'rake/contrib/rubyforgepublisher'
|
|
5
5
|
require 'rake/clean'
|
6
6
|
require 'rake/rdoctask'
|
7
7
|
require 'spec/version'
|
8
|
+
dir = File.dirname(__FILE__)
|
9
|
+
$LOAD_PATH.unshift(File.expand_path("#{dir}/../pre_commit/lib"))
|
10
|
+
require "pre_commit"
|
8
11
|
|
9
12
|
# Some of the tasks are in separate files since they are also part of the website documentation
|
10
13
|
load File.dirname(__FILE__) + '/rake_tasks/examples.rake'
|
@@ -30,7 +33,7 @@ task :default => [:verify_rcov]
|
|
30
33
|
desc "Run all specs"
|
31
34
|
Spec::Rake::SpecTask.new do |t|
|
32
35
|
t.spec_files = FileList[
|
33
|
-
'spec/**/*_spec.rb',
|
36
|
+
'spec/**/*_spec.rb',
|
34
37
|
'../RSpec.tmbundle/Support/spec/*_spec.rb'
|
35
38
|
# TODO: get these in too - need to fix coverage
|
36
39
|
# '../spec_ui/spec/**/*_spec.rb'
|
@@ -67,16 +70,7 @@ end
|
|
67
70
|
|
68
71
|
desc 'Generate HTML documentation for website'
|
69
72
|
task :webgen do
|
70
|
-
|
71
|
-
output = nil
|
72
|
-
IO.popen('webgen 2>&1') do |io|
|
73
|
-
output = io.read
|
74
|
-
end
|
75
|
-
raise "ERROR while running webgen: #{output}" if output =~ /ERROR/n || $? != 0
|
76
|
-
end
|
77
|
-
spec_page = File.expand_path(File.dirname(__FILE__) + '/../doc/output/tools/spec.html')
|
78
|
-
spec_page_content = File.open(spec_page).read
|
79
|
-
raise "#{'!'*400}\nIt seems like the output in the generated documentation is broken (no dots: ......)\n. Look in #{spec_page}" unless spec_page_content =~/\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\./m
|
73
|
+
core.webgen
|
80
74
|
end
|
81
75
|
|
82
76
|
desc 'Generate RDoc'
|
@@ -85,15 +79,19 @@ rd = Rake::RDocTask.new do |rdoc|
|
|
85
79
|
rdoc.options << '--title' << 'RSpec' << '--line-numbers' << '--inline-source' << '--main' << 'README'
|
86
80
|
rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'EXAMPLES.rd', 'UPGRADE', 'lib/**/*.rb')
|
87
81
|
end
|
88
|
-
|
82
|
+
|
83
|
+
desc "Generate EXAMPLES.rb"
|
84
|
+
task :rdoc do
|
85
|
+
core.rdoc
|
86
|
+
end
|
89
87
|
|
90
88
|
spec = Gem::Specification.new do |s|
|
91
89
|
s.name = PKG_NAME
|
92
90
|
s.version = PKG_VERSION
|
93
91
|
s.summary = Spec::VERSION::DESCRIPTION
|
94
92
|
s.description = <<-EOF
|
95
|
-
RSpec is a behaviour driven development (BDD) framework for Ruby. RSpec was
|
96
|
-
created in response to Dave Astels' article _A New Look at Test Driven Development_
|
93
|
+
RSpec is a behaviour driven development (BDD) framework for Ruby. RSpec was
|
94
|
+
created in response to Dave Astels' article _A New Look at Test Driven Development_
|
97
95
|
which can be read at: http://daveastels.com/index.php?p=5 RSpec is intended to
|
98
96
|
provide the features discussed in Dave's article.
|
99
97
|
EOF
|
@@ -104,7 +102,7 @@ spec = Gem::Specification.new do |s|
|
|
104
102
|
s.has_rdoc = true
|
105
103
|
s.rdoc_options = rd.options
|
106
104
|
s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a
|
107
|
-
|
105
|
+
|
108
106
|
s.autorequire = 'spec'
|
109
107
|
s.bindir = 'bin'
|
110
108
|
s.executables = ['spec', 'spec_translator']
|
@@ -140,8 +138,7 @@ task :todo do
|
|
140
138
|
end
|
141
139
|
|
142
140
|
task :clobber do
|
143
|
-
|
144
|
-
rm_rf 'translated_specs'
|
141
|
+
core.clobber
|
145
142
|
end
|
146
143
|
|
147
144
|
task :release => [:clobber, :verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_website, :publish_news]
|
@@ -167,21 +164,13 @@ task :tag do
|
|
167
164
|
end
|
168
165
|
|
169
166
|
desc "Run this task before you commit. You should see 'OK TO COMMIT'"
|
170
|
-
task
|
171
|
-
:website,
|
172
|
-
:examples,
|
173
|
-
:translated_specs,
|
174
|
-
:failing_examples_with_html
|
175
|
-
]
|
167
|
+
task(:pre_commit) {core.pre_commit}
|
176
168
|
|
177
169
|
desc "Build the website, but do not publish it"
|
178
|
-
task
|
170
|
+
task(:website) {core.website}
|
179
171
|
|
180
172
|
task :rdoc_rails do
|
181
|
-
|
182
|
-
rake = (PLATFORM == "i386-mswin32") ? "rake.cmd" : "rake"
|
183
|
-
`#{rake} rdoc`
|
184
|
-
end
|
173
|
+
core.rdoc_rails
|
185
174
|
end
|
186
175
|
|
187
176
|
task :verify_user do
|
@@ -202,6 +191,16 @@ task :publish_website => [:verify_user, :website] do
|
|
202
191
|
end
|
203
192
|
end
|
204
193
|
|
194
|
+
desc "Upload Website archive to RubyForge"
|
195
|
+
task :archive_website => [:verify_user, :website] do
|
196
|
+
publisher = Rake::SshDirPublisher.new(
|
197
|
+
"rspec-website@rubyforge.org",
|
198
|
+
"/var/www/gforge-projects/#{PKG_NAME}/#{Spec::VERSION::TAG}",
|
199
|
+
"../doc/output"
|
200
|
+
)
|
201
|
+
publisher.upload
|
202
|
+
end
|
203
|
+
|
205
204
|
desc "Package the RSpec.tmbundle"
|
206
205
|
task :package_tmbundle do
|
207
206
|
mkdir 'pkg' rescue nil
|
@@ -255,7 +254,7 @@ task :publish_packages => [:verify_user, :package] do
|
|
255
254
|
*release_files
|
256
255
|
)
|
257
256
|
publisher.upload
|
258
|
-
|
257
|
+
|
259
258
|
puts "UPLADED THE FOLLOWING FILES:"
|
260
259
|
release_files.each do |file|
|
261
260
|
name = file.match(/pkg\/(.*)/)[1]
|
@@ -279,3 +278,7 @@ task :publish_news => [:verify_user] do
|
|
279
278
|
puts "** Not publishing news to RubyForge - this is a prerelease"
|
280
279
|
end
|
281
280
|
end
|
281
|
+
|
282
|
+
def core
|
283
|
+
PreCommit::Core.new(self)
|
284
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require File.dirname(__FILE__) + "/stack"
|
3
|
+
|
4
|
+
describe Stack, ' (not implemented features)' do
|
5
|
+
before(:each) do
|
6
|
+
@stack = Stack.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should transform to xml using #to_xml"
|
10
|
+
|
11
|
+
it "should convert from xml using #from_xml"
|
12
|
+
end
|
@@ -14,6 +14,10 @@ module SharedBehaviourExample
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe "All Things", :shared => true do
|
17
|
+
def helper_method
|
18
|
+
"helper method"
|
19
|
+
end
|
20
|
+
|
17
21
|
it "should do what things do" do
|
18
22
|
@thing.what_things_do.should == "stuff"
|
19
23
|
end
|
@@ -22,6 +26,10 @@ module SharedBehaviourExample
|
|
22
26
|
describe OneThing do
|
23
27
|
it_should_behave_like "All Things"
|
24
28
|
before(:each) { @thing = OneThing.new }
|
29
|
+
|
30
|
+
it "should have access to helper methods defined in the shared behaviour" do
|
31
|
+
helper_method.should == "helper method"
|
32
|
+
end
|
25
33
|
end
|
26
34
|
|
27
35
|
describe AnotherThing do
|
data/examples/stack_spec.rb
CHANGED
data/lib/spec/dsl/behaviour.rb
CHANGED
@@ -6,7 +6,8 @@ module Spec
|
|
6
6
|
|
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
|
+
raise ArgumentError.new("Shared Behaviour '#{behaviour.description}' already exists") if found_behaviour
|
10
11
|
shared_behaviours << behaviour
|
11
12
|
end
|
12
13
|
|
@@ -66,12 +67,12 @@ module Spec
|
|
66
67
|
if errors.empty?
|
67
68
|
specs.each do |example|
|
68
69
|
example_execution_context = execution_context(example)
|
69
|
-
example_execution_context.copy_instance_variables_from(@before_and_after_all_context_instance) unless before_all_proc.nil?
|
70
|
-
example.run(reporter, before_each_proc, after_each_proc, dry_run, example_execution_context, timeout)
|
70
|
+
example_execution_context.copy_instance_variables_from(@before_and_after_all_context_instance) unless before_all_proc(behaviour_type).nil?
|
71
|
+
example.run(reporter, before_each_proc(behaviour_type), after_each_proc(behaviour_type), dry_run, example_execution_context, timeout)
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
74
|
-
@before_and_after_all_context_instance.copy_instance_variables_from(example_execution_context) unless after_all_proc.nil?
|
75
|
+
@before_and_after_all_context_instance.copy_instance_variables_from(example_execution_context) unless after_all_proc(behaviour_type).nil?
|
75
76
|
run_after_all(reporter, dry_run)
|
76
77
|
end
|
77
78
|
|
@@ -106,8 +107,22 @@ module Spec
|
|
106
107
|
my_methods
|
107
108
|
end
|
108
109
|
|
110
|
+
# Includes modules in the Behaviour (the <tt>describe</tt> block).
|
111
|
+
def include(*args)
|
112
|
+
args << {} unless Hash === args.last
|
113
|
+
modules, options = args_and_options(*args)
|
114
|
+
required_behaviour_type = options[:behaviour_type]
|
115
|
+
if required_behaviour_type.nil? || required_behaviour_type.to_sym == behaviour_type.to_sym
|
116
|
+
@eval_module.include(*modules)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
109
120
|
protected
|
110
121
|
|
122
|
+
def behaviour_type #:nodoc:
|
123
|
+
@description[:behaviour_type]
|
124
|
+
end
|
125
|
+
|
111
126
|
# Messages that this class does not understand
|
112
127
|
# are passed directly to the @eval_module.
|
113
128
|
def method_missing(sym, *args, &block)
|
@@ -144,7 +159,7 @@ module Spec
|
|
144
159
|
unless dry_run
|
145
160
|
begin
|
146
161
|
@before_and_after_all_context_instance = execution_context(nil)
|
147
|
-
@before_and_after_all_context_instance.instance_eval(&before_all_proc)
|
162
|
+
@before_and_after_all_context_instance.instance_eval(&before_all_proc(behaviour_type))
|
148
163
|
rescue => e
|
149
164
|
errors << e
|
150
165
|
location = "before(:all)"
|
@@ -158,7 +173,7 @@ module Spec
|
|
158
173
|
unless dry_run
|
159
174
|
begin
|
160
175
|
@before_and_after_all_context_instance ||= execution_context(nil)
|
161
|
-
@before_and_after_all_context_instance.instance_eval(&after_all_proc)
|
176
|
+
@before_and_after_all_context_instance.instance_eval(&after_all_proc(behaviour_type))
|
162
177
|
rescue => e
|
163
178
|
location = "after(:all)"
|
164
179
|
reporter.example_finished(location, e, location) if reporter
|
@@ -1,31 +1,38 @@
|
|
1
1
|
module Spec
|
2
2
|
module DSL
|
3
3
|
module BehaviourCallbacks
|
4
|
-
def prepend_before(
|
5
|
-
|
6
|
-
|
7
|
-
when :all; before_all_parts.unshift(block)
|
8
|
-
end
|
4
|
+
def prepend_before(*args, &block)
|
5
|
+
scope, options = scope_and_options(*args)
|
6
|
+
add(scope, options, :before, :unshift, &block)
|
9
7
|
end
|
10
|
-
def append_before(
|
11
|
-
|
12
|
-
|
13
|
-
when :all; before_all_parts << block
|
14
|
-
end
|
8
|
+
def append_before(*args, &block)
|
9
|
+
scope, options = scope_and_options(*args)
|
10
|
+
add(scope, options, :before, :<<, &block)
|
15
11
|
end
|
16
12
|
alias_method :before, :append_before
|
17
13
|
|
18
|
-
def prepend_after(
|
19
|
-
|
20
|
-
|
21
|
-
when :all; after_all_parts.unshift(block)
|
22
|
-
end
|
14
|
+
def prepend_after(*args, &block)
|
15
|
+
scope, options = scope_and_options(*args)
|
16
|
+
add(scope, options, :after, :unshift, &block)
|
23
17
|
end
|
24
18
|
alias_method :after, :prepend_after
|
25
|
-
def append_after(
|
19
|
+
def append_after(*args, &block)
|
20
|
+
scope, options = scope_and_options(*args)
|
21
|
+
add(scope, options, :after, :<<, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def scope_and_options(*args)
|
25
|
+
args, options = args_and_options(*args)
|
26
|
+
scope = (args[0] || :each), options
|
27
|
+
end
|
28
|
+
|
29
|
+
def add(scope, options, where, how, &block)
|
30
|
+
scope ||= :each
|
31
|
+
options ||= {}
|
32
|
+
behaviour_type = options[:behaviour_type]
|
26
33
|
case scope
|
27
|
-
|
28
|
-
|
34
|
+
when :each; self.__send__("#{where}_each_parts", behaviour_type).__send__(how, block)
|
35
|
+
when :all; self.__send__("#{where}_all_parts", behaviour_type).__send__(how, block)
|
29
36
|
end
|
30
37
|
end
|
31
38
|
|
@@ -39,20 +46,31 @@ module Spec
|
|
39
46
|
after(:each, &block)
|
40
47
|
end
|
41
48
|
|
42
|
-
def before_all_parts # :nodoc:
|
43
|
-
@before_all_parts ||=
|
49
|
+
def before_all_parts(behaviour_type=nil) # :nodoc:
|
50
|
+
@before_all_parts ||= {}
|
51
|
+
@before_all_parts[behaviour_type] ||= []
|
52
|
+
end
|
53
|
+
|
54
|
+
def after_all_parts(behaviour_type=nil) # :nodoc:
|
55
|
+
@after_all_parts ||= {}
|
56
|
+
@after_all_parts[behaviour_type] ||= []
|
44
57
|
end
|
45
58
|
|
46
|
-
def
|
47
|
-
@
|
59
|
+
def before_each_parts(behaviour_type=nil) # :nodoc:
|
60
|
+
@before_each_parts ||= {}
|
61
|
+
@before_each_parts[behaviour_type] ||= []
|
48
62
|
end
|
49
63
|
|
50
|
-
def
|
51
|
-
@
|
64
|
+
def after_each_parts(behaviour_type=nil) # :nodoc:
|
65
|
+
@after_each_parts ||= {}
|
66
|
+
@after_each_parts[behaviour_type] ||= []
|
52
67
|
end
|
53
68
|
|
54
|
-
def
|
55
|
-
@
|
69
|
+
def clear_before_and_after! # :nodoc:
|
70
|
+
@before_all_parts = nil
|
71
|
+
@after_all_parts = nil
|
72
|
+
@before_each_parts = nil
|
73
|
+
@after_each_parts = nil
|
56
74
|
end
|
57
75
|
end
|
58
76
|
end
|
@@ -35,6 +35,7 @@ module Spec
|
|
35
35
|
before_all_parts.each { |p| eval_module.before_all_parts << p }
|
36
36
|
after_all_parts.each { |p| eval_module.after_all_parts << p }
|
37
37
|
included_modules.each { |m| eval_module.included_modules << m }
|
38
|
+
eval_module.included_modules << self
|
38
39
|
end
|
39
40
|
|
40
41
|
# :call-seq:
|
@@ -97,31 +98,39 @@ module Spec
|
|
97
98
|
super
|
98
99
|
end
|
99
100
|
|
100
|
-
def before_all_proc(&error_handler)
|
101
|
+
def before_all_proc(behaviour_type, &error_handler)
|
101
102
|
parts = []
|
102
|
-
parts.push(*Behaviour.before_all_parts)
|
103
|
-
parts.push(*before_all_parts)
|
103
|
+
parts.push(*Behaviour.before_all_parts(nil))
|
104
|
+
parts.push(*Behaviour.before_all_parts(behaviour_type)) unless behaviour_type.nil?
|
105
|
+
parts.push(*before_all_parts(nil))
|
106
|
+
parts.push(*before_all_parts(behaviour_type)) unless behaviour_type.nil?
|
104
107
|
CompositeProcBuilder.new(parts).proc(&error_handler)
|
105
108
|
end
|
106
109
|
|
107
|
-
def after_all_proc(&error_handler)
|
110
|
+
def after_all_proc(behaviour_type, &error_handler)
|
108
111
|
parts = []
|
109
|
-
parts.push(*after_all_parts)
|
110
|
-
parts.push(*
|
112
|
+
parts.push(*after_all_parts(behaviour_type)) unless behaviour_type.nil?
|
113
|
+
parts.push(*after_all_parts(nil))
|
114
|
+
parts.push(*Behaviour.after_all_parts(behaviour_type)) unless behaviour_type.nil?
|
115
|
+
parts.push(*Behaviour.after_all_parts(nil))
|
111
116
|
CompositeProcBuilder.new(parts).proc(&error_handler)
|
112
117
|
end
|
113
118
|
|
114
|
-
def before_each_proc(&error_handler)
|
119
|
+
def before_each_proc(behaviour_type, &error_handler)
|
115
120
|
parts = []
|
116
|
-
parts.push(*Behaviour.before_each_parts)
|
117
|
-
parts.push(*before_each_parts)
|
121
|
+
parts.push(*Behaviour.before_each_parts(nil))
|
122
|
+
parts.push(*Behaviour.before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
123
|
+
parts.push(*before_each_parts(nil))
|
124
|
+
parts.push(*before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
118
125
|
CompositeProcBuilder.new(parts).proc(&error_handler)
|
119
126
|
end
|
120
127
|
|
121
|
-
def after_each_proc(&error_handler)
|
128
|
+
def after_each_proc(behaviour_type, &error_handler)
|
122
129
|
parts = []
|
123
|
-
parts.push(*after_each_parts)
|
124
|
-
parts.push(*
|
130
|
+
parts.push(*after_each_parts(behaviour_type)) unless behaviour_type.nil?
|
131
|
+
parts.push(*after_each_parts(nil))
|
132
|
+
parts.push(*Behaviour.after_each_parts(behaviour_type)) unless behaviour_type.nil?
|
133
|
+
parts.push(*Behaviour.after_each_parts(nil))
|
125
134
|
CompositeProcBuilder.new(parts).proc(&error_handler)
|
126
135
|
end
|
127
136
|
|