• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html>
2<html>
3<head>
4<meta charset=big5> <!-- test breaks if the server overrides this -->
5<title>Big5 encoding ASCII</title>
6<meta name="timeout" content="long">
7<script src="/resources/testharness.js"></script>
8<script src="/resources/testharnessreport.js"></script>
9<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'>
10<link rel='help' href='https://encoding.spec.whatwg.org/#big5'>
11<meta name="assert" content="The browser produces the characters when encoding ASCII in a Big5-encoded document.">
12</head>
13<body>
14<div id=log></div>
15<script>
16// index is Big5 index pointer, value is Unicode codepoint (dec)
17
18function encode(input, output, desc) {
19  // tests whether a Unicode character is converted to an equivalent Big5 %-encoded byte sequence by href
20  // input: a escaped Unicode code point from the list of characters in the Big5 index
21  // output: expected percent-encoded byte sequence for the code point's equivalent in Big5 encoding
22  // desc: what's being tested
23  test(function() {
24    var a = document.createElement("a"); // <a> uses document encoding for URL's query
25    // Append and prepend x to test for off-by-one errors
26    a.href = "https://example.com/?x" + input + "x";
27    assert_true(
28      a.search.substr(1) == "x" + output + "x" ||
29        a.search.substr(1) == "x" + input + "x"
30    ); // remove leading "?"
31  }, "big5 encoder: " + desc);
32}
33
34// test ASCII - test separately for chars that aren't escaped
35for (var a = 0; a < 0x7f; a++) {
36  // The first 3 are stripped from URLs and the last is # which introduces a new URL segment
37  if (a === 0x09 || a === 0x0a || a === 0x0d || a === 0x23) {
38    continue;
39  }
40  hex = a.toString(16).toUpperCase();
41  while (hex.length < 2) {
42    hex = "0" + hex;
43  }
44  encode(
45    String.fromCharCode(a),
46    "%" + hex,
47    "test for ASCII codepoint 0x" +
48      a.toString(16) +
49      " " +
50      String.fromCharCode(a)
51  );
52}
53</script>
54</body>
55</html>
56