dimsum-e2e-tests 3.70.0-next.7 → 3.70.0-next.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1079 -721
- 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/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 +54 -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/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-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 +187 -10
- 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 +37 -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 +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-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 +36 -9
- 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 +25 -9
- 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 +15 -15
- package/ds-global-header/GlobalHeader.func.spec.js +70 -1
- 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-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 +7 -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 +18 -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/DSTabsCO.js +4 -0
- package/ds-tabs/notification-badge/DSTabs.notification-badge.axe-core.func.spec.js +28 -0
- package/ds-tabs/notification-badge/DSTabs.notification-badge.func.spec.js +51 -0
- 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 +23 -0
- 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 +16 -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,29 @@
|
|
|
1
|
+
import DSComboboxMultiCO from '../DSComboboxMultiCO';
|
|
2
|
+
import DSTooltipV3CO from '../../ds-tooltip-v3/DSTooltipV3CO';
|
|
3
|
+
import { mouseOver } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
// Visual coverage for the PUI-18660 remediation: the DSTooltipV3 opened over an aria-disabled
|
|
6
|
+
// ComboboxMulti must render on top and correctly positioned (not occluded, clipped or misplaced).
|
|
7
|
+
// Occlusion/positioning regressions are invisible to func/axe (toBeDisplayed ignores stacking),
|
|
8
|
+
// so they are captured here with a Percy snapshot of the open tooltip.
|
|
9
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
|
+
describe('PUI-18817 - ComboboxMulti:: aria-disabled truncated values tooltip - Visual', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSComboboxMultiCO.withTooltip.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should render the tooltip positioned over the aria-disabled combobox', async () => {
|
|
17
|
+
const combobox = await DSComboboxMultiCO.getComboboxWrapper();
|
|
18
|
+
await mouseOver(combobox);
|
|
19
|
+
|
|
20
|
+
const tooltip = await DSTooltipV3CO.getTooltip();
|
|
21
|
+
await tooltip.waitForDisplayed();
|
|
22
|
+
|
|
23
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
24
|
+
DSComboboxMultiCO.snapshotPath('combobox-multi-aria-disabled-tooltip'),
|
|
25
|
+
);
|
|
26
|
+
await expect(snapshot).toEqual(0);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -4,6 +4,10 @@ import { PageObject, Urlbuilder } from '../helpers';
|
|
|
4
4
|
|
|
5
5
|
export default class DSComboboxSingleCO extends PageObject {
|
|
6
6
|
// STORIES
|
|
7
|
+
static loadingTest = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'loading-test');
|
|
8
|
+
|
|
9
|
+
static skeletonTest = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'skeleton-test');
|
|
10
|
+
|
|
7
11
|
static applyAriaDisabled = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'apply-aria-disabled-test');
|
|
8
12
|
|
|
9
13
|
static readOnly = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'read-only-test');
|
|
@@ -33,6 +37,16 @@ export default class DSComboboxSingleCO extends PageObject {
|
|
|
33
37
|
|
|
34
38
|
static disabled = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'disabled-test');
|
|
35
39
|
|
|
40
|
+
static grouped = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'grouped-test');
|
|
41
|
+
|
|
42
|
+
static inlineTest = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'inline-test');
|
|
43
|
+
|
|
44
|
+
static creatableTest = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'creatable-test');
|
|
45
|
+
|
|
46
|
+
static withTooltip = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'with-tooltip-test');
|
|
47
|
+
|
|
48
|
+
static themeFontURL = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'theme-font-family-test');
|
|
49
|
+
|
|
36
50
|
// COMBOBOX - INPUT
|
|
37
51
|
static async getCombobox() {
|
|
38
52
|
return $('[data-testid="combobox-container"]');
|
|
@@ -66,14 +80,6 @@ export default class DSComboboxSingleCO extends PageObject {
|
|
|
66
80
|
return $$('[data-testid="combobox-input"]')[index];
|
|
67
81
|
}
|
|
68
82
|
|
|
69
|
-
static async getComboboxHiddenInput() {
|
|
70
|
-
return $('input[aria-hidden="true"]');
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
static async getComboboxHiddenInputByIndex(index) {
|
|
74
|
-
return $$('input[aria-hidden="true"]')[index];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
83
|
static async getSelectedValues() {
|
|
78
84
|
return $('[data-testid="combobox-selected-values"]');
|
|
79
85
|
}
|
|
@@ -244,7 +250,7 @@ export default class DSComboboxSingleCO extends PageObject {
|
|
|
244
250
|
}
|
|
245
251
|
|
|
246
252
|
static async getComboboxSectionLabelByIndex(index) {
|
|
247
|
-
return $$('[data-dimsum-slot="dsComboboxSectionLabel"]')[index];
|
|
253
|
+
return $$('[data-dimsum-parent-slot="dsComboboxSectionLabel"]')[index];
|
|
248
254
|
}
|
|
249
255
|
|
|
250
256
|
static async getComboboxSectionWrapperSlotByIndex(index) {
|
|
@@ -271,4 +277,14 @@ export default class DSComboboxSingleCO extends PageObject {
|
|
|
271
277
|
static snapshotPath(example = 'basic') {
|
|
272
278
|
return PageObject.getSnapshotPathBuilder('DSComboboxV3', example, 'ds-combobox');
|
|
273
279
|
}
|
|
280
|
+
|
|
281
|
+
// The selection text renders through styled(DSTypography), so the owner slot lands on
|
|
282
|
+
// `data-dimsum-parent-slot` (the element's own `data-dimsum-slot` is the typography root).
|
|
283
|
+
static async getThemedSelection() {
|
|
284
|
+
return $('[data-testid="theme-font-sentinel"] [data-dimsum-parent-slot="dsComboboxSelection"]');
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
static async getFallbackSelection() {
|
|
288
|
+
return $('[data-testid="theme-font-fallback"] [data-dimsum-parent-slot="dsComboboxSelection"]');
|
|
289
|
+
}
|
|
274
290
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix introduced in PUI-18034
|
|
5
|
+
// (busy listbox with aria-busy + aria-label so screen readers announce the
|
|
6
|
+
// in-progress state via the input's aria-controls linkage; this spec verifies
|
|
7
|
+
// the busy listbox surface passes axe-core).
|
|
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-18474 - ComboboxSingle:: busy listbox while isLoading - axe-core', () => {
|
|
15
|
+
before('loading page', async () => {
|
|
16
|
+
const errorOnGo = await DSComboboxSingleCO.loadingTest.go();
|
|
17
|
+
if (errorOnGo) throw errorOnGo;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('01: busy listbox while isLoading should pass axe-core scan', async () => {
|
|
21
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
22
|
+
await dropdownMenuBtn.click();
|
|
23
|
+
|
|
24
|
+
const listbox = await DSComboboxSingleCO.getComboListbox();
|
|
25
|
+
await listbox.waitForExist();
|
|
26
|
+
|
|
27
|
+
const result = await axeCoreCheck({ extraDisabledRules: ['scrollable-region-focusable'] });
|
|
28
|
+
expect(result.length).toBe(0);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe('PUI-18475 - ComboboxSingle:: busy listbox while isSkeleton - axe-core', () => {
|
|
33
|
+
before('loading page', async () => {
|
|
34
|
+
const errorOnGo = await DSComboboxSingleCO.skeletonTest.go();
|
|
35
|
+
if (errorOnGo) throw errorOnGo;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('01: busy listbox while isSkeleton should pass axe-core scan', async () => {
|
|
39
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
40
|
+
await dropdownMenuBtn.click();
|
|
41
|
+
|
|
42
|
+
const listbox = await DSComboboxSingleCO.getComboListbox();
|
|
43
|
+
await listbox.waitForExist();
|
|
44
|
+
|
|
45
|
+
const result = await axeCoreCheck();
|
|
46
|
+
expect(result.length).toBe(0);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
|
|
3
|
+
// Tests for the fix introduced in PUI-18034
|
|
4
|
+
// (carries aria-busy + aria-label on the listbox during loading/skeleton so
|
|
5
|
+
// screen readers announce the in-progress state via the input's aria-controls
|
|
6
|
+
// linkage; replaces the prior racing assertive live region).
|
|
7
|
+
if (
|
|
8
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
9
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
10
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
11
|
+
browser.capabilities.browserName === 'Chrome'
|
|
12
|
+
) {
|
|
13
|
+
describe('PUI-18445 - ComboboxSingle:: busy listbox while isLoading - Func', () => {
|
|
14
|
+
before('loading page', async () => {
|
|
15
|
+
const errorOnGo = await DSComboboxSingleCO.loadingTest.go();
|
|
16
|
+
if (errorOnGo) throw errorOnGo;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('01: listbox is aria-busy with aria-label and input aria-controls links to it', async () => {
|
|
20
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
21
|
+
await dropdownMenuBtn.click();
|
|
22
|
+
|
|
23
|
+
const listbox = await DSComboboxSingleCO.getComboListbox();
|
|
24
|
+
await listbox.waitForExist();
|
|
25
|
+
|
|
26
|
+
await expect(listbox).toHaveAttribute('role', 'listbox');
|
|
27
|
+
await expect(listbox).toHaveAttribute('aria-busy', 'true');
|
|
28
|
+
await expect(listbox).toHaveAttribute('aria-label', 'Loading options please wait');
|
|
29
|
+
|
|
30
|
+
const listboxId = await listbox.getAttribute('id');
|
|
31
|
+
const input = await DSComboboxSingleCO.getComboboxInput();
|
|
32
|
+
await expect(input).toHaveAttribute('aria-controls', listboxId);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe('PUI-18446 - ComboboxSingle:: busy listbox while isSkeleton - Func', () => {
|
|
37
|
+
before('loading page', async () => {
|
|
38
|
+
const errorOnGo = await DSComboboxSingleCO.skeletonTest.go();
|
|
39
|
+
if (errorOnGo) throw errorOnGo;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('01: listbox is aria-busy with aria-label', async () => {
|
|
43
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
44
|
+
await dropdownMenuBtn.click();
|
|
45
|
+
|
|
46
|
+
const listbox = await DSComboboxSingleCO.getComboListbox();
|
|
47
|
+
await listbox.waitForExist();
|
|
48
|
+
|
|
49
|
+
await expect(listbox).toHaveAttribute('role', 'listbox');
|
|
50
|
+
await expect(listbox).toHaveAttribute('aria-busy', 'true');
|
|
51
|
+
await expect(listbox).toHaveAttribute('aria-label', 'Loading options please wait');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/* eslint-disable max-lines */
|
|
2
2
|
import { Key } from 'webdriverio';
|
|
3
3
|
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
4
|
+
import DSControlledCheckboxCO from '../../ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO';
|
|
5
|
+
import { mouseOver } from '../../helpers';
|
|
4
6
|
|
|
5
7
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
8
|
describe('PUI-14367 - ComboboxSingle:: applyAriaDisabled prop - visual', () => {
|
|
@@ -16,5 +18,21 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
16
18
|
);
|
|
17
19
|
await expect(snapshot).toEqual(0);
|
|
18
20
|
});
|
|
21
|
+
// PUI-15476: aria-disabled item text color must change to n600 on hover
|
|
22
|
+
it('02: listbox with aria-disabled item hovered should display n600 text color', async () => {
|
|
23
|
+
await browser.eyesOpen();
|
|
24
|
+
const checkbox = await DSControlledCheckboxCO.getCheckbox();
|
|
25
|
+
await checkbox.click();
|
|
26
|
+
const combobox = await DSComboboxSingleCO.getCombobox();
|
|
27
|
+
await combobox.click();
|
|
28
|
+
const menuList = await DSComboboxSingleCO.getMenuList();
|
|
29
|
+
await menuList.waitForDisplayed();
|
|
30
|
+
const ariaDisabledOption = await DSComboboxSingleCO.getOptionByIndex(1);
|
|
31
|
+
await mouseOver(ariaDisabledOption);
|
|
32
|
+
const snapshot = await browser.eyesCheckSnapshot(
|
|
33
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-aria-disabled-item-hovered'),
|
|
34
|
+
);
|
|
35
|
+
await expect(snapshot).toEqual(0);
|
|
36
|
+
});
|
|
19
37
|
});
|
|
20
38
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
|
|
3
|
+
// Tests for the fix introduced in PUI-15423 (creatable "ADD:" option restyled per spec:
|
|
4
|
+
// uppercased label, 16px horizontal padding from the menu item wrapper, and correct vertical
|
|
5
|
+
// spacing). Typing a value that matches no existing option surfaces the creatable add option
|
|
6
|
+
// as the first menu item. The multi-select equivalent is covered by MultipleCreatableTest.
|
|
7
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
8
|
+
describe('PUI-18658 - ComboboxSingle:: creatable add option styling -Visual', () => {
|
|
9
|
+
before('loading page', async () => {
|
|
10
|
+
const errorOnGo = await DSComboboxSingleCO.creatableTest.go();
|
|
11
|
+
if (errorOnGo) throw errorOnGo;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('01: should display the creatable add option with uppercased label and spec spacing', async () => {
|
|
15
|
+
const input = await DSComboboxSingleCO.getComboboxInput();
|
|
16
|
+
await input.setValue('Grogu');
|
|
17
|
+
|
|
18
|
+
const menuList = await DSComboboxSingleCO.getMenuList();
|
|
19
|
+
await menuList.waitForDisplayed();
|
|
20
|
+
|
|
21
|
+
const addOption = await DSComboboxSingleCO.getOptionByIndex(0);
|
|
22
|
+
await addOption.waitForDisplayed();
|
|
23
|
+
|
|
24
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
25
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-creatable-add-option'),
|
|
26
|
+
);
|
|
27
|
+
await expect(snapshot).toEqual(0);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
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-18476 - ComboboxSingle:: disabled - axe-core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSComboboxSingleCO.disabled.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: disabled combobox should pass axe-core scan', async () => {
|
|
17
|
+
const combobox = await DSComboboxSingleCO.getComboboxByIndex(0);
|
|
18
|
+
await combobox.waitForExist();
|
|
19
|
+
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
expect(result.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -11,10 +11,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
11
11
|
it('01: combobox single disabled should not be focused - clicking Input', async () => {
|
|
12
12
|
const combobox = await DSComboboxSingleCO.getComboboxByIndex(0);
|
|
13
13
|
const input = await DSComboboxSingleCO.getComboboxInputByIndex(0);
|
|
14
|
-
const hiddenInput = await DSComboboxSingleCO.getComboboxHiddenInputByIndex(0);
|
|
15
14
|
await combobox.click();
|
|
16
15
|
await expect(input).not.toBeFocused();
|
|
17
|
-
await expect(hiddenInput).not.toBeFocused();
|
|
18
16
|
});
|
|
19
17
|
it('02: listbox should not be displayed when combobox is disabled', async () => {
|
|
20
18
|
await browser.keys(Key.ArrowDown);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
|
|
3
|
+
// Tests for the fixes in PUI-15502 (disabled input hint/value font color = neutral-600)
|
|
4
|
+
// and PUI-15578 (dropdown chevron fill = neutral-400 in the disabled state).
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-18570 - ComboboxSingle:: Disabled -Visual', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSComboboxSingleCO.disabled.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('01: should display disabled combobox with dimmed value text and chevron', async () => {
|
|
13
|
+
const combobox = await DSComboboxSingleCO.getCombobox();
|
|
14
|
+
await combobox.waitForDisplayed();
|
|
15
|
+
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
17
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-disabled-input'),
|
|
18
|
+
);
|
|
19
|
+
await expect(snapshot).toEqual(0);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
|
|
3
|
+
// Tests for the fixes introduced in PUI-15487 (group/section label styled per the
|
|
4
|
+
// b3-strong spec — bold, neutral color, 32px row) and PUI-15473 (single menu item
|
|
5
|
+
// idle label color set to neutral-700; disabled options fall through to the muted
|
|
6
|
+
// disabledOption color). The open grouped menu surfaces all of these at once.
|
|
7
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
8
|
+
describe('PUI-18568 - ComboboxSingle:: Grouped -Visual', () => {
|
|
9
|
+
before('loading page', async () => {
|
|
10
|
+
const errorOnGo = await DSComboboxSingleCO.grouped.go();
|
|
11
|
+
if (errorOnGo) throw errorOnGo;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('01: should display grouped menu with section labels, idle and disabled option text', async () => {
|
|
15
|
+
const menuList = await DSComboboxSingleCO.getMenuList();
|
|
16
|
+
await menuList.waitForDisplayed();
|
|
17
|
+
|
|
18
|
+
const sectionLabel = await DSComboboxSingleCO.getComboboxSectionLabelByIndex(0);
|
|
19
|
+
await sectionLabel.waitForDisplayed();
|
|
20
|
+
|
|
21
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
22
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-grouped-menu'),
|
|
23
|
+
);
|
|
24
|
+
await expect(snapshot).toEqual(0);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('02: should display grouped menu with a selected option highlighted', async () => {
|
|
28
|
+
const option = await DSComboboxSingleCO.getOptionByIndex(0);
|
|
29
|
+
await option.click();
|
|
30
|
+
|
|
31
|
+
// single select closes the controlled menu on selection — reopen to capture
|
|
32
|
+
// the selected option styling inside the open listbox.
|
|
33
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
34
|
+
await dropdownMenuBtn.click();
|
|
35
|
+
|
|
36
|
+
const menuList = await DSComboboxSingleCO.getMenuList();
|
|
37
|
+
await menuList.waitForDisplayed();
|
|
38
|
+
|
|
39
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
40
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-grouped-menu-selected'),
|
|
41
|
+
);
|
|
42
|
+
await expect(snapshot).toEqual(0);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
// Tests for the fix introduced in PUI-15481 (inline padding 8px top/bottom — was 10px)
|
|
6
|
+
describe('PUI-18559 - ComboboxSingle:: inline config padding - visual', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSComboboxSingleCO.inlineTest.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
});
|
|
11
|
+
it('01: inline combobox should render with the corrected 8px padding', async () => {
|
|
12
|
+
await browser.eyesOpen();
|
|
13
|
+
const pillDropdownBtn = await DSComboboxSingleCO.getPillDropDownBtn();
|
|
14
|
+
await pillDropdownBtn.click();
|
|
15
|
+
const menuList = await DSComboboxSingleCO.getMenuList();
|
|
16
|
+
await menuList.waitForDisplayed();
|
|
17
|
+
const snapshot = await browser.eyesCheckSnapshot(
|
|
18
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-inline-padding'),
|
|
19
|
+
);
|
|
20
|
+
await expect(snapshot).toEqual(0);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
|
|
3
|
+
// Tests for the fix introduced in PUI-15485 (skeleton menu items render with the
|
|
4
|
+
// correct region fill — neutral-080 — and a 1px corner radius per the menu spec).
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-18569 - ComboboxSingle:: Skeleton -Visual', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSComboboxSingleCO.skeletonTest.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('01: should display skeleton menu items with region fill and corner radius', async () => {
|
|
13
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
14
|
+
await dropdownMenuBtn.click();
|
|
15
|
+
|
|
16
|
+
const skeletonMenuItem = await DSComboboxSingleCO.getComboboxSkeletonMenuItem();
|
|
17
|
+
await skeletonMenuItem.waitForDisplayed();
|
|
18
|
+
|
|
19
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
20
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-skeleton-menu'),
|
|
21
|
+
);
|
|
22
|
+
await expect(snapshot).toEqual(0);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
|
|
3
|
+
// Tests the theme-driven font-family mechanism covered by the combobox theming spike PUI-18214
|
|
4
|
+
// (the selection text renders through DSTypography, which reads theme.fonts.default, falling
|
|
5
|
+
// back to proxima-nova). Theme-agnostic: uses a sentinel font, never the dsConsumer POC theme
|
|
6
|
+
// values, so it survives any future theme change.
|
|
7
|
+
// Out of scope on purpose: the native <input> that holds typed text mirrors b2 as raw CSS and
|
|
8
|
+
// declares no font-family, so it does NOT follow theme.fonts.default (measured under the sentinel
|
|
9
|
+
// theme it still computes proxima-nova, i.e. the inherited page font, while the selection text
|
|
10
|
+
// switches). Asserting it here would lock in that gap; it is reported separately instead.
|
|
11
|
+
if (
|
|
12
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
13
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
14
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
15
|
+
browser.capabilities.browserName === 'Chrome'
|
|
16
|
+
) {
|
|
17
|
+
describe('PUI-18973 - ComboboxSingle:: theme font-family wiring - Func', () => {
|
|
18
|
+
before('loading page', async () => {
|
|
19
|
+
const errorOnGo = await DSComboboxSingleCO.themeFontURL.go();
|
|
20
|
+
if (errorOnGo) throw errorOnGo;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('01: should read selection font-family from theme with proxima-nova fallback', async () => {
|
|
24
|
+
const themed = await DSComboboxSingleCO.getThemedSelection();
|
|
25
|
+
await themed.waitForDisplayed();
|
|
26
|
+
const themedFont = (await themed.getCSSProperty('font-family')).value.toLowerCase();
|
|
27
|
+
await expect(themedFont).toContain('sentinelfont');
|
|
28
|
+
|
|
29
|
+
const fallback = await DSComboboxSingleCO.getFallbackSelection();
|
|
30
|
+
const fallbackFont = (await fallback.getCSSProperty('font-family')).value.toLowerCase();
|
|
31
|
+
await expect(fallbackFont).toContain('proxima-nova');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
import DSTooltipV3CO from '../../ds-tooltip-v3/DSTooltipV3CO';
|
|
3
|
+
import { axeCoreCheck, mouseOver } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
// Remediation for PUI-18660: the accessible path to the truncated value is the DSTooltipV3 wrapping
|
|
6
|
+
// the aria-disabled combobox, so the axe scan must cover the tooltip while it is OPEN (its DOM only
|
|
7
|
+
// exists then) — not just the resting markup.
|
|
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-18816 - ComboboxSingle:: aria-disabled truncated value tooltip - Axe-Core', () => {
|
|
15
|
+
before('loading page', async () => {
|
|
16
|
+
const errorOnGo = await DSComboboxSingleCO.withTooltip.go();
|
|
17
|
+
if (errorOnGo) throw errorOnGo;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('01: should have no violations at rest (aria-disabled combobox + describedby wiring)', async () => {
|
|
21
|
+
const combobox = await DSComboboxSingleCO.getComboboxWrapper();
|
|
22
|
+
await combobox.waitForDisplayed();
|
|
23
|
+
|
|
24
|
+
const result = await axeCoreCheck();
|
|
25
|
+
expect(result.length).toBe(0);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('02: should have no violations with the tooltip open over the combobox', async () => {
|
|
29
|
+
const combobox = await DSComboboxSingleCO.getComboboxWrapper();
|
|
30
|
+
await mouseOver(combobox);
|
|
31
|
+
|
|
32
|
+
const tooltip = await DSTooltipV3CO.getTooltip();
|
|
33
|
+
await tooltip.waitForDisplayed();
|
|
34
|
+
|
|
35
|
+
const result = await axeCoreCheck();
|
|
36
|
+
expect(result.length).toBe(0);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
3
|
+
import DSTooltipV3CO from '../../ds-tooltip-v3/DSTooltipV3CO';
|
|
4
|
+
import { mouseOver } from '../../helpers';
|
|
5
|
+
|
|
6
|
+
// Remediation for PUI-18660: the combobox no longer renders its own truncation tooltip. In an
|
|
7
|
+
// aria-disabled combobox the menu cannot be opened, so the only accessible path to the full,
|
|
8
|
+
// truncated selected value is the consumer-provided DSTooltipV3 wrapping the combobox.
|
|
9
|
+
const FULL_VALUE = 'Luke Skywalker too long this text is super long';
|
|
10
|
+
|
|
11
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
12
|
+
describe('PUI-18815 - ComboboxSingle:: aria-disabled truncated value tooltip - Func', () => {
|
|
13
|
+
before('loading page', async () => {
|
|
14
|
+
const errorOnGo = await DSComboboxSingleCO.withTooltip.go();
|
|
15
|
+
if (errorOnGo) throw errorOnGo;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: should not display the tooltip before hover', async () => {
|
|
19
|
+
const tooltip = await DSTooltipV3CO.getTooltip();
|
|
20
|
+
await expect(tooltip).not.toBeDisplayed();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('02: should reveal the full selected value via tooltip on hover', async () => {
|
|
24
|
+
const combobox = await DSComboboxSingleCO.getComboboxWrapper();
|
|
25
|
+
await mouseOver(combobox);
|
|
26
|
+
|
|
27
|
+
const tooltip = await DSTooltipV3CO.getTooltip();
|
|
28
|
+
await expect(tooltip).toBeDisplayed();
|
|
29
|
+
await expect(tooltip).toHaveText(expect.stringContaining(FULL_VALUE));
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('03: should hide the tooltip on pressing Escape', async () => {
|
|
33
|
+
await browser.keys(Key.Escape);
|
|
34
|
+
|
|
35
|
+
const tooltip = await DSTooltipV3CO.getTooltip();
|
|
36
|
+
await expect(tooltip).not.toBeDisplayed();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
import DSTooltipV3CO from '../../ds-tooltip-v3/DSTooltipV3CO';
|
|
3
|
+
import { mouseOver } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
// Visual coverage for the PUI-18660 remediation: the DSTooltipV3 opened over an aria-disabled
|
|
6
|
+
// ComboboxSingle must render on top and correctly positioned (not occluded, clipped or misplaced).
|
|
7
|
+
// Occlusion/positioning regressions are invisible to func/axe (toBeDisplayed ignores stacking),
|
|
8
|
+
// so they are captured here with a Percy snapshot of the open tooltip.
|
|
9
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
|
+
describe('PUI-18818 - ComboboxSingle:: aria-disabled truncated value tooltip - Visual', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSComboboxSingleCO.withTooltip.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should render the tooltip positioned over the aria-disabled combobox', async () => {
|
|
17
|
+
const combobox = await DSComboboxSingleCO.getComboboxWrapper();
|
|
18
|
+
await mouseOver(combobox);
|
|
19
|
+
|
|
20
|
+
const tooltip = await DSTooltipV3CO.getTooltip();
|
|
21
|
+
await tooltip.waitForDisplayed();
|
|
22
|
+
|
|
23
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
24
|
+
DSComboboxSingleCO.snapshotPath('combobox-single-aria-disabled-tooltip'),
|
|
25
|
+
);
|
|
26
|
+
await expect(snapshot).toEqual(0);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -17,6 +17,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
17
17
|
it('02: should have expanded calendar, empty input and pass axe-core scan', async () => {
|
|
18
18
|
const calendarTrigger = await DateRangePickerCO.getPickerBtn();
|
|
19
19
|
await calendarTrigger.click();
|
|
20
|
+
// PUI-15571: the calendar popover must be announced as a dialog (it used to expose
|
|
21
|
+
// role="region"), with an accessible name (WCAG 4.1.2 Name, Role, Value).
|
|
22
|
+
const dialog = await DateRangePickerCO.getCalendarDialog();
|
|
23
|
+
await expect(dialog).toHaveAttribute('role', 'dialog');
|
|
24
|
+
await expect(dialog).toHaveAttribute('aria-label', 'calendar header');
|
|
20
25
|
const result = await axeCoreCheck();
|
|
21
26
|
expect(result.length).toBe(0);
|
|
22
27
|
});
|