|
13 | 13 | import {act, fireEvent, pointerMap, render, waitFor, within} from '@react-spectrum/test-utils-internal'; |
14 | 14 | import {Button} from '../src/Button'; |
15 | 15 | import React, {useState} from 'react'; |
| 16 | +import {RouterProvider} from 'react-aria/private/utils/openLink'; |
16 | 17 | import {Tab, TabList, TabPanel, TabPanels, Tabs} from '../src/Tabs'; |
17 | 18 | import {TabsExample} from '../stories/Tabs.stories'; |
18 | 19 | import {Tooltip, TooltipTrigger} from '../src/Tooltip'; |
@@ -497,6 +498,35 @@ describe('Tabs', () => { |
497 | 498 | expect(tabs[2]).toHaveAttribute('aria-selected', 'true'); |
498 | 499 | }); |
499 | 500 |
|
| 501 | + it('should navigate linked tabs on click rather than mouse down', async function () { |
| 502 | + let navigate = jest.fn(); |
| 503 | + let {getAllByRole} = render( |
| 504 | + <RouterProvider navigate={navigate}> |
| 505 | + <Tabs selectedKey="/a"> |
| 506 | + <TabList aria-label="Test"> |
| 507 | + <Tab id="/a" href="/a">A</Tab> |
| 508 | + <Tab id="/b" href="/b">B</Tab> |
| 509 | + </TabList> |
| 510 | + <TabPanel id="/a">A</TabPanel> |
| 511 | + <TabPanel id="/b">B</TabPanel> |
| 512 | + </Tabs> |
| 513 | + </RouterProvider> |
| 514 | + ); |
| 515 | + |
| 516 | + let tabs = getAllByRole('tab'); |
| 517 | + fireEvent.mouseDown(tabs[1], {button: 0, detail: 1}); |
| 518 | + expect(navigate).not.toHaveBeenCalled(); |
| 519 | + |
| 520 | + fireEvent.mouseLeave(tabs[1]); |
| 521 | + fireEvent.mouseEnter(tabs[1]); |
| 522 | + expect(navigate).not.toHaveBeenCalled(); |
| 523 | + |
| 524 | + fireEvent.mouseUp(tabs[1], {button: 0, detail: 1}); |
| 525 | + fireEvent.click(tabs[1], {button: 0, detail: 1}); |
| 526 | + expect(navigate).toHaveBeenCalledTimes(1); |
| 527 | + expect(navigate).toHaveBeenCalledWith('/b', undefined); |
| 528 | + }); |
| 529 | + |
500 | 530 | it('should render tab with aria-label', () => { |
501 | 531 | let {getAllByRole} = render( |
502 | 532 | <Tabs> |
|
0 commit comments