rspec 0.9.4 → 1.0.0
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 +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
|
|