diff --git a/test/e2e/tab-group.e2e.ts b/test/e2e/tab-group.e2e.ts new file mode 100644 index 000000000..c70368e2c --- /dev/null +++ b/test/e2e/tab-group.e2e.ts @@ -0,0 +1,127 @@ +import { newE2EPage } from '@stencil/core/testing'; + +const testContent = ` + + General + Custom + Advanced + Disabled + + This is the general tab panel. + This is the custom tab panel. + This is the advanced tab panel. + This is a disabled tab panel. + +`; + +describe('tab group', () => { + it('should only show first panel by default', async () => { + const page = await newE2EPage(); + await page.setContent(testContent); + + const firstPanelName = 'general'; + + const firstPanel = await page.find(`sl-tab-panel[name=${firstPanelName}]`); + expect(await firstPanel.isVisible()).toBe(true); + + const otherPanels = await page.findAll(`sl-tab-panel:not([name=${firstPanelName}]`); + for (let panel of otherPanels) { + expect(await panel.isVisible()).not.toBe(true); + } + }); + + it('should have first tab activated by default', async () => { + const page = await newE2EPage(); + await page.setContent(testContent); + + const firstPanelName = 'general'; + + const tab = await page.find(`sl-tab[panel=${firstPanelName}] >>> .tab`); + expect(tab).toHaveClass('tab--active'); + }); + + it('should show appropriate panel when tab is selected by clicking', async () => { + const page = await newE2EPage(); + await page.setContent(testContent); + + const selectedPanelName = 'custom'; + + const selectedTab = await page.find(`sl-tab[panel=${selectedPanelName}]`); + await selectedTab.click(); + + const selectedPanel = await page.find(`sl-tab-panel[name=${selectedPanelName}]`); + expect(await selectedPanel.isVisible()).toBe(true); + + const otherPanels = await page.findAll(`sl-tab-panel:not([name=${selectedPanelName}]`); + for (let panel of otherPanels) { + expect(await panel.isVisible()).not.toBe(true); + } + }); + + it('should have appropriate tab activated when selected by clicking', async () => { + const page = await newE2EPage(); + await page.setContent(testContent); + + const selectedPanelName = 'advanced'; + + const selectedTab = await page.find(`sl-tab[panel=${selectedPanelName}]`); + await selectedTab.click(); + + const tab = await page.find(`sl-tab[panel=${selectedPanelName}] >>> .tab`); + expect(tab).toHaveClass('tab--active'); + }); + + it('should show appropriate panel when show method called', async () => { + const page = await newE2EPage(); + await page.setContent(testContent); + + const selectedPanelName = 'custom'; + + const tabGroup = await page.find('sl-tab-group'); + await tabGroup.callMethod('show', selectedPanelName); + + const selectedPanel = await page.find(`sl-tab-panel[name=${selectedPanelName}]`); + expect(await selectedPanel.isVisible()).toBe(true); + + const tab = await page.find(`sl-tab[panel=${selectedPanelName}] >>> .tab`); + expect(tab).toHaveClass('tab--active'); + }); + + it('should emit slTabHide and slTabShow events when tab is changed', async () => { + const page = await newE2EPage(); + await page.setContent(testContent); + + const tabGroup = await page.find('sl-tab-group'); + const slTabHide = await tabGroup.spyOnEvent('slTabHide'); + const slTabShow = await tabGroup.spyOnEvent('slTabShow'); + + const selectedPanelName = 'advanced'; + + const selectedTab = await page.find(`sl-tab[panel=${selectedPanelName}]`); + await selectedTab.click(); + + expect(slTabHide).toHaveReceivedEventTimes(1); + expect(slTabHide).toHaveReceivedEventDetail({ name: 'general' }); + expect(slTabShow).toHaveReceivedEventTimes(1); + expect(slTabShow).toHaveReceivedEventDetail({ name: 'advanced' }); + }); + + it('should change tab with the show method', async () => { + const page = await newE2EPage(); + await page.setContent(testContent); + + const tabGroup = await page.find('sl-tab-group'); + const slTabHide = await tabGroup.spyOnEvent('slTabHide'); + const slTabShow = await tabGroup.spyOnEvent('slTabShow'); + + const selectedPanelName = 'advanced'; + + const selectedTab = await page.find(`sl-tab[panel=${selectedPanelName}]`); + await selectedTab.click(); + + expect(slTabHide).toHaveReceivedEventTimes(1); + expect(slTabHide).toHaveReceivedEventDetail({ name: 'general' }); + expect(slTabShow).toHaveReceivedEventTimes(1); + expect(slTabShow).toHaveReceivedEventDetail({ name: 'advanced' }); + }); +});