mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-10-26 13:27:27 +00:00
102 lines
3.0 KiB
JavaScript
102 lines
3.0 KiB
JavaScript
/**
|
|
* @fileoverview Import globals from head.js and from any files that were
|
|
* imported by head.js (as far as we can correctly resolve the path).
|
|
*
|
|
* 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/.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Rule Definition
|
|
// -----------------------------------------------------------------------------
|
|
|
|
var fs = require("fs");
|
|
var path = require("path");
|
|
var helpers = require("../helpers");
|
|
var importRx = /^(?:Services\.scriptloader\.|loader)?loadSubScript\((.+)[",]/;
|
|
|
|
module.exports = function(context) {
|
|
// ---------------------------------------------------------------------------
|
|
// Helpers
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function checkFile(fileArray) {
|
|
var filePath = fileArray.pop();
|
|
|
|
while (filePath) {
|
|
var headText;
|
|
|
|
try {
|
|
headText = fs.readFileSync(filePath, "utf8");
|
|
} catch (e) {
|
|
// Couldn't find file, continue.
|
|
filePath = fileArray.pop();
|
|
continue;
|
|
}
|
|
|
|
var ast = helpers.getAST(headText);
|
|
var globalVars = helpers.getGlobals(ast);
|
|
|
|
for (var i = 0; i < globalVars.length; i++) {
|
|
var varName = globalVars[i];
|
|
helpers.addVarToScope(varName, context);
|
|
}
|
|
|
|
for (var index in ast.body) {
|
|
var node = ast.body[index];
|
|
var source = helpers.getTextForNode(node, headText);
|
|
var name = helpers.getVarNameFromImportSource(source);
|
|
|
|
if (name) {
|
|
helpers.addVarToScope(name, context);
|
|
continue;
|
|
}
|
|
|
|
// Scripts loaded using loadSubScript or loadHelperScript
|
|
var matches = source.match(importRx);
|
|
|
|
if (!matches) {
|
|
matches = source.match(/^loadHelperScript\((.+)[",]/);
|
|
}
|
|
|
|
if (matches) {
|
|
var cwd = process.cwd();
|
|
|
|
filePath = matches[1];
|
|
filePath = filePath.replace("chrome://mochitests/content/browser",
|
|
cwd + "/../../../..");
|
|
filePath = filePath.replace(/testdir\s*\+\s*["']/gi, cwd + "/");
|
|
filePath = filePath.replace(/test_dir\s*\+\s*["']/gi, cwd);
|
|
filePath = filePath.replace(/["']/gi, "");
|
|
filePath = path.normalize(filePath);
|
|
|
|
fileArray.push(filePath);
|
|
}
|
|
}
|
|
|
|
filePath = fileArray.pop();
|
|
}
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Public
|
|
// ---------------------------------------------------------------------------
|
|
|
|
return {
|
|
Program: function() {
|
|
if (!helpers.getIsBrowserMochitest(this)) {
|
|
return;
|
|
}
|
|
|
|
var currentFilePath = helpers.getAbsoluteFilePath(context);
|
|
var dirName = path.dirname(currentFilePath);
|
|
var fullHeadjsPath = path.resolve(dirName, "head.js");
|
|
|
|
checkFile([currentFilePath, fullHeadjsPath]);
|
|
}
|
|
};
|
|
};
|