wcs-core 7.3.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -9
- package/design-tokens/dist/sncf-groupe-root-scoped.css +227 -227
- package/design-tokens/dist/sncf-groupe.css +227 -227
- package/design-tokens/dist/sncf-holding-root-scoped.css +227 -227
- package/design-tokens/dist/sncf-holding.css +227 -227
- package/design-tokens/dist/sncf-reseau-root-scoped.css +227 -227
- package/design-tokens/dist/sncf-reseau.css +227 -227
- package/design-tokens/dist/sncf-voyageurs-root-scoped.css +242 -242
- package/design-tokens/dist/sncf-voyageurs.css +242 -242
- package/dist/cjs/{popper-8d6e7fca.js → popper-1b61df21.js} +10 -17
- package/dist/cjs/popper-1b61df21.js.map +1 -0
- package/dist/cjs/wcs-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/wcs-breadcrumb.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-com-nav-item.cjs.entry.js +1 -1
- package/dist/cjs/wcs-com-nav-item.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-com-nav.cjs.entry.js +3 -3
- package/dist/cjs/wcs-com-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-dropdown.cjs.entry.js +1 -1
- package/dist/cjs/wcs-error_3.cjs.entry.js +1 -1
- package/dist/cjs/wcs-error_3.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-galactic-menu.cjs.entry.js +1 -1
- package/dist/cjs/wcs-grid.cjs.entry.js +5 -4
- package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js +3 -2
- package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-modal.cjs.entry.js +2 -2
- package/dist/cjs/wcs-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-select_2.cjs.entry.js +59 -24
- package/dist/cjs/wcs-select_2.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-tabs.cjs.entry.js +1 -1
- package/dist/cjs/wcs-tooltip.cjs.entry.js +1 -1
- package/dist/collection/components/accordion/{accordion.e2e.js → accordion.e2e.playwright.js} +51 -55
- package/dist/collection/components/accordion/accordion.e2e.playwright.js.map +1 -0
- package/dist/collection/components/accordion-panel/accordion-panel.js +1 -1
- package/dist/collection/components/alert/alert.e2e.playwright.js +125 -0
- package/dist/collection/components/alert/alert.e2e.playwright.js.map +1 -0
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js +107 -0
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js +188 -0
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
- package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/collection/components/button/button.e2e.playwright.js +26 -0
- package/dist/collection/components/button/button.e2e.playwright.js.map +1 -0
- package/dist/collection/components/button/button.js +1 -1
- package/dist/collection/components/checkbox/checkbox.e2e.playwright.js +39 -0
- package/dist/collection/components/checkbox/checkbox.e2e.playwright.js.map +1 -0
- package/dist/collection/components/checkbox/checkbox.js +1 -1
- package/dist/collection/components/chip/chip.e2e.playwright.js +190 -0
- package/dist/collection/components/chip/chip.e2e.playwright.js.map +1 -0
- package/dist/collection/components/com-nav/com-nav.css +15 -0
- package/dist/collection/components/com-nav/{com-nav.e2e.js → com-nav.e2e.playwright.js} +60 -44
- package/dist/collection/components/com-nav/com-nav.e2e.playwright.js.map +1 -0
- package/dist/collection/components/com-nav/com-nav.js +3 -3
- package/dist/collection/components/com-nav/com-nav.js.map +1 -1
- package/dist/collection/components/com-nav-category/com-nav-category.js +1 -1
- package/dist/collection/components/com-nav-item/com-nav-item.css +2 -2
- package/dist/collection/components/com-nav-submenu/com-nav-submenu.js +1 -1
- package/dist/collection/components/counter/counter.e2e.playwright.js +187 -0
- package/dist/collection/components/counter/counter.e2e.playwright.js.map +1 -0
- package/dist/collection/components/counter/counter.js +1 -1
- package/dist/collection/components/dropdown/dropdown.e2e.playwright.js +320 -0
- package/dist/collection/components/dropdown/dropdown.e2e.playwright.js.map +1 -0
- package/dist/collection/components/dropdown/dropdown.js +1 -1
- package/dist/collection/components/editable-field/editable-field.e2e.playwright.js +156 -0
- package/dist/collection/components/editable-field/editable-field.e2e.playwright.js.map +1 -0
- package/dist/collection/components/form-field/form-field.e2e.playwright.js +104 -0
- package/dist/collection/components/form-field/form-field.e2e.playwright.js.map +1 -0
- package/dist/collection/components/galactic-menu/galactic-menu.js +1 -1
- package/dist/collection/components/grid/grid.e2e.playwright.js +153 -0
- package/dist/collection/components/grid/grid.e2e.playwright.js.map +1 -0
- package/dist/collection/components/grid/grid.js +6 -5
- package/dist/collection/components/grid/grid.js.map +1 -1
- package/dist/collection/components/grid-column/grid-column.js +1 -1
- package/dist/collection/components/grid-pagination/grid-pagination.js +1 -1
- package/dist/collection/components/header/header.js +1 -1
- package/dist/collection/components/horizontal-stepper/horizontal-step.js +2 -1
- package/dist/collection/components/horizontal-stepper/horizontal-step.js.map +1 -1
- package/dist/collection/components/horizontal-stepper/horizontal-stepper-interface.js.map +1 -1
- package/dist/collection/components/horizontal-stepper/horizontal-stepper.js +5 -1
- package/dist/collection/components/horizontal-stepper/horizontal-stepper.js.map +1 -1
- package/dist/collection/components/icon/icon.js +1 -1
- package/dist/collection/components/input/input.e2e.playwright.js +157 -0
- package/dist/collection/components/input/input.e2e.playwright.js.map +1 -0
- package/dist/collection/components/input/input.js +2 -2
- package/dist/collection/components/label/label.css +4 -6
- package/dist/collection/components/label/label.js +1 -1
- package/dist/collection/components/mat-icon/mat-icon.js +1 -1
- package/dist/collection/components/modal/modal.css +4 -0
- package/dist/collection/components/modal/modal.e2e.playwright.js +35 -0
- package/dist/collection/components/modal/modal.e2e.playwright.js.map +1 -0
- package/dist/collection/components/modal/modal.js +2 -2
- package/dist/collection/components/modal/modal.js.map +1 -1
- package/dist/collection/components/native-select/native-select.js +1 -1
- package/dist/collection/components/nav/nav.js +1 -1
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/progress-radial/progress-radial.js +1 -1
- package/dist/collection/components/radio/radio.js +1 -1
- package/dist/collection/components/radio-group/radio-group.e2e.playwright.js +231 -0
- package/dist/collection/components/radio-group/radio-group.e2e.playwright.js.map +1 -0
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/select/select.e2e.playwright.js +1702 -0
- package/dist/collection/components/select/select.e2e.playwright.js.map +1 -0
- package/dist/collection/components/select/select.js +49 -20
- package/dist/collection/components/select/select.js.map +1 -1
- package/dist/collection/components/select-option/select-option.js +3 -3
- package/dist/collection/components/select-option/select-option.js.map +1 -1
- package/dist/collection/components/switch/switch.e2e.playwright.js +40 -0
- package/dist/collection/components/switch/switch.e2e.playwright.js.map +1 -0
- package/dist/collection/components/switch/switch.js +1 -1
- package/dist/collection/components/tabs/tabs.e2e.playwright.js +205 -0
- package/dist/collection/components/tabs/tabs.e2e.playwright.js.map +1 -0
- package/dist/collection/components/tabs/tabs.js +1 -1
- package/dist/collection/components/textarea/textarea.e2e.playwright.js +133 -0
- package/dist/collection/components/textarea/textarea.e2e.playwright.js.map +1 -0
- package/dist/collection/components/textarea/textarea.js +1 -1
- package/dist/collection/utils/playwright/test-expect.js +2 -0
- package/dist/collection/utils/playwright/test-expect.js.map +1 -0
- package/dist/collection/utils/playwright/test.js +16 -0
- package/dist/collection/utils/playwright/test.js.map +1 -0
- package/dist/esm/{popper-e491c314.js → popper-ac238961.js} +10 -17
- package/dist/esm/popper-ac238961.js.map +1 -0
- package/dist/esm/wcs-breadcrumb.entry.js +1 -1
- package/dist/esm/wcs-breadcrumb.entry.js.map +1 -1
- package/dist/esm/wcs-com-nav-item.entry.js +1 -1
- package/dist/esm/wcs-com-nav-item.entry.js.map +1 -1
- package/dist/esm/wcs-com-nav.entry.js +3 -3
- package/dist/esm/wcs-com-nav.entry.js.map +1 -1
- package/dist/esm/wcs-dropdown.entry.js +1 -1
- package/dist/esm/wcs-error_3.entry.js +1 -1
- package/dist/esm/wcs-error_3.entry.js.map +1 -1
- package/dist/esm/wcs-galactic-menu.entry.js +1 -1
- package/dist/esm/wcs-grid.entry.js +5 -4
- package/dist/esm/wcs-grid.entry.js.map +1 -1
- package/dist/esm/wcs-horizontal-stepper.entry.js +3 -2
- package/dist/esm/wcs-horizontal-stepper.entry.js.map +1 -1
- package/dist/esm/wcs-modal.entry.js +2 -2
- package/dist/esm/wcs-modal.entry.js.map +1 -1
- package/dist/esm/wcs-select_2.entry.js +59 -24
- package/dist/esm/wcs-select_2.entry.js.map +1 -1
- package/dist/esm/wcs-tabs.entry.js +1 -1
- package/dist/esm/wcs-tooltip.entry.js +1 -1
- package/dist/types/components/accordion/accordion.e2e.playwright.d.ts +1 -0
- package/dist/types/components/alert/alert.e2e.playwright.d.ts +1 -0
- package/dist/types/components/alert-drawer/alert-drawer.e2e.playwright.d.ts +1 -0
- package/dist/types/components/breadcrumb/breadcrumb.e2e.playwright.d.ts +1 -0
- package/dist/types/components/button/button.e2e.playwright.d.ts +1 -0
- package/dist/types/components/checkbox/checkbox.e2e.playwright.d.ts +1 -0
- package/dist/types/components/chip/chip.e2e.playwright.d.ts +1 -0
- package/dist/types/components/com-nav/com-nav.e2e.playwright.d.ts +1 -0
- package/dist/types/components/counter/counter.e2e.playwright.d.ts +1 -0
- package/dist/types/components/dropdown/dropdown.e2e.playwright.d.ts +1 -0
- package/dist/types/components/editable-field/editable-field.e2e.playwright.d.ts +1 -0
- package/dist/types/components/form-field/form-field.e2e.playwright.d.ts +1 -0
- package/dist/types/components/grid/grid.e2e.playwright.d.ts +1 -0
- package/dist/types/components/horizontal-stepper/horizontal-stepper-interface.d.ts +2 -0
- package/dist/types/components/horizontal-stepper/horizontal-stepper.d.ts +4 -0
- package/dist/types/components/input/input.e2e.playwright.d.ts +1 -0
- package/dist/types/components/modal/modal.e2e.playwright.d.ts +1 -0
- package/dist/types/components/radio-group/radio-group.e2e.playwright.d.ts +1 -0
- package/dist/types/components/select/select.d.ts +7 -1
- package/dist/types/components/select/select.e2e.playwright.d.ts +1 -0
- package/dist/types/components/switch/switch.e2e.playwright.d.ts +1 -0
- package/dist/types/components/tabs/tabs.e2e.playwright.d.ts +1 -0
- package/dist/types/components/textarea/textarea.e2e.playwright.d.ts +1 -0
- package/dist/types/components.d.ts +12 -0
- package/dist/types/utils/playwright/test-expect.d.ts +33 -0
- package/dist/types/utils/playwright/test.d.ts +7 -0
- package/dist/wcs/{p-8e9bd0f1.entry.js → p-0326f834.entry.js} +2 -2
- package/dist/wcs/{p-8e9bd0f1.entry.js.map → p-0326f834.entry.js.map} +1 -1
- package/dist/wcs/p-2221bf0c.entry.js +16 -0
- package/dist/wcs/p-2221bf0c.entry.js.map +1 -0
- package/dist/wcs/p-4ae08567.entry.js +2 -0
- package/dist/wcs/p-4ae08567.entry.js.map +1 -0
- package/dist/wcs/p-4e2d6227.entry.js +2 -0
- package/dist/wcs/p-4e2d6227.entry.js.map +1 -0
- package/dist/wcs/p-8332a7e3.entry.js +2 -0
- package/dist/wcs/p-8332a7e3.entry.js.map +1 -0
- package/dist/wcs/{p-ec383729.entry.js → p-9b76b8e6.entry.js} +2 -2
- package/dist/wcs/{p-ec383729.entry.js.map → p-9b76b8e6.entry.js.map} +1 -1
- package/dist/wcs/{p-1f593d06.entry.js → p-abd8d5a0.entry.js} +2 -2
- package/dist/wcs/{p-622f7403.entry.js → p-c6f8c45c.entry.js} +2 -2
- package/dist/wcs/{p-a94e685c.entry.js → p-db7ba599.entry.js} +2 -2
- package/dist/wcs/p-e1fb3625.js +2 -0
- package/dist/wcs/p-e1fb3625.js.map +1 -0
- package/dist/wcs/{p-a956dc84.entry.js → p-f2f7595e.entry.js} +2 -2
- package/dist/wcs/{p-a956dc84.entry.js.map → p-f2f7595e.entry.js.map} +1 -1
- package/dist/wcs/p-fbd68522.entry.js +2 -0
- package/dist/wcs/p-fbd68522.entry.js.map +1 -0
- package/dist/wcs/{p-8c2605fd.entry.js → p-fe303f58.entry.js} +2 -2
- package/dist/wcs/wcs.esm.js +1 -1
- package/package.json +18 -24
- package/dist/cjs/popper-8d6e7fca.js.map +0 -1
- package/dist/collection/components/accordion/accordion.e2e.js.map +0 -1
- package/dist/collection/components/alert/alert.e2e.js +0 -142
- package/dist/collection/components/alert/alert.e2e.js.map +0 -1
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.js +0 -111
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.js.map +0 -1
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.js +0 -223
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.js.map +0 -1
- package/dist/collection/components/button/button.e2e.js +0 -25
- package/dist/collection/components/button/button.e2e.js.map +0 -1
- package/dist/collection/components/checkbox/checkbox.e2e.js +0 -45
- package/dist/collection/components/checkbox/checkbox.e2e.js.map +0 -1
- package/dist/collection/components/chip/chip.e2e.js +0 -209
- package/dist/collection/components/chip/chip.e2e.js.map +0 -1
- package/dist/collection/components/com-nav/com-nav.e2e.js.map +0 -1
- package/dist/collection/components/counter/counter.e2e.js +0 -206
- package/dist/collection/components/counter/counter.e2e.js.map +0 -1
- package/dist/collection/components/dropdown/dropdown.e2e.js +0 -156
- package/dist/collection/components/dropdown/dropdown.e2e.js.map +0 -1
- package/dist/collection/components/editable-field/editable-field.e2e.js +0 -176
- package/dist/collection/components/editable-field/editable-field.e2e.js.map +0 -1
- package/dist/collection/components/form-field/form-field.e2e.js +0 -122
- package/dist/collection/components/form-field/form-field.e2e.js.map +0 -1
- package/dist/collection/components/grid/grid.e2e.js +0 -147
- package/dist/collection/components/grid/grid.e2e.js.map +0 -1
- package/dist/collection/components/input/input.e2e.js +0 -152
- package/dist/collection/components/input/input.e2e.js.map +0 -1
- package/dist/collection/components/modal/modal.e2e.js +0 -36
- package/dist/collection/components/modal/modal.e2e.js.map +0 -1
- package/dist/collection/components/radio-group/radio-group.e2e.js +0 -239
- package/dist/collection/components/radio-group/radio-group.e2e.js.map +0 -1
- package/dist/collection/components/select/select.e2e.js +0 -1081
- package/dist/collection/components/select/select.e2e.js.map +0 -1
- package/dist/collection/components/switch/switch.e2e.js +0 -45
- package/dist/collection/components/switch/switch.e2e.js.map +0 -1
- package/dist/collection/components/tabs/tabs.e2e.js +0 -207
- package/dist/collection/components/tabs/tabs.e2e.js.map +0 -1
- package/dist/collection/components/textarea/textarea.e2e.js +0 -132
- package/dist/collection/components/textarea/textarea.e2e.js.map +0 -1
- package/dist/collection/utils/tests.js +0 -23
- package/dist/collection/utils/tests.js.map +0 -1
- package/dist/esm/popper-e491c314.js.map +0 -1
- package/dist/types/utils/tests.d.ts +0 -4
- package/dist/wcs/p-0dd07842.entry.js +0 -2
- package/dist/wcs/p-0dd07842.entry.js.map +0 -1
- package/dist/wcs/p-0f864e86.js +0 -2
- package/dist/wcs/p-0f864e86.js.map +0 -1
- package/dist/wcs/p-1244daa0.entry.js +0 -2
- package/dist/wcs/p-1244daa0.entry.js.map +0 -1
- package/dist/wcs/p-1fbe0328.entry.js +0 -2
- package/dist/wcs/p-1fbe0328.entry.js.map +0 -1
- package/dist/wcs/p-b94a09b6.entry.js +0 -16
- package/dist/wcs/p-b94a09b6.entry.js.map +0 -1
- package/dist/wcs/p-fd187bce.entry.js +0 -2
- package/dist/wcs/p-fd187bce.entry.js.map +0 -1
- /package/dist/wcs/{p-1f593d06.entry.js.map → p-abd8d5a0.entry.js.map} +0 -0
- /package/dist/wcs/{p-622f7403.entry.js.map → p-c6f8c45c.entry.js.map} +0 -0
- /package/dist/wcs/{p-a94e685c.entry.js.map → p-db7ba599.entry.js.map} +0 -0
- /package/dist/wcs/{p-8c2605fd.entry.js.map → p-fe303f58.entry.js.map} +0 -0
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
-
import { setWcsContent } from "../../utils/tests";
|
|
3
|
-
describe('Dropdown component', () => {
|
|
4
|
-
let page;
|
|
5
|
-
let dropdown;
|
|
6
|
-
let dropdownButton;
|
|
7
|
-
let items;
|
|
8
|
-
let firstItem;
|
|
9
|
-
let lastItem;
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
// Given
|
|
12
|
-
page = await newE2EPage();
|
|
13
|
-
await setWcsContent(page, `
|
|
14
|
-
<wcs-dropdown mode="plain" shape="normal" size="m">
|
|
15
|
-
<span slot="placeholder">Dropdown</span>
|
|
16
|
-
<wcs-dropdown-item id="first-item">Premier item</wcs-dropdown-item>
|
|
17
|
-
<wcs-dropdown-header>ACTION HEADER</wcs-dropdown-header>
|
|
18
|
-
<wcs-dropdown-item>Second item test avec un long texte</wcs-dropdown-item>
|
|
19
|
-
<wcs-dropdown-item>Dernier item</wcs-dropdown-item>
|
|
20
|
-
<wcs-dropdown-divider></wcs-dropdown-divider>
|
|
21
|
-
<wcs-dropdown-item id="last-item">Dernier item</wcs-dropdown-item>
|
|
22
|
-
</wcs-dropdown>
|
|
23
|
-
`);
|
|
24
|
-
dropdown = await page.find('wcs-dropdown');
|
|
25
|
-
dropdownButton = await page.find('wcs-dropdown >>> #dropdown-button');
|
|
26
|
-
items = await page.findAll('wcs-dropdown-item');
|
|
27
|
-
firstItem = await page.find('wcs-dropdown-item#first-item');
|
|
28
|
-
lastItem = await page.find('wcs-dropdown-item#last-item');
|
|
29
|
-
});
|
|
30
|
-
describe('keyboard interactions', () => {
|
|
31
|
-
it('Enter should open menu and move focus to the first item', async () => {
|
|
32
|
-
// When
|
|
33
|
-
await dropdown.focus();
|
|
34
|
-
await page.keyboard.press('Enter');
|
|
35
|
-
await page.waitForChanges();
|
|
36
|
-
// Then
|
|
37
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');
|
|
38
|
-
const focusedItem = await page.find(':focus');
|
|
39
|
-
expect(focusedItem).toEqual(items[0]);
|
|
40
|
-
});
|
|
41
|
-
it('SPACE should open menu and move focus to the first item', async () => {
|
|
42
|
-
// When
|
|
43
|
-
await dropdown.focus();
|
|
44
|
-
await page.keyboard.press('Space');
|
|
45
|
-
await page.waitForChanges();
|
|
46
|
-
// Then
|
|
47
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');
|
|
48
|
-
const focusedItem = await page.find(':focus');
|
|
49
|
-
expect(focusedItem).toEqual(items[0]);
|
|
50
|
-
});
|
|
51
|
-
it('DOWN_ARROW should open menu and move focus to the first item', async () => {
|
|
52
|
-
// When
|
|
53
|
-
await dropdown.focus();
|
|
54
|
-
await page.keyboard.press('ArrowDown');
|
|
55
|
-
await page.waitForChanges();
|
|
56
|
-
// Then
|
|
57
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');
|
|
58
|
-
const focusedItem = await page.find(':focus');
|
|
59
|
-
expect(focusedItem).toEqual(items[0]);
|
|
60
|
-
});
|
|
61
|
-
it('UP_ARROW should open menu and move focus to the last item', async () => {
|
|
62
|
-
// When
|
|
63
|
-
await dropdown.focus();
|
|
64
|
-
await page.keyboard.press('ArrowUp');
|
|
65
|
-
await page.waitForChanges();
|
|
66
|
-
// Then
|
|
67
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');
|
|
68
|
-
const focusedItem = await page.find(':focus');
|
|
69
|
-
expect(focusedItem).toEqual(items[items.length - 1]);
|
|
70
|
-
});
|
|
71
|
-
it('HOME should focus the first item', async () => {
|
|
72
|
-
// When
|
|
73
|
-
await dropdownButton.click();
|
|
74
|
-
await page.waitForChanges();
|
|
75
|
-
await page.keyboard.press('Home');
|
|
76
|
-
await page.waitForChanges();
|
|
77
|
-
// Then
|
|
78
|
-
const focusedItem = await page.find(':focus');
|
|
79
|
-
expect(focusedItem).toEqual(firstItem);
|
|
80
|
-
});
|
|
81
|
-
it('END should focus the last item', async () => {
|
|
82
|
-
// When
|
|
83
|
-
await dropdownButton.click();
|
|
84
|
-
await page.waitForChanges();
|
|
85
|
-
await page.keyboard.press('End');
|
|
86
|
-
await page.waitForChanges();
|
|
87
|
-
// Then
|
|
88
|
-
const focusedItem = await page.find(':focus');
|
|
89
|
-
expect(focusedItem).toEqual(lastItem);
|
|
90
|
-
});
|
|
91
|
-
it('UP_ARROW should move focus to the previous item', async () => {
|
|
92
|
-
// When
|
|
93
|
-
await dropdownButton.click();
|
|
94
|
-
await page.keyboard.press('ArrowUp');
|
|
95
|
-
await page.waitForChanges();
|
|
96
|
-
// Then
|
|
97
|
-
const focusedItem = await page.find(':focus');
|
|
98
|
-
expect(focusedItem).toEqual(lastItem);
|
|
99
|
-
});
|
|
100
|
-
it('DOWN_ARROW should move focus to the next item', async () => {
|
|
101
|
-
// When
|
|
102
|
-
await dropdownButton.click();
|
|
103
|
-
await page.keyboard.press('ArrowDown');
|
|
104
|
-
await page.waitForChanges();
|
|
105
|
-
// Then
|
|
106
|
-
const focusedItem = await page.find(':focus');
|
|
107
|
-
expect(focusedItem).toEqual(items[1]);
|
|
108
|
-
});
|
|
109
|
-
it('ESCAPE should close the menu and set focus on the dropdown button', async () => {
|
|
110
|
-
// When
|
|
111
|
-
await dropdownButton.click();
|
|
112
|
-
await page.keyboard.press('Escape');
|
|
113
|
-
await page.waitForChanges();
|
|
114
|
-
// Then
|
|
115
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');
|
|
116
|
-
const focusedElement = await page.find(':focus');
|
|
117
|
-
expect(focusedElement).toEqual(dropdown);
|
|
118
|
-
});
|
|
119
|
-
it('TAB should close the menu and set focus on the dropdown button', async () => {
|
|
120
|
-
// When
|
|
121
|
-
await dropdownButton.click();
|
|
122
|
-
await page.keyboard.press('Tab');
|
|
123
|
-
await page.waitForChanges();
|
|
124
|
-
// Then
|
|
125
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');
|
|
126
|
-
const focusedElement = await page.find(':focus');
|
|
127
|
-
expect(focusedElement).toEqual(dropdown);
|
|
128
|
-
});
|
|
129
|
-
it('SHIFT+TAB should close the menu and set focus on the dropdown button', async () => {
|
|
130
|
-
// When
|
|
131
|
-
await dropdownButton.click();
|
|
132
|
-
await page.keyboard.down('Shift');
|
|
133
|
-
await page.keyboard.press('Tab');
|
|
134
|
-
await page.keyboard.up('Shift');
|
|
135
|
-
await page.waitForChanges();
|
|
136
|
-
// Then
|
|
137
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');
|
|
138
|
-
const focusedElement = await page.find(':focus');
|
|
139
|
-
expect(focusedElement).toEqual(dropdown);
|
|
140
|
-
});
|
|
141
|
-
it('ENTER should activate the item, close menu, and set focus on the dropdown button', async () => {
|
|
142
|
-
const itemClickSpy = await dropdown.spyOnEvent('wcsDropdownItemClick');
|
|
143
|
-
// When
|
|
144
|
-
await dropdownButton.click();
|
|
145
|
-
await items[0].focus();
|
|
146
|
-
await page.keyboard.press('Enter');
|
|
147
|
-
await page.waitForChanges();
|
|
148
|
-
// Then
|
|
149
|
-
expect(itemClickSpy).toHaveReceivedEventTimes(1);
|
|
150
|
-
expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');
|
|
151
|
-
const focusedElement = await page.find(':focus');
|
|
152
|
-
expect(focusedElement).toEqual(dropdown);
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
//# sourceMappingURL=dropdown.e2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.e2e.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { newE2EPage } from '@stencil/core/testing';\nimport { setWcsContent } from \"../../utils/tests\";\n\ndescribe('Dropdown component', () => {\n let page;\n let dropdown;\n let dropdownButton;\n let items;\n let firstItem;\n let lastItem;\n\n beforeEach(async () => {\n // Given\n page = await newE2EPage();\n await setWcsContent(page, `\n <wcs-dropdown mode=\"plain\" shape=\"normal\" size=\"m\">\n <span slot=\"placeholder\">Dropdown</span>\n <wcs-dropdown-item id=\"first-item\">Premier item</wcs-dropdown-item>\n <wcs-dropdown-header>ACTION HEADER</wcs-dropdown-header>\n <wcs-dropdown-item>Second item test avec un long texte</wcs-dropdown-item>\n <wcs-dropdown-item>Dernier item</wcs-dropdown-item>\n <wcs-dropdown-divider></wcs-dropdown-divider>\n <wcs-dropdown-item id=\"last-item\">Dernier item</wcs-dropdown-item>\n </wcs-dropdown>\n `);\n dropdown = await page.find('wcs-dropdown');\n dropdownButton = await page.find('wcs-dropdown >>> #dropdown-button');\n items = await page.findAll('wcs-dropdown-item');\n firstItem = await page.find('wcs-dropdown-item#first-item');\n lastItem = await page.find('wcs-dropdown-item#last-item');\n });\n\n describe('keyboard interactions', () => {\n it('Enter should open menu and move focus to the first item', async () => {\n // When\n await dropdown.focus();\n await page.keyboard.press('Enter');\n await page.waitForChanges();\n\n // Then\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(items[0]);\n });\n\n it('SPACE should open menu and move focus to the first item', async () => {\n // When\n await dropdown.focus();\n await page.keyboard.press('Space');\n await page.waitForChanges();\n\n // Then\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(items[0]);\n });\n\n it('DOWN_ARROW should open menu and move focus to the first item', async () => {\n // When\n await dropdown.focus();\n await page.keyboard.press('ArrowDown');\n await page.waitForChanges();\n\n // Then\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(items[0]);\n });\n\n it('UP_ARROW should open menu and move focus to the last item', async () => {\n // When\n await dropdown.focus();\n await page.keyboard.press('ArrowUp');\n await page.waitForChanges();\n\n // Then\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'true');\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(items[items.length - 1]);\n });\n\n it('HOME should focus the first item', async () => {\n // When\n await dropdownButton.click();\n await page.waitForChanges();\n await page.keyboard.press('Home');\n await page.waitForChanges();\n\n // Then\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(firstItem);\n });\n\n it('END should focus the last item', async () => {\n // When\n await dropdownButton.click();\n await page.waitForChanges();\n await page.keyboard.press('End');\n await page.waitForChanges();\n\n // Then\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(lastItem);\n });\n\n it('UP_ARROW should move focus to the previous item', async () => {\n // When\n await dropdownButton.click();\n await page.keyboard.press('ArrowUp');\n await page.waitForChanges();\n\n // Then\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(lastItem);\n });\n\n it('DOWN_ARROW should move focus to the next item', async () => {\n // When\n await dropdownButton.click();\n await page.keyboard.press('ArrowDown');\n await page.waitForChanges();\n\n // Then\n const focusedItem = await page.find(':focus');\n expect(focusedItem).toEqual(items[1]);\n });\n\n it('ESCAPE should close the menu and set focus on the dropdown button', async () => {\n // When\n await dropdownButton.click();\n await page.keyboard.press('Escape');\n await page.waitForChanges();\n\n // Then\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');\n const focusedElement = await page.find(':focus');\n expect(focusedElement).toEqual(dropdown);\n });\n\n it('TAB should close the menu and set focus on the dropdown button', async () => {\n // When\n await dropdownButton.click();\n await page.keyboard.press('Tab');\n await page.waitForChanges();\n\n // Then\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');\n const focusedElement = await page.find(':focus');\n expect(focusedElement).toEqual(dropdown);\n });\n\n it('SHIFT+TAB should close the menu and set focus on the dropdown button', async () => {\n // When\n await dropdownButton.click();\n await page.keyboard.down('Shift');\n await page.keyboard.press('Tab');\n await page.keyboard.up('Shift');\n await page.waitForChanges();\n\n // Then\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');\n const focusedElement = await page.find(':focus');\n expect(focusedElement).toEqual(dropdown);\n });\n\n it('ENTER should activate the item, close menu, and set focus on the dropdown button', async () => {\n const itemClickSpy = await dropdown.spyOnEvent('wcsDropdownItemClick');\n\n // When\n await dropdownButton.click();\n await items[0].focus();\n await page.keyboard.press('Enter');\n await page.waitForChanges();\n\n // Then\n expect(itemClickSpy).toHaveReceivedEventTimes(1);\n expect(dropdownButton).toEqualAttribute('aria-expanded', 'false');\n const focusedElement = await page.find(':focus');\n expect(focusedElement).toEqual(dropdown);\n });\n });\n});\n"]}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
-
describe('wcs-editable-field', () => {
|
|
3
|
-
it('renders with input element and default props', async () => {
|
|
4
|
-
const page = await newE2EPage();
|
|
5
|
-
await page.setContent(`
|
|
6
|
-
<wcs-editable-field label="Test Input" value="Initial value" type="input" id="test">
|
|
7
|
-
<wcs-input></wcs-input>
|
|
8
|
-
</wcs-editable-field>
|
|
9
|
-
`);
|
|
10
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
11
|
-
expect(displayContainer).not.toBeNull();
|
|
12
|
-
expect(displayContainer.textContent).toContain('Initial value');
|
|
13
|
-
const label = await page.find('wcs-editable-field >>> .label');
|
|
14
|
-
expect(label.textContent).toBe('Test Input');
|
|
15
|
-
});
|
|
16
|
-
it('transitions from DISPLAY to EDIT state when clicked', async () => {
|
|
17
|
-
const page = await newE2EPage();
|
|
18
|
-
await page.setContent(`
|
|
19
|
-
<wcs-editable-field label="Test Input" value="Initial value" type="input" id="test">
|
|
20
|
-
<wcs-input></wcs-input>
|
|
21
|
-
</wcs-editable-field>
|
|
22
|
-
`);
|
|
23
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
24
|
-
await displayContainer.click();
|
|
25
|
-
// Wait for state transition
|
|
26
|
-
await page.waitForChanges();
|
|
27
|
-
const editContainer = await page.find('wcs-editable-field >>> .edit-container:not(.display-none)');
|
|
28
|
-
expect(editContainer).not.toBeNull();
|
|
29
|
-
});
|
|
30
|
-
it('properly handles validation', async () => {
|
|
31
|
-
const page = await newE2EPage();
|
|
32
|
-
await page.setContent(`
|
|
33
|
-
<wcs-editable-field id="validate-test" label="Test Validation" value="Valid" error-msg="Value is invalid" type="input">
|
|
34
|
-
<wcs-input></wcs-input>
|
|
35
|
-
</wcs-editable-field>
|
|
36
|
-
`);
|
|
37
|
-
// Set up validation function
|
|
38
|
-
await page.$eval('wcs-editable-field', (el) => {
|
|
39
|
-
el.validateFn = (val) => val === 'Valid';
|
|
40
|
-
});
|
|
41
|
-
// Go to edit mode
|
|
42
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
43
|
-
await displayContainer.click();
|
|
44
|
-
await page.waitForChanges();
|
|
45
|
-
// Input invalid value
|
|
46
|
-
const input = await page.find('wcs-input');
|
|
47
|
-
await input.type('Invalid');
|
|
48
|
-
await page.waitForChanges();
|
|
49
|
-
// Trigger validation (simulate Enter key)
|
|
50
|
-
await input.press('Enter');
|
|
51
|
-
await page.waitForChanges();
|
|
52
|
-
// Check error message is displayed
|
|
53
|
-
const errorElement = await page.find('wcs-editable-field >>> wcs-error');
|
|
54
|
-
expect(errorElement).not.toBeNull();
|
|
55
|
-
expect(errorElement.textContent).toBe('Value is invalid');
|
|
56
|
-
});
|
|
57
|
-
it('emits wcsChange event with correct data', async () => {
|
|
58
|
-
const page = await newE2EPage();
|
|
59
|
-
await page.setContent(`
|
|
60
|
-
<wcs-editable-field label="Test Events" value="Old value" type="input" id="event-test">
|
|
61
|
-
<wcs-input id="test-input"></wcs-input>
|
|
62
|
-
</wcs-editable-field>
|
|
63
|
-
`);
|
|
64
|
-
const changeEvent = await page.spyOnEvent('wcsChange');
|
|
65
|
-
// Go to edit mode
|
|
66
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
67
|
-
await displayContainer.click();
|
|
68
|
-
await page.waitForChanges();
|
|
69
|
-
// Input new value
|
|
70
|
-
const input = await page.find('wcs-input');
|
|
71
|
-
await input.press('Backspace'); // Clear value (backspace is easier than selecting all)
|
|
72
|
-
await input.press('Backspace');
|
|
73
|
-
await input.press('Backspace');
|
|
74
|
-
await input.press('Backspace');
|
|
75
|
-
await input.press('Backspace');
|
|
76
|
-
await input.press('Backspace');
|
|
77
|
-
await input.press('Backspace');
|
|
78
|
-
await input.press('Backspace');
|
|
79
|
-
await input.press('Backspace');
|
|
80
|
-
await input.type('New value');
|
|
81
|
-
await page.waitForChanges();
|
|
82
|
-
// Submit the form
|
|
83
|
-
await input.press('Enter');
|
|
84
|
-
await page.waitForChanges();
|
|
85
|
-
// Note: Functions defined in the event's detail object (successHandler and errorHandler)
|
|
86
|
-
// are not cloned by the DOM's structured clone algorithm.
|
|
87
|
-
// This means that when the event is emitted, these functions will not be present in the
|
|
88
|
-
// event.detail object when accessed in E2E tests, even though they exist in the browser.
|
|
89
|
-
expect(changeEvent).toHaveNthReceivedEventDetail(0, {
|
|
90
|
-
newValue: 'New value'
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
it('respects readonly property', async () => {
|
|
94
|
-
const page = await newE2EPage();
|
|
95
|
-
await page.setContent(`
|
|
96
|
-
<wcs-editable-field label="Read Only Field" value="Readonly value" readonly="true" type="input" id="test">
|
|
97
|
-
<wcs-input></wcs-input>
|
|
98
|
-
</wcs-editable-field>
|
|
99
|
-
`);
|
|
100
|
-
// Check readonly icon is displayed
|
|
101
|
-
const readonlyIcon = await page.find('wcs-editable-field >>> .readonly-icon');
|
|
102
|
-
expect(readonlyIcon).not.toBeNull();
|
|
103
|
-
// Try clicking
|
|
104
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
105
|
-
await displayContainer.click();
|
|
106
|
-
await page.waitForChanges();
|
|
107
|
-
// Should still be in display mode
|
|
108
|
-
const editContainer = await page.find('wcs-editable-field >>> .edit-container:not(.display-none)');
|
|
109
|
-
expect(editContainer).toBeNull();
|
|
110
|
-
});
|
|
111
|
-
it('works correctly with textarea', async () => {
|
|
112
|
-
const page = await newE2EPage();
|
|
113
|
-
await page.setContent(`
|
|
114
|
-
<wcs-editable-field label="Textarea Test" type="textarea" value="Multiline\nText" id="test">
|
|
115
|
-
<wcs-textarea></wcs-textarea>
|
|
116
|
-
</wcs-editable-field>
|
|
117
|
-
`);
|
|
118
|
-
// Check it renders correctly
|
|
119
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
120
|
-
expect(displayContainer.textContent).toContain('Multiline\nText');
|
|
121
|
-
// Go to edit mode
|
|
122
|
-
await displayContainer.click();
|
|
123
|
-
await page.waitForChanges();
|
|
124
|
-
// Should need Ctrl+Enter to submit with textarea
|
|
125
|
-
const textarea = await page.find('wcs-textarea');
|
|
126
|
-
await textarea.press('Enter'); // This should NOT submit
|
|
127
|
-
await page.waitForChanges();
|
|
128
|
-
// Should still be in edit mode
|
|
129
|
-
const editContainerVisible = await page.find('wcs-editable-field >>> .edit-container:not(.display-none)');
|
|
130
|
-
expect(editContainerVisible).not.toBeNull();
|
|
131
|
-
});
|
|
132
|
-
it('works correctly with select', async () => {
|
|
133
|
-
const page = await newE2EPage();
|
|
134
|
-
await page.setContent(`
|
|
135
|
-
<wcs-editable-field label="Select Test" type="select" value="option1" id="test">
|
|
136
|
-
<wcs-select>
|
|
137
|
-
<wcs-select-option value="option1">Option 1</wcs-select-option>
|
|
138
|
-
<wcs-select-option value="option2">Option 2</wcs-select-option>
|
|
139
|
-
</wcs-select>
|
|
140
|
-
</wcs-editable-field>
|
|
141
|
-
`);
|
|
142
|
-
// Go to edit mode
|
|
143
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
144
|
-
await displayContainer.click();
|
|
145
|
-
await page.waitForChanges();
|
|
146
|
-
// We get the select element
|
|
147
|
-
const select = await page.find('wcs-select');
|
|
148
|
-
await select.focus();
|
|
149
|
-
await select.press('ArrowDown');
|
|
150
|
-
// press CTRL + ENTER (combined) to validate
|
|
151
|
-
await page.keyboard.down('Control');
|
|
152
|
-
await page.keyboard.press('Enter');
|
|
153
|
-
await page.keyboard.up('Control');
|
|
154
|
-
await page.waitForChanges();
|
|
155
|
-
// Should be in load state after change
|
|
156
|
-
const loadContainer = await page.find('wcs-editable-field >>> .load-container:not(.display-none)');
|
|
157
|
-
expect(loadContainer).not.toBeNull();
|
|
158
|
-
});
|
|
159
|
-
it('properly handles custom formatting function', async () => {
|
|
160
|
-
const page = await newE2EPage();
|
|
161
|
-
await page.setContent(`
|
|
162
|
-
<wcs-editable-field id="format-test" label="Formatting Test" value="test value" type="input">
|
|
163
|
-
<wcs-input></wcs-input>
|
|
164
|
-
</wcs-editable-field>
|
|
165
|
-
`);
|
|
166
|
-
// Set custom formatter
|
|
167
|
-
await page.$eval('wcs-editable-field', (el) => {
|
|
168
|
-
el.formatFn = (val) => val ? val.toUpperCase() : '';
|
|
169
|
-
});
|
|
170
|
-
await page.waitForChanges();
|
|
171
|
-
// Check formatted output
|
|
172
|
-
const displayContainer = await page.find('wcs-editable-field >>> .display-container');
|
|
173
|
-
expect(displayContainer.textContent).toContain('TEST VALUE');
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
//# sourceMappingURL=editable-field.e2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editable-field.e2e.js","sourceRoot":"","sources":["../../../src/components/editable-field/editable-field.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { newE2EPage } from '@stencil/core/testing';\n\ndescribe('wcs-editable-field', () => {\n it('renders with input element and default props', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field label=\"Test Input\" value=\"Initial value\" type=\"input\" id=\"test\">\n <wcs-input></wcs-input>\n </wcs-editable-field>\n `);\n \n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n expect(displayContainer).not.toBeNull();\n expect(displayContainer.textContent).toContain('Initial value');\n\n const label = await page.find('wcs-editable-field >>> .label');\n expect(label.textContent).toBe('Test Input');\n });\n\n it('transitions from DISPLAY to EDIT state when clicked', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field label=\"Test Input\" value=\"Initial value\" type=\"input\" id=\"test\">\n <wcs-input></wcs-input>\n </wcs-editable-field>\n `);\n \n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n await displayContainer.click();\n \n // Wait for state transition\n await page.waitForChanges();\n \n const editContainer = await page.find('wcs-editable-field >>> .edit-container:not(.display-none)');\n expect(editContainer).not.toBeNull();\n });\n\n it('properly handles validation', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field id=\"validate-test\" label=\"Test Validation\" value=\"Valid\" error-msg=\"Value is invalid\" type=\"input\">\n <wcs-input></wcs-input>\n </wcs-editable-field>\n `);\n \n // Set up validation function\n await page.$eval('wcs-editable-field', (el) => {\n el.validateFn = (val) => val === 'Valid';\n });\n \n // Go to edit mode\n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n await displayContainer.click();\n await page.waitForChanges();\n \n // Input invalid value\n const input = await page.find('wcs-input');\n await input.type('Invalid');\n await page.waitForChanges();\n \n // Trigger validation (simulate Enter key)\n await input.press('Enter');\n await page.waitForChanges();\n \n // Check error message is displayed\n const errorElement = await page.find('wcs-editable-field >>> wcs-error');\n expect(errorElement).not.toBeNull();\n expect(errorElement.textContent).toBe('Value is invalid');\n });\n\n it('emits wcsChange event with correct data', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field label=\"Test Events\" value=\"Old value\" type=\"input\" id=\"event-test\">\n <wcs-input id=\"test-input\"></wcs-input>\n </wcs-editable-field>\n `);\n \n const changeEvent = await page.spyOnEvent('wcsChange');\n \n // Go to edit mode\n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n await displayContainer.click();\n await page.waitForChanges();\n \n // Input new value\n const input = await page.find('wcs-input');\n await input.press('Backspace'); // Clear value (backspace is easier than selecting all)\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.type('New value');\n await page.waitForChanges();\n \n // Submit the form\n await input.press('Enter');\n await page.waitForChanges();\n \n // Note: Functions defined in the event's detail object (successHandler and errorHandler)\n // are not cloned by the DOM's structured clone algorithm.\n // This means that when the event is emitted, these functions will not be present in the\n // event.detail object when accessed in E2E tests, even though they exist in the browser.\n expect(changeEvent).toHaveNthReceivedEventDetail(0, {\n newValue: 'New value'\n });\n });\n\n it('respects readonly property', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field label=\"Read Only Field\" value=\"Readonly value\" readonly=\"true\" type=\"input\" id=\"test\">\n <wcs-input></wcs-input>\n </wcs-editable-field>\n `);\n \n // Check readonly icon is displayed\n const readonlyIcon = await page.find('wcs-editable-field >>> .readonly-icon');\n expect(readonlyIcon).not.toBeNull();\n \n // Try clicking\n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n await displayContainer.click();\n await page.waitForChanges();\n \n // Should still be in display mode\n const editContainer = await page.find('wcs-editable-field >>> .edit-container:not(.display-none)');\n expect(editContainer).toBeNull();\n });\n\n it('works correctly with textarea', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field label=\"Textarea Test\" type=\"textarea\" value=\"Multiline\\nText\" id=\"test\">\n <wcs-textarea></wcs-textarea>\n </wcs-editable-field>\n `);\n \n // Check it renders correctly\n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n expect(displayContainer.textContent).toContain('Multiline\\nText');\n \n // Go to edit mode\n await displayContainer.click();\n await page.waitForChanges();\n \n // Should need Ctrl+Enter to submit with textarea\n const textarea = await page.find('wcs-textarea');\n await textarea.press('Enter'); // This should NOT submit\n await page.waitForChanges();\n \n // Should still be in edit mode\n const editContainerVisible = await page.find('wcs-editable-field >>> .edit-container:not(.display-none)');\n expect(editContainerVisible).not.toBeNull();\n });\n\n it('works correctly with select', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field label=\"Select Test\" type=\"select\" value=\"option1\" id=\"test\">\n <wcs-select>\n <wcs-select-option value=\"option1\">Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n </wcs-select>\n </wcs-editable-field>\n `);\n \n // Go to edit mode\n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n await displayContainer.click();\n await page.waitForChanges();\n \n // We get the select element\n const select = await page.find('wcs-select');\n await select.focus();\n await select.press('ArrowDown');\n \n // press CTRL + ENTER (combined) to validate\n await page.keyboard.down('Control');\n await page.keyboard.press('Enter');\n await page.keyboard.up('Control');\n\n await page.waitForChanges();\n \n // Should be in load state after change\n const loadContainer = await page.find('wcs-editable-field >>> .load-container:not(.display-none)');\n expect(loadContainer).not.toBeNull();\n });\n\n it('properly handles custom formatting function', async () => {\n const page = await newE2EPage();\n await page.setContent(`\n <wcs-editable-field id=\"format-test\" label=\"Formatting Test\" value=\"test value\" type=\"input\">\n <wcs-input></wcs-input>\n </wcs-editable-field>\n `);\n \n // Set custom formatter\n await page.$eval('wcs-editable-field', (el) => {\n el.formatFn = (val) => val ? val.toUpperCase() : '';\n });\n await page.waitForChanges();\n \n // Check formatted output\n const displayContainer = await page.find('wcs-editable-field >>> .display-container');\n expect(displayContainer.textContent).toContain('TEST VALUE');\n });\n});"]}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
-
import { setWcsContent } from "../../utils/tests";
|
|
3
|
-
describe('Form field component', () => {
|
|
4
|
-
describe('Global', () => {
|
|
5
|
-
describe('Accessibility', () => {
|
|
6
|
-
it('Should put form-field label to aria-label of the spied element when non empty', async () => {
|
|
7
|
-
// Given
|
|
8
|
-
const page = await newE2EPage();
|
|
9
|
-
await setWcsContent(page, `
|
|
10
|
-
<wcs-form-field>
|
|
11
|
-
<wcs-label>Label form field</wcs-label>
|
|
12
|
-
<wcs-input/>
|
|
13
|
-
</wcs-form-field>
|
|
14
|
-
`);
|
|
15
|
-
// When
|
|
16
|
-
const input = await page.find('wcs-input >>> input');
|
|
17
|
-
await page.waitForChanges();
|
|
18
|
-
// Then
|
|
19
|
-
const ariaLabel = input.getAttribute('aria-label');
|
|
20
|
-
expect(ariaLabel).toBe('Label form field');
|
|
21
|
-
});
|
|
22
|
-
it('Should not put form-field label to aria-label of the spied element when empty', async () => {
|
|
23
|
-
// Given
|
|
24
|
-
const page = await newE2EPage();
|
|
25
|
-
await setWcsContent(page, `
|
|
26
|
-
<wcs-form-field>
|
|
27
|
-
<wcs-label></wcs-label>
|
|
28
|
-
<wcs-input/>
|
|
29
|
-
</wcs-form-field>
|
|
30
|
-
`);
|
|
31
|
-
// When
|
|
32
|
-
const input = await page.find('wcs-input >>> input');
|
|
33
|
-
await page.waitForChanges();
|
|
34
|
-
// Then
|
|
35
|
-
const ariaLabel = input.getAttribute('aria-label');
|
|
36
|
-
expect(ariaLabel).toBe(null);
|
|
37
|
-
});
|
|
38
|
-
it('Should not concatenate form-field label with form control (switch, checkbox label when form-field label is empty', async () => {
|
|
39
|
-
// Given
|
|
40
|
-
const page = await newE2EPage();
|
|
41
|
-
await setWcsContent(page, `
|
|
42
|
-
<wcs-form-field>
|
|
43
|
-
<wcs-label></wcs-label>
|
|
44
|
-
<wcs-switch>Label switch</wcs-switch>
|
|
45
|
-
</wcs-form-field>
|
|
46
|
-
`);
|
|
47
|
-
// When
|
|
48
|
-
const switchInput = await page.find('wcs-switch >>> input');
|
|
49
|
-
await page.waitForChanges();
|
|
50
|
-
// Then
|
|
51
|
-
const ariaLabel = switchInput.getAttribute('aria-label');
|
|
52
|
-
expect(ariaLabel).toBe('Label switch');
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe('With switch', () => {
|
|
57
|
-
describe('Accessibility', () => {
|
|
58
|
-
it('Should concatenate form-field label with switch label', async () => {
|
|
59
|
-
// Given
|
|
60
|
-
const page = await newE2EPage();
|
|
61
|
-
await setWcsContent(page, `
|
|
62
|
-
<wcs-form-field>
|
|
63
|
-
<wcs-label>Label form field</wcs-label>
|
|
64
|
-
<wcs-switch>Label switch</wcs-switch>
|
|
65
|
-
</wcs-form-field>
|
|
66
|
-
`);
|
|
67
|
-
// When
|
|
68
|
-
const switchInput = await page.find('wcs-switch >>> input');
|
|
69
|
-
await page.waitForChanges();
|
|
70
|
-
// Then
|
|
71
|
-
const ariaLabel = switchInput.getAttribute('aria-label');
|
|
72
|
-
expect(ariaLabel).toBe('Label form field Label switch');
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
describe('With checkbox', () => {
|
|
77
|
-
describe('Accessibility', () => {
|
|
78
|
-
it('Should concatenate form-field label with checkbox label', async () => {
|
|
79
|
-
// Given
|
|
80
|
-
const page = await newE2EPage();
|
|
81
|
-
await setWcsContent(page, `
|
|
82
|
-
<wcs-form-field>
|
|
83
|
-
<wcs-label>Label form field</wcs-label>
|
|
84
|
-
<wcs-checkbox>Label checkbox</wcs-checkbox>
|
|
85
|
-
</wcs-form-field>
|
|
86
|
-
`);
|
|
87
|
-
// When
|
|
88
|
-
const checkboxInput = await page.find('wcs-checkbox >>> input');
|
|
89
|
-
await page.waitForChanges();
|
|
90
|
-
// Then
|
|
91
|
-
const ariaLabel = checkboxInput.getAttribute('aria-label');
|
|
92
|
-
expect(ariaLabel).toBe('Label form field Label checkbox');
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
describe('With radio-group', () => {
|
|
97
|
-
describe('Accessibility', () => {
|
|
98
|
-
it('Should set aria-label on radio-group element', async () => {
|
|
99
|
-
// Given
|
|
100
|
-
const page = await newE2EPage();
|
|
101
|
-
await setWcsContent(page, `
|
|
102
|
-
<wcs-form-field>
|
|
103
|
-
<wcs-label>Label form field</wcs-label>
|
|
104
|
-
<wcs-radio-group>
|
|
105
|
-
<wcs-radio name="SA" label="SNCF" value="1"></wcs-radio>
|
|
106
|
-
<wcs-radio name="SA" label="SNCF Réseau" value="2"></wcs-radio>
|
|
107
|
-
<wcs-radio name="SA" label="SNCF Voyageurs" value="3"></wcs-radio>
|
|
108
|
-
</wcs-radio>
|
|
109
|
-
</wcs-radio-group>
|
|
110
|
-
</wcs-form-field>
|
|
111
|
-
`);
|
|
112
|
-
// When
|
|
113
|
-
const radioGroup = await page.find('wcs-radio-group');
|
|
114
|
-
await page.waitForChanges();
|
|
115
|
-
// Then
|
|
116
|
-
const ariaLabel = radioGroup.getAttribute('aria-label');
|
|
117
|
-
expect(ariaLabel).toBe('Label form field');
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
//# sourceMappingURL=form-field.e2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"form-field.e2e.js","sourceRoot":"","sources":["../../../src/components/form-field/form-field.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { newE2EPage } from '@stencil/core/testing';\nimport { setWcsContent } from \"../../utils/tests\";\n\ndescribe('Form field component', () => {\n describe('Global', () => {\n describe('Accessibility', () => {\n it('Should put form-field label to aria-label of the spied element when non empty', async () => {\n // Given\n const page = await newE2EPage();\n await setWcsContent(page, `\n <wcs-form-field>\n <wcs-label>Label form field</wcs-label>\n <wcs-input/>\n </wcs-form-field>\n `);\n\n // When\n const input = await page.find('wcs-input >>> input');\n await page.waitForChanges();\n\n // Then\n const ariaLabel = input.getAttribute('aria-label');\n expect(ariaLabel).toBe('Label form field');\n });\n it('Should not put form-field label to aria-label of the spied element when empty', async () => {\n // Given\n const page = await newE2EPage();\n await setWcsContent(page, `\n <wcs-form-field>\n <wcs-label></wcs-label>\n <wcs-input/>\n </wcs-form-field>\n `);\n\n // When\n const input = await page.find('wcs-input >>> input');\n await page.waitForChanges();\n\n // Then\n const ariaLabel = input.getAttribute('aria-label');\n expect(ariaLabel).toBe(null);\n });\n it('Should not concatenate form-field label with form control (switch, checkbox label when form-field label is empty', async () => {\n // Given\n const page = await newE2EPage();\n await setWcsContent(page, `\n <wcs-form-field>\n <wcs-label></wcs-label>\n <wcs-switch>Label switch</wcs-switch>\n </wcs-form-field>\n `);\n\n // When\n const switchInput = await page.find('wcs-switch >>> input');\n await page.waitForChanges();\n\n // Then\n const ariaLabel = switchInput.getAttribute('aria-label');\n expect(ariaLabel).toBe('Label switch');\n });\n });\n });\n describe('With switch', () => {\n describe('Accessibility', () => {\n it('Should concatenate form-field label with switch label', async () => {\n // Given\n const page = await newE2EPage();\n await setWcsContent(page, `\n <wcs-form-field>\n <wcs-label>Label form field</wcs-label>\n <wcs-switch>Label switch</wcs-switch>\n </wcs-form-field>\n `);\n\n // When\n const switchInput = await page.find('wcs-switch >>> input');\n await page.waitForChanges();\n\n // Then\n const ariaLabel = switchInput.getAttribute('aria-label');\n expect(ariaLabel).toBe('Label form field Label switch');\n });\n });\n });\n\n describe('With checkbox', () => {\n describe('Accessibility', () => {\n it('Should concatenate form-field label with checkbox label', async () => {\n // Given\n const page = await newE2EPage();\n await setWcsContent(page, `\n <wcs-form-field>\n <wcs-label>Label form field</wcs-label>\n <wcs-checkbox>Label checkbox</wcs-checkbox>\n </wcs-form-field>\n `);\n\n // When\n const checkboxInput = await page.find('wcs-checkbox >>> input');\n await page.waitForChanges();\n\n // Then\n const ariaLabel = checkboxInput.getAttribute('aria-label');\n expect(ariaLabel).toBe('Label form field Label checkbox');\n });\n });\n });\n describe('With radio-group', () => {\n describe('Accessibility', () => {\n it('Should set aria-label on radio-group element', async () => {\n // Given\n const page = await newE2EPage();\n await setWcsContent(page, `\n <wcs-form-field>\n <wcs-label>Label form field</wcs-label>\n <wcs-radio-group>\n <wcs-radio name=\"SA\" label=\"SNCF\" value=\"1\"></wcs-radio>\n <wcs-radio name=\"SA\" label=\"SNCF Réseau\" value=\"2\"></wcs-radio>\n <wcs-radio name=\"SA\" label=\"SNCF Voyageurs\" value=\"3\"></wcs-radio>\n </wcs-radio>\n </wcs-radio-group>\n </wcs-form-field>\n `);\n\n // When\n const radioGroup = await page.find('wcs-radio-group');\n await page.waitForChanges();\n\n // Then\n const ariaLabel = radioGroup.getAttribute('aria-label');\n expect(ariaLabel).toBe('Label form field');\n });\n });\n });\n});\n"]}
|