def self.inherited(c)
output_name = c.name.to_s.sub(/^Test/, '')
raise "Unknown class #{c} in @@testcase_order" unless
@@testcase_order.include? output_name
input_name = self.previous(output_name)
@@testcases.each do |node, data|
next if [:skip, :unsupported].include? data[input_name]
next if data[output_name] == :skip
c.send(:define_method, "test_#{node}".intern) do
flunk "Processor is nil" if processor.nil?
assert data.has_key?(input_name), "Unknown input data"
unless data.has_key?(output_name) then
$stderr.puts "add_test(#{node.inspect}, :same)"
end
assert data.has_key?(output_name), "Missing test data: #{self.class} #{node}"
input = data[input_name].deep_clone
expected = if data[output_name] == :same then
input
else
data[output_name]
end.deep_clone
case expected
when :unsupported then
assert_raises(UnsupportedNodeError) do
processor.process(input)
end
else
extra_expected = []
extra_input = []
_, expected, extra_expected = *expected if Array === expected and expected.first == :defx
_, input, extra_input = *input if Array === input and input.first == :defx
debug = input.deep_clone
$-w = nil if node == "match"
assert_equal expected, processor.process(input), "failed on input: #{debug.inspect}"
$-w = true if node == "match"
extra_input.each do |input| processor.process(input) end
extra = processor.extra_methods rescue []
assert_equal extra_expected, extra
end
end
end
end