https://github.com/web-platform-tests/wpt
Raw File
Tip revision: 3b558a96b2c165d8b8c4aa3ce17e1f7d9e7912ed authored by Dave Tapuska on 18 December 2018, 21:43:49 UTC
Add tentative WPT tests for stale while revalidate handling.
Tip revision: 3b558a9
subset-tests-by-key.js
// Only test a subset of tests with ?include=Foo or ?exclude=Foo in the URL.
// Can be used together with <meta name="variant" content="...">
// Sample usage:
// for (const test of tests) {
//   subsetTestByKey("Foo", async_test, test.fn, test.name);
// }
(function() {
  var subTestKeyPattern = null;
  var match;
  var collectKeys = false;
  var collectCounts = false;
  var keys = {};
  var exclude = false;
  if (location.search) {
    match = /(?:^\?|&)(include|exclude)=([^&]+)?/.exec(location.search);
    if (match) {
      subTestKeyPattern = new RegExp(`^${match[2]}$`);
      if (match[1] === 'exclude') {
        exclude = true;
      }
    }
    // Below is utility code to generate <meta> for copy/paste into tests.
    // Sample usage:
    // test.html?get-keys
    match = /(?:^\?|&)get-keys(&get-counts)?(?:&|$)/.exec(location.search);
    if (match) {
      collectKeys = true;
      if (match[1]) {
        collectCounts = true;
      }
      add_completion_callback(() => {
        var metas = [];
        var template = '<meta name="variant" content="?include=%s">';
        if (collectCounts) {
          template += ' <!--%s-->';
        }
        for (var key in keys) {
          var meta = template.replace("%s", key);
          if (collectCounts) {
            meta = meta.replace("%s", keys[key]);
          }
          metas.push(meta);
        }
        var pre = document.createElement('pre');
        pre.textContent = metas.join('\n') + '\n';
        document.body.insertBefore(pre, document.body.firstChild);
        document.getSelection().selectAllChildren(pre);
      });
    }
  }
  function shouldRunSubTest(key) {
    if (key && subTestKeyPattern) {
      var found = subTestKeyPattern.test(key);
      if (exclude) {
        return !found;
      }
      return found;
    }
    return true;
  }
  function subsetTestByKey(key, testFunc, ...args) {
    if (collectKeys) {
      if (collectCounts && key in keys) {
        keys[key]++;
      } else {
        keys[key] = 1;
      }
    }
    if (shouldRunSubTest(key)) {
      return testFunc(...args);
    }
    return null;
  }
  self.shouldRunSubTest = shouldRunSubTest;
  self.subsetTestByKey = subsetTestByKey;
})();
back to top