| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {assert} from 'chai'; |
| import {isTextInput, findDeepEventTarget} from './dom-helpers.js'; |
| |
| describe('isTextInput', () => { |
| it('returns true for select', () => { |
| const element = document.createElement('select'); |
| assert.isTrue(isTextInput(element)); |
| }); |
| |
| it('returns true for input tags that take text input', () => { |
| const element = document.createElement('input'); |
| assert.isTrue(isTextInput(element)); |
| |
| element.type = 'text'; |
| assert.isTrue(isTextInput(element)); |
| |
| element.type = 'password'; |
| assert.isTrue(isTextInput(element)); |
| |
| element.type = 'number'; |
| assert.isTrue(isTextInput(element)); |
| |
| element.type = 'date'; |
| assert.isTrue(isTextInput(element)); |
| }); |
| |
| it('returns false for input tags without text input', () => { |
| const element = document.createElement('input'); |
| |
| element.type = 'button'; |
| assert.isFalse(isTextInput(element)); |
| |
| element.type = 'submit'; |
| assert.isFalse(isTextInput(element)); |
| |
| element.type = 'checkbox'; |
| assert.isFalse(isTextInput(element)); |
| |
| element.type = 'radio'; |
| assert.isFalse(isTextInput(element)); |
| }); |
| |
| it('returns true for textarea', () => { |
| const element = document.createElement('textarea'); |
| assert.isTrue(isTextInput(element)); |
| }); |
| |
| it('returns true for contenteditable', () => { |
| const element = document.createElement('div'); |
| element.contentEditable = 'true'; |
| assert.isTrue(isTextInput(element)); |
| |
| element.contentEditable = 'false'; |
| assert.isFalse(isTextInput(element)); |
| }); |
| |
| it('returns false for non-input', () => { |
| assert.isFalse(isTextInput(document.createElement('div'))); |
| assert.isFalse(isTextInput(document.createElement('table'))); |
| assert.isFalse(isTextInput(document.createElement('tr'))); |
| assert.isFalse(isTextInput(document.createElement('td'))); |
| assert.isFalse(isTextInput(document.createElement('href'))); |
| assert.isFalse(isTextInput(document.createElement('random-elment'))); |
| assert.isFalse(isTextInput(document.createElement('p'))); |
| }); |
| }); |
| |
| describe('findDeepEventTarget', () => { |
| it('returns empty for event without target', () => { |
| const event = new Event('whatsup'); |
| assert.isUndefined(findDeepEventTarget(event)); |
| }); |
| |
| it('returns target for event with target', (done) => { |
| const element = document.createElement('div'); |
| element.addEventListener('hello', (e) => { |
| assert.deepEqual(findDeepEventTarget(e), element); |
| done(); |
| }); |
| element.dispatchEvent(new Event('hello')); |
| }); |
| |
| it('returns target for event coming from shadowRoot', (done) => { |
| const target = document.createElement('button'); |
| const parent = document.createElement('div'); |
| parent.appendChild(target); |
| parent.attachShadow({mode: 'open'}); |
| |
| parent.addEventListener('shadow-root', (e) => { |
| assert.deepEqual(findDeepEventTarget(e), target); |
| done(); |
| }); |
| |
| target.dispatchEvent(new Event('shadow-root', {bubbles: true})); |
| }); |
| }); |