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.
Files changed (251) hide show
  1. package/README.md +11 -9
  2. package/design-tokens/dist/sncf-groupe-root-scoped.css +227 -227
  3. package/design-tokens/dist/sncf-groupe.css +227 -227
  4. package/design-tokens/dist/sncf-holding-root-scoped.css +227 -227
  5. package/design-tokens/dist/sncf-holding.css +227 -227
  6. package/design-tokens/dist/sncf-reseau-root-scoped.css +227 -227
  7. package/design-tokens/dist/sncf-reseau.css +227 -227
  8. package/design-tokens/dist/sncf-voyageurs-root-scoped.css +242 -242
  9. package/design-tokens/dist/sncf-voyageurs.css +242 -242
  10. package/dist/cjs/{popper-8d6e7fca.js → popper-1b61df21.js} +10 -17
  11. package/dist/cjs/popper-1b61df21.js.map +1 -0
  12. package/dist/cjs/wcs-breadcrumb.cjs.entry.js +1 -1
  13. package/dist/cjs/wcs-breadcrumb.cjs.entry.js.map +1 -1
  14. package/dist/cjs/wcs-com-nav-item.cjs.entry.js +1 -1
  15. package/dist/cjs/wcs-com-nav-item.cjs.entry.js.map +1 -1
  16. package/dist/cjs/wcs-com-nav.cjs.entry.js +3 -3
  17. package/dist/cjs/wcs-com-nav.cjs.entry.js.map +1 -1
  18. package/dist/cjs/wcs-dropdown.cjs.entry.js +1 -1
  19. package/dist/cjs/wcs-error_3.cjs.entry.js +1 -1
  20. package/dist/cjs/wcs-error_3.cjs.entry.js.map +1 -1
  21. package/dist/cjs/wcs-galactic-menu.cjs.entry.js +1 -1
  22. package/dist/cjs/wcs-grid.cjs.entry.js +5 -4
  23. package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
  24. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js +3 -2
  25. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js.map +1 -1
  26. package/dist/cjs/wcs-modal.cjs.entry.js +2 -2
  27. package/dist/cjs/wcs-modal.cjs.entry.js.map +1 -1
  28. package/dist/cjs/wcs-select_2.cjs.entry.js +59 -24
  29. package/dist/cjs/wcs-select_2.cjs.entry.js.map +1 -1
  30. package/dist/cjs/wcs-tabs.cjs.entry.js +1 -1
  31. package/dist/cjs/wcs-tooltip.cjs.entry.js +1 -1
  32. package/dist/collection/components/accordion/{accordion.e2e.js → accordion.e2e.playwright.js} +51 -55
  33. package/dist/collection/components/accordion/accordion.e2e.playwright.js.map +1 -0
  34. package/dist/collection/components/accordion-panel/accordion-panel.js +1 -1
  35. package/dist/collection/components/alert/alert.e2e.playwright.js +125 -0
  36. package/dist/collection/components/alert/alert.e2e.playwright.js.map +1 -0
  37. package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js +107 -0
  38. package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js.map +1 -0
  39. package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js +188 -0
  40. package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js.map +1 -0
  41. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  42. package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
  43. package/dist/collection/components/button/button.e2e.playwright.js +26 -0
  44. package/dist/collection/components/button/button.e2e.playwright.js.map +1 -0
  45. package/dist/collection/components/button/button.js +1 -1
  46. package/dist/collection/components/checkbox/checkbox.e2e.playwright.js +39 -0
  47. package/dist/collection/components/checkbox/checkbox.e2e.playwright.js.map +1 -0
  48. package/dist/collection/components/checkbox/checkbox.js +1 -1
  49. package/dist/collection/components/chip/chip.e2e.playwright.js +190 -0
  50. package/dist/collection/components/chip/chip.e2e.playwright.js.map +1 -0
  51. package/dist/collection/components/com-nav/com-nav.css +15 -0
  52. package/dist/collection/components/com-nav/{com-nav.e2e.js → com-nav.e2e.playwright.js} +60 -44
  53. package/dist/collection/components/com-nav/com-nav.e2e.playwright.js.map +1 -0
  54. package/dist/collection/components/com-nav/com-nav.js +3 -3
  55. package/dist/collection/components/com-nav/com-nav.js.map +1 -1
  56. package/dist/collection/components/com-nav-category/com-nav-category.js +1 -1
  57. package/dist/collection/components/com-nav-item/com-nav-item.css +2 -2
  58. package/dist/collection/components/com-nav-submenu/com-nav-submenu.js +1 -1
  59. package/dist/collection/components/counter/counter.e2e.playwright.js +187 -0
  60. package/dist/collection/components/counter/counter.e2e.playwright.js.map +1 -0
  61. package/dist/collection/components/counter/counter.js +1 -1
  62. package/dist/collection/components/dropdown/dropdown.e2e.playwright.js +320 -0
  63. package/dist/collection/components/dropdown/dropdown.e2e.playwright.js.map +1 -0
  64. package/dist/collection/components/dropdown/dropdown.js +1 -1
  65. package/dist/collection/components/editable-field/editable-field.e2e.playwright.js +156 -0
  66. package/dist/collection/components/editable-field/editable-field.e2e.playwright.js.map +1 -0
  67. package/dist/collection/components/form-field/form-field.e2e.playwright.js +104 -0
  68. package/dist/collection/components/form-field/form-field.e2e.playwright.js.map +1 -0
  69. package/dist/collection/components/galactic-menu/galactic-menu.js +1 -1
  70. package/dist/collection/components/grid/grid.e2e.playwright.js +153 -0
  71. package/dist/collection/components/grid/grid.e2e.playwright.js.map +1 -0
  72. package/dist/collection/components/grid/grid.js +6 -5
  73. package/dist/collection/components/grid/grid.js.map +1 -1
  74. package/dist/collection/components/grid-column/grid-column.js +1 -1
  75. package/dist/collection/components/grid-pagination/grid-pagination.js +1 -1
  76. package/dist/collection/components/header/header.js +1 -1
  77. package/dist/collection/components/horizontal-stepper/horizontal-step.js +2 -1
  78. package/dist/collection/components/horizontal-stepper/horizontal-step.js.map +1 -1
  79. package/dist/collection/components/horizontal-stepper/horizontal-stepper-interface.js.map +1 -1
  80. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js +5 -1
  81. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js.map +1 -1
  82. package/dist/collection/components/icon/icon.js +1 -1
  83. package/dist/collection/components/input/input.e2e.playwright.js +157 -0
  84. package/dist/collection/components/input/input.e2e.playwright.js.map +1 -0
  85. package/dist/collection/components/input/input.js +2 -2
  86. package/dist/collection/components/label/label.css +4 -6
  87. package/dist/collection/components/label/label.js +1 -1
  88. package/dist/collection/components/mat-icon/mat-icon.js +1 -1
  89. package/dist/collection/components/modal/modal.css +4 -0
  90. package/dist/collection/components/modal/modal.e2e.playwright.js +35 -0
  91. package/dist/collection/components/modal/modal.e2e.playwright.js.map +1 -0
  92. package/dist/collection/components/modal/modal.js +2 -2
  93. package/dist/collection/components/modal/modal.js.map +1 -1
  94. package/dist/collection/components/native-select/native-select.js +1 -1
  95. package/dist/collection/components/nav/nav.js +1 -1
  96. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  97. package/dist/collection/components/progress-radial/progress-radial.js +1 -1
  98. package/dist/collection/components/radio/radio.js +1 -1
  99. package/dist/collection/components/radio-group/radio-group.e2e.playwright.js +231 -0
  100. package/dist/collection/components/radio-group/radio-group.e2e.playwright.js.map +1 -0
  101. package/dist/collection/components/radio-group/radio-group.js +1 -1
  102. package/dist/collection/components/select/select.e2e.playwright.js +1702 -0
  103. package/dist/collection/components/select/select.e2e.playwright.js.map +1 -0
  104. package/dist/collection/components/select/select.js +49 -20
  105. package/dist/collection/components/select/select.js.map +1 -1
  106. package/dist/collection/components/select-option/select-option.js +3 -3
  107. package/dist/collection/components/select-option/select-option.js.map +1 -1
  108. package/dist/collection/components/switch/switch.e2e.playwright.js +40 -0
  109. package/dist/collection/components/switch/switch.e2e.playwright.js.map +1 -0
  110. package/dist/collection/components/switch/switch.js +1 -1
  111. package/dist/collection/components/tabs/tabs.e2e.playwright.js +205 -0
  112. package/dist/collection/components/tabs/tabs.e2e.playwright.js.map +1 -0
  113. package/dist/collection/components/tabs/tabs.js +1 -1
  114. package/dist/collection/components/textarea/textarea.e2e.playwright.js +133 -0
  115. package/dist/collection/components/textarea/textarea.e2e.playwright.js.map +1 -0
  116. package/dist/collection/components/textarea/textarea.js +1 -1
  117. package/dist/collection/utils/playwright/test-expect.js +2 -0
  118. package/dist/collection/utils/playwright/test-expect.js.map +1 -0
  119. package/dist/collection/utils/playwright/test.js +16 -0
  120. package/dist/collection/utils/playwright/test.js.map +1 -0
  121. package/dist/esm/{popper-e491c314.js → popper-ac238961.js} +10 -17
  122. package/dist/esm/popper-ac238961.js.map +1 -0
  123. package/dist/esm/wcs-breadcrumb.entry.js +1 -1
  124. package/dist/esm/wcs-breadcrumb.entry.js.map +1 -1
  125. package/dist/esm/wcs-com-nav-item.entry.js +1 -1
  126. package/dist/esm/wcs-com-nav-item.entry.js.map +1 -1
  127. package/dist/esm/wcs-com-nav.entry.js +3 -3
  128. package/dist/esm/wcs-com-nav.entry.js.map +1 -1
  129. package/dist/esm/wcs-dropdown.entry.js +1 -1
  130. package/dist/esm/wcs-error_3.entry.js +1 -1
  131. package/dist/esm/wcs-error_3.entry.js.map +1 -1
  132. package/dist/esm/wcs-galactic-menu.entry.js +1 -1
  133. package/dist/esm/wcs-grid.entry.js +5 -4
  134. package/dist/esm/wcs-grid.entry.js.map +1 -1
  135. package/dist/esm/wcs-horizontal-stepper.entry.js +3 -2
  136. package/dist/esm/wcs-horizontal-stepper.entry.js.map +1 -1
  137. package/dist/esm/wcs-modal.entry.js +2 -2
  138. package/dist/esm/wcs-modal.entry.js.map +1 -1
  139. package/dist/esm/wcs-select_2.entry.js +59 -24
  140. package/dist/esm/wcs-select_2.entry.js.map +1 -1
  141. package/dist/esm/wcs-tabs.entry.js +1 -1
  142. package/dist/esm/wcs-tooltip.entry.js +1 -1
  143. package/dist/types/components/accordion/accordion.e2e.playwright.d.ts +1 -0
  144. package/dist/types/components/alert/alert.e2e.playwright.d.ts +1 -0
  145. package/dist/types/components/alert-drawer/alert-drawer.e2e.playwright.d.ts +1 -0
  146. package/dist/types/components/breadcrumb/breadcrumb.e2e.playwright.d.ts +1 -0
  147. package/dist/types/components/button/button.e2e.playwright.d.ts +1 -0
  148. package/dist/types/components/checkbox/checkbox.e2e.playwright.d.ts +1 -0
  149. package/dist/types/components/chip/chip.e2e.playwright.d.ts +1 -0
  150. package/dist/types/components/com-nav/com-nav.e2e.playwright.d.ts +1 -0
  151. package/dist/types/components/counter/counter.e2e.playwright.d.ts +1 -0
  152. package/dist/types/components/dropdown/dropdown.e2e.playwright.d.ts +1 -0
  153. package/dist/types/components/editable-field/editable-field.e2e.playwright.d.ts +1 -0
  154. package/dist/types/components/form-field/form-field.e2e.playwright.d.ts +1 -0
  155. package/dist/types/components/grid/grid.e2e.playwright.d.ts +1 -0
  156. package/dist/types/components/horizontal-stepper/horizontal-stepper-interface.d.ts +2 -0
  157. package/dist/types/components/horizontal-stepper/horizontal-stepper.d.ts +4 -0
  158. package/dist/types/components/input/input.e2e.playwright.d.ts +1 -0
  159. package/dist/types/components/modal/modal.e2e.playwright.d.ts +1 -0
  160. package/dist/types/components/radio-group/radio-group.e2e.playwright.d.ts +1 -0
  161. package/dist/types/components/select/select.d.ts +7 -1
  162. package/dist/types/components/select/select.e2e.playwright.d.ts +1 -0
  163. package/dist/types/components/switch/switch.e2e.playwright.d.ts +1 -0
  164. package/dist/types/components/tabs/tabs.e2e.playwright.d.ts +1 -0
  165. package/dist/types/components/textarea/textarea.e2e.playwright.d.ts +1 -0
  166. package/dist/types/components.d.ts +12 -0
  167. package/dist/types/utils/playwright/test-expect.d.ts +33 -0
  168. package/dist/types/utils/playwright/test.d.ts +7 -0
  169. package/dist/wcs/{p-8e9bd0f1.entry.js → p-0326f834.entry.js} +2 -2
  170. package/dist/wcs/{p-8e9bd0f1.entry.js.map → p-0326f834.entry.js.map} +1 -1
  171. package/dist/wcs/p-2221bf0c.entry.js +16 -0
  172. package/dist/wcs/p-2221bf0c.entry.js.map +1 -0
  173. package/dist/wcs/p-4ae08567.entry.js +2 -0
  174. package/dist/wcs/p-4ae08567.entry.js.map +1 -0
  175. package/dist/wcs/p-4e2d6227.entry.js +2 -0
  176. package/dist/wcs/p-4e2d6227.entry.js.map +1 -0
  177. package/dist/wcs/p-8332a7e3.entry.js +2 -0
  178. package/dist/wcs/p-8332a7e3.entry.js.map +1 -0
  179. package/dist/wcs/{p-ec383729.entry.js → p-9b76b8e6.entry.js} +2 -2
  180. package/dist/wcs/{p-ec383729.entry.js.map → p-9b76b8e6.entry.js.map} +1 -1
  181. package/dist/wcs/{p-1f593d06.entry.js → p-abd8d5a0.entry.js} +2 -2
  182. package/dist/wcs/{p-622f7403.entry.js → p-c6f8c45c.entry.js} +2 -2
  183. package/dist/wcs/{p-a94e685c.entry.js → p-db7ba599.entry.js} +2 -2
  184. package/dist/wcs/p-e1fb3625.js +2 -0
  185. package/dist/wcs/p-e1fb3625.js.map +1 -0
  186. package/dist/wcs/{p-a956dc84.entry.js → p-f2f7595e.entry.js} +2 -2
  187. package/dist/wcs/{p-a956dc84.entry.js.map → p-f2f7595e.entry.js.map} +1 -1
  188. package/dist/wcs/p-fbd68522.entry.js +2 -0
  189. package/dist/wcs/p-fbd68522.entry.js.map +1 -0
  190. package/dist/wcs/{p-8c2605fd.entry.js → p-fe303f58.entry.js} +2 -2
  191. package/dist/wcs/wcs.esm.js +1 -1
  192. package/package.json +18 -24
  193. package/dist/cjs/popper-8d6e7fca.js.map +0 -1
  194. package/dist/collection/components/accordion/accordion.e2e.js.map +0 -1
  195. package/dist/collection/components/alert/alert.e2e.js +0 -142
  196. package/dist/collection/components/alert/alert.e2e.js.map +0 -1
  197. package/dist/collection/components/alert-drawer/alert-drawer.e2e.js +0 -111
  198. package/dist/collection/components/alert-drawer/alert-drawer.e2e.js.map +0 -1
  199. package/dist/collection/components/breadcrumb/breadcrumb.e2e.js +0 -223
  200. package/dist/collection/components/breadcrumb/breadcrumb.e2e.js.map +0 -1
  201. package/dist/collection/components/button/button.e2e.js +0 -25
  202. package/dist/collection/components/button/button.e2e.js.map +0 -1
  203. package/dist/collection/components/checkbox/checkbox.e2e.js +0 -45
  204. package/dist/collection/components/checkbox/checkbox.e2e.js.map +0 -1
  205. package/dist/collection/components/chip/chip.e2e.js +0 -209
  206. package/dist/collection/components/chip/chip.e2e.js.map +0 -1
  207. package/dist/collection/components/com-nav/com-nav.e2e.js.map +0 -1
  208. package/dist/collection/components/counter/counter.e2e.js +0 -206
  209. package/dist/collection/components/counter/counter.e2e.js.map +0 -1
  210. package/dist/collection/components/dropdown/dropdown.e2e.js +0 -156
  211. package/dist/collection/components/dropdown/dropdown.e2e.js.map +0 -1
  212. package/dist/collection/components/editable-field/editable-field.e2e.js +0 -176
  213. package/dist/collection/components/editable-field/editable-field.e2e.js.map +0 -1
  214. package/dist/collection/components/form-field/form-field.e2e.js +0 -122
  215. package/dist/collection/components/form-field/form-field.e2e.js.map +0 -1
  216. package/dist/collection/components/grid/grid.e2e.js +0 -147
  217. package/dist/collection/components/grid/grid.e2e.js.map +0 -1
  218. package/dist/collection/components/input/input.e2e.js +0 -152
  219. package/dist/collection/components/input/input.e2e.js.map +0 -1
  220. package/dist/collection/components/modal/modal.e2e.js +0 -36
  221. package/dist/collection/components/modal/modal.e2e.js.map +0 -1
  222. package/dist/collection/components/radio-group/radio-group.e2e.js +0 -239
  223. package/dist/collection/components/radio-group/radio-group.e2e.js.map +0 -1
  224. package/dist/collection/components/select/select.e2e.js +0 -1081
  225. package/dist/collection/components/select/select.e2e.js.map +0 -1
  226. package/dist/collection/components/switch/switch.e2e.js +0 -45
  227. package/dist/collection/components/switch/switch.e2e.js.map +0 -1
  228. package/dist/collection/components/tabs/tabs.e2e.js +0 -207
  229. package/dist/collection/components/tabs/tabs.e2e.js.map +0 -1
  230. package/dist/collection/components/textarea/textarea.e2e.js +0 -132
  231. package/dist/collection/components/textarea/textarea.e2e.js.map +0 -1
  232. package/dist/collection/utils/tests.js +0 -23
  233. package/dist/collection/utils/tests.js.map +0 -1
  234. package/dist/esm/popper-e491c314.js.map +0 -1
  235. package/dist/types/utils/tests.d.ts +0 -4
  236. package/dist/wcs/p-0dd07842.entry.js +0 -2
  237. package/dist/wcs/p-0dd07842.entry.js.map +0 -1
  238. package/dist/wcs/p-0f864e86.js +0 -2
  239. package/dist/wcs/p-0f864e86.js.map +0 -1
  240. package/dist/wcs/p-1244daa0.entry.js +0 -2
  241. package/dist/wcs/p-1244daa0.entry.js.map +0 -1
  242. package/dist/wcs/p-1fbe0328.entry.js +0 -2
  243. package/dist/wcs/p-1fbe0328.entry.js.map +0 -1
  244. package/dist/wcs/p-b94a09b6.entry.js +0 -16
  245. package/dist/wcs/p-b94a09b6.entry.js.map +0 -1
  246. package/dist/wcs/p-fd187bce.entry.js +0 -2
  247. package/dist/wcs/p-fd187bce.entry.js.map +0 -1
  248. /package/dist/wcs/{p-1f593d06.entry.js.map → p-abd8d5a0.entry.js.map} +0 -0
  249. /package/dist/wcs/{p-622f7403.entry.js.map → p-c6f8c45c.entry.js.map} +0 -0
  250. /package/dist/wcs/{p-a94e685c.entry.js.map → p-db7ba599.entry.js.map} +0 -0
  251. /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"]}