69 lines
2 KiB
Ruby
69 lines
2 KiB
Ruby
require File.join(File.dirname(__FILE__), 'preamble')
|
|
|
|
require 'html5/html5parser'
|
|
require 'html5/serializer'
|
|
require 'html5/treewalkers'
|
|
|
|
#Run the serialize error checks
|
|
checkSerializeErrors = false
|
|
|
|
class JsonWalker < HTML5::TreeWalkers::Base
|
|
def each
|
|
@tree.each do |token|
|
|
case token[0]
|
|
when 'StartTag'
|
|
yield startTag(token[1], token[2])
|
|
when 'EndTag'
|
|
yield endTag(token[1])
|
|
when 'EmptyTag'
|
|
yield emptyTag(token[1], token[2])
|
|
when 'Comment'
|
|
yield comment(token[1])
|
|
when 'Characters', 'SpaceCharacters'
|
|
text(token[1]) {|textToken| yield textToken}
|
|
when 'Doctype'
|
|
yield doctype(token[1])
|
|
else
|
|
raise "Unknown token type: " + token[0]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
class Html5SerializeTestcase < Test::Unit::TestCase
|
|
html5_test_files('serializer').each do |filename|
|
|
test_name = File.basename(filename).sub('.test', '')
|
|
tests = JSON::parse(open(filename).read)
|
|
tests['tests'].each_with_index do |test, index|
|
|
|
|
define_method "test_#{test_name}_#{index+1}" do
|
|
if test["options"] and test["options"]["encoding"]
|
|
test["options"][:encoding] = test["options"]["encoding"]
|
|
end
|
|
|
|
result = HTML5::HTMLSerializer.
|
|
serialize(JsonWalker.new(test["input"]), (test["options"] || {}))
|
|
expected = test["expected"]
|
|
if expected.length == 1
|
|
assert_equal(expected[0], result, test["description"])
|
|
elsif !expected.include?(result)
|
|
flunk("Expected: #{expected.inspect}, Received: #{result.inspect}")
|
|
end
|
|
|
|
return if test_name == 'optionaltags'
|
|
|
|
result = HTML5::XHTMLSerializer.
|
|
serialize(JsonWalker.new(test["input"]), (test["options"] || {}))
|
|
expected = test["xhtml"] || test["expected"]
|
|
if expected.length == 1
|
|
assert_equal(expected[0], result, test["description"])
|
|
elsif !expected.include?(result)
|
|
flunk("Expected: #{expected.inspect}, Received: #{result.inspect}")
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|