diff options
Diffstat (limited to 'addon-sdk/source/test/test-mpl2-license-header.js')
-rw-r--r-- | addon-sdk/source/test/test-mpl2-license-header.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/addon-sdk/source/test/test-mpl2-license-header.js b/addon-sdk/source/test/test-mpl2-license-header.js new file mode 100644 index 000000000..22a2cf0ea --- /dev/null +++ b/addon-sdk/source/test/test-mpl2-license-header.js @@ -0,0 +1,105 @@ +// 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); |