Files
zulip/frontend_tests/zjsunit/namespace.js
Anders Kaseorg 1b94733953 webpack: Remove resolve.modules override.
The minimal syntactic sugar it might provide isn’t worth the
unexpected side effects (including side effects on third party
modules).

For now, we allow zrequire to emulate the previous syntax in the Node
test suite, even though stealing part of the NPM namespace is
confusing.

Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-07-02 16:38:26 -07:00

99 lines
2.3 KiB
JavaScript

var namespace = (function () {
var _ = require('underscore/underscore.js');
var exports = {};
var dependencies = [];
var requires = [];
var old_builtins = {};
exports.set_global = function (name, val) {
global[name] = val;
dependencies.push(name);
return val;
};
exports.patch_builtin = function (name, val) {
old_builtins[name] = global[name];
global[name] = val;
return val;
};
exports.zrequire = function (name, fn) {
if (fn === undefined) {
fn = '../../static/js/' + name;
} else if (/generated\/|js\/|third\//.test(fn)) {
// FIXME: Stealing part of the NPM namespace is confusing.
fn = '../../static/' + fn;
}
delete require.cache[require.resolve(fn)];
var obj = require(fn);
requires.push(fn);
set_global(name, obj);
return obj;
};
exports.restore = function () {
dependencies.forEach(function (name) {
delete global[name];
});
requires.forEach(function (fn) {
delete require.cache[require.resolve(fn)];
});
dependencies = [];
_.extend(global, old_builtins);
old_builtins = {};
};
exports.stub_out_jquery = function () {
set_global('$', function () {
return {
on: function () {},
trigger: function () {},
hide: function () {},
removeClass: function () {},
};
});
$.fn = {};
$.now = function () {};
};
exports.with_overrides = function (test_function) {
// This function calls test_function() and passes in
// a way to override the namespace temporarily.
var clobber_callbacks = [];
var override = function (name, f) {
var parts = name.split('.');
var module = parts[0];
var func_name = parts[1];
if (!_.has(global, module)) {
set_global(module, {});
}
global[module][func_name] = f;
clobber_callbacks.push(function () {
// If you get a failure from this, you probably just
// need to have your test do its own overrides and
// not cherry-pick off of the prior test's setup.
global[module][func_name] =
'ATTEMPTED TO REUSE OVERRIDDEN VALUE FROM PRIOR TEST';
});
};
test_function(override);
_.each(clobber_callbacks, function (f) {
f();
});
};
return exports;
}());
module.exports = namespace;