aboutsummaryrefslogtreecommitdiff
path: root/test/th_mauve.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/th_mauve.rb')
-rw-r--r--test/th_mauve.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/th_mauve.rb b/test/th_mauve.rb
index a113ad0..76a4933 100644
--- a/test/th_mauve.rb
+++ b/test/th_mauve.rb
@@ -3,6 +3,27 @@ require 'mauve/datamapper'
require 'timecop'
require 'log4r'
require 'pp'
+require 'singleton'
+
+# Taken from
+#
+# http://blog.ardes.com/2006/12/11/testing-singletons-with-ruby
+#
+class <<Singleton
+
+ def included_with_reset(klass)
+ included_without_reset(klass)
+ class <<klass
+ def reset_instance
+ Singleton.send :__init__, self
+ self
+ end
+ end
+ end
+
+ alias_method :included_without_reset, :included
+ alias_method :included, :included_with_reset
+end
module Mauve
class TestOutputter < Log4r::Outputter
@@ -33,6 +54,7 @@ module Mauve
class UnitTest < Test::Unit::TestCase
def setup
+ reset_all_singletons
setup_logger
setup_time
end
@@ -40,6 +62,7 @@ module Mauve
def teardown
teardown_logger
teardown_time
+ reset_all_singletons
end
def setup_logger
@@ -81,6 +104,13 @@ module Mauve
Timecop.return
end
+ def reset_all_singletons
+ Mauve.constants.collect{|const| Mauve.const_get(const)}.each do |klass|
+ next unless klass.respond_to?(:instance)
+ klass.reset_instance
+ end
+ end
+
def default_test
#
#