dimsum-e2e-tests 3.70.0-next.6 → 3.70.0-next.60
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 +300 -0
- 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 +1 -1
- 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-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 +1 -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-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 +15 -1
- 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/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 +10 -0
- 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/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 +45 -1
- 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 +39 -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 +43 -0
- package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +92 -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/DSDataVizCO.js +2 -0
- package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
- 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 +22 -3
- 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 +15 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
- 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/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 +15 -3
- 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.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/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 +13 -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-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 +15 -15
- package/ds-global-header/GlobalHeader.func.spec.js +70 -1
- package/ds-global-header/GlobalHeaderCO.js +25 -1
- package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
- package/ds-hooks/DSHookCO.js +1 -22
- 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/DSMenuButtonCO.js +23 -0
- package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
- package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +59 -0
- package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -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-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-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 +150 -153
- package/paths.js +9 -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,72 @@
|
|
|
1
|
+
/* eslint-disable max-statements */
|
|
2
|
+
// Tests for the fix introduced in PUI-15889 (DetailCard selectable/expandable slots).
|
|
3
|
+
// Verifies consumer slot function props thread aria-label / data-testid / lang through
|
|
4
|
+
// to each DetailCard slot, including the checkbox (SELECTABLE) and chevron
|
|
5
|
+
// (EXPAND_CONTENT_BUTTON) sub-components that previously could not be addressed.
|
|
6
|
+
import DSCardCO from '../DSCardCO';
|
|
7
|
+
|
|
8
|
+
if (
|
|
9
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
10
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
11
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
12
|
+
browser.capabilities.browserName === 'Chrome'
|
|
13
|
+
) {
|
|
14
|
+
describe('PUI-18689 - Card:: DetailCard slot attribute injection - Func', () => {
|
|
15
|
+
before('loading page', async () => {
|
|
16
|
+
const errorOnGo = await DSCardCO.detailSlotsTest.go();
|
|
17
|
+
if (errorOnGo) throw errorOnGo;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('01: should have custom aria-label for each slot', async () => {
|
|
21
|
+
await (await DSCardCO.getDetailContainerSlot()).waitForDisplayed();
|
|
22
|
+
await expect(await DSCardCO.getDetailContainerSlot()).toHaveAttribute('aria-label', 'container aria');
|
|
23
|
+
await expect(await DSCardCO.getDetailTitleSlot()).toHaveAttribute('aria-label', 'title aria');
|
|
24
|
+
await expect(await DSCardCO.getDetailDescriptionSlot()).toHaveAttribute('aria-label', 'description aria');
|
|
25
|
+
await expect(await DSCardCO.getDetailSelectableSlot()).toHaveAttribute('aria-label', 'selectable aria');
|
|
26
|
+
await expect(await DSCardCO.getDetailExpandContentButtonSlot()).toHaveAttribute(
|
|
27
|
+
'aria-label',
|
|
28
|
+
'expand content button aria',
|
|
29
|
+
);
|
|
30
|
+
await expect(await DSCardCO.getDetailExpandContentSlot()).toHaveAttribute('aria-label', 'expand content aria');
|
|
31
|
+
await expect(await DSCardCO.getDetailSeparatorSlot()).toHaveAttribute('aria-label', 'separator aria');
|
|
32
|
+
await expect(await DSCardCO.getDetailRightAddonSlot()).toHaveAttribute('aria-label', 'right addon aria');
|
|
33
|
+
await expect(await DSCardCO.getDetailRightDescriptionSlot()).toHaveAttribute(
|
|
34
|
+
'aria-label',
|
|
35
|
+
'right description aria',
|
|
36
|
+
);
|
|
37
|
+
await expect(await DSCardCO.getDetailRightValueSlot()).toHaveAttribute('aria-label', 'right value aria');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('02: should have custom data-testid for each slot', async () => {
|
|
41
|
+
await expect(await DSCardCO.getDetailContainerSlot()).toHaveAttribute('data-testid', 'container data');
|
|
42
|
+
await expect(await DSCardCO.getDetailTitleSlot()).toHaveAttribute('data-testid', 'title data');
|
|
43
|
+
await expect(await DSCardCO.getDetailDescriptionSlot()).toHaveAttribute('data-testid', 'description data');
|
|
44
|
+
await expect(await DSCardCO.getDetailSelectableSlot()).toHaveAttribute('data-testid', 'selectable data');
|
|
45
|
+
await expect(await DSCardCO.getDetailExpandContentButtonSlot()).toHaveAttribute(
|
|
46
|
+
'data-testid',
|
|
47
|
+
'expand content button data',
|
|
48
|
+
);
|
|
49
|
+
await expect(await DSCardCO.getDetailExpandContentSlot()).toHaveAttribute('data-testid', 'expand content data');
|
|
50
|
+
await expect(await DSCardCO.getDetailSeparatorSlot()).toHaveAttribute('data-testid', 'separator data');
|
|
51
|
+
await expect(await DSCardCO.getDetailRightAddonSlot()).toHaveAttribute('data-testid', 'right addon data');
|
|
52
|
+
await expect(await DSCardCO.getDetailRightDescriptionSlot()).toHaveAttribute(
|
|
53
|
+
'data-testid',
|
|
54
|
+
'right description data',
|
|
55
|
+
);
|
|
56
|
+
await expect(await DSCardCO.getDetailRightValueSlot()).toHaveAttribute('data-testid', 'right value data');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('03: should have custom lang for each slot', async () => {
|
|
60
|
+
await expect(await DSCardCO.getDetailContainerSlot()).toHaveAttribute('lang', 'es');
|
|
61
|
+
await expect(await DSCardCO.getDetailTitleSlot()).toHaveAttribute('lang', 'fr');
|
|
62
|
+
await expect(await DSCardCO.getDetailDescriptionSlot()).toHaveAttribute('lang', 'de');
|
|
63
|
+
await expect(await DSCardCO.getDetailSelectableSlot()).toHaveAttribute('lang', 'it');
|
|
64
|
+
await expect(await DSCardCO.getDetailExpandContentButtonSlot()).toHaveAttribute('lang', 'pt');
|
|
65
|
+
await expect(await DSCardCO.getDetailExpandContentSlot()).toHaveAttribute('lang', 'ja');
|
|
66
|
+
await expect(await DSCardCO.getDetailSeparatorSlot()).toHaveAttribute('lang', 'nl');
|
|
67
|
+
await expect(await DSCardCO.getDetailRightAddonSlot()).toHaveAttribute('lang', 'sv');
|
|
68
|
+
await expect(await DSCardCO.getDetailRightDescriptionSlot()).toHaveAttribute('lang', 'ko');
|
|
69
|
+
await expect(await DSCardCO.getDetailRightValueSlot()).toHaveAttribute('lang', 'en');
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Tests for the fix introduced in PUI-15889 (DetailCard selectable/expandable slots).
|
|
2
|
+
// Snapshots the DetailCard with per-slot styleOverrides applied via ThemeProvider,
|
|
3
|
+
// exercising the slot theming API end to end.
|
|
4
|
+
import DSCardCO from '../DSCardCO';
|
|
5
|
+
|
|
6
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
+
describe('PUI-18690 - Card:: DetailCard slot theming - Visual', () => {
|
|
8
|
+
before(async () => {
|
|
9
|
+
const errorOnGo = await DSCardCO.detailSlotsTest.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('01: should display the detail card with slot theming overrides', async () => {
|
|
14
|
+
await (await DSCardCO.getDetailContainerSlot()).waitForDisplayed();
|
|
15
|
+
const snapshot = await browser.percyCheckScreenshot(DSCardCO.snapshotPath('detail-slot-theming'));
|
|
16
|
+
await expect(snapshot).toEqual(0);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
package/ds-card-v3/DSCardV3CO.js
CHANGED
|
@@ -7,13 +7,17 @@ export default class DSCardV3CO extends PageObject {
|
|
|
7
7
|
// URL's
|
|
8
8
|
static accordionURL = new Urlbuilder(PATH_E2E_CARD_V3, 'accordion-test');
|
|
9
9
|
|
|
10
|
+
static accordionAriaURL = new Urlbuilder(PATH_E2E_CARD_V3, 'accordion-aria-test');
|
|
11
|
+
|
|
10
12
|
static actionURL = new Urlbuilder(PATH_E2E_CARD_V3, 'action-test');
|
|
11
13
|
|
|
12
14
|
static disabledURL = new Urlbuilder(PATH_E2E_CARD_V3, 'disabled-test');
|
|
13
15
|
|
|
14
16
|
static dragAndDropURL = new Urlbuilder(PATH_E2E_CARD_V3, 'drag-and-drop-test');
|
|
15
17
|
|
|
16
|
-
static multiActionURL = new Urlbuilder(PATH_E2E_CARD_V3, '
|
|
18
|
+
static multiActionURL = new Urlbuilder(PATH_E2E_CARD_V3, 'multiple-action-test');
|
|
19
|
+
|
|
20
|
+
static multipleControlURL = new Urlbuilder(PATH_E2E_CARD_V3, 'multiple-control-test');
|
|
17
21
|
|
|
18
22
|
static multiSelectURL = new Urlbuilder(PATH_E2E_CARD_V3, 'multi-select-test');
|
|
19
23
|
|
|
@@ -29,6 +33,12 @@ export default class DSCardV3CO extends PageObject {
|
|
|
29
33
|
|
|
30
34
|
static globalAttributesURL = new Urlbuilder(PATH_E2E_CARD_V3, 'global-attributes-test');
|
|
31
35
|
|
|
36
|
+
static variantDisabledURL = new Urlbuilder(PATH_E2E_CARD_V3, 'variant-disabled-test');
|
|
37
|
+
|
|
38
|
+
static variantAccentURL = new Urlbuilder(PATH_E2E_CARD_V3, 'variant-accented-test');
|
|
39
|
+
|
|
40
|
+
static variantAccentedDisabledURL = new Urlbuilder(PATH_E2E_CARD_V3, 'variant-accented-disabled-test');
|
|
41
|
+
|
|
32
42
|
// selectors
|
|
33
43
|
static async getActionAreaByIndex(index = 0) {
|
|
34
44
|
return $$('[data-testid="ds-cardv3-action-area"]')[index];
|
|
@@ -90,6 +100,18 @@ export default class DSCardV3CO extends PageObject {
|
|
|
90
100
|
return $('[data-testid="ds-button"][aria-label="Expand Card Content"]');
|
|
91
101
|
}
|
|
92
102
|
|
|
103
|
+
static async getAccordionButton() {
|
|
104
|
+
return $('button[aria-expanded]');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
static async getGroupContainer() {
|
|
108
|
+
return $('[role="group"]');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
static async getRadioGroupContainer() {
|
|
112
|
+
return $('[role="radiogroup"]');
|
|
113
|
+
}
|
|
114
|
+
|
|
93
115
|
static async getCardHandlerByIndex(index) {
|
|
94
116
|
return $$('button[aria-label="drag and drop gripper"]')[index];
|
|
95
117
|
}
|
|
@@ -116,4 +138,74 @@ export default class DSCardV3CO extends PageObject {
|
|
|
116
138
|
static snapshotPath(example = 'basic') {
|
|
117
139
|
return PageObject.getSnapshotPathBuilder('card-v3', example);
|
|
118
140
|
}
|
|
141
|
+
|
|
142
|
+
static async getButtonByIndex(index) {
|
|
143
|
+
return $$('[data-testid="ds-button"]')[index];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
static async getCardCheckBoxByIndex(index) {
|
|
147
|
+
return $$('[data-testid="ds-checkbox"]')[index];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
static async getByRole() {
|
|
151
|
+
return $('div[role="img"][aria-label="3 new notifications"]');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
static async getElement(index) {
|
|
155
|
+
return $$('[data-testid="ds-typography-element"]')[index];
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
static async getRadioButtonByIndex(index) {
|
|
159
|
+
return $$('[data-testid="ds-radio"]')[index];
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
static async getDnDLiveRegion() {
|
|
163
|
+
return $('[id^="DndLiveRegion"]');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
static async getDnDInstructions() {
|
|
167
|
+
return $('[id^="DndDescribedBy"]');
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static async getDnDLists() {
|
|
171
|
+
return $$('[role="list"]');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
static async getDnDListByIndex(index = 0) {
|
|
175
|
+
return $$('[role="list"]')[index];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
static async getDnDListItems() {
|
|
179
|
+
return $$('[role="listitem"]');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
static async getElementById(id) {
|
|
183
|
+
return $(`#${id}`);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
static async getCardByDataId(id) {
|
|
187
|
+
return $(`[data-id="${id}"]`);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
static async getCardDataIdsByListIndex(index = 0) {
|
|
191
|
+
const list = await DSCardV3CO.getDnDListByIndex(index);
|
|
192
|
+
const cards = await list.$$('[data-id]');
|
|
193
|
+
return cards.map((card) => card.getAttribute('data-id'));
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
static async expectCardOrderInList(index, expectedOrder) {
|
|
197
|
+
let actualOrder = [];
|
|
198
|
+
await browser.waitUntil(
|
|
199
|
+
async () => {
|
|
200
|
+
actualOrder = await DSCardV3CO.getCardDataIdsByListIndex(index);
|
|
201
|
+
return JSON.stringify(actualOrder) === JSON.stringify(expectedOrder);
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
timeout: 5000,
|
|
205
|
+
timeoutMsg: `Expected list ${index} to be ordered ${JSON.stringify(expectedOrder)} but was ${JSON.stringify(
|
|
206
|
+
actualOrder,
|
|
207
|
+
)}`,
|
|
208
|
+
},
|
|
209
|
+
);
|
|
210
|
+
}
|
|
119
211
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
2
|
+
|
|
3
|
+
if (
|
|
4
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
5
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
6
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
7
|
+
browser.capabilities.browserName === 'Chrome'
|
|
8
|
+
) {
|
|
9
|
+
// Tests for the fix introduced in PUI-17887 (accordion heading/button/panel ARIA relationship)
|
|
10
|
+
describe('PUI-18597 - DSCardV3:: accordion ARIA structure - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.accordionAriaURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: button and panel have correct ARIA relationship (controls, labelledby, region, h3 container)', async () => {
|
|
17
|
+
const button = await DSCardV3CO.getAccordionButton();
|
|
18
|
+
const panelId = await button.getAttribute('aria-controls');
|
|
19
|
+
expect(panelId).toBeTruthy();
|
|
20
|
+
const panel = await $(`#${panelId}`);
|
|
21
|
+
await expect(panel).toBeExisting();
|
|
22
|
+
const labelId = await button.getAttribute('aria-labelledby');
|
|
23
|
+
expect(labelId).toBeTruthy();
|
|
24
|
+
const title = await $(`#${labelId}`);
|
|
25
|
+
await expect(title).toBeExisting();
|
|
26
|
+
await expect(panel).toHaveAttribute('role', 'region');
|
|
27
|
+
const buttonId = await button.getAttribute('id');
|
|
28
|
+
await expect(panel).toHaveAttribute('aria-labelledby', buttonId);
|
|
29
|
+
const h3 = await $('h3');
|
|
30
|
+
const buttonInsideH3 = await h3.$('button');
|
|
31
|
+
await expect(buttonInsideH3).toBeExisting();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('02: aria-expanded toggles from false to true after clicking the button', async () => {
|
|
35
|
+
const button = await DSCardV3CO.getAccordionButton();
|
|
36
|
+
await expect(button).toHaveAttribute('aria-expanded', 'false');
|
|
37
|
+
await button.click();
|
|
38
|
+
await expect(button).toHaveAttribute('aria-expanded', 'true');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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-18823 - DSCardV3:: accordion ARIA keyboard operation - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.accordionAriaURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should move focus to the accordion trigger as the first tab stop - [TAB]', async () => {
|
|
17
|
+
const trigger = await DSCardV3CO.getAccordionButton();
|
|
18
|
+
await trigger.waitForDisplayed();
|
|
19
|
+
await browser.keys(Key.Tab);
|
|
20
|
+
|
|
21
|
+
await expect(trigger).toBeFocused();
|
|
22
|
+
await expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('02: should expand the panel and keep focus on the trigger - [ENTER]', async () => {
|
|
26
|
+
const trigger = await DSCardV3CO.getAccordionButton();
|
|
27
|
+
await browser.keys(Key.Enter);
|
|
28
|
+
|
|
29
|
+
await expect(trigger).toHaveAttribute('aria-expanded', 'true');
|
|
30
|
+
await expect(trigger).toBeFocused();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('03: should collapse the panel and keep focus on the trigger - [SPACE]', async () => {
|
|
34
|
+
const trigger = await DSCardV3CO.getAccordionButton();
|
|
35
|
+
await browser.keys(Key.Space);
|
|
36
|
+
|
|
37
|
+
await expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
38
|
+
await expect(trigger).toBeFocused();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('04: should move focus from the trigger to the card actions button - [TAB]', async () => {
|
|
42
|
+
await browser.keys(Key.Tab);
|
|
43
|
+
const cardActions = await DSCardV3CO.getButtonByIndex(1);
|
|
44
|
+
|
|
45
|
+
await expect(cardActions).toBeFocused();
|
|
46
|
+
await expect(cardActions).toHaveAttribute('aria-label', 'Card actions');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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-18713 - Accordion, basic -AxeCore', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.accordionURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
it('01: should display the accordion closed and pass axecore test', async () => {
|
|
16
|
+
await (await DSCardV3CO.getAccordionButton()).waitForDisplayed();
|
|
17
|
+
const result = await axeCoreCheck();
|
|
18
|
+
await expect(result).toHaveLength(0);
|
|
19
|
+
});
|
|
20
|
+
it('02: should open the accordion and pass axecore test', async () => {
|
|
21
|
+
await (await DSCardV3CO.getAccordionButton()).click();
|
|
22
|
+
const getAccordionFirstElement = await DSCardV3CO.getElement(2);
|
|
23
|
+
await getAccordionFirstElement.waitForDisplayed();
|
|
24
|
+
const result = await axeCoreCheck();
|
|
25
|
+
await expect(result).toHaveLength(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -7,15 +7,13 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
7
7
|
if (errorOnGo) throw errorOnGo;
|
|
8
8
|
});
|
|
9
9
|
it('01: should display accordion card-v3 closed', async () => {
|
|
10
|
-
await browser.
|
|
11
|
-
const snapshot = await browser.eyesCheckSnapshot(DSCardV3CO.snapshotPath('card-v3-closed'));
|
|
10
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
12
11
|
await expect(snapshot).toEqual(0);
|
|
13
12
|
});
|
|
14
13
|
it('02: should display accordion card-v3 expanded', async () => {
|
|
15
|
-
await
|
|
16
|
-
|
|
17
|
-
await
|
|
18
|
-
const snapshot = await browser.eyesCheckSnapshot(DSCardV3CO.snapshotPath('card-v3-expanded'));
|
|
14
|
+
const accordionButton = await DSCardV3CO.getAccordionButton();
|
|
15
|
+
await accordionButton.click();
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
19
17
|
await expect(snapshot).toEqual(0);
|
|
20
18
|
});
|
|
21
19
|
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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-18803 - DSCardV3:: action button card accessibility - Axe-Core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.actionURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should have no accessibility violations', async () => {
|
|
17
|
+
const card = await DSCardV3CO.getCardContainer();
|
|
18
|
+
await card.waitForDisplayed();
|
|
19
|
+
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
await expect(result).toHaveLength(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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-18802 - DSCardV3:: action button structure and keyboard focus - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.actionURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should render the card root, header, title, subtitle and a single action button', async () => {
|
|
17
|
+
const card = await DSCardV3CO.getCardContainer();
|
|
18
|
+
await card.waitForDisplayed();
|
|
19
|
+
|
|
20
|
+
const header = await DSCardV3CO.getCardHeader();
|
|
21
|
+
await expect(header).toBeDisplayed();
|
|
22
|
+
|
|
23
|
+
const title = await DSCardV3CO.getElement(0);
|
|
24
|
+
await expect(title).toBeDisplayed();
|
|
25
|
+
await expect(title).toHaveText('Card Title');
|
|
26
|
+
await expect(await title.getTagName()).toBe('h3');
|
|
27
|
+
|
|
28
|
+
const subtitle = await DSCardV3CO.getElement(1);
|
|
29
|
+
await expect(subtitle).toBeDisplayed();
|
|
30
|
+
await expect(subtitle).toHaveText('Card Subtitle');
|
|
31
|
+
|
|
32
|
+
const deleteAction = await DSCardV3CO.getButtonByIndex(0);
|
|
33
|
+
await expect(deleteAction).toBeDisplayed();
|
|
34
|
+
await expect(deleteAction).toHaveAttribute('aria-label', 'Delete Action');
|
|
35
|
+
await expect(deleteAction).toHaveAttribute('type', 'button');
|
|
36
|
+
|
|
37
|
+
const actionButtons = await $$('[data-testid="ds-button"]');
|
|
38
|
+
await expect(actionButtons).toBeElementsArrayOfSize(1);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('02: should move focus to the action button - [TAB]', async () => {
|
|
42
|
+
await browser.keys(Key.Tab);
|
|
43
|
+
const deleteAction = await DSCardV3CO.getButtonByIndex(0);
|
|
44
|
+
await expect(deleteAction).toBeFocused();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('03: should move focus away from the action button - [SHIFT+TAB]', async () => {
|
|
48
|
+
await browser.keys([Key.Shift, Key.Tab]);
|
|
49
|
+
const deleteAction = await DSCardV3CO.getButtonByIndex(0);
|
|
50
|
+
await expect(deleteAction).not.toBeFocused();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
describe('PUI-18801 - DSCardV3:: action button card default and focus states - Visual', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSCardV3CO.actionURL.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('01: should display the card with a single action button in the header', async () => {
|
|
12
|
+
const card = await DSCardV3CO.getCardContainer();
|
|
13
|
+
await card.waitForDisplayed();
|
|
14
|
+
|
|
15
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
16
|
+
await expect(snapshot).toEqual(0);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('02: should display the action button with its focus ring - [TAB]', async () => {
|
|
20
|
+
await browser.keys(Key.Tab);
|
|
21
|
+
const deleteAction = await DSCardV3CO.getButtonByIndex(0);
|
|
22
|
+
await expect(deleteAction).toBeFocused();
|
|
23
|
+
|
|
24
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
25
|
+
await expect(snapshot).toEqual(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
3
|
+
import { axeCoreCheck } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
// axe-core coverage for the PUI-17889 accessibility fix on the CardV3 Drag and Drop example.
|
|
6
|
+
if (
|
|
7
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
8
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
9
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
10
|
+
browser.capabilities.browserName === 'Chrome'
|
|
11
|
+
) {
|
|
12
|
+
describe('PUI-18732 - DSCardV3:: Drag and Drop accessibility - axe-core', () => {
|
|
13
|
+
beforeEach('loading page', async () => {
|
|
14
|
+
const errorOnGo = await DSCardV3CO.dragAndDropURL.go();
|
|
15
|
+
if (errorOnGo) throw errorOnGo;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: should pass axe-core in the idle (resting) state', async () => {
|
|
19
|
+
const result = await axeCoreCheck();
|
|
20
|
+
await expect(result).toHaveLength(0);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('02: should pass axe-core while an item is being dragged and cancelled - [TAB][ENTER][ESC]', async () => {
|
|
24
|
+
await browser.keys(Key.Tab);
|
|
25
|
+
const handle = await DSCardV3CO.getCardHandlerByIndex(0);
|
|
26
|
+
await expect(handle).toBeFocused();
|
|
27
|
+
await browser.keys(Key.Return);
|
|
28
|
+
await browser.keys(Key.Escape);
|
|
29
|
+
const result = await axeCoreCheck();
|
|
30
|
+
await expect(result).toHaveLength(0);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('03: should pass axe-core after an item has been dropped - [TAB][ENTER][ARROWDOWN][ENTER]', async () => {
|
|
34
|
+
await browser.keys(Key.Tab);
|
|
35
|
+
await browser.keys(Key.Return);
|
|
36
|
+
await browser.keys(Key.ArrowDown);
|
|
37
|
+
await browser.keys(Key.Return);
|
|
38
|
+
const result = await axeCoreCheck();
|
|
39
|
+
await expect(result).toHaveLength(0);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import { Key } from 'webdriverio';
|
|
3
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
4
|
+
|
|
5
|
+
// Functional coverage - no interaction for the PUI-17889 accessibility fix on the CardV3 Drag and Drop example.
|
|
6
|
+
if (
|
|
7
|
+
!browser.capabilities['ice:options'].isPhone &&
|
|
8
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
9
|
+
(browser.capabilities.browserName === 'Chrome' || browser.capabilities.browserName === 'chrome')
|
|
10
|
+
) {
|
|
11
|
+
describe('PUI-18685 - DSCardV3:: Drag and Drop accessibility - Func', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSCardV3CO.dragAndDropURL.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('01: sortable containers are exposed as lists with an accessible name', async () => {
|
|
18
|
+
const lists = await DSCardV3CO.getDnDLists();
|
|
19
|
+
await expect(lists).toHaveLength(2);
|
|
20
|
+
const [backlog, inProgress] = lists;
|
|
21
|
+
await expect(backlog).toHaveAttribute('aria-labelledby', 'dnd-heading-container1');
|
|
22
|
+
await expect(inProgress).toHaveAttribute('aria-labelledby', 'dnd-heading-container2');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('02: list accessible-name targets exist and expose readable headings', async () => {
|
|
26
|
+
const backlogHeading = await DSCardV3CO.getElementById('dnd-heading-container1');
|
|
27
|
+
const inProgressHeading = await DSCardV3CO.getElementById('dnd-heading-container2');
|
|
28
|
+
await expect(backlogHeading).toBeExisting();
|
|
29
|
+
await expect(inProgressHeading).toBeExisting();
|
|
30
|
+
await expect(backlogHeading).toHaveText('Backlog');
|
|
31
|
+
await expect(inProgressHeading).toHaveText('In Progress');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('03: every card is programmatically exposed as a list item', async () => {
|
|
35
|
+
const listItems = await DSCardV3CO.getDnDListItems();
|
|
36
|
+
await expect(listItems).toHaveLength(12);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('04: drag handle exposes aria-roledescription="sortable"', async () => {
|
|
40
|
+
const handle = await DSCardV3CO.getCardHandlerByIndex(0);
|
|
41
|
+
await expect(handle).toHaveAttribute('aria-roledescription', 'sortable');
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('05: drag handle references existing, non-empty drag instructions', async () => {
|
|
45
|
+
const handle = await DSCardV3CO.getCardHandlerByIndex(0);
|
|
46
|
+
const describedBy = await handle.getAttribute('aria-describedby');
|
|
47
|
+
expect(describedBy).toContain('DndDescribedBy');
|
|
48
|
+
|
|
49
|
+
const instructions = await DSCardV3CO.getDnDInstructions();
|
|
50
|
+
await expect(instructions).toBeExisting();
|
|
51
|
+
const instructionText = await instructions.getProperty('textContent');
|
|
52
|
+
expect(instructionText).toBeTruthy();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('06: a live region is present to announce drag operations', async () => {
|
|
56
|
+
const liveRegion = await DSCardV3CO.getDnDLiveRegion();
|
|
57
|
+
await liveRegion.waitForExist();
|
|
58
|
+
await expect(liveRegion).toHaveAttribute('role', 'status');
|
|
59
|
+
await expect(liveRegion).toHaveAttribute('aria-live', 'assertive');
|
|
60
|
+
await expect(liveRegion).toHaveAttribute('aria-atomic', 'true');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Functional coverage for the PUI-17889 accessibility fix on the CardV3 Drag and Drop example.
|
|
65
|
+
describe('PUI-18730 - DSCardV3:: Drag and Drop keyboard announcements - Func', () => {
|
|
66
|
+
beforeEach('loading page', async () => {
|
|
67
|
+
const errorOnGo = await DSCardV3CO.dragAndDropURL.go();
|
|
68
|
+
if (errorOnGo) throw errorOnGo;
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('01: picking up an item sets aria-pressed - [TAB][ENTER]', async () => {
|
|
72
|
+
await browser.keys(Key.Tab);
|
|
73
|
+
const handle = await DSCardV3CO.getCardHandlerByIndex(0);
|
|
74
|
+
await expect(handle).toBeFocused();
|
|
75
|
+
await browser.keys(Key.Return);
|
|
76
|
+
await expect(handle).toHaveAttribute('aria-pressed', 'true');
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('02: moving an item announces its new position - [TAB][ENTER][ARROWDOWN]', async () => {
|
|
80
|
+
await browser.keys(Key.Tab);
|
|
81
|
+
const handle = await DSCardV3CO.getCardHandlerByIndex(0);
|
|
82
|
+
await expect(handle).toBeFocused();
|
|
83
|
+
await browser.keys(Key.Space);
|
|
84
|
+
await expect(handle).toHaveAttribute('aria-pressed', 'true');
|
|
85
|
+
await browser.keys(Key.ArrowDown);
|
|
86
|
+
const liveRegion = await DSCardV3CO.getDnDLiveRegion();
|
|
87
|
+
await browser.waitUntil(
|
|
88
|
+
async () => (await liveRegion.getProperty('textContent')).includes('was moved to position'),
|
|
89
|
+
{ timeoutMsg: 'Expected the live region to announce the new position' },
|
|
90
|
+
);
|
|
91
|
+
const announcement = await liveRegion.getProperty('textContent');
|
|
92
|
+
expect(announcement).toContain('was moved to position');
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('03: dropping an item announces the resulting position - [TAB][ENTER][ARROWDOWN][ENTER]', async () => {
|
|
96
|
+
await browser.keys(Key.Tab);
|
|
97
|
+
const handle = await DSCardV3CO.getCardHandlerByIndex(0);
|
|
98
|
+
await expect(handle).toBeFocused();
|
|
99
|
+
await browser.keys(Key.Space);
|
|
100
|
+
await expect(handle).toHaveAttribute('aria-pressed', 'true');
|
|
101
|
+
await browser.keys(Key.ArrowDown);
|
|
102
|
+
const liveRegion = await DSCardV3CO.getDnDLiveRegion();
|
|
103
|
+
await browser.keys(Key.Space);
|
|
104
|
+
await browser.waitUntil(
|
|
105
|
+
async () => (await liveRegion.getProperty('textContent')).includes('was dropped at position'),
|
|
106
|
+
{ timeoutMsg: 'Expected the live region to announce the drop' },
|
|
107
|
+
);
|
|
108
|
+
const announcement = await liveRegion.getProperty('textContent');
|
|
109
|
+
expect(announcement).toContain('was dropped at position');
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('04: cancelling a drag is announced and clears aria-pressed - [TAB][ENTER][ESCAPE]', async () => {
|
|
113
|
+
await browser.keys(Key.Tab);
|
|
114
|
+
const handle = await DSCardV3CO.getCardHandlerByIndex(0);
|
|
115
|
+
await expect(handle).toBeFocused();
|
|
116
|
+
await browser.keys(Key.Return);
|
|
117
|
+
await expect(handle).toHaveAttribute('aria-pressed', 'true');
|
|
118
|
+
await browser.keys(Key.Escape);
|
|
119
|
+
const liveRegion = await DSCardV3CO.getDnDLiveRegion();
|
|
120
|
+
await browser.waitUntil(
|
|
121
|
+
async () => (await liveRegion.getProperty('textContent')).includes('Dragging was cancelled'),
|
|
122
|
+
{ timeoutMsg: 'Expected the live region to announce the cancellation' },
|
|
123
|
+
);
|
|
124
|
+
const announcement = await liveRegion.getProperty('textContent');
|
|
125
|
+
expect(announcement).toContain('Dragging was cancelled');
|
|
126
|
+
await expect(handle).not.toHaveAttribute('aria-pressed', 'true');
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
}
|