const noop = () => {}; set_global('$', global.make_zjquery()); const input = $.create('input'); set_global('document', { createElement: () => input, execCommand: noop, }); $("body").append = noop; $(input).val = (arg) => { assert.equal(arg, "iago@zulip.com"); return { select: noop, }; }; zrequire('common'); function get_key_stub_html(key_text, expected_key, obj_name) { const key_stub = $.create(obj_name); key_stub.text(key_text); key_stub.expected_key = function () { return expected_key; }; return key_stub; } run_test('basics', () => { common.autofocus('#home'); assert($('#home').is_focused()); }); run_test('phrase_match', () => { assert(common.phrase_match('tes', 'test')); assert(common.phrase_match('Tes', 'test')); assert(common.phrase_match('Tes', 'Test')); assert(common.phrase_match('tes', 'Stream Test')); assert(!common.phrase_match('tests', 'test')); assert(!common.phrase_match('tes', 'hostess')); }); run_test('copy_data_attribute_value', () => { const elem = $.create('.envelope-link'); elem.data = (key) => { if (key === "admin-emails") { return "iago@zulip.com"; } return ""; }; elem.fadeOut = (val) => { assert.equal(val, 250); }; elem.fadeIn = (val) => { assert.equal(val, 1000); }; common.copy_data_attribute_value(elem, 'admin-emails'); }); run_test('adjust_mac_shortcuts', () => { const keys_to_test_mac = new Map([ ['Backspace', 'Delete'], ['Enter', 'Return'], ['Home', 'Fn + ←'], ['End', 'Fn + →'], ['PgUp', 'Fn + ↑'], ['PgDn', 'Fn + ↓'], ['X + Shift', 'X + Shift'], ['⌘ + Return', '⌘ + Return'], ['Enter or Backspace', "Return or Delete"], ['Ctrl', '⌘'], ['Ctrl + Shift', '⌘ + Shift'], ['Ctrl + Backspace + End', '⌘ + Delete + Fn + →'], ]); const keys_to_test_non_mac = new Map([ ['Backspace', 'Backspace'], ['Enter', 'Enter'], ['Home', 'Home'], ['End', 'End'], ['PgUp', 'PgUp'], ['PgDn', 'PgDn'], ['X + Shift', 'X + Shift'], ['⌘ + Return', '⌘ + Return'], ['Ctrl + Shift', 'Ctrl + Shift'], ['Ctrl + Backspace + End', 'Ctrl + Backspace + End'], ]); let key_no; let keys_elem_list = []; common.has_mac_keyboard = function () { return false; }; key_no = 1; keys_to_test_non_mac.forEach(function (value, key) { keys_elem_list.push(get_key_stub_html(key, value, "hotkey_non_mac_" + key_no)); key_no += 1; }); common.adjust_mac_shortcuts(".markdown_content"); keys_elem_list.forEach(function (key_elem) { assert(key_elem.text(), key_elem.expected_key()); }); keys_elem_list = []; key_no = 1; common.has_mac_keyboard = function () { return true; }; keys_to_test_mac.forEach(function (value, key) { keys_elem_list.push(get_key_stub_html(key, value, "hotkey_" + key_no)); key_no += 1; }); $(".markdown_content").each = (f) => { for (let key_id = 0; key_id < keys_elem_list.length; key_id += 1) { f.call(keys_elem_list[key_id]); } }; common.adjust_mac_shortcuts(".markdown_content"); keys_elem_list.forEach(function (key_elem) { assert.equal(key_elem.text(), key_elem.expected_key()); }); const markdown_hotkey_1 = get_key_stub_html("Ctrl + Backspace", "⌘ + Delete", "markdown_hotkey_1"); $(".markdown_content").each = (f) => { f.call(markdown_hotkey_1); }; common.adjust_mac_shortcuts(".markdown_content", true); assert.equal(markdown_hotkey_1.text(), markdown_hotkey_1.expected_key()); assert.equal(markdown_hotkey_1.hasClass("mac-cmd-key"), true); });