Permalink
Browse files

update contest

  • Loading branch information...
1 parent dc8e07c commit f38927e0bc210d91ff8c023a435e3fcdd6aded5f @rkh rkh committed Jun 10, 2011
Showing with 53 additions and 27 deletions.
  1. +53 −27 test/contest.rb
View
@@ -1,38 +1,59 @@
+# Copyright (c) 2009 Damian Janowski and Michel Martens for Citrusbyte
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
require "test/unit"
-# Test::Unit loads a default test if the suite is empty, and the only
-# purpose of that test is to fail. As having empty contexts is a common
-# practice, we decided to overwrite TestSuite#empty? in order to
-# allow them. Having a failure when no tests have been defined seems
-# counter-intuitive.
+# Test::Unit loads a default test if the suite is empty, whose purpose is to
+# fail. Since having empty contexts is a common practice, we decided to
+# overwrite TestSuite#empty? in order to allow them. Having a failure when no
+# tests have been defined seems counter-intuitive.
class Test::Unit::TestSuite
- unless method_defined?(:empty?)
- def empty?
- false
- end
+ def empty?
+ false
end
end
-# We added setup, test and context as class methods, and the instance
-# method setup now iterates on the setup blocks. Note that all setup
-# blocks must be defined with the block syntax. Adding a setup instance
-# method defeats the purpose of this library.
+# Contest adds +teardown+, +test+ and +context+ as class methods, and the
+# instance methods +setup+ and +teardown+ now iterate on the corresponding
+# blocks. Note that all setup and teardown blocks must be defined with the
+# block syntax. Adding setup or teardown instance methods defeats the purpose
+# of this library.
class Test::Unit::TestCase
def self.setup(&block)
- setup_blocks << block
+ define_method :setup do
+ super(&block)
+ instance_eval(&block)
+ end
end
- def setup
- self.class.setup_blocks.each do |block|
+ def self.teardown(&block)
+ define_method :teardown do
instance_eval(&block)
+ super(&block)
end
end
- def self.context(name, &block)
- subclass = Class.new(self.superclass)
- subclass.setup_blocks.unshift(*setup_blocks)
- subclass.class_eval(&block)
- const_set(context_name(name), subclass)
+ def self.context(*name, &block)
+ subclass = Class.new(self)
+ remove_tests(subclass)
+ subclass.class_eval(&block) if block_given?
+ const_set(context_name(name.join(" ")), subclass)
end
def self.test(name, &block)
@@ -46,19 +67,24 @@ class << self
private
- def self.setup_blocks
- @setup_blocks ||= []
- end
-
def self.context_name(name)
- "Test#{sanitize_name(name).gsub(/(^| )(\w)/) { $2.upcase }}".to_sym
+ # "Test#{sanitize_name(name).gsub(/(^| )(\w)/) { $2.upcase }}".to_sym
+ name = "Test#{sanitize_name(name).gsub(/(^| )(\w)/) { $2.upcase }}"
+ name.tr(" ", "_").to_sym
end
def self.test_name(name)
"test_#{sanitize_name(name).gsub(/\s+/,'_')}".to_sym
end
def self.sanitize_name(name)
- name.gsub(/\W+/, ' ').strip
+ # name.gsub(/\W+/, ' ').strip
+ name.gsub(/\W+/, ' ')
+ end
+
+ def self.remove_tests(subclass)
+ subclass.public_instance_methods.grep(/^test_/).each do |meth|
+ subclass.send(:undef_method, meth.to_sym)
+ end
end
end

0 comments on commit f38927e

Please sign in to comment.