78 lines
2.7 KiB
JavaScript
78 lines
2.7 KiB
JavaScript
/* 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 { Cu } = require("chrome");
|
|
|
|
const toolkit = require("toolkit/require");
|
|
|
|
const {tmpdir} = require("node/os");
|
|
const {join} = require("sdk/fs/path");
|
|
const {writeFile, unlink} = require("sdk/io/fs");
|
|
const {fromFilename} = require("sdk/url");
|
|
|
|
const makeCallback = (resolve, reject) => (error, result) => {
|
|
if (error) reject(error);
|
|
else resolve(result);
|
|
};
|
|
|
|
const remove = path => new Promise((resolve, reject) =>
|
|
unlink(path, makeCallback(resolve, reject)));
|
|
|
|
const write = (...params) => new Promise((resolve, reject) =>
|
|
writeFile(...params, makeCallback(resolve, reject)));
|
|
|
|
exports.testReload = function*(assert) {
|
|
const modulePath = join(tmpdir(), "toolkit-require-reload.js");
|
|
const moduleURI = fromFilename(modulePath);
|
|
|
|
yield write(modulePath, `exports.version = () => 1;`);
|
|
|
|
const v1 = toolkit.require(moduleURI);
|
|
|
|
assert.equal(v1.version(), 1, "module exports version");
|
|
|
|
yield write(modulePath, `exports.version = () => 2;`);
|
|
|
|
assert.equal(v1, toolkit.require(moduleURI),
|
|
"require does not reload modules");
|
|
|
|
const v2 = toolkit.require(moduleURI, {reload: true});
|
|
assert.equal(v2.version(), 2, "module was updated");
|
|
|
|
yield remove(modulePath);
|
|
};
|
|
|
|
exports.testReloadAll = function*(assert) {
|
|
const parentPath = join(tmpdir(), "toolkit-require-reload-parent.js");
|
|
const childPath = join(tmpdir(), "toolkit-require-reload-child.js");
|
|
|
|
const parentURI = fromFilename(parentPath);
|
|
const childURI = fromFilename(childPath);
|
|
|
|
yield write(childPath, `exports.name = () => "child"`);
|
|
yield write(parentPath, `const child = require("./toolkit-require-reload-child");
|
|
exports.greet = () => "Hello " + child.name();`);
|
|
|
|
const parent1 = toolkit.require(parentURI);
|
|
assert.equal(parent1.greet(), "Hello child");
|
|
|
|
yield write(childPath, `exports.name = () => "father"`);
|
|
yield write(parentPath, `const child = require("./toolkit-require-reload-child");
|
|
exports.greet = () => "Hello " + child.name() + "!";`);
|
|
|
|
const parent2 = toolkit.require(parentURI, {reload: true});
|
|
assert.equal(parent2.greet(), "Hello child!",
|
|
"only parent changes were picked up");
|
|
|
|
const parent3 = toolkit.require(parentURI, {reload: true, all: true});
|
|
assert.equal(parent3.greet(), "Hello father!",
|
|
"all changes were picked up");
|
|
|
|
yield remove(childPath);
|
|
yield remove(parentPath);
|
|
};
|
|
|
|
exports.main = _ => require("sdk/test/runner").runTestsFromModule(module);
|