testing/mochitest/manifestLibrary.js

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

     1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */
     7 function parseTestManifest(testManifest, params, callback) {
     8   var links = {};
     9   var paths = [];
    11   // Support --test-manifest format for mobile/b2g
    12   if ("runtests" in testManifest || "excludetests" in testManifest) {
    13     callback(testManifest);
    14     return;
    15   }
    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 (var obj of testManifest['tests']) {
    21     var 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       links[params.baseurl + '/' + params.testRoot + '/' + path] = true
    29     } else {
    30       paths.push(params.testPrefix + path);
    31     }
    32   }
    33   if (paths.length > 0) {
    34     callback(paths);
    35   } else {
    36     callback(links);
    37   }
    38 }
    40 function getTestManifest(url, params, callback) {
    41   var req = new XMLHttpRequest();
    42   req.open("GET", url);
    43   req.onload = function() {
    44     if (req.readyState == 4) {
    45       if (req.status == 200) {
    46         try {
    47           parseTestManifest(JSON.parse(req.responseText), params, callback);
    48         } catch (e) {
    49           dump("TEST-UNEXPECTED-FAIL: setup.js | error parsing " + url + " (" + e + ")\n");
    50           throw e;
    51         }
    52       } else {
    53         dump("TEST-UNEXPECTED-FAIL: setup.js | error loading " + url + "\n");
    54         callback({});
    55       }
    56     }
    57   }
    58   req.send();
    59 }
    61 // Test Filtering Code
    63 /*
    64  Open the file referenced by runOnly|exclude and use that to compare against
    65  testList
    66  parameters:
    67    filter = json object of runtests | excludetests
    68    testList = array of test names to run
    69    runOnly = use runtests vs excludetests in case both are defined
    70  returns:
    71    filtered version of testList
    72 */
    73 function filterTests(filter, testList, runOnly) {
    75   var filteredTests = [];
    76   var removedTests = [];
    77   var runtests = {};
    78   var excludetests = {};
    80   if (filter == null) {
    81     return testList;
    82   }
    84   if ('runtests' in filter) {
    85     runtests = filter.runtests;
    86   }
    87   if ('excludetests' in filter) {
    88     excludetests = filter.excludetests;
    89   }
    90   if (!('runtests' in filter) && !('excludetests' in filter)) {
    91     if (runOnly == 'true') {
    92       runtests = filter;
    93     } else {
    94       excludetests = filter;
    95     }
    96   }
    98   var testRoot = config.testRoot || "tests";
    99   // Start with testList, and put everything that's in 'runtests' in
   100   // filteredTests.
   101   if (Object.keys(runtests).length) {
   102     for (var i = 0; i < testList.length; i++) {
   103       var testpath = testList[i];
   104       var tmppath = testpath.replace(/^\//, '');
   105       for (var f in runtests) {
   106         // Remove leading /tests/ if exists
   107         file = f.replace(/^\//, '')
   108         file = file.replace(/^tests\//, '')
   110         // Match directory or filename, testList has <testroot>/<path>
   111         if (tmppath.match(testRoot + "/" + file) != null) {
   112           filteredTests.push(testpath);
   113           break;
   114         }
   115       }
   116     }
   117   } else {
   118     filteredTests = testList.slice(0);
   119   }
   121   // Continue with filteredTests, and deselect everything that's in
   122   // excludedtests.
   123   if (!Object.keys(excludetests).length) {
   124     return filteredTests;
   125   }
   127   var refilteredTests = [];
   128   for (var i = 0; i < filteredTests.length; i++) {
   129     var found = false;
   130     var testpath = filteredTests[i];
   131     var tmppath = testpath.replace(/^\//, '');
   132     for (var f in excludetests) {
   133       // Remove leading /tests/ if exists
   134       file = f.replace(/^\//, '')
   135       file = file.replace(/^tests\//, '')
   137       // Match directory or filename, testList has <testroot>/<path>
   138       if (tmppath.match(testRoot + "/" + file) != null) {
   139         found = true;
   140         break;
   141       }
   142     }
   143     if (!found) {
   144       refilteredTests.push(testpath);
   145     }
   146   }
   147   return refilteredTests;
   148 }

mercurial