fuelux
Version:
Base Fuel UX styles and controls
112 lines (89 loc) • 4.35 kB
JavaScript
define(function keyboardNavigationModuleFactory (require) {
var $ = require('jquery');
return function leftKeyModule (QUnit) {
QUnit.module( 'should respond to left key', {}, function testLeftKeyPresses () {
QUnit.test('on top node when branch is closed', function loadTree (assert) {
assert.expect( 3 );
var $tree = this.$tree;
var leftKeyDown = this.getKeyDown('left');
$tree.one('initialized.fu.tree', function selectFolder () {
$tree.one('selected.fu.tree', function triggerKeypress () {
var $focused = $(document.activeElement);
assert.ok(!$focused.hasClass('tree-open'), 'key is being pressed on closed folder.');
$tree.one('keyboardNavigated.fu.tree', function testFocus () {
var $afterKeypressFocus = $(document.activeElement);
assert.equal($focused.attr('id'), $afterKeypressFocus.attr('id'), 'focus does not change upon keypress.');
assert.ok(!$focused.hasClass('tree-open'), 'folder is still closed.');
});
$focused.trigger(leftKeyDown);
});
// focus on first selectable folder
$tree.tree('selectFolder', $($tree.find('.tree-branch:not(".hidden")')[0]));
});
$tree.tree({
dataSource: this.dataSource
});
});
QUnit.skip('on child node when branch is closed', function loadTree (assert) {
// The following doesn't actually work due to issues with browsers and focus.
// Gave up due to time constraints. If you touch this part of the tree, please complete this test
assert.expect( 4 );
var $tree = this.$tree;
var self = this;
$tree.one('initialized.fu.tree', function selectFolder () {
$tree.one('setFocus.fu.tree', function triggerDisclosure () {
var $finalTargetFolder = $(document.activeElement);
$tree.one('disclosedFolder.fu.tree', function triggerKeypress () {
$tree.one('setFocus.fu.tree', function selectChildFolder () {
var $focused = $(document.activeElement);
assert.notOk($focused.hasClass('tree-open'), 'key is being pressed on closed folder.');
assert.notEqual($focused.attr('id'), $finalTargetFolder.attr('id'), 'focus has changed from initially targeted folder.');
$tree.on('keyboardNavigated.fu.tree', function testFocus () {
var $finalFocusedFolder = $(document.activeElement);
assert.equal($finalFocusedFolder.attr('id'), $finalTargetFolder.attr('id'), 'focus has changed.');
assert.notOk($focused.hasClass('tree-open'), 'folder is now closed.');
});
var leftKeyDown = self.getKeyDown('left', $focused);
$focused.trigger(leftKeyDown);
});
// focus on first selectable folder
$tree.tree('selectFolder', $($finalTargetFolder.find('.tree-branch:not(".hidden")')[0]));
});
$tree.tree('discloseFolder', $($tree.find('.tree-branch:not(".hidden")')[0]));
});
// focus on first selectable folder
$tree.tree('selectFolder', $($tree.find('.tree-branch:not(".hidden")')[0]));
});
$tree.tree({
dataSource: this.dataSource
});
});
QUnit.test('when branch is disclosed, closes branch', function respondsToKeyboardInput (assert) {
assert.expect( 3 );
var $tree = this.$tree;
var self = this;
$tree.one('initialized.fu.tree', function selectFolder () {
$tree.one('setFocus.fu.tree', function triggerDisclosure () {
$tree.one('disclosedFolder.fu.tree', function triggerKeypress () {
var $focused = $(document.activeElement);
assert.ok($focused.hasClass('tree-open'), 'key is being pressed on open folder.');
$tree.on('keyboardNavigated.fu.tree', function testFocus () {
var $afterKeypressFocus = $(document.activeElement);
assert.equal($focused.attr('id'), $afterKeypressFocus.attr('id'), 'focus does not change upon keypress.');
assert.ok(!$focused.hasClass('tree-open'), 'folder is now closed.');
});
var leftKeyDown = self.getKeyDown('left', $focused);
$focused.trigger(leftKeyDown);
});
$tree.tree('discloseFolder', $($tree.find('.tree-branch:not(".hidden")')[0]));
});
// focus on first selectable folder
$tree.tree('selectFolder', $($tree.find('.tree-branch:not(".hidden")')[0]));
});
$tree.tree({
dataSource: this.dataSource
});
});
});
};
});