forked from angular/angular.js
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathngEventDirsSpec.js
153 lines (114 loc) · 4.66 KB
/
ngEventDirsSpec.js
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
'use strict';
describe('event directives', function() {
var element;
afterEach(function() {
dealoc(element);
});
describe('ngSubmit', function() {
it('should get called on form submit', inject(function($rootScope, $compile) {
element = $compile(
'<form action="/foo" ng-submit="submitted = true">' +
'<input type="submit" />' +
'</form>')($rootScope);
$rootScope.$digest();
// Support: Chrome 60+
// We need to add the form to the DOM in order for `submit` events to be properly fired.
window.document.body.appendChild(element[0]);
// prevent submit within the test harness
element.on('submit', function(e) { e.preventDefault(); });
expect($rootScope.submitted).toBeUndefined();
browserTrigger(element.children()[0]);
expect($rootScope.submitted).toEqual(true);
}));
it('should expose event on form submit', inject(function($rootScope, $compile) {
$rootScope.formSubmission = function(e) {
if (e) {
$rootScope.formSubmitted = 'foo';
}
};
element = $compile(
'<form action="/foo" ng-submit="formSubmission($event)">' +
'<input type="submit" />' +
'</form>')($rootScope);
$rootScope.$digest();
// Support: Chrome 60+ (on Windows)
// We need to add the form to the DOM in order for `submit` events to be properly fired.
window.document.body.appendChild(element[0]);
// prevent submit within the test harness
element.on('submit', function(e) { e.preventDefault(); });
expect($rootScope.formSubmitted).toBeUndefined();
browserTrigger(element.children()[0]);
expect($rootScope.formSubmitted).toEqual('foo');
}));
});
describe('focus', function() {
describe('call the listener asynchronously during $apply', function() {
function run(scope) {
inject(function($compile) {
element = $compile('<input type="text" ng-focus="focus()">')(scope);
scope.focus = jasmine.createSpy('focus');
scope.$apply(function() {
element.triggerHandler('focus');
expect(scope.focus).not.toHaveBeenCalled();
});
expect(scope.focus).toHaveBeenCalledOnce();
});
}
it('should call the listener with non isolate scopes', inject(function($rootScope) {
run($rootScope.$new());
}));
it('should call the listener with isolate scopes', inject(function($rootScope) {
run($rootScope.$new(true));
}));
});
it('should call the listener synchronously inside of $apply if outside of $apply',
inject(function($rootScope, $compile) {
element = $compile('<input type="text" ng-focus="focus()" ng-model="value">')($rootScope);
$rootScope.focus = jasmine.createSpy('focus').and.callFake(function() {
$rootScope.value = 'newValue';
});
element.triggerHandler('focus');
expect($rootScope.focus).toHaveBeenCalledOnce();
expect(element.val()).toBe('newValue');
}));
});
describe('DOM event object', function() {
it('should allow access to the $event object', inject(function($rootScope, $compile) {
var scope = $rootScope.$new();
element = $compile('<button ng-click="e = $event">BTN</button>')(scope);
element.triggerHandler('click');
expect(scope.e.target).toBe(element[0]);
}));
});
describe('blur', function() {
describe('call the listener asynchronously during $apply', function() {
function run(scope) {
inject(function($compile) {
element = $compile('<input type="text" ng-blur="blur()">')(scope);
scope.blur = jasmine.createSpy('blur');
scope.$apply(function() {
element.triggerHandler('blur');
expect(scope.blur).not.toHaveBeenCalled();
});
expect(scope.blur).toHaveBeenCalledOnce();
});
}
it('should call the listener with non isolate scopes', inject(function($rootScope) {
run($rootScope.$new());
}));
it('should call the listener with isolate scopes', inject(function($rootScope) {
run($rootScope.$new(true));
}));
});
it('should call the listener synchronously inside of $apply if outside of $apply',
inject(function($rootScope, $compile) {
element = $compile('<input type="text" ng-blur="blur()" ng-model="value">')($rootScope);
$rootScope.blur = jasmine.createSpy('blur').and.callFake(function() {
$rootScope.value = 'newValue';
});
element.triggerHandler('blur');
expect($rootScope.blur).toHaveBeenCalledOnce();
expect(element.val()).toBe('newValue');
}));
});
});