-
Notifications
You must be signed in to change notification settings - Fork 6
/
test_declarative.rb
36 lines (32 loc) · 1018 Bytes
/
test_declarative.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
targets = [Module]
targets << Test::Unit::TestCase if defined?(Test::Unit::TestCase)
targets << MiniTest::Unit::TestCase if defined?(MiniTest::Unit::TestCase)
targets << Minitest::Test if defined?(Minitest::Test)
targets.each do |target|
if target.respond_to? :test
warn "test_declarative is deprecated for #{target}"
next
end
target.class_eval do
def test(name, &block)
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
defined = instance_method(test_name) rescue false
raise "#{test_name} is already defined in #{self}" if defined
if block_given?
define_method(test_name, &block)
else
define_method(test_name) do
flunk "No implementation provided for #{name}"
end
end
end
end
target.instance_eval do
alias :orig_test_methods :test_methods
def test_methods
methods = orig_test_methods
methods.delete('test')
methods
end
end if target.respond_to?(:test_methods)
end