Skip to content

Commit 908bb12

Browse files
committed
chore(overlay): add test for focus-ring consistency across browsers
1 parent 6f4fca8 commit 908bb12

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

Diff for: packages/overlay/test/overlay.test.ts

+72
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
} from '@open-wc/testing';
3535
import { sendKeys } from '@web/test-runner-commands';
3636
import {
37+
clickAndHoverTarget,
3738
definedOverlayElement,
3839
virtualElement,
3940
} from '../stories/overlay.stories';
@@ -50,6 +51,9 @@ import {
5051
isOnTopLayer,
5152
} from '../../../test/testing-helpers.js';
5253
import { Menu } from '@spectrum-web-components/menu';
54+
import { Button } from '@spectrum-web-components/button';
55+
import { isWebKit } from '@spectrum-web-components/shared';
56+
import { SAFARI_FOCUS_RING_CLASS } from '@spectrum-web-components/overlay/src/InteractionController.js';
5357

5458
async function styledFixture<T extends Element>(
5559
story: TemplateResult
@@ -786,6 +790,74 @@ describe('Overlay - type="modal"', () => {
786790
await close;
787791
expect(el.open).to.be.null;
788792
});
793+
794+
describe.only('maintains consistency of focus ring in different browsers', () => {
795+
it('should not open hover overlay right after closing the click overlay using the mouse', async () => {
796+
const overlayTrigger = await fixture<OverlayTrigger>(
797+
clickAndHoverTarget()
798+
);
799+
800+
await elementUpdated(overlayTrigger);
801+
expect(overlayTrigger.open).to.be.undefined;
802+
803+
const trigger = overlayTrigger.querySelector(
804+
'sp-button[slot="trigger"]'
805+
) as Button;
806+
807+
const opened = oneEvent(trigger, 'sp-opened');
808+
trigger.click();
809+
await opened;
810+
811+
expect(overlayTrigger.open).to.equal('click');
812+
813+
const closed = oneEvent(trigger, 'sp-closed');
814+
sendMouse({
815+
steps: [
816+
{
817+
type: 'click',
818+
position: [1, 1],
819+
},
820+
],
821+
});
822+
await closed;
823+
824+
expect(overlayTrigger.open).to.be.undefined;
825+
expect(document.activeElement === trigger, 'trigger focused').to.be
826+
.true;
827+
if (isWebKit())
828+
expect(trigger.classList.contains(SAFARI_FOCUS_RING_CLASS)).to
829+
.be.true;
830+
});
831+
832+
it('should not open hover overlay right after closing the click overlay using the keyboard', async () => {
833+
const overlayTrigger = await fixture<OverlayTrigger>(
834+
clickAndHoverTarget()
835+
);
836+
837+
const trigger = overlayTrigger.querySelector(
838+
'sp-button[slot="trigger"]'
839+
) as Button;
840+
841+
const opened = oneEvent(trigger, 'sp-opened');
842+
trigger.click();
843+
await opened;
844+
845+
expect(overlayTrigger.open).to.equal('click');
846+
847+
const closed = oneEvent(trigger, 'sp-closed');
848+
sendKeys({
849+
press: 'Escape',
850+
});
851+
await closed;
852+
853+
expect(overlayTrigger.open).to.be.undefined;
854+
expect(document.activeElement === trigger, 'trigger focused').to.be
855+
.true;
856+
if (isWebKit())
857+
expect(trigger.classList.contains(SAFARI_FOCUS_RING_CLASS)).to
858+
.be.true;
859+
});
860+
});
789861
});
790862
describe('Overlay - timing', () => {
791863
it('manages multiple modals in a row without preventing them from closing', async () => {

0 commit comments

Comments
 (0)