qc-trousse-sdg 1.4.0-develop.1 → 1.4.1

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 (294) hide show
  1. package/README.md +26 -5
  2. package/dist/css/qc-sdg-design-tokens.min.css +1 -1
  3. package/dist/css/qc-sdg-no-grid.min.css +1 -1
  4. package/dist/css/qc-sdg.min.css +1 -1
  5. package/dist/fonts/open-sans-v43-latin-500.woff2 +0 -0
  6. package/dist/fonts/open-sans-v43-latin-500italic.woff2 +0 -0
  7. package/dist/fonts/open-sans-v43-latin-600.woff2 +0 -0
  8. package/dist/fonts/open-sans-v43-latin-600italic.woff2 +0 -0
  9. package/dist/fonts/open-sans-v43-latin-700.woff2 +0 -0
  10. package/dist/fonts/open-sans-v43-latin-700italic.woff2 +0 -0
  11. package/dist/fonts/open-sans-v43-latin-italic.woff2 +0 -0
  12. package/dist/fonts/open-sans-v43-latin-regular.woff2 +0 -0
  13. package/dist/fonts/roboto-mono-v30-latin-500.woff2 +0 -0
  14. package/dist/fonts/roboto-mono-v30-latin-500italic.woff2 +0 -0
  15. package/dist/fonts/roboto-mono-v30-latin-600.woff2 +0 -0
  16. package/dist/fonts/roboto-mono-v30-latin-600italic.woff2 +0 -0
  17. package/dist/fonts/roboto-mono-v30-latin-700.woff2 +0 -0
  18. package/dist/fonts/roboto-mono-v30-latin-700italic.woff2 +0 -0
  19. package/dist/fonts/roboto-mono-v30-latin-italic.woff2 +0 -0
  20. package/dist/fonts/roboto-mono-v30-latin-regular.woff2 +0 -0
  21. package/dist/fonts/roboto-v48-latin-500.woff2 +0 -0
  22. package/dist/fonts/roboto-v48-latin-500italic.woff2 +0 -0
  23. package/dist/fonts/roboto-v48-latin-600.woff2 +0 -0
  24. package/dist/fonts/roboto-v48-latin-600italic.woff2 +0 -0
  25. package/dist/fonts/roboto-v48-latin-700.woff2 +0 -0
  26. package/dist/fonts/roboto-v48-latin-700italic.woff2 +0 -0
  27. package/dist/fonts/roboto-v48-latin-italic.woff2 +0 -0
  28. package/dist/fonts/roboto-v48-latin-regular.woff2 +0 -0
  29. package/dist/img/icon/adresse.svg +4 -0
  30. package/dist/img/icon/arrow-up.svg +3 -0
  31. package/dist/img/icon/calendar.svg +1 -0
  32. package/dist/img/icon/checkmark.svg +3 -0
  33. package/dist/img/icon/chevron-up-thin.svg +5 -0
  34. package/dist/img/{chevron-white.svg → icon/chevron-up.svg} +1 -1
  35. package/{public/img → dist/img/icon}/clipboard.svg +3 -3
  36. package/dist/img/icon/clock.svg +1 -0
  37. package/dist/img/icon/email.svg +1 -0
  38. package/dist/img/icon/error.svg +1 -0
  39. package/{public/img/exclamation-white.svg → dist/img/icon/exclamation.svg} +2 -2
  40. package/{public/img → dist/img/icon}/external-link.svg +2 -2
  41. package/dist/img/icon/information.svg +1 -0
  42. package/dist/img/icon/ligth-bulb.svg +1 -0
  43. package/{public/img → dist/img/icon}/minus.svg +1 -1
  44. package/dist/img/icon/note.svg +1 -0
  45. package/dist/img/icon/phone.svg +1 -0
  46. package/dist/img/{plus.svg → icon/plus.svg} +1 -1
  47. package/{public/img → dist/img/icon}/question-mark.svg +2 -2
  48. package/dist/img/icon/search-thin.svg +10 -0
  49. package/dist/img/icon/search.svg +1 -0
  50. package/dist/img/icon/success.svg +1 -0
  51. package/dist/img/icon/user.svg +6 -0
  52. package/dist/img/icon/warning.svg +1 -0
  53. package/dist/img/icon/website.svg +1 -0
  54. package/dist/img/icon/xclose.svg +1 -0
  55. package/dist/js/qc-sdg.min.js +1 -1
  56. package/package.json +11 -3
  57. package/playwright.config.ts +79 -0
  58. package/plugins/buildDevDoc.js +36 -0
  59. package/plugins/buildHtmlDoc.js +43 -0
  60. package/plugins/buildTestFixtures.js +37 -0
  61. package/public/css/qc-doc-sdg.css +4 -67
  62. package/public/css/qc-sdg-design-tokens.css +17 -0
  63. package/public/css/qc-sdg-no-grid.css +1991 -1108
  64. package/public/css/qc-sdg.css +1992 -1109
  65. package/public/img/checkmark.svg +3 -0
  66. package/public/img/question.svg +10 -0
  67. package/public/index.html +3104 -1387
  68. package/public/js/qc-doc-sdg.js +40847 -33699
  69. package/public/js/qc-sdg.js +6037 -757
  70. package/rollup.config.js +67 -41
  71. package/scripts/buildImagesMap.js +85 -0
  72. package/scripts/check-release-note.sh +11 -0
  73. package/scripts/compile-doc.sh +4 -0
  74. package/src/doc/_index.html +100 -0
  75. package/src/doc/_nav.html +53 -0
  76. package/src/doc/_test.html +32 -0
  77. package/src/doc/components/Code.svelte +6 -2
  78. package/src/doc/components/TopNav.svelte +8 -9
  79. package/src/doc/components/color-doc.svelte +1 -1
  80. package/src/doc/ejs/layout/index.ejs +129 -0
  81. package/src/doc/qc-doc-sdg.js +1 -2
  82. package/src/doc/scss/components/_code.scss +1 -1
  83. package/src/doc/scss/jQueryUI/_jquery-ui.autocomplete.scss +1 -0
  84. package/src/doc/scss/qc-doc-sdg.scss +1 -1
  85. package/src/doc/scss/settings/_base.scss +4 -0
  86. package/src/sdg/_components.js +9 -2
  87. package/src/sdg/{components → bases}/Icon/Icon.svelte +13 -6
  88. package/src/sdg/bases/Icon/IconDoc.ejs +129 -0
  89. package/src/sdg/{components → bases}/Icon/IconWC.svelte +3 -1
  90. package/src/sdg/bases/Icon/Test/IconEmbeddedTest.html +1 -0
  91. package/src/sdg/bases/Icon/Test/IconEmbeddedTest.svelte +168 -0
  92. package/src/sdg/bases/Icon/Test/iconTest.html +156 -0
  93. package/src/sdg/bases/Icon/_icon.html +254 -0
  94. package/src/sdg/bases/Icon/_icons.scss +47 -0
  95. package/src/sdg/{scss/base → bases/accessibility}/_accessibility.scss +1 -1
  96. package/src/sdg/bases/colors/_colors.html +112 -0
  97. package/src/sdg/bases/figures/_figure.html +16 -0
  98. package/src/sdg/{scss/base → bases/form}/_form.scss +10 -3
  99. package/src/sdg/bases/grid/_grid.html +118 -0
  100. package/src/sdg/bases/headings/_headings.html +18 -0
  101. package/src/sdg/bases/headings/_headings.scss +25 -0
  102. package/src/sdg/{scss/base → bases/layout}/_layout.scss +1 -4
  103. package/src/sdg/bases/links/_links.html +104 -0
  104. package/src/sdg/bases/links/_links.scss +51 -0
  105. package/src/sdg/bases/lists/_lists.html +27 -0
  106. package/src/sdg/bases/separator/_separator.html +7 -0
  107. package/src/sdg/bases/separator/_separator.scss +5 -0
  108. package/src/sdg/bases/shadings/_shadings.html +14 -0
  109. package/src/sdg/{scss/base → bases/shadings}/_shadings.scss +1 -1
  110. package/src/sdg/bases/typography/_font.html +45 -0
  111. package/src/sdg/bases/typography/_fonts.scss +162 -0
  112. package/src/sdg/bases/typography/_paragraph.html +17 -0
  113. package/src/sdg/bases/typography/_paragraph.scss +33 -0
  114. package/src/sdg/components/Alert/Alert.svelte +2 -5
  115. package/src/sdg/components/Alert/AlertWC.svelte +3 -2
  116. package/src/sdg/components/Alert/_alert.html +110 -0
  117. package/src/sdg/{scss/components → components/Alert}/_alert.scss +1 -1
  118. package/src/sdg/components/Button/Button.svelte +50 -0
  119. package/src/sdg/components/Button/ButtonWC.svelte +36 -0
  120. package/src/sdg/components/Button/Test/buttonTest.html +349 -0
  121. package/src/sdg/components/Button/_button.html +186 -0
  122. package/src/sdg/components/Button/_button.scss +202 -0
  123. package/src/sdg/components/CharCount/_charCount.html +7 -0
  124. package/src/sdg/components/Checkbox/Checkbox.svelte +77 -0
  125. package/src/sdg/components/Checkbox/CheckboxWC.svelte +49 -0
  126. package/src/sdg/components/Checkbox/_checkbox.html +86 -0
  127. package/src/sdg/components/Checkbox/_checkbox.scss +70 -0
  128. package/src/sdg/components/Checkbox/updateInput.svelte.js +23 -0
  129. package/src/sdg/components/ChoiceGroup/ChoiceGroup.svelte +56 -0
  130. package/src/sdg/components/ChoiceGroup/ChoiceGroupWC.svelte +47 -0
  131. package/src/sdg/components/ChoiceGroup/Test/ChoiceGroupeEmbededTest.svelte +261 -0
  132. package/src/sdg/components/ChoiceGroup/Test/checkboxEmbeddedTest.html +1 -0
  133. package/src/sdg/components/ChoiceGroup/Test/checkboxTest.html +253 -0
  134. package/src/sdg/components/ChoiceGroup/Test/radiosEmbeddedTest.html +1 -0
  135. package/src/sdg/components/ChoiceGroup/Test/radiosTest.html +185 -0
  136. package/src/sdg/components/ChoiceGroup/ToggleSwitchGroupWC.svelte +56 -0
  137. package/src/sdg/components/ChoiceGroup/_choiceGroup.html +285 -0
  138. package/src/sdg/components/ChoiceGroup/_choiceGroup.scss +32 -0
  139. package/src/sdg/components/ChoiceGroup/_selectionButton.scss +53 -0
  140. package/src/sdg/components/ChoiceGroup/_selectionButtons.html +130 -0
  141. package/src/sdg/components/DropdownList/DropdownList.svelte +394 -0
  142. package/src/sdg/components/DropdownList/DropdownListButton/DropdownListButton.svelte +42 -0
  143. package/src/sdg/components/DropdownList/DropdownListButton/_dropdownListButton.scss +55 -0
  144. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItems.svelte +110 -0
  145. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsMultiple/DropdownListItemsMultiple.svelte +185 -0
  146. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsMultiple/_dropdownListItemsMultiple.scss +19 -0
  147. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsSingle/DropdownListItemsSingle.svelte +136 -0
  148. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsSingle/_dropdownListItemsSingle.scss +11 -0
  149. package/src/sdg/components/DropdownList/DropdownListItems/_dropdownListItems.scss +67 -0
  150. package/src/sdg/components/DropdownList/SelectWC.svelte +158 -0
  151. package/src/sdg/components/DropdownList/Test/DropdownListEmbeddedTest.svelte +89 -0
  152. package/src/sdg/components/DropdownList/Test/dropdownListEmbeddedTest.html +1 -0
  153. package/src/sdg/components/DropdownList/Test/dropdownListTest.html +194 -0
  154. package/src/sdg/components/DropdownList/Test/dropdownListTestUtils.js +113 -0
  155. package/src/sdg/components/DropdownList/_dropdownList.scss +73 -0
  156. package/src/sdg/components/DropdownList/_select.html +212 -0
  157. package/src/sdg/components/ExternalLink/ExternalLink.svelte +1 -1
  158. package/src/sdg/components/Fieldset/Fieldset.svelte +73 -0
  159. package/src/sdg/components/Fieldset/_fieldset.scss +95 -0
  160. package/src/sdg/components/FormError/FormError.svelte +51 -0
  161. package/src/sdg/components/FormError/_formError.scss +21 -0
  162. package/src/sdg/components/FormfieldRow/_formfieldRow.html +108 -0
  163. package/src/sdg/components/IconButton/IconButton.svelte +1 -1
  164. package/src/sdg/components/IconButton/_iconButton.scss +14 -0
  165. package/src/sdg/components/Label/Label.svelte +28 -0
  166. package/src/sdg/components/Label/LabelText.svelte +4 -0
  167. package/src/sdg/components/Label/_label.scss +19 -0
  168. package/src/sdg/components/Notice/Notice.svelte +1 -2
  169. package/src/sdg/components/Notice/NoticeWC.svelte +3 -0
  170. package/src/sdg/components/Notice/_notice.html +141 -0
  171. package/src/sdg/{scss/components → components/Notice}/_notice.scss +1 -1
  172. package/src/sdg/components/PivFooter/PivFooter.svelte +8 -9
  173. package/src/sdg/components/PivFooter/PivFooterWC.svelte +6 -14
  174. package/src/sdg/components/PivFooter/_pivFooter.html +153 -0
  175. package/src/sdg/{scss/components → components/PivFooter}/_pivFooter.scss +1 -1
  176. package/src/sdg/components/PivHeader/PivHeader.svelte +47 -53
  177. package/src/sdg/components/PivHeader/PivHeaderWC.svelte +9 -20
  178. package/src/sdg/components/PivHeader/Test/pivHeaderEmbeddedTest.html +1 -0
  179. package/src/sdg/components/PivHeader/Test/pivHeaderEmbeddedTest.svelte +28 -0
  180. package/src/sdg/components/PivHeader/Test/pivHeaderTest.html +43 -0
  181. package/src/sdg/components/PivHeader/_pivHeader.html +221 -0
  182. package/src/sdg/{scss/components → components/PivHeader}/_pivHeader.scss +55 -77
  183. package/src/sdg/components/RadioButton/_radioButton.html +24 -0
  184. package/src/sdg/components/RadioButton/_radioButton.scss +29 -0
  185. package/src/sdg/components/SearchBar/SearchBar.svelte +12 -32
  186. package/src/sdg/components/SearchBar/_searchBar.html +125 -0
  187. package/src/sdg/{scss/components → components/SearchBar}/_searchBar.scss +3 -3
  188. package/src/sdg/components/SearchInput/SearchInput.svelte +26 -4
  189. package/src/sdg/components/SearchInput/SearchInputWC.svelte +3 -1
  190. package/src/sdg/components/SearchInput/_searchInput.html +85 -0
  191. package/src/sdg/{scss/components → components/SearchInput}/_searchInput.scss +27 -2
  192. package/src/sdg/components/TextField/Doc/TextFieldDemo.svelte +143 -0
  193. package/src/sdg/components/TextField/Test/TextFieldEmbededTest.svelte +129 -0
  194. package/src/sdg/components/TextField/Test/textFieldEmbeddedTest.html +1 -0
  195. package/src/sdg/components/TextField/Test/textFieldTest.html +121 -0
  196. package/src/sdg/components/TextField/TextField.svelte +173 -0
  197. package/src/sdg/components/TextField/TextFieldWC.svelte +90 -0
  198. package/src/sdg/components/TextField/_textField.html +218 -0
  199. package/src/sdg/components/TextField/_textField.scss +110 -0
  200. package/src/sdg/components/TextField/textFieldUtils.js +19 -0
  201. package/src/sdg/components/ToTop/ToTop.svelte +2 -4
  202. package/src/sdg/components/ToTop/_toTop.html +45 -0
  203. package/src/sdg/{scss/components → components/ToTop}/_toTop.scss +2 -2
  204. package/src/sdg/components/ToggleSwitch/Test/ToggleSwitchEmbeddedTest.svelte +46 -0
  205. package/src/sdg/components/ToggleSwitch/Test/toggleSwitchEmbeddedTest.html +1 -0
  206. package/src/sdg/components/ToggleSwitch/Test/toggleSwitchTest.html +34 -0
  207. package/src/sdg/components/ToggleSwitch/ToggleSwitch.svelte +34 -0
  208. package/src/sdg/components/ToggleSwitch/ToggleSwitchWC.svelte +66 -0
  209. package/src/sdg/components/ToggleSwitch/_toggleSwitch.html +160 -0
  210. package/src/sdg/components/ToggleSwitch/_toggleSwitch.scss +97 -0
  211. package/src/sdg/components/utils.js +81 -1
  212. package/src/sdg/qc-sdg-test.js +6 -0
  213. package/src/sdg/scss/lib/_functions.scss +10 -2
  214. package/src/sdg/scss/lib/_mixins.scss +63 -26
  215. package/src/sdg/scss/qc-sdg.scss +1 -1
  216. package/src/sdg/scss/qc-sgd-no-grid.scss +30 -18
  217. package/src/sdg/scss/settings/_base.scss +5 -33
  218. package/src/sdg/scss/settings/_images.scss +30 -0
  219. package/src/sdg/scss/settings/_tokens.scss +23 -0
  220. package/src/sdg/scss/utilities/_display.scss +1 -1
  221. package/src/sdg/scss/utilities/_states.scss +13 -0
  222. package/tests/button.spec.ts +11 -0
  223. package/tests/choice-group.spec.ts +36 -0
  224. package/tests/dropdown-list.spec.ts +529 -0
  225. package/tests/icon.spec.ts +19 -0
  226. package/tests/pivHeader.spec.ts +22 -0
  227. package/tests/textfield-svelte.spec.ts +28 -0
  228. package/tests/textfield.spec.ts +37 -0
  229. package/tests/toggle-switch.spec.ts +20 -0
  230. package/dist/img/arrow-up-white.svg +0 -3
  231. package/dist/img/chevron-blue.svg +0 -3
  232. package/dist/img/clipboard.svg +0 -8
  233. package/dist/img/error-white.svg +0 -1
  234. package/dist/img/error.svg +0 -1
  235. package/dist/img/exclamation-white.svg +0 -37
  236. package/dist/img/external-link-white.svg +0 -18
  237. package/dist/img/external-link.svg +0 -10
  238. package/dist/img/facebook.svg +0 -6
  239. package/dist/img/information-white.svg +0 -1
  240. package/dist/img/information.svg +0 -1
  241. package/dist/img/linkedin.svg +0 -5
  242. package/dist/img/loupe-piv-fonce.svg +0 -1
  243. package/dist/img/minus.svg +0 -6
  244. package/dist/img/qc-sprite.svg +0 -1
  245. package/dist/img/question-mark.svg +0 -47
  246. package/dist/img/success-white.svg +0 -1
  247. package/dist/img/success.svg +0 -1
  248. package/dist/img/twitter.svg +0 -8
  249. package/dist/img/warning.svg +0 -1
  250. package/dist/img/xclose-blue.svg +0 -6
  251. package/dist/img/xclose-white.svg +0 -1
  252. package/dist/img/youtube.svg +0 -3
  253. package/public/img/ampoule.svg +0 -1
  254. package/public/img/arrow-up-white.svg +0 -3
  255. package/public/img/chevron-blue.svg +0 -3
  256. package/public/img/chevron-white.svg +0 -3
  257. package/public/img/error-white.svg +0 -1
  258. package/public/img/error.svg +0 -1
  259. package/public/img/external-link-white.svg +0 -18
  260. package/public/img/facebook.svg +0 -6
  261. package/public/img/information-white.svg +0 -1
  262. package/public/img/information.svg +0 -1
  263. package/public/img/linkedin.svg +0 -5
  264. package/public/img/logo-piv-footer-mess.png +0 -0
  265. package/public/img/loupe-piv-droite.svg +0 -1
  266. package/public/img/loupe-piv-fonce.svg +0 -1
  267. package/public/img/note.svg +0 -1
  268. package/public/img/piv-bas-MCE-theme-clair.png +0 -0
  269. package/public/img/piv-bas-MCE-theme-sombre.png +0 -0
  270. package/public/img/piv-logo-pied-de-page.svg +0 -37
  271. package/public/img/plus.svg +0 -6
  272. package/public/img/qc-sprite.svg +0 -1
  273. package/public/img/quebec-logo.svg +0 -13
  274. package/public/img/success-white.svg +0 -1
  275. package/public/img/success.svg +0 -1
  276. package/public/img/twitter.svg +0 -8
  277. package/public/img/warning.svg +0 -1
  278. package/public/img/xclose-blue.svg +0 -6
  279. package/public/img/xclose-white.svg +0 -1
  280. package/public/img/youtube.svg +0 -3
  281. package/src/doc/scss/components/_button.scss +0 -61
  282. package/src/sdg/components/PivFooter/_defaultCopyright.svelte +0 -11
  283. package/src/sdg/components/PivHeader/_defaultLinks.svelte +0 -24
  284. package/src/sdg/components/QcCustomElement.js +0 -10
  285. package/src/sdg/scss/base/_fonts.scss +0 -29
  286. package/src/sdg/scss/base/_typography.scss +0 -94
  287. package/src/sdg/scss/components/_icons.scss +0 -169
  288. package/src/sdg/scss/components/_separator.scss +0 -5
  289. /package/dist/img/{loupe-piv-droite.svg → piv-search.svg} +0 -0
  290. /package/src/sdg/{scss/base → bases/colors}/_colors.scss +0 -0
  291. /package/src/sdg/{scss/base → bases/figures}/_figure.scss +0 -0
  292. /package/src/sdg/{scss → bases}/grid/_grid-lib.scss +0 -0
  293. /package/src/sdg/{scss → bases}/grid/_grid.scss +0 -0
  294. /package/src/sdg/{scss/base → bases/lists}/_lists.scss +0 -0
@@ -0,0 +1,529 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import path = require('path');
3
+
4
+ test.beforeEach(async ({ page }) => {
5
+ const htmlFilePath = path.resolve(__dirname, '../public/dropdownListBaseline.test.html');
6
+ await page.goto(`file://${htmlFilePath}`);
7
+ });
8
+
9
+ test.describe('Rendu visuel',
10
+ () => {
11
+ test('Select baseline', {
12
+ tag: ['@baseline', '@dropdownlist']
13
+ }, async ({ page }) => {
14
+ await page.locator('#qc-select-single-choice-search-input').click();
15
+ await page.locator('#qc-select-single-choice-search-Option-1-1').focus();
16
+ await page.locator('#qc-select-single-choice-search-Option-2-2').hover();
17
+
18
+ await expect(page).toHaveScreenshot('dropdownList.png', {fullPage: true});
19
+ });
20
+
21
+ test('Select svelte', {
22
+ tag: ['@svelte', '@dropdownlist']
23
+ }, async ({ page }) => {
24
+ const htmlFilePath = path.resolve(__dirname, '../public/dropdownListEmbedded.test.html');
25
+ await page.goto(`file://${htmlFilePath}`);
26
+
27
+ await page.locator('#dropdown-list-single-choice-no-scroll-input').click();
28
+ await page.locator('#dropdown-list-single-choice-no-scroll-Option-1-1').focus();
29
+ await page.locator('#dropdown-list-single-choice-no-scroll-Option-2-2').hover();
30
+
31
+ await expect(page).toHaveScreenshot('dropdownList.png', {fullPage: true});
32
+ });
33
+ });
34
+
35
+ test.describe('navigation au clavier', () => {
36
+ test('Navigation avec Tab', {
37
+ tag: ['@keyboard', '@dropdownlist'],
38
+ annotation: {
39
+ type: 'description',
40
+ description: 'Soit une liste déroulante ouverte, lorsque navigation avec Tab, alors focus placé sur les options suivantes de la liste'
41
+ }
42
+ },
43
+ async ({ page, browserName }) => {
44
+ await page.locator('#qc-select-single-choice-input').click();
45
+
46
+ await page.locator('#qc-select-single-choice-input').press('Tab');
47
+ await expect(
48
+ page.locator('#qc-select-single-choice-items >> li')
49
+ .filter({ has: page.getByText(/^Option 1$/gm) })
50
+ ).toBeFocused();
51
+
52
+ await page.locator('[id="qc-select-single-choice-Option-1-1"]').press('Tab');
53
+ await expect(
54
+ page.locator('#qc-select-single-choice-items >> li')
55
+ .filter({ has: page.getByText(/^Option 2$/gm) })
56
+ ).toBeFocused();
57
+
58
+ await page.locator('[id="qc-select-single-choice-Option-2-2"]').press('Shift+Tab');
59
+ await expect(
60
+ page.locator('#qc-select-single-choice-items >> li')
61
+ .filter({ has: page.getByText(/^Option 1$/gm) })
62
+ ).toBeFocused();
63
+
64
+ await page.locator('[id="qc-select-single-choice-Option-1-1"]').press('Shift+Tab');
65
+
66
+ if (browserName !== 'webkit') {
67
+ await expect(page.locator('#qc-select-single-choice-input')).toBeFocused();
68
+ } else {
69
+ console.log(
70
+ "La vérification du focus se fait incorrectement avec Webkit." +
71
+ " Voir l'issue https://github.com/microsoft/playwright/issues/32269" +
72
+ " et la PR https://github.com/microsoft/playwright/pull/31325"
73
+ );
74
+ }
75
+ });
76
+
77
+ test('Navigation avec flèches', {
78
+ tag: ['@keyboard', '@dropdownlist'],
79
+ annotation: {
80
+ type: 'description',
81
+ description: 'Soit une liste déroulante ouverte, lorsque navigation avec flèches, alors focus placé sur les options suivantes de la liste'
82
+ }
83
+ }, async ({ page }) => {
84
+ await page.locator('#qc-select-single-choice-input').click();
85
+
86
+ await page.locator('#qc-select-single-choice-input').press('ArrowDown');
87
+ await expect(
88
+ page.locator('#qc-select-single-choice-items >> li')
89
+ .filter({ has: page.getByText(/^Option 1$/gm) })
90
+ ).toBeFocused();
91
+
92
+ await page.locator('[id="qc-select-single-choice-Option-1-1"]').press('ArrowDown');
93
+ await expect(
94
+ page.locator('#qc-select-single-choice-items >> li')
95
+ .filter({ has: page.getByText(/^Option 2$/gm) })
96
+ ).toBeFocused();
97
+
98
+ await page.locator('[id="qc-select-single-choice-Option-2-2"]').press('ArrowUp');
99
+ await expect(
100
+ page.locator('#qc-select-single-choice-items >> li')
101
+ .filter({ has: page.getByText(/^Option 1$/gm) })
102
+ ).toBeFocused();
103
+
104
+ await page.locator('[id="qc-select-single-choice-Option-1-1"]').press('ArrowUp');
105
+ await expect(page.locator('#qc-select-single-choice-input')).toBeFocused();
106
+ });
107
+
108
+ test('Navigation vers dernière option avec flèche vers le haut', {
109
+ tag: ['@keyboard', '@dropdownlist'],
110
+ annotation: {
111
+ type: 'description',
112
+ description: 'Soit focus placé sur la liste déroulante de Choix unique et liste ouverte, en tapant flèche vers le haut, alors focus placé sur la dernière option'
113
+ }
114
+ },
115
+ async ({ page }) => {
116
+ await page.locator('#qc-select-single-choice-input').click();
117
+ await page.locator('#qc-select-single-choice-input').press('ArrowUp');
118
+
119
+ await expect(page.locator('[id="qc-select-single-choice-Option-16 désactivée-16"]')).toBeFocused();
120
+ });
121
+
122
+ test('Flèche du bas sur liste déroulante fermée', {
123
+ tag: ['@keyboard', '@dropdownlist'],
124
+ annotation: {
125
+ type: 'description',
126
+ description: 'Soit une option sélectionnée, liste déroulante fermée et focus placé sur l\'input, en tapant flèche du bas, alors le focus est placé sur l\'option sélectionnée'
127
+ }
128
+ }, async ({ page }) => {
129
+ await page.locator('#qc-select-single-choice-input').click();
130
+ await page.locator('[id="qc-select-single-choice-Option-5-5"]').click();
131
+ await page.locator('#qc-select-single-choice-input').press('ArrowDown');
132
+
133
+ await expect(
134
+ page.locator('#qc-select-single-choice-items >> li')
135
+ .filter({ has: page.getByText(/^Option 5$/gm) })
136
+ ).toBeFocused();
137
+ });
138
+
139
+ test('select navigation détaillée', {
140
+ tag: ['@keyboard', '@dropdownlist'],
141
+ }, async ({ page }) => {
142
+ await page.locator('#dropdown-list-restaurants-input').click();
143
+ await page.locator('#dropdown-list-restaurants-search').fill('p');
144
+
145
+ await expect(page.locator('#dropdown-list-restaurants-items')).toMatchAriaSnapshot(`
146
+ - list:
147
+ - option "Types de restaurants" [selected]
148
+ - option "Pizzeria"
149
+ - option "Pâtisserie"
150
+ - option "Boîte à pâtes"
151
+ - status
152
+ `);
153
+
154
+ await page.locator('#dropdown-list-restaurants-items').getByText('Pâtisserie').click();
155
+ await page.locator('#dropdown-list-restaurants-items').getByText('Pâtisserie').press('Escape');
156
+ await page.locator('#dropdown-list-restaurants-input').click();
157
+
158
+ await page.locator('#dropdown-list-restaurants-search').click();
159
+ await page.locator('#dropdown-list-restaurants-search').fill('st');
160
+
161
+ await expect(page.locator('#dropdown-list-restaurants-items')).toMatchAriaSnapshot(`
162
+ - list:
163
+ - option "Types de restaurants"
164
+ - option "Steakhouse"
165
+ - option "Restaurant à burgers"
166
+ - status
167
+ `);
168
+
169
+ await page.locator('#dropdown-list-restaurants-items').getByText('Steakhouse').click();
170
+
171
+ await expect(page.locator('#dropdown-list-restaurants-input')).toContainText('Steakhouse');
172
+ });
173
+ });
174
+
175
+ test.describe('Interactions sélection unique', () => {
176
+ test('Clic sur libellé', {
177
+ tag: ['@single', '@dropdownlist'],
178
+ annotation: {
179
+ type: 'description',
180
+ description: 'En cliquant sur un libellé, alors le liste est en focus'
181
+ }
182
+ },
183
+ async ({ page }) => {
184
+ await page.locator('#qc-select-single-choice-label').click();
185
+
186
+ await expect(page.locator('#qc-select-single-choice-input')).toBeFocused();
187
+ });
188
+
189
+ test('Clic sur input', {
190
+ tag: ['@single', '@dropdownlist'],
191
+ annotation: {
192
+ type: 'description',
193
+ description: 'En cliquant sur la liste déroulante, alors la popup s\'affiche'
194
+ }
195
+ }, async ({ page }) => {
196
+ await page.locator('#qc-select-single-choice-input').click();
197
+
198
+ await expect(page.locator('#qc-select-single-choice-popup')).toBeVisible();
199
+ await expect(page.locator('#qc-select-single-choice-input')).toHaveAttribute('aria-expanded', 'true');
200
+ });
201
+
202
+ test('Clic extérieur', {
203
+ tag: ['@single', '@dropdownlist'],
204
+ annotation: {
205
+ type: 'description',
206
+ description: 'Soit une liste déroulante ouverte, en cliquant à l\'extérieur de la liste, alors la popup se ferme'
207
+ }
208
+ }, async ({ page }) => {
209
+ await page.locator('#qc-select-single-choice-input').click();
210
+ await page.locator('div').filter({ hasText: 'Option 1 Option 2 Option 3' }).first().click();
211
+
212
+ await expect(page.locator('#qc-select-single-choice-popup')).toBeHidden();
213
+ await expect(page.locator('#qc-select-single-choice-input')).toHaveAttribute('aria-expanded', 'false');
214
+ });
215
+
216
+ test('Sélection option désactivée', {
217
+ tag: ['@single', '@dropdownlist'],
218
+ annotation: {
219
+ type: 'description',
220
+ description: 'En sélectionnant une option désactivée, alors rien ne se passe'
221
+ }
222
+ }, async ({ page }) => {
223
+ await page.locator('#qc-select-single-choice-input').click();
224
+ await page.locator('[id="qc-select-single-choice-Option-16 désactivée-16"]').click();
225
+
226
+ await expect(page.locator('#qc-select-single-choice-popup')).toBeVisible();
227
+ });
228
+
229
+ test('Sélection choix unique', {
230
+ tag: ['@single', '@dropdownlist'],
231
+ annotation: {
232
+ type: 'description',
233
+ description: 'En sélectionnant une option activée, alors referme la popup et affiche la nouvelle option sélectionnée'
234
+ }
235
+ }, async ({ page }) => {
236
+ await page.locator('#qc-select-single-choice-input').click();
237
+ await page.locator('[id="qc-select-single-choice-Option-5-5"]').click();
238
+
239
+ await expect(page.locator('#qc-select-single-choice-popup')).toBeHidden();
240
+ await expect(page.locator('#qc-select-single-choice-input')).toContainText('Option 5');
241
+ await expect(page.locator('#qc-select-single-choice-input')).toHaveAttribute('aria-expanded', 'false');
242
+ });
243
+
244
+ test('Sélection choix unique avec Entrée', {
245
+ tag: ['@single', '@dropdownlist'],
246
+ annotation: {
247
+ type: 'description',
248
+ description: 'En sélectionnant une option activée au clavier, alors referme la popup et affiche la nouvelle option sélectionnée'
249
+ }
250
+ }, async ({ page }) => {
251
+ await page.locator('#qc-select-single-choice-input').click();
252
+ await page.locator('#qc-select-single-choice-input').press('ArrowDown');
253
+ await page.locator('#qc-select-single-choice-items >> li')
254
+ .filter({ has: page.getByText(/^Option 1$/gm) })
255
+ .press('ArrowDown');
256
+ await page.locator('#qc-select-single-choice-items >> li')
257
+ .filter({ has: page.getByText(/^Option 2$/gm) })
258
+ .press('ArrowDown');
259
+ await page.locator('#qc-select-single-choice-items >> li')
260
+ .filter({ has: page.getByText(/^Option 3$/gm) })
261
+ .press('ArrowDown');
262
+ await page.locator('#qc-select-single-choice-items >> li')
263
+ .filter({ has: page.getByText(/^Option 4$/gm) })
264
+ .press('ArrowDown');
265
+ await page.locator('#qc-select-single-choice-items >> li')
266
+ .filter({ has: page.getByText(/^Option 5$/gm) })
267
+ .press('Enter');
268
+
269
+ await expect(page.locator('#qc-select-single-choice-popup')).toBeHidden();
270
+ await expect(page.locator('#qc-select-single-choice-input')).toContainText('Option 5');
271
+ await expect(page.locator('#qc-select-single-choice-input')).toHaveAttribute('aria-expanded', 'false');
272
+ });
273
+
274
+ test('Sélection choix unique avec Espace', {
275
+ tag: ['@single', '@dropdownlist'],
276
+ annotation: {
277
+ type: 'description',
278
+ description: 'En sélectionnant une option activée avec Espace, alors referme la popup et affiche la nouvelle option sélectionnée'
279
+ }
280
+ }, async ({ page }) => {
281
+ await page.locator('#qc-select-single-choice-input').click();
282
+ await page.locator('#qc-select-single-choice-input').press('ArrowDown');
283
+ await page.locator('#qc-select-single-choice-items >> li')
284
+ .filter({ has: page.getByText(/^Option 1$/gm) })
285
+ .press('ArrowDown');
286
+ await page.locator('#qc-select-single-choice-items >> li')
287
+ .filter({ has: page.getByText(/^Option 2$/gm) })
288
+ .press('ArrowDown');
289
+ await page.locator('#qc-select-single-choice-items >> li')
290
+ .filter({ has: page.getByText(/^Option 3$/gm) })
291
+ .press('ArrowDown');
292
+ await page.locator('#qc-select-single-choice-items >> li')
293
+ .filter({ has: page.getByText(/^Option 4$/gm) })
294
+ .press('ArrowDown');
295
+ await page.locator('#qc-select-single-choice-items >> li')
296
+ .filter({ has: page.getByText(/^Option 5$/gm) })
297
+ .press(' ');
298
+
299
+ await expect(page.locator('#qc-select-single-choice-popup')).toBeHidden();
300
+ await expect(page.locator('#qc-select-single-choice-input')).toContainText('Option 5');
301
+ await expect(page.locator('#qc-select-single-choice-input')).toHaveAttribute('aria-expanded', 'false');
302
+ });
303
+ }
304
+ );
305
+
306
+ test.describe('recherche', () => {
307
+ test('Test de recherche avec champ de recherche', {
308
+ tag: ['@search', '@dropdownlist'],
309
+ annotation: {
310
+ type: 'description',
311
+ description: 'Soit liste déroulante avec champ de recherche est ouverte, en tapant un caractère imprimable, alors ajoute le texte à la recherche'
312
+ }
313
+ }, async ({ page, browserName }) => {
314
+ await page.locator('#qc-select-single-choice-search-input').click();
315
+ await page.getByRole('searchbox', { name: 'Rechercher...' }).fill('12');
316
+
317
+ await expect(page.locator('#qc-select-single-choice-search-search')).toHaveValue('12');
318
+ await expect(page.locator('#qc-select-single-choice-search-items')).toMatchAriaSnapshot(`
319
+ - list:
320
+ - option "Option 12"
321
+ - status
322
+ `);
323
+
324
+ await page.getByRole('searchbox', { name: 'Rechercher...' }).press('Tab');
325
+ if (browserName !== "webkit") {
326
+ await expect(page.getByRole('button', { name: 'Effacer le texte' })).toBeFocused();
327
+ } else {
328
+ console.log(
329
+ "La vérification du focus se fait incorrectement avec Webkit." +
330
+ " Voir l'issue https://github.com/microsoft/playwright/issues/32269" +
331
+ " et la PR https://github.com/microsoft/playwright/pull/31325"
332
+ );
333
+ }
334
+
335
+ await page.getByRole('button', { name: 'Effacer le texte' }).click();
336
+
337
+ await expect(page.locator('#qc-select-single-choice-search-search')).toHaveValue('');
338
+ await expect(page.locator('#qc-select-single-choice-search-items')).toMatchAriaSnapshot(`
339
+ - list:
340
+ - option "Option 1"
341
+ - option "Option 2"
342
+ - option "Option 3"
343
+ - option "Option 4"
344
+ - option "Option 5"
345
+ - option "Option 6"
346
+ - option "Option 7"
347
+ - option "Option 8"
348
+ - option "Option 9"
349
+ - option "Option 10"
350
+ - option "Option 11"
351
+ - option "Option 12"
352
+ - option "Option 13"
353
+ - option "Option 14"
354
+ - option "Option 15"
355
+ - option "Option 16"
356
+ - status
357
+ `);
358
+
359
+ await page.getByRole('searchbox', { name: 'Rechercher...' }).fill('12');
360
+ await page.locator('#qc-select-single-choice-search-input').click();
361
+ await page.locator('#qc-select-single-choice-search-input').click();
362
+ await expect(page.locator('#qc-select-single-choice-search-search')).toHaveValue('');
363
+ await expect(page.locator('#qc-select-single-choice-search-items')).toMatchAriaSnapshot(`
364
+ - list:
365
+ - option "Option 1"
366
+ - option "Option 2"
367
+ - option "Option 3"
368
+ - option "Option 4"
369
+ - option "Option 5"
370
+ - option "Option 6"
371
+ - option "Option 7"
372
+ - option "Option 8"
373
+ - option "Option 9"
374
+ - option "Option 10"
375
+ - option "Option 11"
376
+ - option "Option 12"
377
+ - option "Option 13"
378
+ - option "Option 14"
379
+ - option "Option 15"
380
+ - option "Option 16"
381
+ - status
382
+ `);
383
+ });
384
+
385
+ test('Test de recherche sans champ de recherche', {
386
+ tag: ['@search', '@dropdownlist'],
387
+ annotation: {
388
+ type: 'description',
389
+ description: 'Soit liste déroulante sans champ de recherche, en tapant un caractère imprimable, alors focus sur le premier élément correspondant'
390
+ }
391
+ }, async ({ page }) => {
392
+ await page.locator('#qc-select-single-choice-input').click();
393
+ await page.locator('#qc-select-single-choice-input').press('1');
394
+ await page.locator('#qc-select-single-choice-items >> li')
395
+ .filter({ has: page.getByText(/^Option 1$/gm) })
396
+ .press('2');
397
+
398
+ await expect(
399
+ page.locator('#qc-select-single-choice-items >> li')
400
+ .filter({ has: page.getByText(/^Option 12$/gm) })
401
+ ).toBeFocused();
402
+
403
+ await page.locator('#qc-select-single-choice-input').click({clickCount: 2});
404
+ await page.locator('#qc-select-single-choice-input').press('1');
405
+ await page.locator('#qc-select-single-choice-items >> li')
406
+ .filter({ has: page.getByText(/^Option 1$/gm) })
407
+ .press('2');
408
+
409
+ await expect(
410
+ page.locator('#qc-select-single-choice-items >> li')
411
+ .filter({ has: page.getByText(/^Option 12$/gm) })
412
+ ).toBeFocused();
413
+ });
414
+ });
415
+
416
+ test.describe('choix multiples', () => {
417
+ test('popup choix multiples', {
418
+ tag: ['@multiple', '@dropdownlist'],
419
+ annotation: {
420
+ type: 'description',
421
+ description: 'Soit la liste déroulante Choix multiples, en cliquant sur Option 3 et Option 4, alors la popup reste ouverte'
422
+ }
423
+ }, async ({ page }) => {
424
+ await page.locator('#qc-select-multiple-choices-input').click();
425
+ await page.locator('#qc-select-multiple-choices-items').getByText('Option 3').click();
426
+
427
+ await expect(page.locator('#qc-select-multiple-choices-popup')).toBeVisible();
428
+
429
+ await page.locator('#qc-select-multiple-choices-items').getByText('Option 4').click();
430
+
431
+ await expect(page.locator('#qc-select-multiple-choices-popup')).toBeVisible();
432
+ });
433
+
434
+ test('choix multiple sélection', {
435
+ tag: ['@multiple', '@dropdownlist'],
436
+ annotation: {
437
+ type: 'description',
438
+ description: 'Soit la liste déroulante Choix multiples, en cliquant sur Option 3 et Option 4, alors les 2 options sont listées'
439
+ }
440
+ }, async ({ page }) => {
441
+ await page.locator('#qc-select-multiple-choices-input').click();
442
+ await page.locator('#qc-select-multiple-choices-items').getByText('Option 3').click();
443
+ await page.locator('#qc-select-multiple-choices-items').getByText('Option 4').click();
444
+
445
+ await expect(page.locator('#qc-select-multiple-choices-input')).toContainText('Option 3, Option 4');
446
+ });
447
+
448
+ test('choix multiples 2 clics par option', {
449
+ tag: ['@multiple', '@dropdownlist'],
450
+ annotation: {
451
+ type: 'description',
452
+ description: 'En sélectionnant une option de Choix multiples et en la désélectionnant, alors aucune option n\'est listée'
453
+ }
454
+ }, async ({ page }) => {
455
+ await page.locator('#qc-select-multiple-choices-input').click();
456
+ await page.getByRole('listitem').filter({ hasText: 'Option 2' }).locator('label').click();
457
+ await page.getByRole('listitem').filter({ hasText: 'Option 2' }).locator('label').click();
458
+
459
+ await expect(page.locator('#qc-select-multiple-choices-input')).toContainText('');
460
+
461
+ });
462
+
463
+ test('Choix multiple sélection avec flèches', {
464
+ tag: ['@multiple', '@dropdownlist'],
465
+ annotation: {
466
+ type: 'description',
467
+ description: 'Soit une option de choix multiple atteinte avec les flèches, en appuyant sur Espace, alors l\'option est sélectionnée'
468
+ }
469
+ }, async ({ page }) => {
470
+ await page.locator('#qc-select-multiple-choices-input').click();
471
+ await page.locator('#qc-select-multiple-choices-input').press('ArrowDown');
472
+ await page.locator('#qc-select-multiple-choices-items')
473
+ .filter({ has: page.getByText(/^Option 1$/gm) })
474
+ .press('ArrowDown');
475
+ await page.locator('#qc-select-multiple-choices-items')
476
+ .filter({ has: page.getByText(/^Option 2$/gm) })
477
+ .press('ArrowDown');
478
+ await page.locator('#qc-select-multiple-choices-Option-3-3-checkbox')
479
+ .press(' ');
480
+
481
+ await expect(page.locator('#qc-select-multiple-choices-input')).toContainText('Option 3');
482
+ });
483
+ });
484
+
485
+ test.describe('formulaire', () => {
486
+ test('formulaire incomplet', {
487
+ tag: ['@form', '@dropdownlist'],
488
+ annotation: {
489
+ type: 'description',
490
+ description: 'Soit un formulaire de liste déroulante avec champ obligatoire vide, en cliquant sur envoyer, alors erreur affichée et peut être ensuite retirée'
491
+ }
492
+ }, async ({ page }) => {
493
+ await page.getByRole('button', { name: 'Envoyer' }).click();
494
+
495
+ await expect(page.locator('#dropdown-list-restaurants-input')).toHaveAttribute('aria-invalid', 'true');
496
+ await expect(page.locator('#dropdown-list-restaurants-error')).toMatchAriaSnapshot(`
497
+ - alert:
498
+ - img
499
+ - text: Veuillez choisir un type de restaurant.
500
+ `);
501
+
502
+ await page.locator('#dropdown-list-restaurants-input').click();
503
+ await page.locator('[id="dropdown-list-restaurants-Pâtisserie-Pâtisserie"]').click();
504
+
505
+ await expect(page.locator('#dropdown-list-restaurants-error')).toHaveCount(0);
506
+ });
507
+
508
+ test('envoi formulaire', {
509
+ tag: ['@form', '@dropdownlist'],
510
+ annotation: {
511
+ type: 'description',
512
+ description: 'Soit un formulaire de liste déroulante avec champ obligatoire vide, en sélectionnant une option et en soumettant, alors alerte d\'envoi de donnée affichée'
513
+ }
514
+ }, async ({ page }) => {
515
+ await page.locator('#dropdown-list-restaurants-input').click();
516
+ await page.locator('[id="dropdown-list-restaurants-Pâtisserie-Pâtisserie"]').click();
517
+ await page.locator('#qc-select-form-test-submit').click();
518
+
519
+ await expect(page.locator('#dropdown-list-restaurants-input')).toHaveAttribute('aria-invalid', 'false');
520
+ page.on('dialog', async dialog => {
521
+ expect(dialog.message()).toBe(
522
+ 'Formulaire soumis avec les données suivantes :\n' +
523
+ 'Type de restaurant: Pâtisserie\n' +
524
+ 'Régions desservies: Centre-du-Québec, Montérégie'
525
+ );
526
+ await dialog.accept();
527
+ });
528
+ });
529
+ });
@@ -0,0 +1,19 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import path = require('path');
3
+
4
+
5
+ test('icon ref', {
6
+ tag: ['@baseline', '@icon']
7
+ }, async ({ page }) => {
8
+ const htmlFilePath = path.resolve(__dirname, '../public/icon.test.html');
9
+ await page.goto(`file://${htmlFilePath}`);
10
+ await expect(page).toHaveScreenshot('icon.png', { fullPage: true });
11
+ });
12
+
13
+ test('icon svelte', {
14
+ tag: ['@svelte', '@icon']
15
+ }, async ({ page }) => {
16
+ const htmlFilePath = path.resolve(__dirname, '../public/iconEmbedded.test.html');
17
+ await page.goto(`file://${htmlFilePath}`);
18
+ await expect(page).toHaveScreenshot('icon.png', { fullPage: true });
19
+ });
@@ -0,0 +1,22 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import path = require('path');
3
+
4
+
5
+ test('pivHeader ref', {
6
+ tag: ['@baseline', '@piv-header']
7
+ }, async ({ page }) => {
8
+ const htmlFilePath = path.resolve(__dirname, '../public/pivHeader.test.html');
9
+ await page.goto(`file://${htmlFilePath}`);
10
+ await expect(page).toHaveScreenshot('pivHeader.png', { fullPage: true });
11
+ });
12
+
13
+
14
+ //TODO: test du composant svelte
15
+
16
+ // test('pivHeader svelte', {
17
+ // tag: ['@svelte', '@piv-header']
18
+ // }, async ({ page }) => {
19
+ // const htmlFilePath = path.resolve(__dirname, '../public/pivHeaderEmbedded.test.html');
20
+ // await page.goto(`file://${htmlFilePath}`);
21
+ // await expect(page).toHaveScreenshot('pivHeader.png', { fullPage: true });
22
+ // });
@@ -0,0 +1,28 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import path = require('path');
3
+
4
+ test.beforeEach(async ({ page }) => {
5
+ const htmlFilePath = path.resolve(__dirname, '../public/textFieldSvelte.test.html');
6
+ await page.goto(`file://${htmlFilePath}`);
7
+ })
8
+
9
+ /* test des composants web de la trousse */
10
+ test('textfield ref', {
11
+ tag: ['@svelte', '@textfield']
12
+ }, async ({ page }) => {
13
+ await expect(page).toHaveScreenshot('textField.png', {fullPage: true});
14
+ });
15
+
16
+ test.describe('Aria', () => {
17
+ test('aria-required', async ({ page }) => {
18
+ await expect(page.getByRole('textbox', { name: 'Large', exact: true })).toHaveAttribute('aria-required', 'true');
19
+ });
20
+
21
+ test('aria-invalid', async ({ page }) => {
22
+ await expect(page.getByRole('textbox', { name: 'Moyen', exact: true })).toHaveAttribute('aria-invalid', 'true');
23
+
24
+ await page.getByRole('textbox', { name: 'Moyen' }).click();
25
+ await page.getByRole('textbox', { name: 'Moyen' }).fill('1');
26
+ await expect(page.getByRole('textbox', { name: 'Moyen', exact: true })).toHaveAttribute('aria-invalid', 'false');
27
+ });
28
+ });
@@ -0,0 +1,37 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import path = require('path');
3
+
4
+ test.beforeEach(async ({ page }) => {
5
+ const htmlFilePath = path.resolve(__dirname, '../public/textFieldBaseline.test.html');
6
+ await page.goto(`file://${htmlFilePath}`);
7
+ })
8
+
9
+ /* test des composants web de la trousse */
10
+ test('textfield ref', {
11
+ tag: ['@baseline', '@textfield']
12
+ }, async ({ page }) => {
13
+ const htmlFilePath = path.resolve(__dirname, '../public/textField.test.html');
14
+ // Navigue vers le fichier en utilisant le protocole file://
15
+ await page.goto(`file://${htmlFilePath}`);
16
+ await expect(page).toHaveScreenshot('textField.png', {fullPage: true});
17
+ });
18
+ /* test des composants svelte */
19
+ test('textfield svelte', {
20
+ tag: ['@baseline', '@textfield']
21
+ }, async ({ page }) => {
22
+ await expect(page).toHaveScreenshot('textField.png', {fullPage: true});
23
+ });
24
+
25
+ test.describe('Aria', () => {
26
+ test('aria-required', async ({ page }) => {
27
+ await expect(page.getByRole('textbox', { name: 'Large', exact: true })).toHaveAttribute('aria-required', 'true');
28
+ });
29
+
30
+ test('aria-invalid', async ({ page }) => {
31
+ await expect(page.getByRole('textbox', { name: 'Moyen', exact: true })).toHaveAttribute('aria-invalid', 'true');
32
+
33
+ await page.getByRole('textbox', { name: 'Moyen' }).click();
34
+ await page.getByRole('textbox', { name: 'Moyen' }).fill('1');
35
+ await expect(page.getByRole('textbox', { name: 'Moyen', exact: true })).toHaveAttribute('aria-invalid', 'false');
36
+ });
37
+ });
@@ -0,0 +1,20 @@
1
+ import {expect, test} from "@playwright/test";
2
+ import path = require('path');
3
+
4
+ test('toggleswitch ref', {
5
+ tag: ['@baseline', '@toggleswitch']
6
+ }, async ({ page }) => {
7
+ const htmlFilePath = path.resolve(__dirname, '../public/toggleSwitch.test.html');
8
+ await page.goto(`file://${htmlFilePath}`);
9
+
10
+ await expect(page).toHaveScreenshot('toggleSwitch.png', {fullPage: true});
11
+ });
12
+ /* test des composants svelte */
13
+ test('toggleswitch svelte', {
14
+ tag: ['@svelte', '@toggleswitch']
15
+ }, async ({ page }) => {
16
+ const htmlFilePath = path.resolve(__dirname, '../public/toggleSwitchEmbedded.test.html');
17
+ await page.goto(`file://${htmlFilePath}`);
18
+
19
+ await expect(page).toHaveScreenshot('toggleSwitch.png', {fullPage: true});
20
+ });
@@ -1,3 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="16" height="20" viewBox="0 0 16 20">
2
- <path id="arrow-up-white" d="M.414,9.022c.012-.015.017-.035.031-.049L6.616,2.391a1.194,1.194,0,0,1,1.767,0,1.4,1.4,0,0,1,0,1.885L4.267,8.666H18.75a1.336,1.336,0,0,1,0,2.667H4.267l4.116,4.39a1.4,1.4,0,0,1,0,1.885,1.194,1.194,0,0,1-1.767,0L.445,11.026c-.014-.015-.019-.035-.031-.049a1.361,1.361,0,0,1,0-1.955Z" transform="translate(18) rotate(90)" fill="#fff"/>
3
- </svg>
@@ -1,3 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="13" height="8" viewBox="0 0 13 8">
2
- <path id="Tracé_700" data-name="Tracé 700" d="M1337.474,366.247l5.8,5.722-1.4,1.61-5.1-5.03-5.1,5.03-1.4-1.61,5.8-5.722.7-.667Z" transform="translate(-1330.271 -365.58)" fill="#095797"/>
3
- </svg>