mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
zjsunit: Make window a Proxy for global.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
This commit is contained in:
@@ -1,6 +1,4 @@
|
|||||||
global.patch_builtin('window', {
|
set_global('bridge', false);
|
||||||
bridge: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
set_global('blueslip', global.make_zblueslip({
|
set_global('blueslip', global.make_zblueslip({
|
||||||
error: false, // Ignore errors. We only check for warnings in this module.
|
error: false, // Ignore errors. We only check for warnings in this module.
|
||||||
@@ -873,10 +871,7 @@ run_test('initialize', () => {
|
|||||||
assert.equal('#compose-textarea', elem);
|
assert.equal('#compose-textarea', elem);
|
||||||
resize_watch_manual_resize_checked = true;
|
resize_watch_manual_resize_checked = true;
|
||||||
};
|
};
|
||||||
global.window = {
|
set_global('bridge', true);
|
||||||
XMLHttpRequest: true,
|
|
||||||
bridge: true,
|
|
||||||
};
|
|
||||||
let xmlhttprequest_checked = false;
|
let xmlhttprequest_checked = false;
|
||||||
set_global('XMLHttpRequest', function () {
|
set_global('XMLHttpRequest', function () {
|
||||||
this.upload = true;
|
this.upload = true;
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ set_global('compose_ui', {});
|
|||||||
const { JSDOM } = require("jsdom");
|
const { JSDOM } = require("jsdom");
|
||||||
const { window } = new JSDOM('<!DOCTYPE html><p>Hello world</p>');
|
const { window } = new JSDOM('<!DOCTYPE html><p>Hello world</p>');
|
||||||
const { document } = window;
|
const { document } = window;
|
||||||
global.document = document;
|
set_global('$', require('jquery')(window));
|
||||||
global.$ = require('jquery')(window);
|
set_global('document', document);
|
||||||
|
|
||||||
const copy_and_paste = zrequire('copy_and_paste');
|
const copy_and_paste = zrequire('copy_and_paste');
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ const noop = function () {};
|
|||||||
set_global('document', 'document-stub');
|
set_global('document', 'document-stub');
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
|
|
||||||
global.patch_builtin('window', {});
|
|
||||||
global.patch_builtin('setTimeout', func => func());
|
global.patch_builtin('setTimeout', func => func());
|
||||||
|
|
||||||
// These dependencies are closer to the dispatcher, and they
|
// These dependencies are closer to the dispatcher, and they
|
||||||
@@ -913,13 +912,13 @@ with_overrides(function (override) {
|
|||||||
assert_same(page_params.realm_name, 'new_realm_name');
|
assert_same(page_params.realm_name, 'new_realm_name');
|
||||||
|
|
||||||
let called = false;
|
let called = false;
|
||||||
window.electron_bridge = {
|
set_global('electron_bridge', {
|
||||||
send_event: (key, val) => {
|
send_event: (key, val) => {
|
||||||
assert_same(key, 'realm_name');
|
assert_same(key, 'realm_name');
|
||||||
assert_same(val, 'new_realm_name');
|
assert_same(val, 'new_realm_name');
|
||||||
called = true;
|
called = true;
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
dispatch(event);
|
dispatch(event);
|
||||||
assert_same(called, true);
|
assert_same(called, true);
|
||||||
@@ -954,13 +953,13 @@ with_overrides(function (override) {
|
|||||||
override('realm_icon.rerender', noop);
|
override('realm_icon.rerender', noop);
|
||||||
|
|
||||||
called = false;
|
called = false;
|
||||||
window.electron_bridge = {
|
set_global('electron_bridge', {
|
||||||
send_event: (key, val) => {
|
send_event: (key, val) => {
|
||||||
assert_same(key, 'realm_icon_url');
|
assert_same(key, 'realm_icon_url');
|
||||||
assert_same(val, 'icon.png');
|
assert_same(val, 'icon.png');
|
||||||
called = true;
|
called = true;
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
dispatch(event);
|
dispatch(event);
|
||||||
|
|
||||||
@@ -981,7 +980,7 @@ with_overrides(function (override) {
|
|||||||
assert_same(page_params.realm_night_logo_source, 'U');
|
assert_same(page_params.realm_night_logo_source, 'U');
|
||||||
|
|
||||||
event = event_fixtures.realm__deactivated;
|
event = event_fixtures.realm__deactivated;
|
||||||
window.location = {};
|
set_global('location', {});
|
||||||
dispatch(event);
|
dispatch(event);
|
||||||
assert_same(window.location.href, "/accounts/deactivated/");
|
assert_same(window.location.href, "/accounts/deactivated/");
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,15 +3,11 @@ zrequire('stream_data');
|
|||||||
zrequire('people');
|
zrequire('people');
|
||||||
zrequire('util');
|
zrequire('util');
|
||||||
|
|
||||||
const _window = {
|
set_global('location', {
|
||||||
location: {
|
protocol: "https:",
|
||||||
protocol: "https:",
|
host: "example.com",
|
||||||
host: "example.com",
|
pathname: "/",
|
||||||
pathname: "/",
|
});
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
global.patch_builtin('window', _window);
|
|
||||||
|
|
||||||
const hamlet = {
|
const hamlet = {
|
||||||
user_id: 1,
|
user_id: 1,
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
const window_stub = $.create('window-stub');
|
const window_stub = $.create('window-stub');
|
||||||
global.patch_builtin('window', {
|
set_global('location', {
|
||||||
location: {
|
protocol: 'http:',
|
||||||
protocol: 'http:',
|
host: 'example.com',
|
||||||
host: 'example.com',
|
|
||||||
},
|
|
||||||
to_$: () => window_stub,
|
|
||||||
});
|
});
|
||||||
|
set_global('to_$', () => window_stub);
|
||||||
zrequire('people');
|
zrequire('people');
|
||||||
zrequire('hash_util');
|
zrequire('hash_util');
|
||||||
zrequire('hashchange');
|
zrequire('hashchange');
|
||||||
|
|||||||
@@ -15,12 +15,10 @@ set_global('ui_util', {
|
|||||||
place_caret_at_end: noop,
|
place_caret_at_end: noop,
|
||||||
});
|
});
|
||||||
|
|
||||||
global.patch_builtin('window', {
|
set_global('getSelection', () => {
|
||||||
getSelection: () => {
|
return {
|
||||||
return {
|
anchorOffset: 0,
|
||||||
anchorOffset: 0,
|
};
|
||||||
};
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let id_seq = 0;
|
let id_seq = 0;
|
||||||
|
|||||||
@@ -11,10 +11,8 @@ zrequire('emoji');
|
|||||||
zrequire('message_store');
|
zrequire('message_store');
|
||||||
zrequire('markdown');
|
zrequire('markdown');
|
||||||
|
|
||||||
global.patch_builtin('window', {
|
set_global('location', {
|
||||||
location: {
|
origin: 'http://zulip.zulipdev.com',
|
||||||
origin: 'http://zulip.zulipdev.com',
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
set_global('page_params', {
|
set_global('page_params', {
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
const noop = function () {};
|
const noop = function () {};
|
||||||
|
|
||||||
set_global('document', {});
|
set_global('document', {});
|
||||||
global.patch_builtin('window', {
|
set_global('addEventListener', noop);
|
||||||
addEventListener: noop,
|
|
||||||
});
|
|
||||||
global.stub_out_jquery();
|
global.stub_out_jquery();
|
||||||
|
|
||||||
zrequire('message_store');
|
zrequire('message_store');
|
||||||
|
|||||||
@@ -9,10 +9,8 @@ zrequire('stream_data');
|
|||||||
zrequire('search_util');
|
zrequire('search_util');
|
||||||
set_global('page_params', {});
|
set_global('page_params', {});
|
||||||
|
|
||||||
global.patch_builtin('window', {
|
set_global('location', {
|
||||||
location: {
|
hash: "#streams/1/announce",
|
||||||
hash: "#streams/1/announce",
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
zrequire('subs');
|
zrequire('subs');
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ set_global('document', {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
global.patch_builtin('window', {});
|
|
||||||
|
|
||||||
set_global('csrf_token', 'whatever');
|
set_global('csrf_token', 'whatever');
|
||||||
|
|
||||||
set_global('$', () => {});
|
set_global('$', () => {});
|
||||||
@@ -130,7 +128,7 @@ document_stub.on = () => {};
|
|||||||
document_stub.idle = () => {};
|
document_stub.idle = () => {};
|
||||||
|
|
||||||
const window_stub = $.create('window-stub');
|
const window_stub = $.create('window-stub');
|
||||||
window.to_$ = () => window_stub;
|
set_global('to_$', () => window_stub);
|
||||||
window_stub.idle = () => {};
|
window_stub.idle = () => {};
|
||||||
|
|
||||||
ui_init.initialize_kitchen_sink_stuff = () => {};
|
ui_init.initialize_kitchen_sink_stuff = () => {};
|
||||||
|
|||||||
@@ -10,9 +10,7 @@ set_global('page_params', {
|
|||||||
max_file_upload_size: 25,
|
max_file_upload_size: 25,
|
||||||
});
|
});
|
||||||
set_global('csrf_token', { });
|
set_global('csrf_token', { });
|
||||||
global.patch_builtin('window', {
|
set_global('bridge', false);
|
||||||
bridge: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Setting these up so that we can test that links to uploads within messages are
|
// Setting these up so that we can test that links to uploads within messages are
|
||||||
// automatically converted to server relative links.
|
// automatically converted to server relative links.
|
||||||
|
|||||||
@@ -14,16 +14,6 @@ require("@babel/register")({
|
|||||||
global.assert = require('assert');
|
global.assert = require('assert');
|
||||||
global._ = require('underscore/underscore.js');
|
global._ = require('underscore/underscore.js');
|
||||||
const _ = global._;
|
const _ = global._;
|
||||||
const windowObj = {
|
|
||||||
location: {
|
|
||||||
hash: '#',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
global.window = _.extend({}, windowObj, {
|
|
||||||
to_$: () => {
|
|
||||||
return windowObj;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
global.Dict = require('../../static/js/dict').Dict;
|
global.Dict = require('../../static/js/dict').Dict;
|
||||||
|
|
||||||
@@ -44,11 +34,16 @@ if (_.isEmpty(files)) {
|
|||||||
// Set up our namespace helpers.
|
// Set up our namespace helpers.
|
||||||
const namespace = require('./namespace.js');
|
const namespace = require('./namespace.js');
|
||||||
global.set_global = namespace.set_global;
|
global.set_global = namespace.set_global;
|
||||||
global.patch_builtin = namespace.patch_builtin;
|
global.patch_builtin = namespace.set_global;
|
||||||
global.zrequire = namespace.zrequire;
|
global.zrequire = namespace.zrequire;
|
||||||
global.stub_out_jquery = namespace.stub_out_jquery;
|
global.stub_out_jquery = namespace.stub_out_jquery;
|
||||||
global.with_overrides = namespace.with_overrides;
|
global.with_overrides = namespace.with_overrides;
|
||||||
|
|
||||||
|
global.window = new Proxy(global, {
|
||||||
|
set: (obj, prop, value) => namespace.set_global(prop, value),
|
||||||
|
});
|
||||||
|
global.to_$ = () => window;
|
||||||
|
|
||||||
// Set up stub helpers.
|
// Set up stub helpers.
|
||||||
const stub = require('./stub.js');
|
const stub = require('./stub.js');
|
||||||
global.with_stub = stub.with_stub;
|
global.with_stub = stub.with_stub;
|
||||||
@@ -114,6 +109,9 @@ global.run_test = (label, f) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
files.forEach(function (file) {
|
files.forEach(function (file) {
|
||||||
|
set_global('location', {
|
||||||
|
hash: '#',
|
||||||
|
});
|
||||||
global.patch_builtin('setTimeout', noop);
|
global.patch_builtin('setTimeout', noop);
|
||||||
global.patch_builtin('setInterval', noop);
|
global.patch_builtin('setInterval', noop);
|
||||||
_.throttle = immediate;
|
_.throttle = immediate;
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
const _ = require('underscore/underscore.js');
|
const _ = require('underscore/underscore.js');
|
||||||
|
|
||||||
let dependencies = [];
|
|
||||||
const requires = [];
|
const requires = [];
|
||||||
let old_builtins = {};
|
const new_globals = new Set();
|
||||||
|
let old_globals = {};
|
||||||
|
|
||||||
exports.set_global = function (name, val) {
|
exports.set_global = function (name, val) {
|
||||||
global[name] = val;
|
if (!(name in old_globals)) {
|
||||||
dependencies.push(name);
|
if (!(name in global)) {
|
||||||
return val;
|
new_globals.add(name);
|
||||||
};
|
}
|
||||||
|
old_globals[name] = global[name];
|
||||||
exports.patch_builtin = function (name, val) {
|
}
|
||||||
old_builtins[name] = global[name];
|
|
||||||
global[name] = val;
|
global[name] = val;
|
||||||
return val;
|
return val;
|
||||||
};
|
};
|
||||||
@@ -31,16 +30,15 @@ exports.zrequire = function (name, fn) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
exports.restore = function () {
|
exports.restore = function () {
|
||||||
dependencies.forEach(function (name) {
|
|
||||||
delete global[name];
|
|
||||||
});
|
|
||||||
requires.forEach(function (fn) {
|
requires.forEach(function (fn) {
|
||||||
delete require.cache[require.resolve(fn)];
|
delete require.cache[require.resolve(fn)];
|
||||||
});
|
});
|
||||||
dependencies = [];
|
_.extend(global, old_globals);
|
||||||
delete global.window.electron_bridge;
|
old_globals = {};
|
||||||
_.extend(global, old_builtins);
|
for (const name of new_globals) {
|
||||||
old_builtins = {};
|
delete global[name];
|
||||||
|
}
|
||||||
|
new_globals.clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.stub_out_jquery = function () {
|
exports.stub_out_jquery = function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user