module('Selection containers - Open On Key Down'); var KEYS = require('select2/keys'); var $ = require('jquery'); function buildKeyDownEvent(keyCode, eventProps){ return $.Event('keydown', $.extend({ } , { which: keyCode} , eventProps)); } function testAbled(isEnabled, testName, keyCode, eventProps, fn){ test(testName, function (assert){ var $element = $(''); $('#qunit-fixture').append($element); $element.select2({ disabled: !isEnabled} ); var select2 = $element.data('select2'); var $selection = select2.$selection; assert.notOk(select2.isOpen(), 'The instance should not be open'); assert.equal(select2.isEnabled(), isEnabled); var event = buildKeyDownEvent(keyCode, eventProps); assert.ok(event.which, 'The event\'s key code (.which) should be set'); $selection.trigger(event); fn(assert, select2); } ); } function testEnabled(testName, keyCode, eventProps, fn){ testAbled(true , testName, keyCode, eventProps, fn); } function testDisabled(testName, keyCode, eventProps, fn){ testAbled(false , testName, keyCode, eventProps, fn); } function assertOpened(assert, select2){ assert.ok(select2.isOpen(), 'The element should be open'); } function assertNotOpened(assert, select2){ assert.notOk(select2.isOpen(), 'The element should not be open'); } testEnabled('enabled element will open on ENTER', KEYS.ENTER, { } , assertOpened); testEnabled('enabled element will open on SPACE', KEYS.SPACE, { } , assertOpened); testEnabled('enabled element will open on ALT+DOWN', KEYS.DOWN, { altKey: true } , assertOpened); testEnabled('enabled element will not open on UP', KEYS.UP, { } , assertNotOpened); testEnabled('enabled element will not open on DOWN', KEYS.UP, { } , assertNotOpened); testEnabled('enabled element will not open on LEFT', KEYS.UP, { } , assertNotOpened); testEnabled('enabled element will not open on RIGHT', KEYS.UP, { } , assertNotOpened); testDisabled('disabled element will not open on ENTER', KEYS.ENTER, { } , assertNotOpened); testDisabled('disabled element will not open on SPACE', KEYS.SPACE, { } , assertNotOpened); testDisabled('disabled element will not open on ALT+DOWN', KEYS.DOWN, { altKey: true } , assertNotOpened); testDisabled('disabled element will not open on UP', KEYS.UP, { } , assertNotOpened); testDisabled('disabled element will not open on DOWN', KEYS.UP, { } , assertNotOpened); testDisabled('disabled element will not open on LEFT', KEYS.UP, { } , assertNotOpened); testDisabled('disabled element will not open on RIGHT', KEYS.UP, { } , assertNotOpened);