lib/tap/test.rb in bahuvrihi-tap-0.10.1 vs lib/tap/test.rb in bahuvrihi-tap-0.10.2
- old
+ new
@@ -1,6 +1,6 @@
-require 'tap/test/tap_methods'
+require 'test/unit'
module Test # :nodoc:
module Unit # :nodoc:
# Methods extending TestCase.
@@ -17,19 +17,100 @@
# SubsetMethods all, except acts_as_tap_test, acts_as_file_test, file_test_root
#
#--
#See the TestTutorial for more information.
class TestCase
+ class << self
+
+ def inherited(child)
+ child.instance_variable_set(:@skip_messages, [])
+ child.instance_variable_set(:@run_test_suite, true)
+ end
+
+ #
+ # Methods for skipping a test suite
+ #
+
+ attr_accessor :run_test_suite
+
+ # Causes a test suite to be skipped. If a message is given, it will
+ # print and notify the user the test suite has been skipped.
+ def skip_test(msg=nil)
+ self.run_test_suite = false
+
+ # experimental -- perhaps use this so that a test can be skipped
+ # for multiple reasons?
+ @skip_messages << msg
+ end
+
+ alias :original_suite :suite
+
+ # Modifies the default suite method to include/exclude tests based on platform.
+ def suite # :nodoc:
+ if run_test_suite
+ original_suite
+ else
+ skip_message = @skip_messages.compact.join(', ')
+ puts "Skipping #{name}#{skip_message.empty? ? '' : ': ' + skip_message}"
+ Test::Unit::TestSuite.new(name)
+ end
+ end
+
+ # Causes a TestCase to act as a file test, by instantiating a class Tap::Root
+ # (trs), and including FileMethods. The root and directories used to
+ # instantiate trs can be specified as options. By default file_test_root
+ # and the directories {:input => 'input', :output => 'output', :expected => 'expected'}
+ # will be used.
+ #
+ # Note: file_test_root determines a root directory <em>based on the calling file</em>.
+ # Be sure to specify the root directory explicitly if you call acts_as_file_test
+ # from a file that is NOT meant to be test file.
+ def acts_as_file_test(options={})
+ include Tap::Test::FileMethods
+
+ options = {
+ :root => file_test_root,
+ :directories => {:input => 'input', :output => 'output', :expected => 'expected'}
+ }.merge(options)
+ self.trs = Tap::Root.new(options[:root], options[:directories])
+ end
+
+ # Causes a unit test to act as a tap test -- resulting in the following:
+ # - setup using acts_as_file_test
+ # - inclusion of Tap::Test::SubsetMethods
+ # - inclusion of Tap::Test::InstanceMethods
+ #
+ # Note: Unless otherwise specified, <tt>acts_as_tap_test</tt> infers a root directory
+ # based on the calling file. Be sure to specify the root directory explicitly
+ # if you call acts_as_file_test from a file that is NOT meant to be test file.
+ def acts_as_tap_test(options={})
+ include Tap::Test::SubsetMethods
+ include Tap::Test::FileMethods
+ include Tap::Test::TapMethods
+
+ acts_as_file_test({:root => file_test_root}.merge(options))
+ end
+
+ def acts_as_script_test(options={})
+ include Tap::Test::FileMethods
+ include Tap::Test::ScriptMethods
+
+ acts_as_file_test({:root => file_test_root}.merge(options))
+ end
+ end
end
end
end
module Tap
# Modules facilitating testing. TapMethods are specific to
# Tap, but SubsetMethods and FileMethods are more general in
# their utility.
module Test
+ autoload(:SubsetMethods, 'tap/test/subset_methods')
+ autoload(:FileMethods, 'tap/test/file_methods')
+ autoload(:TapMethods, 'tap/test/tap_methods')
end
end