dimsum-e2e-tests 3.70.0-next.7 → 3.70.0-next.71

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 (297) hide show
  1. package/CHANGELOG.md +1079 -721
  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/creatable/DSCombobox.creatable-tooltip.func.spec.js +47 -0
  112. package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +12 -21
  113. package/ds-controlled-form/ds-combobox/disabled/DSCombobox.disabled.visual.spec.js +6 -1
  114. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
  115. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
  116. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +54 -1
  117. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
  118. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
  119. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
  120. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
  121. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
  122. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +1 -1
  123. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
  124. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
  125. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
  126. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
  127. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
  128. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
  129. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +2 -6
  130. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +1 -1
  131. package/ds-controlled-form/ds-controlled-checkbox/slots/DSControlledCheckbox.slots.func.spec.js +78 -0
  132. package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
  133. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.axe-core.func.spec.js +4 -4
  134. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js +1 -1
  135. package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +50 -1
  136. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.axe-core.func.spec.js +16 -2
  137. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.func.spec.js +37 -0
  138. package/ds-controlled-form/ds-controlled-radio/slots/DSControlledRadio.slots.func.spec.js +78 -0
  139. package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js +30 -0
  140. package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +1 -3
  141. package/ds-data-table-async/DSDataTableCO.js +187 -10
  142. package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
  143. package/ds-data-table-async/components/FilterBarCO.js +7 -0
  144. package/ds-data-table-async/components/FiltersCO.js +1 -1
  145. package/ds-data-table-async/components/HeaderCO.js +37 -1
  146. package/ds-data-table-async/dnd/DSDataTable.dnd-keyboard-scroll.func.spec.js +51 -0
  147. package/ds-data-table-async/filter-menu-close/DSDataTable.filter-menu-close.func.spec.js +77 -0
  148. package/ds-data-table-async/filter-popover-boundary/DSDataTable.filter-popover-boundary.func.spec.js +98 -0
  149. package/ds-data-table-async/filters/DSDataTable.filters-creatable-active-descendant.func.spec.js +51 -0
  150. package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +55 -0
  151. package/ds-data-table-async/filters/DSDataTable.filters.axe-core.func.spec.js +11 -9
  152. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatablemultiselect.keyboard.func.spec.js +2 -2
  153. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatableselect.keyboard.func.spec.js +2 -2
  154. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2.axe-core.func.spec.js +45 -29
  155. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.axe-core.func.spec.js +23 -0
  156. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.func.spec.js +50 -0
  157. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.visual.spec.js +21 -0
  158. package/ds-data-table-async/header-affordances/DSDataTable.header-affordances.func.spec.js +92 -0
  159. package/ds-data-table-async/helpers/getInputSelection.js +6 -0
  160. package/ds-data-table-async/helpers/index.js +1 -0
  161. package/ds-data-table-async/keyboard-scroll/DSDataTable.keyboard-scroll.func.spec.js +39 -0
  162. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
  163. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
  164. package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
  165. package/ds-data-table-async/resizable/DSDataTable.resize-min-clamp.func.spec.js +72 -0
  166. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.axe-core.func.spec.js +42 -0
  167. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +98 -0
  168. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
  169. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
  170. package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
  171. package/ds-data-table-async/toggle-cell-focus/DSDataTable.toggle-cell-enter-focus.func.spec.js +31 -0
  172. package/ds-data-table-async/vissibility/DSDataTable.vissibility.visual.spec.js +2 -0
  173. package/ds-dataviz/DSDataViz.axis.visual.spec.js +1 -2
  174. package/ds-dataviz/DSDataViz.ticks.visual.spec.js +1 -2
  175. package/ds-dataviz/DSDataVizCO.js +2 -0
  176. package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
  177. package/ds-floating-context/DSFloatingContextCO.js +10 -0
  178. package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
  179. package/ds-form-combobox-multi/DSComboboxMultiCO.js +36 -9
  180. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
  181. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
  182. package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +19 -2
  183. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
  184. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.mouse.func.spec.js +0 -2
  185. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
  186. package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
  187. package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
  188. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.func.spec.js +59 -0
  189. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.visual.spec.js +39 -0
  190. package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
  191. package/ds-form-combobox-multi/theme-font/DSComboboxMulti.theme-font.func.spec.js +38 -0
  192. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.axe-core.func.spec.js +39 -0
  193. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.func.spec.js +39 -0
  194. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.visual.spec.js +29 -0
  195. package/ds-form-combobox-single/DSComboboxSingleCO.js +25 -9
  196. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
  197. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
  198. package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
  199. package/ds-form-combobox-single/creatable/DSComboboxSingle.creatable.visual.spec.js +30 -0
  200. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
  201. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.mouse.func.spec.js +0 -2
  202. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
  203. package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
  204. package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
  205. package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
  206. package/ds-form-combobox-single/theme-font/DSComboboxSingle.theme-font.func.spec.js +34 -0
  207. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js +39 -0
  208. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.func.spec.js +39 -0
  209. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.visual.spec.js +29 -0
  210. package/ds-form-date-range-picker/DateRangePicker.axe-core.spec.js +5 -0
  211. package/ds-form-date-range-picker/DateRangePicker.functional.spec.js +80 -18
  212. package/ds-form-date-range-picker/DateRangePickerCO.js +19 -0
  213. package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +66 -0
  214. package/ds-form-date-range-picker/grouped-field-error-announcement/DateRangePicker.grouped-field-error-announcement.func.spec.js +59 -0
  215. package/ds-form-date-range-picker/picker-callbacks/DateRangePicker.picker-callbacks.func.spec.js +36 -0
  216. package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -0
  217. package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +8 -1
  218. package/ds-form-date-time-picker/date-time-full/DateTimePicker.DateTimeFull.visual.spec.js +9 -0
  219. package/ds-form-date-time-picker/partial-date-open-focus/DateTimePicker.partial-date-open-focus.func.spec.js +45 -0
  220. package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
  221. package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
  222. package/ds-form-native-select/NativeSelectCO.js +6 -0
  223. package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
  224. package/ds-form-toggle/DSToggle.func.spec.js +20 -23
  225. package/ds-form-toggle/DSToggleCO.js +11 -2
  226. package/ds-global-header/GlobalHeader.announcements.func.spec.js +27 -0
  227. package/ds-global-header/GlobalHeader.axe-core.func.spec.js +15 -15
  228. package/ds-global-header/GlobalHeader.func.spec.js +70 -1
  229. package/ds-global-header/GlobalHeaderCO.js +120 -2
  230. package/ds-global-header/app-picker-passthrough/GlobalHeader.app-picker-passthrough.func.spec.js +113 -0
  231. package/ds-global-header/popup-menu-focus/GlobalHeader.popup-menu-focus.func.spec.js +63 -0
  232. package/ds-global-header/popup-menu-slots/GlobalHeader.popup-menu-slots.func.spec.js +70 -0
  233. package/ds-global-header/search-toggle-slots/GlobalHeader.search-toggle-slots.func.spec.js +118 -0
  234. package/ds-global-header/toolbar-item-attributes/GlobalHeader.toolbar-item-attributes.func.spec.js +53 -0
  235. package/ds-grid/DSGridCO.js +20 -0
  236. package/ds-grid/layout-mode/DSGrid.layout-mode.func.spec.js +51 -0
  237. package/ds-grid/layout-mode/DSGrid.layout-mode.visual.spec.js +22 -0
  238. package/ds-hooks/DSHook.UseFontSizeMedia.visual.spec.js +5 -2
  239. package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
  240. package/ds-hooks/DSHookCO.js +56 -23
  241. package/ds-hooks/useFocusStack/DSHook.useFocusStack.func.spec.js +83 -0
  242. package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +2 -0
  243. package/ds-hooks/useFocusTrap/UseFocusTrapToggle.func.spec.js +48 -0
  244. package/ds-hooks/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
  245. package/ds-menu-button/DSMenuButtonCO.js +23 -0
  246. package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
  247. package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +59 -0
  248. package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -0
  249. package/ds-modal-slide/ModalSlideCO.js +7 -0
  250. package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
  251. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.axe-core.func.spec.js +25 -0
  252. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.func.spec.js +25 -0
  253. package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +18 -0
  254. package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
  255. package/ds-page-layout/PageLayoutCO.js +4 -4
  256. package/ds-pills-v2/DSPillsV2CO.js +12 -0
  257. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.func.spec.js +53 -0
  258. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.visual.spec.js +26 -0
  259. package/ds-pills-v2/disabled/DSPills.disabled.func.spec.js +53 -0
  260. package/ds-pills-v2/disabled/DSPills.disabled.visual.spec.js +33 -0
  261. package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
  262. package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
  263. package/ds-query-builder/DSQueryBuilder.visual.spec.js +6 -6
  264. package/ds-shuttle-v2/DSShuttleV2CO.js +15 -1
  265. package/ds-shuttle-v2/breadcrumb-a11y/DSShuttleV2.breadcrumb-a11y.func.spec.js +43 -0
  266. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
  267. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +30 -0
  268. package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +8 -3
  269. package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
  270. package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
  271. package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
  272. package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
  273. package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
  274. package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
  275. package/ds-slider-v2/DSSliderV2.func.spec.js +36 -25
  276. package/ds-slider-v2/DSSliderV2CO.js +10 -0
  277. package/ds-slider-v2/min-range/DSSliderV2.min-range.func.spec.js +69 -0
  278. package/ds-tab-button/DSTabButton.func.spec.js +1 -1
  279. package/ds-tabs/DSTabsCO.js +4 -0
  280. package/ds-tabs/notification-badge/DSTabs.notification-badge.axe-core.func.spec.js +28 -0
  281. package/ds-tabs/notification-badge/DSTabs.notification-badge.func.spec.js +51 -0
  282. package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
  283. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
  284. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
  285. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
  286. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
  287. package/ds-treeview/DSTreeViewCO.js +23 -0
  288. package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
  289. package/ds-typography/DSTypographyCO.js +10 -0
  290. package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
  291. package/package.json +150 -153
  292. package/paths.js +16 -6
  293. package/ds-card-v3/disabled/DSCardV3.disabled.visual.spec.js +0 -17
  294. package/ds-chat-tile/TileCO.js +0 -35
  295. package/ds-hooks/DSHook.func.spec.js +0 -60
  296. package/ds-hooks/useFocusStack/DSHook.useFocusStack.skipped.js +0 -57
  297. package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
@@ -0,0 +1,56 @@
1
+ import { Key } from 'webdriverio';
2
+ import { mouseOver } from '../../../helpers';
3
+ import DSControlledCheckboxCO from '../DSControlledCheckboxCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-18822 - DSControlledCheckbox: update to latest spec and typography- visual test', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSControlledCheckboxCO.basicURL.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+
12
+ it('01: the checked checkbox is not focused', async () => {
13
+ const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
14
+ await checkbox.waitForExist();
15
+ const snapshot = await browser.percyCheckScreenshot();
16
+ await expect(snapshot).toEqual(0);
17
+ });
18
+
19
+ it('02: checkbox hover even when checked', async () => {
20
+ const controlBox = await DSControlledCheckboxCO.getCheckboxInputWrapper();
21
+ await controlBox.moveTo();
22
+ const snapshot = await browser.percyCheckScreenshot();
23
+ await expect(snapshot).toEqual(0);
24
+ });
25
+
26
+ it('03: the checked checkbox is focused', async () => {
27
+ await browser.keys(Key.Tab);
28
+ const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
29
+ await expect(checkbox).toBeFocused();
30
+ const snapshot = await browser.percyCheckScreenshot();
31
+ await expect(snapshot).toEqual(0);
32
+ });
33
+
34
+ it('04: checkbox is focused but unchecked', async () => {
35
+ await browser.keys(Key.Space);
36
+ const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
37
+ await expect(checkbox).toBeFocused();
38
+ const snapshot = await browser.percyCheckScreenshot();
39
+ await expect(snapshot).toEqual(0);
40
+ });
41
+
42
+ it('05: checkbox not focused, not hovered when unchecked', async () => {
43
+ await browser.keys(Key.Tab);
44
+ await mouseOver(null, 400, 300);
45
+ const snapshot = await browser.percyCheckScreenshot();
46
+ await expect(snapshot).toEqual(0);
47
+ });
48
+
49
+ it('06: checkbox hover even when unchecked', async () => {
50
+ const controlBox = await DSControlledCheckboxCO.getCheckboxInputWrapper();
51
+ await controlBox.moveTo();
52
+ const snapshot = await browser.percyCheckScreenshot();
53
+ await expect(snapshot).toEqual(0);
54
+ });
55
+ });
56
+ }
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_E2E_CHECKBOX } from '../../paths';
2
+ import { PATH_E2E_CHECKBOX, PATH_E2E_CHECKBOX_SLOTS } from '../../paths';
3
3
  import { PageObject, Urlbuilder, getElementByIndex } from '../../helpers';
4
4
 
5
5
  export default class DSControlledCheckboxCO extends PageObject {
@@ -23,10 +23,18 @@ export default class DSControlledCheckboxCO extends PageObject {
23
23
 
24
24
  static applyAriaDisabled = new Urlbuilder(PATH_E2E_CHECKBOX, 'apply-aria-disabled-test');
25
25
 
26
+ static themeFontURL = new Urlbuilder(PATH_E2E_CHECKBOX, 'theme-font-family-test');
27
+
28
+ static slotsTest = new Urlbuilder(PATH_E2E_CHECKBOX_SLOTS, 'slots-test');
29
+
26
30
  static async getCheckbox() {
27
31
  return $('[data-testid="ds-checkbox"]');
28
32
  }
29
33
 
34
+ static async getCheckboxInputWrapper() {
35
+ return $('[data-testid="ds-checkbox-input-wrapper"]');
36
+ }
37
+
30
38
  static async getCustomCheckbox() {
31
39
  return $('[data-testid="custom-data-testid"]');
32
40
  }
@@ -66,4 +74,49 @@ export default class DSControlledCheckboxCO extends PageObject {
66
74
  static snapshotPath(example = 'basic') {
67
75
  return PageObject.getSnapshotPathBuilder('DSControlledCheckbox', example, 'ds-controlled-checkbox');
68
76
  }
77
+
78
+ static async getThemedCheckboxLabel() {
79
+ return $('[data-testid="theme-font-sentinel"] [data-testid="ds-checkbox-label-typography"]');
80
+ }
81
+
82
+ static async getFallbackCheckboxLabel() {
83
+ return $('[data-testid="theme-font-fallback"] [data-testid="ds-checkbox-label-typography"]');
84
+ }
85
+
86
+ // Slots rendered through styled(DSTypography) expose the owner slot on
87
+ // `data-dimsum-parent-slot` (the element's own `data-dimsum-slot` is the typography root),
88
+ // while plain-tag slots expose it on `data-dimsum-slot`.
89
+ static async getSlotsRoot() {
90
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxRoot"]');
91
+ }
92
+
93
+ static async getSlotsInputWrapper() {
94
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxInputWrapper"]');
95
+ }
96
+
97
+ static async getSlotsInput() {
98
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxInput"]');
99
+ }
100
+
101
+ static async getSlotsLabel() {
102
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxLabel"]');
103
+ }
104
+
105
+ static async getSlotsLabelTypography() {
106
+ return $('[data-testid="slots-wrapped"] [data-dimsum-parent-slot="dsCheckboxLabelTypography"]');
107
+ }
108
+
109
+ static async getSlotsTruncatedLabel() {
110
+ return $('[data-testid="slots-truncated"] [data-dimsum-parent-slot="dsCheckboxTruncatedLabel"]');
111
+ }
112
+
113
+ // The truncation tooltip renders through a portal, outside the story wrapper, so both tooltip
114
+ // slots are queried document-wide instead of scoped to the instance.
115
+ static async getSlotsTooltipContainer() {
116
+ return $('[data-dimsum-slot="dsCheckboxTooltipContainer"]');
117
+ }
118
+
119
+ static async getSlotsTooltipText() {
120
+ return $('[data-dimsum-parent-slot="dsCheckboxTooltipText"]');
121
+ }
69
122
  }
@@ -18,7 +18,7 @@ if (
18
18
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
19
19
  await checkbox.waitForExist();
20
20
  const result = await axeCoreCheck();
21
- expect(result.length).toBe(0);
21
+ await expect(result).toHaveLength(0);
22
22
  });
23
23
  });
24
24
  }
@@ -11,7 +11,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
11
11
  const checkbox = await DSControlledCheckboxCO.getCheckboxByLabel('Group');
12
12
  await checkbox.waitForDisplayed();
13
13
  await browser.keys(Key.Tab);
14
- const snapshot = await browser.checkSnapshot(DSControlledCheckboxCO.snapshotPath('checkbox-disabled'));
14
+ const snapshot = await browser.percyCheckScreenshot();
15
15
  await expect(snapshot).toEqual(0);
16
16
  });
17
17
  });
@@ -19,24 +19,24 @@ if (
19
19
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
20
20
  await checkbox.waitForExist();
21
21
  const result = await axeCoreCheck();
22
- expect(result.length).toBe(0);
22
+ await expect(result).toHaveLength(0);
23
23
  });
24
24
  it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
25
25
  await browser.keys(Key.Tab);
26
26
  const result = await axeCoreCheck();
27
- expect(result.length).toBe(0);
27
+ await expect(result).toHaveLength(0);
28
28
  });
29
29
  it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
30
30
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
31
31
  await mouseOver(checkbox);
32
32
  const result = await axeCoreCheck();
33
- expect(result.length).toBe(0);
33
+ await expect(result).toHaveLength(0);
34
34
  });
35
35
  it('04: Evaluate checkbox accessibility with axe-core (clicked)', async () => {
36
36
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(1);
37
37
  await checkbox.click();
38
38
  const result = await axeCoreCheck();
39
- expect(result.length).toBe(0);
39
+ await expect(result).toHaveLength(0);
40
40
  });
41
41
  });
42
42
  }
@@ -1,3 +1,4 @@
1
+ import { Key } from 'webdriverio';
1
2
  import { mouseOver } from '../../../helpers';
2
3
  import DSControlledCheckboxCO from '../DSControlledCheckboxCO';
3
4
 
@@ -13,7 +14,76 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
13
14
  await checkbox1.click();
14
15
  await checkbox1.click();
15
16
  await mouseOver(checkbox2);
16
- const snapshot = await browser.checkSnapshot(DSControlledCheckboxCO.snapshotPath('checkbox-hasError'));
17
+ const snapshot = await browser.percyCheckScreenshot();
18
+ await expect(snapshot).toEqual(0);
19
+ });
20
+ });
21
+
22
+ describe('PUI-18849 - DSControlledCheckbox - hasError - Visual Test', () => {
23
+ before('loading page', async () => {
24
+ const errorOnGo = await DSControlledCheckboxCO.hasError.go();
25
+ if (errorOnGo) throw errorOnGo;
26
+ });
27
+
28
+ it('01: the partial selected checkbox is not focused', async () => {
29
+ const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
30
+ await checkbox.waitForExist();
31
+ const snapshot = await browser.percyCheckScreenshot();
32
+ await expect(snapshot).toEqual(0);
33
+ });
34
+
35
+ it('02: checkbox hover even when partial selected', async () => {
36
+ const controlBox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
37
+ await controlBox.moveTo();
38
+ const snapshot = await browser.percyCheckScreenshot();
39
+ await expect(snapshot).toEqual(0);
40
+ });
41
+
42
+ it('03: the partial selected checkbox is focused', async () => {
43
+ await browser.keys(Key.Tab);
44
+ const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
45
+ await expect(checkbox).toBeFocused();
46
+ const snapshot = await browser.percyCheckScreenshot();
47
+ await expect(snapshot).toEqual(0);
48
+ });
49
+
50
+ it('04: checkbox is focused but not selected', async () => {
51
+ await browser.keys(Key.Space);
52
+ await browser.keys(Key.Space);
53
+ const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
54
+ await expect(checkbox).toBeFocused();
55
+ const snapshot = await browser.percyCheckScreenshot();
56
+ await expect(snapshot).toEqual(0);
57
+ });
58
+
59
+ it('05: checkbox not focused, not hovered when not selected', async () => {
60
+ await browser.keys(Key.Tab);
61
+ await mouseOver(null, 400, 300);
62
+ const snapshot = await browser.percyCheckScreenshot();
63
+ await expect(snapshot).toEqual(0);
64
+ });
65
+
66
+ it('06: checkbox hover even when not selected', async () => {
67
+ const controlBox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
68
+ await controlBox.moveTo();
69
+ const snapshot = await browser.percyCheckScreenshot();
70
+ await expect(snapshot).toEqual(0);
71
+ });
72
+ it('07: the selected checkbox is focused', async () => {
73
+ await browser.keys(Key.Tab);
74
+ await browser.keys(Key.Space);
75
+ const controlBox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
76
+ await mouseOver(controlBox);
77
+ const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(2);
78
+ await expect(checkbox).toBeFocused();
79
+ const snapshot = await browser.percyCheckScreenshot();
80
+ await expect(snapshot).toEqual(0);
81
+ });
82
+ it('08: the selected checkbox is hovered', async () => {
83
+ await browser.keys(Key.Tab);
84
+ const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(2);
85
+ await mouseOver(checkbox);
86
+ const snapshot = await browser.percyCheckScreenshot();
17
87
  await expect(snapshot).toEqual(0);
18
88
  });
19
89
  });
@@ -19,24 +19,24 @@ if (
19
19
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
20
20
  await checkbox.waitForExist();
21
21
  const result = await axeCoreCheck();
22
- expect(result.length).toBe(0);
22
+ await expect(result).toHaveLength(0);
23
23
  });
24
24
  it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
25
25
  await browser.keys(Key.Tab);
26
26
  const result = await axeCoreCheck();
27
- expect(result.length).toBe(0);
27
+ await expect(result).toHaveLength(0);
28
28
  });
29
29
  it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
30
30
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
31
31
  await mouseOver(checkbox);
32
32
  const result = await axeCoreCheck();
33
- expect(result.length).toBe(0);
33
+ await expect(result).toHaveLength(0);
34
34
  });
35
35
  it('04: Evaluate checkbox accessibility with axe-core (clicked)', async () => {
36
36
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(2);
37
37
  await checkbox.click();
38
38
  const result = await axeCoreCheck();
39
- expect(result.length).toBe(0);
39
+ await expect(result).toHaveLength(0);
40
40
  });
41
41
  });
42
42
  }
@@ -12,7 +12,7 @@ describe('PUI-7100 - DSControlledCheckbox - Visual Test - mixed', () => {
12
12
  await checkbox1.click();
13
13
  await checkbox1.click();
14
14
  await mouseOver(checkbox2);
15
- const snapshot = await browser.checkSnapshot(DSControlledCheckboxCO.snapshotPath('checkbox-mixed'));
15
+ const snapshot = await browser.percyCheckScreenshot();
16
16
  await expect(snapshot).toEqual(0);
17
17
  });
18
18
  });
@@ -17,18 +17,18 @@ if (
17
17
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
18
18
  await checkbox.waitForExist();
19
19
  const result = await axeCoreCheck();
20
- expect(result.length).toBe(0);
20
+ await expect(result).toHaveLength(0);
21
21
  });
22
22
  it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
23
23
  await browser.keys(Key.Tab);
24
24
  const result = await axeCoreCheck();
25
- expect(result.length).toBe(0);
25
+ await expect(result).toHaveLength(0);
26
26
  });
27
27
  it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
28
28
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
29
29
  await mouseOver(checkbox);
30
30
  const result = await axeCoreCheck();
31
- expect(result.length).toBe(0);
31
+ await expect(result).toHaveLength(0);
32
32
  });
33
33
  });
34
34
  }
@@ -14,7 +14,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
14
14
  await checkbox1.click();
15
15
  await checkbox1.click();
16
16
  await mouseOver(checkbox2);
17
- const snapshot = await browser.eyesCheckSnapshot(DSControlledCheckboxCO.snapshotPath('checkbox-readOnly'));
17
+ const snapshot = await browser.percyCheckScreenshot();
18
18
  await expect(snapshot).toEqual(0);
19
19
  });
20
20
  });
@@ -16,7 +16,7 @@ if (
16
16
  const checkboxLabel = await DSControlledCheckboxCO.getCheckboxLabelByIndex(4);
17
17
  await mouseOver(checkboxLabel);
18
18
  const result = await axeCoreCheck();
19
- expect(result.length).toBe(0);
19
+ await expect(result).toHaveLength(0);
20
20
  });
21
21
  });
22
22
  }
@@ -11,9 +11,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
11
11
  await browser.eyesOpen();
12
12
  const checkboxLabel = await DSControlledCheckboxCO.getCheckboxLabelByIndex(4);
13
13
  await mouseOver(checkboxLabel);
14
- const snapshot = await browser.eyesCheckSnapshot(
15
- DSControlledCheckboxCO.snapshotPath('checkbox-tooltip-longword'),
16
- );
14
+ const snapshot = await browser.percyCheckScreenshot();
17
15
  await expect(snapshot).toEqual(0);
18
16
  });
19
17
  });
@@ -16,7 +16,7 @@ if (
16
16
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
17
17
  await checkbox.waitForExist();
18
18
  const result = await axeCoreCheck();
19
- expect(result.length).toBe(0);
19
+ await expect(result).toHaveLength(0);
20
20
  });
21
21
  });
22
22
  }
@@ -10,7 +10,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
10
10
  await browser.eyesOpen();
11
11
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(1);
12
12
  await checkbox.waitForExist();
13
- const snapshot = await browser.eyesCheckSnapshot(DSControlledCheckboxCO.snapshotPath('checkbox-wrapped'));
13
+ const snapshot = await browser.percyCheckScreenshot();
14
14
  await expect(snapshot).toEqual(0);
15
15
  });
16
16
  });
@@ -11,18 +11,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
11
11
  await browser.eyesOpen();
12
12
  const firstcheckbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
13
13
  await firstcheckbox.click();
14
- const snapshot = await browser.eyesCheckSnapshot(
15
- DSControlledCheckboxCO.snapshotPath('checkbox-aria-disabled-mouse'),
16
- );
14
+ const snapshot = await browser.percyCheckScreenshot();
17
15
  await expect(snapshot).toEqual(0);
18
16
  });
19
17
  it('02: The second aria-disabled checkbox should be focused - KB nav', async () => {
20
18
  await browser.eyesOpen();
21
19
  await browser.keys(Key.Tab);
22
20
  await browser.keys(Key.Enter);
23
- const snapshot = await browser.eyesCheckSnapshot(
24
- DSControlledCheckboxCO.snapshotPath('checkbox-aria-disabled-kb-nav'),
25
- );
21
+ const snapshot = await browser.percyCheckScreenshot();
26
22
  await expect(snapshot).toEqual(0);
27
23
  });
28
24
  });
@@ -18,7 +18,7 @@ if (
18
18
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(1);
19
19
  await checkbox.click();
20
20
  const result = await axeCoreCheck();
21
- await expect(result.length).toBe(0);
21
+ await expect(result).toHaveLength(0);
22
22
  });
23
23
  });
24
24
  }
@@ -0,0 +1,78 @@
1
+ import DSControlledCheckboxCO from '../DSControlledCheckboxCO';
2
+
3
+ // Slot surface added when the DSControlledCheckbox label moved to DSTypography under PUI-18774:
4
+ // label-typography, truncated-label, tooltip-container and tooltip-text. The tooltip pair only
5
+ // exists while the label is truncated AND hovered, which is why this lives in E2E rather than in
6
+ // the package's jest slot tests.
7
+ if (
8
+ (!browser.capabilities['ice:options'].isPhone &&
9
+ !browser.capabilities['ice:options'].isTablet &&
10
+ browser.capabilities.browserName === 'chrome') ||
11
+ browser.capabilities.browserName === 'Chrome'
12
+ ) {
13
+ describe('PUI-18976 - DSControlledCheckbox:: label typography and tooltip slots - Func', () => {
14
+ before('loading page', async () => {
15
+ const errorOnGo = await DSControlledCheckboxCO.slotsTest.go();
16
+ if (errorOnGo) throw errorOnGo;
17
+ });
18
+
19
+ it('01: should have custom aria-* for each rendered label slot', async () => {
20
+ const root = await DSControlledCheckboxCO.getSlotsRoot();
21
+ const inputWrapper = await DSControlledCheckboxCO.getSlotsInputWrapper();
22
+ const input = await DSControlledCheckboxCO.getSlotsInput();
23
+ const label = await DSControlledCheckboxCO.getSlotsLabel();
24
+ const labelTypography = await DSControlledCheckboxCO.getSlotsLabelTypography();
25
+ const truncatedLabel = await DSControlledCheckboxCO.getSlotsTruncatedLabel();
26
+ await expect(root).toHaveAttribute('aria-label', 'root aria');
27
+ await expect(inputWrapper).toHaveAttribute('aria-label', 'inputwrapper aria');
28
+ await expect(input).toHaveAttribute('aria-label', 'input aria');
29
+ await expect(label).toHaveAttribute('aria-label', 'label aria');
30
+ await expect(labelTypography).toHaveAttribute('aria-label', 'labeltypography aria');
31
+ await expect(truncatedLabel).toHaveAttribute('aria-label', 'truncatedlabel aria');
32
+ });
33
+
34
+ it('02: should have custom data-* for each rendered label slot', async () => {
35
+ const root = await DSControlledCheckboxCO.getSlotsRoot();
36
+ const inputWrapper = await DSControlledCheckboxCO.getSlotsInputWrapper();
37
+ const input = await DSControlledCheckboxCO.getSlotsInput();
38
+ const label = await DSControlledCheckboxCO.getSlotsLabel();
39
+ const labelTypography = await DSControlledCheckboxCO.getSlotsLabelTypography();
40
+ const truncatedLabel = await DSControlledCheckboxCO.getSlotsTruncatedLabel();
41
+ await expect(root).toHaveAttribute('data-testid', 'root data');
42
+ await expect(inputWrapper).toHaveAttribute('data-testid', 'inputwrapper data');
43
+ await expect(input).toHaveAttribute('data-testid', 'input data');
44
+ await expect(label).toHaveAttribute('data-testid', 'label data');
45
+ await expect(labelTypography).toHaveAttribute('data-testid', 'labeltypography data');
46
+ await expect(truncatedLabel).toHaveAttribute('data-testid', 'truncatedlabel data');
47
+ });
48
+
49
+ it('03: should have custom lang for each rendered label slot', async () => {
50
+ const root = await DSControlledCheckboxCO.getSlotsRoot();
51
+ const inputWrapper = await DSControlledCheckboxCO.getSlotsInputWrapper();
52
+ const input = await DSControlledCheckboxCO.getSlotsInput();
53
+ const label = await DSControlledCheckboxCO.getSlotsLabel();
54
+ const labelTypography = await DSControlledCheckboxCO.getSlotsLabelTypography();
55
+ const truncatedLabel = await DSControlledCheckboxCO.getSlotsTruncatedLabel();
56
+ await expect(root).toHaveAttribute('lang', 'ja');
57
+ await expect(inputWrapper).toHaveAttribute('lang', 'it');
58
+ await expect(input).toHaveAttribute('lang', 'de');
59
+ await expect(label).toHaveAttribute('lang', 'fr');
60
+ await expect(labelTypography).toHaveAttribute('lang', 'es');
61
+ await expect(truncatedLabel).toHaveAttribute('lang', 'pt');
62
+ });
63
+
64
+ it('04: should have custom aria-*, data-* and lang for the tooltip slots on hover', async () => {
65
+ const truncatedLabel = await DSControlledCheckboxCO.getSlotsTruncatedLabel();
66
+ await truncatedLabel.moveTo();
67
+ const tooltipContainer = await DSControlledCheckboxCO.getSlotsTooltipContainer();
68
+ await tooltipContainer.waitForDisplayed();
69
+ const tooltipText = await DSControlledCheckboxCO.getSlotsTooltipText();
70
+ await expect(tooltipContainer).toHaveAttribute('aria-label', 'tooltipcontainer aria');
71
+ await expect(tooltipContainer).toHaveAttribute('data-testid', 'tooltipcontainer data');
72
+ await expect(tooltipContainer).toHaveAttribute('lang', 'zh');
73
+ await expect(tooltipText).toHaveAttribute('aria-label', 'tooltiptext aria');
74
+ await expect(tooltipText).toHaveAttribute('data-testid', 'tooltiptext data');
75
+ await expect(tooltipText).toHaveAttribute('lang', 'ru');
76
+ });
77
+ });
78
+ }
@@ -0,0 +1,30 @@
1
+ import DSControlledCheckboxCO from '../DSControlledCheckboxCO';
2
+
3
+ // Tests the theme-driven font-family mechanism shipped under PUI-18210
4
+ // (the checkbox label renders through DSTypography, which reads theme.fonts.default,
5
+ // falling back to proxima-nova). Theme-agnostic: uses a sentinel font, never the
6
+ // dsConsumer POC theme values, so it survives any future theme change.
7
+ if (
8
+ (!browser.capabilities['ice:options'].isPhone &&
9
+ !browser.capabilities['ice:options'].isTablet &&
10
+ browser.capabilities.browserName === 'chrome') ||
11
+ browser.capabilities.browserName === 'Chrome'
12
+ ) {
13
+ describe('PUI-18799 - DSControlledCheckbox:: theme font-family wiring - Func', () => {
14
+ before('loading page', async () => {
15
+ const errorOnGo = await DSControlledCheckboxCO.themeFontURL.go();
16
+ if (errorOnGo) throw errorOnGo;
17
+ });
18
+
19
+ it('01: should read label font-family from theme with proxima-nova fallback', async () => {
20
+ const themed = await DSControlledCheckboxCO.getThemedCheckboxLabel();
21
+ await themed.waitForDisplayed();
22
+ const themedFont = (await themed.getCSSProperty('font-family')).value.toLowerCase();
23
+ await expect(themedFont).toContain('sentinelfont');
24
+
25
+ const fallback = await DSControlledCheckboxCO.getFallbackCheckboxLabel();
26
+ const fallbackFont = (await fallback.getCSSProperty('font-family')).value.toLowerCase();
27
+ await expect(fallbackFont).toContain('proxima-nova');
28
+ });
29
+ });
30
+ }
@@ -18,24 +18,24 @@ if (
18
18
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
19
19
  await checkbox.waitForExist();
20
20
  const result = await axeCoreCheck();
21
- expect(result.length).toBe(0);
21
+ await expect(result).toHaveLength(0);
22
22
  });
23
23
  it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
24
24
  await browser.keys(Key.Tab);
25
25
  const result = await axeCoreCheck();
26
- expect(result.length).toBe(0);
26
+ await expect(result).toHaveLength(0);
27
27
  });
28
28
  it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
29
29
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(10);
30
30
  await mouseOver(checkbox);
31
31
  const result = await axeCoreCheck();
32
- expect(result.length).toBe(0);
32
+ await expect(result).toHaveLength(0);
33
33
  });
34
34
  it('04: Evaluate checkbox accessibility with axe-core (clicked)', async () => {
35
35
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(10);
36
36
  await checkbox.click();
37
37
  const result = await axeCoreCheck();
38
- expect(result.length).toBe(0);
38
+ await expect(result).toHaveLength(0);
39
39
  });
40
40
  });
41
41
  }
@@ -11,7 +11,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
11
11
  await browser.eyesOpen();
12
12
  const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(1);
13
13
  await checkbox.waitForExist();
14
- const snapshot = await browser.eyesCheckSnapshot(DSControlledCheckboxCO.snapshotPath('checkbox-layout'));
14
+ const snapshot = await browser.percyCheckScreenshot();
15
15
  await expect(snapshot).toEqual(0);
16
16
  });
17
17
  });
@@ -1,4 +1,4 @@
1
- import { PATH_E2E_RADIO } from '../../paths';
1
+ import { PATH_E2E_RADIO, PATH_E2E_RADIO_SLOTS } from '../../paths';
2
2
  import { PageObject, Urlbuilder, getElementByIndex } from '../../helpers';
3
3
 
4
4
  export default class DSControlledRadioCO extends PageObject {
@@ -16,6 +16,10 @@ export default class DSControlledRadioCO extends PageObject {
16
16
 
17
17
  static wrapLabel = new Urlbuilder(PATH_E2E_RADIO, 'wrap-label');
18
18
 
19
+ static themeFontURL = new Urlbuilder(PATH_E2E_RADIO, 'theme-font-family-test');
20
+
21
+ static slotsTest = new Urlbuilder(PATH_E2E_RADIO_SLOTS, 'slots-test');
22
+
19
23
  static async getRadio() {
20
24
  return $('[data-testid="ds-radio"]');
21
25
  }
@@ -43,4 +47,49 @@ export default class DSControlledRadioCO extends PageObject {
43
47
  static snapshotPath(example = 'basic') {
44
48
  return PageObject.getSnapshotPathBuilder('DSControlledRadio', example, 'ds-controlled-radio');
45
49
  }
50
+
51
+ static async getThemedRadioLabel() {
52
+ return $('[data-testid="theme-font-sentinel"] [data-testid="ds-radio-label-typography"]');
53
+ }
54
+
55
+ static async getFallbackRadioLabel() {
56
+ return $('[data-testid="theme-font-fallback"] [data-testid="ds-radio-label-typography"]');
57
+ }
58
+
59
+ // Slots rendered through styled(DSTypography) expose the owner slot on
60
+ // `data-dimsum-parent-slot` (the element's own `data-dimsum-slot` is the typography root),
61
+ // while plain-tag slots expose it on `data-dimsum-slot`.
62
+ static async getSlotsRoot() {
63
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsRadioRoot"]');
64
+ }
65
+
66
+ static async getSlotsInputWrapper() {
67
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsRadioInputWrapper"]');
68
+ }
69
+
70
+ static async getSlotsInput() {
71
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsRadioInput"]');
72
+ }
73
+
74
+ static async getSlotsLabel() {
75
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsRadioLabel"]');
76
+ }
77
+
78
+ static async getSlotsLabelTypography() {
79
+ return $('[data-testid="slots-wrapped"] [data-dimsum-parent-slot="dsRadioLabelTypography"]');
80
+ }
81
+
82
+ static async getSlotsTruncatedLabel() {
83
+ return $('[data-testid="slots-truncated"] [data-dimsum-parent-slot="dsRadioTruncatedLabel"]');
84
+ }
85
+
86
+ // The truncation tooltip renders through a portal, outside the story wrapper, so both tooltip
87
+ // slots are queried document-wide instead of scoped to the instance.
88
+ static async getSlotsTooltipContainer() {
89
+ return $('[data-dimsum-slot="dsRadioTooltipContainer"]');
90
+ }
91
+
92
+ static async getSlotsTooltipText() {
93
+ return $('[data-dimsum-parent-slot="dsRadioTooltipText"]');
94
+ }
46
95
  }