dimsum-e2e-tests 3.62.1 → 3.70.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2238 -286
- package/ds-accordion/DSAccordion.visual.spec.js +6 -0
- package/ds-accordion/DSAccordionCO.js +15 -3
- package/ds-accordion/QA_NOTES.md +105 -0
- package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
- package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +65 -0
- package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +19 -0
- package/ds-apppicker/DSAppPickerCO.js +101 -3
- package/ds-apppicker/aria-pattern/DSAppPicker.aria-pattern.func.spec.js +100 -0
- package/ds-apppicker/basic/DSAppPicker.basic.keyboard-nav.func.spec.js +18 -7
- package/ds-apppicker/closeAfterSelection/DSAppPicker.closeAfterSelection.func.spec.js +1 -1
- package/ds-apppicker/custom-trigger-focus/DSAppPicker.custom-trigger-focus.func.spec.js +82 -0
- package/ds-apppicker/label-expansion-dismissal/DSAppPicker.label-expansion-dismissal.visual.spec.js +108 -0
- package/ds-apppicker/reflow/DSAppPicker.reflow.func.spec.js +32 -0
- package/ds-apppicker/reflow/DSAppPicker.reflow.visual.spec.js +5 -6
- package/ds-apppicker/truncation/DSAppPicker.truncation.visual.spec.js +5 -9
- package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
- package/ds-autocomplete/DSAutocompleteCO.js +36 -1
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.axe-core.func.spec.js +50 -0
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.func.spec.js +122 -0
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.visual.spec.js +48 -0
- package/ds-autocomplete/slots/DSAutocomplete.slots.func.spec.js +6 -1
- package/ds-banner/DSBanner.text-resize.visual.spec.js +5 -2
- package/ds-banner/DSBannerCO.js +4 -0
- package/ds-button-v3/DSButtonV3.aria-disabled-attribute.func.spec.js +33 -0
- package/ds-button-v3/DSButtonV3CO.js +10 -0
- package/ds-button-v3/theme-font/DSButtonV3.theme-font.func.spec.js +30 -0
- package/ds-card/DSCard.cardv2_v1.func.spec.js +54 -0
- package/ds-card/DSCard.cardv2_v1.visual.spec.js +29 -0
- package/ds-card/DSCardCO.js +50 -0
- package/ds-card/detail-slots/DSCard.detail-slots.axe-core.func.spec.js +29 -0
- package/ds-card/detail-slots/DSCard.detail-slots.func.spec.js +72 -0
- package/ds-card/detail-slots/DSCard.detail-slots.visual.spec.js +19 -0
- package/ds-card-v3/DSCardV3CO.js +93 -1
- package/ds-card-v3/accordion/DSCardV3.accordion-aria-structure.func.spec.js +41 -0
- package/ds-card-v3/accordion/DSCardV3.accordion-aria.keyboard.func.spec.js +49 -0
- package/ds-card-v3/accordion/DSCardV3.accordion.axe-core.func.spec.js +28 -0
- package/ds-card-v3/accordion/DSCardV3.accordion.visual.spec.js +4 -6
- package/ds-card-v3/action/DSCardV3.action.axe-core.func.spec.js +24 -0
- package/ds-card-v3/action/DSCardV3.action.func.spec.js +53 -0
- package/ds-card-v3/action/DSCardV3.action.visual.spec.js +28 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.axe-core.func.spec.js +42 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.func.spec.js +129 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.reorder.func.spec.js +73 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.visual.spec.js +5 -12
- package/ds-card-v3/global-attributes/DSCardV3.global-attributes.axe-core.func.spec.js +33 -0
- package/ds-card-v3/global-attributes/DSCardV3.global-attributes.visual.spec.js +20 -0
- package/ds-card-v3/multi-select/DSCardV3.multi-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.axe-core.func.spec.js +47 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.keyboard.func.spec.js +65 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.visual.spec.js +17 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.axe-core.func.spec.js +35 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.func.spec.js +53 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.visual.spec.js +18 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.axe-core.func.spec.js +34 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.func.spec.js +26 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.visual.spec.js +29 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.axe-core.func.spec.js +22 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.func.spec.js +23 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.visual.spec.js +15 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.axe-core.func.spec.js +33 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.func.spec.js +19 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.visual.spec.js +28 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.axe-core.func.spec.js +28 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.func.spec.js +36 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.visual.spec.js +3 -2
- package/ds-card-v3/single-select/DSCardV3.single-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.axe-core.func.spec.js +37 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.visual.spec.js +1 -2
- package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +1 -2
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.axe-core.func.spec.js +45 -0
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.func.spec.js +28 -0
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.visual.spec.js +35 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.axe-core.func.spec.js +35 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.func.spec.js +53 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.visual.spec.js +28 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.axe-core.func.spec.js +22 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.func.spec.js +61 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.visual.spec.js +20 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variantDisabled-non-interactive.func.spec.js +25 -0
- package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
- package/ds-chat/DSChat.visual.spec.js +4 -4
- package/ds-chat/DSChatCO.js +18 -24
- package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
- package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
- package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
- package/ds-chat/components/BubbleCO.js +46 -3
- package/ds-chat/components/CardCO.js +75 -0
- package/ds-chat/components/ComposerCO.js +6 -6
- package/ds-chat/components/FloatingButtonCO.js +5 -3
- package/ds-chat/components/HeaderCO.js +2 -2
- package/ds-chat/components/TileCO.js +82 -0
- package/ds-chat/components/index.js +3 -2
- package/ds-chat/floatingbutton/DSChat-floating-button.visual.spec.js +1 -1
- package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
- package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
- package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
- package/ds-chip/label-expansion-dismissal/DSChip.label-expansion-dismissal.visual.spec.js +84 -0
- package/ds-controlled-form/ds-combobox/DSComboboxCO.js +2 -2
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable-tooltip.func.spec.js +47 -0
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +12 -21
- package/ds-controlled-form/ds-combobox/disabled/DSCombobox.disabled.visual.spec.js +6 -1
- package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
- package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +55 -2
- package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
- package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
- package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
- package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +2 -6
- package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/slots/DSControlledCheckbox.slots.func.spec.js +78 -0
- package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
- package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.axe-core.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
- package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +50 -1
- package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.axe-core.func.spec.js +16 -2
- package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.func.spec.js +37 -0
- package/ds-controlled-form/ds-controlled-radio/slots/DSControlledRadio.slots.func.spec.js +78 -0
- package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js +30 -0
- package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +1 -3
- package/ds-data-table-async/DSDataTableCO.js +189 -12
- package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
- package/ds-data-table-async/components/FilterBarCO.js +7 -0
- package/ds-data-table-async/components/FiltersCO.js +1 -1
- package/ds-data-table-async/components/HeaderCO.js +59 -11
- package/ds-data-table-async/dnd/DSDataTable.dnd-keyboard-scroll.func.spec.js +51 -0
- package/ds-data-table-async/filter-menu-close/DSDataTable.filter-menu-close.func.spec.js +77 -0
- package/ds-data-table-async/filter-popover-boundary/DSDataTable.filter-popover-boundary.func.spec.js +98 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable-active-descendant.func.spec.js +51 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +55 -0
- package/ds-data-table-async/filters/DSDataTable.filters.axe-core.func.spec.js +11 -9
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatablemultiselect.keyboard.func.spec.js +2 -2
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatableselect.keyboard.func.spec.js +2 -2
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2.axe-core.func.spec.js +45 -29
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.func.spec.js +50 -0
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.visual.spec.js +21 -0
- package/ds-data-table-async/header-affordances/DSDataTable.header-affordances.func.spec.js +92 -0
- package/ds-data-table-async/helpers/getInputSelection.js +6 -0
- package/ds-data-table-async/helpers/index.js +1 -0
- package/ds-data-table-async/keyboard-scroll/DSDataTable.keyboard-scroll.func.spec.js +39 -0
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
- package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
- package/ds-data-table-async/resizable/DSDataTable.resize-min-clamp.func.spec.js +72 -0
- package/ds-data-table-async/resizable/DSDataTable.resizerA11y.axe-core.func.spec.js +42 -0
- package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +98 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
- package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
- package/ds-data-table-async/toggle-cell-focus/DSDataTable.toggle-cell-enter-focus.func.spec.js +31 -0
- package/ds-data-table-async/vissibility/DSDataTable.vissibility.visual.spec.js +2 -0
- package/ds-dataviz/DSDataViz.axis.visual.spec.js +1 -2
- package/ds-dataviz/DSDataViz.ticks.visual.spec.js +1 -2
- package/ds-dataviz/DSDataVizCO.js +2 -0
- package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
- package/ds-dialog/DSDialog.visual.spec.js +16 -31
- package/ds-dialog/DSDialogCO.js +58 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.axe-core.func.spec.js +27 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.func.spec.js +56 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.visual.spec.js +20 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.axe-core.func.spec.js +25 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.func.spec.js +52 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.visual.spec.js +20 -0
- package/ds-dialog/axe-core/DSDialog.accessible-form.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.basic.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.centered.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.decision.axe-core.func.spec.js +57 -0
- package/ds-dialog/axe-core/DSDialog.long-body.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.warning.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.wizard.axe-core.func.spec.js +28 -0
- package/ds-dialog/click-outside/DSDialog.click-outside.func.spec.js +31 -0
- package/ds-dialog/esc-close/DSDialog.esc-close.func.spec.js +31 -0
- package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js +46 -0
- package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.func.spec.js +50 -0
- package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.axe-core.func.spec.js +25 -0
- package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.visual.spec.js +37 -0
- package/ds-dialog/single-button-footer/DSDialog.single-button-footer.axe-core.func.spec.js +25 -0
- package/ds-dialog/single-button-footer/DSDialog.single-button-footer.visual.spec.js +20 -0
- package/ds-dialog/size-variants/DSDialog.size-variants.visual.spec.js +116 -0
- package/ds-floating-context/DSFloatingContextCO.js +10 -0
- package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +38 -11
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
- package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +19 -2
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.mouse.func.spec.js +0 -2
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
- package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
- package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.func.spec.js +59 -0
- package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.visual.spec.js +39 -0
- package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-multi/theme-font/DSComboboxMulti.theme-font.func.spec.js +38 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.axe-core.func.spec.js +39 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.func.spec.js +39 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.visual.spec.js +29 -0
- package/ds-form-combobox-single/DSComboboxSingleCO.js +27 -11
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
- package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
- package/ds-form-combobox-single/creatable/DSComboboxSingle.creatable.visual.spec.js +30 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.mouse.func.spec.js +0 -2
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
- package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
- package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-single/theme-font/DSComboboxSingle.theme-font.func.spec.js +34 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js +39 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.func.spec.js +39 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.visual.spec.js +29 -0
- package/ds-form-date-range-picker/DateRangePicker.axe-core.spec.js +5 -0
- package/ds-form-date-range-picker/DateRangePicker.functional.spec.js +80 -18
- package/ds-form-date-range-picker/DateRangePickerCO.js +19 -0
- package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +66 -0
- package/ds-form-date-range-picker/grouped-field-error-announcement/DateRangePicker.grouped-field-error-announcement.func.spec.js +59 -0
- package/ds-form-date-range-picker/picker-callbacks/DateRangePicker.picker-callbacks.func.spec.js +36 -0
- package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -0
- package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +8 -1
- package/ds-form-date-time-picker/date-time-full/DateTimePicker.DateTimeFull.visual.spec.js +9 -0
- package/ds-form-date-time-picker/partial-date-open-focus/DateTimePicker.partial-date-open-focus.func.spec.js +45 -0
- package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
- package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
- package/ds-form-native-select/NativeSelectCO.js +6 -0
- package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
- package/ds-form-toggle/DSToggle.func.spec.js +20 -23
- package/ds-form-toggle/DSToggleCO.js +11 -2
- package/ds-global-header/GlobalHeader.announcements.func.spec.js +27 -0
- package/ds-global-header/GlobalHeader.axe-core.func.spec.js +41 -11
- package/ds-global-header/GlobalHeader.func.spec.js +70 -1
- package/ds-global-header/GlobalHeader.visual.spec.js +31 -0
- package/ds-global-header/GlobalHeaderCO.js +120 -2
- package/ds-global-header/app-picker-passthrough/GlobalHeader.app-picker-passthrough.func.spec.js +113 -0
- package/ds-global-header/popup-menu-focus/GlobalHeader.popup-menu-focus.func.spec.js +63 -0
- package/ds-global-header/popup-menu-slots/GlobalHeader.popup-menu-slots.func.spec.js +70 -0
- package/ds-global-header/search-toggle-slots/GlobalHeader.search-toggle-slots.func.spec.js +118 -0
- package/ds-global-header/toolbar-item-attributes/GlobalHeader.toolbar-item-attributes.func.spec.js +53 -0
- package/ds-grid/DSGridCO.js +20 -0
- package/ds-grid/layout-mode/DSGrid.layout-mode.func.spec.js +51 -0
- package/ds-grid/layout-mode/DSGrid.layout-mode.visual.spec.js +22 -0
- package/ds-hooks/DSHook.UseFontSizeMedia.visual.spec.js +5 -2
- package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
- package/ds-hooks/DSHookCO.js +56 -23
- package/ds-hooks/useFocusStack/DSHook.useFocusStack.func.spec.js +83 -0
- package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +2 -0
- package/ds-hooks/useFocusTrap/UseFocusTrapToggle.func.spec.js +48 -0
- package/ds-hooks/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
- package/ds-leftnavigation/LeftNavigationCO.js +2 -2
- package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
- package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +19 -0
- package/ds-modal-slide/ModalSlideCO.js +46 -0
- package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
- package/ds-modal-slide/heading-level/ModalSlide.headingLevel.axe-core.func.spec.js +25 -0
- package/ds-modal-slide/heading-level/ModalSlide.headingLevel.func.spec.js +25 -0
- package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
- package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
- package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
- package/ds-page-layout/PageLayoutCO.js +4 -4
- package/ds-pills-v2/DSPillsV2CO.js +12 -0
- package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.func.spec.js +53 -0
- package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.visual.spec.js +26 -0
- package/ds-pills-v2/disabled/DSPills.disabled.func.spec.js +53 -0
- package/ds-pills-v2/disabled/DSPills.disabled.visual.spec.js +33 -0
- package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
- package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
- package/ds-query-builder/DSQueryBuilder.visual.spec.js +6 -6
- package/ds-shuttle-v2/DSShuttleV2CO.js +15 -1
- package/ds-shuttle-v2/breadcrumb-a11y/DSShuttleV2.breadcrumb-a11y.func.spec.js +43 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +30 -0
- package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +8 -3
- package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
- package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
- package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
- package/ds-slider-v2/DSSliderV2.func.spec.js +36 -25
- package/ds-slider-v2/DSSliderV2CO.js +10 -0
- package/ds-slider-v2/min-range/DSSliderV2.min-range.func.spec.js +69 -0
- package/ds-tab-button/DSTabButton.func.spec.js +1 -1
- package/ds-tabs/DSTabs.visual.spec.js +1 -2
- package/ds-tabs/DSTabsCO.js +2 -2
- package/ds-tabs/with-carousel/DSTabs.with-carousel.func.spec.js +22 -7
- package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +9 -9
- package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
- package/ds-treeview/DSTreeViewCO.js +25 -2
- package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
- package/ds-typography/DSTypographyCO.js +10 -0
- package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
- package/package.json +149 -154
- package/paths.js +12 -6
- package/ds-card-v3/disabled/DSCardV3.disabled.visual.spec.js +0 -17
- package/ds-chat-tile/TileCO.js +0 -35
- package/ds-hooks/DSHook.func.spec.js +0 -60
- package/ds-hooks/useFocusStack/DSHook.useFocusStack.skipped.js +0 -57
- package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import DSShuttleV2CO from '../DSShuttleV2CO';
|
|
2
|
+
|
|
3
|
+
// Visual coverage for the WCAG 1.4.1 "Use of Color" fix (PUI-15539): with
|
|
4
|
+
// `explicitSelectionUI`, items expose unselected, selected and disabled
|
|
5
|
+
// checkbox states as a non-color selection indicator.
|
|
6
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
+
describe('PUI-18639 - DSShuttleV2:: explicitSelectionUI checkbox indicators - visual', () => {
|
|
8
|
+
before(async () => {
|
|
9
|
+
const errorOnGo = await DSShuttleV2CO.explicitSelectionUIURL.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('01: should display unselected checkboxes and disabled checkboxes on prevented items', async () => {
|
|
14
|
+
const firstSelectable = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — selectable
|
|
15
|
+
await firstSelectable.waitForDisplayed();
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('02: should display checked checkboxes and the BAB after selecting selectable items', async () => {
|
|
21
|
+
const firstSelectable = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — selectable
|
|
22
|
+
await firstSelectable.waitForDisplayed();
|
|
23
|
+
await firstSelectable.click();
|
|
24
|
+
const secondSelectable = await DSShuttleV2CO.getItemWrapper(2); // "Source 0.2" — selectable
|
|
25
|
+
await secondSelectable.click();
|
|
26
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
27
|
+
await expect(snapshot).toEqual(0);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -51,19 +51,24 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
51
51
|
before(async () => {
|
|
52
52
|
const errorOnGo = await DSShuttleV2CO.loadMoreURL.go();
|
|
53
53
|
if (errorOnGo) throw errorOnGo;
|
|
54
|
-
await browser.maximizeWindow();
|
|
55
54
|
});
|
|
56
55
|
it('01: should move all the items a, focus jump to body panel and load more items', async () => {
|
|
57
|
-
await browser.eyesOpen();
|
|
58
56
|
const selectAllCheckbox = await DSShuttleV2CO.getCheckboxByIndex(0);
|
|
59
57
|
await selectAllCheckbox.click();
|
|
60
58
|
const bab = await DSShuttleV2CO.getMoveMultipleButton();
|
|
61
59
|
await bab.click();
|
|
60
|
+
// await browser.keys(Key.Tab);
|
|
61
|
+
// await browser.keys(Key.Return);
|
|
62
62
|
const loadMoreBtn = await DSShuttleV2CO.getSourceLoadMore();
|
|
63
63
|
await loadMoreBtn.click();
|
|
64
64
|
const firstItem = await DSShuttleV2CO.getItemFromSourceByIndex(0);
|
|
65
65
|
await firstItem.waitForDisplayed();
|
|
66
|
-
const
|
|
66
|
+
const sourcePanelBody = await DSShuttleV2CO.getListWrapperMid(0);
|
|
67
|
+
await browser.waitUntil(async () => sourcePanelBody.isFocused(), {
|
|
68
|
+
timeout: 5000,
|
|
69
|
+
timeoutMsg: 'Source panel body never received focus before snapshot',
|
|
70
|
+
});
|
|
71
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
67
72
|
await expect(snapshot).toEqual(0);
|
|
68
73
|
});
|
|
69
74
|
});
|
|
@@ -74,11 +74,13 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
74
74
|
it('01: should not move the item when the disabled move action button is clicked', async () => {
|
|
75
75
|
const testItem = await DSShuttleV2CO.getItemWrapper(1);
|
|
76
76
|
const testItemMoveBtn = await DSShuttleV2CO.getActionButtonByItemAndIndex(testItem, 1);
|
|
77
|
-
const testItemMoveBtnDisabled = await testItemMoveBtn.getAttribute('aria-disabled');
|
|
78
77
|
const testItemText = await testItem.getText();
|
|
79
78
|
await testItemMoveBtn.click();
|
|
80
79
|
await expect(testItemText).toBe('Source 0.1');
|
|
81
|
-
|
|
80
|
+
// PUI-17909: a natively disabled DSButton emits the native `disabled` attribute and
|
|
81
|
+
// intentionally omits aria-disabled (that is reserved for applyAriaDisabled). Assert the
|
|
82
|
+
// native disabled state instead of the now-absent aria-disabled.
|
|
83
|
+
await expect(testItemMoveBtn).toBeDisabled();
|
|
82
84
|
});
|
|
83
85
|
it('02: should not display the BAB when a disabled item is clicked', async () => {
|
|
84
86
|
const testItem = await DSShuttleV2CO.getItemWrapper(1);
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10774 - Shuttle V2, Load More -AxeCore.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.loadMoreURL.go();
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10775 - Shuttle V2, Filter axe-core -Func.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.filterURL.go();
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10776 - Shuttle V2, Select/deselect with disabled items -AxeCore.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.disabledItemsURL.go();
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10777 - Shuttle V2, Soft delete -AxeCore.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.softDeleteURL.go();
|
|
@@ -28,7 +28,7 @@ if (
|
|
|
28
28
|
expect(result.length).toBe(0);
|
|
29
29
|
});
|
|
30
30
|
});
|
|
31
|
-
// to be unskiped after PUI-
|
|
31
|
+
// to be unskiped after PUI-18632 is fixed
|
|
32
32
|
describe.skip('PUI-10778 - Shuttle V2, Subtitle -AxeCore.', () => {
|
|
33
33
|
before(async () => {
|
|
34
34
|
const errorOnGo = await DSShuttleV2CO.subtitleURL.go();
|
|
@@ -46,7 +46,7 @@ if (
|
|
|
46
46
|
expect(result.length).toBe(0);
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
|
-
// to be unskiped after PUI-
|
|
49
|
+
// to be unskiped after PUI-18632 is fixed
|
|
50
50
|
describe.skip('PUI-10779 - Shuttle V2, Max selected items -AxeCore.', () => {
|
|
51
51
|
before(async () => {
|
|
52
52
|
const errorOnGo = await DSShuttleV2CO.maxSelectedURL.go();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable max-statements */
|
|
2
2
|
/* eslint-disable max-lines */
|
|
3
|
-
// to be unskiped after PUI-
|
|
3
|
+
// to be unskiped after PUI-18632 is fixed
|
|
4
4
|
describe.skip('PUI-10768 - Shuttle V2, Basic -AxeCore.', () => {
|
|
5
5
|
before(async () => {
|
|
6
6
|
const errorOnGo = await DSShuttleV2CO.basicURL.go();
|
|
@@ -25,7 +25,7 @@ describe.skip('PUI-10768 - Shuttle V2, Basic -AxeCore.', () => {
|
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
// to be unskiped after PUI-
|
|
28
|
+
// to be unskiped after PUI-18632 is fixed
|
|
29
29
|
describe.skip('PUI-10770 - Shuttle V2, Tooltip with keyboard -AxeCore.', () => {
|
|
30
30
|
before(async () => {
|
|
31
31
|
const errorOnGo = await DSShuttleV2CO.customRendererURL.go();
|
|
@@ -46,7 +46,7 @@ describe.skip('PUI-10770 - Shuttle V2, Tooltip with keyboard -AxeCore.', () =>
|
|
|
46
46
|
|
|
47
47
|
// From drilldown
|
|
48
48
|
|
|
49
|
-
// to be unskiped after PUI-
|
|
49
|
+
// to be unskiped after PUI-18632 is fixed
|
|
50
50
|
describe.skip('PUI-10771 - Shuttle V2, Drill Down and NOT Keep parent -AxeCore.', () => {
|
|
51
51
|
before(async () => {
|
|
52
52
|
const errorOnGo = await DSShuttleV2CO.basicURL.go();
|
|
@@ -72,7 +72,7 @@ describe.skip('PUI-10771 - Shuttle V2, Drill Down and NOT Keep parent -AxeCore.'
|
|
|
72
72
|
expect(result.length).toBe(0);
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
|
-
// to be unskiped after PUI-
|
|
75
|
+
// to be unskiped after PUI-18632 is fixed
|
|
76
76
|
describe.skip('PUI-10772 - Shuttle V2, Drill down and keep parent -AxeCore.', () => {
|
|
77
77
|
before(async () => {
|
|
78
78
|
const errorOnGo = await DSShuttleV2CO.basicKeepParentURL.go();
|
|
@@ -92,7 +92,7 @@ describe.skip('PUI-10772 - Shuttle V2, Drill down and keep parent -AxeCore.', (
|
|
|
92
92
|
|
|
93
93
|
// From drilldown KB
|
|
94
94
|
|
|
95
|
-
// To be unskipped and steps to be added after
|
|
95
|
+
// To be unskipped and steps to be added after PUI-18632 is fixed
|
|
96
96
|
describe.skip('PUI-10109 - Shuttle V2, Drill down and keep parent, KB -Func.', () => {
|
|
97
97
|
before(async () => {
|
|
98
98
|
const errorOnGo = await DSShuttleV2CO.basicKeepParentURL.go();
|
|
@@ -105,8 +105,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
105
105
|
await expect(valueAfterChange).toEqual('75');
|
|
106
106
|
await expect(value2AfterChange).toEqual('100');
|
|
107
107
|
});
|
|
108
|
-
it
|
|
109
|
-
//
|
|
108
|
+
it('04: should move second multiple slider handler to 75 (uncomplete step backwards fromm 100)', async () => {
|
|
109
|
+
// Unskipped after PUI-12653 / PUI-12643: handlers can no longer cross, so the max handler
|
|
110
|
+
// stepping back from 100 is capped by the min handler (75) instead of landing on 25.
|
|
110
111
|
const handler = await DSSliderV2CO.getSliderThumb(1);
|
|
111
112
|
const handler2 = await DSSliderV2CO.getSliderThumb(2);
|
|
112
113
|
await browser.keys(Key.Tab);
|
|
@@ -199,35 +200,27 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
199
200
|
await expect(valueHandler1after).toEqual('25');
|
|
200
201
|
await expect(valueHandler2after).toEqual('75');
|
|
201
202
|
});
|
|
202
|
-
it('02: should
|
|
203
|
+
it('02: should stop the max handler at the min handler value (with mouse)', async () => {
|
|
204
|
+
// PUI-12643: dragging the max handler well past the min handler no longer swaps their order,
|
|
205
|
+
// the min handler acts as the limit for that direction and both end up sharing the same value.
|
|
203
206
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
204
207
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
205
|
-
await minSlider.dragAndDrop({ x: 550, y: 0 });
|
|
206
208
|
await maxSlider.dragAndDrop({ x: -1200, y: 0 });
|
|
207
209
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
208
210
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
209
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
210
|
-
await expect(valueMaxSliderAfter).toEqual('
|
|
211
|
+
await expect(valueMinSliderAfter).toEqual('25');
|
|
212
|
+
await expect(valueMaxSliderAfter).toEqual('25');
|
|
211
213
|
});
|
|
212
|
-
it('03: should
|
|
214
|
+
it('03: should separate both handlers again after they overlap (with mouse)', async () => {
|
|
215
|
+
// Both handlers share the value 25, so the pointer lands on the topmost one (the max handler).
|
|
216
|
+
// Dragging it away from the min handler must re-open the range.
|
|
213
217
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
214
218
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
215
|
-
await minSlider.dragAndDrop({ x: 900, y: 0 });
|
|
216
|
-
await maxSlider.dragAndDrop({ x: 900, y: 0 });
|
|
217
219
|
await maxSlider.dragAndDrop({ x: 900, y: 0 });
|
|
218
220
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
219
221
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
220
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
221
|
-
await expect(valueMaxSliderAfter).
|
|
222
|
-
});
|
|
223
|
-
it('04: should be to move from 100', async () => {
|
|
224
|
-
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
225
|
-
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
226
|
-
await minSlider.dragAndDrop({ x: -750, y: 0 });
|
|
227
|
-
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
228
|
-
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
229
|
-
await expect(valueMinSliderAfter).toEqual('100');
|
|
230
|
-
await expect(valueMaxSliderAfter).toEqual('50');
|
|
222
|
+
await expect(valueMinSliderAfter).toEqual('25');
|
|
223
|
+
await expect(Number(valueMaxSliderAfter)).toBeGreaterThan(Number(valueMinSliderAfter));
|
|
231
224
|
});
|
|
232
225
|
});
|
|
233
226
|
|
|
@@ -253,27 +246,45 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
253
246
|
await expect(valueHandler1after).toEqual('25');
|
|
254
247
|
await expect(valueHandler2after).toEqual('75');
|
|
255
248
|
});
|
|
256
|
-
it('02: should
|
|
249
|
+
it('02: should not let either handler cross the other one (with KB)', async () => {
|
|
250
|
+
// PUI-12643: the max handler stops on the min handler value (25) and further ArrowLeft presses
|
|
251
|
+
// are ignored; the same applies to the min handler pressing ArrowRight against the max handler.
|
|
252
|
+
// The aria-labels stay bound to their handler, so min/max never swap roles.
|
|
257
253
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
258
254
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
259
255
|
await browser.keys(Key.ArrowLeft);
|
|
260
256
|
await browser.keys(Key.ArrowLeft);
|
|
257
|
+
await browser.keys(Key.ArrowLeft);
|
|
261
258
|
await browser.keys([Key.Shift, Key.Tab]);
|
|
262
259
|
await browser.keys(Key.ArrowRight);
|
|
263
260
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
264
261
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
265
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
262
|
+
await expect(valueMinSliderAfter).toEqual('25');
|
|
266
263
|
await expect(valueMaxSliderAfter).toEqual('25');
|
|
264
|
+
await expect(minSlider).toBeFocused();
|
|
267
265
|
});
|
|
268
|
-
it('03: should
|
|
266
|
+
it('03: should move both handlers away from the upper limit (with KB)', async () => {
|
|
267
|
+
// PUI-12653: with both handlers stacked on the right-most limit the keyboard must still be able
|
|
268
|
+
// to move them, which is the accessible escape hatch the mouse does not provide.
|
|
269
269
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
270
270
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
271
271
|
await browser.keys(Key.Tab);
|
|
272
272
|
await browser.keys(Key.ArrowRight);
|
|
273
|
+
await browser.keys(Key.ArrowRight);
|
|
274
|
+
await browser.keys(Key.ArrowRight);
|
|
275
|
+
await browser.keys([Key.Shift, Key.Tab]);
|
|
276
|
+
await browser.keys(Key.ArrowRight);
|
|
277
|
+
await browser.keys(Key.ArrowRight);
|
|
278
|
+
await browser.keys(Key.ArrowRight);
|
|
279
|
+
const valueMinAtLimit = await DSSliderV2CO.getSliderValue(minSlider);
|
|
280
|
+
const valueMaxAtLimit = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
281
|
+
await expect(valueMinAtLimit).toEqual('100');
|
|
282
|
+
await expect(valueMaxAtLimit).toEqual('100');
|
|
283
|
+
await browser.keys(Key.ArrowLeft);
|
|
273
284
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
274
285
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
275
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
276
|
-
await expect(valueMaxSliderAfter).toEqual('
|
|
286
|
+
await expect(valueMinSliderAfter).toEqual('75');
|
|
287
|
+
await expect(valueMaxSliderAfter).toEqual('100');
|
|
277
288
|
});
|
|
278
289
|
});
|
|
279
290
|
|
|
@@ -9,6 +9,8 @@ export default class DSSliderCO extends PageObject {
|
|
|
9
9
|
|
|
10
10
|
static multipleURL = new Urlbuilder(PATH_E2E_SLIDER_V2, 'multiple-test');
|
|
11
11
|
|
|
12
|
+
static minRangeURL = new Urlbuilder(PATH_E2E_SLIDER_V2, 'min-range-test');
|
|
13
|
+
|
|
12
14
|
static slotsTest = new Urlbuilder(PATH_E2E_SLIDER_V2, 'slots-test');
|
|
13
15
|
|
|
14
16
|
static singleURL = new Urlbuilder(PATH_E2E_SLIDER_V2, 'single-test');
|
|
@@ -93,6 +95,14 @@ export default class DSSliderCO extends PageObject {
|
|
|
93
95
|
return $('[aria-label="Max Range slider multiple aria"]');
|
|
94
96
|
}
|
|
95
97
|
|
|
98
|
+
static async getMinRangeMinHandler() {
|
|
99
|
+
return $('[aria-label="Min Range slider minRange aria"]');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
static async getMinRangeMaxHandler() {
|
|
103
|
+
return $('[aria-label="Max Range slider minRange aria"]');
|
|
104
|
+
}
|
|
105
|
+
|
|
96
106
|
// actions
|
|
97
107
|
static async getSliderValue(sliderThumb) {
|
|
98
108
|
return sliderThumb.getAttribute('aria-valuenow');
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSSliderV2CO from '../DSSliderV2CO';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix introduced in PUI-12643 ([SliderV2] Can move a handler over the other).
|
|
5
|
+
// The fix relies on the `minRange` prop: on a multiple slider the neighbouring handler acts as the
|
|
6
|
+
// limit for that direction, so the handlers can neither cross over nor sit on top of each other.
|
|
7
|
+
// The story uses minValue 0, maxValue 100, step 25 and minRange 25, so the smallest allowed
|
|
8
|
+
// distance between both handlers is exactly one step.
|
|
9
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
|
+
describe('PUI-12646 - DSSliderV2:: multiple handlers cannot overlap with minRange - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSSliderV2CO.minRangeURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should stop the min handler one minRange away from the max handler (with KB)', async () => {
|
|
17
|
+
const minHandler = await DSSliderV2CO.getMinRangeMinHandler();
|
|
18
|
+
const maxHandler = await DSSliderV2CO.getMinRangeMaxHandler();
|
|
19
|
+
await browser.keys(Key.Tab);
|
|
20
|
+
await browser.keys(Key.ArrowRight);
|
|
21
|
+
await browser.keys(Key.ArrowRight);
|
|
22
|
+
await browser.keys(Key.ArrowRight);
|
|
23
|
+
const valueMinAtLimit = await DSSliderV2CO.getSliderValue(minHandler);
|
|
24
|
+
// the next step would put the min handler on 100, closing the range below minRange
|
|
25
|
+
await browser.keys(Key.ArrowRight);
|
|
26
|
+
const valueMinAfter = await DSSliderV2CO.getSliderValue(minHandler);
|
|
27
|
+
const valueMaxAfter = await DSSliderV2CO.getSliderValue(maxHandler);
|
|
28
|
+
await expect(valueMinAtLimit).toEqual('75');
|
|
29
|
+
await expect(valueMinAfter).toEqual('75');
|
|
30
|
+
await expect(valueMaxAfter).toEqual('100');
|
|
31
|
+
await expect(minHandler).toBeFocused();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('02: should not let the max handler close the gap below minRange (with KB)', async () => {
|
|
35
|
+
const minHandler = await DSSliderV2CO.getMinRangeMinHandler();
|
|
36
|
+
const maxHandler = await DSSliderV2CO.getMinRangeMaxHandler();
|
|
37
|
+
await browser.keys(Key.Tab);
|
|
38
|
+
await browser.keys(Key.ArrowLeft);
|
|
39
|
+
const valueMinAfter = await DSSliderV2CO.getSliderValue(minHandler);
|
|
40
|
+
const valueMaxAfter = await DSSliderV2CO.getSliderValue(maxHandler);
|
|
41
|
+
await expect(valueMinAfter).toEqual('75');
|
|
42
|
+
await expect(valueMaxAfter).toEqual('100');
|
|
43
|
+
await expect(maxHandler).toBeFocused();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('03: should move the min handler back to the start of the track (with KB)', async () => {
|
|
47
|
+
const minHandler = await DSSliderV2CO.getMinRangeMinHandler();
|
|
48
|
+
const maxHandler = await DSSliderV2CO.getMinRangeMaxHandler();
|
|
49
|
+
// the min handler travels freely while the gap allows it, leaving the range fully open
|
|
50
|
+
await browser.keys([Key.Shift, Key.Tab]);
|
|
51
|
+
await browser.keys(Key.ArrowLeft);
|
|
52
|
+
await browser.keys(Key.ArrowLeft);
|
|
53
|
+
await browser.keys(Key.ArrowLeft);
|
|
54
|
+
const valueMinAfter = await DSSliderV2CO.getSliderValue(minHandler);
|
|
55
|
+
const valueMaxAfter = await DSSliderV2CO.getSliderValue(maxHandler);
|
|
56
|
+
await expect(valueMinAfter).toEqual('0');
|
|
57
|
+
await expect(valueMaxAfter).toEqual('100');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Pointer coverage is deliberately NOT part of this describe. Dragging a handler on a multiple
|
|
61
|
+
// slider currently runs into the known defects tracked in PUI-18876: a handler sitting on the
|
|
62
|
+
// right-most position cannot be actuated with the mouse (item 2) and a drag leaves no thumb
|
|
63
|
+
// focused (item 4). Asserting around those would either encode the broken behavior or produce a
|
|
64
|
+
// test that fails for reasons unrelated to minRange.
|
|
65
|
+
// The minRange guard itself lives in the `handleOnChange` of MainContent and filters the change
|
|
66
|
+
// regardless of the input device, so the keyboard cases above fully cover the contract.
|
|
67
|
+
// Mouse dragging on a multiple slider stays covered by PUI-12328.
|
|
68
|
+
});
|
|
69
|
+
}
|
|
@@ -12,7 +12,7 @@ import DSTabButtonCO from './DSTabButtonCO';
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
*/
|
|
15
|
-
describe('PUI-XXXX - TabButton:: example test - data-testid exists', () => {
|
|
15
|
+
describe.skip('PUI-XXXX - TabButton:: example test - data-testid exists', () => {
|
|
16
16
|
before('loading page', async () => {
|
|
17
17
|
const errorOnGo = await DSTabButtonCO.basic.go();
|
|
18
18
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -95,8 +95,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
95
95
|
const lastTab = await DSTabsCO.getTab(4);
|
|
96
96
|
await lastTab.scrollIntoView();
|
|
97
97
|
await browser.pause(1000);
|
|
98
|
-
await
|
|
99
|
-
await lastTab.click();
|
|
98
|
+
await browser.execute((el) => el.click(), lastTab);
|
|
100
99
|
const snapshot = await browser.checkSnapshot(DSTabsCO.snapshotPath('tab-grid-moved2'));
|
|
101
100
|
await expect(snapshot).toEqual(0);
|
|
102
101
|
});
|
package/ds-tabs/DSTabsCO.js
CHANGED
|
@@ -112,11 +112,11 @@ export default class DSTabsCO extends PageObject {
|
|
|
112
112
|
|
|
113
113
|
static getTabListSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsTabList"]')[index];
|
|
114
114
|
|
|
115
|
-
static getTabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsTabButton"]')[index];
|
|
115
|
+
static getTabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-parent-slot="dsTabsTabButton"]')[index];
|
|
116
116
|
|
|
117
117
|
static getTabPanelSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsTabPanel"]')[index];
|
|
118
118
|
|
|
119
119
|
static getSubtabsListSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsSubtabsList"]')[index];
|
|
120
120
|
|
|
121
|
-
static getSubtabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsSubtabButton"]')[index];
|
|
121
|
+
static getSubtabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-parent-slot="dsTabsSubtabButton"]')[index];
|
|
122
122
|
}
|
|
@@ -33,9 +33,12 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
33
33
|
|
|
34
34
|
// Step 4: Scroll the tab into view (simulating scrollbar interaction)
|
|
35
35
|
await targetTab.scrollIntoView();
|
|
36
|
-
// Step 5:
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
// Step 5: Verify the tab is accessible in the DOM after scrolling.
|
|
37
|
+
// Viewport position checks (toBeDisplayedInViewport / getBoundingClientRect comparisons)
|
|
38
|
+
// are unreliable for carousel tabs: Firefox detects overflow:hidden clipping on the
|
|
39
|
+
// parent and reports elements at the carousel edge as outside the viewport even when
|
|
40
|
+
// they are interactable. toBeDisplayed() validates DOM visibility without that pitfall.
|
|
41
|
+
await expect(targetTab).toBeDisplayed();
|
|
39
42
|
});
|
|
40
43
|
|
|
41
44
|
it('04: should select a tab by clicking after scrolling', async () => {
|
|
@@ -60,8 +63,12 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
60
63
|
const firstTab = await DSTabsCO.getTab(1);
|
|
61
64
|
await firstTab.scrollIntoView();
|
|
62
65
|
|
|
63
|
-
// Step 10: Verify the first tab is
|
|
64
|
-
await
|
|
66
|
+
// Step 10: Verify the first tab is within window bounds (same rationale as test 03)
|
|
67
|
+
const isInViewport = await browser.execute((el) => {
|
|
68
|
+
const rect = el.getBoundingClientRect();
|
|
69
|
+
return rect.left >= 0 && rect.right <= window.innerWidth && rect.top >= 0 && rect.bottom <= window.innerHeight;
|
|
70
|
+
}, firstTab);
|
|
71
|
+
await expect(isInViewport).toBe(true);
|
|
65
72
|
});
|
|
66
73
|
|
|
67
74
|
it('07: should select the first tab after scrolling back', async () => {
|
|
@@ -380,9 +387,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
380
387
|
});
|
|
381
388
|
|
|
382
389
|
it('06: should click on 4th secondary tab which contains DataTable', async () => {
|
|
383
|
-
// Step 13: Click on the 4th subtab
|
|
390
|
+
// Step 13: Click on the 4th subtab via JS to bypass Firefox's carousel click interception
|
|
384
391
|
const fourthSubtab = await DSTabsCO.getSubtab(4);
|
|
385
|
-
await
|
|
392
|
+
await browser.execute((el) => el.click(), fourthSubtab);
|
|
386
393
|
|
|
387
394
|
// Step 14: Verify the 4th subtab is selected
|
|
388
395
|
const ariaSelected = await fourthSubtab.getAttribute('aria-selected');
|
|
@@ -485,6 +492,10 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
485
492
|
it('06: should press Tab to move focus to secondary tabs', async () => {
|
|
486
493
|
// Step 12: Press Tab to move focus to the subtabs list
|
|
487
494
|
await browser.keys(Key.Tab);
|
|
495
|
+
if (browser.capabilities.browserName === 'firefox') {
|
|
496
|
+
// Firefox requires an extra Tab to reach the subtab list focus target
|
|
497
|
+
await browser.keys(Key.Tab);
|
|
498
|
+
}
|
|
488
499
|
|
|
489
500
|
// Step 13: Verify focus is on the first subtab
|
|
490
501
|
const firstSubtab = await DSTabsCO.getSubtab(1);
|
|
@@ -530,6 +541,10 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
530
541
|
it('10: should press Shift+Tab to move focus back to primary tab', async () => {
|
|
531
542
|
// Step 22: Press Shift+Tab to move focus back to the primary tab
|
|
532
543
|
await browser.keys([Key.Shift, Key.Tab]);
|
|
544
|
+
if (browser.capabilities.browserName === 'firefox') {
|
|
545
|
+
// Firefox has an extra focus stop on the subtabs carousel container when exiting
|
|
546
|
+
await browser.keys([Key.Shift, Key.Tab]);
|
|
547
|
+
}
|
|
533
548
|
|
|
534
549
|
// Step 23: Verify focus is back on the third tab
|
|
535
550
|
const thirdTab = await DSTabsCO.getTab(3);
|
|
@@ -21,7 +21,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
21
21
|
it('02: should display fixed width carousel scrolled to middle tab', async () => {
|
|
22
22
|
const middleTab = await DSTabsCO.getTab(6);
|
|
23
23
|
await middleTab.scrollIntoView();
|
|
24
|
-
await
|
|
24
|
+
await browser.execute((el) => el.click(), middleTab);
|
|
25
25
|
const snapshot = await browser.percyCheckScreenshot(DSTabsCO.snapshotPath('tab-carousel-fixed-middle'));
|
|
26
26
|
await expect(snapshot).toEqual(0);
|
|
27
27
|
});
|
|
@@ -29,7 +29,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
29
29
|
it('03: should display fixed width carousel scrolled to last tab', async () => {
|
|
30
30
|
const lastTab = await DSTabsCO.getTab(12);
|
|
31
31
|
await lastTab.scrollIntoView();
|
|
32
|
-
await
|
|
32
|
+
await browser.execute((el) => el.click(), lastTab);
|
|
33
33
|
await (await DSTabsCO.getTabPanel(12)).waitForDisplayed();
|
|
34
34
|
const snapshot = await browser.percyCheckScreenshot(DSTabsCO.snapshotPath('tab-carousel-fixed-last'));
|
|
35
35
|
await expect(snapshot).toEqual(0);
|
|
@@ -38,7 +38,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
38
38
|
it('04: should display fixed width carousel scrolled back to first tab', async () => {
|
|
39
39
|
const firstTab = await DSTabsCO.getTab(1);
|
|
40
40
|
await firstTab.scrollIntoView();
|
|
41
|
-
await
|
|
41
|
+
await browser.execute((el) => el.click(), firstTab);
|
|
42
42
|
await (await DSTabsCO.getTabPanel(1)).waitForDisplayed();
|
|
43
43
|
const snapshot = await browser.percyCheckScreenshot(DSTabsCO.snapshotPath('tab-carousel-fixed-first'));
|
|
44
44
|
await expect(snapshot).toEqual(0);
|
|
@@ -61,7 +61,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
61
61
|
// Scroll to tab 10 and select it
|
|
62
62
|
const targetTab = await DSTabsCO.getTabsByIndex(9);
|
|
63
63
|
await targetTab.scrollIntoView();
|
|
64
|
-
await
|
|
64
|
+
await browser.execute((el) => el.click(), targetTab);
|
|
65
65
|
await (await DSTabsCO.getTabPanel(10)).waitForDisplayed();
|
|
66
66
|
const snapshot = await browser.percyCheckScreenshot(
|
|
67
67
|
DSTabsCO.snapshotPath('tab-carousel-integrated-scrolled-right'),
|
|
@@ -73,7 +73,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
73
73
|
// Scroll back to first tab and select it
|
|
74
74
|
const firstTab = await DSTabsCO.getTab(1);
|
|
75
75
|
await firstTab.scrollIntoView();
|
|
76
|
-
await
|
|
76
|
+
await browser.execute((el) => el.click(), firstTab);
|
|
77
77
|
await (await DSTabsCO.getTabPanel(1)).waitForDisplayed();
|
|
78
78
|
const snapshot = await browser.percyCheckScreenshot(
|
|
79
79
|
DSTabsCO.snapshotPath('tab-carousel-integrated-scrolled-back'),
|
|
@@ -84,7 +84,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
84
84
|
// Scroll to last tab and select it
|
|
85
85
|
const lastTab = await DSTabsCO.getTabsByIndex(13);
|
|
86
86
|
await lastTab.scrollIntoView();
|
|
87
|
-
await
|
|
87
|
+
await browser.execute((el) => el.click(), lastTab);
|
|
88
88
|
await (await DSTabsCO.getTabPanel(14)).waitForDisplayed();
|
|
89
89
|
const snapshot = await browser.percyCheckScreenshot(DSTabsCO.snapshotPath('tab-carousel-integrated-last-tab'));
|
|
90
90
|
await expect(snapshot).toEqual(0);
|
|
@@ -111,7 +111,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
111
111
|
// Scroll to middle subtab and select it (index 7 for middle of 15 subtabs)
|
|
112
112
|
const middleSubtab = await DSTabsCO.getSubTabsByIndex(7);
|
|
113
113
|
await middleSubtab.scrollIntoView();
|
|
114
|
-
await
|
|
114
|
+
await browser.execute((el) => el.click(), middleSubtab);
|
|
115
115
|
const snapshot = await browser.percyCheckScreenshot(DSTabsCO.snapshotPath('tab-carousel-nested-middle'));
|
|
116
116
|
await expect(snapshot).toEqual(0);
|
|
117
117
|
});
|
|
@@ -120,7 +120,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
120
120
|
// Scroll to last subtab and select it (index 14 for 15 subtabs)
|
|
121
121
|
const lastSubtab = await DSTabsCO.getSubTabsByIndex(14);
|
|
122
122
|
await lastSubtab.scrollIntoView();
|
|
123
|
-
await
|
|
123
|
+
await browser.execute((el) => el.click(), lastSubtab);
|
|
124
124
|
const snapshot = await browser.percyCheckScreenshot(DSTabsCO.snapshotPath('tab-carousel-nested-last'));
|
|
125
125
|
await expect(snapshot).toEqual(0);
|
|
126
126
|
});
|
|
@@ -129,7 +129,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
129
129
|
// Scroll back to first subtab and select it
|
|
130
130
|
const firstSubtab = await DSTabsCO.getSubtab(1);
|
|
131
131
|
await firstSubtab.scrollIntoView();
|
|
132
|
-
await
|
|
132
|
+
await browser.execute((el) => el.click(), firstSubtab);
|
|
133
133
|
const snapshot = await browser.percyCheckScreenshot(DSTabsCO.snapshotPath('tab-carousel-nested-first'));
|
|
134
134
|
await expect(snapshot).toEqual(0);
|
|
135
135
|
});
|
|
@@ -8,8 +8,12 @@ export default class DSTooltipV3CO extends PageObject {
|
|
|
8
8
|
|
|
9
9
|
static uncontrolledTestUrl = new Urlbuilder(PATH_E2E_TOOLTIP_V3, 'uncontrolled-test');
|
|
10
10
|
|
|
11
|
+
static basicTestUrl = new Urlbuilder(PATH_E2E_TOOLTIP_V3, 'basic-test');
|
|
12
|
+
|
|
11
13
|
static slotsURL = new Urlbuilder(PATH_E2E_TOOLTIP_V3, 'slots-test');
|
|
12
14
|
|
|
15
|
+
static inADialogTestUrl = new Urlbuilder(PATH_E2E_TOOLTIP_V3, 'in-a-dialog-test');
|
|
16
|
+
|
|
13
17
|
// Snapshots
|
|
14
18
|
static snapshotPath(example = 'basic') {
|
|
15
19
|
return PageObject.getSnapshotPathBuilder('TooltipV3', example);
|
|
@@ -20,10 +24,27 @@ export default class DSTooltipV3CO extends PageObject {
|
|
|
20
24
|
return $('[data-testid="ds-tooltip-v3-tooltip-text-wrapper"]');
|
|
21
25
|
}
|
|
22
26
|
|
|
27
|
+
static async getBasicTestTriggerButton() {
|
|
28
|
+
return $('button[aria-describedby="basic-tooltip"]');
|
|
29
|
+
}
|
|
30
|
+
|
|
23
31
|
static async getTooltipContentByIndex(index = 0) {
|
|
24
32
|
return $$('[data-testid="ds-tooltip-v3-tooltip-text-wrapper"] [data-testid="ds-typography-element"]')[index];
|
|
25
33
|
}
|
|
26
34
|
|
|
35
|
+
// "tooltip in a dialog" selectors (PUI-18012 dismissal mechanism)
|
|
36
|
+
static async getOpenDialogButton() {
|
|
37
|
+
return $('[data-testid="open-dialog-button"]');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static async getDialogContainer() {
|
|
41
|
+
return $('[data-testid="ds-dialog-container"]');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
static async getInADialogTriggerButton() {
|
|
45
|
+
return $('button[aria-describedby="in-a-dialog-tooltip"]');
|
|
46
|
+
}
|
|
47
|
+
|
|
27
48
|
// slot selectors
|
|
28
49
|
static async getRootSlot() {
|
|
29
50
|
return $('[data-dimsum-slot="dsTooltipv3Root"]');
|
package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import DSTooltipV3CO from '../DSTooltipV3CO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-18498 - TooltipV3:: WAI-ARIA tooltip pattern - AxeCore', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSTooltipV3CO.basicTestUrl.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should render the basic tooltip pattern and pass axe-core scan', async () => {
|
|
17
|
+
const tooltipContainer = await DSTooltipV3CO.getTooltip();
|
|
18
|
+
await tooltipContainer.waitForDisplayed();
|
|
19
|
+
const result = await axeCoreCheck();
|
|
20
|
+
expect(result.length).toBe(0);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|