element-plus/packages/components/focus-trap/__tests__/utils.spec.ts
jeremywu dd19cae2bc
refactor(components): popper composables (#5035)
* refactor(components): popper composables

- Refactor popper composables

* updates

* updates for tooltip

* Updates for popper. TODO: fix controlled tooltip animation

* Fix controlled mode popper animation issue

* Add new feature for customizing tooltip theme

* Fix popover and popconfirm error

* - Add Collection component for wrapping a collection of component
- Add FocusTrap component for trap focus for popups
- Add RovingFocus component for roving focus component type
- Adjust dropdown component based on these newly added components
- Add popper-trigger component for placing the trigger
- TODO: Finish current dropdown component, and all component's tests plus documents

* Refactor popper

* Complete organizing popper

* Almost finish dropdown

* Update popper tests

* update only-child test

* Finish focus trap component test

* Finish tooltip content test

* Finish tooltip trigger tests

* Finish tooltip tests

* finish tests for Collection and RovingFocusGroup

* Fix test cases for timeselect & select & popover

* Fix popover, popconfirm, menu bug and test cases

* Fix select-v2 test error caused by updating popper

* Fix date-picker test issue for updating popper

* fix test cases

* Fix eslint

* Rebase dev & fix tests

* Remove unused code
2022-01-04 09:15:15 +08:00

56 lines
1.4 KiB
TypeScript

import {
focusFirstDescendant,
obtainAllFocusableElements,
getEdges,
} from '../src/utils'
describe('focus-trap utils', () => {
const buildDOM = () => {
const parser = new DOMParser()
return parser.parseFromString(
`
<div class="root">
<span>some val</span>
<input class="focusable-input" />
<span tabindex="0" class="focusable-span">other val</span>
<span hidden tabindex="0"> hidden span</span>
<input disabled />
<input hidden />
</div>
`,
'text/html'
)
}
beforeEach(() => {
const dom = buildDOM()
Array.from(dom.children).forEach((child) => {
document.body.appendChild(child)
})
})
afterEach(() => {
document.body.innerHTML = ''
})
it('should be able to focus', () => {
const focusable = obtainAllFocusableElements(document.body)
expect(focusable).toHaveLength(2)
expect(focusable[0].classList).toContain('focusable-input')
})
it('should be able to get focusable edge', () => {
const [first, last] = getEdges(document.body)
expect(first.classList).toContain('focusable-input')
expect(last.classList).toContain('focusable-span')
})
it('should be able to focus on the first descendant', () => {
expect(document.activeElement).toBe(document.body)
const focusable = obtainAllFocusableElements(document.body)
focusFirstDescendant(focusable)
expect(document.activeElement).toBe(focusable[0])
})
})