• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1(function() {
2  var subTestKeyPattern = null;
3  var match;
4  var collectKeys = false;
5  var collectCounts = false;
6  var keys = {};
7  var exclude = false;
8  if (location.search) {
9    match = /(?:^\?|&)(include|exclude)=([^&]+)?/.exec(location.search);
10    if (match) {
11      subTestKeyPattern = new RegExp(`^${match[2]}$`);
12      if (match[1] === 'exclude') {
13        exclude = true;
14      }
15    }
16    // Below is utility code to generate <meta> for copy/paste into tests.
17    // Sample usage:
18    // test.html?get-keys
19    match = /(?:^\?|&)get-keys(&get-counts)?(?:&|$)/.exec(location.search);
20    if (match) {
21      collectKeys = true;
22      if (match[1]) {
23        collectCounts = true;
24      }
25      add_completion_callback(() => {
26        var metas = [];
27        var template = '<meta name="variant" content="?include=%s">';
28        if (collectCounts) {
29          template += ' <!--%s-->';
30        }
31        for (var key in keys) {
32          var meta = template.replace("%s", key);
33          if (collectCounts) {
34            meta = meta.replace("%s", keys[key]);
35          }
36          metas.push(meta);
37        }
38        var pre = document.createElement('pre');
39        pre.textContent = metas.join('\n') + '\n';
40        document.body.insertBefore(pre, document.body.firstChild);
41        document.getSelection().selectAllChildren(pre);
42      });
43    }
44  }
45  /**
46   * Check if `key` is in the subset specified in the URL.
47   * @param {string} key
48   * @returns {boolean}
49   */
50  function shouldRunSubTest(key) {
51    if (key && subTestKeyPattern) {
52      var found = subTestKeyPattern.test(key);
53      if (exclude) {
54        return !found;
55      }
56      return found;
57    }
58    return true;
59  }
60  /**
61   * Only test a subset of tests with `?include=Foo` or `?exclude=Foo` in the URL.
62   * Can be used together with `<meta name="variant" content="...">`
63   * Sample usage:
64   * for (const test of tests) {
65   *   subsetTestByKey("Foo", async_test, test.fn, test.name);
66   * }
67   */
68   function subsetTestByKey(key, testFunc, ...args) {
69    if (collectKeys) {
70      if (collectCounts && key in keys) {
71        keys[key]++;
72      } else {
73        keys[key] = 1;
74      }
75    }
76    if (shouldRunSubTest(key)) {
77      return testFunc(...args);
78    }
79    return null;
80  }
81  self.shouldRunSubTest = shouldRunSubTest;
82  self.subsetTestByKey = subsetTestByKey;
83})();
84