lib/context/lifecycle.rb in jeremymcanally-context-0.5.2 vs lib/context/lifecycle.rb in jeremymcanally-context-0.5.5
- old
+ new
@@ -1,16 +1,21 @@
class Test::Unit::TestCase
class << self
- attr_accessor :before_each_callbacks, :before_all_callbacks, :after_each_callbacks, :after_all_callbacks
+ attr_accessor :before_each_callbacks, :before_all_callbacks, :after_each_callbacks, :after_all_callbacks, :before_should_callbacks
# Add logic to run before the tests (i.e., a +setup+ method)
#
# before do
# @user = User.first
# end
#
def before(period = :each, &block)
+ unless block_given?
+ block = period
+ period = :each
+ end
+
send("before_#{period}_callbacks") << block
end
alias :setup :before
@@ -19,10 +24,15 @@
# after do
# User.delete_all
# end
#
def after(period = :each, &block)
+ unless block_given?
+ block = period
+ period = :each
+ end
+
send("after_#{period}_callbacks") << block
end
alias :teardown :after
@@ -30,50 +40,64 @@
callbacks = superclass.respond_to?(:gather_callbacks) ? superclass.gather_callbacks(callback_type, period) : []
callbacks.push(*send("#{callback_type}_#{period}_callbacks"))
end
end
- self.before_all_callbacks = []
- self.before_each_callbacks = []
- self.after_each_callbacks = []
- self.after_all_callbacks = []
+ self.before_all_callbacks = []
+ self.before_each_callbacks = []
+ self.after_each_callbacks = []
+ self.after_all_callbacks = []
+ self.before_should_callbacks = {}
def self.inherited(child) # :nodoc:
super
- child.before_all_callbacks = []
- child.before_each_callbacks = []
- child.after_each_callbacks = []
- child.after_all_callbacks = []
+ child.before_all_callbacks = []
+ child.before_each_callbacks = []
+ child.after_each_callbacks = []
+ child.after_all_callbacks = []
+ child.before_should_callbacks = {}
child.class_eval do
def setup(&block)
super
+ unless self.class.before_should_callbacks[method_name].nil?
+ instance_eval(&self.class.before_should_callbacks[method_name])
+ end
+
run_each_callbacks :before
end
def teardown
super
run_each_callbacks :after
end
- end
+ end if self == Test::Unit::TestCase
end
def run_each_callbacks(callback_type) # :nodoc:
- self.class.gather_callbacks(callback_type, :each).each { |c| instance_eval(&c) if c }
+ self.class.gather_callbacks(callback_type, :each).each do |c|
+ c.is_a?(Proc) ? instance_eval(&c) : send(c)
+ end
end
def run_all_callbacks(callback_type) # :nodoc:
previous_ivars = instance_variables
self.class.gather_callbacks(callback_type, :all).each { |c| instance_eval(&c) if c }
(instance_variables - previous_ivars).inject({}) do |hash, ivar|
hash.update ivar => instance_variable_get(ivar)
end
+ rescue Object => exception
+ raise <<-BANG
+ Error running the #{callback_type}(:all) callback for #{name}
+ #{exception.class.name}: #{exception.message}
+ #{exception.backtrace.join("\n")}
+ BANG
end
def set_values_from_callbacks(values) # :nodoc:
values.each do |name, value|
instance_variable_set name, value
end
end
-end
\ No newline at end of file
+end