|
7 | 7 | getModelDirectiveFromElement,
|
8 | 8 | getValueFromElement,
|
9 | 9 | htmlToElement,
|
| 10 | + isNumericalInputElement, |
| 11 | + isTextareaElement, |
| 12 | + isTextualInputElement, |
10 | 13 | setValueOnElement,
|
11 | 14 | } from '../src/dom_utils';
|
12 | 15 | import { noopElementDriver } from './tools';
|
@@ -324,3 +327,92 @@ describe('cloneHTMLElement', () => {
|
324 | 327 | expect(clone.outerHTML).toEqual('<div class="foo"></div>');
|
325 | 328 | });
|
326 | 329 | });
|
| 330 | + |
| 331 | +describe('isTextualInputElement', () => { |
| 332 | + describe.each([ |
| 333 | + ['text', true], |
| 334 | + ['email', true], |
| 335 | + ['password', true], |
| 336 | + ['search', true], |
| 337 | + ['tel', true], |
| 338 | + ['url', true], |
| 339 | + ['number', false], |
| 340 | + ['range', false], |
| 341 | + ['file', false], |
| 342 | + ['date', false], |
| 343 | + ['checkbox', false], |
| 344 | + ['radio', false], |
| 345 | + ['submit', false], |
| 346 | + ['reset', false], |
| 347 | + ['color', false], |
| 348 | + ['datetime-local', false], |
| 349 | + ['hidden', false], |
| 350 | + ['image', false], |
| 351 | + ['month', false], |
| 352 | + ['time', false], |
| 353 | + ['week', false], |
| 354 | + ])('input[type="%s"] should return %s', (type, expected) => { |
| 355 | + it(`returns ${expected}`, () => { |
| 356 | + const input = document.createElement('input'); |
| 357 | + if (typeof type === 'string') { |
| 358 | + input.type = type; |
| 359 | + } |
| 360 | + expect(isTextualInputElement(input)).toBe(expected); |
| 361 | + }); |
| 362 | + }); |
| 363 | + |
| 364 | + it('returns false for <textarea>', () => { |
| 365 | + const textarea = document.createElement('textarea'); |
| 366 | + expect(isTextualInputElement(textarea)).toBe(false); |
| 367 | + }); |
| 368 | + |
| 369 | + it('returns false for non-input elements', () => { |
| 370 | + const div = document.createElement('div'); |
| 371 | + expect(isTextualInputElement(div)).toBe(false); |
| 372 | + }); |
| 373 | +}); |
| 374 | + |
| 375 | +describe('isTextareaElement', () => { |
| 376 | + it('returns true for <textarea>', () => { |
| 377 | + const textarea = document.createElement('textarea'); |
| 378 | + expect(isTextareaElement(textarea)).toBe(true); |
| 379 | + }); |
| 380 | + |
| 381 | + it('returns false for <input>', () => { |
| 382 | + const input = document.createElement('input'); |
| 383 | + input.type = 'text'; |
| 384 | + expect(isTextareaElement(input)).toBe(false); |
| 385 | + }); |
| 386 | + |
| 387 | + it('returns false for other elements', () => { |
| 388 | + const span = document.createElement('span'); |
| 389 | + expect(isTextareaElement(span)).toBe(false); |
| 390 | + }); |
| 391 | +}); |
| 392 | + |
| 393 | +describe('isNumericalInputElement', () => { |
| 394 | + describe.each([ |
| 395 | + ['number', true], |
| 396 | + ['range', true], |
| 397 | + ['text', false], |
| 398 | + ['email', false], |
| 399 | + ['checkbox', false], |
| 400 | + ['submit', false], |
| 401 | + ])('input[type="%s"] should return %s', (type, expected) => { |
| 402 | + it(`returns ${expected}`, () => { |
| 403 | + const input = document.createElement('input'); |
| 404 | + if (typeof type === 'string') { |
| 405 | + input.type = type; |
| 406 | + } |
| 407 | + expect(isNumericalInputElement(input)).toBe(expected); |
| 408 | + }); |
| 409 | + }); |
| 410 | + |
| 411 | + it('returns false for non-input elements', () => { |
| 412 | + const div = document.createElement('div'); |
| 413 | + expect(isNumericalInputElement(div)).toBe(false); |
| 414 | + |
| 415 | + const textarea = document.createElement('textarea'); |
| 416 | + expect(isNumericalInputElement(textarea)).toBe(false); |
| 417 | + }); |
| 418 | +}); |
0 commit comments