| // Copyright 2025 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <map> |
| #include <set> |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/blink/renderer/core/accessibility/ax_utilities_generated.h" |
| #include "third_party/blink/renderer/core/html_names.h" |
| #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h" |
| #include "ui/accessibility/ax_enums.mojom-blink.h" |
| |
| namespace blink { |
| |
| TEST(AXUtilitiesTest, TestIsAriaBooleanAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaAtomicAttr || |
| attr == &html_names::kAriaBusyAttr || |
| attr == &html_names::kAriaDisabledAttr || |
| attr == &html_names::kAriaModalAttr || |
| attr == &html_names::kAriaMultilineAttr || |
| attr == &html_names::kAriaMultiselectableAttr || |
| attr == &html_names::kAriaReadonlyAttr || |
| attr == &html_names::kAriaRequiredAttr) { |
| EXPECT_TRUE(IsAriaBooleanAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaBooleanAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestIsAriaIntegerAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaColcountAttr || |
| attr == &html_names::kAriaColindexAttr || |
| attr == &html_names::kAriaColspanAttr || |
| attr == &html_names::kAriaLevelAttr || |
| attr == &html_names::kAriaPosinsetAttr || |
| attr == &html_names::kAriaRowcountAttr || |
| attr == &html_names::kAriaRowindexAttr || |
| attr == &html_names::kAriaRowspanAttr || |
| attr == &html_names::kAriaSetsizeAttr) { |
| EXPECT_TRUE(IsAriaIntegerAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaIntegerAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestIsAriaDecimalAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaValuemaxAttr || |
| attr == &html_names::kAriaValueminAttr || |
| attr == &html_names::kAriaValuenowAttr) { |
| EXPECT_TRUE(IsAriaDecimalAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaDecimalAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestIsAriaStringAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaBraillelabelAttr || |
| attr == &html_names::kAriaBrailleroledescriptionAttr || |
| attr == &html_names::kAriaColindextextAttr || |
| attr == &html_names::kAriaDescriptionAttr || |
| attr == &html_names::kAriaKeyshortcutsAttr || |
| attr == &html_names::kAriaLabelAttr || |
| attr == &html_names::kAriaPlaceholderAttr || |
| attr == &html_names::kAriaRoledescriptionAttr || |
| attr == &html_names::kAriaRowindextextAttr || |
| attr == &html_names::kAriaValuetextAttr) { |
| EXPECT_TRUE(IsAriaStringAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaStringAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestIsAriaIdrefAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaActivedescendantAttr || |
| attr == &html_names::kAriaDetailsAttr || |
| attr == &html_names::kAriaErrormessageAttr) { |
| EXPECT_TRUE(IsAriaIdrefAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaIdrefAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestIsAriaIdrefListAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaActionsAttr || |
| attr == &html_names::kAriaControlsAttr || |
| attr == &html_names::kAriaDescribedbyAttr || |
| attr == &html_names::kAriaFlowtoAttr || |
| attr == &html_names::kAriaLabelledbyAttr || |
| attr == &html_names::kAriaLabeledbyAttr || |
| attr == &html_names::kAriaOwnsAttr) { |
| EXPECT_TRUE(IsAriaIdrefListAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaIdrefListAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestIsAriaTokenAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaAutocompleteAttr || |
| attr == &html_names::kAriaCheckedAttr || |
| attr == &html_names::kAriaCurrentAttr || |
| attr == &html_names::kAriaExpandedAttr || |
| attr == &html_names::kAriaHaspopupAttr || |
| attr == &html_names::kAriaHiddenAttr || |
| attr == &html_names::kAriaInvalidAttr || |
| attr == &html_names::kAriaLiveAttr || |
| attr == &html_names::kAriaOrientationAttr || |
| attr == &html_names::kAriaPressedAttr || |
| attr == &html_names::kAriaSelectedAttr || |
| attr == &html_names::kAriaSortAttr) { |
| EXPECT_TRUE(IsAriaTokenAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaTokenAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestIsAriaTokenListAttribute) { |
| for (const auto* attr : GetAriaAttributes()) { |
| if (attr == &html_names::kAriaRelevantAttr) { |
| EXPECT_TRUE(IsAriaTokenListAttribute(*attr)); |
| } else { |
| EXPECT_FALSE(IsAriaTokenListAttribute(*attr)); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaAutocompleteValues) { |
| Vector<AtomicString> values = GetAriaAutocompleteValues(); |
| ASSERT_EQ(values.size(), 4u); |
| EXPECT_TRUE(values.Contains("inline")); |
| EXPECT_TRUE(values.Contains("list")); |
| EXPECT_TRUE(values.Contains("both")); |
| EXPECT_TRUE(values.Contains("none")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaCheckedValues) { |
| Vector<AtomicString> values = GetAriaCheckedValues(); |
| ASSERT_EQ(values.size(), 4u); |
| EXPECT_TRUE(values.Contains("true")); |
| EXPECT_TRUE(values.Contains("false")); |
| EXPECT_TRUE(values.Contains("mixed")); |
| EXPECT_TRUE(values.Contains("undefined")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaCurrentValues) { |
| Vector<AtomicString> values = GetAriaCurrentValues(); |
| ASSERT_EQ(values.size(), 7u); |
| EXPECT_TRUE(values.Contains("page")); |
| EXPECT_TRUE(values.Contains("step")); |
| EXPECT_TRUE(values.Contains("location")); |
| EXPECT_TRUE(values.Contains("date")); |
| EXPECT_TRUE(values.Contains("time")); |
| EXPECT_TRUE(values.Contains("true")); |
| EXPECT_TRUE(values.Contains("false")); |
| } |
| |
| TEST(AXUtilitiesTest, AriaExpandedValues) { |
| Vector<AtomicString> values = GetAriaExpandedValues(); |
| ASSERT_EQ(values.size(), 3u); |
| EXPECT_TRUE(values.Contains("true")); |
| EXPECT_TRUE(values.Contains("false")); |
| EXPECT_TRUE(values.Contains("undefined")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaHaspopupValues) { |
| Vector<AtomicString> values = GetAriaHaspopupValues(); |
| ASSERT_EQ(values.size(), 7u); |
| EXPECT_TRUE(values.Contains("false")); |
| EXPECT_TRUE(values.Contains("true")); |
| EXPECT_TRUE(values.Contains("menu")); |
| EXPECT_TRUE(values.Contains("listbox")); |
| EXPECT_TRUE(values.Contains("tree")); |
| EXPECT_TRUE(values.Contains("grid")); |
| EXPECT_TRUE(values.Contains("dialog")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaHiddenValues) { |
| Vector<AtomicString> values = GetAriaHiddenValues(); |
| ASSERT_EQ(values.size(), 3u); |
| EXPECT_TRUE(values.Contains("true")); |
| EXPECT_TRUE(values.Contains("false")); |
| EXPECT_TRUE(values.Contains("undefined")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaInvalidValues) { |
| Vector<AtomicString> values = GetAriaInvalidValues(); |
| ASSERT_EQ(values.size(), 4u); |
| EXPECT_TRUE(values.Contains("grammar")); |
| EXPECT_TRUE(values.Contains("false")); |
| EXPECT_TRUE(values.Contains("spelling")); |
| EXPECT_TRUE(values.Contains("true")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaLiveValues) { |
| Vector<AtomicString> values = GetAriaLiveValues(); |
| ASSERT_EQ(values.size(), 4u); |
| EXPECT_TRUE(values.Contains("off")); |
| EXPECT_TRUE(values.Contains("polite")); |
| EXPECT_TRUE(values.Contains("assertive")); |
| EXPECT_TRUE(values.Contains("undefined")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaOrientationValues) { |
| Vector<AtomicString> values = GetAriaOrientationValues(); |
| ASSERT_EQ(values.size(), 3u); |
| EXPECT_TRUE(values.Contains("horizontal")); |
| EXPECT_TRUE(values.Contains("undefined")); |
| EXPECT_TRUE(values.Contains("vertical")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaPressedValues) { |
| Vector<AtomicString> values = GetAriaPressedValues(); |
| ASSERT_EQ(values.size(), 4u); |
| EXPECT_TRUE(values.Contains("true")); |
| EXPECT_TRUE(values.Contains("false")); |
| EXPECT_TRUE(values.Contains("mixed")); |
| EXPECT_TRUE(values.Contains("undefined")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaRelevantValues) { |
| Vector<AtomicString> values = GetAriaRelevantValues(); |
| ASSERT_EQ(values.size(), 4u); |
| EXPECT_TRUE(values.Contains("additions")); |
| EXPECT_TRUE(values.Contains("removals")); |
| EXPECT_TRUE(values.Contains("text")); |
| EXPECT_TRUE(values.Contains("all")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaSelectedValues) { |
| Vector<AtomicString> values = GetAriaSelectedValues(); |
| ASSERT_EQ(values.size(), 3u); |
| EXPECT_TRUE(values.Contains("true")); |
| EXPECT_TRUE(values.Contains("false")); |
| EXPECT_TRUE(values.Contains("undefined")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaSortValues) { |
| Vector<AtomicString> values = GetAriaSortValues(); |
| ASSERT_EQ(values.size(), 4u); |
| EXPECT_TRUE(values.Contains("ascending")); |
| EXPECT_TRUE(values.Contains("descending")); |
| EXPECT_TRUE(values.Contains("none")); |
| EXPECT_TRUE(values.Contains("other")); |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaRoleToInternalRole) { |
| // Non-deprecated ARIA roles. |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("alert")), |
| ax::mojom::blink::Role::kAlert); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("alertdialog")), |
| ax::mojom::blink::Role::kAlertDialog); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("application")), |
| ax::mojom::blink::Role::kApplication); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("article")), |
| ax::mojom::blink::Role::kArticle); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("banner")), |
| ax::mojom::blink::Role::kBanner); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("blockquote")), |
| ax::mojom::blink::Role::kBlockquote); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("button")), |
| ax::mojom::blink::Role::kButton); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("caption")), |
| ax::mojom::blink::Role::kCaption); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("cell")), |
| ax::mojom::blink::Role::kCell); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("checkbox")), |
| ax::mojom::blink::Role::kCheckBox); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("code")), |
| ax::mojom::blink::Role::kCode); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("columnheader")), |
| ax::mojom::blink::Role::kColumnHeader); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("combobox")), |
| ax::mojom::blink::Role::kComboBoxGrouping); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("comment")), |
| ax::mojom::blink::Role::kComment); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("complementary")), |
| ax::mojom::blink::Role::kComplementary); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("contentinfo")), |
| ax::mojom::blink::Role::kContentInfo); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("definition")), |
| ax::mojom::blink::Role::kDefinition); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("deletion")), |
| ax::mojom::blink::Role::kContentDeletion); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("dialog")), |
| ax::mojom::blink::Role::kDialog); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("document")), |
| ax::mojom::blink::Role::kDocument); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("emphasis")), |
| ax::mojom::blink::Role::kEmphasis); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("feed")), |
| ax::mojom::blink::Role::kFeed); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("figure")), |
| ax::mojom::blink::Role::kFigure); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("form")), |
| ax::mojom::blink::Role::kForm); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("generic")), |
| ax::mojom::blink::Role::kGenericContainer); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("grid")), |
| ax::mojom::blink::Role::kGrid); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("gridcell")), |
| ax::mojom::blink::Role::kGridCell); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("group")), |
| ax::mojom::blink::Role::kGroup); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("heading")), |
| ax::mojom::blink::Role::kHeading); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("image")), |
| ax::mojom::blink::Role::kImage); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("insertion")), |
| ax::mojom::blink::Role::kContentInsertion); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("link")), |
| ax::mojom::blink::Role::kLink); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("list")), |
| ax::mojom::blink::Role::kList); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("listbox")), |
| ax::mojom::blink::Role::kListBox); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("listitem")), |
| ax::mojom::blink::Role::kListItem); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("log")), |
| ax::mojom::blink::Role::kLog); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("main")), |
| ax::mojom::blink::Role::kMain); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("mark")), |
| ax::mojom::blink::Role::kMark); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("marquee")), |
| ax::mojom::blink::Role::kMarquee); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("math")), |
| ax::mojom::blink::Role::kMath); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("menu")), |
| ax::mojom::blink::Role::kMenu); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("menubar")), |
| ax::mojom::blink::Role::kMenuBar); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("menuitem")), |
| ax::mojom::blink::Role::kMenuItem); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("menuitemcheckbox")), |
| ax::mojom::blink::Role::kMenuItemCheckBox); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("menuitemradio")), |
| ax::mojom::blink::Role::kMenuItemRadio); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("meter")), |
| ax::mojom::blink::Role::kMeter); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("navigation")), |
| ax::mojom::blink::Role::kNavigation); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("none")), |
| ax::mojom::blink::Role::kNone); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("note")), |
| ax::mojom::blink::Role::kNote); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("option")), |
| ax::mojom::blink::Role::kListBoxOption); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("paragraph")), |
| ax::mojom::blink::Role::kParagraph); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("progressbar")), |
| ax::mojom::blink::Role::kProgressIndicator); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("radio")), |
| ax::mojom::blink::Role::kRadioButton); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("radiogroup")), |
| ax::mojom::blink::Role::kRadioGroup); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("region")), |
| ax::mojom::blink::Role::kRegion); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("row")), |
| ax::mojom::blink::Role::kRow); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("rowgroup")), |
| ax::mojom::blink::Role::kRowGroup); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("rowheader")), |
| ax::mojom::blink::Role::kRowHeader); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("scrollbar")), |
| ax::mojom::blink::Role::kScrollBar); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("search")), |
| ax::mojom::blink::Role::kSearch); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("searchbox")), |
| ax::mojom::blink::Role::kSearchBox); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("separator")), |
| ax::mojom::blink::Role::kSplitter); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("slider")), |
| ax::mojom::blink::Role::kSlider); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("spinbutton")), |
| ax::mojom::blink::Role::kSpinButton); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("status")), |
| ax::mojom::blink::Role::kStatus); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("strong")), |
| ax::mojom::blink::Role::kStrong); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("subscript")), |
| ax::mojom::blink::Role::kSubscript); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("superscript")), |
| ax::mojom::blink::Role::kSuperscript); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("switch")), |
| ax::mojom::blink::Role::kSwitch); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("tab")), |
| ax::mojom::blink::Role::kTab); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("table")), |
| ax::mojom::blink::Role::kTable); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("tablist")), |
| ax::mojom::blink::Role::kTabList); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("tabpanel")), |
| ax::mojom::blink::Role::kTabPanel); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("term")), |
| ax::mojom::blink::Role::kTerm); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("textbox")), |
| ax::mojom::blink::Role::kTextField); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("time")), |
| ax::mojom::blink::Role::kTime); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("timer")), |
| ax::mojom::blink::Role::kTimer); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("toolbar")), |
| ax::mojom::blink::Role::kToolbar); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("tooltip")), |
| ax::mojom::blink::Role::kTooltip); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("tree")), |
| ax::mojom::blink::Role::kTree); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("treegrid")), |
| ax::mojom::blink::Role::kTreeGrid); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("treeitem")), |
| ax::mojom::blink::Role::kTreeItem); |
| |
| // Deprecated ARIA roles. |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("directory")), |
| ax::mojom::blink::Role::kList); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("img")), |
| ax::mojom::blink::Role::kImage); |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("presentation")), |
| ax::mojom::blink::Role::kNone); |
| |
| // Non-existent ARIA role. |
| EXPECT_EQ(AriaRoleToInternalRole(AtomicString("nonexistent")), |
| ax::mojom::blink::Role::kUnknown); |
| } |
| |
| TEST(AXUtilitiesTest, TestInternalRoleToAriaRole) { |
| for (auto role = static_cast<ax::mojom::blink::Role>(0); |
| role <= ax::mojom::blink::Role::kWindow; |
| role = static_cast<ax::mojom::blink::Role>(static_cast<int>(role) + 1)) { |
| switch (role) { |
| case ax::mojom::blink::Role::kNone: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "none"); |
| break; |
| case ax::mojom::blink::Role::kAlert: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "alert"); |
| break; |
| case ax::mojom::blink::Role::kAlertDialog: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "alertdialog"); |
| break; |
| case ax::mojom::blink::Role::kApplication: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "application"); |
| break; |
| case ax::mojom::blink::Role::kArticle: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "article"); |
| break; |
| case ax::mojom::blink::Role::kBanner: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "banner"); |
| break; |
| case ax::mojom::blink::Role::kBlockquote: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "blockquote"); |
| break; |
| case ax::mojom::blink::Role::kButton: |
| case ax::mojom::blink::Role::kToggleButton: |
| case ax::mojom::blink::Role::kPopUpButton: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "button"); |
| break; |
| case ax::mojom::blink::Role::kCaption: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "caption"); |
| break; |
| case ax::mojom::blink::Role::kCell: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "cell"); |
| break; |
| case ax::mojom::blink::Role::kCheckBox: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "checkbox"); |
| break; |
| case ax::mojom::blink::Role::kCode: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "code"); |
| break; |
| case ax::mojom::blink::Role::kColumnHeader: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "columnheader"); |
| break; |
| case ax::mojom::blink::Role::kComboBoxGrouping: |
| case ax::mojom::blink::Role::kComboBoxMenuButton: |
| case ax::mojom::blink::Role::kComboBoxSelect: |
| case ax::mojom::blink::Role::kTextFieldWithComboBox: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "combobox"); |
| break; |
| case ax::mojom::blink::Role::kComplementary: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "complementary"); |
| break; |
| case ax::mojom::blink::Role::kComment: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "comment"); |
| break; |
| case ax::mojom::blink::Role::kContentDeletion: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "deletion"); |
| break; |
| case ax::mojom::blink::Role::kContentInsertion: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "insertion"); |
| break; |
| case ax::mojom::blink::Role::kContentInfo: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "contentinfo"); |
| break; |
| case ax::mojom::blink::Role::kDefinition: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "definition"); |
| break; |
| case ax::mojom::blink::Role::kDialog: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "dialog"); |
| break; |
| case ax::mojom::blink::Role::kDocAbstract: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-abstract"); |
| break; |
| case ax::mojom::blink::Role::kDocAcknowledgments: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-acknowledgments"); |
| break; |
| case ax::mojom::blink::Role::kDocAfterword: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-afterword"); |
| break; |
| case ax::mojom::blink::Role::kDocAppendix: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-appendix"); |
| break; |
| case ax::mojom::blink::Role::kDocBackLink: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-backlink"); |
| break; |
| case ax::mojom::blink::Role::kDocBiblioEntry: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-biblioentry"); |
| break; |
| case ax::mojom::blink::Role::kDocBibliography: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-bibliography"); |
| break; |
| case ax::mojom::blink::Role::kDocBiblioRef: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-biblioref"); |
| break; |
| case ax::mojom::blink::Role::kDocChapter: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-chapter"); |
| break; |
| case ax::mojom::blink::Role::kDocColophon: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-colophon"); |
| break; |
| case ax::mojom::blink::Role::kDocConclusion: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-conclusion"); |
| break; |
| case ax::mojom::blink::Role::kDocCover: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-cover"); |
| break; |
| case ax::mojom::blink::Role::kDocCredit: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-credit"); |
| break; |
| case ax::mojom::blink::Role::kDocCredits: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-credits"); |
| break; |
| case ax::mojom::blink::Role::kDocDedication: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-dedication"); |
| break; |
| case ax::mojom::blink::Role::kDocEndnote: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-endnote"); |
| break; |
| case ax::mojom::blink::Role::kDocEndnotes: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-endnotes"); |
| break; |
| case ax::mojom::blink::Role::kDocEpigraph: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-epigraph"); |
| break; |
| case ax::mojom::blink::Role::kDocEpilogue: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-epilogue"); |
| break; |
| case ax::mojom::blink::Role::kDocErrata: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-errata"); |
| break; |
| case ax::mojom::blink::Role::kDocExample: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-example"); |
| break; |
| case ax::mojom::blink::Role::kDocFootnote: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-footnote"); |
| break; |
| case ax::mojom::blink::Role::kDocForeword: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-foreword"); |
| break; |
| case ax::mojom::blink::Role::kDocGlossary: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-glossary"); |
| break; |
| case ax::mojom::blink::Role::kDocGlossRef: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-glossref"); |
| break; |
| case ax::mojom::blink::Role::kDocIndex: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-index"); |
| break; |
| case ax::mojom::blink::Role::kDocIntroduction: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-introduction"); |
| break; |
| case ax::mojom::blink::Role::kDocNoteRef: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-noteref"); |
| break; |
| case ax::mojom::blink::Role::kDocNotice: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-notice"); |
| break; |
| case ax::mojom::blink::Role::kDocPageBreak: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-pagebreak"); |
| break; |
| case ax::mojom::blink::Role::kDocPageFooter: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-pagefooter"); |
| break; |
| case ax::mojom::blink::Role::kDocPageHeader: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-pageheader"); |
| break; |
| case ax::mojom::blink::Role::kDocPageList: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-pagelist"); |
| break; |
| case ax::mojom::blink::Role::kDocPart: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-part"); |
| break; |
| case ax::mojom::blink::Role::kDocPreface: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-preface"); |
| break; |
| case ax::mojom::blink::Role::kDocPrologue: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-prologue"); |
| break; |
| case ax::mojom::blink::Role::kDocPullquote: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-pullquote"); |
| break; |
| case ax::mojom::blink::Role::kDocQna: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-qna"); |
| break; |
| case ax::mojom::blink::Role::kDocSubtitle: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-subtitle"); |
| break; |
| case ax::mojom::blink::Role::kDocTip: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-tip"); |
| break; |
| case ax::mojom::blink::Role::kDocToc: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "doc-toc"); |
| break; |
| case ax::mojom::blink::Role::kDocument: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "document"); |
| break; |
| case ax::mojom::blink::Role::kEmphasis: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "emphasis"); |
| break; |
| case ax::mojom::blink::Role::kFeed: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "feed"); |
| break; |
| case ax::mojom::blink::Role::kFigure: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "figure"); |
| break; |
| case ax::mojom::blink::Role::kFooter: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "contentinfo"); |
| break; |
| case ax::mojom::blink::Role::kForm: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "form"); |
| break; |
| case ax::mojom::blink::Role::kGenericContainer: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "generic"); |
| break; |
| case ax::mojom::blink::Role::kGraphicsDocument: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "graphics-document"); |
| break; |
| case ax::mojom::blink::Role::kGraphicsObject: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "graphics-object"); |
| break; |
| case ax::mojom::blink::Role::kGraphicsSymbol: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "graphics-symbol"); |
| break; |
| case ax::mojom::blink::Role::kGrid: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "grid"); |
| break; |
| case ax::mojom::blink::Role::kGridCell: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "gridcell"); |
| break; |
| case ax::mojom::blink::Role::kGroup: |
| case ax::mojom::blink::Role::kDetails: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "group"); |
| break; |
| case ax::mojom::blink::Role::kHeader: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "banner"); |
| break; |
| case ax::mojom::blink::Role::kHeading: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "heading"); |
| break; |
| case ax::mojom::blink::Role::kImage: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "image"); |
| break; |
| case ax::mojom::blink::Role::kLink: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "link"); |
| break; |
| case ax::mojom::blink::Role::kList: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "list"); |
| break; |
| case ax::mojom::blink::Role::kListBox: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "listbox"); |
| break; |
| case ax::mojom::blink::Role::kListBoxOption: |
| case ax::mojom::blink::Role::kMenuListOption: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "option"); |
| break; |
| case ax::mojom::blink::Role::kListItem: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "listitem"); |
| break; |
| case ax::mojom::blink::Role::kLog: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "log"); |
| break; |
| case ax::mojom::blink::Role::kMain: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "main"); |
| break; |
| case ax::mojom::blink::Role::kMark: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "mark"); |
| break; |
| case ax::mojom::blink::Role::kMarquee: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "marquee"); |
| break; |
| case ax::mojom::blink::Role::kMath: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "math"); |
| break; |
| case ax::mojom::blink::Role::kMenu: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "menu"); |
| break; |
| case ax::mojom::blink::Role::kMenuBar: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "menubar"); |
| break; |
| case ax::mojom::blink::Role::kMenuItem: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "menuitem"); |
| break; |
| case ax::mojom::blink::Role::kMenuItemCheckBox: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "menuitemcheckbox"); |
| break; |
| case ax::mojom::blink::Role::kMenuItemRadio: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "menuitemradio"); |
| break; |
| case ax::mojom::blink::Role::kMenuItemSeparator: |
| case ax::mojom::blink::Role::kSplitter: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "separator"); |
| break; |
| case ax::mojom::blink::Role::kMeter: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "meter"); |
| break; |
| case ax::mojom::blink::Role::kNavigation: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "navigation"); |
| break; |
| case ax::mojom::blink::Role::kNote: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "note"); |
| break; |
| case ax::mojom::blink::Role::kParagraph: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "paragraph"); |
| break; |
| case ax::mojom::blink::Role::kProgressIndicator: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "progressbar"); |
| break; |
| case ax::mojom::blink::Role::kRadioButton: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "radio"); |
| break; |
| case ax::mojom::blink::Role::kRadioGroup: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "radiogroup"); |
| break; |
| case ax::mojom::blink::Role::kRegion: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "region"); |
| break; |
| case ax::mojom::blink::Role::kRow: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "row"); |
| break; |
| case ax::mojom::blink::Role::kRowGroup: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "rowgroup"); |
| break; |
| case ax::mojom::blink::Role::kRowHeader: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "rowheader"); |
| break; |
| case ax::mojom::blink::Role::kScrollBar: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "scrollbar"); |
| break; |
| case ax::mojom::blink::Role::kSearch: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "search"); |
| break; |
| case ax::mojom::blink::Role::kSearchBox: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "searchbox"); |
| break; |
| case ax::mojom::blink::Role::kSectionFooter: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "sectionfooter"); |
| break; |
| case ax::mojom::blink::Role::kSectionHeader: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "sectionheader"); |
| break; |
| case ax::mojom::blink::Role::kSectionWithoutName: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "generic"); |
| break; |
| case ax::mojom::blink::Role::kSlider: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "slider"); |
| break; |
| case ax::mojom::blink::Role::kSpinButton: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "spinbutton"); |
| break; |
| case ax::mojom::blink::Role::kStatus: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "status"); |
| break; |
| case ax::mojom::blink::Role::kStrong: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "strong"); |
| break; |
| case ax::mojom::blink::Role::kSubscript: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "subscript"); |
| break; |
| case ax::mojom::blink::Role::kSuggestion: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "suggestion"); |
| break; |
| case ax::mojom::blink::Role::kSuperscript: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "superscript"); |
| break; |
| case ax::mojom::blink::Role::kSwitch: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "switch"); |
| break; |
| case ax::mojom::blink::Role::kTab: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "tab"); |
| break; |
| case ax::mojom::blink::Role::kTabList: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "tablist"); |
| break; |
| case ax::mojom::blink::Role::kTabPanel: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "tabpanel"); |
| break; |
| case ax::mojom::blink::Role::kTable: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "table"); |
| break; |
| case ax::mojom::blink::Role::kTerm: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "term"); |
| break; |
| case ax::mojom::blink::Role::kTextField: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "textbox"); |
| break; |
| case ax::mojom::blink::Role::kTime: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "time"); |
| break; |
| case ax::mojom::blink::Role::kTimer: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "timer"); |
| break; |
| case ax::mojom::blink::Role::kToolbar: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "toolbar"); |
| break; |
| case ax::mojom::blink::Role::kTooltip: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "tooltip"); |
| break; |
| case ax::mojom::blink::Role::kTree: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "tree"); |
| break; |
| case ax::mojom::blink::Role::kTreeGrid: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "treegrid"); |
| break; |
| case ax::mojom::blink::Role::kTreeItem: |
| EXPECT_EQ(InternalRoleToAriaRole(role), "treeitem"); |
| break; |
| // All roles that return empty string |
| case ax::mojom::blink::Role::kAbbr: |
| case ax::mojom::blink::Role::kAudio: |
| case ax::mojom::blink::Role::kCanvas: |
| case ax::mojom::blink::Role::kCaret: |
| case ax::mojom::blink::Role::kClient: |
| case ax::mojom::blink::Role::kColorWell: |
| case ax::mojom::blink::Role::kColumn: |
| case ax::mojom::blink::Role::kDate: |
| case ax::mojom::blink::Role::kDateTime: |
| case ax::mojom::blink::Role::kDescriptionList: |
| case ax::mojom::blink::Role::kDescriptionListDetailDeprecated: |
| case ax::mojom::blink::Role::kDescriptionListTermDeprecated: |
| case ax::mojom::blink::Role::kDesktop: |
| case ax::mojom::blink::Role::kDirectoryDeprecated: |
| case ax::mojom::blink::Role::kDisclosureTriangle: |
| case ax::mojom::blink::Role::kDisclosureTriangleGrouped: |
| case ax::mojom::blink::Role::kEmbeddedObject: |
| case ax::mojom::blink::Role::kFigcaption: |
| case ax::mojom::blink::Role::kIframe: |
| case ax::mojom::blink::Role::kIframePresentational: |
| case ax::mojom::blink::Role::kImeCandidate: |
| case ax::mojom::blink::Role::kInlineTextBox: |
| case ax::mojom::blink::Role::kInputTime: |
| case ax::mojom::blink::Role::kKeyboard: |
| case ax::mojom::blink::Role::kLabelText: |
| case ax::mojom::blink::Role::kLayoutTable: |
| case ax::mojom::blink::Role::kLayoutTableCell: |
| case ax::mojom::blink::Role::kLayoutTableRow: |
| case ax::mojom::blink::Role::kLegend: |
| case ax::mojom::blink::Role::kLineBreak: |
| case ax::mojom::blink::Role::kListGrid: |
| case ax::mojom::blink::Role::kListMarker: |
| case ax::mojom::blink::Role::kMathMLFraction: |
| case ax::mojom::blink::Role::kMathMLIdentifier: |
| case ax::mojom::blink::Role::kMathMLMath: |
| case ax::mojom::blink::Role::kMathMLMultiscripts: |
| case ax::mojom::blink::Role::kMathMLNoneScript: |
| case ax::mojom::blink::Role::kMathMLNumber: |
| case ax::mojom::blink::Role::kMathMLOperator: |
| case ax::mojom::blink::Role::kMathMLOver: |
| case ax::mojom::blink::Role::kMathMLPrescriptDelimiter: |
| case ax::mojom::blink::Role::kMathMLRoot: |
| case ax::mojom::blink::Role::kMathMLRow: |
| case ax::mojom::blink::Role::kMathMLSquareRoot: |
| case ax::mojom::blink::Role::kMathMLStringLiteral: |
| case ax::mojom::blink::Role::kMathMLSub: |
| case ax::mojom::blink::Role::kMathMLSubSup: |
| case ax::mojom::blink::Role::kMathMLSup: |
| case ax::mojom::blink::Role::kMathMLTable: |
| case ax::mojom::blink::Role::kMathMLTableCell: |
| case ax::mojom::blink::Role::kMathMLTableRow: |
| case ax::mojom::blink::Role::kMathMLText: |
| case ax::mojom::blink::Role::kMathMLUnder: |
| case ax::mojom::blink::Role::kMathMLUnderOver: |
| case ax::mojom::blink::Role::kMenuListPopup: |
| case ax::mojom::blink::Role::kPane: |
| case ax::mojom::blink::Role::kPdfActionableHighlight: |
| case ax::mojom::blink::Role::kPdfRoot: |
| case ax::mojom::blink::Role::kPluginObject: |
| case ax::mojom::blink::Role::kPortalDeprecated: |
| case ax::mojom::blink::Role::kPreDeprecated: |
| case ax::mojom::blink::Role::kRootWebArea: |
| case ax::mojom::blink::Role::kRuby: |
| case ax::mojom::blink::Role::kRubyAnnotation: |
| case ax::mojom::blink::Role::kScrollView: |
| case ax::mojom::blink::Role::kSection: |
| case ax::mojom::blink::Role::kStaticText: |
| case ax::mojom::blink::Role::kSvgRoot: |
| case ax::mojom::blink::Role::kTableHeaderContainer: |
| case ax::mojom::blink::Role::kTitleBar: |
| case ax::mojom::blink::Role::kUnknown: |
| case ax::mojom::blink::Role::kVideo: |
| case ax::mojom::blink::Role::kWebView: |
| case ax::mojom::blink::Role::kWindow: |
| EXPECT_EQ(InternalRoleToAriaRole(role), ""); |
| break; |
| default: |
| NOTREACHED(); |
| } |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestAriaRoleDataConsistency) { |
| auto role_names = GetAriaRoleNames(); |
| |
| // Test that all role names can be converted to internal roles and back |
| for (const auto& role_name : role_names) { |
| ax::mojom::blink::Role internal_role = AriaRoleToInternalRole(role_name); |
| EXPECT_NE(internal_role, ax::mojom::blink::Role::kUnknown) |
| << "Role '" << role_name << "' should map to a valid internal role"; |
| const AtomicString& back_converted = InternalRoleToAriaRole(internal_role); |
| EXPECT_FALSE(back_converted.empty()) |
| << "Internal role for '" << role_name |
| << "' should map back to some ARIA role"; |
| } |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaChecked) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| if (role == "checkbox" || role == "menuitemcheckbox" || |
| role == "menuitemradio" || role == "option" || role == "radio" || |
| role == "switch" || role == "treeitem") { |
| EXPECT_TRUE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaCheckedAttr)) |
| << "Role '" << role << "' should support aria-checked"; |
| } else { |
| EXPECT_FALSE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaCheckedAttr)) |
| << "Role '" << role << "' should not support aria-checked"; |
| } |
| } |
| EXPECT_FALSE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaCheckedAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaPressed) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| if (role == "button") { |
| EXPECT_TRUE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaPressedAttr)) |
| << "Role '" << role << "' should support aria-pressed"; |
| } else { |
| EXPECT_FALSE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaPressedAttr)) |
| << "Role '" << role << "' should not support aria-pressed"; |
| } |
| } |
| EXPECT_FALSE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaPressedAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaExpanded) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| if (role == "application" || role == "button" || role == "checkbox" || |
| role == "columnheader" || role == "combobox" || role == "gridcell" || |
| role == "link" || role == "menuitem" || role == "menuitemcheckbox" || |
| role == "menuitemradio" || role == "row" || role == "rowheader" || |
| role == "switch" || role == "tab" || role == "treeitem") { |
| EXPECT_TRUE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaExpandedAttr)) |
| << "Role '" << role << "' should support aria-expanded"; |
| } else { |
| EXPECT_FALSE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaExpandedAttr)) |
| << "Role '" << role << "' should not support aria-expanded"; |
| } |
| } |
| EXPECT_FALSE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaExpandedAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaAtomic) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| EXPECT_TRUE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaAtomicAttr)) |
| << "Role '" << role << "' should support aria-atomic (global)"; |
| } |
| EXPECT_TRUE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaAtomicAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaLabel) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| if (role == "caption" || role == "code" || role == "definition" || |
| role == "deletion" || role == "emphasis" || role == "generic" || |
| role == "insertion" || role == "mark" || role == "none" || |
| role == "paragraph" || role == "strong" || role == "subscript" || |
| role == "suggestion" || role == "superscript" || role == "term" || |
| role == "time") { |
| EXPECT_FALSE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaLabelAttr)) |
| << "Role '" << role << "' should not support aria-label (prevented)"; |
| } else { |
| EXPECT_TRUE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaLabelAttr)) |
| << "Role '" << role << "' should support aria-label (global)"; |
| } |
| } |
| EXPECT_TRUE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaLabelAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaRoledescription) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| if (role == "generic") { |
| EXPECT_FALSE(RoleSupportsAriaAttribute( |
| AriaRoleToInternalRole(role), html_names::kAriaRoledescriptionAttr)) |
| << "Role '" << role |
| << "' should not support aria-roledescription (prevented)"; |
| } else { |
| EXPECT_TRUE(RoleSupportsAriaAttribute( |
| AriaRoleToInternalRole(role), html_names::kAriaRoledescriptionAttr)) |
| << "Role '" << role |
| << "' should support aria-roledescription (global)"; |
| } |
| } |
| EXPECT_TRUE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaRoledescriptionAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaSelected) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| if (role == "columnheader" || role == "gridcell" || role == "option" || |
| role == "row" || role == "rowheader" || role == "tab" || |
| role == "treeitem") { |
| EXPECT_TRUE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaSelectedAttr)) |
| << "Role '" << role << "' should support aria-selected"; |
| } else { |
| EXPECT_FALSE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaSelectedAttr)) |
| << "Role '" << role << "' should not support aria-selected"; |
| } |
| } |
| EXPECT_FALSE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaSelectedAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestRoleSupportsAriaReadonly) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| if (role == "checkbox" || role == "columnheader" || role == "combobox" || |
| role == "grid" || role == "gridcell" || role == "listbox" || |
| role == "radiogroup" || role == "rowheader" || role == "searchbox" || |
| role == "slider" || role == "spinbutton" || role == "switch" || |
| role == "textbox" || role == "treegrid") { |
| EXPECT_TRUE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaReadonlyAttr)) |
| << "Role '" << role << "' should support aria-readonly"; |
| } else { |
| EXPECT_FALSE(RoleSupportsAriaAttribute(AriaRoleToInternalRole(role), |
| html_names::kAriaReadonlyAttr)) |
| << "Role '" << role << "' should not support aria-readonly"; |
| } |
| } |
| EXPECT_FALSE(RoleSupportsAriaAttribute(ax::mojom::blink::Role::kUnknown, |
| html_names::kAriaReadonlyAttr)); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaOrientation) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaOrientation(AriaRoleToInternalRole(role)); |
| if (role == "list" || role == "listbox" || role == "menu" || |
| role == "scrollbar" || role == "tree") { |
| EXPECT_EQ(result, "vertical") << "Role: " << role; |
| } else if (role == "menubar" || role == "separator" || role == "slider" || |
| role == "tablist" || role == "toolbar") { |
| EXPECT_EQ(result, "horizontal") << "Role: " << role; |
| } else { |
| EXPECT_EQ(result, "undefined") << "Role: " << role; |
| } |
| } |
| EXPECT_EQ(GetImplicitAriaOrientation(ax::mojom::blink::Role::kUnknown), |
| "undefined"); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaChecked) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaChecked(AriaRoleToInternalRole(role)); |
| if (role == "checkbox" || role == "menuitemcheckbox" || |
| role == "menuitemradio" || role == "radio" || role == "switch") { |
| EXPECT_EQ(result, "false") << "Role: " << role; |
| } else { |
| EXPECT_EQ(result, "undefined") << "Role: " << role; |
| } |
| } |
| EXPECT_EQ(GetImplicitAriaChecked(ax::mojom::blink::Role::kUnknown), |
| "undefined"); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaSelected) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaSelected(AriaRoleToInternalRole(role)); |
| if (role == "option" || role == "tab") { |
| EXPECT_EQ(result, "false") << "Role: " << role; |
| } else { |
| EXPECT_EQ(result, "undefined") << "Role: " << role; |
| } |
| } |
| EXPECT_EQ(GetImplicitAriaSelected(ax::mojom::blink::Role::kUnknown), |
| "undefined"); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaLive) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaLive(AriaRoleToInternalRole(role)); |
| if (role == "log" || role == "status") { |
| EXPECT_EQ(result, "polite") << "Role: " << role; |
| } else if (role == "alert") { |
| EXPECT_EQ(result, "assertive") << "Role: " << role; |
| } else { |
| EXPECT_EQ(result, "undefined") << "Role: " << role; |
| } |
| } |
| EXPECT_EQ(GetImplicitAriaLive(ax::mojom::blink::Role::kUnknown), "undefined"); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaAtomic) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaAtomic(AriaRoleToInternalRole(role)); |
| if (role == "alert" || role == "status") { |
| EXPECT_EQ(result, "true") << "Role: " << role; |
| } else { |
| EXPECT_EQ(result, "false") << "Role: " << role; |
| } |
| } |
| EXPECT_EQ(GetImplicitAriaAtomic(ax::mojom::blink::Role::kUnknown), "false"); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaExpanded) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaExpanded(AriaRoleToInternalRole(role)); |
| if (role == "combobox") { |
| EXPECT_EQ(result, "false") << "Role: " << role; |
| } else { |
| EXPECT_EQ(result, "undefined") << "Role: " << role; |
| } |
| } |
| EXPECT_EQ(GetImplicitAriaExpanded(ax::mojom::blink::Role::kUnknown), |
| "undefined"); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaHaspopup) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaHaspopup(AriaRoleToInternalRole(role)); |
| if (role == "combobox") { |
| EXPECT_EQ(result, "listbox") << "Role: " << role; |
| } else { |
| EXPECT_EQ(result, "false") << "Role: " << role; |
| } |
| } |
| EXPECT_EQ(GetImplicitAriaHaspopup(ax::mojom::blink::Role::kUnknown), "false"); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaLevel) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaLevel(AriaRoleToInternalRole(role)); |
| if (role == "heading") { |
| EXPECT_EQ(result, "2") << "Role: " << role; |
| } else { |
| EXPECT_TRUE(result.empty()) << "Role: " << role; |
| } |
| } |
| EXPECT_TRUE(GetImplicitAriaLevel(ax::mojom::blink::Role::kUnknown).empty()); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaValuemin) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaValuemin(AriaRoleToInternalRole(role)); |
| if (role == "meter" || role == "progressbar" || role == "scrollbar" || |
| role == "separator" || role == "slider") { |
| EXPECT_EQ(result, "0") << "Role: " << role; |
| } else { |
| EXPECT_TRUE(result.empty()) << "Role: " << role; |
| } |
| } |
| EXPECT_TRUE( |
| GetImplicitAriaValuemin(ax::mojom::blink::Role::kUnknown).empty()); |
| } |
| |
| TEST(AXUtilitiesTest, TestGetImplicitAriaValuemax) { |
| auto role_names = GetAriaRoleNames(); |
| for (const auto& role : role_names) { |
| const AtomicString& result = |
| GetImplicitAriaValuemax(AriaRoleToInternalRole(role)); |
| if (role == "meter" || role == "progressbar" || role == "scrollbar" || |
| role == "separator" || role == "slider") { |
| EXPECT_EQ(result, "100") << "Role: " << role; |
| } else { |
| EXPECT_TRUE(result.empty()) << "Role: " << role; |
| } |
| } |
| EXPECT_TRUE( |
| GetImplicitAriaValuemax(ax::mojom::blink::Role::kUnknown).empty()); |
| } |
| |
| TEST(AXUtilitiesTest, TestNameFromConsistency) { |
| // Verify that nameFrom relationships are consistent: |
| // 1. If a role is name prohibited, it shouldn't support name from |
| // author/contents. |
| // 2. If a role supports name from contents, it should also support name |
| // from author. |
| for (const auto& role_name : GetAriaRoleNames()) { |
| auto role = AriaRoleToInternalRole(role_name); |
| bool is_prohibited = RoleIsNameProhibited(role); |
| bool supports_contents = RoleSupportsNameFromContents(role); |
| bool supports_author = RoleSupportsNameFromAuthor(role); |
| |
| if (is_prohibited) { |
| EXPECT_FALSE(supports_author) |
| << "Role '" << role_name |
| << "' is name prohibited but supports author"; |
| EXPECT_FALSE(supports_contents) |
| << "Role '" << role_name |
| << "' is name prohibited but supports contents"; |
| } |
| |
| if (supports_contents) { |
| EXPECT_TRUE(supports_author) |
| << "Role '" << role_name |
| << "' supports contents but not author (ARIA spec requires both)"; |
| } |
| } |
| } |
| |
| } // namespace blink |