File: speculative-parsing-util.js

package info (click to toggle)
thunderbird 1%3A115.16.0esr-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,476,252 kB
  • sloc: cpp: 6,972,150; javascript: 5,209,211; ansic: 3,507,222; python: 1,137,609; asm: 432,531; xml: 205,149; java: 175,761; sh: 116,485; makefile: 22,152; perl: 13,971; objc: 12,561; yacc: 4,583; pascal: 2,840; lex: 1,720; ruby: 1,075; exp: 762; sql: 666; awk: 580; php: 436; lisp: 430; sed: 70; csh: 10
file content (58 lines) | stat: -rw-r--r-- 2,356 bytes parent folder | download | duplicates (18)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function expect_fetched_onload(uuid, expectation) {
  return new Promise(resolve => {
    addEventListener('load', resolve);
  }).then(async () => {
    const result = await get_result(uuid);
    if (expectation) {
      assert_not_equals(result, '', 'speculative case did not fetch');
    } else {
      assert_equals(result, '', 'speculative case incorrectly fetched');
    }
    return result;
  });
}

function compare_with_nonspeculative(uuid, title, test_nonspeculative) {
  return function(speculative_result) {
    if (!test_nonspeculative) {
      return Promise.resolve();
    }
    return new Promise(resolve => {
      const iframe = document.createElement('iframe');
      iframe.onload = resolve;
      iframe.src = `../resources/${title}-nonspeculative.sub.html?uuid=${uuid}`;
      document.body.appendChild(iframe);
    }).then(async () => {
      const result = await get_result(uuid);
      if (speculative_result === '') {
        assert_equals(result, '', 'non-speculative case incorrectly fetched')
      } else {
        assert_not_equals(result, '', 'non-speculative case did not fetch');
        const speculative_headers = speculative_result.trim().split("\n");
        const nonspeculative_headers = result.trim().split("\n");
        assert_equals(speculative_headers.length, nonspeculative_headers.length, 'expected the same number of headers between speculative and non-speculative')
        for (let i = 0; i < speculative_headers.length; ++i) {
          let [s_header, s_value] = split_header(speculative_headers[i]);
          let [ns_header, ns_value] = split_header(nonspeculative_headers[i]);
          assert_equals(s_header, ns_header, 'expected the order of headers to match between speculative and non-speculative');
          assert_equals(s_value, ns_value, `expected \`${s_header}\` values to match between speculative and non-speculative`);
        }
      }
    });
  }
}

function split_header(line) {
  let [header, value] = line.split(': ');
  header = header.toLowerCase();
  value = value.trim();
  if (header === 'referer') {
    value = value.replace(/\/generated\/.+$/, '/generated/...');
  }
  return [header, value];
}

async function get_result(uuid) {
  const response = await fetch(`/html/syntax/speculative-parsing/resources/stash.py?action=take&uuid=${uuid}`);
  return await response.text();
}