<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="utf-8"/>
<title>Big5 decoding</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#big5">
<meta name="assert" content="The browser decodes all characters as expected from a file generated by encoding all pointers in the big5 encoding per the encoder steps in the specification.">
<style>
 iframe { display:none }
 form { display:none }
</style>
<script src="big5_index.js"></script>
<script src="big5-decoder.js"></script>
</head>

<body onload="showNodes();">

<iframe src="big5_chars.html" name="scriptWindow" id="scrwin"></iframe>

<div id="log"></div>

<script>
var tests = [];

function iframeRef(frameRef) {
  return frameRef.contentWindow
    ? frameRef.contentWindow.document
    : frameRef.contentDocument;
}

function showNodes() {
  var iframe = iframeRef(document.getElementById("scrwin"));
  nodes = iframe.querySelectorAll("span");

  for (var i = 0; i < nodes.length; i++) {
    tests[i] = async_test(
      "U+" +
        nodes[i].dataset.cp +
        " " +
        String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) +
        " " +
        big5Decoder(nodes[i].dataset.bytes) +
        " " +
        nodes[i].dataset.bytes
    );
  }

  for (var i = 0; i < nodes.length; i++) {
    tests[i].step(function() {
      assert_equals(nodes[i].textContent, big5Decoder(nodes[i].dataset.bytes));
    });
    tests[i].done();
  }
}
</script>

</body>
</html>
