зеркало из https://github.com/mozilla/gecko-dev.git
106 строки
3.4 KiB
JavaScript
106 строки
3.4 KiB
JavaScript
// Note: This line is here intentionally, to break MPL2_LICENSE_TEST
|
|
/* 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";
|
|
|
|
const { Cc, Ci, Cu } = require("chrome");
|
|
const options = require('@loader/options');
|
|
const { id } = require("sdk/self");
|
|
const { getAddonByID } = require("sdk/addon/manager");
|
|
const { mapcat, map, filter, fromEnumerator } = require("sdk/util/sequence");
|
|
const { readURISync } = require('sdk/net/url');
|
|
const { Request } = require('sdk/request');
|
|
const { defer } = require("sdk/core/promise");
|
|
|
|
const ios = Cc['@mozilla.org/network/io-service;1'].
|
|
getService(Ci.nsIIOService);
|
|
|
|
const MIT_LICENSE_HEADER = [];
|
|
|
|
const MPL2_LICENSE_TEST = new RegExp([
|
|
"^\\/\\* 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\\/\\. \\*\\/"
|
|
].join("\n"));
|
|
|
|
// Note: Using regular expressions because the paths a different for cfx vs jpm
|
|
const IGNORES = [
|
|
/lib[\/\\](diffpatcher|method)[\/\\].+$/, // MIT
|
|
/lib[\/\\]sdk[\/\\]fs[\/\\]path\.js$/, // MIT
|
|
/lib[\/\\]sdk[\/\\]system[\/\\]child_process[\/\\].*/,
|
|
/tests?[\/\\]buffers[\/\\].+$/, // MIT
|
|
/tests?[\/\\]path[\/\\]test-path\.js$/,
|
|
/tests?[\/\\]querystring[\/\\]test-querystring\.js$/,
|
|
];
|
|
|
|
const ignoreFile = file => !!IGNORES.find(regex => regex.test(file));
|
|
|
|
const baseURI = "resource://test-sdk-addon/";
|
|
|
|
const uri = (path="") => baseURI + path;
|
|
|
|
const toFile = x => x.QueryInterface(Ci.nsIFile);
|
|
const isTestFile = ({ path, leafName }) => {
|
|
return !ignoreFile(path) && /\.jsm?$/.test(leafName)
|
|
};
|
|
const getFileURI = x => ios.newFileURI(x).spec;
|
|
|
|
const getDirectoryEntries = file => map(toFile, fromEnumerator(_ => file.directoryEntries));
|
|
|
|
const isDirectory = x => x.isDirectory();
|
|
const getEntries = directory => mapcat(entry => {
|
|
if (isDirectory(entry)) {
|
|
return getEntries(entry);
|
|
}
|
|
else if (isTestFile(entry)) {
|
|
return [ entry ];
|
|
}
|
|
return [];
|
|
}, filter(() => true, getDirectoryEntries(directory)));
|
|
|
|
function readURL(url) {
|
|
let { promise, resolve } = defer();
|
|
|
|
Request({
|
|
url: url,
|
|
overrideMimeType: "text/plain",
|
|
onComplete: (response) => resolve(response.text)
|
|
}).get();
|
|
|
|
return promise;
|
|
}
|
|
|
|
exports["test MPL2 license header"] = function*(assert) {
|
|
let addon = yield getAddonByID(id);
|
|
let xpiURI = addon.getResourceURI();
|
|
let rootURL = xpiURI.spec;
|
|
assert.ok(rootURL, rootURL);
|
|
let files = [...getEntries(xpiURI.QueryInterface(Ci.nsIFileURL).file)];
|
|
|
|
assert.ok(files.length > 1, files.length + " files found.");
|
|
let failures = [];
|
|
let success = 0;
|
|
|
|
for (let i = 0, len = files.length; i < len; i++) {
|
|
let file = files[i];
|
|
assert.ok(file.path, "Trying " + file.path);
|
|
|
|
const URI = ios.newFileURI(file);
|
|
|
|
let leafName = URI.spec.replace(rootURL, "");
|
|
|
|
let contents = yield readURL(URI.spec);
|
|
if (!MPL2_LICENSE_TEST.test(contents)) {
|
|
failures.push(leafName);
|
|
}
|
|
}
|
|
|
|
assert.equal(1, failures.length, "we expect one failure");
|
|
assert.ok(/test-mpl2-license-header\.js$/.test(failures[0]), "the only failure is this file");
|
|
failures.shift();
|
|
assert.equal("", failures.join(",\n"), failures.length + " files found missing the required mpl 2 header");
|
|
}
|
|
|
|
require("sdk/test").run(exports);
|