summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/common/subset-tests.js
blob: 58e93413de4090792f09e02010ef81c4a627d6bf (plain)
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
59
60
(function() {
  var subTestStart = 0;
  var subTestEnd = Infinity;
  var match;
  if (location.search) {
    match = /(?:^\?|&)(\d+)-(\d+|last)(?:&|$)/.exec(location.search);
    if (match) {
      subTestStart = parseInt(match[1], 10);
      if (match[2] !== "last") {
          subTestEnd = parseInt(match[2], 10);
      }
    }
    // Below is utility code to generate <meta> for copy/paste into tests.
    // Sample usage:
    // test.html?split=1000
    match = /(?:^\?|&)split=(\d+)(?:&|$)/.exec(location.search);
    if (match) {
      var testsPerVariant = parseInt(match[1], 10);
      add_completion_callback(tests => {
        var total = tests.length;
        var template = '<meta name="variant" content="?%s-%s">';
        var metas = [];
        for (var i = 1; i < total - testsPerVariant; i = i + testsPerVariant) {
          metas.push(template.replace("%s", i).replace("%s", i + testsPerVariant - 1));
        }
        metas.push(template.replace("%s", i).replace("%s", "last"));
        var pre = document.createElement('pre');
        pre.textContent = metas.join('\n');
        document.body.insertBefore(pre, document.body.firstChild);
        document.getSelection().selectAllChildren(pre);
      });
    }
  }
  /**
   * Check if `currentSubTest` is in the subset specified in the URL.
   * @param {number} currentSubTest
   * @returns {boolean}
   */
  function shouldRunSubTest(currentSubTest) {
    return currentSubTest >= subTestStart && currentSubTest <= subTestEnd;
  }
  var currentSubTest = 0;
  /**
   * Only test a subset of tests with, e.g., `?1-10` in the URL.
   * Can be used together with `<meta name="variant" content="...">`
   * Sample usage:
   * for (const test of tests) {
   *   subsetTest(async_test, test.fn, test.name);
   * }
   */
  function subsetTest(testFunc, ...args) {
    currentSubTest++;
    if (shouldRunSubTest(currentSubTest)) {
      return testFunc(...args);
    }
    return null;
  }
  self.shouldRunSubTest = shouldRunSubTest;
  self.subsetTest = subsetTest;
})();