extjs-gpl
Version:
GPL licensed version of Sencha Ext JS
606 lines (579 loc) • 28.5 kB
JavaScript
describe("Ext.event.Event", function() {
var E = Ext.event.Event,
e;
function makeKeyEvent(config) {
e = new E(Ext.apply({
type: 'keydown'
}, config));
return e;
}
// The following key specs have their behaviour taken from the listed browsers.
// IE/WebKit share the same behaviour, however Gecko behaves differently in various
// cases.
//
// Each item listed is
// [expected, name, keyCode, charCode, options]
describe("isSpecialKey", function() {
function makeKeySuite(options) {
Ext.Object.each(options, function(type, values) {
describe(type, function() {
Ext.Array.forEach(values, function(value) {
var result = value[0],
key = value[1],
keyCode = value[2],
charCode = value[3],
keyOptions = value[4] || {};
it("should have " + key + " " + result, function() {
makeKeyEvent(Ext.apply({
type: type,
keyCode: keyCode,
charCode: charCode
}, keyOptions));
expect(e.isSpecialKey()).toBe(result);
});
});
});
});
}
// IE8-11 + Chrome follow the same behaviour
if (Ext.isGecko) {
makeKeySuite((function() {
var downupData = [
[true, 'ctrl', 17, 0, {ctrlKey: true}],
[true, 'shift', 16, 18, {shiftKey: true}],
[true, 'alt', 18, 0, {altKey: true}],
[false, 'a', 65, 0],
[false, 'c', 67, 0],
[false, 'x', 88, 0],
[false, 'ctrl+a', 65, 0, {ctrlKey: true}],
[false, 'ctrl+c', 67, 0, {ctrlKey: true}],
[false, 'ctrl+x', 88, 0, {ctrlKey: true}],
[false, 'shift+a', 65, 0, {shiftKey: true}],
[false, 'shift+c', 67, 0, {shiftKey: true}],
[false, 'shift+x', 88, 0, {shiftKey: true}],
[false, '1', 49, 0],
[false, '5', 53, 0],
[false, '8', 56, 0],
[false, '!', 49, 0, {shiftKey: true}],
[false, '%', 53, 0, {shiftKey: true}],
[false, '*', 56, 0, {shiftKey: true}],
[true, 'backspace', 8, 0],
[true, 'enter', 13, 0],
[true, 'home', 36, 0],
[true, 'end', 35, 0],
[true, 'insert', 45, 0],
[true, 'delete', 46, 0],
[true, 'pgup', 33, 0],
[true, 'pgdown', 34, 0],
[true, 'tab', 9, 0],
[true, 'esc', 27, 0],
[true, 'pause', 19, 0],
[true, 'capslock', 20, 0],
[true, 'printscr', 44, 0],
[true, 'arrowup', 38, 0],
[true, 'arrowdown', 40, 0],
[true, 'arrowleft', 37, 0],
[true, 'arrowright', 39, 0],
[false, ',', 188, 0],
[false, '.', 190, 0],
[false, '/', 191, 0],
[false, ';', 59, 0],
[false, '\'', 222, 0],
[false, '[', 219, 0],
[false, ']', 220, 0],
[false, '-', 173, 0],
[false, '<', 188, 0, {shiftKey: true}],
[false, '>', 190, 0, {shiftKey: true}],
[false, '?', 191, 0, {shiftKey: true}],
[false, ':', 59, 0, {shiftKey: true}],
[false, '"', 222, 0, {shiftKey: true}],
[false, '{', 219, 0, {shiftKey: true}],
[false, '}', 220, 0, {shiftKey: true}],
[false, '_', 173, 0, {shiftKey: true}]
];
return {
keydown: downupData,
keyup: downupData,
// Commented out keys don't fire
keypress: [
// ctrl
// shift
// alt
[false, 'a', 0, 97],
[false, 'c', 0, 99],
[false, 'x', 0, 120],
[false, 'ctrl+a', 0, 97, {ctrlKey: true}],
[false, 'ctrl+c', 0, 99, {ctrlKey: true}],
[false, 'ctrl+x', 0, 120, {ctrlKey: true}],
[false, 'shift+a', 0, 65, {shiftKey: true}],
[false, 'shift+c', 0, 67, {shiftKey: true}],
[false, 'shift+x', 0, 88, {shiftKey: true}],
[false, '1', 0, 49],
[false, '5', 0, 53],
[false, '8', 0, 56],
[false, '!', 0, 33, {shiftKey: true}],
[false, '%', 0, 37, {shiftKey: true}],
[false, '*', 0, 42, {shiftKey: true}],
[true, 'backspace', 8, 0],
[true, 'enter', 13, 0],
[true, 'home', 36, 0],
[true, 'end', 35, 0],
[true, 'insert', 45, 0],
[true, 'delete', 46, 0],
[true, 'pgup', 33, 0],
[true, 'pgdown', 34, 0],
[true, 'tab', 9, 0],
[true, 'esc', 27, 0],
[true, 'pause', 19, 0],
// capslock
// printscr
[true, 'arrowup', 38, 0],
[true, 'arrowdown', 40, 0],
[true, 'arrowleft', 37, 0],
[true, 'arrowright', 39, 0],
[false, ',', 0, 44],
[false, '.', 0, 46],
[false, '/', 0, 47],
[false, ';', 0, 59],
[false, '\'', 0, 39],
[false, '[', 0, 91],
[false, ']', 0, 93],
[false, '-', 0, 45],
[false, '<', 0, 60, {shiftKey: true}],
[false, '>', 0, 62, {shiftKey: true}],
[false, '?', 0, 63, {shiftKey: true}],
[false, ':', 0, 58, {shiftKey: true}],
[false, '"', 0, 34, {shiftKey: true}],
[false, '{', 0, 123, {shiftKey: true}],
[false, '}', 0, 125, {shiftKey: true}],
[false, '_', 0, 95, {shiftKey: true}]
]
};
})());
} else {
makeKeySuite((function() {
var downupData = [
[true, 'ctrl', 17, 0, {ctrlKey: true}],
[true, 'shift', 16, 18, {shiftKey: true}],
[true, 'alt', 18, 0, {altKey: true}],
[false, 'a', 65, 0],
[false, 'c', 67, 0],
[false, 'x', 88, 0],
[false, 'ctrl+a', 65, 0, {ctrlKey: true}],
[false, 'ctrl+c', 67, 0, {ctrlKey: true}],
[false, 'ctrl+x', 88, 0, {ctrlKey: true}],
[false, 'shift+a', 65, 0, {shiftKey: true}],
[false, 'shift+c', 67, 0, {shiftKey: true}],
[false, 'shift+x', 88, 0, {shiftKey: true}],
[false, '1', 49, 0],
[false, '5', 53, 0],
[false, '8', 56, 0],
[false, '!', 49, 0, {shiftKey: true}],
[false, '%', 53, 0, {shiftKey: true}],
[false, '*', 56, 0, {shiftKey: true}],
[true, 'backspace', 8, 0],
[true, 'enter', 13, 0],
[true, 'home', 36, 0],
[true, 'end', 35, 0],
[true, 'insert', 45, 0],
[true, 'delete', 46, 0],
[true, 'pgup', 33, 0],
[true, 'pgdown', 34, 0],
[true, 'tab', 9, 0],
[true, 'esc', 27, 0],
[true, 'pause', 19, 0],
[true, 'capslock', 20, 0],
[true, 'printscr', 44, 0],
[true, 'arrowup', 38, 0],
[true, 'arrowdown', 40, 0],
[true, 'arrowleft', 37, 0],
[true, 'arrowright', 39, 0],
[false, ',', 188, 0],
[false, '.', 190, 0],
[false, '/', 191, 0],
[false, ';', 186, 0],
[false, '\'', 222, 0],
[false, '[', 219, 0],
[false, ']', 220, 0],
[false, '-', 189, 0],
[false, '<', 188, 0, {shiftKey: true}],
[false, '>', 190, 0, {shiftKey: true}],
[false, '?', 191, 0, {shiftKey: true}],
[false, ':', 186, 0, {shiftKey: true}],
[false, '"', 222, 0, {shiftKey: true}],
[false, '{', 219, 0, {shiftKey: true}],
[false, '}', 220, 0, {shiftKey: true}],
[false, '_', 189, 0, {shiftKey: true}]
];
return {
keydown: downupData,
keyup: downupData,
// Commented out keys don't fire
keypress: [
// ctrl
// shift
// alt
[false, 'a', 97, 97],
[false, 'c', 99, 99],
[false, 'x', 120, 120],
// ctrl+a
// ctrl+c
// ctrl+x
[false, 'shift+a', 65, 65],
[false, 'shift+c', 67, 67],
[false, 'shift+x', 88, 88],
[false, '1', 49, 49],
[false, '5', 53, 53],
[false, '8', 56, 56],
[false, '!', 33, 33],
[false, '%', 37, 37],
[false, '*', 42, 42],
// backspace
[true, 'enter', 13, 13],
// home
// end
// insert
// delete
// pgup
// pgdown
// tab
// esc
// pause
// capslock
// printscr
// arrowup
// arrowdown
// arrowleft
// arrowright
[false, ',', 44, 44],
[false, '.', 46, 46],
[false, '/', 47, 47],
[false, ';', 59, 59],
[false, '\'', 39, 39],
[false, '[', 91, 91],
[false, ']', 93, 93],
[false, '-', 45, 45],
[false, '<', 60, 60, {shiftKey: true}],
[false, '>', 62, 62, {shiftKey: true}],
[false, '?', 63, 63, {shiftKey: true}],
[false, ':', 58, 58, {shiftKey: true}],
[false, '"', 34, 34, {shiftKey: true}],
[false, '{', 123, 123, {shiftKey: true}],
[false, '}', 125, 125, {shiftKey: true}],
[false, '_', 95, 95, {shiftKey: true}]
]
};
})());
}
});
describe("isNavKeyPress", function() {
function makeSuite(scrollableOnly) {
describe("scrollableOnly: " + scrollableOnly, function() {
function makeKeySuite(options) {
Ext.Object.each(options, function(type, values) {
describe(type, function() {
Ext.Array.forEach(values, function(value) {
var result = value[0],
key = value[1],
keyCode = value[2],
charCode = value[3],
keyOptions = value[4] || {};
it("should have " + key + " " + result, function() {
makeKeyEvent(Ext.apply({
type: type,
keyCode: keyCode,
charCode: charCode
}, keyOptions));
expect(e.isNavKeyPress(scrollableOnly)).toBe(result);
});
});
});
});
}
// IE8-11 + Chrome follow the same behaviour
if (Ext.isGecko) {
makeKeySuite((function() {
var downupData = [
[false, 'ctrl', 17, 0, {ctrlKey: true}],
[false, 'shift', 16, 18, {shiftKey: true}],
[false, 'alt', 18, 0, {altKey: true}],
[false, 'a', 65, 0],
[false, 'c', 67, 0],
[false, 'x', 88, 0],
[false, 'ctrl+a', 65, 0, {ctrlKey: true}],
[false, 'ctrl+c', 67, 0, {ctrlKey: true}],
[false, 'ctrl+x', 88, 0, {ctrlKey: true}],
[false, 'shift+a', 65, 0, {shiftKey: true}],
[false, 'shift+c', 67, 0, {shiftKey: true}],
[false, 'shift+x', 88, 0, {shiftKey: true}],
[false, '1', 49, 0],
[false, '5', 53, 0],
[false, '8', 56, 0],
[false, '!', 49, 0, {shiftKey: true}],
[false, '%', 53, 0, {shiftKey: true}],
[false, '*', 56, 0, {shiftKey: true}],
[false, 'backspace', 8, 0],
[!scrollableOnly, 'enter', 13, 0],
[true, 'home', 36, 0],
[true, 'end', 35, 0],
[false, 'insert', 45, 0],
[false, 'delete', 46, 0],
[true, 'pgup', 33, 0],
[true, 'pgdown', 34, 0],
[!scrollableOnly, 'tab', 9, 0],
[!scrollableOnly, 'esc', 27, 0],
[false, 'pause', 19, 0],
[false, 'capslock', 20, 0],
[false, 'printscr', 44, 0],
[true, 'arrowup', 38, 0],
[true, 'arrowdown', 40, 0],
[true, 'arrowleft', 37, 0],
[true, 'arrowright', 39, 0],
[false, ',', 188, 0],
[false, '.', 190, 0],
[false, '/', 191, 0],
[false, ';', 59, 0],
[false, '\'', 222, 0],
[false, '[', 219, 0],
[false, ']', 220, 0],
[false, '-', 173, 0],
[false, '<', 188, 0, {shiftKey: true}],
[false, '>', 190, 0, {shiftKey: true}],
[false, '?', 191, 0, {shiftKey: true}],
[false, ':', 59, 0, {shiftKey: true}],
[false, '"', 222, 0, {shiftKey: true}],
[false, '{', 219, 0, {shiftKey: true}],
[false, '}', 220, 0, {shiftKey: true}],
[false, '_', 173, 0, {shiftKey: true}]
];
return {
keydown: downupData,
keyup: downupData,
// Commented out keys don't fire
keypress: [
// ctrl
// shift
// alt
[false, 'a', 0, 97],
[false, 'c', 0, 99],
[false, 'x', 0, 120],
[false, 'ctrl+a', 0, 97, {ctrlKey: true}],
[false, 'ctrl+c', 0, 99, {ctrlKey: true}],
[false, 'ctrl+x', 0, 120, {ctrlKey: true}],
[false, 'shift+a', 0, 65, {shiftKey: true}],
[false, 'shift+c', 0, 67, {shiftKey: true}],
[false, 'shift+x', 0, 88, {shiftKey: true}],
[false, '1', 0, 49],
[false, '5', 0, 53],
[false, '8', 0, 56],
[false, '!', 0, 33, {shiftKey: true}],
[false, '%', 0, 37, {shiftKey: true}],
[false, '*', 0, 42, {shiftKey: true}],
[false, 'backspace', 8, 0],
[!scrollableOnly, 'enter', 13, 0],
[true, 'home', 36, 0],
[true, 'end', 35, 0],
[false, 'insert', 45, 0],
[false, 'delete', 46, 0],
[true, 'pgup', 33, 0],
[true, 'pgdown', 34, 0],
[!scrollableOnly, 'tab', 9, 0],
[!scrollableOnly, 'esc', 27, 0],
[false, 'pause', 19, 0],
// capslock
// printscr
[true, 'arrowup', 38, 0],
[true, 'arrowdown', 40, 0],
[true, 'arrowleft', 37, 0],
[true, 'arrowright', 39, 0],
[false, ',', 0, 44],
[false, '.', 0, 46],
[false, '/', 0, 47],
[false, ';', 0, 59],
[false, '\'', 0, 39],
[false, '[', 0, 91],
[false, ']', 0, 93],
[false, '-', 0, 45],
[false, '<', 0, 60, {shiftKey: true}],
[false, '>', 0, 62, {shiftKey: true}],
[false, '?', 0, 63, {shiftKey: true}],
[false, ':', 0, 58, {shiftKey: true}],
[false, '"', 0, 34, {shiftKey: true}],
[false, '{', 0, 123, {shiftKey: true}],
[false, '}', 0, 125, {shiftKey: true}],
[false, '_', 0, 95, {shiftKey: true}]
]
};
})());
} else {
makeKeySuite((function() {
var downupData = [
[false, 'ctrl', 17, 0, {ctrlKey: true}],
[false, 'shift', 16, 18, {shiftKey: true}],
[false, 'alt', 18, 0, {altKey: true}],
[false, 'a', 65, 0],
[false, 'c', 67, 0],
[false, 'x', 88, 0],
[false, 'ctrl+a', 65, 0, {ctrlKey: true}],
[false, 'ctrl+c', 67, 0, {ctrlKey: true}],
[false, 'ctrl+x', 88, 0, {ctrlKey: true}],
[false, 'shift+a', 65, 0, {shiftKey: true}],
[false, 'shift+c', 67, 0, {shiftKey: true}],
[false, 'shift+x', 88, 0, {shiftKey: true}],
[false, '1', 49, 0],
[false, '5', 53, 0],
[false, '8', 56, 0],
[false, '!', 49, 0, {shiftKey: true}],
[false, '%', 53, 0, {shiftKey: true}],
[false, '*', 56, 0, {shiftKey: true}],
[false, 'backspace', 8, 0],
[!scrollableOnly, 'enter', 13, 0],
[true, 'home', 36, 0],
[true, 'end', 35, 0],
[false, 'insert', 45, 0],
[false, 'delete', 46, 0],
[true, 'pgup', 33, 0],
[true, 'pgdown', 34, 0],
[!scrollableOnly, 'tab', 9, 0],
[!scrollableOnly, 'esc', 27, 0],
[false, 'pause', 19, 0],
[false, 'capslock', 20, 0],
[false, 'printscr', 44, 0],
[true, 'arrowup', 38, 0],
[true, 'arrowdown', 40, 0],
[true, 'arrowleft', 37, 0],
[true, 'arrowright', 39, 0],
[false, ',', 188, 0],
[false, '.', 190, 0],
[false, '/', 191, 0],
[false, ';', 186, 0],
[false, '\'', 222, 0],
[false, '[', 219, 0],
[false, ']', 220, 0],
[false, '-', 189, 0],
[false, '<', 188, 0, {shiftKey: true}],
[false, '>', 190, 0, {shiftKey: true}],
[false, '?', 191, 0, {shiftKey: true}],
[false, ':', 186, 0, {shiftKey: true}],
[false, '"', 222, 0, {shiftKey: true}],
[false, '{', 219, 0, {shiftKey: true}],
[false, '}', 220, 0, {shiftKey: true}],
[false, '_', 189, 0, {shiftKey: true}]
];
return {
keydown: downupData,
keyup: downupData,
// Commented out keys don't fire
keypress: [
// ctrl
// shift
// alt
[false, 'a', 97, 97],
[false, 'c', 99, 99],
[false, 'x', 120, 120],
// ctrl+a
// ctrl+c
// ctrl+x
[false, 'shift+a', 65, 65],
[false, 'shift+c', 67, 67],
[false, 'shift+x', 88, 88],
[false, '1', 49, 49],
[false, '5', 53, 53],
[false, '8', 56, 56],
[false, '!', 33, 33],
[false, '%', 37, 37],
[false, '*', 42, 42],
// backspace
[!scrollableOnly, 'enter', 13, 13],
// home
// end
// insert
// delete
// pgup
// pgdown
// tab
// esc
// pause
// capslock
// printscr
// arrowup
// arrowdown
// arrowleft
// arrowright
[false, ',', 44, 44],
[false, '.', 46, 46],
[false, '/', 47, 47],
[false, ';', 59, 59],
[false, '\'', 39, 39],
[false, '[', 91, 91],
[false, ']', 93, 93],
[false, '-', 45, 45],
[false, '<', 60, 60, {shiftKey: true}],
[false, '>', 62, 62, {shiftKey: true}],
[false, '?', 63, 63, {shiftKey: true}],
[false, ':', 58, 58, {shiftKey: true}],
[false, '"', 34, 34, {shiftKey: true}],
[false, '{', 123, 123, {shiftKey: true}],
[false, '}', 125, 125, {shiftKey: true}],
[false, '_', 95, 95, {shiftKey: true}]
]
};
})());
}
});
}
makeSuite(false);
makeSuite(true);
});
describe("time stamp", function() {
describe("delegated", function() {
var target, event;
beforeEach(function() {
target = Ext.getBody().createChild();
target.on('mousedown', function(e) {
event = e;
});
});
afterEach(function() {
target.destroy();
target = null;
});
it("should be the current date in milliseconds", function() {
var start = +new Date();
jasmine.fireMouseEvent(target,'mousedown');
var end = +new Date();
expect(event.time >= start && event.time <= end).toBe(true);
});
it("should set both time and timeStamp", function() {
jasmine.fireMouseEvent(target,'mousedown');
expect(event.time).toBe(event.timeStamp);
});
});
describe("non-delegated", function() {
var target, event;
beforeEach(function() {
target = Ext.getBody().createChild();
target.on({
mousedown: function(e) {
event = e;
},
delegated: false
});
});
afterEach(function() {
target.destroy();
target = null;
});
it("should be the current date in milliseconds", function() {
var start = +new Date();
jasmine.fireMouseEvent(target,'mousedown');
var end = +new Date();
expect(event.time >= start && event.time <= end).toBe(true);
});
it("should set both time and timeStamp", function() {
jasmine.fireMouseEvent(target,'mousedown');
expect(event.time).toBe(event.timeStamp);
});
});
});
});