tor-browser

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

manifestLibrary.js (5351B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 function parseTestManifest(testManifest, params, callback) {
      8  let links = {};
      9  let paths = [];
     10 
     11  // Support --test-manifest format for mobile
     12  if ("runtests" in testManifest || "excludetests" in testManifest) {
     13    callback(testManifest);
     14    return;
     15  }
     16 
     17  // For mochitest-chrome and mochitest-browser-chrome harnesses, we
     18  // define tests as links[testname] = true.
     19  // For mochitest-plain, we define lists as an array of testnames.
     20  for (let obj of testManifest.tests) {
     21    let path = obj.path;
     22    // Note that obj.disabled may be "". We still want to skip in that case.
     23    if ("disabled" in obj) {
     24      dump("TEST-SKIPPED | " + path + " | " + obj.disabled + "\n");
     25      continue;
     26    }
     27    if (params.testRoot != "tests" && params.testRoot !== undefined) {
     28      let name = params.baseurl + "/" + params.testRoot + "/" + path;
     29      links[name] = {
     30        test: {
     31          url: name,
     32          expected: obj.expected,
     33          https_first_disabled: obj.https_first_disabled,
     34          allow_xul_xbl: obj.allow_xul_xbl,
     35        },
     36      };
     37    } else {
     38      let name = params.testPrefix + path;
     39      if (params.xOriginTests && obj.scheme == "https") {
     40        name = params.httpsBaseUrl + path;
     41      }
     42      paths.push({
     43        test: {
     44          url: name,
     45          expected: obj.expected,
     46          https_first_disabled: obj.https_first_disabled,
     47          allow_xul_xbl: obj.allow_xul_xbl,
     48        },
     49      });
     50    }
     51  }
     52  if (paths.length) {
     53    callback(paths);
     54  } else {
     55    callback(links);
     56  }
     57 }
     58 
     59 function getTestManifest(url, params, callback) {
     60  let req = new XMLHttpRequest();
     61  req.open("GET", url);
     62  req.onload = function () {
     63    if (req.readyState == 4) {
     64      if (req.status == 200) {
     65        try {
     66          parseTestManifest(JSON.parse(req.responseText), params, callback);
     67        } catch (e) {
     68          dump(
     69            "TEST-UNEXPECTED-FAIL: manifestLibrary.js | error parsing " +
     70              url +
     71              " (" +
     72              e +
     73              ")\n"
     74          );
     75          throw e;
     76        }
     77      } else {
     78        dump(
     79          "TEST-UNEXPECTED-FAIL: manifestLibrary.js | error loading " +
     80            url +
     81            " (HTTP " +
     82            req.status +
     83            ")\n"
     84        );
     85        callback({});
     86      }
     87    }
     88  };
     89  req.send();
     90 }
     91 
     92 // Test Filtering Code
     93 // TODO Only used by ipc tests, remove once those are implemented sanely
     94 
     95 /*
     96 Open the file referenced by runOnly|exclude and use that to compare against
     97 testList
     98 parameters:
     99   filter = json object of runtests | excludetests
    100   testList = array of test names to run
    101   runOnly = use runtests vs excludetests in case both are defined
    102 returns:
    103   filtered version of testList
    104 */
    105 function filterTests(filter, testList, runOnly) {
    106  let filteredTests = [];
    107  let runtests = {};
    108  let excludetests = {};
    109 
    110  if (filter == null) {
    111    return testList;
    112  }
    113 
    114  if ("runtests" in filter) {
    115    runtests = filter.runtests;
    116  }
    117  if ("excludetests" in filter) {
    118    excludetests = filter.excludetests;
    119  }
    120  if (!("runtests" in filter) && !("excludetests" in filter)) {
    121    if (runOnly == "true") {
    122      runtests = filter;
    123    } else {
    124      excludetests = filter;
    125    }
    126  }
    127 
    128  // eslint-disable-next-line no-undef
    129  let testRoot = config.testRoot || "tests";
    130  // Start with testList, and put everything that's in 'runtests' in
    131  // filteredTests.
    132  if (Object.keys(runtests).length) {
    133    for (let i = 0; i < testList.length; i++) {
    134      let testpath;
    135      if (testList[i] instanceof Object && "test" in testList[i]) {
    136        testpath = testList[i].test.url;
    137      } else {
    138        testpath = testList[i];
    139      }
    140      let tmppath = testpath.replace(/^\//, "");
    141      for (let f in runtests) {
    142        // Remove leading /tests/ if exists
    143        let file = f.replace(/^\//, "");
    144        file = file.replace(/^tests\//, "");
    145 
    146        // Match directory or filename, testList has <testroot>/<path>
    147        if (tmppath.match(testRoot + "/" + file) != null) {
    148          filteredTests.push(testpath);
    149          break;
    150        }
    151      }
    152    }
    153  } else {
    154    filteredTests = testList.slice(0);
    155  }
    156 
    157  // Continue with filteredTests, and deselect everything that's in
    158  // excludedtests.
    159  if (!Object.keys(excludetests).length) {
    160    return filteredTests;
    161  }
    162 
    163  let refilteredTests = [];
    164  for (let i = 0; i < filteredTests.length; i++) {
    165    let found = false;
    166    let testpath;
    167    if (filteredTests[i] instanceof Object && "test" in filteredTests[i]) {
    168      testpath = filteredTests[i].test.url;
    169    } else {
    170      testpath = filteredTests[i];
    171    }
    172    let tmppath = testpath.replace(/^\//, "");
    173    for (let f in excludetests) {
    174      // Remove leading /tests/ if exists
    175      let file = f.replace(/^\//, "");
    176      file = file.replace(/^tests\//, "");
    177 
    178      // Match directory or filename, testList has <testroot>/<path>
    179      if (tmppath.match(testRoot + "/" + file) != null) {
    180        found = true;
    181        break;
    182      }
    183    }
    184    if (!found) {
    185      refilteredTests.push(testpath);
    186    }
    187  }
    188  return refilteredTests;
    189 }