#!/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