|
1 | 1 | import { expect } from '@vaadin/chai-plugins'; |
2 | 2 | import { fixtureSync, nextRender, oneEvent, tabKeyDown } from '@vaadin/testing-helpers'; |
| 3 | +import '../src/vaadin-overlay.js'; |
3 | 4 | import { getFocusableElements, isElementFocused } from '@vaadin/a11y-base/src/focus-utils.js'; |
4 | | -import { Overlay } from '../src/vaadin-overlay.js'; |
5 | 5 |
|
6 | 6 | describe('focus-trap', () => { |
7 | 7 | let overlay, overlayPart, focusableElements; |
@@ -141,157 +141,4 @@ describe('focus-trap', () => { |
141 | 141 | expect(getFocusedElementIndex()).to.equal(0); |
142 | 142 | }); |
143 | 143 | }); |
144 | | - |
145 | | - describe('aria-hidden', () => { |
146 | | - let wrapper, sibling, overlay; |
147 | | - |
148 | | - beforeEach(() => { |
149 | | - wrapper = fixtureSync(` |
150 | | - <div> |
151 | | - <aside> |
152 | | - <button>Foo</button> |
153 | | - </aside> |
154 | | - <div> |
155 | | - <button>Foo</button> |
156 | | - <vaadin-overlay focus-trap></vaadin-overlay> |
157 | | - <button>Bar</button> |
158 | | - </div> |
159 | | - </div> |
160 | | - `); |
161 | | - |
162 | | - overlay = wrapper.querySelector('vaadin-overlay'); |
163 | | - sibling = wrapper.querySelector('aside'); |
164 | | - overlay.renderer = (root) => { |
165 | | - root.innerHTML = '<input placeholder="Input">'; |
166 | | - }; |
167 | | - }); |
168 | | - |
169 | | - afterEach(() => { |
170 | | - overlay.opened = false; |
171 | | - }); |
172 | | - |
173 | | - it('should set aria-hidden on other elements on overlay open', async () => { |
174 | | - overlay.opened = true; |
175 | | - await oneEvent(overlay, 'vaadin-overlay-open'); |
176 | | - |
177 | | - expect(sibling.getAttribute('aria-hidden')).to.equal('true'); |
178 | | - }); |
179 | | - |
180 | | - it('should remove aria-hidden from other elements on overlay close', async () => { |
181 | | - overlay.opened = true; |
182 | | - await oneEvent(overlay, 'vaadin-overlay-open'); |
183 | | - |
184 | | - overlay.opened = false; |
185 | | - expect(sibling.hasAttribute('aria-hidden')).to.be.false; |
186 | | - }); |
187 | | - |
188 | | - it('should not set aria-hidden on other elements if focusTrap is set to false', async () => { |
189 | | - overlay.focusTrap = false; |
190 | | - |
191 | | - overlay.opened = true; |
192 | | - await oneEvent(overlay, 'vaadin-overlay-open'); |
193 | | - |
194 | | - expect(sibling.hasAttribute('aria-hidden')).to.be.false; |
195 | | - }); |
196 | | - }); |
197 | | - |
198 | | - describe('aria-hidden modal root', () => { |
199 | | - customElements.define( |
200 | | - 'custom-overlay-wrapper', |
201 | | - class extends HTMLElement { |
202 | | - constructor() { |
203 | | - super(); |
204 | | - |
205 | | - this.attachShadow({ mode: 'open' }); |
206 | | - |
207 | | - const overlay = document.createElement('custom-overlay'); |
208 | | - |
209 | | - const owner = document.createElement('div'); |
210 | | - overlay.owner = owner; |
211 | | - |
212 | | - // Forward the slotted content from wrapper to overlay |
213 | | - const slot = document.createElement('slot'); |
214 | | - overlay.appendChild(slot); |
215 | | - |
216 | | - overlay.focusTrap = true; |
217 | | - overlay.renderer = (root) => { |
218 | | - root.innerHTML = '<input placeholder="Input">'; |
219 | | - }; |
220 | | - |
221 | | - this.shadowRoot.append(overlay); |
222 | | - this.append(owner); |
223 | | - } |
224 | | - }, |
225 | | - ); |
226 | | - |
227 | | - customElements.define( |
228 | | - 'custom-overlay', |
229 | | - class extends Overlay { |
230 | | - get _contentRoot() { |
231 | | - return this.owner; |
232 | | - } |
233 | | - |
234 | | - get _modalRoot() { |
235 | | - return this.owner; |
236 | | - } |
237 | | - }, |
238 | | - ); |
239 | | - |
240 | | - let outer, inner, wrapper, overlay; |
241 | | - |
242 | | - beforeEach(() => { |
243 | | - outer = fixtureSync(` |
244 | | - <div> |
245 | | - <aside> |
246 | | - <button>Foo</button> |
247 | | - </aside> |
248 | | - <div> |
249 | | - <button>Bar</button> |
250 | | - <custom-overlay-wrapper></custom-overlay-wrapper> |
251 | | - <button>Baz</button> |
252 | | - </div> |
253 | | - </div> |
254 | | - `); |
255 | | - |
256 | | - wrapper = outer.querySelector('custom-overlay-wrapper'); |
257 | | - inner = outer.querySelector('div'); |
258 | | - overlay = wrapper.shadowRoot.querySelector('custom-overlay'); |
259 | | - }); |
260 | | - |
261 | | - afterEach(() => { |
262 | | - overlay.opened = false; |
263 | | - }); |
264 | | - |
265 | | - it('should not set aria-hidden on wrapping elements on overlay open', async () => { |
266 | | - overlay.opened = true; |
267 | | - await oneEvent(overlay, 'vaadin-overlay-open'); |
268 | | - |
269 | | - expect(outer.hasAttribute('aria-hidden')).to.be.false; |
270 | | - expect(inner.hasAttribute('aria-hidden')).to.be.false; |
271 | | - expect(wrapper.hasAttribute('aria-hidden')).to.be.false; |
272 | | - }); |
273 | | - |
274 | | - it('should not set aria-hidden on content root element on overlay open', async () => { |
275 | | - overlay.opened = true; |
276 | | - await oneEvent(overlay, 'vaadin-overlay-open'); |
277 | | - |
278 | | - const root = wrapper.querySelector('div'); |
279 | | - const input = root.firstElementChild; |
280 | | - |
281 | | - expect(root.hasAttribute('aria-hidden')).to.be.false; |
282 | | - expect(input.hasAttribute('aria-hidden')).to.be.false; |
283 | | - }); |
284 | | - |
285 | | - it('should set aria-hidden on sibling elements on overlay open', async () => { |
286 | | - overlay.opened = true; |
287 | | - await oneEvent(overlay, 'vaadin-overlay-open'); |
288 | | - |
289 | | - const buttons = wrapper.parentElement.querySelectorAll('button'); |
290 | | - expect(buttons[0].getAttribute('aria-hidden')).to.equal('true'); |
291 | | - expect(buttons[1].getAttribute('aria-hidden')).to.equal('true'); |
292 | | - |
293 | | - const aside = outer.querySelector('aside'); |
294 | | - expect(aside.getAttribute('aria-hidden')).to.equal('true'); |
295 | | - }); |
296 | | - }); |
297 | 144 | }); |
0 commit comments