discourse/test/javascripts/components/keyboard-shortcuts-test.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

155 lines
4.5 KiB
JavaScript
Raw Normal View History

2015-08-11 05:11:27 +08:00
import DiscourseURL from "discourse/lib/url";
2014-07-31 06:56:01 +08:00
var testMouseTrap;
2015-08-11 05:11:27 +08:00
import KeyboardShortcuts from "discourse/lib/keyboard-shortcuts";
2014-07-31 06:56:01 +08:00
2017-06-15 01:57:58 +08:00
QUnit.module("lib:keyboard-shortcuts", {
beforeEach() {
2014-07-31 06:56:01 +08:00
var _bindings = {};
2014-07-31 06:56:01 +08:00
testMouseTrap = {
bind: function (bindings, callback) {
var registerBinding = function (binding) {
2014-07-31 06:56:01 +08:00
_bindings[binding] = callback;
}.bind(this);
if (Array.isArray(bindings)) {
bindings.forEach(registerBinding, this);
} else {
registerBinding(bindings);
}
},
trigger: function (binding) {
2014-07-31 06:56:01 +08:00
_bindings[binding].call();
},
};
2015-08-11 05:11:27 +08:00
sandbox.stub(DiscourseURL, "routeTo");
$("#qunit-fixture").html(
[
"<article class='topic-post selected'>",
"<a class='post-date'></a>" + "</article>",
"<div class='notification-options'>",
" <ul>",
" <li data-id='0'><a></a></li>",
" <li data-id='1'><a></a></li>",
" <li data-id='2'><a></a></li>",
" <li data-id='3'><a></a></li>",
" </ul>",
"</div>",
"<table class='topic-list'>",
" <tr class='topic-list-item selected'><td>",
" <a class='title'></a>",
" </td></tr>",
"</table>",
"<div id='topic-footer-buttons'>",
2014-01-10 05:22:54 +08:00
" <button class='star'></button>",
" <button class='create'></button>",
" <button class='share'></button>",
2014-08-30 05:54:50 +08:00
" <button id='dismiss-new-top'></button>",
" <button id='dismiss-topics-top'></button>",
"</div>",
2014-08-30 06:03:27 +08:00
"<div class='alert alert-info clickable'></div>",
"<button id='create-topic'></button>",
"<div id='user-notifications'></div>",
"<div id='toggle-hamburger-menu'></div>",
"<div id='search-button'></div>",
2014-08-27 12:47:23 +08:00
"<div id='current-user'></div>",
"<div id='keyboard-help'></div>",
].join("\n")
);
},
2017-06-15 01:57:58 +08:00
afterEach() {
$("#qunit-scratch").html("");
testMouseTrap = undefined;
},
});
var pathBindings = KeyboardShortcuts.PATH_BINDINGS || {};
Object.keys(pathBindings).forEach((path) => {
const binding = pathBindings[path];
var testName = binding + " goes to " + path;
2017-06-15 01:57:58 +08:00
test(testName, function (assert) {
KeyboardShortcuts.bindEvents();
2014-07-31 06:56:01 +08:00
testMouseTrap.trigger(binding);
2017-06-15 01:57:58 +08:00
assert.ok(DiscourseURL.routeTo.calledWith(path));
});
});
var clickBindings = KeyboardShortcuts.CLICK_BINDINGS || {};
Object.keys(clickBindings).forEach((selector) => {
const binding = clickBindings[selector];
var bindings = binding.split(",");
var testName = binding + " clicks on " + selector;
2017-06-15 01:57:58 +08:00
test(testName, function (assert) {
KeyboardShortcuts.bindEvents();
$(selector).on("click", function () {
2017-06-15 01:57:58 +08:00
assert.ok(true, selector + " was clicked");
});
bindings.forEach(function (b) {
testMouseTrap.trigger(b);
}, this);
});
});
var functionBindings = KeyboardShortcuts.FUNCTION_BINDINGS || {};
Object.keys(functionBindings).forEach((func) => {
const binding = functionBindings[func];
var testName = binding + " calls " + func;
2017-06-15 01:57:58 +08:00
test(testName, function (assert) {
2015-08-11 05:11:27 +08:00
sandbox.stub(KeyboardShortcuts, func, function () {
2017-06-15 01:57:58 +08:00
assert.ok(true, func + " is called when " + binding + " is triggered");
});
KeyboardShortcuts.bindEvents();
2014-07-31 06:56:01 +08:00
testMouseTrap.trigger(binding);
});
});
2017-06-15 01:57:58 +08:00
QUnit.test("selectDown calls _moveSelection with 1", (assert) => {
var stub = sandbox.stub(KeyboardShortcuts, "_moveSelection");
2015-08-11 05:11:27 +08:00
KeyboardShortcuts.selectDown();
assert.ok(stub.calledWith(1), "_moveSelection is called with 1");
});
2017-06-15 01:57:58 +08:00
QUnit.test("selectUp calls _moveSelection with -1", (assert) => {
var stub = sandbox.stub(KeyboardShortcuts, "_moveSelection");
2015-08-11 05:11:27 +08:00
KeyboardShortcuts.selectUp();
assert.ok(stub.calledWith(-1), "_moveSelection is called with -1");
});
2017-06-15 01:57:58 +08:00
QUnit.test("goBack calls history.back", (assert) => {
2014-07-31 06:56:01 +08:00
var called = false;
sandbox.stub(history, "back").callsFake(function () {
2014-07-31 06:56:01 +08:00
called = true;
});
2015-08-11 05:11:27 +08:00
KeyboardShortcuts.goBack();
2017-06-15 01:57:58 +08:00
assert.ok(called, "history.back is called");
});
2017-06-15 01:57:58 +08:00
QUnit.test("nextSection calls _changeSection with 1", (assert) => {
2015-08-11 05:11:27 +08:00
var spy = sandbox.spy(KeyboardShortcuts, "_changeSection");
2015-08-11 05:11:27 +08:00
KeyboardShortcuts.nextSection();
2017-06-15 01:57:58 +08:00
assert.ok(spy.calledWith(1), "_changeSection is called with 1");
});
2017-06-15 01:57:58 +08:00
QUnit.test("prevSection calls _changeSection with -1", (assert) => {
2015-08-11 05:11:27 +08:00
var spy = sandbox.spy(KeyboardShortcuts, "_changeSection");
2015-08-11 05:11:27 +08:00
KeyboardShortcuts.prevSection();
2017-06-15 01:57:58 +08:00
assert.ok(spy.calledWith(-1), "_changeSection is called with -1");
});