mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
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>
99 lines
2.3 KiB
JavaScript
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;
|