зеркало из https://github.com/mozilla/gecko-dev.git
140 строки
3.8 KiB
JavaScript
140 строки
3.8 KiB
JavaScript
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||
|
/* vim:set ts=2 sw=2 sts=2 et: */
|
||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||
|
|
||
|
function parseTestManifest(testManifest, params, callback) {
|
||
|
var links = {};
|
||
|
var paths = [];
|
||
|
|
||
|
// Support --test-manifest format for mobile/b2g
|
||
|
if ("runtests" in testManifest || "excludetests" in testManifest) {
|
||
|
callback(testManifest);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// For mochitest-chrome and mochitest-browser-chrome harnesses, we
|
||
|
// define tests as links[testname] = true.
|
||
|
// For mochitest-plain, we define lists as an array of testnames.
|
||
|
for (var obj of testManifest['tests']) {
|
||
|
var path = obj['path'];
|
||
|
if (params.testRoot != 'tests' && params.testRoot !== undefined) {
|
||
|
links[params.baseurl + '/' + params.testRoot + '/' + path] = true
|
||
|
} else {
|
||
|
paths.push(params.testPrefix + path);
|
||
|
}
|
||
|
}
|
||
|
if (paths.length > 0) {
|
||
|
callback(paths);
|
||
|
} else {
|
||
|
callback(links);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getTestManifest(url, params, callback) {
|
||
|
var req = new XMLHttpRequest();
|
||
|
req.open("GET", url);
|
||
|
req.onload = function() {
|
||
|
if (req.readyState == 4) {
|
||
|
if (req.status == 200) {
|
||
|
parseTestManifest(JSON.parse(req.responseText), params, callback);
|
||
|
} else {
|
||
|
dump("TEST-ERROR: setup.js | error loading " + url + "\n");
|
||
|
callback({});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
req.send();
|
||
|
}
|
||
|
|
||
|
// Test Filtering Code
|
||
|
|
||
|
/*
|
||
|
Open the file referenced by runOnly|exclude and use that to compare against
|
||
|
testList
|
||
|
parameters:
|
||
|
filter = json object of runtests | excludetests
|
||
|
testList = array of test names to run
|
||
|
runOnly = use runtests vs excludetests in case both are defined
|
||
|
returns:
|
||
|
filtered version of testList
|
||
|
*/
|
||
|
function filterTests(filter, testList, runOnly) {
|
||
|
|
||
|
var filteredTests = [];
|
||
|
var removedTests = [];
|
||
|
var runtests = {};
|
||
|
var excludetests = {};
|
||
|
|
||
|
if (filter == null) {
|
||
|
return testList;
|
||
|
}
|
||
|
|
||
|
if ('runtests' in filter) {
|
||
|
runtests = filter.runtests;
|
||
|
}
|
||
|
if ('excludetests' in filter) {
|
||
|
excludetests = filter.excludetests;
|
||
|
}
|
||
|
if (!('runtests' in filter) && !('excludetests' in filter)) {
|
||
|
if (runOnly == 'true') {
|
||
|
runtests = filter;
|
||
|
} else {
|
||
|
excludetests = filter;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var testRoot = config.testRoot || "tests";
|
||
|
// Start with testList, and put everything that's in 'runtests' in
|
||
|
// filteredTests.
|
||
|
if (Object.keys(runtests).length) {
|
||
|
for (var i = 0; i < testList.length; i++) {
|
||
|
var testpath = testList[i];
|
||
|
var tmppath = testpath.replace(/^\//, '');
|
||
|
for (var f in runtests) {
|
||
|
// Remove leading /tests/ if exists
|
||
|
file = f.replace(/^\//, '')
|
||
|
file = file.replace(/^tests\//, '')
|
||
|
|
||
|
// Match directory or filename, testList has <testroot>/<path>
|
||
|
if (tmppath.match(testRoot + "/" + file) != null) {
|
||
|
filteredTests.push(testpath);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
filteredTests = testList.slice(0);
|
||
|
}
|
||
|
|
||
|
// Continue with filteredTests, and deselect everything that's in
|
||
|
// excludedtests.
|
||
|
if (!Object.keys(excludetests).length) {
|
||
|
return filteredTests;
|
||
|
}
|
||
|
|
||
|
var refilteredTests = [];
|
||
|
for (var i = 0; i < filteredTests.length; i++) {
|
||
|
var found = false;
|
||
|
var testpath = filteredTests[i];
|
||
|
var tmppath = testpath.replace(/^\//, '');
|
||
|
for (var f in excludetests) {
|
||
|
// Remove leading /tests/ if exists
|
||
|
file = f.replace(/^\//, '')
|
||
|
file = file.replace(/^tests\//, '')
|
||
|
|
||
|
// Match directory or filename, testList has <testroot>/<path>
|
||
|
if (tmppath.match(testRoot + "/" + file) != null) {
|
||
|
found = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (!found) {
|
||
|
refilteredTests.push(testpath);
|
||
|
}
|
||
|
}
|
||
|
return refilteredTests;
|
||
|
}
|
||
|
|