| // Copyright (C) 2023 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| import { |
| elementIsEditable, |
| findRef, |
| isOrContains, |
| toHTMLElement, |
| } from './dom_utils'; |
| |
| describe('isOrContains', () => { |
| const parent = document.createElement('div'); |
| const child = document.createElement('div'); |
| parent.appendChild(child); |
| |
| it('finds child in parent', () => { |
| expect(isOrContains(parent, child)).toBeTruthy(); |
| }); |
| |
| it('finds child in child', () => { |
| expect(isOrContains(child, child)).toBeTruthy(); |
| }); |
| |
| it('does not find parent in child', () => { |
| expect(isOrContains(child, parent)).toBeFalsy(); |
| }); |
| }); |
| |
| describe('findRef', () => { |
| const parent = document.createElement('div'); |
| const fooChild = document.createElement('div'); |
| fooChild.setAttribute('ref', 'foo'); |
| parent.appendChild(fooChild); |
| const barChild = document.createElement('div'); |
| barChild.setAttribute('ref', 'bar'); |
| parent.appendChild(barChild); |
| |
| it('should find refs in parent divs', () => { |
| expect(findRef(parent, 'foo')).toEqual(fooChild); |
| expect(findRef(parent, 'bar')).toEqual(barChild); |
| }); |
| |
| it('should find refs in self divs', () => { |
| expect(findRef(fooChild, 'foo')).toEqual(fooChild); |
| expect(findRef(barChild, 'bar')).toEqual(barChild); |
| }); |
| |
| it('should fail to find ref in unrelated divs', () => { |
| const unrelated = document.createElement('div'); |
| expect(findRef(unrelated, 'foo')).toBeNull(); |
| expect(findRef(fooChild, 'bar')).toBeNull(); |
| expect(findRef(barChild, 'foo')).toBeNull(); |
| }); |
| }); |
| |
| describe('toHTMLElement', () => { |
| it('should convert a div to an HTMLElement', () => { |
| const divElement: Element = document.createElement('div'); |
| expect(toHTMLElement(divElement)).toEqual(divElement); |
| }); |
| |
| it('should fail to convert an svg element to an HTMLElement', () => { |
| const svgElement = |
| document.createElementNS('http://www.w3.org/2000/svg', 'svg'); |
| expect(() => toHTMLElement(svgElement)).toThrow(Error); |
| }); |
| }); |
| |
| describe('elementIsEditable', () => { |
| test('text input', () => { |
| const el = document.createElement('input'); |
| el.setAttribute('type', 'text'); |
| expect(elementIsEditable(el)).toBeTruthy(); |
| }); |
| |
| test('radio input', () => { |
| const el = document.createElement('input'); |
| el.setAttribute('type', 'radio'); |
| expect(elementIsEditable(el)).toBeFalsy(); |
| }); |
| |
| test('checkbox input', () => { |
| const el = document.createElement('input'); |
| el.setAttribute('type', 'checkbox'); |
| expect(elementIsEditable(el)).toBeFalsy(); |
| }); |
| |
| test('button input', () => { |
| const el = document.createElement('input'); |
| el.setAttribute('type', 'button'); |
| expect(elementIsEditable(el)).toBeFalsy(); |
| }); |
| |
| test('div', () => { |
| const el = document.createElement('div'); |
| expect(elementIsEditable(el)).toBeFalsy(); |
| }); |
| |
| test('textarea', () => { |
| const el = document.createElement('textarea'); |
| expect(elementIsEditable(el)).toBeTruthy(); |
| }); |
| |
| test('nested', () => { |
| const el = document.createElement('textarea'); |
| const nested = document.createElement('div'); |
| el.appendChild(nested); |
| expect(elementIsEditable(nested)).toBeTruthy(); |
| }); |
| }); |