let () =
let test_file = "validator/tests/html/attributes/lang/missing-lang-attribute-haswarn.html" in
let ic = open_in test_file in
let html = really_input_string ic (in_channel_length ic) in
close_in ic;
let reader = Bytesrw.Bytes.Reader.of_string html in
let doc = Html5rw.parse ~collect_errors:true reader in
let root = Html5rw.root doc in
print_endline "=== DOM Structure (with namespaces) ===";
let rec print_node indent (node : Html5rw.Dom.node) =
let open Html5rw.Dom in
match node.name with
| "#text" -> ()
| "#document" | "#document-fragment" ->
Printf.printf "%s%s\n" indent node.name;
List.iter (print_node (indent ^ " ")) node.children
| "!doctype" -> ()
| "#comment" -> ()
| _ ->
let ns = match node.namespace with Some ns -> ns | None -> "none" in
Printf.printf "%s<%s ns=%s>\n" indent node.name ns;
List.iter (fun (k, v) ->
if k = "foo" then Printf.printf "%s @%s=%s\n" indent k v
) node.attrs;
List.iter (print_node (indent ^ " ")) node.children
in
print_node "" root;
print_endline "\n=== Checking... ===";
let reader2 = Bytesrw.Bytes.Reader.of_string html in
let result = Html5_checker.check ~collect_parse_errors:true ~system_id:test_file reader2 in
let errors = Html5_checker.errors result in
let warnings = Html5_checker.warnings result in
print_endline "=== Errors ===";
List.iter (fun e -> print_endline e.Html5_checker.Message.message) errors;
print_endline "\n=== Warnings ===";
List.iter (fun e -> print_endline e.Html5_checker.Message.message) warnings;
print_endline "\n=== Expected ===";
print_endline "Consider adding a \xe2\x80\x9clang\xe2\x80\x9d attribute to the \xe2\x80\x9chtml\xe2\x80\x9d start tag to declare the language of this document."