tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

encode-href-common.js (1776B)


      1 // These are defined by the test:
      2 // errors (boolean)
      3 // encoder (function)
      4 // ranges (array)
      5 // expect (function)
      6 
      7 function encode(input, expected, desc) {
      8    // tests whether a Unicode character is converted to an equivalent byte sequence by href
      9    // input: a Unicode character
     10    // expected: expected byte sequence
     11    // desc: what's being tested
     12    subsetTest(test, function() {
     13        var a = document.createElement("a"); // <a> uses document encoding for URL's query
     14        a.href = "https://example.com/?" + input;
     15        result = a.search.substr(1); // remove leading "?"
     16        assert_equals(normalizeStr(result), normalizeStr(expected));
     17    }, desc);
     18 }
     19 
     20 // set up a simple array of unicode codepoints that are not encoded
     21 var codepoints = [];
     22 
     23 for (var range of ranges) {
     24    for (var i = range[0]; i < range[1]; i++) {
     25        result = encoder(String.fromCodePoint(i));
     26        var success = !!result;
     27        if (errors) {
     28          success = !success;
     29        }
     30        if (success) {
     31            var item = {};
     32            codepoints.push(item);
     33            item.cp = i;
     34            item.expected = expect(result, i);
     35            item.desc = range[2] ? range[2] + " " : "";
     36        }
     37    }
     38 }
     39 
     40 // run the tests
     41 for (var x = 0; x < codepoints.length; x++) {
     42    encode(
     43        String.fromCodePoint(codepoints[x].cp),
     44        codepoints[x].expected,
     45        codepoints[x].desc +
     46            " U+" +
     47            codepoints[x].cp.toString(16).toUpperCase() +
     48            " " +
     49            String.fromCodePoint(codepoints[x].cp) +
     50            " " +
     51            codepoints[x].expected
     52    );
     53 }
     54 
     55 // NOTES
     56 // this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers
     57 // the tests exclude ASCII characters