1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
describeComponent('mail_view/ui/recipients/recipients_input',function () {
'use strict';
beforeEach(function () {
setupComponent({name: 'to'});
});
describe('keys that finish address input', function () {
_.each([
[186, 'semicolon'],
[188, 'comma'],
[32, 'space']
], function (keycode) {
it(': ' + keycode[1], function () {
var addressEnteredEvent = spyOnEvent(this.$node, Pixelated.events.ui.recipients.entered);
var enterAddressKeyPressEvent = $.Event('keydown', { which: keycode[0] });
this.$node.val('a@b.c');
this.$node.trigger(enterAddressKeyPressEvent);
expect(addressEnteredEvent).toHaveBeenTriggeredOnAndWith(this, { name: 'to', address: 'a@b.c' });
});
it('wont add address if val is empty: ' + keycode[1], function () {
var addressEnteredEvent = spyOnEvent(this.$node, Pixelated.events.ui.recipients.entered);
var enterAddressKeyPressEvent = $.Event('keydown', { which: keycode[0] });
this.$node.val('');
this.$node.trigger(enterAddressKeyPressEvent);
expect(addressEnteredEvent).not.toHaveBeenTriggeredOnAndWith(this, { name: 'to', address: '' });
});
it('prevents event default regardless on input val when key is ' + keycode[1], function () {
var enterAddressKeyPressEvent = $.Event('keydown', { which: keycode[0] });
spyOn(enterAddressKeyPressEvent, 'preventDefault');
this.$node.val('');
this.$node.trigger(enterAddressKeyPressEvent);
expect(enterAddressKeyPressEvent.preventDefault).toHaveBeenCalled();
enterAddressKeyPressEvent.preventDefault.reset();
this.$node.val('anything');
this.$node.trigger(enterAddressKeyPressEvent);
expect(enterAddressKeyPressEvent.preventDefault).toHaveBeenCalled();
});
});
describe('when tab is pressed', function () {
it('enters an address and prevents event default if there is an input val', function () {
var addressEnteredEvent = spyOnEvent(this.$node, Pixelated.events.ui.recipients.entered);
var tabKeyPressEvent = $.Event('keydown', { which: 9});
spyOn(tabKeyPressEvent, 'preventDefault');
this.$node.val('a@b.c');
this.$node.trigger(tabKeyPressEvent);
expect(tabKeyPressEvent.preventDefault).toHaveBeenCalled();
expect(addressEnteredEvent).toHaveBeenTriggeredOnAndWith(this, { name: 'to', address: 'a@b.c'});
});
it('doesnt enter an address and doesnt prevent event default if input val is empty (so tab moves it to the next input)', function () {
var addressEnteredEvent = spyOnEvent(this.$node, Pixelated.events.ui.recipients.entered);
var tabKeyPressEvent = $.Event('keydown', { which: 9});
spyOn(tabKeyPressEvent, 'preventDefault');
this.$node.val('');
this.$node.trigger(tabKeyPressEvent);
expect(tabKeyPressEvent.preventDefault).not.toHaveBeenCalled();
expect(addressEnteredEvent).not.toHaveBeenTriggeredOnAndWith(this, { name: 'to', address: ''});
});
});
});
describe('on keyup', function () {
it('triggers inputHasNoMail if input is empty', function () {
var inputHasNoMailEvent = spyOnEvent(document, Pixelated.events.ui.recipients.inputHasNoMail);
this.$node.val('');
this.$node.trigger('keyup');
expect(inputHasNoMailEvent).toHaveBeenTriggeredOn(document);
});
it('triggers inputHasMail if input is not empty', function () {
var inputHasMailEvent = spyOnEvent(document, Pixelated.events.ui.recipients.inputHasMail);
this.$node.val('lalala');
this.$node.trigger('keyup');
expect(inputHasMailEvent).toHaveBeenTriggeredOn(document, { name: 'to' });
});
});
});
|