diff --git a/src/elements/accordion/accordion.visual.spec.ts b/src/elements/accordion/accordion.visual.spec.ts new file mode 100644 index 0000000000..0a6986c63f --- /dev/null +++ b/src/elements/accordion/accordion.visual.spec.ts @@ -0,0 +1,56 @@ +import { html } from 'lit'; + +import { + describeEach, + describeViewports, + visualDiffDefault, + visualRegressionFixture, +} from '../core/testing/private.js'; + +import './accordion.js'; +import '../expansion-panel.js'; + +describe(`sbb-accordion`, () => { + let root: HTMLElement; + + const cases = { + borderless: [false, true], + expanded: [false, true], + }; + + describeViewports({ viewports: ['zero', 'medium'] }, () => { + // Main test cases + describeEach(cases, ({ borderless, expanded }) => { + beforeEach(async function () { + root = await visualRegressionFixture( + html` + + + Header 1 + Content 1 + + + Header 2 + Content 2 + + + Header 3 + Content 3 + + + `, + { + backgroundColor: borderless ? 'var(--sbb-color-cement)' : undefined, + }, + ); + }); + + it( + visualDiffDefault.name, + visualDiffDefault.with((setup) => { + setup.withSnapshotElement(root); + }), + ); + }); + }); +}); diff --git a/src/elements/expansion-panel/expansion-panel-content/__snapshots__/expansion-panel-content.snapshot.spec.snap.js b/src/elements/expansion-panel/expansion-panel-content/__snapshots__/expansion-panel-content.snapshot.spec.snap.js index fd2c7ef0de..dc8b80acf1 100644 --- a/src/elements/expansion-panel/expansion-panel-content/__snapshots__/expansion-panel-content.snapshot.spec.snap.js +++ b/src/elements/expansion-panel/expansion-panel-content/__snapshots__/expansion-panel-content.snapshot.spec.snap.js @@ -1,15 +1,25 @@ /* @web/test-runner snapshot v1 */ export const snapshots = {}; -snapshots["sbb-expansion-panel-content renders"] = +snapshots["sbb-expansion-panel-content renders DOM"] = +` + Content + +`; +/* end snapshot sbb-expansion-panel-content renders DOM */ + +snapshots["sbb-expansion-panel-content renders Shadow DOM"] = `
`; -/* end snapshot sbb-expansion-panel-content renders */ +/* end snapshot sbb-expansion-panel-content renders Shadow DOM */ -snapshots["sbb-expansion-panel-content A11y tree Chrome"] = +snapshots["sbb-expansion-panel-content renders A11y tree Chrome"] = `

{ "role": "WebArea", @@ -23,9 +33,9 @@ snapshots["sbb-expansion-panel-content A11y tree Chrome"] = }

`; -/* end snapshot sbb-expansion-panel-content A11y tree Chrome */ +/* end snapshot sbb-expansion-panel-content renders A11y tree Chrome */ -snapshots["sbb-expansion-panel-content A11y tree Firefox"] = +snapshots["sbb-expansion-panel-content renders A11y tree Firefox"] = `

{ "role": "document", @@ -39,5 +49,5 @@ snapshots["sbb-expansion-panel-content A11y tree Firefox"] = }

`; -/* end snapshot sbb-expansion-panel-content A11y tree Firefox */ +/* end snapshot sbb-expansion-panel-content renders A11y tree Firefox */ diff --git a/src/elements/expansion-panel/expansion-panel-content/expansion-panel-content.snapshot.spec.ts b/src/elements/expansion-panel/expansion-panel-content/expansion-panel-content.snapshot.spec.ts index bd319398fa..2818acae96 100644 --- a/src/elements/expansion-panel/expansion-panel-content/expansion-panel-content.snapshot.spec.ts +++ b/src/elements/expansion-panel/expansion-panel-content/expansion-panel-content.snapshot.spec.ts @@ -3,23 +3,27 @@ import { html } from 'lit/static-html.js'; import { fixture, testA11yTreeSnapshot } from '../../core/testing/private.js'; +import type { SbbExpansionPanelContentElement } from './expansion-panel-content.js'; import './expansion-panel-content.js'; describe(`sbb-expansion-panel-content`, () => { - it('renders', async () => { - const root = await fixture( - html`Content`, - ); + describe('renders', () => { + let element: SbbExpansionPanelContentElement; - expect(root).dom.to.be.equal( - ` - - Content - - `, - ); - await expect(root).shadowDom.to.be.equalSnapshot(); - }); + beforeEach(async () => { + element = await fixture( + html`Content`, + ); + }); + + it('DOM', async () => { + await expect(element).dom.to.be.equalSnapshot(); + }); - testA11yTreeSnapshot(html`Content`); + it('Shadow DOM', async () => { + await expect(element).shadowDom.to.be.equalSnapshot(); + }); + + testA11yTreeSnapshot(); + }); }); diff --git a/src/elements/expansion-panel/expansion-panel-header/__snapshots__/expansion-panel-header.snapshot.spec.snap.js b/src/elements/expansion-panel/expansion-panel-header/__snapshots__/expansion-panel-header.snapshot.spec.snap.js index 623f9e0d1d..707738fd21 100644 --- a/src/elements/expansion-panel/expansion-panel-header/__snapshots__/expansion-panel-header.snapshot.spec.snap.js +++ b/src/elements/expansion-panel/expansion-panel-header/__snapshots__/expansion-panel-header.snapshot.spec.snap.js @@ -1,7 +1,22 @@ /* @web/test-runner snapshot v1 */ export const snapshots = {}; -snapshots["sbb-expansion-panel-header renders collapsed"] = +snapshots["sbb-expansion-panel-header renders DOM"] = +` + Header + +`; +/* end snapshot sbb-expansion-panel-header renders DOM */ + +snapshots["sbb-expansion-panel-header renders Shadow DOM"] = ` @@ -23,9 +38,42 @@ snapshots["sbb-expansion-panel-header renders collapsed"] = `; -/* end snapshot sbb-expansion-panel-header renders collapsed */ +/* end snapshot sbb-expansion-panel-header renders Shadow DOM */ + +snapshots["sbb-expansion-panel-header renders A11y tree Chrome"] = +`

+ { + "role": "WebArea", + "name": "", + "children": [ + { + "role": "button", + "name": "Header" + } + ] +} +

+`; +/* end snapshot sbb-expansion-panel-header renders A11y tree Chrome */ + +snapshots["sbb-expansion-panel-header renders with icon DOM"] = +` + Header + +`; +/* end snapshot sbb-expansion-panel-header renders with icon DOM */ -snapshots["sbb-expansion-panel-header renders with icon"] = +snapshots["sbb-expansion-panel-header renders with icon Shadow DOM"] = ` @@ -54,9 +102,33 @@ snapshots["sbb-expansion-panel-header renders with icon"] = `; -/* end snapshot sbb-expansion-panel-header renders with icon */ +/* end snapshot sbb-expansion-panel-header renders with icon Shadow DOM */ + +snapshots["sbb-expansion-panel-header renders with slotted icon DOM"] = +` + + Header + +`; +/* end snapshot sbb-expansion-panel-header renders with slotted icon DOM */ -snapshots["sbb-expansion-panel-header renders with slotted icon"] = +snapshots["sbb-expansion-panel-header renders with slotted icon Shadow DOM"] = ` @@ -78,25 +150,9 @@ snapshots["sbb-expansion-panel-header renders with slotted icon"] = `; -/* end snapshot sbb-expansion-panel-header renders with slotted icon */ - -snapshots["sbb-expansion-panel-header A11y tree Chrome"] = -`

- { - "role": "WebArea", - "name": "", - "children": [ - { - "role": "button", - "name": "Header" - } - ] -} -

-`; -/* end snapshot sbb-expansion-panel-header A11y tree Chrome */ +/* end snapshot sbb-expansion-panel-header renders with slotted icon Shadow DOM */ -snapshots["sbb-expansion-panel-header A11y tree Firefox"] = +snapshots["sbb-expansion-panel-header renders A11y tree Firefox"] = `

{ "role": "document", @@ -110,5 +166,5 @@ snapshots["sbb-expansion-panel-header A11y tree Firefox"] = }

`; -/* end snapshot sbb-expansion-panel-header A11y tree Firefox */ +/* end snapshot sbb-expansion-panel-header renders A11y tree Firefox */ diff --git a/src/elements/expansion-panel/expansion-panel-header/expansion-panel-header.snapshot.spec.ts b/src/elements/expansion-panel/expansion-panel-header/expansion-panel-header.snapshot.spec.ts index db72720674..5eac86d749 100644 --- a/src/elements/expansion-panel/expansion-panel-header/expansion-panel-header.snapshot.spec.ts +++ b/src/elements/expansion-panel/expansion-panel-header/expansion-panel-header.snapshot.spec.ts @@ -3,74 +3,69 @@ import { html } from 'lit/static-html.js'; import { fixture, testA11yTreeSnapshot } from '../../core/testing/private.js'; +import type { SbbExpansionPanelHeaderElement } from './expansion-panel-header.js'; import './expansion-panel-header.js'; import '../../icon.js'; describe(`sbb-expansion-panel-header`, () => { - it('renders collapsed', async () => { - const root = await fixture( - html`Header`, - ); + describe('renders', () => { + let element: SbbExpansionPanelHeaderElement; - expect(root).dom.to.be.equal( - ` - - Header - - `, - ); - await expect(root).shadowDom.to.be.equalSnapshot(); + beforeEach(async () => { + element = await fixture( + html`Header`, + ); + }); + + it('DOM', async () => { + await expect(element).dom.to.be.equalSnapshot(); + }); + + it('Shadow DOM', async () => { + await expect(element).shadowDom.to.be.equalSnapshot(); + }); + + testA11yTreeSnapshot(); }); - it('renders with icon', async () => { - const root = await fixture( - html`Header`, - ); + describe('renders with icon', () => { + let element: SbbExpansionPanelHeaderElement; - expect(root).dom.to.be.equal( - ` - - Header - - `, - ); - await expect(root).shadowDom.to.be.equalSnapshot(); + beforeEach(async () => { + element = await fixture( + html`Header`, + ); + }); + + it('DOM', async () => { + await expect(element).dom.to.be.equalSnapshot(); + }); + + it('Shadow DOM', async () => { + await expect(element).shadowDom.to.be.equalSnapshot(); + }); }); - it('renders with slotted icon', async () => { - const root = await fixture(html` - - - Header - - `); + describe('renders with slotted icon', () => { + let element: SbbExpansionPanelHeaderElement; - expect(root).dom.to.be.equal( - ` - - + beforeEach(async () => { + element = await fixture( + html` + Header - - `, - ); - await expect(root).shadowDom.to.be.equalSnapshot(); - }); + `, + ); + }); - testA11yTreeSnapshot(html`Header`); + it('DOM', async () => { + await expect(element).dom.to.be.equalSnapshot(); + }); + + it('Shadow DOM', async () => { + await expect(element).shadowDom.to.be.equalSnapshot(); + }); + }); }); diff --git a/src/elements/expansion-panel/expansion-panel/expansion-panel.visual.spec.ts b/src/elements/expansion-panel/expansion-panel/expansion-panel.visual.spec.ts new file mode 100644 index 0000000000..9112a1b98d --- /dev/null +++ b/src/elements/expansion-panel/expansion-panel/expansion-panel.visual.spec.ts @@ -0,0 +1,124 @@ +import { html, nothing } from 'lit'; + +import { + describeEach, + describeViewports, + visualDiffDefault, + visualDiffFocus, + visualDiffHover, + visualRegressionFixture, +} from '../../core/testing/private.js'; + +import './expansion-panel.js'; +import '../expansion-panel-header.js'; +import '../expansion-panel-content.js'; +import '../../icon.js'; + +describe(`sbb-expansion-panel`, () => { + let root: HTMLElement; + + const cases = { + borderless: [false, true], + disabled: [false, true], + expanded: [false, true], + color: ['white', 'milk'], + }; + + const sizeCases = { + size: ['s', 'l'], + expanded: [false, true], + }; + + const titleLevelCases = ['1', '4']; + + const iconCases = [ + { name: 'none', icon: undefined, slotted: false }, + { name: 'prop', icon: 'arrow-right-small', slotted: false }, + { name: 'slotted', icon: 'arrow-right-small', slotted: true }, + ]; + + describeViewports({ viewports: ['zero', 'medium'] }, () => { + // Main test cases + describeEach(cases, ({ borderless, disabled, expanded, color }) => { + beforeEach(async function () { + root = await visualRegressionFixture(html` + + + Header + + Content + + `); + }); + + for (const state of [visualDiffDefault, visualDiffFocus, visualDiffHover]) { + it( + state.name, + state.with((setup) => { + setup.withSnapshotElement(root); + }), + ); + } + }); + + // Size test cases + describeEach(sizeCases, ({ expanded, size }) => { + beforeEach(async function () { + root = await visualRegressionFixture(html` + + + Header + + Content + + `); + }); + + it( + visualDiffDefault.name, + visualDiffDefault.with((setup) => { + setup.withSnapshotElement(root); + }), + ); + }); + + // Title level test + for (const titleLevel of titleLevelCases) { + it( + `title-level=${titleLevel}`, + visualDiffDefault.with(async (setup) => { + await setup.withFixture(html` + + + Header + + Content + + `); + }), + ); + } + + // Icon cases + for (const state of iconCases) { + it( + `icon=${state.name}`, + visualDiffDefault.with(async (setup) => { + await setup.withFixture(html` + + + ${state.slotted ? html`` : nothing} Label + + Content + + `); + }), + ); + } + }); +});