def test(*test_description_or_targets, &block)
if block_given?
test_description = test_description_or_targets.first
if test_description.nil?
raise ArgumentError, "test description is missing"
end
n_arguments = test_description_or_targets.size
if n_arguments > 1
message = "wrong number of arguments (#{n_arguments} for 1)"
raise ArgumentError, message
end
method_name = "test: #{test_description}"
define_method(method_name, &block)
description(test_description, method_name)
attribute(:test, true, {}, method_name)
else
targets = test_description_or_targets
attribute(:test, true, {}, *targets)
end
end