From 9027d7ec0297485a090ebc700d4a81c077827df4 Mon Sep 17 00:00:00 2001 From: Jeremias Peier Date: Thu, 14 Nov 2024 15:39:01 +0100 Subject: [PATCH 1/5] test: use promise instead of waitForCondition for events --- .../timetable-row/timetable-row.spec.ts | 4 +- src/elements/accordion/accordion.spec.ts | 18 ++-- src/elements/alert/alert/alert.spec.ts | 8 +- .../autocomplete-grid-button.spec.ts | 4 +- .../autocomplete-grid.spec.ts | 54 ++++++------ .../autocomplete/autocomplete.spec.ts | 40 ++++----- .../breadcrumb-group/breadcrumb-group.spec.ts | 4 +- .../breadcrumb/breadcrumb/breadcrumb.spec.ts | 4 +- .../button/button-link/button-link.spec.ts | 4 +- .../button-static/button-static.spec.ts | 4 +- src/elements/button/button/button.spec.ts | 4 +- src/elements/calendar/calendar.spec.ts | 2 +- .../card/card-button/card-button.spec.ts | 4 +- src/elements/card/card-link/card-link.spec.ts | 4 +- .../checkbox/common/checkbox-common.spec.ts | 2 +- src/elements/core/testing/event-spy.ts | 53 +++++++++++- .../datepicker-next-day.spec.ts | 6 +- .../datepicker-previous-day.spec.ts | 6 +- .../datepicker-toggle.spec.ts | 21 +++-- .../datepicker/datepicker/datepicker.spec.ts | 26 +++--- src/elements/dialog/dialog/dialog.spec.ts | 44 +++++----- .../expansion-panel/expansion-panel.spec.ts | 14 ++-- .../flip-card/flip-card/flip-card.spec.ts | 8 +- .../header-button/header-button.spec.ts | 4 +- .../header/header-link/header-link.spec.ts | 4 +- src/elements/header/header/header.spec.ts | 6 +- .../link/link-button/link-button.spec.ts | 4 +- .../link/link-static/link-static.spec.ts | 4 +- src/elements/link/link/link.spec.ts | 4 +- .../menu/menu-button/menu-button.spec.ts | 4 +- src/elements/menu/menu-link/menu-link.spec.ts | 4 +- src/elements/menu/menu/menu.spec.ts | 48 +++++------ .../navigation-button.spec.ts | 4 +- .../navigation-link/navigation-link.spec.ts | 4 +- .../navigation/navigation/navigation.spec.ts | 48 +++++------ .../notification/notification.spec.ts | 12 +-- src/elements/overlay/overlay.spec.ts | 34 ++++---- .../paginator/paginator/paginator.spec.ts | 6 +- .../popover-trigger/popover-trigger.spec.ts | 10 +-- src/elements/popover/popover/popover.spec.ts | 82 +++++++++---------- .../radio-button-group.spec.ts | 6 +- .../radio-button-panel.spec.ts | 12 +-- .../radio-button/radio-button.spec.ts | 12 +-- src/elements/select/select.spec.ts | 44 +++++----- .../selection-expansion-panel.spec.ts | 22 ++--- src/elements/stepper/stepper/stepper.spec.ts | 16 ++-- src/elements/tabs/tab-group/tab-group.spec.ts | 4 +- src/elements/tag/tag-group/tag-group.spec.ts | 22 ++--- src/elements/toast/toast.spec.ts | 26 +++--- .../toggle-check/toggle-check.spec.ts | 2 +- .../toggle-option/toggle-option.spec.ts | 8 +- src/elements/toggle/toggle/toggle.spec.ts | 18 ++-- .../train/train-wagon/train-wagon.spec.ts | 4 +- 53 files changed, 433 insertions(+), 383 deletions(-) diff --git a/src/elements-experimental/timetable-row/timetable-row.spec.ts b/src/elements-experimental/timetable-row/timetable-row.spec.ts index 42b00eeda1..5c6f2913a7 100644 --- a/src/elements-experimental/timetable-row/timetable-row.spec.ts +++ b/src/elements-experimental/timetable-row/timetable-row.spec.ts @@ -1,7 +1,7 @@ import { assert, expect } from '@open-wc/testing'; import type { SbbCardElement } from '@sbb-esta/lyne-elements/card.js'; import { fixture } from '@sbb-esta/lyne-elements/core/testing/private.js'; -import { EventSpy, waitForCondition } from '@sbb-esta/lyne-elements/core/testing.js'; +import { EventSpy } from '@sbb-esta/lyne-elements/core/testing.js'; import { html } from 'lit/static-html.js'; import type { ITripItem, Notice, PtSituation } from '../core/timetable/timetable-properties.js'; @@ -32,7 +32,7 @@ describe(`sbb-timetable-row`, () => { const changeSpy = new EventSpy('click'); card.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); }); diff --git a/src/elements/accordion/accordion.spec.ts b/src/elements/accordion/accordion.spec.ts index efbf029edf..411866aa4e 100644 --- a/src/elements/accordion/accordion.spec.ts +++ b/src/elements/accordion/accordion.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../core/testing.js'; +import { EventSpy, waitForLitRender } from '../core/testing.js'; import { SbbExpansionPanelElement, type SbbExpansionPanelHeaderElement, @@ -139,21 +139,21 @@ describe(`sbb-accordion`, () => { } headerTwo.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); expect(panelOne.expanded).to.be.equal(false); expect(panelTwo.expanded).to.be.equal(true); expect(panelThree.expanded).to.be.equal(false); headerOne.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 2); + await willOpenEventSpy.calledTwice(); expect(willOpenEventSpy.count).to.be.equal(2); expect(panelOne.expanded).to.be.equal(true); expect(panelTwo.expanded).to.be.equal(false); expect(panelThree.expanded).to.be.equal(false); headerThree.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 3); + await willOpenEventSpy.calledTrice(); expect(willOpenEventSpy.count).to.be.equal(3); expect(panelOne.expanded).to.be.equal(false); expect(panelTwo.expanded).to.be.equal(false); @@ -182,21 +182,21 @@ describe(`sbb-accordion`, () => { } headerTwo.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); expect(panelOne.expanded).to.be.equal(false); expect(panelTwo.expanded).to.be.equal(true); expect(panelThree.expanded).to.be.equal(false); headerOne.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 2); + await willOpenEventSpy.calledTwice(); expect(willOpenEventSpy.count).to.be.equal(2); expect(panelOne.expanded).to.be.equal(true); expect(panelTwo.expanded).to.be.equal(true); expect(panelThree.expanded).to.be.equal(false); headerThree.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 3); + await willOpenEventSpy.calledTrice(); expect(willOpenEventSpy.count).to.be.equal(3); expect(panelOne.expanded).to.be.equal(true); expect(panelTwo.expanded).to.be.equal(true); @@ -224,12 +224,12 @@ describe(`sbb-accordion`, () => { const willOpenEventSpy = new EventSpy(SbbExpansionPanelElement.events.willOpen); headerTwo.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); expect(panelTwo.expanded).to.be.equal(true); headerThree.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 2); + await willOpenEventSpy.calledTwice(); expect(willOpenEventSpy.count).to.be.equal(2); expect(panelThree.expanded).to.be.equal(true); diff --git a/src/elements/alert/alert/alert.spec.ts b/src/elements/alert/alert/alert.spec.ts index 4a9b0f41bf..11d25b5470 100644 --- a/src/elements/alert/alert/alert.spec.ts +++ b/src/elements/alert/alert/alert.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, EventSpy } from '../../core/testing.js'; +import { EventSpy } from '../../core/testing.js'; import { SbbAlertElement } from './alert.js'; @@ -25,9 +25,9 @@ describe(`sbb-alert`, () => { html`Interruption`, ); - await waitForCondition(() => willOpenSpy.events.length === 1); + await willOpenSpy.calledOnce(); expect(willOpenSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenSpy.events.length === 1); + await didOpenSpy.calledOnce(); expect(didOpenSpy.count).to.be.equal(1); alert.requestDismissal(); @@ -35,7 +35,7 @@ describe(`sbb-alert`, () => { alert.close(); - await waitForCondition(() => didCloseSpy.events.length === 1); + await didCloseSpy.calledOnce(); expect(willCloseSpy.count).to.be.equal(1); expect(didCloseSpy.count).to.be.equal(1); }); diff --git a/src/elements/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.spec.ts b/src/elements/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.spec.ts index 6863dad599..48bfd38fcd 100644 --- a/src/elements/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.spec.ts +++ b/src/elements/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbAutocompleteGridButtonElement } from './autocomplete-grid-button.js'; @@ -24,7 +24,7 @@ describe(`sbb-autocomplete-grid-button`, () => { const clickSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts b/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts index cb73c476dd..b78c2ac0c4 100644 --- a/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts +++ b/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts @@ -4,7 +4,7 @@ import { html } from 'lit/static-html.js'; import { isSafari } from '../../core/dom.js'; import { fixture, tabKey } from '../../core/testing/private.js'; -import { describeIf, EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { describeIf, EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbFormFieldElement } from '../../form-field.js'; import type { SbbAutocompleteGridButtonElement } from '../autocomplete-grid-button.js'; import { SbbAutocompleteGridOptionElement } from '../autocomplete-grid-option.js'; @@ -100,47 +100,47 @@ describe(`sbb-autocomplete-grid`, () => { const didCloseEventSpy = new EventSpy(SbbAutocompleteGridElement.events.didClose); input.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(input).to.have.attribute('aria-expanded', 'true'); await sendKeys({ press: 'Escape' }); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(input).to.have.attribute('aria-expanded', 'false'); await sendKeys({ press: 'ArrowDown' }); - await waitForCondition(() => willOpenEventSpy.events.length === 2); + await willOpenEventSpy.calledTwice(); expect(willOpenEventSpy.count).to.be.equal(2); - await waitForCondition(() => didOpenEventSpy.events.length === 2); + await didOpenEventSpy.calledTwice(); expect(didOpenEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'true'); await sendKeys({ press: tabKey }); - await waitForCondition(() => willCloseEventSpy.events.length === 2); + await willCloseEventSpy.calledTwice(); expect(willCloseEventSpy.count).to.be.equal(2); - await waitForCondition(() => didCloseEventSpy.events.length === 2); + await didCloseEventSpy.calledTwice(); expect(didCloseEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'false'); input.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 3); + await willOpenEventSpy.calledTrice(); expect(willOpenEventSpy.count).to.be.equal(3); - await waitForCondition(() => didOpenEventSpy.events.length === 3); + await didOpenEventSpy.calledTrice(); expect(didOpenEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'true'); // Simulate backdrop click sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); - await waitForCondition(() => willCloseEventSpy.events.length === 3); + await willCloseEventSpy.calledTrice(); expect(willCloseEventSpy.count).to.be.equal(3); - await waitForCondition(() => didCloseEventSpy.events.length === 3); + await didCloseEventSpy.calledTrice(); expect(didCloseEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'false'); }); @@ -153,9 +153,9 @@ describe(`sbb-autocomplete-grid`, () => { ); input.focus(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await sendKeys({ press: 'ArrowDown' }); @@ -173,16 +173,16 @@ describe(`sbb-autocomplete-grid`, () => { const clickSpy = new EventSpy('click'); input.focus(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); const buttonOne = element.querySelector('#button-1') as SbbAutocompleteGridButtonElement; buttonOne.click(); await waitForLitRender(element); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); expect( (clickSpy.firstEvent!.target as SbbAutocompleteGridButtonElement).option!.textContent, @@ -201,7 +201,7 @@ describe(`sbb-autocomplete-grid`, () => { const buttonThree = element.querySelector('#button-3'); input.focus(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await sendKeys({ press: 'ArrowDown' }); @@ -246,7 +246,7 @@ describe(`sbb-autocomplete-grid`, () => { const optTwo = element.querySelector('#option-2'); input.focus(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await sendKeys({ press: 'ArrowDown' }); @@ -259,7 +259,7 @@ describe(`sbb-autocomplete-grid`, () => { expect(input).to.have.attribute('aria-activedescendant', 'option-2'); await sendKeys({ press: 'Enter' }); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(optTwo).not.to.have.attribute('data-active'); @@ -277,7 +277,7 @@ describe(`sbb-autocomplete-grid`, () => { const buttonTwo = element.querySelector('#button-2'); input.focus(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await sendKeys({ press: 'ArrowDown' }); @@ -289,7 +289,7 @@ describe(`sbb-autocomplete-grid`, () => { expect(buttonOne).to.have.attribute('data-focus-visible'); expect(input).to.have.attribute('aria-activedescendant', 'button-1'); await sendKeys({ press: 'Enter' }); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); await sendKeys({ press: 'ArrowDown' }); @@ -300,7 +300,7 @@ describe(`sbb-autocomplete-grid`, () => { expect(buttonTwo).to.have.attribute('data-focus-visible'); expect(input).to.have.attribute('aria-activedescendant', 'button-2'); await sendKeys({ press: 'Enter' }); - await waitForCondition(() => clickSpy.events.length === 2); + await clickSpy.calledTwice(); expect(clickSpy.count).to.be.equal(2); }); @@ -344,7 +344,7 @@ describe(`sbb-autocomplete-grid`, () => { ); element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -356,7 +356,7 @@ describe(`sbb-autocomplete-grid`, () => { const willCloseEventSpy = new EventSpy(SbbAutocompleteGridElement.events.willClose); element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForLitRender(element); element.addEventListener(SbbAutocompleteGridElement.events.willClose, (ev) => @@ -364,7 +364,7 @@ describe(`sbb-autocomplete-grid`, () => { ); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); await waitForLitRender(element); expect(element).to.have.attribute('data-state', 'opened'); diff --git a/src/elements/autocomplete/autocomplete.spec.ts b/src/elements/autocomplete/autocomplete.spec.ts index 4053e3d5db..e800dfd8f3 100644 --- a/src/elements/autocomplete/autocomplete.spec.ts +++ b/src/elements/autocomplete/autocomplete.spec.ts @@ -4,7 +4,7 @@ import { html } from 'lit/static-html.js'; import { isSafari } from '../core/dom.js'; import { fixture, tabKey } from '../core/testing/private.js'; -import { describeIf, EventSpy, waitForCondition, waitForLitRender } from '../core/testing.js'; +import { describeIf, EventSpy, waitForLitRender } from '../core/testing.js'; import { SbbFormFieldElement } from '../form-field.js'; import { SbbOptionElement } from '../option.js'; @@ -70,47 +70,47 @@ describe(`sbb-autocomplete`, () => { const didCloseEventSpy = new EventSpy(SbbAutocompleteElement.events.didClose); input.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(input).to.have.attribute('aria-expanded', 'true'); await sendKeys({ press: 'Escape' }); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(input).to.have.attribute('aria-expanded', 'false'); await sendKeys({ press: 'ArrowDown' }); - await waitForCondition(() => willOpenEventSpy.events.length === 2); + await willOpenEventSpy.calledTwice(); expect(willOpenEventSpy.count).to.be.equal(2); - await waitForCondition(() => didOpenEventSpy.events.length === 2); + await didOpenEventSpy.calledTwice(); expect(didOpenEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'true'); await sendKeys({ press: tabKey }); - await waitForCondition(() => willCloseEventSpy.events.length === 2); + await willCloseEventSpy.calledTwice(); expect(willCloseEventSpy.count).to.be.equal(2); - await waitForCondition(() => didCloseEventSpy.events.length === 2); + await didCloseEventSpy.calledTwice(); expect(didCloseEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'false'); input.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 3); + await willOpenEventSpy.calledTrice(); expect(willOpenEventSpy.count).to.be.equal(3); - await waitForCondition(() => didOpenEventSpy.events.length === 3); + await didOpenEventSpy.calledTrice(); expect(didOpenEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'true'); // Simulate backdrop click sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); - await waitForCondition(() => willCloseEventSpy.events.length === 3); + await willCloseEventSpy.calledTrice(); expect(willCloseEventSpy.count).to.be.equal(3); - await waitForCondition(() => didCloseEventSpy.events.length === 3); + await didCloseEventSpy.calledTrice(); expect(didCloseEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'false'); }); @@ -121,9 +121,9 @@ describe(`sbb-autocomplete`, () => { const optionSelectedEventSpy = new EventSpy(SbbOptionElement.events.optionSelected); input.focus(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await sendKeys({ press: 'ArrowDown' }); @@ -143,7 +143,7 @@ describe(`sbb-autocomplete`, () => { const optTwo = element.querySelector('#option-2'); input.focus(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await sendKeys({ press: 'ArrowDown' }); @@ -156,7 +156,7 @@ describe(`sbb-autocomplete`, () => { expect(input).to.have.attribute('aria-activedescendant', 'option-2'); await sendKeys({ press: 'Enter' }); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(optTwo).not.to.have.attribute('data-active'); @@ -204,7 +204,7 @@ describe(`sbb-autocomplete`, () => { element.addEventListener(SbbAutocompleteElement.events.willOpen, (ev) => ev.preventDefault()); element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -216,13 +216,13 @@ describe(`sbb-autocomplete`, () => { const willCloseEventSpy = new EventSpy(SbbAutocompleteElement.events.willClose); element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForLitRender(element); element.addEventListener(SbbAutocompleteElement.events.willClose, (ev) => ev.preventDefault()); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); await waitForLitRender(element); expect(element).to.have.attribute('data-state', 'opened'); diff --git a/src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.spec.ts b/src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.spec.ts index b2f41fbe03..eafb9a0a70 100644 --- a/src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.spec.ts +++ b/src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.spec.ts @@ -3,7 +3,7 @@ import { sendKeys, setViewport } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbBreadcrumbElement } from '../breadcrumb.js'; import { SbbBreadcrumbGroupElement } from './breadcrumb-group.js'; @@ -149,7 +149,7 @@ describe(`sbb-breadcrumb-group`, () => { const changeSpy = new EventSpy('click', ellipsisButton); ellipsisButton.click(); await waitForLitRender(ellipsisListItemElement); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); ellipsisListItemElement = element.shadowRoot!.querySelector( '#sbb-breadcrumb-group-ellipsis', diff --git a/src/elements/breadcrumb/breadcrumb/breadcrumb.spec.ts b/src/elements/breadcrumb/breadcrumb/breadcrumb.spec.ts index f8428057b2..5591ea7f1a 100644 --- a/src/elements/breadcrumb/breadcrumb/breadcrumb.spec.ts +++ b/src/elements/breadcrumb/breadcrumb/breadcrumb.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, EventSpy, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbBreadcrumbElement } from './breadcrumb.js'; @@ -21,7 +21,7 @@ describe(`sbb-breadcrumb`, () => { const changeSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/button/button-link/button-link.spec.ts b/src/elements/button/button-link/button-link.spec.ts index 14ca9bebea..4daf35d9d6 100644 --- a/src/elements/button/button-link/button-link.spec.ts +++ b/src/elements/button/button-link/button-link.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbButtonLinkElement } from './button-link.js'; @@ -25,7 +25,7 @@ describe(`sbb-button-link`, () => { const clickSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/button/button-static/button-static.spec.ts b/src/elements/button/button-static/button-static.spec.ts index a9a674a3d6..8470aaf1e6 100644 --- a/src/elements/button/button-static/button-static.spec.ts +++ b/src/elements/button/button-static/button-static.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { buttonIconTestTemplate, buttonSpaceIconTestTemplate, @@ -30,7 +30,7 @@ describe(`sbb-button-static`, () => { const clickSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/button/button/button.spec.ts b/src/elements/button/button/button.spec.ts index 08f5f5f76c..3b9ff85a4a 100644 --- a/src/elements/button/button/button.spec.ts +++ b/src/elements/button/button/button.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { buttonIconTestTemplate, buttonSpaceIconTestTemplate, @@ -29,7 +29,7 @@ describe(`sbb-button`, () => { const clickSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/calendar/calendar.spec.ts b/src/elements/calendar/calendar.spec.ts index 568df96ff5..642bf653e6 100644 --- a/src/elements/calendar/calendar.spec.ts +++ b/src/elements/calendar/calendar.spec.ts @@ -126,7 +126,7 @@ describe(`sbb-calendar`, () => { ) as HTMLElement; expect(newSelectedDate).not.to.have.class('sbb-calendar__selected'); newSelectedDate.click(); - await waitForCondition(() => selectedSpy.events.length === 1); + await selectedSpy.calledOnce(); expect(selectedDate).not.to.have.class('sbb-calendar__selected'); expect(newSelectedDate).to.have.class('sbb-calendar__selected'); diff --git a/src/elements/card/card-button/card-button.spec.ts b/src/elements/card/card-button/card-button.spec.ts index c9349032a2..7fe08631b8 100644 --- a/src/elements/card/card-button/card-button.spec.ts +++ b/src/elements/card/card-button/card-button.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbCardElement } from '../card.js'; import type { SbbCardButtonElement } from './card-button.js'; @@ -138,7 +138,7 @@ describe(`sbb-card-button`, () => { action.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/card/card-link/card-link.spec.ts b/src/elements/card/card-link/card-link.spec.ts index a40cbb56e8..b6e4445a26 100644 --- a/src/elements/card/card-link/card-link.spec.ts +++ b/src/elements/card/card-link/card-link.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbCardElement } from '../card.js'; import type { SbbCardLinkElement } from './card-link.js'; @@ -148,7 +148,7 @@ describe(`sbb-card-link`, () => { action.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/checkbox/common/checkbox-common.spec.ts b/src/elements/checkbox/common/checkbox-common.spec.ts index 97fdf927fe..f28e10ec79 100644 --- a/src/elements/checkbox/common/checkbox-common.spec.ts +++ b/src/elements/checkbox/common/checkbox-common.spec.ts @@ -51,7 +51,7 @@ describe(`checkbox common behaviors`, () => { element.focus(); await sendKeys({ press: 'Space' }); - await waitForCondition(() => changeSpy.count === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.greaterThan(0); }); }); diff --git a/src/elements/core/testing/event-spy.ts b/src/elements/core/testing/event-spy.ts index ddc3d02fbb..b133f5104c 100644 --- a/src/elements/core/testing/event-spy.ts +++ b/src/elements/core/testing/event-spy.ts @@ -1,11 +1,8 @@ /** * This class exists to facilitate the test migration from stencil to lit. * It mimics the API that stencil provided to test events. - * - * TODO: Document me */ export class EventSpy { - private _count: number = 0; public get count(): number { return this._count; } @@ -23,6 +20,21 @@ export class EventSpy { return this.events.length ? this.events[this.events.length - 1] : null; } + private _count: number = 0; + private _calledOnceExecutor!: { resolve: (value: T) => void; reject: (reason?: any) => void }; + private _calledTwiceExecutor!: { resolve: (value: T) => void; reject: (reason?: any) => void }; + private _calledTriceExecutor!: { resolve: (value: T) => void; reject: (reason?: any) => void }; + + private _calledOnce = new Promise( + (resolve, reject) => (this._calledOnceExecutor = { resolve, reject }), + ); + private _calledTwice = new Promise( + (resolve, reject) => (this._calledTwiceExecutor = { resolve, reject }), + ); + private _calledTrice = new Promise( + (resolve, reject) => (this._calledTriceExecutor = { resolve, reject }), + ); + public constructor( private _event: string, private readonly _target: Node | null = null, @@ -30,13 +42,48 @@ export class EventSpy { if (!this._target) { this._target = document; } + this._listenForEvent(); } + public calledOnce(timeout = 1000): Promise { + const clearTimeoutId = setTimeout( + () => this._calledOnceExecutor.reject('awaiting calledOnce timeout'), + timeout, + ); + this._calledOnce.then(() => clearTimeout(clearTimeoutId)); + return this._calledOnce; + } + + public calledTwice(timeout = 1000): Promise { + const clearTimeoutId = setTimeout( + () => this._calledTwiceExecutor.reject('awaiting calledTwice timeout'), + timeout, + ); + this._calledTwice.then(() => clearTimeout(clearTimeoutId)); + return this._calledTwice; + } + + public calledTrice(timeout = 1000): Promise { + const clearTimeoutId = setTimeout( + () => this._calledTriceExecutor.reject('awaiting calledTrice timeout'), + timeout, + ); + this._calledTrice.then(() => clearTimeout(clearTimeoutId)); + return this._calledTrice; + } + private _listenForEvent(): void { this._target?.addEventListener(this._event, (ev) => { this._events.push(ev as T); this._count++; + if (this._count === 1) { + this._calledOnceExecutor.resolve(ev as T); + } else if (this._count === 2) { + this._calledTwiceExecutor.resolve(ev as T); + } else if (this._count === 3) { + this._calledTriceExecutor.resolve(ev as T); + } }); } } diff --git a/src/elements/datepicker/datepicker-next-day/datepicker-next-day.spec.ts b/src/elements/datepicker/datepicker-next-day/datepicker-next-day.spec.ts index 3b09717cc9..c08601f0d0 100644 --- a/src/elements/datepicker/datepicker-next-day/datepicker-next-day.spec.ts +++ b/src/elements/datepicker/datepicker-next-day/datepicker-next-day.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbFormFieldElement } from '../../form-field.js'; import type { SbbDatepickerElement } from '../datepicker.js'; @@ -44,7 +44,7 @@ describe(`sbb-datepicker-next-day`, () => { await element.click(); - await waitForCondition(() => changeSpy.events.length >= 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(blurSpy.count).to.be.equal(1); @@ -136,7 +136,7 @@ describe(`sbb-datepicker-next-day`, () => { const changeSpy = new EventSpy('change', input); const blurSpy = new EventSpy('blur', input); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(blurSpy.count).to.be.equal(1); expect(input.value).to.be.equal('Su, 22.01.2023'); diff --git a/src/elements/datepicker/datepicker-previous-day/datepicker-previous-day.spec.ts b/src/elements/datepicker/datepicker-previous-day/datepicker-previous-day.spec.ts index 03eb216f2a..053d9f9f23 100644 --- a/src/elements/datepicker/datepicker-previous-day/datepicker-previous-day.spec.ts +++ b/src/elements/datepicker/datepicker-previous-day/datepicker-previous-day.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbFormFieldElement } from '../../form-field.js'; import type { SbbDatepickerElement } from '../datepicker.js'; @@ -40,7 +40,7 @@ describe(`sbb-datepicker-previous-day`, () => { const changeSpy = new EventSpy('change', input); const blurSpy = new EventSpy('blur', input); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(blurSpy.count).to.be.equal(1); @@ -134,7 +134,7 @@ describe(`sbb-datepicker-previous-day`, () => { const changeSpy = new EventSpy('change', input); const blurSpy = new EventSpy('blur', input); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(blurSpy.count).to.be.equal(1); expect(input.value).to.be.equal('Th, 19.01.2023'); diff --git a/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts b/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts index b1fdec4be5..4922f02f23 100644 --- a/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts +++ b/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts @@ -1,4 +1,4 @@ -import { assert, expect } from '@open-wc/testing'; +import { assert, aTimeout, expect } from '@open-wc/testing'; import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; @@ -50,7 +50,7 @@ describe(`sbb-datepicker-toggle`, () => { expect(popover).to.have.attribute('data-state', 'closed'); popoverTrigger.click(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(popover).to.have.attribute('data-state', 'opened'); }); @@ -77,7 +77,7 @@ describe(`sbb-datepicker-toggle`, () => { element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(popover).to.have.attribute('data-state', 'opened'); }); @@ -186,7 +186,7 @@ describe(`sbb-datepicker-toggle`, () => { const popoverTrigger: SbbMiniButtonElement = element.shadowRoot!.querySelector('sbb-mini-button')!; popoverTrigger.click(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(popover).to.have.attribute('data-state', 'opened'); const calendar: SbbCalendarElement = @@ -228,7 +228,10 @@ describe(`sbb-datepicker-toggle`, () => { // Open calendar datepickerToggle.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); + + // We have to wait another tick + await aTimeout(0); // Year view should be active const calendar = datepickerToggle.shadowRoot!.querySelector('sbb-calendar')!; @@ -251,11 +254,11 @@ describe(`sbb-datepicker-toggle`, () => { // Expect selected date and closed calendar expect(defaultDateAdapter.toIso8601(calendar.selected!)).to.be.equal('2020-05-05'); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); // Open again datepickerToggle.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 2); + await didOpenEventSpy.calledTwice(); // Should open with year view again expect(calendar.shadowRoot!.querySelector('.sbb-calendar__table-year-view')!).not.to.be.null; @@ -265,7 +268,7 @@ describe(`sbb-datepicker-toggle`, () => { // Close again await sendKeys({ press: 'Escape' }); - await waitForCondition(() => didCloseEventSpy.events.length === 2); + await didCloseEventSpy.calledTwice(); // Changing to month view datepickerToggle.view = 'month'; @@ -273,7 +276,7 @@ describe(`sbb-datepicker-toggle`, () => { // Open again datepickerToggle.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 3); + await didOpenEventSpy.calledTrice(); // Month view should be active and correct year preselected expect(calendar.shadowRoot!.querySelector('.sbb-calendar__table-month-view')!).not.to.be.null; diff --git a/src/elements/datepicker/datepicker/datepicker.spec.ts b/src/elements/datepicker/datepicker/datepicker.spec.ts index 9fa5201ecf..d422f530df 100644 --- a/src/elements/datepicker/datepicker/datepicker.spec.ts +++ b/src/elements/datepicker/datepicker/datepicker.spec.ts @@ -8,7 +8,7 @@ import { NativeDateAdapter } from '../../core/datetime.js'; import { findInput } from '../../core/dom.js'; import { i18nDateChangedTo } from '../../core/i18n.js'; import { fixture, tabKey, typeInElement } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbFormFieldElement } from '../../form-field.js'; import type { SbbDatepickerNextDayElement } from '../datepicker-next-day.js'; import type { SbbDatepickerPreviousDayElement } from '../datepicker-previous-day.js'; @@ -93,7 +93,7 @@ describe(`sbb-datepicker`, () => { const changeSpy = new EventSpy('change', element); typeInElement(input, '20/01/2023'); button.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(input.value).to.be.equal('Fr, 20.01.2023'); expect(changeSpy.count).to.be.equal(1); }); @@ -102,7 +102,7 @@ describe(`sbb-datepicker`, () => { const changeSpy = new EventSpy('change', element); typeInElement(input, '20/01/12'); button.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(input.value).to.be.equal('Fr, 20.01.2012'); expect(changeSpy.count).to.be.equal(1); }); @@ -111,7 +111,7 @@ describe(`sbb-datepicker`, () => { const changeSpy = new EventSpy('change', element); typeInElement(input, '20/01/99'); button.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(input.value).to.be.equal('We, 20.01.1999'); expect(changeSpy.count).to.be.equal(1); }); @@ -120,7 +120,7 @@ describe(`sbb-datepicker`, () => { const changeSpy = new EventSpy('change', element); typeInElement(input, '20..2012'); button.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(input).to.have.attribute('data-sbb-invalid'); expect(changeSpy.count).to.be.equal(1); }); @@ -129,7 +129,7 @@ describe(`sbb-datepicker`, () => { const changeSpy = new EventSpy('change', element); typeInElement(input, '20.05.'); button.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(input).to.have.attribute('data-sbb-invalid'); expect(changeSpy.count).to.be.equal(1); }); @@ -138,7 +138,7 @@ describe(`sbb-datepicker`, () => { const changeSpy = new EventSpy('change', element); typeInElement(input, '20.00.2012'); button.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(input).to.have.attribute('data-sbb-invalid'); expect(changeSpy.count).to.be.equal(1); }); @@ -147,7 +147,7 @@ describe(`sbb-datepicker`, () => { const changeSpy = new EventSpy('change', element); typeInElement(input, '00.05.2020'); button.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(input).to.have.attribute('data-sbb-invalid'); expect(changeSpy.count).to.be.equal(1); }); @@ -163,11 +163,11 @@ describe(`sbb-datepicker`, () => { it('renders and emits event when input parameter changes', async () => { const datePickerUpdatedSpy = new EventSpy('datePickerUpdated'); element.wide = true; - await waitForCondition(() => datePickerUpdatedSpy.events.length === 1); + await datePickerUpdatedSpy.calledOnce(); expect(datePickerUpdatedSpy.count).to.be.equal(1); element.dateFilter = () => false; await waitForLitRender(element); - await waitForCondition(() => datePickerUpdatedSpy.events.length === 2); + await datePickerUpdatedSpy.calledTwice(); expect(datePickerUpdatedSpy.count).to.be.equal(2); }); @@ -192,7 +192,7 @@ describe(`sbb-datepicker`, () => { }; await waitForLitRender(element); typeInElement(input, '7.8', { key: 'Enter', keyCode: 13 }); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); await waitForLitRender(element); expect(input.value).to.be.equal('Mo, 07.08'); expect(changeSpy.count).to.be.equal(1); @@ -206,7 +206,7 @@ describe(`sbb-datepicker`, () => { await waitForLitRender(element); // Then validation event should emit with false - await waitForCondition(() => validationChangeSpy.events.length === 1); + await validationChangeSpy.calledOnce(); expect((validationChangeSpy.lastEvent as CustomEvent).detail['valid']).to.be.equal(false); expect(input).to.have.attribute('data-sbb-invalid'); @@ -226,7 +226,7 @@ describe(`sbb-datepicker`, () => { input.blur(); // Then validation event should be emitted with true - await waitForCondition(() => validationChangeSpy.events.length === 1); + await validationChangeSpy.calledOnce(); expect((validationChangeSpy.lastEvent as CustomEvent).detail['valid']).to.be.equal(true); expect(input).not.to.have.attribute('data-sbb-invalid'); }); diff --git a/src/elements/dialog/dialog/dialog.spec.ts b/src/elements/dialog/dialog/dialog.spec.ts index 230d73127d..878021875a 100644 --- a/src/elements/dialog/dialog/dialog.spec.ts +++ b/src/elements/dialog/dialog/dialog.spec.ts @@ -20,11 +20,11 @@ async function openDialog(element: SbbDialogElement): Promise { element.open(); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); await waitForLitRender(element); @@ -63,7 +63,7 @@ describe('sbb-dialog', () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); await waitForLitRender(element); @@ -82,11 +82,11 @@ describe('sbb-dialog', () => { element.close(); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -105,7 +105,7 @@ describe('sbb-dialog', () => { element.close(); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); @@ -124,11 +124,11 @@ describe('sbb-dialog', () => { element.dispatchEvent(new CustomEvent('pointerup')); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -214,11 +214,11 @@ describe('sbb-dialog', () => { closeButton.click(); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -237,11 +237,11 @@ describe('sbb-dialog', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -275,11 +275,11 @@ describe('sbb-dialog', () => { stackedDialog.open(); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 2); + await willOpen.calledTwice(); expect(willOpen.count).to.be.equal(2); await waitForLitRender(element); - await waitForCondition(() => didOpen.events.length === 2); + await didOpen.calledTwice(); expect(didOpen.count).to.be.equal(2); await waitForLitRender(element); @@ -291,11 +291,11 @@ describe('sbb-dialog', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -308,11 +308,11 @@ describe('sbb-dialog', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 2); + await willClose.calledTwice(); expect(willClose.count).to.be.equal(2); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 2); + await didClose.calledTwice(); expect(didClose.count).to.be.equal(2); await waitForLitRender(element); @@ -344,11 +344,11 @@ describe('sbb-dialog', () => { innerElement.open(); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 2); + await willOpen.calledTwice(); expect(willOpen.count).to.be.equal(2); await waitForLitRender(element); - await waitForCondition(() => didOpen.events.length === 2); + await didOpen.calledTwice(); expect(didOpen.count).to.be.equal(2); await waitForLitRender(element); @@ -359,11 +359,11 @@ describe('sbb-dialog', () => { innerElement.dispatchEvent(new CustomEvent('pointerup')); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); diff --git a/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts b/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts index 2ce8516076..f37a095a7c 100644 --- a/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts +++ b/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbExpansionPanelContentElement } from '../expansion-panel-content.js'; import '../expansion-panel-content.js'; import { SbbExpansionPanelHeaderElement } from '../expansion-panel-header.js'; @@ -73,27 +73,27 @@ describe(`sbb-expansion-panel`, () => { await waitForLitRender(element); header.click(); - await waitForCondition(() => toggleExpandedEventSpy.events.length === 1); + await toggleExpandedEventSpy.calledOnce(); expect(toggleExpandedEventSpy.count).to.be.equal(1); await waitForLitRender(element); expect(element.expanded).to.be.equal(true); expect(header.getAttribute('aria-expanded')).to.be.equal('true'); expect(content.getAttribute('aria-hidden')).to.be.equal('false'); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); header.click(); - await waitForCondition(() => toggleExpandedEventSpy.events.length === 2); + await toggleExpandedEventSpy.calledTwice(); expect(toggleExpandedEventSpy.count).to.be.equal(2); await waitForLitRender(element); expect(element.expanded).to.be.equal(false); expect(header.getAttribute('aria-expanded')).to.be.equal('false'); expect(content.getAttribute('aria-hidden')).to.be.equal('true'); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); }); diff --git a/src/elements/flip-card/flip-card/flip-card.spec.ts b/src/elements/flip-card/flip-card/flip-card.spec.ts index 12d8ccc81c..4a10c8e962 100644 --- a/src/elements/flip-card/flip-card/flip-card.spec.ts +++ b/src/elements/flip-card/flip-card/flip-card.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbFlipCardDetailsElement } from '../flip-card-details.js'; import type { SbbFlipCardSummaryElement } from '../flip-card-summary.js'; @@ -45,7 +45,7 @@ describe('sbb-flip-card', () => { element.shadowRoot?.querySelector('button')!.click(); await waitForLitRender(element); - await waitForCondition(() => flipSpy.events.length === 1); + await flipSpy.calledOnce(); expect(flipSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-flipped'); @@ -67,7 +67,7 @@ describe('sbb-flip-card', () => { element.click(); await waitForLitRender(element); - await waitForCondition(() => flipSpy.events.length === 1); + await flipSpy.calledOnce(); expect(flipSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-flipped'); @@ -89,7 +89,7 @@ describe('sbb-flip-card', () => { element.toggle(); await waitForLitRender(element); - await waitForCondition(() => flipSpy.events.length === 1); + await flipSpy.calledOnce(); expect(flipSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-flipped'); diff --git a/src/elements/header/header-button/header-button.spec.ts b/src/elements/header/header-button/header-button.spec.ts index 2efe4e25df..e77ae0afa7 100644 --- a/src/elements/header/header-button/header-button.spec.ts +++ b/src/elements/header/header-button/header-button.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbHeaderButtonElement } from './header-button.js'; @@ -23,7 +23,7 @@ describe(`sbb-header-button`, () => { const clickSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/header/header-link/header-link.spec.ts b/src/elements/header/header-link/header-link.spec.ts index 0d1bd2eea0..4fa3c226de 100644 --- a/src/elements/header/header-link/header-link.spec.ts +++ b/src/elements/header/header-link/header-link.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbHeaderLinkElement } from './header-link.js'; @@ -23,7 +23,7 @@ describe(`sbb-header-link`, () => { const clickSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => clickSpy.events.length === 1); + await clickSpy.calledOnce(); expect(clickSpy.count).to.be.equal(1); }); diff --git a/src/elements/header/header/header.spec.ts b/src/elements/header/header/header.spec.ts index 1aab90d985..e9ecd32435 100644 --- a/src/elements/header/header/header.spec.ts +++ b/src/elements/header/header/header.spec.ts @@ -3,7 +3,7 @@ import { sendKeys, setViewport } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture, tabKey } from '../../core/testing/private.js'; -import { EventSpy, mockScrollTo, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, mockScrollTo, waitForLitRender } from '../../core/testing.js'; import { SbbMenuElement } from '../../menu.js'; import type { SbbHeaderButtonElement } from '../header-button.js'; @@ -166,10 +166,10 @@ describe(`sbb-header`, () => { const menuTrigger = root.querySelector('sbb-header-button')!; menuTrigger.click(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); const menuId = menuTrigger.getAttribute('aria-controls'); diff --git a/src/elements/link/link-button/link-button.spec.ts b/src/elements/link/link-button/link-button.spec.ts index 6fc4ef97f4..b36bc0c0d5 100644 --- a/src/elements/link/link-button/link-button.spec.ts +++ b/src/elements/link/link-button/link-button.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbLinkButtonElement } from './link-button.js'; @@ -23,7 +23,7 @@ describe(`sbb-link-button`, () => { const changeSpy = new EventSpy('click'); await element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/link/link-static/link-static.spec.ts b/src/elements/link/link-static/link-static.spec.ts index 3dbf42f023..2142c8acdb 100644 --- a/src/elements/link/link-static/link-static.spec.ts +++ b/src/elements/link/link-static/link-static.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbLinkStaticElement } from './link-static.js'; @@ -23,7 +23,7 @@ describe(`sbb-link-static`, () => { const changeSpy = new EventSpy('click'); await element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/link/link/link.spec.ts b/src/elements/link/link/link.spec.ts index 8aa1a9241d..d016a85c7e 100644 --- a/src/elements/link/link/link.spec.ts +++ b/src/elements/link/link/link.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbLinkElement } from './link.js'; @@ -23,7 +23,7 @@ describe(`sbb-link`, () => { const changeSpy = new EventSpy('click'); await element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/menu/menu-button/menu-button.spec.ts b/src/elements/menu/menu-button/menu-button.spec.ts index d3153ea924..ebd020dcd1 100644 --- a/src/elements/menu/menu-button/menu-button.spec.ts +++ b/src/elements/menu/menu-button/menu-button.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbMenuButtonElement } from './menu-button.js'; @@ -23,7 +23,7 @@ describe(`sbb-menu-button`, () => { const changeSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/menu/menu-link/menu-link.spec.ts b/src/elements/menu/menu-link/menu-link.spec.ts index cd6ef01178..e90196abbb 100644 --- a/src/elements/menu/menu-link/menu-link.spec.ts +++ b/src/elements/menu/menu-link/menu-link.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbMenuLinkElement } from './menu-link.js'; @@ -25,7 +25,7 @@ describe(`sbb-menu-link`, () => { const changeSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/menu/menu/menu.spec.ts b/src/elements/menu/menu/menu.spec.ts index 4ff53ed69b..dac178930a 100644 --- a/src/elements/menu/menu/menu.spec.ts +++ b/src/elements/menu/menu/menu.spec.ts @@ -4,7 +4,7 @@ import { html } from 'lit/static-html.js'; import type { SbbButtonElement } from '../../button.js'; import { fixture, tabKey } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbMenuElement } from './menu.js'; @@ -48,11 +48,11 @@ describe(`sbb-menu`, () => { trigger.click(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -68,11 +68,11 @@ describe(`sbb-menu`, () => { trigger.click(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -84,11 +84,11 @@ describe(`sbb-menu`, () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -105,11 +105,11 @@ describe(`sbb-menu`, () => { trigger.click(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -118,11 +118,11 @@ describe(`sbb-menu`, () => { menuAction.click(); await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -139,11 +139,11 @@ describe(`sbb-menu`, () => { trigger.click(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -153,11 +153,11 @@ describe(`sbb-menu`, () => { menuLink.click(); await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -173,11 +173,11 @@ describe(`sbb-menu`, () => { trigger.click(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -208,11 +208,11 @@ describe(`sbb-menu`, () => { trigger.click(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -234,11 +234,11 @@ describe(`sbb-menu`, () => { await sendKeys({ press: 'Enter' }); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -254,7 +254,7 @@ describe(`sbb-menu`, () => { element.addEventListener(SbbMenuElement.events.willOpen, (ev) => ev.preventDefault()); element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -266,13 +266,13 @@ describe(`sbb-menu`, () => { const willCloseEventSpy = new EventSpy(SbbMenuElement.events.willClose); element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForLitRender(element); element.addEventListener(SbbMenuElement.events.willClose, (ev) => ev.preventDefault()); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); await waitForLitRender(element); expect(element).to.have.attribute('data-state', 'opened'); diff --git a/src/elements/navigation/navigation-button/navigation-button.spec.ts b/src/elements/navigation/navigation-button/navigation-button.spec.ts index 9f7561c93c..5dec6b87a7 100644 --- a/src/elements/navigation/navigation-button/navigation-button.spec.ts +++ b/src/elements/navigation/navigation-button/navigation-button.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbNavigationButtonElement } from './navigation-button.js'; @@ -24,7 +24,7 @@ describe(`sbb-navigation-button`, () => { it('dispatches event on click', async () => { const changeSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/navigation/navigation-link/navigation-link.spec.ts b/src/elements/navigation/navigation-link/navigation-link.spec.ts index 4a90deda60..923c0b375a 100644 --- a/src/elements/navigation/navigation-link/navigation-link.spec.ts +++ b/src/elements/navigation/navigation-link/navigation-link.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbNavigationLinkElement } from './navigation-link.js'; @@ -24,7 +24,7 @@ describe(`sbb-navigation-link`, () => { it('dispatches event on click', async () => { const changeSpy = new EventSpy('click'); element.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/navigation/navigation/navigation.spec.ts b/src/elements/navigation/navigation/navigation.spec.ts index 33b2973f7a..6062f3c1e1 100644 --- a/src/elements/navigation/navigation/navigation.spec.ts +++ b/src/elements/navigation/navigation/navigation.spec.ts @@ -50,7 +50,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -87,7 +87,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -133,7 +133,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -175,7 +175,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -200,7 +200,7 @@ describe(`sbb-navigation`, () => { element.close(); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -209,7 +209,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 2); + await didOpenEventSpy.calledTwice(); expect(didOpenEventSpy.count).to.be.equal(2); await waitForLitRender(element); @@ -228,7 +228,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -237,7 +237,7 @@ describe(`sbb-navigation`, () => { element.close(); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -253,7 +253,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -262,7 +262,7 @@ describe(`sbb-navigation`, () => { closeButton.click(); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -276,7 +276,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -288,7 +288,7 @@ describe(`sbb-navigation`, () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -312,7 +312,7 @@ describe(`sbb-navigation`, () => { action.click(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -322,7 +322,7 @@ describe(`sbb-navigation`, () => { closeEl.click(); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -340,7 +340,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -369,7 +369,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -408,7 +408,7 @@ describe(`sbb-navigation`, () => { await waitForLitRender(element); await nextFrame(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForCondition(() => section.getAttribute('data-state') === 'opened'); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -418,7 +418,7 @@ describe(`sbb-navigation`, () => { closeButton.click(); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); await waitForCondition(() => section.getAttribute('data-state') === 'closed'); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -441,7 +441,7 @@ describe(`sbb-navigation`, () => { action.click(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -454,7 +454,7 @@ describe(`sbb-navigation`, () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -478,7 +478,7 @@ describe(`sbb-navigation`, () => { action.click(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -499,7 +499,7 @@ describe(`sbb-navigation`, () => { element.addEventListener(SbbNavigationElement.events.willOpen, (ev) => ev.preventDefault()); element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -511,13 +511,13 @@ describe(`sbb-navigation`, () => { const willCloseEventSpy = new EventSpy(SbbNavigationElement.events.willClose); element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForLitRender(element); element.addEventListener(SbbNavigationElement.events.willClose, (ev) => ev.preventDefault()); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); await waitForLitRender(element); expect(element).to.have.attribute('data-state', 'opened'); diff --git a/src/elements/notification/notification.spec.ts b/src/elements/notification/notification.spec.ts index 2d411c8957..b2af8a186d 100644 --- a/src/elements/notification/notification.spec.ts +++ b/src/elements/notification/notification.spec.ts @@ -1,9 +1,9 @@ -import { aTimeout, assert, expect } from '@open-wc/testing'; +import { assert, aTimeout, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import type { SbbSecondaryButtonElement } from '../button.js'; import { fixture } from '../core/testing/private.js'; -import { waitForCondition, EventSpy, waitForLitRender } from '../core/testing.js'; +import { EventSpy, waitForCondition, waitForLitRender } from '../core/testing.js'; import { SbbNotificationElement } from './notification.js'; @@ -36,11 +36,11 @@ describe(`sbb-notification`, () => { element.close(); await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -65,11 +65,11 @@ describe(`sbb-notification`, () => { closeButton.click(); await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); diff --git a/src/elements/overlay/overlay.spec.ts b/src/elements/overlay/overlay.spec.ts index f9e26b0d8e..9f2b37439b 100644 --- a/src/elements/overlay/overlay.spec.ts +++ b/src/elements/overlay/overlay.spec.ts @@ -18,11 +18,11 @@ async function openOverlay(element: SbbOverlayElement): Promise { element.open(); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); await waitForLitRender(element); @@ -59,7 +59,7 @@ describe('sbb-overlay', () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); await waitForLitRender(element); @@ -78,11 +78,11 @@ describe('sbb-overlay', () => { element.close(); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -101,7 +101,7 @@ describe('sbb-overlay', () => { element.close(); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); @@ -119,11 +119,11 @@ describe('sbb-overlay', () => { closeButton.click(); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -151,7 +151,7 @@ describe('sbb-overlay', () => { closeButton.click(); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.firstEvent?.detail.returnValue).to.be.deep.equal(form); }); @@ -168,11 +168,11 @@ describe('sbb-overlay', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -202,11 +202,11 @@ describe('sbb-overlay', () => { stackedOverlay.open(); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 2); + await willOpen.calledTwice(); expect(willOpen.count).to.be.equal(2); await waitForLitRender(element); - await waitForCondition(() => didOpen.events.length === 2); + await didOpen.calledTwice(); expect(didOpen.count).to.be.equal(2); await waitForLitRender(element); @@ -218,11 +218,11 @@ describe('sbb-overlay', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -235,11 +235,11 @@ describe('sbb-overlay', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 2); + await willClose.calledTwice(); expect(willClose.count).to.be.equal(2); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 2); + await didClose.calledTwice(); expect(didClose.count).to.be.equal(2); await waitForLitRender(element); diff --git a/src/elements/paginator/paginator/paginator.spec.ts b/src/elements/paginator/paginator/paginator.spec.ts index 6680e9ffb7..d258b6fcac 100644 --- a/src/elements/paginator/paginator/paginator.spec.ts +++ b/src/elements/paginator/paginator/paginator.spec.ts @@ -5,7 +5,7 @@ import { spy } from 'sinon'; import type { SbbMiniButtonElement } from '../../button/mini-button.js'; import { fixture, tabKey } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbOptionElement } from '../../option.js'; import { SbbSelectElement } from '../../select.js'; @@ -110,9 +110,9 @@ describe('sbb-paginator', () => { const willOpen = new EventSpy(SbbSelectElement.events.willOpen); const didOpen = new EventSpy(SbbSelectElement.events.didOpen); select.click(); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); await waitForLitRender(element); diff --git a/src/elements/popover/popover-trigger/popover-trigger.spec.ts b/src/elements/popover/popover-trigger/popover-trigger.spec.ts index e4e4422386..cc0887663a 100644 --- a/src/elements/popover/popover-trigger/popover-trigger.spec.ts +++ b/src/elements/popover/popover-trigger/popover-trigger.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, EventSpy, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; import { SbbPopoverElement } from '../popover.js'; import { SbbPopoverTriggerElement } from './popover-trigger.js'; @@ -38,10 +38,10 @@ describe(`sbb-popover-trigger`, () => { element.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(popover).to.have.attribute('data-state', 'opened'); }); @@ -62,7 +62,7 @@ describe(`sbb-popover-trigger`, () => { const focusSpy = new EventSpy('focus', element); element.focus(); - await waitForCondition(() => focusSpy.events.length === 1); + await focusSpy.calledOnce(); expect(focusSpy.count).to.be.equal(1); await sendKeys({ press: 'Enter' }); @@ -77,7 +77,7 @@ describe(`sbb-popover-trigger`, () => { popover.hoverTrigger = true; element.focus(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); await sendKeys({ press: 'Enter' }); diff --git a/src/elements/popover/popover/popover.spec.ts b/src/elements/popover/popover/popover.spec.ts index 7d192756d8..ac41c042f3 100644 --- a/src/elements/popover/popover/popover.spec.ts +++ b/src/elements/popover/popover/popover.spec.ts @@ -44,10 +44,10 @@ describe(`sbb-popover`, () => { element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); @@ -59,10 +59,10 @@ describe(`sbb-popover`, () => { trigger.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); @@ -76,19 +76,19 @@ describe(`sbb-popover`, () => { element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'closed'); }); @@ -102,19 +102,19 @@ describe(`sbb-popover`, () => { element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); closeButton!.click(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'closed'); @@ -131,10 +131,10 @@ describe(`sbb-popover`, () => { trigger.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); @@ -142,10 +142,10 @@ describe(`sbb-popover`, () => { popoverLink.click(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'closed'); @@ -161,10 +161,10 @@ describe(`sbb-popover`, () => { trigger.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); @@ -190,13 +190,13 @@ describe(`sbb-popover`, () => { element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); // Simulate backdrop click window.dispatchEvent(new MouseEvent('mousedown', { buttons: 1, clientX: 1 })); window.dispatchEvent(new PointerEvent('pointerup')); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(trigger).to.have.attribute('data-focus-origin', 'mouse'); expect(document.activeElement).to.be.equal(trigger); @@ -211,7 +211,7 @@ describe(`sbb-popover`, () => { element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); const interactiveElementPosition = interactiveBackgroundElement.getBoundingClientRect(); await sendMouse({ @@ -221,7 +221,7 @@ describe(`sbb-popover`, () => { Math.round(interactiveElementPosition.y + interactiveElementPosition.height / 2), ], }); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(document.activeElement).to.be.equal(interactiveBackgroundElement); }); @@ -233,7 +233,7 @@ describe(`sbb-popover`, () => { trigger.click(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(popoverLink).not.to.be.null; @@ -241,7 +241,7 @@ describe(`sbb-popover`, () => { popoverLink.focus(); await sendKeys({ press: 'Enter' }); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(trigger).to.have.attribute('data-focus-origin', 'keyboard'); @@ -255,10 +255,10 @@ describe(`sbb-popover`, () => { await sendKeys({ press: tabKey }); await sendKeys({ press: 'Enter' }); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); @@ -278,14 +278,14 @@ describe(`sbb-popover`, () => { element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); closeButton.focus(); await sendKeys({ press: 'Enter' }); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(trigger).to.have.attribute('data-focus-origin', 'keyboard'); @@ -300,10 +300,10 @@ describe(`sbb-popover`, () => { trigger.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); @@ -311,10 +311,10 @@ describe(`sbb-popover`, () => { await sendKeys({ press: tabKey }); await sendKeys({ press: 'Escape' }); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'closed'); @@ -328,7 +328,7 @@ describe(`sbb-popover`, () => { element.addEventListener(SbbPopoverElement.events.willOpen, (ev) => ev.preventDefault()); element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -340,13 +340,13 @@ describe(`sbb-popover`, () => { const willCloseEventSpy = new EventSpy(SbbPopoverElement.events.willClose); element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForLitRender(element); element.addEventListener(SbbPopoverElement.events.willClose, (ev) => ev.preventDefault()); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); await waitForLitRender(element); expect(element).to.have.attribute('data-state', 'opened'); @@ -476,10 +476,10 @@ describe(`sbb-popover`, () => { trigger.focus(); await sendKeys({ press: 'Space' }); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'opened'); @@ -491,17 +491,17 @@ describe(`sbb-popover`, () => { await sendKeys({ press: 'Space' }); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'closed'); - await waitForCondition(() => willOpenEventSpy.events.length === 2); + await willOpenEventSpy.calledTwice(); expect(willOpenEventSpy.count).to.be.equal(2); - await waitForCondition(() => didOpenEventSpy.events.length === 2); + await didOpenEventSpy.calledTwice(); expect(didOpenEventSpy.count).to.be.equal(2); expect(secondElement).to.have.attribute('data-state', 'opened'); }); diff --git a/src/elements/radio-button/radio-button-group/radio-button-group.spec.ts b/src/elements/radio-button/radio-button-group/radio-button-group.spec.ts index a1e2899478..03c5d6756f 100644 --- a/src/elements/radio-button/radio-button-group/radio-button-group.spec.ts +++ b/src/elements/radio-button/radio-button-group/radio-button-group.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html, unsafeStatic } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbRadioButtonPanelElement } from '../radio-button-panel.js'; import type { SbbRadioButtonElement } from '../radio-button.js'; @@ -88,9 +88,9 @@ import { SbbRadioButtonGroupElement } from './radio-button-group.js'; const inputSpy = new EventSpy('input'); checkedRadio.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); - await waitForCondition(() => inputSpy.events.length === 1); + await inputSpy.calledOnce(); expect(inputSpy.count).to.be.equal(1); firstRadio.click(); diff --git a/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts b/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts index f502726e1f..25b81d10e6 100644 --- a/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts +++ b/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbRadioButtonPanelElement } from './radio-button-panel.js'; @@ -31,7 +31,7 @@ describe(`sbb-radio-button`, () => { await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); }); @@ -41,13 +41,13 @@ describe(`sbb-radio-button`, () => { element.click(); await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); element.click(); await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); }); @@ -58,13 +58,13 @@ describe(`sbb-radio-button`, () => { element.click(); await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); element.click(); await waitForLitRender(element); expect(element).not.to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 2); + await stateChange.calledTwice(); expect(stateChange.count).to.be.equal(2); }); }); diff --git a/src/elements/radio-button/radio-button/radio-button.spec.ts b/src/elements/radio-button/radio-button/radio-button.spec.ts index 6a7e47b9e6..8f379261c6 100644 --- a/src/elements/radio-button/radio-button/radio-button.spec.ts +++ b/src/elements/radio-button/radio-button/radio-button.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbRadioButtonElement } from './radio-button.js'; @@ -48,7 +48,7 @@ describe(`sbb-radio-button`, () => { await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); }); @@ -58,13 +58,13 @@ describe(`sbb-radio-button`, () => { element.click(); await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); element.click(); await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); }); @@ -75,13 +75,13 @@ describe(`sbb-radio-button`, () => { element.click(); await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 1); + await stateChange.calledOnce(); expect(stateChange.count).to.be.equal(1); element.click(); await waitForLitRender(element); expect(element).not.to.have.attribute('checked'); - await waitForCondition(() => stateChange.events.length === 2); + await stateChange.calledTwice(); expect(stateChange.count).to.be.equal(2); }); diff --git a/src/elements/select/select.spec.ts b/src/elements/select/select.spec.ts index 2ff7c5e25c..24bd1e7e8e 100644 --- a/src/elements/select/select.spec.ts +++ b/src/elements/select/select.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture, tabKey } from '../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../core/testing.js'; +import { EventSpy, waitForLitRender } from '../core/testing.js'; import { SbbOptionElement } from '../option.js'; import { SbbSelectElement } from './select.js'; @@ -50,9 +50,9 @@ describe(`sbb-select`, () => { const didClose = new EventSpy(SbbSelectElement.events.didClose); element.dispatchEvent(new CustomEvent('click')); await waitForLitRender(element); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); await waitForLitRender(element); @@ -61,9 +61,9 @@ describe(`sbb-select`, () => { element.dispatchEvent(new CustomEvent('click')); await waitForLitRender(element); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -166,9 +166,9 @@ describe(`sbb-select`, () => { const didOpen = new EventSpy(SbbSelectElement.events.didOpen); element.click(); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); await waitForLitRender(element); @@ -192,9 +192,9 @@ describe(`sbb-select`, () => { expect(selectionChange.count).to.be.equal(1); expect(optionSelected.count).to.be.equal(1); - await waitForCondition(() => willClose.events.length === 1); + await willClose.calledOnce(); expect(willClose.count).to.be.equal(1); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); await waitForLitRender(element); @@ -210,9 +210,9 @@ describe(`sbb-select`, () => { const didOpen = new EventSpy(SbbSelectElement.events.didOpen); element.dispatchEvent(new CustomEvent('click')); - await waitForCondition(() => willOpen.events.length === 1); + await willOpen.calledOnce(); expect(willOpen.count).to.be.equal(1); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); await waitForLitRender(element); expect(firstOption).not.to.have.attribute('data-active'); @@ -251,23 +251,23 @@ describe(`sbb-select`, () => { focusableElement.focus(); await sendKeys({ press: 'Enter' }); await waitForLitRender(element); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); focusableElement.focus(); await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); focusableElement.focus(); await sendKeys({ press: 'ArrowDown' }); - await waitForCondition(() => didOpen.events.length === 2); + await didOpen.calledTwice(); expect(didOpen.count).to.be.equal(2); focusableElement.focus(); await sendKeys({ press: tabKey }); - await waitForCondition(() => didClose.events.length === 2); + await didClose.calledTwice(); expect(didClose.count).to.be.equal(2); focusableElement.focus(); @@ -291,7 +291,7 @@ describe(`sbb-select`, () => { const didOpen = new EventSpy(SbbSelectElement.events.didOpen); focusableElement.focus(); await sendKeys({ press: ' ' }); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); expect(firstOption).not.to.have.attribute('data-active'); expect(firstOption).not.to.have.attribute('selected'); @@ -333,7 +333,7 @@ describe(`sbb-select`, () => { const didClose = new EventSpy(SbbSelectElement.events.didClose); focusableElement.focus(); await sendKeys({ press: 'ArrowUp' }); - await waitForCondition(() => didOpen.events.length === 1); + await didOpen.calledOnce(); expect(didOpen.count).to.be.equal(1); expect(secondOption).not.to.have.attribute('data-active'); @@ -348,13 +348,13 @@ describe(`sbb-select`, () => { expect(displayValue).to.have.trimmed.text('Second'); await sendKeys({ press: 'Escape' }); - await waitForCondition(() => didClose.events.length === 1); + await didClose.calledOnce(); expect(didClose.count).to.be.equal(1); element.focus(); await sendKeys({ press: 'ArrowDown' }); await waitForLitRender(element); - await waitForCondition(() => didOpen.events.length === 2); + await didOpen.calledTwice(); expect(didOpen.count).to.be.equal(2); expect(secondOption).not.to.have.attribute('data-active'); expect(secondOption).to.have.attribute('selected'); @@ -377,7 +377,7 @@ describe(`sbb-select`, () => { element.addEventListener(SbbSelectElement.events.willOpen, (ev) => ev.preventDefault()); element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -389,13 +389,13 @@ describe(`sbb-select`, () => { const willCloseEventSpy = new EventSpy(SbbSelectElement.events.willClose); element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForLitRender(element); element.addEventListener(SbbSelectElement.events.willClose, (ev) => ev.preventDefault()); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); await waitForLitRender(element); expect(element).to.have.attribute('data-state', 'opened'); diff --git a/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts b/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts index 9a252f79bb..ab3783cc59 100644 --- a/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts +++ b/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts @@ -176,8 +176,8 @@ describe(`sbb-selection-expansion-panel`, () => { secondInput.click(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); + await didOpenEventSpy.calledOnce(); await waitForLitRender(wrapper); expect(willOpenEventSpy.count).to.be.equal(1); @@ -375,7 +375,7 @@ describe(`sbb-selection-expansion-panel`, () => { .then(() => Promise.reject('accidentally passed')) .catch((error) => expect(error).to.include('timeout')); - await waitForCondition(() => didOpenEventSpy.count === 1); + await didOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); expect(didOpenEventSpy.count).to.be.equal(1); expect(mainRadioButton1Label.name.trim()).to.be.equal('Main Option 1 , expanded'); @@ -386,8 +386,8 @@ describe(`sbb-selection-expansion-panel`, () => { // Activate main option 2 mainRadioButton2.click(); - await waitForCondition(() => didOpenEventSpy.count === 2); - await waitForCondition(() => didCloseEventSpy.count === 1); + await didOpenEventSpy.calledTwice(); + await didCloseEventSpy.calledOnce(); const mainRadioButton1LabelSecondRender = (await a11ySnapshot({ selector: 'sbb-radio-button-panel[value="main1"]', @@ -440,7 +440,7 @@ describe(`sbb-selection-expansion-panel`, () => { 'sbb-radio-button[value="sub1"]', )!; - await waitForCondition(() => didOpenEventSpy.count === 1); + await didOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); expect(didOpenEventSpy.count).to.be.equal(1); expect(panel1).to.have.attribute('data-state', 'opened'); @@ -451,8 +451,8 @@ describe(`sbb-selection-expansion-panel`, () => { main2.checked = true; - await waitForCondition(() => didOpenEventSpy.count === 2); - await waitForCondition(() => didCloseEventSpy.count === 1); + await didOpenEventSpy.calledTwice(); + await didCloseEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(2); expect(didOpenEventSpy.count).to.be.equal(2); @@ -559,7 +559,7 @@ describe(`sbb-selection-expansion-panel`, () => { it('selects input on click and shows related content', async () => { await waitForLitRender(wrapper); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); expect(didOpenEventSpy.count).to.be.equal(1); @@ -570,7 +570,7 @@ describe(`sbb-selection-expansion-panel`, () => { secondInput.click(); await waitForLitRender(wrapper); - await waitForCondition(() => didOpenEventSpy.events.length === 2); + await didOpenEventSpy.calledTwice(); expect(willOpenEventSpy.count).to.be.equal(2); expect(didOpenEventSpy.count).to.be.equal(2); @@ -587,7 +587,7 @@ describe(`sbb-selection-expansion-panel`, () => { firstInput.click(); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); expect(didCloseEventSpy.count).to.be.equal(1); expect(firstInput.checked).to.be.false; diff --git a/src/elements/stepper/stepper/stepper.spec.ts b/src/elements/stepper/stepper/stepper.spec.ts index c418c2647b..da8212488f 100644 --- a/src/elements/stepper/stepper/stepper.spec.ts +++ b/src/elements/stepper/stepper/stepper.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture, tabKey } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbStepElement } from '../step/step.js'; import type { SbbStepLabelElement } from '../step-label.js'; @@ -65,7 +65,7 @@ describe('sbb-stepper', () => { stepLabelThree.click(); await waitForLitRender(element); - await waitForCondition(() => validate.events.length === 1); + await validate.calledOnce(); expect(validate.count).to.be.equal(1); expect(stepLabelThree).to.have.attribute('data-selected'); expect(stepLabelThree.step).to.have.attribute('data-selected'); @@ -81,7 +81,7 @@ describe('sbb-stepper', () => { element.selected = stepLabelThree.step!; await waitForLitRender(element); - await waitForCondition(() => validate.events.length === 1); + await validate.calledOnce(); expect(validate.count).to.be.equal(1); expect(stepLabelThree).to.have.attribute('data-selected'); expect(stepLabelThree.step).to.have.attribute('data-selected'); @@ -97,7 +97,7 @@ describe('sbb-stepper', () => { element.selectedIndex = 2; await waitForLitRender(element); - await waitForCondition(() => validate.events.length === 1); + await validate.calledOnce(); expect(validate.count).to.be.equal(1); expect(stepLabelThree).to.have.attribute('data-selected'); expect(stepLabelThree.step).to.have.attribute('data-selected'); @@ -115,7 +115,7 @@ describe('sbb-stepper', () => { stepperNext.click(); await waitForLitRender(element); - await waitForCondition(() => validate.events.length === 1); + await validate.calledOnce(); expect(validate.count).to.be.equal(1); expect(stepLabelTwo).to.have.attribute('data-selected'); expect(stepLabelTwo.step).to.have.attribute('data-selected'); @@ -137,7 +137,7 @@ describe('sbb-stepper', () => { stepperNext.click(); await waitForLitRender(element); - await waitForCondition(() => validate.events.length === 1); + await validate.calledOnce(); expect(validate.count).to.be.equal(1); expect(stepLabelTwo).to.have.attribute('data-selected'); expect(stepLabelTwo.step).to.have.attribute('data-selected'); @@ -181,7 +181,7 @@ describe('sbb-stepper', () => { stepperNext.click(); await waitForLitRender(element); - await waitForCondition(() => validate.events.length === 1); + await validate.calledOnce(); expect(validate.count).to.be.equal(1); expect(stepLabelTwo).to.have.attribute('data-selected'); expect(stepLabelTwo.step).to.have.attribute('data-selected'); @@ -198,7 +198,7 @@ describe('sbb-stepper', () => { stepLabelThree.click(); await waitForLitRender(element); - await waitForCondition(() => validate.events.length === 1); + await validate.calledOnce(); expect(validate.count).to.be.equal(1); expect(stepLabelThree).not.to.have.attribute('data-selected'); expect(stepLabelThree.step).not.to.have.attribute('data-selected'); diff --git a/src/elements/tabs/tab-group/tab-group.spec.ts b/src/elements/tabs/tab-group/tab-group.spec.ts index 8e707e546e..deadfabdc5 100644 --- a/src/elements/tabs/tab-group/tab-group.spec.ts +++ b/src/elements/tabs/tab-group/tab-group.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture, tabKey } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbTabLabelElement } from '../tab-label.js'; import type { SbbTabElement } from '../tab.js'; @@ -102,7 +102,7 @@ describe(`sbb-tab-group`, () => { const changeSpy = new EventSpy(SbbTabGroupElement.events.didChange); tab.click(); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); }); diff --git a/src/elements/tag/tag-group/tag-group.spec.ts b/src/elements/tag/tag-group/tag-group.spec.ts index 85e6c54e4d..0088c1117a 100644 --- a/src/elements/tag/tag-group/tag-group.spec.ts +++ b/src/elements/tag/tag-group/tag-group.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { waitForCondition, waitForLitRender, EventSpy } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbTagElement } from '../tag.js'; import { SbbTagGroupElement } from './tag-group.js'; @@ -46,9 +46,9 @@ describe(`sbb-tag-group`, () => { expect(tag1).to.have.attribute('checked'); expect(tag1.checked).to.be.equal(true); - await waitForCondition(() => inputSpy.events.length === 1); + await inputSpy.calledOnce(); expect(inputSpy.count).to.be.equal(1); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(element.value).to.be.eql(['tag1']); }); @@ -111,9 +111,9 @@ describe(`sbb-tag-group`, () => { expect(tag2).not.to.have.attribute('checked'); expect(tag2.checked).to.be.equal(false); - await waitForCondition(() => inputSpy.events.length === 1); + await inputSpy.calledOnce(); expect(inputSpy.count).to.be.equal(1); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(element.value).to.be.an('array').that.is.empty; }); @@ -279,9 +279,9 @@ describe(`sbb-tag-group`, () => { expect(tag1).to.have.attribute('checked'); expect(tag1.checked).to.be.equal(true); - await waitForCondition(() => inputSpy.events.length === 1); + await inputSpy.calledOnce(); expect(inputSpy.count).to.be.equal(1); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(element.value).to.be.equal('tag1'); }); @@ -394,10 +394,10 @@ describe(`sbb-tag-group`, () => { expect(tag2).not.to.have.attribute('checked'); expect(tag2.checked).to.be.equal(false); - await waitForCondition(() => inputSpy.events.length === 1); + await inputSpy.calledOnce(); expect(inputSpy.count).to.be.equal(1); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(element.value).to.be.equal('tag3'); @@ -419,10 +419,10 @@ describe(`sbb-tag-group`, () => { expect(tag2).not.to.have.attribute('checked'); expect(tag2.checked).to.be.equal(false); - await waitForCondition(() => inputSpy.events.length === 1); + await inputSpy.calledOnce(); expect(inputSpy.count).to.be.equal(1); - await waitForCondition(() => changeSpy.events.length === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.equal(1); expect(element.value).to.be.equal('tag1'); diff --git a/src/elements/toast/toast.spec.ts b/src/elements/toast/toast.spec.ts index 5880112f76..9ff9f98434 100644 --- a/src/elements/toast/toast.spec.ts +++ b/src/elements/toast/toast.spec.ts @@ -35,11 +35,11 @@ describe(`sbb-toast`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); expect(didOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); expect(element.getAttribute('data-state')).to.be.equal('opened'); @@ -47,11 +47,11 @@ describe(`sbb-toast`, () => { // Will wait for timeout and then close itself await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -68,18 +68,18 @@ describe(`sbb-toast`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); const dismissBtn = element.shadowRoot!.querySelector('sbb-transparent-button')!; dismissBtn.click(); await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -100,16 +100,16 @@ describe(`sbb-toast`, () => { element.open(); await waitForLitRender(element); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); actionBtn.click(); await waitForLitRender(element); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); expect(willCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); - await waitForCondition(() => didCloseEventSpy.events.length === 1); + await didCloseEventSpy.calledOnce(); expect(didCloseEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -173,7 +173,7 @@ describe(`sbb-toast`, () => { element.addEventListener(SbbToastElement.events.willOpen, (ev) => ev.preventDefault()); element.open(); - await waitForCondition(() => willOpenEventSpy.events.length === 1); + await willOpenEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(1); await waitForLitRender(element); @@ -185,13 +185,13 @@ describe(`sbb-toast`, () => { const willCloseEventSpy = new EventSpy(SbbToastElement.events.willClose); element.open(); - await waitForCondition(() => didOpenEventSpy.events.length === 1); + await didOpenEventSpy.calledOnce(); await waitForLitRender(element); element.addEventListener(SbbToastElement.events.willClose, (ev) => ev.preventDefault()); element.close(); - await waitForCondition(() => willCloseEventSpy.events.length === 1); + await willCloseEventSpy.calledOnce(); await waitForLitRender(element); expect(element).to.have.attribute('data-state', 'opened'); diff --git a/src/elements/toggle-check/toggle-check.spec.ts b/src/elements/toggle-check/toggle-check.spec.ts index be48ab31da..8b0df658aa 100644 --- a/src/elements/toggle-check/toggle-check.spec.ts +++ b/src/elements/toggle-check/toggle-check.spec.ts @@ -49,7 +49,7 @@ describe(`sbb-toggle-check`, () => { element.focus(); await sendKeys({ press: 'Space' }); - await waitForCondition(() => changeSpy.count === 1); + await changeSpy.calledOnce(); expect(changeSpy.count).to.be.greaterThan(0); }); }); diff --git a/src/elements/toggle/toggle-option/toggle-option.spec.ts b/src/elements/toggle/toggle-option/toggle-option.spec.ts index 3b7f6a1751..13d71853d0 100644 --- a/src/elements/toggle/toggle-option/toggle-option.spec.ts +++ b/src/elements/toggle/toggle-option/toggle-option.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import { SbbToggleOptionElement } from './toggle-option.js'; @@ -24,7 +24,7 @@ describe(`sbb-toggle-option`, () => { await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => onInput.events.length === 1); + await onInput.calledOnce(); expect(onInput.count).to.be.equal(1); }); @@ -35,14 +35,14 @@ describe(`sbb-toggle-option`, () => { await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => onInput.events.length === 1); + await onInput.calledOnce(); expect(onInput.count).to.be.equal(1); element.click(); await waitForLitRender(element); expect(element).to.have.attribute('checked'); - await waitForCondition(() => onInput.events.length === 1); + await onInput.calledOnce(); expect(onInput.count).to.be.equal(1); }); }); diff --git a/src/elements/toggle/toggle/toggle.spec.ts b/src/elements/toggle/toggle/toggle.spec.ts index 1507f98de9..c36ae21ea6 100644 --- a/src/elements/toggle/toggle/toggle.spec.ts +++ b/src/elements/toggle/toggle/toggle.spec.ts @@ -3,7 +3,7 @@ import { sendKeys } from '@web/test-runner-commands'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbToggleOptionElement } from '../toggle-option.js'; import { SbbToggleElement } from './toggle.js'; @@ -239,8 +239,8 @@ describe(`sbb-toggle`, () => { secondOption.click(); await waitForLitRender(firstOption); - await waitForCondition(() => changeSpy.events.length === 1); - await waitForCondition(() => inputSpy.events.length === 1); + await changeSpy.calledOnce(); + await inputSpy.calledOnce(); expect(valueInEvent).to.equal('Value two'); // Checking value in events of EventSpy is too late to check the real use case, @@ -253,8 +253,8 @@ describe(`sbb-toggle`, () => { firstOption.click(); await waitForLitRender(firstOption); - await waitForCondition(() => changeSpy.events.length === 2); - await waitForCondition(() => inputSpy.events.length === 2); + await changeSpy.calledTwice(); + await inputSpy.calledTwice(); expect(firstOption).to.have.attribute('checked'); expect(valueInEvent).to.equal('Value one'); @@ -287,8 +287,8 @@ describe(`sbb-toggle`, () => { await waitForLitRender(element); expect(secondOption).to.have.attribute('checked'); - await waitForCondition(() => changeSpy.events.length === 1); - await waitForCondition(() => inputSpy.events.length === 1); + await changeSpy.calledOnce(); + await inputSpy.calledOnce(); firstOption.click(); await waitForLitRender(firstOption); @@ -306,8 +306,8 @@ describe(`sbb-toggle`, () => { await waitForLitRender(element); expect(secondOption).to.have.attribute('checked'); - await waitForCondition(() => changeSpy.events.length === 1); - await waitForCondition(() => inputSpy.events.length === 1); + await changeSpy.calledOnce(); + await inputSpy.calledOnce(); firstOption.click(); await waitForLitRender(firstOption); diff --git a/src/elements/train/train-wagon/train-wagon.spec.ts b/src/elements/train/train-wagon/train-wagon.spec.ts index 7cd964caf7..74c5ca9afc 100644 --- a/src/elements/train/train-wagon/train-wagon.spec.ts +++ b/src/elements/train/train-wagon/train-wagon.spec.ts @@ -2,7 +2,7 @@ import { assert, expect } from '@open-wc/testing'; import { html } from 'lit/static-html.js'; import { fixture } from '../../core/testing/private.js'; -import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js'; +import { EventSpy, waitForLitRender } from '../../core/testing.js'; import type { SbbIconElement } from '../../icon.js'; import { SbbTrainWagonElement } from './train-wagon.js'; @@ -71,7 +71,7 @@ describe(`sbb-train-wagon`, () => { const sectorChangeSpy = new EventSpy(SbbTrainWagonElement.events.sectorChange); element.sector = 'B'; - await waitForCondition(() => sectorChangeSpy.events.length === 1); + await sectorChangeSpy.calledOnce(); expect(sectorChangeSpy.count).to.be.greaterThan(0); }); From 8dad1c84ae5804b551a02b7bb86d70c5339062e5 Mon Sep 17 00:00:00 2001 From: Jeremias Peier Date: Thu, 14 Nov 2024 17:32:25 +0100 Subject: [PATCH 2/5] fix: cleanup event-spy --- src/elements/core/testing/event-spy.ts | 53 +++++++++++++++++--------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/elements/core/testing/event-spy.ts b/src/elements/core/testing/event-spy.ts index b133f5104c..84a60d2a15 100644 --- a/src/elements/core/testing/event-spy.ts +++ b/src/elements/core/testing/event-spy.ts @@ -1,3 +1,8 @@ +type PromiseExecutorHolder = { + resolve: (value: T) => void; + reject: (reason?: any) => void; +}; + /** * This class exists to facilitate the test migration from stencil to lit. * It mimics the API that stencil provided to test events. @@ -6,11 +11,12 @@ export class EventSpy { public get count(): number { return this._count; } + private _count: number = 0; - private _events: T[] = []; public get events(): T[] { return this._events; } + private _events: T[] = []; public get firstEvent(): T | null { return this.events.length ? this.events[0] : null; @@ -20,10 +26,9 @@ export class EventSpy { return this.events.length ? this.events[this.events.length - 1] : null; } - private _count: number = 0; - private _calledOnceExecutor!: { resolve: (value: T) => void; reject: (reason?: any) => void }; - private _calledTwiceExecutor!: { resolve: (value: T) => void; reject: (reason?: any) => void }; - private _calledTriceExecutor!: { resolve: (value: T) => void; reject: (reason?: any) => void }; + private _calledOnceExecutor!: PromiseExecutorHolder; + private _calledTwiceExecutor!: PromiseExecutorHolder; + private _calledTriceExecutor!: PromiseExecutorHolder; private _calledOnce = new Promise( (resolve, reject) => (this._calledOnceExecutor = { resolve, reject }), @@ -47,30 +52,44 @@ export class EventSpy { } public calledOnce(timeout = 1000): Promise { - const clearTimeoutId = setTimeout( - () => this._calledOnceExecutor.reject('awaiting calledOnce timeout'), + return this._wrapPromiseWithTimeout( timeout, + 'calledOnce', + this._calledOnce, + this._calledOnceExecutor, ); - this._calledOnce.then(() => clearTimeout(clearTimeoutId)); - return this._calledOnce; } public calledTwice(timeout = 1000): Promise { - const clearTimeoutId = setTimeout( - () => this._calledTwiceExecutor.reject('awaiting calledTwice timeout'), + return this._wrapPromiseWithTimeout( timeout, + 'calledTwice', + this._calledTwice, + this._calledTwiceExecutor, ); - this._calledTwice.then(() => clearTimeout(clearTimeoutId)); - return this._calledTwice; } public calledTrice(timeout = 1000): Promise { - const clearTimeoutId = setTimeout( - () => this._calledTriceExecutor.reject('awaiting calledTrice timeout'), + return this._wrapPromiseWithTimeout( timeout, + 'calledTrice', + this._calledTrice, + this._calledTriceExecutor, ); - this._calledTrice.then(() => clearTimeout(clearTimeoutId)); - return this._calledTrice; + } + + private _wrapPromiseWithTimeout( + timeout: number, + name: string, + promise: Promise, + executor: PromiseExecutorHolder, + ): Promise { + const clearTimeoutId = setTimeout(() => { + console.trace(); + executor.reject(`awaiting ${name} results in timeout`); + }, timeout); + promise.then(() => clearTimeout(clearTimeoutId)); + return promise; } private _listenForEvent(): void { From 42b0135edd2bf0ec3c22d7c35323cb0bf14dca29 Mon Sep 17 00:00:00 2001 From: Jeremias Peier Date: Mon, 18 Nov 2024 11:22:20 +0100 Subject: [PATCH 3/5] fix: review --- src/elements/accordion/accordion.spec.ts | 10 +-- .../autocomplete-grid.spec.ts | 18 ++-- .../autocomplete/autocomplete.spec.ts | 16 ++-- src/elements/core/testing/event-spy.ts | 86 ++++++++----------- .../datepicker-toggle.spec.ts | 6 +- .../datepicker/datepicker/datepicker.spec.ts | 2 +- src/elements/dialog/dialog/dialog.spec.ts | 12 +-- .../expansion-panel/expansion-panel.spec.ts | 2 +- .../navigation/navigation/navigation.spec.ts | 2 +- src/elements/overlay/overlay.spec.ts | 8 +- src/elements/popover/popover/popover.spec.ts | 4 +- .../radio-button-panel.spec.ts | 2 +- .../radio-button/radio-button.spec.ts | 2 +- src/elements/select/select.spec.ts | 6 +- .../selection-expansion-panel.spec.ts | 6 +- src/elements/toggle/toggle/toggle.spec.ts | 4 +- 16 files changed, 85 insertions(+), 101 deletions(-) diff --git a/src/elements/accordion/accordion.spec.ts b/src/elements/accordion/accordion.spec.ts index 411866aa4e..043872e4a3 100644 --- a/src/elements/accordion/accordion.spec.ts +++ b/src/elements/accordion/accordion.spec.ts @@ -146,14 +146,14 @@ describe(`sbb-accordion`, () => { expect(panelThree.expanded).to.be.equal(false); headerOne.click(); - await willOpenEventSpy.calledTwice(); + await willOpenEventSpy.calledTimes(2); expect(willOpenEventSpy.count).to.be.equal(2); expect(panelOne.expanded).to.be.equal(true); expect(panelTwo.expanded).to.be.equal(false); expect(panelThree.expanded).to.be.equal(false); headerThree.click(); - await willOpenEventSpy.calledTrice(); + await willOpenEventSpy.calledTimes(3); expect(willOpenEventSpy.count).to.be.equal(3); expect(panelOne.expanded).to.be.equal(false); expect(panelTwo.expanded).to.be.equal(false); @@ -189,14 +189,14 @@ describe(`sbb-accordion`, () => { expect(panelThree.expanded).to.be.equal(false); headerOne.click(); - await willOpenEventSpy.calledTwice(); + await willOpenEventSpy.calledTimes(2); expect(willOpenEventSpy.count).to.be.equal(2); expect(panelOne.expanded).to.be.equal(true); expect(panelTwo.expanded).to.be.equal(true); expect(panelThree.expanded).to.be.equal(false); headerThree.click(); - await willOpenEventSpy.calledTrice(); + await willOpenEventSpy.calledTimes(3); expect(willOpenEventSpy.count).to.be.equal(3); expect(panelOne.expanded).to.be.equal(true); expect(panelTwo.expanded).to.be.equal(true); @@ -229,7 +229,7 @@ describe(`sbb-accordion`, () => { expect(panelTwo.expanded).to.be.equal(true); headerThree.click(); - await willOpenEventSpy.calledTwice(); + await willOpenEventSpy.calledTimes(2); expect(willOpenEventSpy.count).to.be.equal(2); expect(panelThree.expanded).to.be.equal(true); diff --git a/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts b/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts index b78c2ac0c4..1fcea0e664 100644 --- a/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts +++ b/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts @@ -115,32 +115,32 @@ describe(`sbb-autocomplete-grid`, () => { expect(input).to.have.attribute('aria-expanded', 'false'); await sendKeys({ press: 'ArrowDown' }); - await willOpenEventSpy.calledTwice(); + await willOpenEventSpy.calledTimes(2); expect(willOpenEventSpy.count).to.be.equal(2); - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); expect(didOpenEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'true'); await sendKeys({ press: tabKey }); - await willCloseEventSpy.calledTwice(); + await willCloseEventSpy.calledTimes(2); expect(willCloseEventSpy.count).to.be.equal(2); - await didCloseEventSpy.calledTwice(); + await didCloseEventSpy.calledTimes(2); expect(didCloseEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'false'); input.click(); - await willOpenEventSpy.calledTrice(); + await willOpenEventSpy.calledTimes(3); expect(willOpenEventSpy.count).to.be.equal(3); - await didOpenEventSpy.calledTrice(); + await didOpenEventSpy.calledTimes(3); expect(didOpenEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'true'); // Simulate backdrop click sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); - await willCloseEventSpy.calledTrice(); + await willCloseEventSpy.calledTimes(3); expect(willCloseEventSpy.count).to.be.equal(3); - await didCloseEventSpy.calledTrice(); + await didCloseEventSpy.calledTimes(3); expect(didCloseEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'false'); }); @@ -300,7 +300,7 @@ describe(`sbb-autocomplete-grid`, () => { expect(buttonTwo).to.have.attribute('data-focus-visible'); expect(input).to.have.attribute('aria-activedescendant', 'button-2'); await sendKeys({ press: 'Enter' }); - await clickSpy.calledTwice(); + await clickSpy.calledTimes(2); expect(clickSpy.count).to.be.equal(2); }); diff --git a/src/elements/autocomplete/autocomplete.spec.ts b/src/elements/autocomplete/autocomplete.spec.ts index e800dfd8f3..a2b4936aa7 100644 --- a/src/elements/autocomplete/autocomplete.spec.ts +++ b/src/elements/autocomplete/autocomplete.spec.ts @@ -85,32 +85,32 @@ describe(`sbb-autocomplete`, () => { expect(input).to.have.attribute('aria-expanded', 'false'); await sendKeys({ press: 'ArrowDown' }); - await willOpenEventSpy.calledTwice(); + await willOpenEventSpy.calledTimes(2); expect(willOpenEventSpy.count).to.be.equal(2); - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); expect(didOpenEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'true'); await sendKeys({ press: tabKey }); - await willCloseEventSpy.calledTwice(); + await willCloseEventSpy.calledTimes(2); expect(willCloseEventSpy.count).to.be.equal(2); - await didCloseEventSpy.calledTwice(); + await didCloseEventSpy.calledTimes(2); expect(didCloseEventSpy.count).to.be.equal(2); expect(input).to.have.attribute('aria-expanded', 'false'); input.click(); - await willOpenEventSpy.calledTrice(); + await willOpenEventSpy.calledTimes(3); expect(willOpenEventSpy.count).to.be.equal(3); - await didOpenEventSpy.calledTrice(); + await didOpenEventSpy.calledTimes(3); expect(didOpenEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'true'); // Simulate backdrop click sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); - await willCloseEventSpy.calledTrice(); + await willCloseEventSpy.calledTimes(3); expect(willCloseEventSpy.count).to.be.equal(3); - await didCloseEventSpy.calledTrice(); + await didCloseEventSpy.calledTimes(3); expect(didCloseEventSpy.count).to.be.equal(3); expect(input).to.have.attribute('aria-expanded', 'false'); }); diff --git a/src/elements/core/testing/event-spy.ts b/src/elements/core/testing/event-spy.ts index 84a60d2a15..6b98c44acc 100644 --- a/src/elements/core/testing/event-spy.ts +++ b/src/elements/core/testing/event-spy.ts @@ -1,4 +1,5 @@ -type PromiseExecutorHolder = { +type PromiseWithExecutor = { + promise: Promise; resolve: (value: T) => void; reject: (reason?: any) => void; }; @@ -26,19 +27,7 @@ export class EventSpy { return this.events.length ? this.events[this.events.length - 1] : null; } - private _calledOnceExecutor!: PromiseExecutorHolder; - private _calledTwiceExecutor!: PromiseExecutorHolder; - private _calledTriceExecutor!: PromiseExecutorHolder; - - private _calledOnce = new Promise( - (resolve, reject) => (this._calledOnceExecutor = { resolve, reject }), - ); - private _calledTwice = new Promise( - (resolve, reject) => (this._calledTwiceExecutor = { resolve, reject }), - ); - private _calledTrice = new Promise( - (resolve, reject) => (this._calledTriceExecutor = { resolve, reject }), - ); + private _eventMap = new Map>(); public constructor( private _event: string, @@ -52,57 +41,52 @@ export class EventSpy { } public calledOnce(timeout = 1000): Promise { - return this._wrapPromiseWithTimeout( - timeout, - 'calledOnce', - this._calledOnce, - this._calledOnceExecutor, - ); + return this.calledTimes(1, timeout); } - public calledTwice(timeout = 1000): Promise { - return this._wrapPromiseWithTimeout( - timeout, - 'calledTwice', - this._calledTwice, - this._calledTwiceExecutor, - ); - } + public calledTimes(count: number, timeout = 1000): Promise { + if (this.count >= count) { + return Promise.resolve(this.events[count - 1]); + } else if (this._eventMap.has(count)) { + return this._wrapPromiseWithTimeout(this._eventMap.get(count)!, count, timeout); + } else { + let resolve: (value: T) => void; + let reject: (reason?: any) => void; + const promise = new Promise((resolveFunction, rejectFunction) => { + resolve = resolveFunction; + reject = rejectFunction; + }); - public calledTrice(timeout = 1000): Promise { - return this._wrapPromiseWithTimeout( - timeout, - 'calledTrice', - this._calledTrice, - this._calledTriceExecutor, - ); + const promiseWithExecutor = { + promise, + resolve: resolve!, + reject: reject!, + }; + + this._eventMap.set(count, promiseWithExecutor); + + return this._wrapPromiseWithTimeout(promiseWithExecutor, count, timeout); + } } private _wrapPromiseWithTimeout( + promiseWithExecutor: PromiseWithExecutor, + count: number, timeout: number, - name: string, - promise: Promise, - executor: PromiseExecutorHolder, ): Promise { - const clearTimeoutId = setTimeout(() => { - console.trace(); - executor.reject(`awaiting ${name} results in timeout`); - }, timeout); - promise.then(() => clearTimeout(clearTimeoutId)); - return promise; + const clearTimeoutId = setTimeout( + () => promiseWithExecutor.reject(`awaiting calledTimes(${count}) results in timeout`), + timeout, + ); + promiseWithExecutor.promise.then(() => clearTimeout(clearTimeoutId)); + return promiseWithExecutor.promise; } private _listenForEvent(): void { this._target?.addEventListener(this._event, (ev) => { this._events.push(ev as T); this._count++; - if (this._count === 1) { - this._calledOnceExecutor.resolve(ev as T); - } else if (this._count === 2) { - this._calledTwiceExecutor.resolve(ev as T); - } else if (this._count === 3) { - this._calledTriceExecutor.resolve(ev as T); - } + this._eventMap.get(this.count)?.resolve(ev as T); }); } } diff --git a/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts b/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts index 4922f02f23..1043fc5bb5 100644 --- a/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts +++ b/src/elements/datepicker/datepicker-toggle/datepicker-toggle.spec.ts @@ -258,7 +258,7 @@ describe(`sbb-datepicker-toggle`, () => { // Open again datepickerToggle.open(); - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); // Should open with year view again expect(calendar.shadowRoot!.querySelector('.sbb-calendar__table-year-view')!).not.to.be.null; @@ -268,7 +268,7 @@ describe(`sbb-datepicker-toggle`, () => { // Close again await sendKeys({ press: 'Escape' }); - await didCloseEventSpy.calledTwice(); + await didCloseEventSpy.calledTimes(2); // Changing to month view datepickerToggle.view = 'month'; @@ -276,7 +276,7 @@ describe(`sbb-datepicker-toggle`, () => { // Open again datepickerToggle.open(); - await didOpenEventSpy.calledTrice(); + await didOpenEventSpy.calledTimes(3); // Month view should be active and correct year preselected expect(calendar.shadowRoot!.querySelector('.sbb-calendar__table-month-view')!).not.to.be.null; diff --git a/src/elements/datepicker/datepicker/datepicker.spec.ts b/src/elements/datepicker/datepicker/datepicker.spec.ts index d422f530df..fb79348164 100644 --- a/src/elements/datepicker/datepicker/datepicker.spec.ts +++ b/src/elements/datepicker/datepicker/datepicker.spec.ts @@ -167,7 +167,7 @@ describe(`sbb-datepicker`, () => { expect(datePickerUpdatedSpy.count).to.be.equal(1); element.dateFilter = () => false; await waitForLitRender(element); - await datePickerUpdatedSpy.calledTwice(); + await datePickerUpdatedSpy.calledTimes(2); expect(datePickerUpdatedSpy.count).to.be.equal(2); }); diff --git a/src/elements/dialog/dialog/dialog.spec.ts b/src/elements/dialog/dialog/dialog.spec.ts index 878021875a..94c0e7df32 100644 --- a/src/elements/dialog/dialog/dialog.spec.ts +++ b/src/elements/dialog/dialog/dialog.spec.ts @@ -275,11 +275,11 @@ describe('sbb-dialog', () => { stackedDialog.open(); await waitForLitRender(element); - await willOpen.calledTwice(); + await willOpen.calledTimes(2); expect(willOpen.count).to.be.equal(2); await waitForLitRender(element); - await didOpen.calledTwice(); + await didOpen.calledTimes(2); expect(didOpen.count).to.be.equal(2); await waitForLitRender(element); @@ -308,11 +308,11 @@ describe('sbb-dialog', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await willClose.calledTwice(); + await willClose.calledTimes(2); expect(willClose.count).to.be.equal(2); await waitForLitRender(element); - await didClose.calledTwice(); + await didClose.calledTimes(2); expect(didClose.count).to.be.equal(2); await waitForLitRender(element); @@ -344,11 +344,11 @@ describe('sbb-dialog', () => { innerElement.open(); await waitForLitRender(element); - await willOpen.calledTwice(); + await willOpen.calledTimes(2); expect(willOpen.count).to.be.equal(2); await waitForLitRender(element); - await didOpen.calledTwice(); + await didOpen.calledTimes(2); expect(didOpen.count).to.be.equal(2); await waitForLitRender(element); diff --git a/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts b/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts index f37a095a7c..4a38141810 100644 --- a/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts +++ b/src/elements/expansion-panel/expansion-panel/expansion-panel.spec.ts @@ -85,7 +85,7 @@ describe(`sbb-expansion-panel`, () => { expect(didOpenEventSpy.count).to.be.equal(1); header.click(); - await toggleExpandedEventSpy.calledTwice(); + await toggleExpandedEventSpy.calledTimes(2); expect(toggleExpandedEventSpy.count).to.be.equal(2); await waitForLitRender(element); expect(element.expanded).to.be.equal(false); diff --git a/src/elements/navigation/navigation/navigation.spec.ts b/src/elements/navigation/navigation/navigation.spec.ts index 6062f3c1e1..40b2f44152 100644 --- a/src/elements/navigation/navigation/navigation.spec.ts +++ b/src/elements/navigation/navigation/navigation.spec.ts @@ -209,7 +209,7 @@ describe(`sbb-navigation`, () => { element.open(); await waitForLitRender(element); - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); expect(didOpenEventSpy.count).to.be.equal(2); await waitForLitRender(element); diff --git a/src/elements/overlay/overlay.spec.ts b/src/elements/overlay/overlay.spec.ts index 9f2b37439b..1b68c922f7 100644 --- a/src/elements/overlay/overlay.spec.ts +++ b/src/elements/overlay/overlay.spec.ts @@ -202,11 +202,11 @@ describe('sbb-overlay', () => { stackedOverlay.open(); await waitForLitRender(element); - await willOpen.calledTwice(); + await willOpen.calledTimes(2); expect(willOpen.count).to.be.equal(2); await waitForLitRender(element); - await didOpen.calledTwice(); + await didOpen.calledTimes(2); expect(didOpen.count).to.be.equal(2); await waitForLitRender(element); @@ -235,11 +235,11 @@ describe('sbb-overlay', () => { await sendKeys({ press: 'Escape' }); await waitForLitRender(element); - await willClose.calledTwice(); + await willClose.calledTimes(2); expect(willClose.count).to.be.equal(2); await waitForLitRender(element); - await didClose.calledTwice(); + await didClose.calledTimes(2); expect(didClose.count).to.be.equal(2); await waitForLitRender(element); diff --git a/src/elements/popover/popover/popover.spec.ts b/src/elements/popover/popover/popover.spec.ts index ac41c042f3..b4c87586c9 100644 --- a/src/elements/popover/popover/popover.spec.ts +++ b/src/elements/popover/popover/popover.spec.ts @@ -498,10 +498,10 @@ describe(`sbb-popover`, () => { expect(didCloseEventSpy.count).to.be.equal(1); expect(element).to.have.attribute('data-state', 'closed'); - await willOpenEventSpy.calledTwice(); + await willOpenEventSpy.calledTimes(2); expect(willOpenEventSpy.count).to.be.equal(2); - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); expect(didOpenEventSpy.count).to.be.equal(2); expect(secondElement).to.have.attribute('data-state', 'opened'); }); diff --git a/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts b/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts index 25b81d10e6..ab9446623c 100644 --- a/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts +++ b/src/elements/radio-button/radio-button-panel/radio-button-panel.spec.ts @@ -64,7 +64,7 @@ describe(`sbb-radio-button`, () => { element.click(); await waitForLitRender(element); expect(element).not.to.have.attribute('checked'); - await stateChange.calledTwice(); + await stateChange.calledTimes(2); expect(stateChange.count).to.be.equal(2); }); }); diff --git a/src/elements/radio-button/radio-button/radio-button.spec.ts b/src/elements/radio-button/radio-button/radio-button.spec.ts index 8f379261c6..026282240e 100644 --- a/src/elements/radio-button/radio-button/radio-button.spec.ts +++ b/src/elements/radio-button/radio-button/radio-button.spec.ts @@ -81,7 +81,7 @@ describe(`sbb-radio-button`, () => { element.click(); await waitForLitRender(element); expect(element).not.to.have.attribute('checked'); - await stateChange.calledTwice(); + await stateChange.calledTimes(2); expect(stateChange.count).to.be.equal(2); }); diff --git a/src/elements/select/select.spec.ts b/src/elements/select/select.spec.ts index 24bd1e7e8e..fcffce68b5 100644 --- a/src/elements/select/select.spec.ts +++ b/src/elements/select/select.spec.ts @@ -262,12 +262,12 @@ describe(`sbb-select`, () => { focusableElement.focus(); await sendKeys({ press: 'ArrowDown' }); - await didOpen.calledTwice(); + await didOpen.calledTimes(2); expect(didOpen.count).to.be.equal(2); focusableElement.focus(); await sendKeys({ press: tabKey }); - await didClose.calledTwice(); + await didClose.calledTimes(2); expect(didClose.count).to.be.equal(2); focusableElement.focus(); @@ -354,7 +354,7 @@ describe(`sbb-select`, () => { element.focus(); await sendKeys({ press: 'ArrowDown' }); await waitForLitRender(element); - await didOpen.calledTwice(); + await didOpen.calledTimes(2); expect(didOpen.count).to.be.equal(2); expect(secondOption).not.to.have.attribute('data-active'); expect(secondOption).to.have.attribute('selected'); diff --git a/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts b/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts index ab3783cc59..91d85e3590 100644 --- a/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts +++ b/src/elements/selection-expansion-panel/selection-expansion-panel.spec.ts @@ -386,7 +386,7 @@ describe(`sbb-selection-expansion-panel`, () => { // Activate main option 2 mainRadioButton2.click(); - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); await didCloseEventSpy.calledOnce(); const mainRadioButton1LabelSecondRender = (await a11ySnapshot({ @@ -451,7 +451,7 @@ describe(`sbb-selection-expansion-panel`, () => { main2.checked = true; - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); await didCloseEventSpy.calledOnce(); expect(willOpenEventSpy.count).to.be.equal(2); @@ -570,7 +570,7 @@ describe(`sbb-selection-expansion-panel`, () => { secondInput.click(); await waitForLitRender(wrapper); - await didOpenEventSpy.calledTwice(); + await didOpenEventSpy.calledTimes(2); expect(willOpenEventSpy.count).to.be.equal(2); expect(didOpenEventSpy.count).to.be.equal(2); diff --git a/src/elements/toggle/toggle/toggle.spec.ts b/src/elements/toggle/toggle/toggle.spec.ts index c36ae21ea6..9e0033c346 100644 --- a/src/elements/toggle/toggle/toggle.spec.ts +++ b/src/elements/toggle/toggle/toggle.spec.ts @@ -253,8 +253,8 @@ describe(`sbb-toggle`, () => { firstOption.click(); await waitForLitRender(firstOption); - await changeSpy.calledTwice(); - await inputSpy.calledTwice(); + await changeSpy.calledTimes(2); + await inputSpy.calledTimes(2); expect(firstOption).to.have.attribute('checked'); expect(valueInEvent).to.equal('Value one'); From c2e263bf9c78136f57eb772e60b175ce994c8e9b Mon Sep 17 00:00:00 2001 From: Jeremias Peier Date: Mon, 18 Nov 2024 11:30:30 +0100 Subject: [PATCH 4/5] refactor: renemase eventMap --- src/elements/core/testing/event-spy.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/elements/core/testing/event-spy.ts b/src/elements/core/testing/event-spy.ts index 6b98c44acc..d7c8c61c81 100644 --- a/src/elements/core/testing/event-spy.ts +++ b/src/elements/core/testing/event-spy.ts @@ -27,7 +27,7 @@ export class EventSpy { return this.events.length ? this.events[this.events.length - 1] : null; } - private _eventMap = new Map>(); + private _promiseEventMap = new Map>(); public constructor( private _event: string, @@ -47,8 +47,8 @@ export class EventSpy { public calledTimes(count: number, timeout = 1000): Promise { if (this.count >= count) { return Promise.resolve(this.events[count - 1]); - } else if (this._eventMap.has(count)) { - return this._wrapPromiseWithTimeout(this._eventMap.get(count)!, count, timeout); + } else if (this._promiseEventMap.has(count)) { + return this._wrapPromiseWithTimeout(this._promiseEventMap.get(count)!, count, timeout); } else { let resolve: (value: T) => void; let reject: (reason?: any) => void; @@ -63,7 +63,7 @@ export class EventSpy { reject: reject!, }; - this._eventMap.set(count, promiseWithExecutor); + this._promiseEventMap.set(count, promiseWithExecutor); return this._wrapPromiseWithTimeout(promiseWithExecutor, count, timeout); } @@ -86,7 +86,7 @@ export class EventSpy { this._target?.addEventListener(this._event, (ev) => { this._events.push(ev as T); this._count++; - this._eventMap.get(this.count)?.resolve(ev as T); + this._promiseEventMap.get(this.count)?.resolve(ev as T); }); } } From 6ae2524b874deb61e33b2e40b19c9bcab25e9112 Mon Sep 17 00:00:00 2001 From: Jeremias Peier Date: Mon, 18 Nov 2024 11:52:30 +0100 Subject: [PATCH 5/5] fix: review --- .../autocomplete-grid/autocomplete-grid.spec.ts | 2 +- src/elements/autocomplete/autocomplete.spec.ts | 2 +- src/elements/core/testing/event-spy.ts | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts b/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts index 1fcea0e664..b3830f75a1 100644 --- a/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts +++ b/src/elements/autocomplete-grid/autocomplete-grid/autocomplete-grid.spec.ts @@ -136,7 +136,7 @@ describe(`sbb-autocomplete-grid`, () => { expect(input).to.have.attribute('aria-expanded', 'true'); // Simulate backdrop click - sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); + await sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); await willCloseEventSpy.calledTimes(3); expect(willCloseEventSpy.count).to.be.equal(3); diff --git a/src/elements/autocomplete/autocomplete.spec.ts b/src/elements/autocomplete/autocomplete.spec.ts index a2b4936aa7..2dbb837143 100644 --- a/src/elements/autocomplete/autocomplete.spec.ts +++ b/src/elements/autocomplete/autocomplete.spec.ts @@ -106,7 +106,7 @@ describe(`sbb-autocomplete`, () => { expect(input).to.have.attribute('aria-expanded', 'true'); // Simulate backdrop click - sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); + await sendMouse({ type: 'click', position: [formField.offsetWidth + 25, 25] }); await willCloseEventSpy.calledTimes(3); expect(willCloseEventSpy.count).to.be.equal(3); diff --git a/src/elements/core/testing/event-spy.ts b/src/elements/core/testing/event-spy.ts index d7c8c61c81..3544611bab 100644 --- a/src/elements/core/testing/event-spy.ts +++ b/src/elements/core/testing/event-spy.ts @@ -45,10 +45,14 @@ export class EventSpy { } public calledTimes(count: number, timeout = 1000): Promise { - if (this.count >= count) { + if (this.count > count) { + return Promise.reject( + `Event has been emitted more than expected (expected ${count}, actual ${this.count}`, + ); + } else if (this.count === count) { return Promise.resolve(this.events[count - 1]); } else if (this._promiseEventMap.has(count)) { - return this._wrapPromiseWithTimeout(this._promiseEventMap.get(count)!, count, timeout); + return this._promiseEventMap.get(count)!.promise; } else { let resolve: (value: T) => void; let reject: (reason?: any) => void;