UNPKG

11 kBJavaScriptView Raw
1import { NgZone } from '@angular/core';
2var /** @type {?} */ lorem_ipsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi maximus nisl lobortis interdum condimentum. Cras volutpat, massa quis vehicula eleifend, turpis mauris sodales erat, ut varius ligula ipsum et turpis. Aliquam erat volutpat. Maecenas sodales pellentesque auctor. Suspendisse faucibus a erat sit amet pretium. Vestibulum nec tempus tellus. Mauris fringilla faucibus dui sed vestibulum. Curabitur porttitor consectetur nisl. Nulla porta, neque sed congue tempus, erat nunc rutrum diam, eu elementum sapien leo quis eros. Donec non convallis felis. Nam eu pharetra sapien.';
3export var /** @type {?} */ TEXT_CORPUS = [
4 ['hola', 'hola'],
5 ['', ''],
6 [' ', ' '],
7 ['adiós', 'adiós'],
8 ['hola y adiós', 'hola y adiós'],
9 [lorem_ipsum, lorem_ipsum]
10];
11export var /** @type {?} */ NUMBER_CORPUS = [
12 [-1, -1],
13 [0, 0],
14 [-123456789, -123456789],
15 [1.1234, 1.1234],
16 [123456789, 123456789],
17 ['1.1234', 1.1234],
18 ['123456789', 123456789],
19 ['-123456789', -123456789]
20];
21export var /** @type {?} */ BOOLEAN_CORPUS = [
22 [true, true],
23 [false, false],
24 ['', true],
25 ['false', false],
26 ['true', true],
27];
28export var /** @type {?} */ ANY_CORPUS = [
29 [true, true],
30 [false, false],
31 [0, 0],
32 ['', ''],
33 [' ', ' '],
34 ['hola', 'hola']
35];
36/**
37 * @template T
38 * @param {?} input
39 * @param {?} config
40 * @return {?}
41 */
42export function commonInputTest(input, config) {
43 // TODO test form register/deregister
44 // TODO test item classes
45 // TODO test disable
46 var /** @type {?} */ zone = new NgZone({ enableLongStackTrace: true });
47 zone.run(function () {
48 if (config.testItem === true && !input._item) {
49 (void 0) /* assert */;
50 }
51 if (config.testForm === true && !input._form) {
52 (void 0) /* assert */;
53 }
54 // Run tests before initialization
55 testInput(input, config, false);
56 input.ngAfterContentInit();
57 ((input)).ngAfterViewInit && ((input)).ngAfterViewInit();
58 // Run tests after initialization
59 testInput(input, config, true);
60 // Run tests without item
61 if (config.testItem === true && !input._item) {
62 input._item = undefined;
63 testInput(input, config, true);
64 }
65 // Run tests without item
66 if (config.testForm === true && !input._form) {
67 input._form = undefined;
68 testInput(input, config, true);
69 }
70 testInput(input, config, true);
71 input.ngOnDestroy();
72 (void 0) /* assert */;
73 });
74}
75/**
76 * @template T
77 * @param {?} input
78 * @param {?} config
79 * @param {?} isInit
80 * @return {?}
81 */
82function testInput(input, config, isInit) {
83 testState(input, config, isInit);
84 testWriteValue(input, config, isInit);
85 testNgModelChange(input, config, isInit);
86}
87/**
88 * @template T
89 * @param {?} input
90 * @param {?} config
91 * @param {?} isInit
92 * @return {?}
93 */
94function testState(input, config, isInit) {
95 assertEqual(input._init, isInit, 'input must be init');
96 assertEqual(input._isFocus, false, 'should not be focus');
97 assertEqual(input.isFocus(), false, 'should not be focus');
98 assertEqual(input.value, config.defaultValue, 'default value is wrong');
99 if (isInit) {
100 var /** @type {?} */ blurCount_1 = 0;
101 var /** @type {?} */ focusCount_1 = 0;
102 var /** @type {?} */ onTouchedCalled_1 = 0;
103 var /** @type {?} */ subBlur = input.ionBlur.subscribe(function (ev) {
104 assertEqual(ev, input, 'ionBlur argument is wrong');
105 blurCount_1++;
106 if (config.onFocusChange && config.onFocusChange(false) !== true) {
107 (void 0) /* assert */;
108 }
109 });
110 var /** @type {?} */ subFocus = input.ionFocus.subscribe(function (ev) {
111 assertEqual(ev, input, 'ionFocus argument is wrong');
112 focusCount_1++;
113 if (config.onFocusChange && config.onFocusChange(true) !== true) {
114 (void 0) /* assert */;
115 }
116 });
117 input.registerOnTouched(function () {
118 assertEqual(onTouchedCalled_1, 0, 'registerOnTouched: internal error');
119 onTouchedCalled_1++;
120 });
121 input._fireBlur();
122 assertEqual(blurCount_1, 0, 'blur should not have been emitted');
123 assertEqual(onTouchedCalled_1, 0, 'touched should not have been called');
124 input._fireFocus();
125 assertEqual(input._isFocus, true, 'should be focus');
126 assertEqual(input.isFocus(), true, 'should be focus');
127 input._fireFocus();
128 input._fireBlur();
129 assertEqual(input._isFocus, false, 'should be not focus');
130 assertEqual(input.isFocus(), false, 'should be not focus');
131 assertEqual(onTouchedCalled_1, 1, 'touched should have been called');
132 input._fireBlur(); // it should not crash
133 assertEqual(focusCount_1, 1, 'ionFocus was not called correctly');
134 assertEqual(blurCount_1, 1, 'ionBlur was not called correctly');
135 subBlur.unsubscribe();
136 subFocus.unsubscribe();
137 }
138}
139/**
140 * @template T
141 * @param {?} input
142 * @param {?} config
143 * @param {?} isInit
144 * @return {?}
145 */
146function testWriteValue(input, config, isInit) {
147 var /** @type {?} */ test;
148 var /** @type {?} */ i;
149 var /** @type {?} */ ionChangeCalled = 0;
150 var /** @type {?} */ OnChangeCalled = 0;
151 var /** @type {?} */ OnTouchedCalled = 0;
152 var /** @type {?} */ ngModelValue;
153 // Test ionChange
154 var /** @type {?} */ sub = input.ionChange.subscribe(function (ev) {
155 assertEqual(ionChangeCalled, 0, 'ionChange: internal error');
156 assertEqual(ev, input, 'ionChange: ev is not the input');
157 assertEqual(ev.value, test[1], 'ionChange: value does not match');
158 assertEqual(ngModelValue, test[1], 'ionChange: ngmodel was not updated');
159 ionChangeCalled++;
160 });
161 // Test registerOnChange
162 input.registerOnChange(function (ev) {
163 assertEqual(OnChangeCalled, 0, 'registerOnChange: internal error');
164 assertEqual(input.value, ev, 'registerOnChange: ev output does not match');
165 assertEqual(input.value, test[1], 'registerOnChange: value does not match');
166 ngModelValue = ev;
167 OnChangeCalled++;
168 });
169 // Test registerOnTouched
170 input.registerOnTouched(function () {
171 assertEqual(OnTouchedCalled, 0, 'registerOnTouched: internal error');
172 OnTouchedCalled++;
173 });
174 // Run corpus
175 for (i = 0; i < config.corpus.length; i++) {
176 test = config.corpus[i];
177 input.value = test[0];
178 assertEqual(input.value, test[1], 'loop: input/output does not match');
179 if (isInit) {
180 assertEqual(ionChangeCalled, 1, 'loop: ionChange error');
181 if (config.onValueChange && config.onValueChange(test[1]) !== true) {
182 (void 0) /* assert */;
183 }
184 }
185 else {
186 assertEqual(ionChangeCalled, 0, 'loop: ionChange error');
187 }
188 assertEqual(OnChangeCalled, 1, 'loop: OnChangeCalled was not called');
189 assertEqual(OnTouchedCalled, 0, 'loop: OnTouchedCalled was called');
190 OnTouchedCalled = OnChangeCalled = ionChangeCalled = 0;
191 // Set same value (it should not redispatch)
192 input.value = test[0];
193 assertEqual(ionChangeCalled, 0, 'loop: ionChange should not be called');
194 assertEqual(OnChangeCalled, 0, 'loop: OnChangeCalled should not be called');
195 // TODO OnTouchedCalled?
196 OnTouchedCalled = OnChangeCalled = ionChangeCalled = 0;
197 }
198 // Test undefined
199 input.value = undefined;
200 assertEqual(input.value, test[1], 'undefined should not change the value');
201 assertEqual(ionChangeCalled, 0, 'undefined: ionChange should not be called');
202 assertEqual(OnChangeCalled, 0, 'undefined: OnChangeCalled should not be called');
203 assertEqual(OnTouchedCalled, 0, 'undefined: OnTouchedCalled should not be called');
204 // Test null (reset)
205 test = [null, config.defaultValue];
206 input.value = null;
207 assertEqual(input.value, config.defaultValue, 'null: wrong default value');
208 assertEqual(OnChangeCalled, 1, 'null: OnChangeCalled was not called');
209 assertEqual(OnTouchedCalled, 0, 'null: OnTouchedCalled was called');
210 input.registerOnChange(null);
211 input.registerOnTouched(null);
212 sub.unsubscribe();
213}
214/**
215 * @template T
216 * @param {?} input
217 * @param {?} config
218 * @param {?} isInit
219 * @return {?}
220 */
221function testNgModelChange(input, config, isInit) {
222 var /** @type {?} */ test;
223 var /** @type {?} */ i;
224 var /** @type {?} */ ionChangeCalled = 0;
225 var /** @type {?} */ OnChangeCalled = 0;
226 var /** @type {?} */ OnTouchedCalled = 0;
227 // Test ionChange
228 var /** @type {?} */ sub = input.ionChange.subscribe(function (ev) {
229 assertEqual(ionChangeCalled, 0, 'internal error');
230 assertEqual(ev, input, 'ev output does not match');
231 assertEqual(test[1], ev.value, 'value does not match');
232 ionChangeCalled++;
233 });
234 // Test registerOnChange
235 input.registerOnChange(function () {
236 OnChangeCalled++;
237 });
238 // Test registerOnChange
239 input.registerOnTouched(function () {
240 OnTouchedCalled++;
241 });
242 // Run corpus
243 for (i = 0; i < config.corpus.length; i++) {
244 test = config.corpus[i];
245 input.writeValue(test[0]);
246 assertEqual(input.value, test[1], 'input/output does not match');
247 if (isInit) {
248 assertEqual(ionChangeCalled, 1, 'ionChange error');
249 if (config.onValueChange && config.onValueChange(test[1]) !== true) {
250 (void 0) /* assert */;
251 }
252 }
253 else {
254 assertEqual(ionChangeCalled, 0, 'ionChange error');
255 }
256 assertEqual(OnChangeCalled, 0, 'OnChangeCalled should not be called');
257 assertEqual(OnTouchedCalled, 0, 'OnTouchedCalled should not be called');
258 OnTouchedCalled = OnChangeCalled = ionChangeCalled = 0;
259 // Set same value (it should not redispatch)
260 input.writeValue(test[0]);
261 input.value = test[0];
262 assertEqual(ionChangeCalled, 0, 'ionChange should not be called');
263 assertEqual(OnChangeCalled, 0, 'OnChangeCalled should not be called');
264 // TODO OnTouchedCalled?
265 OnTouchedCalled = OnChangeCalled = ionChangeCalled = 0;
266 }
267 input.registerOnChange(null);
268 input.registerOnTouched(null);
269 sub.unsubscribe();
270 input.value = config.defaultValue;
271}
272/**
273 * @param {?} a
274 * @param {?} b
275 * @param {?} message
276 * @return {?}
277 */
278function assertEqual(a, b, message) {
279 if (!equal(a, b)) {
280 (void 0) /* assert */;
281 }
282}
283/**
284 * @param {?} a
285 * @param {?} b
286 * @return {?}
287 */
288function equal(a, b) {
289 if (a === b) {
290 return true;
291 }
292 // return false;
293 return JSON.stringify(a) === JSON.stringify(b);
294}
295//# sourceMappingURL=input-tester.js.map
\No newline at end of file