axe-core
Version:
Accessibility engine for automated Web UI testing
354 lines (319 loc) • 19.6 kB
JavaScript
// aria
import abstractroleEvaluate from '../../checks/aria/abstractrole-evaluate';
import ariaAllowedAttrEvaluate from '../../checks/aria/aria-allowed-attr-evaluate';
import ariaAllowedRoledEvaluate from '../../checks/aria/aria-allowed-role-evaluate';
import ariaErrormessageEvaluate from '../../checks/aria/aria-errormessage-evaluate';
import ariaHiddenBodyEvaluate from '../../checks/aria/aria-hidden-body-evaluate';
import ariaProhibitedAttrEvaluate from '../../checks/aria/aria-prohibited-attr-evaluate';
import ariaRequiredAttrEvaluate from '../../checks/aria/aria-required-attr-evaluate';
import ariaRequiredChildrenEvaluate from '../../checks/aria/aria-required-children-evaluate';
import ariaRequiredParentEvaluate from '../../checks/aria/aria-required-parent-evaluate';
import ariaRoledescriptionEvaluate from '../../checks/aria/aria-roledescription-evaluate';
import ariaUnsupportedAttrEvaluate from '../../checks/aria/aria-unsupported-attr-evaluate';
import ariaValidAttrEvaluate from '../../checks/aria/aria-valid-attr-evaluate';
import ariaValidAttrValueEvaluate from '../../checks/aria/aria-valid-attr-value-evaluate';
import fallbackroleEvaluate from '../../checks/aria/fallbackrole-evaluate';
import hasGlobalAriaAttributeEvaluate from '../../checks/aria/has-global-aria-attribute-evaluate';
import hasImplicitChromiumRoleMatches from '../../rules/has-implicit-chromium-role-matches';
import hasWidgetRoleEvaluate from '../../checks/aria/has-widget-role-evaluate';
import invalidroleEvaluate from '../../checks/aria/invalidrole-evaluate';
import isElementFocusableEvaluate from '../../checks/aria/is-element-focusable-evaluate';
import noImplicitExplicitLabelEvaluate from '../../checks/aria/no-implicit-explicit-label-evaluate';
import unsupportedroleEvaluate from '../../checks/aria/unsupportedrole-evaluate';
import validScrollableSemanticsEvaluate from '../../checks/aria/valid-scrollable-semantics-evaluate';
// tables
import captionFakedEvaluate from '../../checks/tables/caption-faked-evaluate';
import html5ScopeEvaluate from '../../checks/tables/html5-scope-evaluate';
import sameCaptionSummaryEvaluate from '../../checks/tables/same-caption-summary-evaluate';
import scopeValueEvaluate from '../../checks/tables/scope-value-evaluate';
import tdHasHeaderEvaluate from '../../checks/tables/td-has-header-evaluate';
import tdHeadersAttrEvaluate from '../../checks/tables/td-headers-attr-evaluate';
import thHasDataCellsEvaluate from '../../checks/tables/th-has-data-cells-evaluate';
// visibility
import hiddenContentEvaluate from '../../checks/visibility/hidden-content-evaluate';
// color
import colorContrastEvaluate from '../../checks/color/color-contrast-evaluate';
import linkInTextBlockEvaluate from '../../checks/color/link-in-text-block-evaluate';
// forms
import autocompleteAppropriateEvaluate from '../../checks/forms/autocomplete-appropriate-evaluate';
import autocompleteValidEvaluate from '../../checks/forms/autocomplete-valid-evaluate';
// generic
import attrNonSpaceContentEvaluate from '../../checks/generic/attr-non-space-content-evaluate';
import hasDescendantAfter from '../../checks/generic/has-descendant-after';
import hasDescendantEvaluate from '../../checks/generic/has-descendant-evaluate';
import hasTextContentEvaluate from '../../checks/generic/has-text-content-evaluate';
import matchesDefinitionEvaluate from '../../checks/generic/matches-definition-evaluate';
import pageNoDuplicateAfter from '../../checks/generic/page-no-duplicate-after';
import pageNoDuplicateEvaluate from '../../checks/generic/page-no-duplicate-evaluate';
// navigation
import headingOrderAfter from '../../checks/navigation/heading-order-after';
import headingOrderEvaluate from '../../checks/navigation/heading-order-evaluate';
import identicalLinksSamePurposeAfter from '../../checks/navigation/identical-links-same-purpose-after';
import identicalLinksSamePurposeEvaluate from '../../checks/navigation/identical-links-same-purpose-evaluate';
import internalLinkPresentEvaluate from '../../checks/navigation/internal-link-present-evaluate';
import metaRefreshEvaluate from '../../checks/navigation/meta-refresh-evaluate';
import pAsHeadingEvaluate from '../../checks/navigation/p-as-heading-evaluate';
import regionEvaluate from '../../checks/navigation/region-evaluate';
import skipLinkEvaluate from '../../checks/navigation/skip-link-evaluate';
import uniqueFrameTitleAfter from '../../checks/navigation/unique-frame-title-after';
import uniqueFrameTitleEvaluate from '../../checks/navigation/unique-frame-title-evaluate';
// shared
import ariaLabelEvaluate from '../../checks/shared/aria-label-evaluate';
import ariaLabelledbyEvaluate from '../../checks/shared/aria-labelledby-evaluate';
import avoidInlineSpacingEvaluate from '../../checks/shared/avoid-inline-spacing-evaluate';
import docHasTitleEvaluate from '../../checks/shared/doc-has-title-evaluate';
import existsEvaluate from '../../checks/shared/exists-evaluate';
import hasAltEvaluate from '../../checks/shared/has-alt-evaluate';
import isOnScreenEvaluate from '../../checks/shared/is-on-screen-evaluate';
import nonEmptyIfPresentEvaluate from '../../checks/shared/non-empty-if-present-evaluate';
import presentationalRoleEvaluate from '../../checks/shared/presentational-role-evaluate';
import svgNonEmptyTitleEvaluate from '../../checks/shared/svg-non-empty-title-evaluate';
// mobile
import cssOrientationLockEvaluate from '../../checks/mobile/css-orientation-lock-evaluate';
import metaViewportScaleEvaluate from '../../checks/mobile/meta-viewport-scale-evaluate';
// parsing
import duplicateIdAfter from '../../checks/parsing/duplicate-id-after';
import duplicateIdEvaluate from '../../checks/parsing/duplicate-id-evaluate';
// keyboard
import accesskeysAfter from '../../checks/keyboard/accesskeys-after';
import accesskeysEvaluate from '../../checks/keyboard/accesskeys-evaluate';
import focusableContentEvaluate from '../../checks/keyboard/focusable-content-evaluate';
import focusableDisabledEvaluate from '../../checks/keyboard/focusable-disabled-evaluate';
import focusableElementEvaluate from '../../checks/keyboard/focusable-element-evaluate';
import focusableModalOpenEvaluate from '../../checks/keyboard/focusable-modal-open-evaluate';
import focusableNoNameEvaluate from '../../checks/keyboard/focusable-no-name-evaluate';
import focusableNotTabbableEvaluate from '../../checks/keyboard/focusable-not-tabbable-evaluate';
import landmarkIsTopLevelEvaluate from '../../checks/keyboard/landmark-is-top-level-evaluate';
import noFocusableContentEvaluate from '../../checks/keyboard/no-focusable-content-evaluate';
import tabindexEvaluate from '../../checks/keyboard/tabindex-evaluate';
// label
import altSpaceValueEvaluate from '../../checks/label/alt-space-value-evaluate';
import duplicateImgLabelEvaluate from '../../checks/label/duplicate-img-label-evaluate';
import explicitEvaluate from '../../checks/label/explicit-evaluate';
import helpSameAsLabelEvaluate from '../../checks/label/help-same-as-label-evaluate';
import hiddenExplicitLabelEvaluate from '../../checks/label/hidden-explicit-label-evaluate';
import implicitEvaluate from '../../checks/label/implicit-evaluate';
import labelContentNameMismatchEvaluate from '../../checks/label/label-content-name-mismatch-evaluate';
import multipleLabelEvaluate from '../../checks/label/multiple-label-evaluate';
import titleOnlyEvaluate from '../../checks/label/title-only-evaluate';
// landmarks
import landmarkIsUniqueAfter from '../../checks/landmarks/landmark-is-unique-after';
import landmarkIsUniqueEvaluate from '../../checks/landmarks/landmark-is-unique-evaluate';
// language
import hasLangEvaluate from '../../checks/language/has-lang-evaluate';
import validLangEvaluate from '../../checks/language/valid-lang-evaluate';
import xmlLangMismatchEvaluate from '../../checks/language/xml-lang-mismatch-evaluate';
// lists
import dlitemEvaluate from '../../checks/lists/dlitem-evaluate';
import listitemEvaluate from '../../checks/lists/listitem-evaluate';
import onlyDlitemsEvaluate from '../../checks/lists/only-dlitems-evaluate';
import onlyListitemsEvaluate from '../../checks/lists/only-listitems-evaluate';
import structuredDlitemsEvaluate from '../../checks/lists/structured-dlitems-evaluate';
// media
import captionEvaluate from '../../checks/media/caption-evaluate';
import frameTestedEvaluate from '../../checks/media/frame-tested-evaluate';
import frameTestedAfter from '../../checks/media/frame-tested-after';
import noAutoplayAudioEvaluate from '../../checks/media/no-autoplay-audio-evaluate';
// rule matches
import ariaAllowedAttrMatches from '../../rules/aria-allowed-attr-matches';
import ariaAllowedRoleMatches from '../../rules/aria-allowed-role-matches';
import ariaHasAttrMatches from '../../rules/aria-has-attr-matches';
import ariaHiddenFocusMatches from '../../rules/aria-hidden-focus-matches';
import ariaRequiredChildrenMatches from '../../rules/aria-required-children-matches';
import ariaRequiredParentMatches from '../../rules/aria-required-parent-matches';
import autocompleteMatches from '../../rules/autocomplete-matches';
import bypassMatches from '../../rules/bypass-matches';
import colorContrastMatches from '../../rules/color-contrast-matches';
import dataTableLargeMatches from '../../rules/data-table-large-matches';
import dataTableMatches from '../../rules/data-table-matches';
import duplicateIdActiveMatches from '../../rules/duplicate-id-active-matches';
import duplicateIdAriaMatches from '../../rules/duplicate-id-aria-matches';
import duplicateIdMiscMatches from '../../rules/duplicate-id-misc-matches';
import frameFocusableContentMatches from '../../rules/frame-focusable-content-matches';
import frameTitleHasTextMatches from '../../rules/frame-title-has-text-matches';
import headingMatches from '../../rules/heading-matches';
import htmlNamespaceMatches from '../../rules/html-namespace-matches';
import identicalLinksSamePurposeMatches from '../../rules/identical-links-same-purpose-matches';
import insertedIntoFocusOrderMatches from '../../rules/inserted-into-focus-order-matches';
import isInitiatorMatches from '../../rules/is-initiator-matches';
import labelContentNameMismatchMatches from '../../rules/label-content-name-mismatch-matches';
import labelMatches from '../../rules/label-matches';
import landmarkHasBodyContextMatches from '../../rules/landmark-has-body-context-matches';
import landmarkUniqueMatches from '../../rules/landmark-unique-matches';
import layoutTableMatches from '../../rules/layout-table-matches';
import linkInTextBlockMatches from '../../rules/link-in-text-block-matches';
import nestedInteractiveMatches from '../../rules/nested-interactive-matches';
import noAutoplayAudioMatches from '../../rules/no-autoplay-audio-matches';
import noEmptyRoleMatches from '../../rules/no-empty-role-matches';
import noExplicitNameRequiredMatches from '../../rules/no-explicit-name-required-matches';
import noNamingMethodMatches from '../../rules/no-naming-method-matches';
import noRoleMatches from '../../rules/no-role-matches';
import notHtmlMatches from '../../rules/not-html-matches';
import pAsHeadingMatches from '../../rules/p-as-heading-matches';
import scrollableRegionFocusableMatches from '../../rules/scrollable-region-focusable-matches';
import skipLinkMatches from '../../rules/skip-link-matches';
import svgNamespaceMatches from '../../rules/svg-namespace-matches';
import windowIsTopMatches from '../../rules/window-is-top-matches';
import xmlLangMismatchMatches from '../../rules/xml-lang-mismatch-matches';
const metadataFunctionMap = {
// aria
'abstractrole-evaluate': abstractroleEvaluate,
'aria-allowed-attr-evaluate': ariaAllowedAttrEvaluate,
'aria-allowed-role-evaluate': ariaAllowedRoledEvaluate,
'aria-errormessage-evaluate': ariaErrormessageEvaluate,
'aria-hidden-body-evaluate': ariaHiddenBodyEvaluate,
'aria-prohibited-attr-evaluate': ariaProhibitedAttrEvaluate,
'aria-required-attr-evaluate': ariaRequiredAttrEvaluate,
'aria-required-children-evaluate': ariaRequiredChildrenEvaluate,
'aria-required-parent-evaluate': ariaRequiredParentEvaluate,
'aria-roledescription-evaluate': ariaRoledescriptionEvaluate,
'aria-unsupported-attr-evaluate': ariaUnsupportedAttrEvaluate,
'aria-valid-attr-evaluate': ariaValidAttrEvaluate,
'aria-valid-attr-value-evaluate': ariaValidAttrValueEvaluate,
'fallbackrole-evaluate': fallbackroleEvaluate,
'has-global-aria-attribute-evaluate': hasGlobalAriaAttributeEvaluate,
'has-implicit-chromium-role-matches': hasImplicitChromiumRoleMatches,
'has-widget-role-evaluate': hasWidgetRoleEvaluate,
'invalidrole-evaluate': invalidroleEvaluate,
'is-element-focusable-evaluate': isElementFocusableEvaluate,
'no-implicit-explicit-label-evaluate': noImplicitExplicitLabelEvaluate,
'unsupportedrole-evaluate': unsupportedroleEvaluate,
'valid-scrollable-semantics-evaluate': validScrollableSemanticsEvaluate,
// tables
'caption-faked-evaluate': captionFakedEvaluate,
'html5-scope-evaluate': html5ScopeEvaluate,
'same-caption-summary-evaluate': sameCaptionSummaryEvaluate,
'scope-value-evaluate': scopeValueEvaluate,
'td-has-header-evaluate': tdHasHeaderEvaluate,
'td-headers-attr-evaluate': tdHeadersAttrEvaluate,
'th-has-data-cells-evaluate': thHasDataCellsEvaluate,
// visibility
'hidden-content-evaluate': hiddenContentEvaluate,
// color
'color-contrast-evaluate': colorContrastEvaluate,
'link-in-text-block-evaluate': linkInTextBlockEvaluate,
// forms
'autocomplete-appropriate-evaluate': autocompleteAppropriateEvaluate,
'autocomplete-valid-evaluate': autocompleteValidEvaluate,
// generic
'attr-non-space-content-evaluate': attrNonSpaceContentEvaluate,
'has-descendant-after': hasDescendantAfter,
'has-descendant-evaluate': hasDescendantEvaluate,
'has-text-content-evaluate': hasTextContentEvaluate,
'matches-definition-evaluate': matchesDefinitionEvaluate,
'page-no-duplicate-after': pageNoDuplicateAfter,
'page-no-duplicate-evaluate': pageNoDuplicateEvaluate,
// navigation
'heading-order-after': headingOrderAfter,
'heading-order-evaluate': headingOrderEvaluate,
'identical-links-same-purpose-after': identicalLinksSamePurposeAfter,
'identical-links-same-purpose-evaluate': identicalLinksSamePurposeEvaluate,
'internal-link-present-evaluate': internalLinkPresentEvaluate,
'meta-refresh-evaluate': metaRefreshEvaluate,
'p-as-heading-evaluate': pAsHeadingEvaluate,
'region-evaluate': regionEvaluate,
'skip-link-evaluate': skipLinkEvaluate,
'unique-frame-title-after': uniqueFrameTitleAfter,
'unique-frame-title-evaluate': uniqueFrameTitleEvaluate,
// shared
'aria-label-evaluate': ariaLabelEvaluate,
'aria-labelledby-evaluate': ariaLabelledbyEvaluate,
'avoid-inline-spacing-evaluate': avoidInlineSpacingEvaluate,
'doc-has-title-evaluate': docHasTitleEvaluate,
'exists-evaluate': existsEvaluate,
'has-alt-evaluate': hasAltEvaluate,
'is-on-screen-evaluate': isOnScreenEvaluate,
'non-empty-if-present-evaluate': nonEmptyIfPresentEvaluate,
'presentational-role-evaluate': presentationalRoleEvaluate,
'svg-non-empty-title-evaluate': svgNonEmptyTitleEvaluate,
// mobile
'css-orientation-lock-evaluate': cssOrientationLockEvaluate,
'meta-viewport-scale-evaluate': metaViewportScaleEvaluate,
// parsing
'duplicate-id-after': duplicateIdAfter,
'duplicate-id-evaluate': duplicateIdEvaluate,
// keyboard
'accesskeys-after': accesskeysAfter,
'accesskeys-evaluate': accesskeysEvaluate,
'focusable-content-evaluate': focusableContentEvaluate,
'focusable-disabled-evaluate': focusableDisabledEvaluate,
'focusable-element-evaluate': focusableElementEvaluate,
'focusable-modal-open-evaluate': focusableModalOpenEvaluate,
'focusable-no-name-evaluate': focusableNoNameEvaluate,
'focusable-not-tabbable-evaluate': focusableNotTabbableEvaluate,
'landmark-is-top-level-evaluate': landmarkIsTopLevelEvaluate,
'no-focusable-content-evaluate': noFocusableContentEvaluate,
'tabindex-evaluate': tabindexEvaluate,
// label
'alt-space-value-evaluate': altSpaceValueEvaluate,
'duplicate-img-label-evaluate': duplicateImgLabelEvaluate,
'explicit-evaluate': explicitEvaluate,
'help-same-as-label-evaluate': helpSameAsLabelEvaluate,
'hidden-explicit-label-evaluate': hiddenExplicitLabelEvaluate,
'implicit-evaluate': implicitEvaluate,
'label-content-name-mismatch-evaluate': labelContentNameMismatchEvaluate,
'multiple-label-evaluate': multipleLabelEvaluate,
'title-only-evaluate': titleOnlyEvaluate,
// landmarks
'landmark-is-unique-after': landmarkIsUniqueAfter,
'landmark-is-unique-evaluate': landmarkIsUniqueEvaluate,
// language
'has-lang-evaluate': hasLangEvaluate,
'valid-lang-evaluate': validLangEvaluate,
'xml-lang-mismatch-evaluate': xmlLangMismatchEvaluate,
// lists
'dlitem-evaluate': dlitemEvaluate,
'listitem-evaluate': listitemEvaluate,
'only-dlitems-evaluate': onlyDlitemsEvaluate,
'only-listitems-evaluate': onlyListitemsEvaluate,
'structured-dlitems-evaluate': structuredDlitemsEvaluate,
// media
'caption-evaluate': captionEvaluate,
'frame-tested-evaluate': frameTestedEvaluate,
'frame-tested-after': frameTestedAfter,
'no-autoplay-audio-evaluate': noAutoplayAudioEvaluate,
// rule matches
'aria-allowed-attr-matches': ariaAllowedAttrMatches,
'aria-allowed-role-matches': ariaAllowedRoleMatches,
// @deprecated
'aria-form-field-name-matches': noNamingMethodMatches,
'aria-has-attr-matches': ariaHasAttrMatches,
'aria-hidden-focus-matches': ariaHiddenFocusMatches,
'aria-required-children-matches': ariaRequiredChildrenMatches,
'aria-required-parent-matches': ariaRequiredParentMatches,
'autocomplete-matches': autocompleteMatches,
'bypass-matches': bypassMatches,
'color-contrast-matches': colorContrastMatches,
'data-table-large-matches': dataTableLargeMatches,
'data-table-matches': dataTableMatches,
'duplicate-id-active-matches': duplicateIdActiveMatches,
'duplicate-id-aria-matches': duplicateIdAriaMatches,
'duplicate-id-misc-matches': duplicateIdMiscMatches,
'frame-focusable-content-matches': frameFocusableContentMatches,
'frame-title-has-text-matches': frameTitleHasTextMatches,
'heading-matches': headingMatches,
'html-namespace-matches': htmlNamespaceMatches,
'identical-links-same-purpose-matches': identicalLinksSamePurposeMatches,
'inserted-into-focus-order-matches': insertedIntoFocusOrderMatches,
'is-initiator-matches': isInitiatorMatches,
'label-content-name-mismatch-matches': labelContentNameMismatchMatches,
'label-matches': labelMatches,
'landmark-has-body-context-matches': landmarkHasBodyContextMatches,
'landmark-unique-matches': landmarkUniqueMatches,
'layout-table-matches': layoutTableMatches,
'link-in-text-block-matches': linkInTextBlockMatches,
'nested-interactive-matches': nestedInteractiveMatches,
'no-autoplay-audio-matches': noAutoplayAudioMatches,
'no-empty-role-matches': noEmptyRoleMatches,
'no-explicit-name-required-matches': noExplicitNameRequiredMatches,
'no-naming-method-matches': noNamingMethodMatches,
'no-role-matches': noRoleMatches,
'not-html-matches': notHtmlMatches,
'p-as-heading-matches': pAsHeadingMatches,
'scrollable-region-focusable-matches': scrollableRegionFocusableMatches,
'skip-link-matches': skipLinkMatches,
'svg-namespace-matches': svgNamespaceMatches,
'window-is-top-matches': windowIsTopMatches,
'xml-lang-mismatch-matches': xmlLangMismatchMatches
};
export default metadataFunctionMap;