dimsum-e2e-tests 3.62.1 → 3.70.0-alpha.11

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 (325) hide show
  1. package/CHANGELOG.md +2244 -286
  2. package/ds-accordion/DSAccordion.visual.spec.js +6 -0
  3. package/ds-accordion/DSAccordionCO.js +15 -3
  4. package/ds-accordion/QA_NOTES.md +105 -0
  5. package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
  6. package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +65 -0
  7. package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +19 -0
  8. package/ds-apppicker/DSAppPickerCO.js +101 -3
  9. package/ds-apppicker/aria-pattern/DSAppPicker.aria-pattern.func.spec.js +100 -0
  10. package/ds-apppicker/basic/DSAppPicker.basic.keyboard-nav.func.spec.js +18 -7
  11. package/ds-apppicker/closeAfterSelection/DSAppPicker.closeAfterSelection.func.spec.js +1 -1
  12. package/ds-apppicker/custom-trigger-focus/DSAppPicker.custom-trigger-focus.func.spec.js +82 -0
  13. package/ds-apppicker/label-expansion-dismissal/DSAppPicker.label-expansion-dismissal.visual.spec.js +108 -0
  14. package/ds-apppicker/reflow/DSAppPicker.reflow.func.spec.js +32 -0
  15. package/ds-apppicker/reflow/DSAppPicker.reflow.visual.spec.js +5 -6
  16. package/ds-apppicker/truncation/DSAppPicker.truncation.visual.spec.js +5 -9
  17. package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
  18. package/ds-autocomplete/DSAutocompleteCO.js +36 -1
  19. package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.axe-core.func.spec.js +50 -0
  20. package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.func.spec.js +122 -0
  21. package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.visual.spec.js +48 -0
  22. package/ds-autocomplete/slots/DSAutocomplete.slots.func.spec.js +6 -1
  23. package/ds-banner/DSBanner.text-resize.visual.spec.js +5 -2
  24. package/ds-banner/DSBannerCO.js +4 -0
  25. package/ds-button-v3/DSButtonV3.aria-disabled-attribute.func.spec.js +33 -0
  26. package/ds-button-v3/DSButtonV3CO.js +10 -0
  27. package/ds-button-v3/theme-font/DSButtonV3.theme-font.func.spec.js +30 -0
  28. package/ds-card/DSCard.cardv2_v1.func.spec.js +54 -0
  29. package/ds-card/DSCard.cardv2_v1.visual.spec.js +29 -0
  30. package/ds-card/DSCardCO.js +50 -0
  31. package/ds-card/detail-slots/DSCard.detail-slots.axe-core.func.spec.js +29 -0
  32. package/ds-card/detail-slots/DSCard.detail-slots.func.spec.js +72 -0
  33. package/ds-card/detail-slots/DSCard.detail-slots.visual.spec.js +19 -0
  34. package/ds-card-v3/DSCardV3CO.js +93 -1
  35. package/ds-card-v3/accordion/DSCardV3.accordion-aria-structure.func.spec.js +41 -0
  36. package/ds-card-v3/accordion/DSCardV3.accordion-aria.keyboard.func.spec.js +49 -0
  37. package/ds-card-v3/accordion/DSCardV3.accordion.axe-core.func.spec.js +28 -0
  38. package/ds-card-v3/accordion/DSCardV3.accordion.visual.spec.js +4 -6
  39. package/ds-card-v3/action/DSCardV3.action.axe-core.func.spec.js +24 -0
  40. package/ds-card-v3/action/DSCardV3.action.func.spec.js +53 -0
  41. package/ds-card-v3/action/DSCardV3.action.visual.spec.js +28 -0
  42. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.axe-core.func.spec.js +42 -0
  43. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.func.spec.js +129 -0
  44. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.reorder.func.spec.js +73 -0
  45. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.visual.spec.js +5 -12
  46. package/ds-card-v3/global-attributes/DSCardV3.global-attributes.axe-core.func.spec.js +33 -0
  47. package/ds-card-v3/global-attributes/DSCardV3.global-attributes.visual.spec.js +20 -0
  48. package/ds-card-v3/multi-select/DSCardV3.multi-select.aria-grouping.func.spec.js +24 -0
  49. package/ds-card-v3/multi-select/DSCardV3.multiselect.axe-core.func.spec.js +47 -0
  50. package/ds-card-v3/multi-select/DSCardV3.multiselect.keyboard.func.spec.js +65 -0
  51. package/ds-card-v3/multi-select/DSCardV3.multiselect.visual.spec.js +17 -0
  52. package/ds-card-v3/multiple-action/DSCardV3.multiple-action.axe-core.func.spec.js +35 -0
  53. package/ds-card-v3/multiple-action/DSCardV3.multiple-action.func.spec.js +53 -0
  54. package/ds-card-v3/multiple-action/DSCardV3.multiple-action.visual.spec.js +18 -0
  55. package/ds-card-v3/multiple-control/DSCardV3.multi-control.axe-core.func.spec.js +34 -0
  56. package/ds-card-v3/multiple-control/DSCardV3.multi-control.func.spec.js +26 -0
  57. package/ds-card-v3/multiple-control/DSCardV3.multi-control.visual.spec.js +29 -0
  58. package/ds-card-v3/no-action/DSCardV3.no-action.axe-core.func.spec.js +22 -0
  59. package/ds-card-v3/no-action/DSCardV3.no-action.func.spec.js +23 -0
  60. package/ds-card-v3/no-action/DSCardV3.no-action.visual.spec.js +15 -0
  61. package/ds-card-v3/notification-badges/DSCardV3.notification-badges.axe-core.func.spec.js +33 -0
  62. package/ds-card-v3/notification-badges/DSCardV3.notification-badges.func.spec.js +19 -0
  63. package/ds-card-v3/notification-badges/DSCardV3.notification-badges.visual.spec.js +28 -0
  64. package/ds-card-v3/reflow/DSCardV3.reflow.axe-core.func.spec.js +28 -0
  65. package/ds-card-v3/reflow/DSCardV3.reflow.func.spec.js +36 -0
  66. package/ds-card-v3/reflow/DSCardV3.reflow.visual.spec.js +3 -2
  67. package/ds-card-v3/single-select/DSCardV3.single-select.aria-grouping.func.spec.js +24 -0
  68. package/ds-card-v3/single-select/DSCardV3.single-select.axe-core.func.spec.js +37 -0
  69. package/ds-card-v3/single-select/DSCardV3.single-select.visual.spec.js +1 -2
  70. package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +1 -2
  71. package/ds-card-v3/variant-accented/DSCardV3.variant-accented.axe-core.func.spec.js +45 -0
  72. package/ds-card-v3/variant-accented/DSCardV3.variant-accented.func.spec.js +28 -0
  73. package/ds-card-v3/variant-accented/DSCardV3.variant-accented.visual.spec.js +35 -0
  74. package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.axe-core.func.spec.js +35 -0
  75. package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.func.spec.js +53 -0
  76. package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.visual.spec.js +28 -0
  77. package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.axe-core.func.spec.js +22 -0
  78. package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.func.spec.js +61 -0
  79. package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.visual.spec.js +20 -0
  80. package/ds-card-v3/variant-disabled/DSCardV3.variantDisabled-non-interactive.func.spec.js +25 -0
  81. package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
  82. package/ds-chat/DSChat.visual.spec.js +4 -4
  83. package/ds-chat/DSChatCO.js +18 -24
  84. package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
  85. package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
  86. package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
  87. package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
  88. package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
  89. package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
  90. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
  91. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
  92. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
  93. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
  94. package/ds-chat/components/BubbleCO.js +46 -3
  95. package/ds-chat/components/CardCO.js +75 -0
  96. package/ds-chat/components/ComposerCO.js +6 -6
  97. package/ds-chat/components/FloatingButtonCO.js +5 -3
  98. package/ds-chat/components/HeaderCO.js +2 -2
  99. package/ds-chat/components/TileCO.js +82 -0
  100. package/ds-chat/components/index.js +3 -2
  101. package/ds-chat/floatingbutton/DSChat-floating-button.visual.spec.js +1 -1
  102. package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
  103. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
  104. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
  105. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
  106. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
  107. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
  108. package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
  109. package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
  110. package/ds-chip/label-expansion-dismissal/DSChip.label-expansion-dismissal.visual.spec.js +84 -0
  111. package/ds-controlled-form/ds-combobox/DSComboboxCO.js +2 -2
  112. package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable-tooltip.func.spec.js +47 -0
  113. package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +12 -21
  114. package/ds-controlled-form/ds-combobox/disabled/DSCombobox.disabled.visual.spec.js +6 -1
  115. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
  116. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
  117. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +55 -2
  118. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
  119. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
  120. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
  121. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
  122. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
  123. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +1 -1
  124. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
  125. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
  126. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
  127. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
  128. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
  129. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
  130. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +2 -6
  131. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +1 -1
  132. package/ds-controlled-form/ds-controlled-checkbox/slots/DSControlledCheckbox.slots.func.spec.js +78 -0
  133. package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
  134. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.axe-core.func.spec.js +4 -4
  135. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js +1 -1
  136. package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
  137. package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +50 -1
  138. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.axe-core.func.spec.js +16 -2
  139. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.func.spec.js +37 -0
  140. package/ds-controlled-form/ds-controlled-radio/slots/DSControlledRadio.slots.func.spec.js +78 -0
  141. package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js +30 -0
  142. package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +1 -3
  143. package/ds-data-table-async/DSDataTableCO.js +189 -12
  144. package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
  145. package/ds-data-table-async/components/FilterBarCO.js +7 -0
  146. package/ds-data-table-async/components/FiltersCO.js +1 -1
  147. package/ds-data-table-async/components/HeaderCO.js +59 -11
  148. package/ds-data-table-async/dnd/DSDataTable.dnd-keyboard-scroll.func.spec.js +51 -0
  149. package/ds-data-table-async/filter-menu-close/DSDataTable.filter-menu-close.func.spec.js +77 -0
  150. package/ds-data-table-async/filter-popover-boundary/DSDataTable.filter-popover-boundary.func.spec.js +98 -0
  151. package/ds-data-table-async/filters/DSDataTable.filters-creatable-active-descendant.func.spec.js +51 -0
  152. package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +55 -0
  153. package/ds-data-table-async/filters/DSDataTable.filters.axe-core.func.spec.js +11 -9
  154. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatablemultiselect.keyboard.func.spec.js +2 -2
  155. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatableselect.keyboard.func.spec.js +2 -2
  156. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2.axe-core.func.spec.js +45 -29
  157. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.axe-core.func.spec.js +23 -0
  158. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.func.spec.js +50 -0
  159. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.visual.spec.js +21 -0
  160. package/ds-data-table-async/header-affordances/DSDataTable.header-affordances.func.spec.js +92 -0
  161. package/ds-data-table-async/helpers/getInputSelection.js +6 -0
  162. package/ds-data-table-async/helpers/index.js +1 -0
  163. package/ds-data-table-async/keyboard-scroll/DSDataTable.keyboard-scroll.func.spec.js +39 -0
  164. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
  165. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
  166. package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
  167. package/ds-data-table-async/resizable/DSDataTable.resize-min-clamp.func.spec.js +72 -0
  168. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.axe-core.func.spec.js +42 -0
  169. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +98 -0
  170. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
  171. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
  172. package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
  173. package/ds-data-table-async/toggle-cell-focus/DSDataTable.toggle-cell-enter-focus.func.spec.js +31 -0
  174. package/ds-data-table-async/vissibility/DSDataTable.vissibility.visual.spec.js +2 -0
  175. package/ds-dataviz/DSDataViz.axis.visual.spec.js +1 -2
  176. package/ds-dataviz/DSDataViz.ticks.visual.spec.js +1 -2
  177. package/ds-dataviz/DSDataVizCO.js +2 -0
  178. package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
  179. package/ds-dialog/DSDialog.visual.spec.js +16 -31
  180. package/ds-dialog/DSDialogCO.js +58 -0
  181. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.axe-core.func.spec.js +27 -0
  182. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.func.spec.js +56 -0
  183. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.visual.spec.js +20 -0
  184. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.axe-core.func.spec.js +25 -0
  185. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.func.spec.js +52 -0
  186. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.visual.spec.js +20 -0
  187. package/ds-dialog/axe-core/DSDialog.accessible-form.axe-core.func.spec.js +25 -0
  188. package/ds-dialog/axe-core/DSDialog.basic.axe-core.func.spec.js +25 -0
  189. package/ds-dialog/axe-core/DSDialog.centered.axe-core.func.spec.js +25 -0
  190. package/ds-dialog/axe-core/DSDialog.decision.axe-core.func.spec.js +57 -0
  191. package/ds-dialog/axe-core/DSDialog.long-body.axe-core.func.spec.js +25 -0
  192. package/ds-dialog/axe-core/DSDialog.warning.axe-core.func.spec.js +24 -0
  193. package/ds-dialog/axe-core/DSDialog.wizard.axe-core.func.spec.js +28 -0
  194. package/ds-dialog/click-outside/DSDialog.click-outside.func.spec.js +31 -0
  195. package/ds-dialog/esc-close/DSDialog.esc-close.func.spec.js +31 -0
  196. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js +46 -0
  197. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.func.spec.js +50 -0
  198. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.axe-core.func.spec.js +25 -0
  199. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.visual.spec.js +37 -0
  200. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.axe-core.func.spec.js +25 -0
  201. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.visual.spec.js +20 -0
  202. package/ds-dialog/size-variants/DSDialog.size-variants.visual.spec.js +116 -0
  203. package/ds-floating-context/DSFloatingContextCO.js +10 -0
  204. package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
  205. package/ds-form-combobox-multi/DSComboboxMultiCO.js +38 -11
  206. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
  207. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
  208. package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +19 -2
  209. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
  210. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.mouse.func.spec.js +0 -2
  211. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
  212. package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
  213. package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
  214. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.func.spec.js +59 -0
  215. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.visual.spec.js +39 -0
  216. package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
  217. package/ds-form-combobox-multi/theme-font/DSComboboxMulti.theme-font.func.spec.js +38 -0
  218. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.axe-core.func.spec.js +39 -0
  219. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.func.spec.js +39 -0
  220. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.visual.spec.js +29 -0
  221. package/ds-form-combobox-single/DSComboboxSingleCO.js +27 -11
  222. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
  223. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
  224. package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
  225. package/ds-form-combobox-single/creatable/DSComboboxSingle.creatable.visual.spec.js +30 -0
  226. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
  227. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.mouse.func.spec.js +0 -2
  228. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
  229. package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
  230. package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
  231. package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
  232. package/ds-form-combobox-single/theme-font/DSComboboxSingle.theme-font.func.spec.js +34 -0
  233. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js +39 -0
  234. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.func.spec.js +39 -0
  235. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.visual.spec.js +29 -0
  236. package/ds-form-date-range-picker/DateRangePicker.axe-core.spec.js +5 -0
  237. package/ds-form-date-range-picker/DateRangePicker.functional.spec.js +80 -18
  238. package/ds-form-date-range-picker/DateRangePickerCO.js +19 -0
  239. package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +66 -0
  240. package/ds-form-date-range-picker/grouped-field-error-announcement/DateRangePicker.grouped-field-error-announcement.func.spec.js +59 -0
  241. package/ds-form-date-range-picker/picker-callbacks/DateRangePicker.picker-callbacks.func.spec.js +36 -0
  242. package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -0
  243. package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +8 -1
  244. package/ds-form-date-time-picker/date-time-full/DateTimePicker.DateTimeFull.visual.spec.js +9 -0
  245. package/ds-form-date-time-picker/partial-date-open-focus/DateTimePicker.partial-date-open-focus.func.spec.js +45 -0
  246. package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
  247. package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
  248. package/ds-form-native-select/NativeSelectCO.js +6 -0
  249. package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
  250. package/ds-form-toggle/DSToggle.func.spec.js +20 -23
  251. package/ds-form-toggle/DSToggleCO.js +11 -2
  252. package/ds-global-header/GlobalHeader.announcements.func.spec.js +27 -0
  253. package/ds-global-header/GlobalHeader.axe-core.func.spec.js +41 -11
  254. package/ds-global-header/GlobalHeader.func.spec.js +70 -1
  255. package/ds-global-header/GlobalHeader.visual.spec.js +31 -0
  256. package/ds-global-header/GlobalHeaderCO.js +120 -2
  257. package/ds-global-header/app-picker-passthrough/GlobalHeader.app-picker-passthrough.func.spec.js +113 -0
  258. package/ds-global-header/popup-menu-focus/GlobalHeader.popup-menu-focus.func.spec.js +63 -0
  259. package/ds-global-header/popup-menu-slots/GlobalHeader.popup-menu-slots.func.spec.js +70 -0
  260. package/ds-global-header/search-toggle-slots/GlobalHeader.search-toggle-slots.func.spec.js +118 -0
  261. package/ds-global-header/toolbar-item-attributes/GlobalHeader.toolbar-item-attributes.func.spec.js +53 -0
  262. package/ds-grid/DSGridCO.js +20 -0
  263. package/ds-grid/layout-mode/DSGrid.layout-mode.func.spec.js +51 -0
  264. package/ds-grid/layout-mode/DSGrid.layout-mode.visual.spec.js +22 -0
  265. package/ds-hooks/DSHook.UseFontSizeMedia.visual.spec.js +5 -2
  266. package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
  267. package/ds-hooks/DSHookCO.js +56 -23
  268. package/ds-hooks/useFocusStack/DSHook.useFocusStack.func.spec.js +83 -0
  269. package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +2 -0
  270. package/ds-hooks/useFocusTrap/UseFocusTrapToggle.func.spec.js +48 -0
  271. package/ds-hooks/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
  272. package/ds-leftnavigation/LeftNavigationCO.js +2 -2
  273. package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
  274. package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +19 -0
  275. package/ds-modal-slide/ModalSlideCO.js +46 -0
  276. package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
  277. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.axe-core.func.spec.js +25 -0
  278. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.func.spec.js +25 -0
  279. package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
  280. package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
  281. package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
  282. package/ds-page-layout/PageLayoutCO.js +4 -4
  283. package/ds-pills-v2/DSPillsV2CO.js +12 -0
  284. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.func.spec.js +53 -0
  285. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.visual.spec.js +26 -0
  286. package/ds-pills-v2/disabled/DSPills.disabled.func.spec.js +53 -0
  287. package/ds-pills-v2/disabled/DSPills.disabled.visual.spec.js +33 -0
  288. package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
  289. package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
  290. package/ds-query-builder/DSQueryBuilder.visual.spec.js +6 -6
  291. package/ds-shuttle-v2/DSShuttleV2CO.js +15 -1
  292. package/ds-shuttle-v2/breadcrumb-a11y/DSShuttleV2.breadcrumb-a11y.func.spec.js +43 -0
  293. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
  294. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +30 -0
  295. package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +8 -3
  296. package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
  297. package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
  298. package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
  299. package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
  300. package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
  301. package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
  302. package/ds-slider-v2/DSSliderV2.func.spec.js +36 -25
  303. package/ds-slider-v2/DSSliderV2CO.js +10 -0
  304. package/ds-slider-v2/min-range/DSSliderV2.min-range.func.spec.js +69 -0
  305. package/ds-tab-button/DSTabButton.func.spec.js +1 -1
  306. package/ds-tabs/DSTabs.visual.spec.js +1 -2
  307. package/ds-tabs/DSTabsCO.js +2 -2
  308. package/ds-tabs/with-carousel/DSTabs.with-carousel.func.spec.js +22 -7
  309. package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +9 -9
  310. package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
  311. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
  312. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
  313. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
  314. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
  315. package/ds-treeview/DSTreeViewCO.js +25 -2
  316. package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
  317. package/ds-typography/DSTypographyCO.js +10 -0
  318. package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
  319. package/package.json +149 -154
  320. package/paths.js +12 -6
  321. package/ds-card-v3/disabled/DSCardV3.disabled.visual.spec.js +0 -17
  322. package/ds-chat-tile/TileCO.js +0 -35
  323. package/ds-hooks/DSHook.func.spec.js +0 -60
  324. package/ds-hooks/useFocusStack/DSHook.useFocusStack.skipped.js +0 -57
  325. package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
@@ -0,0 +1,25 @@
1
+ // Tests for the feature introduced in PUI-15612 (ModalSlide flexible title heading level).
2
+ // The `headingLevel` prop drives the semantic tag of the title element; the default is `h3`.
3
+ import ModalSlideCO from '../ModalSlideCO';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-18687 - ModalSlide:: title headingLevel prop - Func', () => {
12
+ before(async () => {
13
+ const errorOnGo = await ModalSlideCO.headingLevelURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+
17
+ it('01: should render the title with the tag from headingLevel (h2)', async () => {
18
+ await ModalSlideCO.openModalSlide();
19
+ const title = await ModalSlideCO.getModalTitle();
20
+ await title.waitForDisplayed();
21
+ await expect(await title.getTagName()).toBe('h2');
22
+ await expect(title).toHaveText('Loan Summary');
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,74 @@
1
+ /* eslint-disable max-lines */
2
+ import { Key } from 'webdriverio';
3
+ import ModalSlideCO from '../ModalSlideCO';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-18428 - SquareIndicator: Slots - Func Test', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await ModalSlideCO.slotsTest.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('01: each SquareIndicator slot to have custom aria-* attribute', async () => {
17
+ await browser.keys(Key.Tab);
18
+ await browser.keys(Key.Tab);
19
+ await browser.keys(Key.Return);
20
+ const actualContent = await ModalSlideCO.getSlotActualContent();
21
+ const content = await ModalSlideCO.getSlotContent();
22
+ const contentWrapper = await ModalSlideCO.getSlotContentWrapper();
23
+ const footerSeparator = await ModalSlideCO.getSlotFooterSeparator();
24
+ const gridContent = await ModalSlideCO.getSlotGridContent();
25
+ const headerSeparator = await ModalSlideCO.getSlotHeaderSeparator();
26
+ const overlay = await ModalSlideCO.getSlotOverlay();
27
+ const root = await ModalSlideCO.getSlotRoot();
28
+ await expect(actualContent).toHaveAttribute('aria-label', 'actual content aria');
29
+ await expect(content).toHaveAttribute('aria-label', 'content aria');
30
+ await expect(contentWrapper).toHaveAttribute('aria-label', 'content wrapper aria');
31
+ await expect(footerSeparator).toHaveAttribute('aria-label', 'footer separator aria');
32
+ await expect(gridContent).toHaveAttribute('aria-label', 'grid content aria');
33
+ await expect(headerSeparator).toHaveAttribute('aria-label', 'header separator aria');
34
+ await expect(overlay).toHaveAttribute('aria-label', 'overlay aria');
35
+ await expect(root).toHaveAttribute('aria-label', 'root aria');
36
+ });
37
+ it('02: each SquareIndicator slot to have custom data-* attribute', async () => {
38
+ const actualContent = await ModalSlideCO.getSlotActualContent();
39
+ const content = await ModalSlideCO.getSlotContent();
40
+ const contentWrapper = await ModalSlideCO.getSlotContentWrapper();
41
+ const footerSeparator = await ModalSlideCO.getSlotFooterSeparator();
42
+ const gridContent = await ModalSlideCO.getSlotGridContent();
43
+ const headerSeparator = await ModalSlideCO.getSlotHeaderSeparator();
44
+ const overlay = await ModalSlideCO.getSlotOverlay();
45
+ const root = await ModalSlideCO.getSlotRoot();
46
+ await expect(actualContent).toHaveAttribute('data-testid', 'actual content data');
47
+ await expect(content).toHaveAttribute('data-testid', 'content data');
48
+ await expect(contentWrapper).toHaveAttribute('data-testid', 'content wrapper data');
49
+ await expect(footerSeparator).toHaveAttribute('data-testid', 'footer separator data');
50
+ await expect(gridContent).toHaveAttribute('data-testid', 'grid content data');
51
+ await expect(headerSeparator).toHaveAttribute('data-testid', 'header separator data');
52
+ await expect(overlay).toHaveAttribute('data-testid', 'overlay data');
53
+ await expect(root).toHaveAttribute('data-testid', 'root data');
54
+ });
55
+ it('03: each ModalSlide slot to have custom lang attribute', async () => {
56
+ const actualContent = await ModalSlideCO.getSlotActualContent();
57
+ const content = await ModalSlideCO.getSlotContent();
58
+ const contentWrapper = await ModalSlideCO.getSlotContentWrapper();
59
+ const footerSeparator = await ModalSlideCO.getSlotFooterSeparator();
60
+ const gridContent = await ModalSlideCO.getSlotGridContent();
61
+ const headerSeparator = await ModalSlideCO.getSlotHeaderSeparator();
62
+ const overlay = await ModalSlideCO.getSlotOverlay();
63
+ const root = await ModalSlideCO.getSlotRoot();
64
+ await expect(actualContent).toHaveAttribute('lang', 'en');
65
+ await expect(content).toHaveAttribute('lang', 'es');
66
+ await expect(contentWrapper).toHaveAttribute('lang', 'fr');
67
+ await expect(footerSeparator).toHaveAttribute('lang', 'de');
68
+ await expect(gridContent).toHaveAttribute('lang', 'it');
69
+ await expect(headerSeparator).toHaveAttribute('lang', 'pt');
70
+ await expect(overlay).toHaveAttribute('lang', 'ja');
71
+ await expect(root).toHaveAttribute('lang', 'zh');
72
+ });
73
+ });
74
+ }
@@ -0,0 +1,27 @@
1
+ /* eslint-disable max-lines */
2
+ import { Key } from 'webdriverio';
3
+ import ModalSlideCO from '../ModalSlideCO';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-18429 - ModalSlide: Slots Test - Visual', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await ModalSlideCO.slotsTest.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('01: should display ModalSlide with customized slots', async () => {
17
+ await browser.eyesOpen();
18
+ await browser.keys(Key.Tab);
19
+ await browser.keys(Key.Tab);
20
+ await browser.keys(Key.Return);
21
+ const root = await ModalSlideCO.getSlotRoot();
22
+ await root.waitForDisplayed();
23
+ const snapshot = await browser.eyesCheckSnapshot(ModalSlideCO.snapshotPath('modal-slide-slots'));
24
+ await expect(snapshot).toEqual(0);
25
+ });
26
+ });
27
+ }
@@ -7,8 +7,8 @@ describe('PUI-9354:: Notification Badge: Relate to component', () => {
7
7
  if (errorOnGo) throw errorOnGo;
8
8
  });
9
9
  it('01: Should display relate to component', async () => {
10
- await browser.eyesOpen();
11
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-relate-to-component'));
10
+ await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
11
+ const snapshot = await browser.percyCheckScreenshot();
12
12
  await expect(snapshot).toEqual(0);
13
13
  });
14
14
  });
@@ -19,8 +19,8 @@ describe('PUI-9353:: Notification Badge: Disabled', () => {
19
19
  if (errorOnGo) throw errorOnGo;
20
20
  });
21
21
  it('01: Should display disabled badge', async () => {
22
- await browser.eyesOpen();
23
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-disabled'));
22
+ await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
23
+ const snapshot = await browser.percyCheckScreenshot();
24
24
  await expect(snapshot).toEqual(0);
25
25
  });
26
26
  });
@@ -31,8 +31,8 @@ describe('PUI-9352:: Notification Badge: Background color', () => {
31
31
  if (errorOnGo) throw errorOnGo;
32
32
  });
33
33
  it('01: Should display custom background color badges', async () => {
34
- await browser.eyesOpen();
35
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-background-color'));
34
+ await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
35
+ const snapshot = await browser.percyCheckScreenshot();
36
36
  await expect(snapshot).toEqual(0);
37
37
  });
38
38
  });
@@ -43,8 +43,8 @@ describe('PUI-9355:: Notification Badge: Alphanumerical', () => {
43
43
  if (errorOnGo) throw errorOnGo;
44
44
  });
45
45
  it('01: Should display custom background color badges', async () => {
46
- await browser.eyesOpen();
47
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-alpha-chars'));
46
+ await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
47
+ const snapshot = await browser.percyCheckScreenshot();
48
48
  await expect(snapshot).toEqual(0);
49
49
  });
50
50
  });
@@ -55,8 +55,8 @@ describe('PUI-11412:: Notification Badge: Chip, Icon and Button integration -Vis
55
55
  if (errorOnGo) throw errorOnGo;
56
56
  });
57
57
  it('01: Should display integration with Chips and Button components correctly', async () => {
58
- await browser.eyesOpen();
59
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-chip-default'));
58
+ await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
59
+ const snapshot = await browser.percyCheckScreenshot();
60
60
  await expect(snapshot).toEqual(0);
61
61
  });
62
62
  });
@@ -66,8 +66,8 @@ describe('PUI-11413:: Notification Badge: Custom Component Integration -Visual T
66
66
  if (errorOnGo) throw errorOnGo;
67
67
  });
68
68
  it('01: Should display integration with custom components correctly', async () => {
69
- await browser.eyesOpen();
70
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-custom-component'));
69
+ await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
70
+ const snapshot = await browser.percyCheckScreenshot();
71
71
  await expect(snapshot).toEqual(0);
72
72
  });
73
73
  });
@@ -81,7 +81,7 @@ describe('PUI-11817:: NotificationBadge: with LeftNavigation example -Visual', (
81
81
  await browser.eyesOpen();
82
82
  const notification = await DSNotificationBadgeCO.getNotificationBadgeByIndex(1);
83
83
  await notification.waitForDisplayed();
84
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-leftnav-default'));
84
+ const snapshot = await browser.percyCheckScreenshot();
85
85
  await expect(snapshot).toEqual(0);
86
86
  });
87
87
  it('02: should display left nav with badged items selected, one focused correctly', async () => {
@@ -89,7 +89,7 @@ describe('PUI-11817:: NotificationBadge: with LeftNavigation example -Visual', (
89
89
 
90
90
  const item = await DSNotificationBadgeCO.getIconByIndex(2);
91
91
  await item.click();
92
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-leftnav-selected'));
92
+ const snapshot = await browser.percyCheckScreenshot();
93
93
  await expect(snapshot).toEqual(0);
94
94
  });
95
95
  });
@@ -99,10 +99,8 @@ describe('PUI-14185:: NotificationBadge: textColor prop - Visual Test ', () => {
99
99
  if (errorOnGo) throw errorOnGo;
100
100
  });
101
101
  it('01: should display notification badge with custom textColor', async () => {
102
- await browser.eyesOpen();
103
- const notification = await DSNotificationBadgeCO.getNotificationBadgeByIndex(1);
104
- await notification.waitForDisplayed();
105
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-with-custom-textColor'));
102
+ await DSNotificationBadgeCO.getNotificationBadgeByIndex(1).waitForDisplayed();
103
+ const snapshot = await browser.percyCheckScreenshot();
106
104
  await expect(snapshot).toEqual(0);
107
105
  });
108
106
  });
@@ -114,12 +112,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
114
112
  if (errorOnGo) throw errorOnGo;
115
113
  });
116
114
  it('01: should display toolbar with toolbar correctly', async () => {
117
- await browser.eyesOpen();
118
115
  const notification = await DSNotificationBadgeCO.getNotificationBadgeByIndex(1);
119
116
  await notification.waitForDisplayed();
120
117
  await browser.keys(Key.Tab);
121
118
  await browser.keys(Key.ArrowRight);
122
- const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-with-toolbar'));
119
+ const snapshot = await browser.percyCheckScreenshot();
123
120
  await expect(snapshot).toEqual(0);
124
121
  });
125
122
  });
@@ -1,12 +1,12 @@
1
- import { PATH_PAGE_LAYOUT_TEMPLATE } from '../paths';
1
+ import { PATH_E2E_PAGE_LAYOUT } from '../paths';
2
2
  import { PageObject, Urlbuilder } from '../helpers';
3
3
 
4
4
  export default class PageLayoutCO extends PageObject {
5
- static basicURL = new Urlbuilder(PATH_PAGE_LAYOUT_TEMPLATE, 'basic');
5
+ static basicURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'basic-test');
6
6
 
7
- static complexURL = new Urlbuilder(PATH_PAGE_LAYOUT_TEMPLATE, 'complex-page');
7
+ static complexURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'complex-page-test');
8
8
 
9
- static integratedURL = new Urlbuilder(PATH_PAGE_LAYOUT_TEMPLATE, 'integrated-example');
9
+ static integratedURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'integrated-example-test');
10
10
 
11
11
  // Snapshots
12
12
  static snapshotPath(example = 'basic') {
@@ -63,6 +63,18 @@ export default class DSPillsV2CO extends PageObject {
63
63
  return $$(' [data-testid="ds-pill-wrapper"]');
64
64
  }
65
65
 
66
+ static async getRemovablePills() {
67
+ return $$('.ds-pill-wrapper-removable');
68
+ }
69
+
70
+ static async getPillByLabel(label) {
71
+ return $(`[data-testid="ds-pill-wrapper"][data-label="${label}"]`);
72
+ }
73
+
74
+ static async getCloseButtonByPillLabel(label) {
75
+ return $(`[data-testid="ds-pill-wrapper"][data-label="${label}"] [data-testid="ds-pill-close-icon"]`);
76
+ }
77
+
66
78
  static async getFloatingWrapper() {
67
79
  return $('[data-testid="ds-floating-wrapper-root"]');
68
80
  }
@@ -0,0 +1,53 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSPillsV2CO from '../DSPillsV2CO';
3
+ import { tabStops } from '../../helpers';
4
+
5
+ // Tests for the fix delivered in PUI-17870 (missing disabled behaviour on the removable pill button,
6
+ // originally shipped with PUI-17861). Unlike `disabled`, `applyAriaDisabled` must keep the remove
7
+ // button FOCUSABLE (WCAG 2.1.1) while blocking the removal on both mouse and keyboard activation.
8
+ // The `apply-aria-disabled-test` story renders 6 aria-disabled removable pills; the first 4 tab
9
+ // stops belong to the aria-disabled tooltip buttons of the value pills above them.
10
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
11
+ describe('PUI-18841 - DSPillsV2:: aria-disabled removable pill remove button - Func', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSPillsV2CO.applyAriaDisabled.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+
17
+ it('01: should expose aria-disabled on the remove button while keeping it focusable', async () => {
18
+ const closeBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment');
19
+ await closeBtn.waitForDisplayed();
20
+
21
+ await tabStops(5);
22
+ const closeBtnFocused = await closeBtn.isFocused();
23
+
24
+ await expect(closeBtn).toHaveAttribute('aria-disabled', 'true');
25
+ // aria-disabled must NOT fall back to the native disabled attribute
26
+ await expect(closeBtn).toBeEnabled();
27
+ await expect(closeBtn).toHaveAttribute('tabindex', '0');
28
+ await expect(closeBtnFocused).toEqual(true);
29
+ });
30
+
31
+ it('02: should not remove the pill when Enter or Space is pressed on the remove button', async () => {
32
+ await browser.keys(Key.Enter);
33
+ const removableAfterEnter = (await DSPillsV2CO.getRemovablePills()).length;
34
+
35
+ await browser.keys(Key.Space);
36
+ const removableAfterSpace = (await DSPillsV2CO.getRemovablePills()).length;
37
+
38
+ await expect(removableAfterEnter).toEqual(6);
39
+ await expect(removableAfterSpace).toEqual(6);
40
+ });
41
+
42
+ it('03: should not remove the pill when the remove button is clicked', async () => {
43
+ const closeBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment');
44
+ await closeBtn.click();
45
+
46
+ const pill = await DSPillsV2CO.getPillByLabel('Value segment');
47
+ const removablePills = await DSPillsV2CO.getRemovablePills();
48
+
49
+ await expect(pill).toBeExisting();
50
+ await expect(removablePills.length).toEqual(6);
51
+ });
52
+ });
53
+ }
@@ -0,0 +1,26 @@
1
+ import DSPillsV2CO from '../DSPillsV2CO';
2
+ import { mouseOver } from '../../helpers';
3
+
4
+ // Tests for the fix delivered in PUI-17870 (missing icon color and hover style on the removable pill
5
+ // button, originally shipped with PUI-17861). An `applyAriaDisabled` removable pill must render a
6
+ // dimmed remove icon and must NOT paint the hover background that an enabled one does.
7
+ // Applitools Eyes is used instead of Percy on purpose: Percy serializes the DOM and re-renders it
8
+ // without a pointer, so a CSS-only `:hover` state would be lost from the snapshot.
9
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
10
+ describe('PUI-18842 - DSPillsV2:: aria-disabled removable pill remove button hover - Visual', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSPillsV2CO.applyAriaDisabled.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should keep the aria-disabled remove button dimmed with no hover background', async () => {
17
+ await browser.eyesOpen();
18
+ const closeBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment');
19
+ await closeBtn.waitForDisplayed();
20
+ await mouseOver(closeBtn);
21
+ const snapshotName = 'pills-v2-aria-disabled-remove-hover';
22
+ const snapshot = await browser.eyesCheckSnapshot(DSPillsV2CO.snapshotPath(snapshotName));
23
+ await expect(snapshot).toEqual(0);
24
+ });
25
+ });
26
+ }
@@ -0,0 +1,53 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSPillsV2CO from '../DSPillsV2CO';
3
+ import { tabStops } from '../../helpers';
4
+
5
+ // Tests for the fix delivered in PUI-17870 (missing disabled behaviour on the removable pill button,
6
+ // originally shipped with PUI-17861). A removable pill rendered with `disabled` must expose a
7
+ // natively disabled remove button: out of the tab order, unreachable via ArrowRight, and unable to
8
+ // remove the pill. The `removable-pill-test` story renders 6 pills where the last one
9
+ // ("Value segment 3") is the disabled one.
10
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
11
+ describe('PUI-18839 - DSPillsV2:: disabled removable pill remove button - Func', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSPillsV2CO.removableURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+
17
+ it('01: should keep the disabled remove button unfocusable via Tab and ArrowRight', async () => {
18
+ const disabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 3');
19
+ await disabledCloseBtn.waitForDisplayed();
20
+ const lastEnabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 2');
21
+ const resetBtn = await DSPillsV2CO.getResetBtn();
22
+
23
+ // 5 Tab stops reach the remove button of the last ENABLED pill
24
+ await tabStops(5);
25
+ const enabledFocusedAfterTabs = await lastEnabledCloseBtn.isFocused();
26
+
27
+ // ArrowRight cannot move focus onto the disabled remove button, so focus stays where it was
28
+ await browser.keys(Key.ArrowRight);
29
+ const enabledFocusedAfterArrowRight = await lastEnabledCloseBtn.isFocused();
30
+
31
+ // Tab skips the disabled remove button entirely and lands on the Reset button
32
+ await browser.keys(Key.Tab);
33
+ const resetFocusedAfterTab = await resetBtn.isFocused();
34
+
35
+ await expect(disabledCloseBtn).toBeDisabled();
36
+ await expect(disabledCloseBtn).toHaveAttribute('tabindex', '-1');
37
+ await expect(enabledFocusedAfterTabs).toEqual(true);
38
+ await expect(enabledFocusedAfterArrowRight).toEqual(true);
39
+ await expect(resetFocusedAfterTab).toEqual(true);
40
+ });
41
+
42
+ it('02: should not remove the disabled pill when its remove button is clicked', async () => {
43
+ const disabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 3');
44
+ await disabledCloseBtn.click();
45
+
46
+ const disabledPill = await DSPillsV2CO.getPillByLabel('Value segment 3');
47
+ const pills = await DSPillsV2CO.getPills();
48
+
49
+ await expect(disabledPill).toBeExisting();
50
+ await expect(pills.length).toEqual(6);
51
+ });
52
+ });
53
+ }
@@ -0,0 +1,33 @@
1
+ import DSPillsV2CO from '../DSPillsV2CO';
2
+ import { mouseOver } from '../../helpers';
3
+
4
+ // Tests for the fix delivered in PUI-17870 (missing icon color and hover style on the removable pill
5
+ // button, originally shipped with PUI-17861). A `disabled` removable pill must render a dimmed remove
6
+ // icon and must NOT paint the hover background that an enabled one does.
7
+ // Applitools Eyes is used instead of Percy on purpose: Percy serializes the DOM and re-renders it
8
+ // without a pointer, so a CSS-only `:hover` state would be lost from the snapshot.
9
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
10
+ describe('PUI-18840 - DSPillsV2:: disabled removable pill remove button hover - Visual', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSPillsV2CO.removableURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should paint the hover background on an enabled remove button', async () => {
17
+ await browser.eyesOpen();
18
+ const enabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 2');
19
+ await enabledCloseBtn.waitForDisplayed();
20
+ await mouseOver(enabledCloseBtn);
21
+ const snapshot = await browser.eyesCheckSnapshot(DSPillsV2CO.snapshotPath('pills-v2-remove-hover-enabled'));
22
+ await expect(snapshot).toEqual(0);
23
+ });
24
+
25
+ it('02: should keep the disabled remove button dimmed with no hover background', async () => {
26
+ await browser.eyesOpen();
27
+ const disabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 3');
28
+ await mouseOver(disabledCloseBtn);
29
+ const snapshot = await browser.eyesCheckSnapshot(DSPillsV2CO.snapshotPath('pills-v2-remove-hover-disabled'));
30
+ await expect(snapshot).toEqual(0);
31
+ });
32
+ });
33
+ }
@@ -1,3 +1,4 @@
1
+ /* eslint-disable wdio/no-pause */
1
2
  import DSProgressIndicatorCO from './DSProgressIndicatorCO';
2
3
  import { axeCoreCheck } from '../helpers';
3
4
 
@@ -14,6 +15,7 @@ if (
14
15
  });
15
16
  it('01: should display basic progress indicator and pass axe-core', async () => {
16
17
  await (await DSProgressIndicatorCO.getUploadLabel()).waitForDisplayed();
18
+ await browser.pause(500);
17
19
  const result = await axeCoreCheck();
18
20
  expect(result.length).toBe(0);
19
21
  });
@@ -12,7 +12,7 @@ export default class DSProgressIndicatorCO extends PageObject {
12
12
  }
13
13
 
14
14
  static async getUploadLabel() {
15
- return $('//div[contains(text(), "upload")]');
15
+ return $('//span[contains(text(), "upload")]');
16
16
  }
17
17
 
18
18
  // Snapshots
@@ -8,22 +8,22 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
8
8
  const errorOnGo = await DSQueryBuilderCO.dateRangeV2.go();
9
9
  if (errorOnGo) throw errorOnGo;
10
10
  });
11
- it('should be displayed date range inputs empties', async () => {
11
+ it('01: should be displayed date range inputs empties', async () => {
12
12
  await (await DSQueryBuilderCO.getDatePickerBtn()).waitForDisplayed();
13
- const snapshot = await browser.checkSnapshot(DSQueryBuilderCO.snapshotPath('qb-date-range-empty'));
13
+ const snapshot = await browser.percyCheckScreenshot();
14
14
  await expect(snapshot).toEqual(0);
15
15
  });
16
- it('should be displayed calendar opened and range selected', async () => {
16
+ it('should be displayed date range inputs filled', async () => {
17
17
  await (await DSQueryBuilderCO.getDatePickerBtn()).click();
18
18
  await (await DSQueryBuilderCO.getDate(12)).waitForDisplayed();
19
19
  await (await DSQueryBuilderCO.getDate(12)).click();
20
20
  await (await DSQueryBuilderCO.getDate(16)).click();
21
- const snapshot = await browser.checkSnapshot(DSQueryBuilderCO.snapshotPath('qb-date-range-calendar-opened'));
21
+ const snapshot = await browser.percyCheckScreenshot();
22
22
  await expect(snapshot).toEqual(0);
23
23
  });
24
- it('should be displayed date range values entered', async () => {
24
+ it('03: should be displayed date range values entered', async () => {
25
25
  await (await DSQueryBuilderCO.getDatePickerBtn()).click();
26
- const snapshot = await browser.checkSnapshot(DSQueryBuilderCO.snapshotPath('qb-date-range-completed'));
26
+ const snapshot = await browser.percyCheckScreenshot();
27
27
  await expect(snapshot).toEqual(0);
28
28
  });
29
29
  });
@@ -12,6 +12,7 @@ const DSShuttleV2DataTestIds = {
12
12
  ITEM_LABEL_WRAPPER: 'ds-shuttlev2-item-label-wrapper',
13
13
  ITEM_MIDSECTION_WRAPPER: 'ds-shuttlev2-item-midsection-wrapper',
14
14
  ITEM_SELECTION: 'ds-shuttlev2-item-selection',
15
+ ITEM_SELECTION_CHECKBOX_UI: 'ds-shuttlev2-item-selection-checkbox-ui',
15
16
  ITEM_ACTIONS_WRAPPER: 'ds-shuttlev2-item-actions-wrapper',
16
17
  ITEM_ACTION_WRAPPER: 'ds-shuttlev2-item-action-wrapper',
17
18
  ITEM_ACTION_BTN: 'ds-shuttlev2-item-action-btn',
@@ -27,7 +28,6 @@ const DSShuttleV2DataTestIds = {
27
28
  MOVE_MULTIPLE_WRAPPER: 'ds-shuttlev2-move-multiple-wrapper',
28
29
  MOVE_MULTIPLE_BTN: 'ds-shuttlev2-move-multiple-btn',
29
30
  LIST_WRAPPER_MID: 'ds-shuttlev2-list-wrapper-mid',
30
- LIST_WRAPPER_MID_SCROLLER: 'ds-shuttlev2-list-wrapper-mid-scroller',
31
31
  LIST_WRAPPER_TOP: 'ds-shuttlev2-list-wrapper-top',
32
32
  AREA_SEARCH_WRAPPER: 'ds-shuttlev2-area-search-wrapper',
33
33
  AREA_SEARCH_BAR: 'ds-shuttlev2-area-search-bar',
@@ -42,6 +42,8 @@ export default class DSShuttleV2CO extends PageObject {
42
42
 
43
43
  static basicURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'basic-test');
44
44
 
45
+ static breadcrumbAccessibleURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'breadcrumb-accessible-test');
46
+
45
47
  static adHocRenderAfterBulkMove = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'ad-hoc-render-after-bulk-move');
46
48
 
47
49
  static ariaPropsUrl = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'aria-props-test');
@@ -78,6 +80,8 @@ export default class DSShuttleV2CO extends PageObject {
78
80
 
79
81
  static insideDialogURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'inside-dialog-test');
80
82
 
83
+ static explicitSelectionUIURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'explicit-selection-ui-test');
84
+
81
85
  // Getter's
82
86
 
83
87
  static getHeaderSearchIcon = async (index = 0) =>
@@ -104,6 +108,14 @@ export default class DSShuttleV2CO extends PageObject {
104
108
 
105
109
  static getItemSelection = async (index = 0) => $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION}]`)[index];
106
110
 
111
+ static getItemSelectionCheckboxUI = async (index = 0) =>
112
+ $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION_CHECKBOX_UI}]`)[index];
113
+
114
+ static getItemSelections = async () => $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION}]`);
115
+
116
+ static getItemSelectionCheckboxUIs = async () =>
117
+ $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION_CHECKBOX_UI}]`);
118
+
107
119
  static getItemsActionsWrapper = async (index = 0) =>
108
120
  $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_ACTIONS_WRAPPER}]`)[index];
109
121
 
@@ -182,6 +194,8 @@ export default class DSShuttleV2CO extends PageObject {
182
194
 
183
195
  static getBreadcrumbs = async () => $$(`[data-testid="ds-breadcrumb-link"]`);
184
196
 
197
+ static getActiveBreadcrumb = async () => $(`[data-testid="ds-breadcrumb-link"][aria-current="step"]`);
198
+
185
199
  static getSubtitleByItem = async (item) => item.$$(`p`)[1];
186
200
 
187
201
  static getActionButtonByItemAndIndex = async (item, index = 0) =>
@@ -0,0 +1,43 @@
1
+ import DSShuttleV2CO from '../DSShuttleV2CO';
2
+
3
+ // Tests for the fix introduced in PUI-17395 (ShuttleV2 breadcrumb a11y):
4
+ // every step renders as a focusable <button> and the active/current step exposes
5
+ // aria-current="step". DOM-attribute assertions are browser-agnostic, so this runs Chrome-only.
6
+ if (
7
+ (!browser.capabilities['ice:options'].isPhone &&
8
+ !browser.capabilities['ice:options'].isTablet &&
9
+ browser.capabilities.browserName === 'chrome') ||
10
+ browser.capabilities.browserName === 'Chrome'
11
+ ) {
12
+ describe('PUI-18762 - DSShuttleV2:: breadcrumb active step aria-current -Func', () => {
13
+ before(async () => {
14
+ const errorOnGo = await DSShuttleV2CO.breadcrumbAccessibleURL.go();
15
+ if (errorOnGo) throw errorOnGo;
16
+ });
17
+
18
+ it('01: active step exposes aria-current="step" and every step is a focusable button', async () => {
19
+ // Drill down two levels so the breadcrumb has multiple steps (ancestors + current)
20
+ const rootItem = await DSShuttleV2CO.getItemFromSourceByIndex(1);
21
+ await (await DSShuttleV2CO.getActionButtonByItemAndIndex(rootItem, 0)).click();
22
+ const subItem = await DSShuttleV2CO.getItemFromSourceByIndex(2);
23
+ await (await DSShuttleV2CO.getActionButtonByItemAndIndex(subItem, 0)).click();
24
+
25
+ // Gather elements/values
26
+ const crumbs = await DSShuttleV2CO.getBreadcrumbs();
27
+ const activeCrumb = await DSShuttleV2CO.getActiveBreadcrumb();
28
+ const activeCrumbTag = await activeCrumb.getTagName();
29
+ const firstCrumb = crumbs[0];
30
+ const firstCrumbTag = await firstCrumb.getTagName();
31
+
32
+ // Assertions
33
+ await expect(crumbs.length).toBeGreaterThan(1);
34
+ // The current/active step (last) is announced as the current step
35
+ await expect(activeCrumb).toBeExisting();
36
+ await expect(activeCrumb).toHaveAttribute('aria-current', 'step');
37
+ await expect(activeCrumbTag).toBe('button');
38
+ // Non-active ancestor steps are buttons without aria-current
39
+ await expect(firstCrumbTag).toBe('button');
40
+ await expect(firstCrumb).not.toHaveAttribute('aria-current');
41
+ });
42
+ });
43
+ }
@@ -0,0 +1,37 @@
1
+ import DSShuttleV2CO from '../DSShuttleV2CO';
2
+
3
+ // Tests for the WCAG 1.4.1 "Use of Color" fix introduced in PUI-15539:
4
+ // the `explicitSelectionUI` flag swaps the color-only vertical bar for an
5
+ // explicit checkbox as the per-item selection indicator.
6
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
7
+ describe('PUI-18638 - DSShuttleV2:: explicitSelectionUI checkbox indicator - func', () => {
8
+ before(async () => {
9
+ const errorOnGo = await DSShuttleV2CO.explicitSelectionUIURL.go();
10
+ if (errorOnGo) throw errorOnGo;
11
+ });
12
+
13
+ it('01: should render an explicit checkbox indicator per item and no color-only vertical bar', async () => {
14
+ const verticalBars = await DSShuttleV2CO.getItemSelections();
15
+ const checkboxUIs = await DSShuttleV2CO.getItemSelectionCheckboxUIs();
16
+ await expect(verticalBars.length).toBe(0);
17
+ await expect(checkboxUIs.length).toBeGreaterThan(0);
18
+ await expect(await DSShuttleV2CO.getItemSelectionCheckboxUI(0)).toBeExisting();
19
+ });
20
+
21
+ it('02: should check the selection indicator after selecting a selectable item', async () => {
22
+ const selectableItem = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — even index, selectable
23
+ const selectableCheckbox = await DSShuttleV2CO.getItemCheckboxByIndex(0);
24
+ await expect(await selectableCheckbox.getAttribute('aria-checked')).toBe('false');
25
+ await selectableItem.click();
26
+ await expect(await selectableCheckbox.getAttribute('aria-checked')).toBe('true');
27
+ });
28
+
29
+ it('03: should keep the selection-prevented item disabled and unchecked after click', async () => {
30
+ const preventedItem = await DSShuttleV2CO.getItemWrapper(1); // "Source 0.1" — odd index, prevented
31
+ const preventedCheckbox = await DSShuttleV2CO.getItemCheckboxByIndex(1);
32
+ await expect(await preventedCheckbox.getAttribute('aria-disabled')).toBe('true');
33
+ await preventedItem.click();
34
+ await expect(await preventedCheckbox.getAttribute('aria-checked')).toBe('false');
35
+ });
36
+ });
37
+ }