32 lines
851 B
Ruby
32 lines
851 B
Ruby
|
#!/usr/bin/env ruby -wKU
|
||
|
|
||
|
require File.join(File.dirname(__FILE__), 'preamble')
|
||
|
|
||
|
require 'html5'
|
||
|
require 'html5/filters/validator'
|
||
|
|
||
|
class TestValidator < Test::Unit::TestCase
|
||
|
def run_validator_test(test)
|
||
|
p = HTML5::HTMLParser.new(:tokenizer => HTMLConformanceChecker)
|
||
|
p.parse(test['input'])
|
||
|
errorCodes = p.errors.collect{|e| e[1]}
|
||
|
if test.has_key?('fail-if')
|
||
|
assert !errorCodes.include?(test['fail-if'])
|
||
|
end
|
||
|
if test.has_key?('fail-unless')
|
||
|
assert errorCodes.include?(test['fail-unless'])
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for filename in html5_test_files('validator')
|
||
|
tests = JSON.load(open(filename))
|
||
|
testName = File.basename(filename).sub(".test", "")
|
||
|
tests['tests'].each_with_index do |test, index|
|
||
|
define_method "test_#{testName}_#{index}" do
|
||
|
run_validator_test(test)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|