From dea6528c0c0e22ff83089c2049aacac7a24e0fc8 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Mon, 21 Mar 2022 17:26:45 -0700 Subject: [PATCH] feat(aria): introduce role utils (#12916) This includes aria role and accessible name computation. Accessible name is covered by wpt tests. --- .../src/server/injected/injectedScript.ts | 9 + .../src/server/injected/roleUtils.ts | 611 ++++++++++++++++++ .../src/server/injected/selectorEvaluator.ts | 29 +- tests/assets/wpt/LICENSE.md | 11 + tests/assets/wpt/README.md | 10 + tests/assets/wpt/accname/foo.jpg | Bin 0 -> 6735 bytes ...combobox-focusable-alternative-manual.html | 70 ++ .../name_1.0_combobox-focusable-manual.html | 72 +++ ...eckbox-label-embedded-combobox-manual.html | 81 +++ ...heckbox-label-embedded-listbox-manual.html | 78 +++ ...e_checkbox-label-embedded-menu-manual.html | 78 +++ ...checkbox-label-embedded-select-manual.html | 78 +++ ...checkbox-label-embedded-slider-manual.html | 72 +++ ...kbox-label-embedded-spinbutton-manual.html | 72 +++ ...heckbox-label-embedded-textbox-manual.html | 74 +++ ...bel-multiple-label-alternative-manual.html | 71 ++ ..._checkbox-label-multiple-label-manual.html | 71 ++ .../accname/name_checkbox-title-manual.html | 70 ++ ...e_file-label-embedded-combobox-manual.html | 81 +++ .../name_file-label-embedded-menu-manual.html | 78 +++ ...ame_file-label-embedded-select-manual.html | 78 +++ ...ame_file-label-embedded-slider-manual.html | 72 +++ ...file-label-embedded-spinbutton-manual.html | 72 +++ ...le-label-inline-block-elements-manual.html | 71 ++ ...file-label-inline-block-styles-manual.html | 75 +++ ...e-label-inline-hidden-elements-manual.html | 80 +++ ...name_file-label-owned-combobox-manual.html | 81 +++ ...l-owned-combobox-owned-listbox-manual.html | 83 +++ .../wpt/accname/name_file-title-manual.html | 70 ++ .../wpt/accname/name_from_content-manual.html | 91 +++ .../name_from_content_of_label-manual.html | 92 +++ ..._content_of_labelledby_element-manual.html | 92 +++ ...lements_one_of_which_is_hidden-manual.html | 102 +++ ...combobox-focusable-alternative-manual.html | 73 +++ .../wpt/accname/name_image-title-manual.html | 70 ++ .../name_link-mixed-content-manual.html | 81 +++ .../accname/name_link-with-label-manual.html | 70 ++ ...ssword-label-embedded-combobox-manual.html | 81 +++ ...e_password-label-embedded-menu-manual.html | 78 +++ ...password-label-embedded-select-manual.html | 78 +++ ...password-label-embedded-slider-manual.html | 72 +++ ...word-label-embedded-spinbutton-manual.html | 72 +++ .../accname/name_password-title-manual.html | 70 ++ ..._radio-label-embedded-combobox-manual.html | 81 +++ ...name_radio-label-embedded-menu-manual.html | 78 +++ ...me_radio-label-embedded-select-manual.html | 78 +++ ...me_radio-label-embedded-slider-manual.html | 72 +++ ...adio-label-embedded-spinbutton-manual.html | 72 +++ .../wpt/accname/name_radio-title-manual.html | 70 ++ .../accname/name_test_case_539-manual.html | 70 ++ .../accname/name_test_case_540-manual.html | 71 ++ .../accname/name_test_case_541-manual.html | 71 ++ .../accname/name_test_case_543-manual.html | 70 ++ .../accname/name_test_case_544-manual.html | 70 ++ .../accname/name_test_case_545-manual.html | 70 ++ .../accname/name_test_case_546-manual.html | 71 ++ .../accname/name_test_case_547-manual.html | 74 +++ .../accname/name_test_case_548-manual.html | 77 +++ .../accname/name_test_case_549-manual.html | 75 +++ .../accname/name_test_case_550-manual.html | 75 +++ .../accname/name_test_case_551-manual.html | 70 ++ .../accname/name_test_case_552-manual.html | 74 +++ .../accname/name_test_case_553-manual.html | 74 +++ .../accname/name_test_case_556-manual.html | 70 ++ .../accname/name_test_case_557-manual.html | 70 ++ .../accname/name_test_case_558-manual.html | 71 ++ .../accname/name_test_case_559-manual.html | 70 ++ .../accname/name_test_case_560-manual.html | 71 ++ .../accname/name_test_case_561-manual.html | 70 ++ .../accname/name_test_case_562-manual.html | 73 +++ .../accname/name_test_case_563-manual.html | 71 ++ .../accname/name_test_case_564-manual.html | 72 +++ .../accname/name_test_case_565-manual.html | 73 +++ .../accname/name_test_case_566-manual.html | 73 +++ .../accname/name_test_case_596-manual.html | 71 ++ .../accname/name_test_case_597-manual.html | 70 ++ .../accname/name_test_case_598-manual.html | 71 ++ .../accname/name_test_case_599-manual.html | 72 +++ .../accname/name_test_case_600-manual.html | 70 ++ .../accname/name_test_case_601-manual.html | 70 ++ .../accname/name_test_case_602-manual.html | 71 ++ .../accname/name_test_case_603-manual.html | 71 ++ .../accname/name_test_case_604-manual.html | 70 ++ .../accname/name_test_case_605-manual.html | 71 ++ .../accname/name_test_case_606-manual.html | 71 ++ .../accname/name_test_case_607-manual.html | 70 ++ .../accname/name_test_case_608-manual.html | 70 ++ .../accname/name_test_case_609-manual.html | 73 +++ .../accname/name_test_case_610-manual.html | 71 ++ .../accname/name_test_case_611-manual.html | 71 ++ .../accname/name_test_case_612-manual.html | 71 ++ .../accname/name_test_case_613-manual.html | 71 ++ .../accname/name_test_case_614-manual.html | 71 ++ .../accname/name_test_case_615-manual.html | 71 ++ .../accname/name_test_case_616-manual.html | 71 ++ .../accname/name_test_case_617-manual.html | 71 ++ .../accname/name_test_case_618-manual.html | 71 ++ .../accname/name_test_case_619-manual.html | 71 ++ .../accname/name_test_case_620-manual.html | 71 ++ .../accname/name_test_case_621-manual.html | 71 ++ .../accname/name_test_case_659-manual.html | 76 +++ .../accname/name_test_case_660-manual.html | 76 +++ .../accname/name_test_case_661-manual.html | 76 +++ .../accname/name_test_case_662-manual.html | 76 +++ .../accname/name_test_case_663a-manual.html | 76 +++ .../accname/name_test_case_721-manual.html | 71 ++ .../accname/name_test_case_723-manual.html | 71 ++ .../accname/name_test_case_724-manual.html | 71 ++ .../accname/name_test_case_725-manual.html | 71 ++ .../accname/name_test_case_726-manual.html | 71 ++ .../accname/name_test_case_727-manual.html | 74 +++ .../accname/name_test_case_728-manual.html | 74 +++ .../accname/name_test_case_729-manual.html | 74 +++ .../accname/name_test_case_730-manual.html | 74 +++ .../accname/name_test_case_731-manual.html | 74 +++ .../accname/name_test_case_733-manual.html | 77 +++ .../accname/name_test_case_734-manual.html | 77 +++ .../accname/name_test_case_735-manual.html | 77 +++ .../accname/name_test_case_736-manual.html | 77 +++ .../accname/name_test_case_737-manual.html | 77 +++ .../accname/name_test_case_738-manual.html | 75 +++ .../accname/name_test_case_739-manual.html | 75 +++ .../accname/name_test_case_740-manual.html | 75 +++ .../accname/name_test_case_741-manual.html | 75 +++ .../accname/name_test_case_742-manual.html | 75 +++ .../accname/name_test_case_743-manual.html | 75 +++ .../accname/name_test_case_744-manual.html | 75 +++ .../accname/name_test_case_745-manual.html | 75 +++ .../accname/name_test_case_746-manual.html | 75 +++ .../accname/name_test_case_747-manual.html | 75 +++ .../accname/name_test_case_748-manual.html | 70 ++ .../accname/name_test_case_749-manual.html | 70 ++ .../accname/name_test_case_750-manual.html | 70 ++ .../accname/name_test_case_751-manual.html | 70 ++ .../accname/name_test_case_752-manual.html | 70 ++ .../accname/name_test_case_753-manual.html | 74 +++ .../accname/name_test_case_754-manual.html | 74 +++ .../accname/name_test_case_755-manual.html | 74 +++ .../accname/name_test_case_756-manual.html | 74 +++ .../accname/name_test_case_757-manual.html | 74 +++ .../accname/name_test_case_758-manual.html | 74 +++ .../accname/name_test_case_759-manual.html | 74 +++ .../accname/name_test_case_760-manual.html | 74 +++ .../accname/name_test_case_761-manual.html | 74 +++ .../accname/name_test_case_762-manual.html | 74 +++ ...e_text-label-embedded-combobox-manual.html | 81 +++ .../name_text-label-embedded-menu-manual.html | 78 +++ ...ame_text-label-embedded-select-manual.html | 78 +++ ...ame_text-label-embedded-slider-manual.html | 72 +++ ...text-label-embedded-spinbutton-manual.html | 72 +++ .../wpt/accname/name_text-title-manual.html | 70 ++ tests/assets/wpt/wai-aria/scripts/manual.css | 70 ++ tests/role-utils.spec.ts | 79 +++ 153 files changed, 11536 insertions(+), 4 deletions(-) create mode 100644 packages/playwright-core/src/server/injected/roleUtils.ts create mode 100644 tests/assets/wpt/LICENSE.md create mode 100644 tests/assets/wpt/README.md create mode 100644 tests/assets/wpt/accname/foo.jpg create mode 100644 tests/assets/wpt/accname/name_1.0_combobox-focusable-alternative-manual.html create mode 100644 tests/assets/wpt/accname/name_1.0_combobox-focusable-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-embedded-combobox-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-embedded-listbox-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-embedded-menu-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-embedded-select-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-embedded-slider-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-embedded-spinbutton-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-embedded-textbox-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-multiple-label-alternative-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-label-multiple-label-manual.html create mode 100644 tests/assets/wpt/accname/name_checkbox-title-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-embedded-combobox-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-embedded-menu-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-embedded-select-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-embedded-slider-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-embedded-spinbutton-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-inline-block-elements-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-inline-block-styles-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-inline-hidden-elements-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-owned-combobox-manual.html create mode 100644 tests/assets/wpt/accname/name_file-label-owned-combobox-owned-listbox-manual.html create mode 100644 tests/assets/wpt/accname/name_file-title-manual.html create mode 100644 tests/assets/wpt/accname/name_from_content-manual.html create mode 100644 tests/assets/wpt/accname/name_from_content_of_label-manual.html create mode 100644 tests/assets/wpt/accname/name_from_content_of_labelledby_element-manual.html create mode 100644 tests/assets/wpt/accname/name_from_content_of_labelledby_elements_one_of_which_is_hidden-manual.html create mode 100644 tests/assets/wpt/accname/name_heading-combobox-focusable-alternative-manual.html create mode 100644 tests/assets/wpt/accname/name_image-title-manual.html create mode 100644 tests/assets/wpt/accname/name_link-mixed-content-manual.html create mode 100644 tests/assets/wpt/accname/name_link-with-label-manual.html create mode 100644 tests/assets/wpt/accname/name_password-label-embedded-combobox-manual.html create mode 100644 tests/assets/wpt/accname/name_password-label-embedded-menu-manual.html create mode 100644 tests/assets/wpt/accname/name_password-label-embedded-select-manual.html create mode 100644 tests/assets/wpt/accname/name_password-label-embedded-slider-manual.html create mode 100644 tests/assets/wpt/accname/name_password-label-embedded-spinbutton-manual.html create mode 100644 tests/assets/wpt/accname/name_password-title-manual.html create mode 100644 tests/assets/wpt/accname/name_radio-label-embedded-combobox-manual.html create mode 100644 tests/assets/wpt/accname/name_radio-label-embedded-menu-manual.html create mode 100644 tests/assets/wpt/accname/name_radio-label-embedded-select-manual.html create mode 100644 tests/assets/wpt/accname/name_radio-label-embedded-slider-manual.html create mode 100644 tests/assets/wpt/accname/name_radio-label-embedded-spinbutton-manual.html create mode 100644 tests/assets/wpt/accname/name_radio-title-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_539-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_540-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_541-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_543-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_544-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_545-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_546-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_547-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_548-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_549-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_550-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_551-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_552-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_553-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_556-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_557-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_558-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_559-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_560-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_561-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_562-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_563-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_564-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_565-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_566-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_596-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_597-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_598-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_599-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_600-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_601-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_602-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_603-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_604-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_605-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_606-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_607-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_608-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_609-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_610-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_611-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_612-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_613-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_614-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_615-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_616-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_617-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_618-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_619-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_620-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_621-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_659-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_660-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_661-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_662-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_663a-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_721-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_723-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_724-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_725-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_726-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_727-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_728-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_729-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_730-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_731-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_733-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_734-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_735-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_736-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_737-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_738-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_739-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_740-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_741-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_742-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_743-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_744-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_745-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_746-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_747-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_748-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_749-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_750-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_751-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_752-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_753-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_754-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_755-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_756-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_757-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_758-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_759-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_760-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_761-manual.html create mode 100644 tests/assets/wpt/accname/name_test_case_762-manual.html create mode 100644 tests/assets/wpt/accname/name_text-label-embedded-combobox-manual.html create mode 100644 tests/assets/wpt/accname/name_text-label-embedded-menu-manual.html create mode 100644 tests/assets/wpt/accname/name_text-label-embedded-select-manual.html create mode 100644 tests/assets/wpt/accname/name_text-label-embedded-slider-manual.html create mode 100644 tests/assets/wpt/accname/name_text-label-embedded-spinbutton-manual.html create mode 100644 tests/assets/wpt/accname/name_text-title-manual.html create mode 100644 tests/assets/wpt/wai-aria/scripts/manual.css create mode 100644 tests/role-utils.spec.ts diff --git a/packages/playwright-core/src/server/injected/injectedScript.ts b/packages/playwright-core/src/server/injected/injectedScript.ts index b83232e00b..9da3755782 100644 --- a/packages/playwright-core/src/server/injected/injectedScript.ts +++ b/packages/playwright-core/src/server/injected/injectedScript.ts @@ -24,6 +24,7 @@ import { CSSComplexSelectorList } from '../common/cssParser'; import { generateSelector } from './selectorGenerator'; import type * as channels from '../../protocol/channels'; import { Highlight } from './highlight'; +import { getElementAccessibleName } from './roleUtils'; type Predicate = (progress: InjectedScriptProgress) => T | symbol; @@ -111,6 +112,9 @@ export class InjectedScript { this._setupGlobalListenersRemovalDetection(); this._setupHitTargetInterceptors(); + + if (isUnderTest) + (window as any).__injectedScript = this; } eval(expression: string): any { @@ -1066,6 +1070,11 @@ export class InjectedScript { } throw this.createStacklessError('Unknown expect matcher: ' + expression); } + + getElementAccessibleName(element: Element, includeHidden?: boolean): string { + const hiddenCache = new Map(); + return getElementAccessibleName(element, !!includeHidden, hiddenCache); + } } const autoClosingTags = new Set(['AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT', 'KEYGEN', 'LINK', 'MENUITEM', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR']); diff --git a/packages/playwright-core/src/server/injected/roleUtils.ts b/packages/playwright-core/src/server/injected/roleUtils.ts new file mode 100644 index 0000000000..1926c641d6 --- /dev/null +++ b/packages/playwright-core/src/server/injected/roleUtils.ts @@ -0,0 +1,611 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { closestCrossShadow, enclosingShadowRootOrDocument, parentElementOrShadowHost } from './selectorEvaluator'; + +function hasExplicitAccessibleName(e: Element) { + return e.hasAttribute('aria-label') || e.hasAttribute('aria-labelledby'); +} + +// https://www.w3.org/TR/wai-aria-practices/examples/landmarks/HTML5.html +const kAncestorPreventingLandmark = 'article:not([role]), aside:not([role]), main:not([role]), nav:not([role]), section:not([role]), [role=article], [role=complementary], [role=main], [role=navigation], [role=region]'; + +// https://www.w3.org/TR/wai-aria-1.2/#global_states +const kGlobalAriaAttributes = [ + 'aria-atomic', + 'aria-busy', + 'aria-controls', + 'aria-current', + 'aria-describedby', + 'aria-details', + 'aria-disabled', + 'aria-dropeffect', + 'aria-errormessage', + 'aria-flowto', + 'aria-grabbed', + 'aria-haspopup', + 'aria-hidden', + 'aria-invalid', + 'aria-keyshortcuts', + 'aria-label', + 'aria-labelledby', + 'aria-live', + 'aria-owns', + 'aria-relevant', + 'aria-roledescription', +]; + +function hasGlobalAriaAttribute(e: Element) { + return kGlobalAriaAttributes.some(a => e.hasAttribute(a)); +} + +// https://w3c.github.io/html-aam/#html-element-role-mappings +const kImplicitRoleByTagName: { [tagName: string]: (e: Element) => string | null } = { + 'A': (e: Element) => { + return e.hasAttribute('href') ? 'link' : null; + }, + 'AREA': (e: Element) => { + return e.hasAttribute('href') ? 'link' : null; + }, + 'ARTICLE': () => 'article', + 'ASIDE': () => 'complementary', + 'BLOCKQUOTE': () => 'blockquote', + 'BUTTON': () => 'button', + 'CAPTION': () => 'caption', + 'CODE': () => 'code', + 'DATALIST': () => 'listbox', + 'DD': () => 'definition', + 'DEL': () => 'deletion', + 'DETAILS': () => 'group', + 'DFN': () => 'term', + 'DIALOG': () => 'dialog', + 'DT': () => 'term', + 'EM': () => 'emphasis', + 'FIELDSET': () => 'group', + 'FIGURE': () => 'figure', + 'FOOTER': (e: Element) => closestCrossShadow(e, kAncestorPreventingLandmark) ? null : 'contentinfo', + 'FORM': (e: Element) => hasExplicitAccessibleName(e) ? 'form' : null, + 'H1': () => 'heading', + 'H2': () => 'heading', + 'H3': () => 'heading', + 'H4': () => 'heading', + 'H5': () => 'heading', + 'H6': () => 'heading', + 'HEADER': (e: Element) => closestCrossShadow(e, kAncestorPreventingLandmark) ? null : 'banner', + 'HR': () => 'separator', + 'HTML': () => 'document', + 'IMG': (e: Element) => e.getAttribute('alt') || hasGlobalAriaAttribute(e) ? 'img' : 'presentation', + 'INPUT': (e: Element) => { + const type = (e as HTMLInputElement).type.toLowerCase(); + if (type === 'search') + return e.hasAttribute('list') ? 'combobox' : 'searchbox'; + if (['email', 'tel', 'text', 'url', ''].includes(type)) + return e.hasAttribute('list') ? 'combobox' : 'textbox'; + if (type === 'hidden') + return ''; + return { + 'button': 'button', + 'checkbox': 'checkbox', + 'image': 'button', + 'number': 'spinbutton', + 'radio': 'radio', + 'range': 'slider', + 'reset': 'button', + 'submit': 'button', + }[type] || 'textbox'; + }, + 'INS': () => 'insertion', + 'LI': () => 'listitem', + 'MAIN': () => 'main', + 'MARK': () => 'mark', + 'MATH': () => 'math', + 'MENU': () => 'list', + 'METER': () => 'meter', + 'NAV': () => 'navigation', + 'OL': () => 'list', + 'OPTGROUP': () => 'group', + 'OPTION': () => 'option', + 'OUTPUT': () => 'status', + 'P': () => 'paragraph', + 'PROGRESS': () => 'progressbar', + 'SECTION': (e: Element) => hasExplicitAccessibleName(e) ? 'region' : null, + 'SELECT': (e: Element) => e.hasAttribute('multiple') || (e as HTMLSelectElement).size > 1 ? 'listbox' : 'combobox', + 'STRONG': () => 'strong', + 'SUB': () => 'subscript', + 'SUP': () => 'superscript', + 'TABLE': () => 'table', + 'TBODY': () => 'rowgroup', + 'TD': (e: Element) => { + const table = closestCrossShadow(e, 'table'); + const role = table ? getExplicitAriaRole(table) : ''; + return (role === 'grid' || role === 'treegrid') ? 'gridcell' : 'cell'; + }, + 'TEXTAREA': () => 'textbox', + 'TFOOT': () => 'rowgroup', + 'TH': (e: Element) => { + if (e.getAttribute('scope') === 'col') + return 'columnheader'; + if (e.getAttribute('scope') === 'row') + return 'rowheader'; + const table = closestCrossShadow(e, 'table'); + const role = table ? getExplicitAriaRole(table) : ''; + return (role === 'grid' || role === 'treegrid') ? 'gridcell' : 'cell'; + }, + 'THEAD': () => 'rowgroup', + 'TIME': () => 'time', + 'TR': () => 'row', + 'UL': () => 'list', +}; + +const kPresentationInheritanceParents: { [tagName: string]: string[] } = { + 'DD': ['DL', 'DIV'], + 'DIV': ['DL'], + 'DT': ['DL', 'DIV'], + 'LI': ['OL', 'UL'], + 'TBODY': ['TABLE'], + 'TD': ['TR'], + 'TFOOT': ['TABLE'], + 'TH': ['TR'], + 'THEAD': ['TABLE'], + 'TR': ['THEAD', 'TBODY', 'TFOOT', 'TABLE'], +}; + +function getImplicitAriaRole(element: Element): string | null { + const implicitRole = kImplicitRoleByTagName[element.tagName]?.(element) || ''; + if (!implicitRole) + return null; + // Inherit presentation role when required. + // https://www.w3.org/TR/wai-aria-1.2/#conflict_resolution_presentation_none + let ancestor: Element | null = element; + while (ancestor) { + const parent = parentElementOrShadowHost(ancestor); + const parents = kPresentationInheritanceParents[ancestor.tagName]; + if (!parents || !parent || !parents.includes(parent.tagName)) + break; + const parentExplicitRole = getExplicitAriaRole(parent); + if ((parentExplicitRole === 'none' || parentExplicitRole === 'presentation') && !hasPresentationConflictResolution(parent)) + return parentExplicitRole; + ancestor = parent; + } + return implicitRole; +} + +// https://www.w3.org/TR/wai-aria-1.2/#role_definitions +const allRoles = [ + 'alert', 'alertdialog', 'application', 'article', 'banner', 'blockquote', 'button', 'caption', 'cell', 'checkbox', 'code', 'columnheader', 'combobox', 'command', + 'complementary', 'composite', 'contentinfo', 'definition', 'deletion', 'dialog', 'directory', 'document', 'emphasis', 'feed', 'figure', 'form', 'generic', 'grid', + 'gridcell', 'group', 'heading', 'img', 'input', 'insertion', 'landmark', 'link', 'list', 'listbox', 'listitem', 'log', 'main', 'marquee', 'math', 'meter', 'menu', + 'menubar', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'navigation', 'none', 'note', 'option', 'paragraph', 'presentation', 'progressbar', 'radio', 'radiogroup', + 'range', 'region', 'roletype', 'row', 'rowgroup', 'rowheader', 'scrollbar', 'search', 'searchbox', 'section', 'sectionhead', 'select', 'separator', 'slider', + 'spinbutton', 'status', 'strong', 'structure', 'subscript', 'superscript', 'switch', 'tab', 'table', 'tablist', 'tabpanel', 'term', 'textbox', 'time', 'timer', + 'toolbar', 'tooltip', 'tree', 'treegrid', 'treeitem', 'widget', 'window' +]; +// https://www.w3.org/TR/wai-aria-1.2/#abstract_roles +const abstractRoles = ['command', 'composite', 'input', 'landmark', 'range', 'roletype', 'section', 'sectionhead', 'select', 'structure', 'widget', 'window']; +const validRoles = allRoles.filter(role => !abstractRoles.includes(role)); + +function getExplicitAriaRole(element: Element): string | null { + // https://www.w3.org/TR/wai-aria-1.2/#document-handling_author-errors_roles + const explicitRole = (element.getAttribute('role') || '').trim().split(' ')[0]; + return validRoles.includes(explicitRole) ? explicitRole : null; +} + +function hasPresentationConflictResolution(element: Element) { + // https://www.w3.org/TR/wai-aria-1.2/#conflict_resolution_presentation_none + // TODO: this should include "|| focusable" check. + return !hasGlobalAriaAttribute(element); +} + +function getAriaRole(element: Element): string | null { + const explicitRole = getExplicitAriaRole(element); + if (!explicitRole) + return getImplicitAriaRole(element); + if ((explicitRole === 'none' || explicitRole === 'presentation') && hasPresentationConflictResolution(element)) + return getImplicitAriaRole(element); + return explicitRole; +} + +function getAriaBoolean(attr: string | null) { + return attr === null ? undefined : attr.toLowerCase() === 'true'; +} + +function getComputedStyle(element: Element, pseudo?: string): CSSStyleDeclaration | undefined { + return element.ownerDocument && element.ownerDocument.defaultView ? element.ownerDocument.defaultView.getComputedStyle(element, pseudo) : undefined; +} + +export function isElementHiddenForAria(element: Element, cache: Map): boolean { + if (['STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE'].includes(element.tagName)) + return true; + + let style: CSSStyleDeclaration | undefined = getComputedStyle(element); + if (!style || style.visibility === 'hidden') + return true; + + let parent: Element | undefined = element; + while (parent) { + if (!cache.has(parent)) { + if (!style) + style = getComputedStyle(parent); + const hidden = !style || style.display === 'none' || getAriaBoolean(parent.getAttribute('aria-hidden')) === true; + cache.set(parent, hidden); + } + if (cache.get(parent)!) + return true; + parent = parentElementOrShadowHost(parent); + } + return false; +} + +function getIdRefs(element: Element, ref: string | null): Element[] { + if (!ref) + return []; + const root = enclosingShadowRootOrDocument(element); + if (!root) + return []; + try { + const ids = ref.split(' ').filter(id => !!id); + const set = new Set(); + for (const id of ids) { + // https://www.w3.org/TR/wai-aria-1.2/#mapping_additional_relations_error_processing + // "If more than one element has the same ID, the user agent SHOULD use the first element found with the given ID" + const firstElement = root.querySelector('#' + CSS.escape(id)); + if (firstElement) + set.add(firstElement); + } + return [...set]; + } catch (e) { + return []; + } +} + +function normalizeAccessbileName(s: string): string { + // "Flat string" at https://w3c.github.io/accname/#terminology + return s.replace(/\r\n/g, '\n').replace(/\u00A0/g, ' ').replace(/\s\s+/g, ' ').trim(); +} + +function queryInAriaOwned(element: Element, selector: string): Element[] { + const result = [...element.querySelectorAll(selector)]; + for (const owned of getIdRefs(element, element.getAttribute('aria-owns'))) { + if (owned.matches(selector)) + result.push(owned); + result.push(...owned.querySelectorAll(selector)); + } + return result; +} + +function getPseudoContent(pseudoStyle: CSSStyleDeclaration | undefined) { + if (!pseudoStyle) + return ''; + const content = pseudoStyle.getPropertyValue('content'); + if ((content[0] === '\'' && content[content.length - 1] === '\'') || + (content[0] === '"' && content[content.length - 1] === '"')) { + const unquoted = content.substring(1, content.length - 1); + // SPEC DIFFERENCE. + // Spec says "CSS textual content, without a space", but we account for display + // to pass "name_file-label-inline-block-styles-manual.html" + const display = pseudoStyle.getPropertyValue('display') || 'inline'; + if (display !== 'inline') + return ' ' + unquoted + ' '; + return unquoted; + } + return ''; +} + +export function getElementAccessibleName(element: Element, includeHidden: boolean, hiddenCache: Map): string { + // https://w3c.github.io/accname/#computation-steps + + // step 1. + // https://w3c.github.io/aria/#namefromprohibited + const elementProhibitsNaming = ['caption', 'code', 'definition', 'deletion', 'emphasis', 'generic', 'insertion', 'mark', 'paragraph', 'presentation', 'strong', 'subscript', 'suggestion', 'superscript', 'term', 'time'].includes(getAriaRole(element) || ''); + if (elementProhibitsNaming) + return ''; + + // step 2. + const accessibleName = normalizeAccessbileName(getElementAccessibleNameInternal(element, { + includeHidden, + hiddenCache, + visitedElements: new Set(), + embeddedInLabelledBy: 'none', + embeddedInLabel: 'none', + embeddedInTextAlternativeElement: false, + embeddedInTargetElement: 'self', + })); + return accessibleName; +} + +type AccessibleNameOptions = { + includeHidden: boolean, + hiddenCache: Map, + visitedElements: Set, + embeddedInLabelledBy: 'none' | 'self' | 'descendant', + embeddedInLabel: 'none' | 'self' | 'descendant', + embeddedInTextAlternativeElement: boolean, + embeddedInTargetElement: 'none' | 'self' | 'descendant', +}; + +function getElementAccessibleNameInternal(element: Element, options: AccessibleNameOptions): string { + if (options.visitedElements.has(element)) + return ''; + + const childOptions: AccessibleNameOptions = { + ...options, + embeddedInLabel: options.embeddedInLabel === 'self' ? 'descendant' : options.embeddedInLabel, + embeddedInLabelledBy: options.embeddedInLabelledBy === 'self' ? 'descendant' : options.embeddedInLabelledBy, + embeddedInTargetElement: options.embeddedInTargetElement === 'self' ? 'descendant' : options.embeddedInTargetElement, + }; + + // step 2a. + if (!options.includeHidden && options.embeddedInLabelledBy !== 'self' && isElementHiddenForAria(element, options.hiddenCache)) { + options.visitedElements.add(element); + return ''; + } + + // step 2b. + if (options.embeddedInLabelledBy === 'none') { + const refs = getIdRefs(element, element.getAttribute('aria-labelledby')); + const accessibleName = refs.map(ref => getElementAccessibleNameInternal(ref, { + ...options, + embeddedInLabelledBy: 'self', + embeddedInTargetElement: 'none', + embeddedInLabel: 'none', + embeddedInTextAlternativeElement: false, + })).join(' '); + if (accessibleName) + return accessibleName; + } + + const role = getAriaRole(element) || ''; + + // step 2c. + if (options.embeddedInLabel !== 'none' || options.embeddedInLabelledBy !== 'none') { + const isOwnLabel = [...(element as (HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement)).labels || []].includes(element as any); + const isOwnLabelledBy = getIdRefs(element, element.getAttribute('aria-labelledby')).includes(element); + if (!isOwnLabel && !isOwnLabelledBy) { + if (role === 'textbox') { + options.visitedElements.add(element); + if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') + return (element as HTMLInputElement | HTMLTextAreaElement).value; + return element.textContent || ''; + } + if (['combobox', 'listbox'].includes(role)) { + options.visitedElements.add(element); + let selectedOptions: Element[]; + if (element.tagName === 'SELECT') { + selectedOptions = [...(element as HTMLSelectElement).selectedOptions]; + if (!selectedOptions.length && (element as HTMLSelectElement).options.length) + selectedOptions.push((element as HTMLSelectElement).options[0]); + } else { + const listbox = role === 'combobox' ? queryInAriaOwned(element, '*').find(e => getAriaRole(e) === 'listbox') : element; + selectedOptions = listbox ? queryInAriaOwned(listbox, '[aria-selected="true"]').filter(e => getAriaRole(e) === 'option') : []; + } + return selectedOptions.map(option => getElementAccessibleNameInternal(option, childOptions)).join(' '); + } + if (['progressbar', 'scrollbar', 'slider', 'spinbutton', 'meter'].includes(role)) { + options.visitedElements.add(element); + if (element.hasAttribute('aria-valuetext')) + return element.getAttribute('aria-valuetext') || ''; + if (element.hasAttribute('aria-valuenow')) + return element.getAttribute('aria-valuenow') || ''; + return element.getAttribute('value') || ''; + } + if (['menu'].includes(role)) { + // https://github.com/w3c/accname/issues/67#issuecomment-553196887 + options.visitedElements.add(element); + return ''; + } + } + } + + // step 2d. + const ariaLabel = element.getAttribute('aria-label') || ''; + if (ariaLabel.trim()) { + options.visitedElements.add(element); + return ariaLabel; + } + + // step 2e. + if (!['presentation', 'none'].includes(role)) { + // https://w3c.github.io/html-aam/#input-type-button-input-type-submit-and-input-type-reset + if (element.tagName === 'INPUT' && ['button', 'submit', 'reset'].includes((element as HTMLInputElement).type)) { + options.visitedElements.add(element); + const value = (element as HTMLInputElement).value || ''; + if (value.trim()) + return value; + if ((element as HTMLInputElement).type === 'submit') + return 'Submit'; + if ((element as HTMLInputElement).type === 'reset') + return 'Reset'; + const title = element.getAttribute('title') || ''; + return title; + } + + // https://w3c.github.io/html-aam/#input-type-image + if (element.tagName === 'INPUT' && (element as HTMLInputElement).type === 'image') { + options.visitedElements.add(element); + const alt = element.getAttribute('alt') || ''; + if (alt.trim()) + return alt; + // SPEC DIFFERENCE. + // Spec does not mention "label" elements, but we account for labels + // to pass "name_test_case_616-manual.html" + const labels = (element as HTMLInputElement).labels || []; + if (labels.length) { + return [...labels].map(label => getElementAccessibleNameInternal(label, { + ...options, + embeddedInLabel: 'self', + embeddedInTextAlternativeElement: false, + embeddedInLabelledBy: 'none', + embeddedInTargetElement: 'none', + })).filter(accessibleName => !!accessibleName).join(' '); + } + const title = element.getAttribute('title') || ''; + if (title.trim()) + return title; + return 'Submit Query'; + } + + // https://w3c.github.io/html-aam/#input-type-text-input-type-password-input-type-search-input-type-tel-input-type-url-and-textarea-element + // https://w3c.github.io/html-aam/#other-form-elements + // For "other form elements", we count select and any other input. + if (element.tagName === 'TEXTAREA' || element.tagName === 'SELECT' || element.tagName === 'INPUT') { + options.visitedElements.add(element); + const labels = (element as (HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement)).labels || []; + if (labels.length) { + return [...labels].map(label => getElementAccessibleNameInternal(label, { + ...options, + embeddedInLabel: 'self', + embeddedInTextAlternativeElement: false, + embeddedInLabelledBy: 'none', + embeddedInTargetElement: 'none', + })).filter(accessibleName => !!accessibleName).join(' '); + } + + const usePlaceholder = (element.tagName === 'INPUT' && ['text', 'password', 'search', 'tel', 'email', 'url'].includes((element as HTMLInputElement).type)) || element.tagName === 'TEXTAREA'; + const placeholder = element.getAttribute('placeholder') || ''; + const title = element.getAttribute('title') || ''; + if (!usePlaceholder || title) + return title; + return placeholder; + } + + // https://w3c.github.io/html-aam/#fieldset-and-legend-elements + if (element.tagName === 'FIELDSET') { + options.visitedElements.add(element); + for (let child = element.firstElementChild; child; child = child.nextElementSibling) { + if (child.tagName === 'LEGEND') { + return getElementAccessibleNameInternal(child, { + ...childOptions, + embeddedInTextAlternativeElement: true, + }); + } + } + const title = element.getAttribute('title') || ''; + return title; + } + + // https://w3c.github.io/html-aam/#figure-and-figcaption-elements + if (element.tagName === 'FIGURE') { + options.visitedElements.add(element); + for (let child = element.firstElementChild; child; child = child.nextElementSibling) { + if (child.tagName === 'FIGCAPTION') { + return getElementAccessibleNameInternal(child, { + ...childOptions, + embeddedInTextAlternativeElement: true, + }); + } + } + const title = element.getAttribute('title') || ''; + return title; + } + + // https://w3c.github.io/html-aam/#img-element + if (element.tagName === 'IMG') { + options.visitedElements.add(element); + const alt = element.getAttribute('alt') || ''; + if (alt.trim()) + return alt; + const title = element.getAttribute('title') || ''; + return title; + } + + // https://w3c.github.io/html-aam/#table-element + if (element.tagName === 'TABLE') { + options.visitedElements.add(element); + for (let child = element.firstElementChild; child; child = child.nextElementSibling) { + if (child.tagName === 'CAPTION') { + return getElementAccessibleNameInternal(child, { + ...childOptions, + embeddedInTextAlternativeElement: true, + }); + } + } + // SPEC DIFFERENCE. + // Spec says "if the table element has a title attribute, then use that attribute". + // We ignore title to pass "name_from_content-manual.html". + } + + // https://w3c.github.io/html-aam/#area-element + if (element.tagName === 'AREA') { + options.visitedElements.add(element); + const alt = element.getAttribute('alt') || ''; + if (alt.trim()) + return alt; + const title = element.getAttribute('title') || ''; + return title; + } + + // https://www.w3.org/TR/svg-aam-1.0/ + if (element.tagName === 'SVG' && (element as SVGElement).ownerSVGElement) { + options.visitedElements.add(element); + for (let child = element.firstElementChild; child; child = child.nextElementSibling) { + if (child.tagName === 'TITLE' && (element as SVGElement).ownerSVGElement) { + return getElementAccessibleNameInternal(child, { + ...childOptions, + embeddedInTextAlternativeElement: true, + }); + } + } + } + } + + // step 2f + step 2h. + // https://w3c.github.io/aria/#namefromcontent + const allowsNameFromContent = ['button', 'cell', 'checkbox', 'columnheader', 'gridcell', 'heading', 'link', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'row', 'rowheader', 'switch', 'tab', 'tooltip', 'treeitem'].includes(role); + if (allowsNameFromContent || options.embeddedInLabelledBy !== 'none' || options.embeddedInLabel !== 'none' || options.embeddedInTextAlternativeElement || options.embeddedInTargetElement === 'descendant') { + options.visitedElements.add(element); + const tokens: string[] = []; + const visit = (node: Node) => { + if (node.nodeType === 1 /* Node.ELEMENT_NODE */) { + const display = getComputedStyle(node as Element)?.getPropertyValue('display') || 'inline'; + let token = getElementAccessibleNameInternal(node as Element, childOptions); + // SPEC DIFFERENCE. + // Spec says "append the result to the accumulated text", assuming "with space". + // However, multiple tests insist that inline elements do not add a space. + // Additionally,
insists on a space anyway, see "name_file-label-inline-block-elements-manual.html" + if (display !== 'inline' || node.nodeName === 'BR') + token = ' ' + token + ' '; + tokens.push(token); + } else if (node.nodeType === 3 /* Node.TEXT_NODE */) { + // step 2g. + tokens.push(node.textContent || ''); + } + }; + tokens.push(getPseudoContent(getComputedStyle(element, '::before'))); + for (let child = element.firstChild; child; child = child.nextSibling) + visit(child); + if (element.shadowRoot) { + for (let child = element.shadowRoot.firstChild; child; child = child.nextSibling) + visit(child); + } + for (const owned of getIdRefs(element, element.getAttribute('aria-owns'))) + visit(owned); + tokens.push(getPseudoContent(getComputedStyle(element, '::after'))); + const accessibleName = tokens.join(''); + if (accessibleName.trim()) + return accessibleName; + } + + // step 2i. + if (!['presentation', 'none'].includes(role) || element.tagName === 'IFRAME') { + options.visitedElements.add(element); + const title = element.getAttribute('title') || ''; + if (title.trim()) + return title; + } + + options.visitedElements.add(element); + return ''; +} diff --git a/packages/playwright-core/src/server/injected/selectorEvaluator.ts b/packages/playwright-core/src/server/injected/selectorEvaluator.ts index 04f8687cbd..1ae998b3e8 100644 --- a/packages/playwright-core/src/server/injected/selectorEvaluator.ts +++ b/packages/playwright-core/src/server/injected/selectorEvaluator.ts @@ -626,9 +626,7 @@ export function isInsideScope(scope: Node, element: Element | undefined): boolea while (element) { if (scope.contains(element)) return true; - while (element.parentElement) - element = element.parentElement; - element = parentElementOrShadowHost(element); + element = enclosingShadowHost(element); } return false; } @@ -638,10 +636,33 @@ export function parentElementOrShadowHost(element: Element): Element | undefined return element.parentElement; if (!element.parentNode) return; - if (element.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE && (element.parentNode as ShadowRoot).host) + if (element.parentNode.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ && (element.parentNode as ShadowRoot).host) return (element.parentNode as ShadowRoot).host; } +export function enclosingShadowRootOrDocument(element: Element): Document | ShadowRoot | undefined { + let node: Node = element; + while (node.parentNode) + node = node.parentNode; + if (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ || node.nodeType === 9 /* Node.DOCUMENT_NODE */) + return node as Document | ShadowRoot; +} + +function enclosingShadowHost(element: Element): Element | undefined { + while (element.parentElement) + element = element.parentElement; + return parentElementOrShadowHost(element); +} + +export function closestCrossShadow(element: Element | undefined, css: string): Element | undefined { + while (element) { + const closest = element.closest(css); + if (closest) + return closest; + element = enclosingShadowHost(element); + } +} + function parentElementOrShadowHostInContext(element: Element, context: QueryContext): Element | undefined { if (element === context.scope) return; diff --git a/tests/assets/wpt/LICENSE.md b/tests/assets/wpt/LICENSE.md new file mode 100644 index 0000000000..39c46d03ac --- /dev/null +++ b/tests/assets/wpt/LICENSE.md @@ -0,0 +1,11 @@ +# The 3-Clause BSD License + +Copyright © web-platform-tests contributors + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tests/assets/wpt/README.md b/tests/assets/wpt/README.md new file mode 100644 index 0000000000..260e43a7ec --- /dev/null +++ b/tests/assets/wpt/README.md @@ -0,0 +1,10 @@ +Web platform tests are copied from https://github.com/web-platform-tests/wpt. + +Includes: +- `LICENSE.md` +- `accname/name*` test files +- `accname/foo.jpg` +- `wai-aria/scripts/manual.css` + +Modifed: +- `wai-aria/scripts/ATTAcomm.js` contains our own harness to avoid modifying test files diff --git a/tests/assets/wpt/accname/foo.jpg b/tests/assets/wpt/accname/foo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d11a4f7cf13a9a8e9ab3f7007673670a1d4055b GIT binary patch literal 6735 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<Jq?U}9uuW@2GxWo2Ojs;&jfGq4D<3Mm>ovIz$!vMUve7&T5@$f4}C@t|nX#SbdR zNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U65s^{JDXD4c8JStdC8cHM z6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$K>lK6V1{@L?lUxh2?G7a#KOYN z!VdBmBU3pLGYhh?DjKp0IR>&P778mFHFAhJOh>edpIsDmc$#S^h{bf zWe&T#q^$P2{SR}_|7URI_|NdctNy3auJ^)T?-wh(i(Hm?udABUrZ(~0(jz%Xw3_@F z)EjT@Nvr3KxwW9Wd%Y^>flQOvPg#ByvzGWqz9_ipxz_Kcoo4(U*CJj0+^R3;bwwy|uA6`T(|D_>inMRnq-QS?7gv03HkK0x!sve(a(EV-aRQG*X3yjalr0t5*+-ZJgD#zN1y-O>?-7n^ZojP>O zuQt0Gv9U;xqaUd=ql31rLm}C z6px0%Xc`zz1EXnRG!2ZVfzdQDng&MGz-Ss6O#`E8U^ESkrh(BkFq#HN)4*sN7)=AC MX<%rk0sH?q0c!v9bN~PV literal 0 HcmV?d00001 diff --git a/tests/assets/wpt/accname/name_1.0_combobox-focusable-alternative-manual.html b/tests/assets/wpt/accname/name_1.0_combobox-focusable-alternative-manual.html new file mode 100644 index 0000000000..454be9e5e3 --- /dev/null +++ b/tests/assets/wpt/accname/name_1.0_combobox-focusable-alternative-manual.html @@ -0,0 +1,70 @@ + + + + Name 1.0 combobox-focusable-alternative + + + + + + + + +

This test examines the ARIA properties for Name 1.0 combobox-focusable-alternative.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_1.0_combobox-focusable-manual.html b/tests/assets/wpt/accname/name_1.0_combobox-focusable-manual.html new file mode 100644 index 0000000000..bb7a03121e --- /dev/null +++ b/tests/assets/wpt/accname/name_1.0_combobox-focusable-manual.html @@ -0,0 +1,72 @@ + + + + Name 1.0 combobox-focusable + + + + + + + + +

This test examines the ARIA properties for Name 1.0 combobox-focusable.

+
+ English +
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-embedded-combobox-manual.html b/tests/assets/wpt/accname/name_checkbox-label-embedded-combobox-manual.html new file mode 100644 index 0000000000..24cbb70671 --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-embedded-combobox-manual.html @@ -0,0 +1,81 @@ + + + + Name checkbox-label-embedded-combobox + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-embedded-combobox.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-embedded-listbox-manual.html b/tests/assets/wpt/accname/name_checkbox-label-embedded-listbox-manual.html new file mode 100644 index 0000000000..a7bbe4c192 --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-embedded-listbox-manual.html @@ -0,0 +1,78 @@ + + + + Name checkbox-label-embedded-listbox + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-embedded-listbox.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-embedded-menu-manual.html b/tests/assets/wpt/accname/name_checkbox-label-embedded-menu-manual.html new file mode 100644 index 0000000000..1c18b98532 --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-embedded-menu-manual.html @@ -0,0 +1,78 @@ + + + + Name checkbox-label-embedded-menu + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-embedded-menu.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-embedded-select-manual.html b/tests/assets/wpt/accname/name_checkbox-label-embedded-select-manual.html new file mode 100644 index 0000000000..06c41e0b5d --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-embedded-select-manual.html @@ -0,0 +1,78 @@ + + + + Name checkbox-label-embedded-select + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-embedded-select.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-embedded-slider-manual.html b/tests/assets/wpt/accname/name_checkbox-label-embedded-slider-manual.html new file mode 100644 index 0000000000..48741d3c0f --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-embedded-slider-manual.html @@ -0,0 +1,72 @@ + + + + Name checkbox-label-embedded-slider + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-embedded-slider.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-embedded-spinbutton-manual.html b/tests/assets/wpt/accname/name_checkbox-label-embedded-spinbutton-manual.html new file mode 100644 index 0000000000..d5cf7a55bf --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-embedded-spinbutton-manual.html @@ -0,0 +1,72 @@ + + + + Name checkbox-label-embedded-spinbutton + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-embedded-spinbutton.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-embedded-textbox-manual.html b/tests/assets/wpt/accname/name_checkbox-label-embedded-textbox-manual.html new file mode 100644 index 0000000000..2d8642b7cc --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-embedded-textbox-manual.html @@ -0,0 +1,74 @@ + + + + Name checkbox-label-embedded-textbox + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-embedded-textbox.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-multiple-label-alternative-manual.html b/tests/assets/wpt/accname/name_checkbox-label-multiple-label-alternative-manual.html new file mode 100644 index 0000000000..9f446aaa66 --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-multiple-label-alternative-manual.html @@ -0,0 +1,71 @@ + + + + Name checkbox-label-multiple-label-alternative + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-multiple-label-alternative.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-label-multiple-label-manual.html b/tests/assets/wpt/accname/name_checkbox-label-multiple-label-manual.html new file mode 100644 index 0000000000..54c218c41c --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-label-multiple-label-manual.html @@ -0,0 +1,71 @@ + + + + Name checkbox-label-multiple-label + + + + + + + + +

This test examines the ARIA properties for Name checkbox-label-multiple-label.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_checkbox-title-manual.html b/tests/assets/wpt/accname/name_checkbox-title-manual.html new file mode 100644 index 0000000000..83b5a8c4d1 --- /dev/null +++ b/tests/assets/wpt/accname/name_checkbox-title-manual.html @@ -0,0 +1,70 @@ + + + + Name checkbox-title + + + + + + + + +

This test examines the ARIA properties for Name checkbox-title.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-embedded-combobox-manual.html b/tests/assets/wpt/accname/name_file-label-embedded-combobox-manual.html new file mode 100644 index 0000000000..06adca72fc --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-embedded-combobox-manual.html @@ -0,0 +1,81 @@ + + + + Name file-label-embedded-combobox + + + + + + + + +

This test examines the ARIA properties for Name file-label-embedded-combobox.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-embedded-menu-manual.html b/tests/assets/wpt/accname/name_file-label-embedded-menu-manual.html new file mode 100644 index 0000000000..de6bcbaffe --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-embedded-menu-manual.html @@ -0,0 +1,78 @@ + + + + Name file-label-embedded-menu + + + + + + + + +

This test examines the ARIA properties for Name file-label-embedded-menu.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-embedded-select-manual.html b/tests/assets/wpt/accname/name_file-label-embedded-select-manual.html new file mode 100644 index 0000000000..117e96cea6 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-embedded-select-manual.html @@ -0,0 +1,78 @@ + + + + Name file-label-embedded-select + + + + + + + + +

This test examines the ARIA properties for Name file-label-embedded-select.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-embedded-slider-manual.html b/tests/assets/wpt/accname/name_file-label-embedded-slider-manual.html new file mode 100644 index 0000000000..22a9057f95 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-embedded-slider-manual.html @@ -0,0 +1,72 @@ + + + + Name file-label-embedded-slider + + + + + + + + +

This test examines the ARIA properties for Name file-label-embedded-slider.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-embedded-spinbutton-manual.html b/tests/assets/wpt/accname/name_file-label-embedded-spinbutton-manual.html new file mode 100644 index 0000000000..1432e2fd24 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-embedded-spinbutton-manual.html @@ -0,0 +1,72 @@ + + + + Name file-label-embedded-spinbutton + + + + + + + + +

This test examines the ARIA properties for Name file-label-embedded-spinbutton.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-inline-block-elements-manual.html b/tests/assets/wpt/accname/name_file-label-inline-block-elements-manual.html new file mode 100644 index 0000000000..c2c1659111 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-inline-block-elements-manual.html @@ -0,0 +1,71 @@ + + + + Name file-label-inline-block-elements + + + + + + + + +

This test examines the ARIA properties for Name file-label-inline-block-elements.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-inline-block-styles-manual.html b/tests/assets/wpt/accname/name_file-label-inline-block-styles-manual.html new file mode 100644 index 0000000000..ecf6ed1bb9 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-inline-block-styles-manual.html @@ -0,0 +1,75 @@ + + + + Name file-label-inline-block-styles + + + + + + + + +

This test examines the ARIA properties for Name file-label-inline-block-styles.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-inline-hidden-elements-manual.html b/tests/assets/wpt/accname/name_file-label-inline-hidden-elements-manual.html new file mode 100644 index 0000000000..c982b42c16 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-inline-hidden-elements-manual.html @@ -0,0 +1,80 @@ + + + + Name file-label-inline-hidden-elements + + + + + + + + +

This test examines the ARIA properties for Name file-label-inline-hidden-elements.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-owned-combobox-manual.html b/tests/assets/wpt/accname/name_file-label-owned-combobox-manual.html new file mode 100644 index 0000000000..79a69177e3 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-owned-combobox-manual.html @@ -0,0 +1,81 @@ + + + + Name file-label-owned-combobox + + + + + + + + +

This test examines the ARIA properties for Name file-label-owned-combobox.

+ + +
+
+
+
    +
  • 1
  • +
  • 2
  • +
  • 3
  • +
+
+
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-label-owned-combobox-owned-listbox-manual.html b/tests/assets/wpt/accname/name_file-label-owned-combobox-owned-listbox-manual.html new file mode 100644 index 0000000000..4bbc6f3613 --- /dev/null +++ b/tests/assets/wpt/accname/name_file-label-owned-combobox-owned-listbox-manual.html @@ -0,0 +1,83 @@ + + + + Name file-label-owned-combobox-owned-listbox + + + + + + + + +

This test examines the ARIA properties for Name file-label-owned-combobox-owned-listbox.

+ + +
+
+
+
+
+
+
    +
  • 1
  • +
  • 2
  • +
  • 3
  • +
+
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_file-title-manual.html b/tests/assets/wpt/accname/name_file-title-manual.html new file mode 100644 index 0000000000..77b7bf68bc --- /dev/null +++ b/tests/assets/wpt/accname/name_file-title-manual.html @@ -0,0 +1,70 @@ + + + + Name file-title + + + + + + + + +

This test examines the ARIA properties for Name file-title.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_from_content-manual.html b/tests/assets/wpt/accname/name_from_content-manual.html new file mode 100644 index 0000000000..f7e2491d3a --- /dev/null +++ b/tests/assets/wpt/accname/name_from_content-manual.html @@ -0,0 +1,91 @@ + + + + Name from content + + + + + + + + +

This test examines the ARIA properties for Name from content.

+ +
+ + My name is +
+ + Zambino + + the weird. + (QED) + + + + + + + + +
Where
in
the world
are my marbles?
+
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_from_content_of_label-manual.html b/tests/assets/wpt/accname/name_from_content_of_label-manual.html new file mode 100644 index 0000000000..3eb5b77926 --- /dev/null +++ b/tests/assets/wpt/accname/name_from_content_of_label-manual.html @@ -0,0 +1,92 @@ + + + + Name from content of label + + + + + + + + +

This test examines the ARIA properties for Name from content of label.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_from_content_of_labelledby_element-manual.html b/tests/assets/wpt/accname/name_from_content_of_labelledby_element-manual.html new file mode 100644 index 0000000000..a60a8c0a0e --- /dev/null +++ b/tests/assets/wpt/accname/name_from_content_of_labelledby_element-manual.html @@ -0,0 +1,92 @@ + + + + Name from content of labelledby element + + + + + + + + +

This test examines the ARIA properties for Name from content of labelledby element.

+ + +
+ + My name is +
+ + Zambino + + the weird. + (QED) + + + + + + + + +
Where
in
the world
are my marbles?
+
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_from_content_of_labelledby_elements_one_of_which_is_hidden-manual.html b/tests/assets/wpt/accname/name_from_content_of_labelledby_elements_one_of_which_is_hidden-manual.html new file mode 100644 index 0000000000..879393037e --- /dev/null +++ b/tests/assets/wpt/accname/name_from_content_of_labelledby_elements_one_of_which_is_hidden-manual.html @@ -0,0 +1,102 @@ + + + + Name from content of labelledby elements one of which is hidden + + + + + + + + +

This test examines the ARIA properties for Name from content of labelledby elements one of which is hidden.

+ +
+ + + + + +
+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_heading-combobox-focusable-alternative-manual.html b/tests/assets/wpt/accname/name_heading-combobox-focusable-alternative-manual.html new file mode 100644 index 0000000000..c1540b12be --- /dev/null +++ b/tests/assets/wpt/accname/name_heading-combobox-focusable-alternative-manual.html @@ -0,0 +1,73 @@ + + + + Name heading-combobox-focusable-alternative + + + + + + + + +

This test examines the ARIA properties for Name heading-combobox-focusable-alternative.

+

+ Country of origin: + +

+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_image-title-manual.html b/tests/assets/wpt/accname/name_image-title-manual.html new file mode 100644 index 0000000000..43ce9be14e --- /dev/null +++ b/tests/assets/wpt/accname/name_image-title-manual.html @@ -0,0 +1,70 @@ + + + + Name image-title + + + + + + + + +

This test examines the ARIA properties for Name image-title.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_link-mixed-content-manual.html b/tests/assets/wpt/accname/name_link-mixed-content-manual.html new file mode 100644 index 0000000000..f089ebde60 --- /dev/null +++ b/tests/assets/wpt/accname/name_link-mixed-content-manual.html @@ -0,0 +1,81 @@ + + + + Name link-mixed-content + + + + + + + + +

This test examines the ARIA properties for Name link-mixed-content.

+ +
+ + My name is +
+ Zambino + the weird. + (QED) + +
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_link-with-label-manual.html b/tests/assets/wpt/accname/name_link-with-label-manual.html new file mode 100644 index 0000000000..e8f1e3f813 --- /dev/null +++ b/tests/assets/wpt/accname/name_link-with-label-manual.html @@ -0,0 +1,70 @@ + + + + Name link-with-label + + + + + + + + +

This test examines the ARIA properties for Name link-with-label.

+ United States + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_password-label-embedded-combobox-manual.html b/tests/assets/wpt/accname/name_password-label-embedded-combobox-manual.html new file mode 100644 index 0000000000..39c8005a71 --- /dev/null +++ b/tests/assets/wpt/accname/name_password-label-embedded-combobox-manual.html @@ -0,0 +1,81 @@ + + + + Name password-label-embedded-combobox + + + + + + + + +

This test examines the ARIA properties for Name password-label-embedded-combobox.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_password-label-embedded-menu-manual.html b/tests/assets/wpt/accname/name_password-label-embedded-menu-manual.html new file mode 100644 index 0000000000..d6ad64966a --- /dev/null +++ b/tests/assets/wpt/accname/name_password-label-embedded-menu-manual.html @@ -0,0 +1,78 @@ + + + + Name password-label-embedded-menu + + + + + + + + +

This test examines the ARIA properties for Name password-label-embedded-menu.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_password-label-embedded-select-manual.html b/tests/assets/wpt/accname/name_password-label-embedded-select-manual.html new file mode 100644 index 0000000000..f4b96e2cd1 --- /dev/null +++ b/tests/assets/wpt/accname/name_password-label-embedded-select-manual.html @@ -0,0 +1,78 @@ + + + + Name password-label-embedded-select + + + + + + + + +

This test examines the ARIA properties for Name password-label-embedded-select.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_password-label-embedded-slider-manual.html b/tests/assets/wpt/accname/name_password-label-embedded-slider-manual.html new file mode 100644 index 0000000000..7701b8b44e --- /dev/null +++ b/tests/assets/wpt/accname/name_password-label-embedded-slider-manual.html @@ -0,0 +1,72 @@ + + + + Name password-label-embedded-slider + + + + + + + + +

This test examines the ARIA properties for Name password-label-embedded-slider.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_password-label-embedded-spinbutton-manual.html b/tests/assets/wpt/accname/name_password-label-embedded-spinbutton-manual.html new file mode 100644 index 0000000000..67cd55dc38 --- /dev/null +++ b/tests/assets/wpt/accname/name_password-label-embedded-spinbutton-manual.html @@ -0,0 +1,72 @@ + + + + Name password-label-embedded-spinbutton + + + + + + + + +

This test examines the ARIA properties for Name password-label-embedded-spinbutton.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_password-title-manual.html b/tests/assets/wpt/accname/name_password-title-manual.html new file mode 100644 index 0000000000..3f3eb41609 --- /dev/null +++ b/tests/assets/wpt/accname/name_password-title-manual.html @@ -0,0 +1,70 @@ + + + + Name password-title + + + + + + + + +

This test examines the ARIA properties for Name password-title.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_radio-label-embedded-combobox-manual.html b/tests/assets/wpt/accname/name_radio-label-embedded-combobox-manual.html new file mode 100644 index 0000000000..3facb5e1b2 --- /dev/null +++ b/tests/assets/wpt/accname/name_radio-label-embedded-combobox-manual.html @@ -0,0 +1,81 @@ + + + + Name radio-label-embedded-combobox + + + + + + + + +

This test examines the ARIA properties for Name radio-label-embedded-combobox.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_radio-label-embedded-menu-manual.html b/tests/assets/wpt/accname/name_radio-label-embedded-menu-manual.html new file mode 100644 index 0000000000..3752b1fcd6 --- /dev/null +++ b/tests/assets/wpt/accname/name_radio-label-embedded-menu-manual.html @@ -0,0 +1,78 @@ + + + + Name radio-label-embedded-menu + + + + + + + + +

This test examines the ARIA properties for Name radio-label-embedded-menu.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_radio-label-embedded-select-manual.html b/tests/assets/wpt/accname/name_radio-label-embedded-select-manual.html new file mode 100644 index 0000000000..6f632f94cd --- /dev/null +++ b/tests/assets/wpt/accname/name_radio-label-embedded-select-manual.html @@ -0,0 +1,78 @@ + + + + Name radio-label-embedded-select + + + + + + + + +

This test examines the ARIA properties for Name radio-label-embedded-select.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_radio-label-embedded-slider-manual.html b/tests/assets/wpt/accname/name_radio-label-embedded-slider-manual.html new file mode 100644 index 0000000000..5c82a06bfb --- /dev/null +++ b/tests/assets/wpt/accname/name_radio-label-embedded-slider-manual.html @@ -0,0 +1,72 @@ + + + + Name radio-label-embedded-slider + + + + + + + + +

This test examines the ARIA properties for Name radio-label-embedded-slider.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_radio-label-embedded-spinbutton-manual.html b/tests/assets/wpt/accname/name_radio-label-embedded-spinbutton-manual.html new file mode 100644 index 0000000000..ab4fdcce7f --- /dev/null +++ b/tests/assets/wpt/accname/name_radio-label-embedded-spinbutton-manual.html @@ -0,0 +1,72 @@ + + + + Name radio-label-embedded-spinbutton + + + + + + + + +

This test examines the ARIA properties for Name radio-label-embedded-spinbutton.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_radio-title-manual.html b/tests/assets/wpt/accname/name_radio-title-manual.html new file mode 100644 index 0000000000..cb6f065e8f --- /dev/null +++ b/tests/assets/wpt/accname/name_radio-title-manual.html @@ -0,0 +1,70 @@ + + + + Name radio-title + + + + + + + + +

This test examines the ARIA properties for Name radio-title.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_539-manual.html b/tests/assets/wpt/accname/name_test_case_539-manual.html new file mode 100644 index 0000000000..659740b887 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_539-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 539 + + + + + + + + +

This test examines the ARIA properties for Name test case 539.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_540-manual.html b/tests/assets/wpt/accname/name_test_case_540-manual.html new file mode 100644 index 0000000000..c187c37ffc --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_540-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 540 + + + + + + + + +

This test examines the ARIA properties for Name test case 540.

+
Rich's button
+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_541-manual.html b/tests/assets/wpt/accname/name_test_case_541-manual.html new file mode 100644 index 0000000000..19405449d3 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_541-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 541 + + + + + + + + +

This test examines the ARIA properties for Name test case 541.

+
Rich's button
+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_543-manual.html b/tests/assets/wpt/accname/name_test_case_543-manual.html new file mode 100644 index 0000000000..7908bf658b --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_543-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 543 + + + + + + + + +

This test examines the ARIA properties for Name test case 543.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_544-manual.html b/tests/assets/wpt/accname/name_test_case_544-manual.html new file mode 100644 index 0000000000..1b7ba3772d --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_544-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 544 + + + + + + + + +

This test examines the ARIA properties for Name test case 544.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_545-manual.html b/tests/assets/wpt/accname/name_test_case_545-manual.html new file mode 100644 index 0000000000..19098046f4 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_545-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 545 + + + + + + + + +

This test examines the ARIA properties for Name test case 545.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_546-manual.html b/tests/assets/wpt/accname/name_test_case_546-manual.html new file mode 100644 index 0000000000..f40aa2f38a --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_546-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 546 + + + + + + + + +

This test examines the ARIA properties for Name test case 546.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_547-manual.html b/tests/assets/wpt/accname/name_test_case_547-manual.html new file mode 100644 index 0000000000..b7a977b12e --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_547-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 547 + + + + + + + + +

This test examines the ARIA properties for Name test case 547.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_548-manual.html b/tests/assets/wpt/accname/name_test_case_548-manual.html new file mode 100644 index 0000000000..d63ff4a2f6 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_548-manual.html @@ -0,0 +1,77 @@ + + + + Name test case 548 + + + + + + + + +

This test examines the ARIA properties for Name test case 548.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_549-manual.html b/tests/assets/wpt/accname/name_test_case_549-manual.html new file mode 100644 index 0000000000..c729c1f51b --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_549-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 549 + + + + + + + + +

This test examines the ARIA properties for Name test case 549.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_550-manual.html b/tests/assets/wpt/accname/name_test_case_550-manual.html new file mode 100644 index 0000000000..de8a635cae --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_550-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 550 + + + + + + + + +

This test examines the ARIA properties for Name test case 550.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_551-manual.html b/tests/assets/wpt/accname/name_test_case_551-manual.html new file mode 100644 index 0000000000..65e284f780 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_551-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 551 + + + + + + + + +

This test examines the ARIA properties for Name test case 551.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_552-manual.html b/tests/assets/wpt/accname/name_test_case_552-manual.html new file mode 100644 index 0000000000..a48aaa3165 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_552-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 552 + + + + + + + + +

This test examines the ARIA properties for Name test case 552.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_553-manual.html b/tests/assets/wpt/accname/name_test_case_553-manual.html new file mode 100644 index 0000000000..def83ed359 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_553-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 553 + + + + + + + + +

This test examines the ARIA properties for Name test case 553.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_556-manual.html b/tests/assets/wpt/accname/name_test_case_556-manual.html new file mode 100644 index 0000000000..5923db21e2 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_556-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 556 + + + + + + + + +

This test examines the ARIA properties for Name test case 556.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_557-manual.html b/tests/assets/wpt/accname/name_test_case_557-manual.html new file mode 100644 index 0000000000..1a81ffcb3d --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_557-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 557 + + + + + + + + +

This test examines the ARIA properties for Name test case 557.

+ a + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_558-manual.html b/tests/assets/wpt/accname/name_test_case_558-manual.html new file mode 100644 index 0000000000..3e5b448ba3 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_558-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 558 + + + + + + + + +

This test examines the ARIA properties for Name test case 558.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_559-manual.html b/tests/assets/wpt/accname/name_test_case_559-manual.html new file mode 100644 index 0000000000..00cc7d1d0e --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_559-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 559 + + + + + + + + +

This test examines the ARIA properties for Name test case 559.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_560-manual.html b/tests/assets/wpt/accname/name_test_case_560-manual.html new file mode 100644 index 0000000000..05bf8d44b4 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_560-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 560 + + + + + + + + +

This test examines the ARIA properties for Name test case 560.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_561-manual.html b/tests/assets/wpt/accname/name_test_case_561-manual.html new file mode 100644 index 0000000000..5131744c07 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_561-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 561 + + + + + + + + +

This test examines the ARIA properties for Name test case 561.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_562-manual.html b/tests/assets/wpt/accname/name_test_case_562-manual.html new file mode 100644 index 0000000000..f718b35f5e --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_562-manual.html @@ -0,0 +1,73 @@ + + + + Name test case 562 + + + + + + + + +

This test examines the ARIA properties for Name test case 562.

+ + + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_563-manual.html b/tests/assets/wpt/accname/name_test_case_563-manual.html new file mode 100644 index 0000000000..5214fb946d --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_563-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 563 + + + + + + + + +

This test examines the ARIA properties for Name test case 563.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_564-manual.html b/tests/assets/wpt/accname/name_test_case_564-manual.html new file mode 100644 index 0000000000..bac49adc44 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_564-manual.html @@ -0,0 +1,72 @@ + + + + Name test case 564 + + + + + + + + +

This test examines the ARIA properties for Name test case 564.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_565-manual.html b/tests/assets/wpt/accname/name_test_case_565-manual.html new file mode 100644 index 0000000000..749d24d53d --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_565-manual.html @@ -0,0 +1,73 @@ + + + + Name test case 565 + + + + + + + + +

This test examines the ARIA properties for Name test case 565.

+ + + + a + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_566-manual.html b/tests/assets/wpt/accname/name_test_case_566-manual.html new file mode 100644 index 0000000000..5ffef66083 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_566-manual.html @@ -0,0 +1,73 @@ + + + + Name test case 566 + + + + + + + + +

This test examines the ARIA properties for Name test case 566.

+ + + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_596-manual.html b/tests/assets/wpt/accname/name_test_case_596-manual.html new file mode 100644 index 0000000000..821b96b300 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_596-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 596 + + + + + + + + +

This test examines the ARIA properties for Name test case 596.

+
foo
+ bar + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_597-manual.html b/tests/assets/wpt/accname/name_test_case_597-manual.html new file mode 100644 index 0000000000..ed3e90f210 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_597-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 597 + + + + + + + + +

This test examines the ARIA properties for Name test case 597.

+
foo
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_598-manual.html b/tests/assets/wpt/accname/name_test_case_598-manual.html new file mode 100644 index 0000000000..89a0f899a2 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_598-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 598 + + + + + + + + +

This test examines the ARIA properties for Name test case 598.

+
foo
+ bar + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_599-manual.html b/tests/assets/wpt/accname/name_test_case_599-manual.html new file mode 100644 index 0000000000..9f186a6333 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_599-manual.html @@ -0,0 +1,72 @@ + + + + Name test case 599 + + + + + + + + +

This test examines the ARIA properties for Name test case 599.

+
foo
+ bar + baz + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_600-manual.html b/tests/assets/wpt/accname/name_test_case_600-manual.html new file mode 100644 index 0000000000..091c8cb357 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_600-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 600 + + + + + + + + +

This test examines the ARIA properties for Name test case 600.

+
Div with text
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_601-manual.html b/tests/assets/wpt/accname/name_test_case_601-manual.html new file mode 100644 index 0000000000..8a87591f5a --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_601-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 601 + + + + + + + + +

This test examines the ARIA properties for Name test case 601.

+
foo
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_602-manual.html b/tests/assets/wpt/accname/name_test_case_602-manual.html new file mode 100644 index 0000000000..71da6f713d --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_602-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 602 + + + + + + + + +

This test examines the ARIA properties for Name test case 602.

+
+
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_603-manual.html b/tests/assets/wpt/accname/name_test_case_603-manual.html new file mode 100644 index 0000000000..5496f50431 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_603-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 603 + + + + + + + + +

This test examines the ARIA properties for Name test case 603.

+
foo
+ bar + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_604-manual.html b/tests/assets/wpt/accname/name_test_case_604-manual.html new file mode 100644 index 0000000000..db0831c6eb --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_604-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 604 + + + + + + + + +

This test examines the ARIA properties for Name test case 604.

+ ABC + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_605-manual.html b/tests/assets/wpt/accname/name_test_case_605-manual.html new file mode 100644 index 0000000000..ec6c5a7d50 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_605-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 605 + + + + + + + + +

This test examines the ARIA properties for Name test case 605.

+ foo +

bar

+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_606-manual.html b/tests/assets/wpt/accname/name_test_case_606-manual.html new file mode 100644 index 0000000000..8bcdefac2f --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_606-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 606 + + + + + + + + +

This test examines the ARIA properties for Name test case 606.

+ +

foo

+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_607-manual.html b/tests/assets/wpt/accname/name_test_case_607-manual.html new file mode 100644 index 0000000000..8737c8600c --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_607-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 607 + + + + + + + + +

This test examines the ARIA properties for Name test case 607.

+ ABC + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_608-manual.html b/tests/assets/wpt/accname/name_test_case_608-manual.html new file mode 100644 index 0000000000..4380f400e6 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_608-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 608 + + + + + + + + +

This test examines the ARIA properties for Name test case 608.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_609-manual.html b/tests/assets/wpt/accname/name_test_case_609-manual.html new file mode 100644 index 0000000000..d408962ae9 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_609-manual.html @@ -0,0 +1,73 @@ + + + + Name test case 609 + + + + + + + + +

This test examines the ARIA properties for Name test case 609.

+ +

foo

+

bar

+

baz

+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_610-manual.html b/tests/assets/wpt/accname/name_test_case_610-manual.html new file mode 100644 index 0000000000..33eaaba4c7 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_610-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 610 + + + + + + + + +

This test examines the ARIA properties for Name test case 610.

+ +
foo
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_611-manual.html b/tests/assets/wpt/accname/name_test_case_611-manual.html new file mode 100644 index 0000000000..2ea0860238 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_611-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 611 + + + + + + + + +

This test examines the ARIA properties for Name test case 611.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_612-manual.html b/tests/assets/wpt/accname/name_test_case_612-manual.html new file mode 100644 index 0000000000..9faa92250f --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_612-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 612 + + + + + + + + +

This test examines the ARIA properties for Name test case 612.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_613-manual.html b/tests/assets/wpt/accname/name_test_case_613-manual.html new file mode 100644 index 0000000000..d8a27c3726 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_613-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 613 + + + + + + + + +

This test examines the ARIA properties for Name test case 613.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_614-manual.html b/tests/assets/wpt/accname/name_test_case_614-manual.html new file mode 100644 index 0000000000..b2323aaa1d --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_614-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 614 + + + + + + + + +

This test examines the ARIA properties for Name test case 614.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_615-manual.html b/tests/assets/wpt/accname/name_test_case_615-manual.html new file mode 100644 index 0000000000..e1d53f4ac8 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_615-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 615 + + + + + + + + +

This test examines the ARIA properties for Name test case 615.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_616-manual.html b/tests/assets/wpt/accname/name_test_case_616-manual.html new file mode 100644 index 0000000000..310bfca4d1 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_616-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 616 + + + + + + + + +

This test examines the ARIA properties for Name test case 616.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_617-manual.html b/tests/assets/wpt/accname/name_test_case_617-manual.html new file mode 100644 index 0000000000..2927063307 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_617-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 617 + + + + + + + + +

This test examines the ARIA properties for Name test case 617.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_618-manual.html b/tests/assets/wpt/accname/name_test_case_618-manual.html new file mode 100644 index 0000000000..be74e08629 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_618-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 618 + + + + + + + + +

This test examines the ARIA properties for Name test case 618.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_619-manual.html b/tests/assets/wpt/accname/name_test_case_619-manual.html new file mode 100644 index 0000000000..8bd0826915 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_619-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 619 + + + + + + + + +

This test examines the ARIA properties for Name test case 619.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_620-manual.html b/tests/assets/wpt/accname/name_test_case_620-manual.html new file mode 100644 index 0000000000..855d0cc848 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_620-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 620 + + + + + + + + +

This test examines the ARIA properties for Name test case 620.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_621-manual.html b/tests/assets/wpt/accname/name_test_case_621-manual.html new file mode 100644 index 0000000000..bb5780ad2b --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_621-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 621 + + + + + + + + +

This test examines the ARIA properties for Name test case 621.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_659-manual.html b/tests/assets/wpt/accname/name_test_case_659-manual.html new file mode 100644 index 0000000000..abf5e85e16 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_659-manual.html @@ -0,0 +1,76 @@ + + + + Name test case 659 + + + + + + + + +

This test examines the ARIA properties for Name test case 659.

+ +
+ +
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_660-manual.html b/tests/assets/wpt/accname/name_test_case_660-manual.html new file mode 100644 index 0000000000..0c18218707 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_660-manual.html @@ -0,0 +1,76 @@ + + + + Name test case 660 + + + + + + + + +

This test examines the ARIA properties for Name test case 660.

+ +
+ +
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_661-manual.html b/tests/assets/wpt/accname/name_test_case_661-manual.html new file mode 100644 index 0000000000..2bb16f9ffc --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_661-manual.html @@ -0,0 +1,76 @@ + + + + Name test case 661 + + + + + + + + +

This test examines the ARIA properties for Name test case 661.

+ +
+ +
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_662-manual.html b/tests/assets/wpt/accname/name_test_case_662-manual.html new file mode 100644 index 0000000000..5587569438 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_662-manual.html @@ -0,0 +1,76 @@ + + + + Name test case 662 + + + + + + + + +

This test examines the ARIA properties for Name test case 662.

+ +
+ +
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_663a-manual.html b/tests/assets/wpt/accname/name_test_case_663a-manual.html new file mode 100644 index 0000000000..3fc3d17ccd --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_663a-manual.html @@ -0,0 +1,76 @@ + + + + Name test case 663a + + + + + + + + +

This test examines the ARIA properties for Name test case 663a.

+ +
+ +
+ +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_721-manual.html b/tests/assets/wpt/accname/name_test_case_721-manual.html new file mode 100644 index 0000000000..90e1911d15 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_721-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 721 + + + + + + + + +

This test examines the ARIA properties for Name test case 721.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_723-manual.html b/tests/assets/wpt/accname/name_test_case_723-manual.html new file mode 100644 index 0000000000..84cd65534f --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_723-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 723 + + + + + + + + +

This test examines the ARIA properties for Name test case 723.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_724-manual.html b/tests/assets/wpt/accname/name_test_case_724-manual.html new file mode 100644 index 0000000000..69d8d70f0e --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_724-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 724 + + + + + + + + +

This test examines the ARIA properties for Name test case 724.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_725-manual.html b/tests/assets/wpt/accname/name_test_case_725-manual.html new file mode 100644 index 0000000000..9d1b867122 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_725-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 725 + + + + + + + + +

This test examines the ARIA properties for Name test case 725.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_726-manual.html b/tests/assets/wpt/accname/name_test_case_726-manual.html new file mode 100644 index 0000000000..0faf0f27d3 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_726-manual.html @@ -0,0 +1,71 @@ + + + + Name test case 726 + + + + + + + + +

This test examines the ARIA properties for Name test case 726.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_727-manual.html b/tests/assets/wpt/accname/name_test_case_727-manual.html new file mode 100644 index 0000000000..d009ae7fb3 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_727-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 727 + + + + + + + + +

This test examines the ARIA properties for Name test case 727.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_728-manual.html b/tests/assets/wpt/accname/name_test_case_728-manual.html new file mode 100644 index 0000000000..f6a14e7494 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_728-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 728 + + + + + + + + +

This test examines the ARIA properties for Name test case 728.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_729-manual.html b/tests/assets/wpt/accname/name_test_case_729-manual.html new file mode 100644 index 0000000000..f9b5e156f3 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_729-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 729 + + + + + + + + +

This test examines the ARIA properties for Name test case 729.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_730-manual.html b/tests/assets/wpt/accname/name_test_case_730-manual.html new file mode 100644 index 0000000000..b213840268 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_730-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 730 + + + + + + + + +

This test examines the ARIA properties for Name test case 730.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_731-manual.html b/tests/assets/wpt/accname/name_test_case_731-manual.html new file mode 100644 index 0000000000..50f4a5b2eb --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_731-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 731 + + + + + + + + +

This test examines the ARIA properties for Name test case 731.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_733-manual.html b/tests/assets/wpt/accname/name_test_case_733-manual.html new file mode 100644 index 0000000000..a9d3aaa670 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_733-manual.html @@ -0,0 +1,77 @@ + + + + Name test case 733 + + + + + + + + +

This test examines the ARIA properties for Name test case 733.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_734-manual.html b/tests/assets/wpt/accname/name_test_case_734-manual.html new file mode 100644 index 0000000000..fbf5a0c3dd --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_734-manual.html @@ -0,0 +1,77 @@ + + + + Name test case 734 + + + + + + + + +

This test examines the ARIA properties for Name test case 734.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_735-manual.html b/tests/assets/wpt/accname/name_test_case_735-manual.html new file mode 100644 index 0000000000..955af0f10d --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_735-manual.html @@ -0,0 +1,77 @@ + + + + Name test case 735 + + + + + + + + +

This test examines the ARIA properties for Name test case 735.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_736-manual.html b/tests/assets/wpt/accname/name_test_case_736-manual.html new file mode 100644 index 0000000000..2518ff32bd --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_736-manual.html @@ -0,0 +1,77 @@ + + + + Name test case 736 + + + + + + + + +

This test examines the ARIA properties for Name test case 736.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_737-manual.html b/tests/assets/wpt/accname/name_test_case_737-manual.html new file mode 100644 index 0000000000..a550114b4f --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_737-manual.html @@ -0,0 +1,77 @@ + + + + Name test case 737 + + + + + + + + +

This test examines the ARIA properties for Name test case 737.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_738-manual.html b/tests/assets/wpt/accname/name_test_case_738-manual.html new file mode 100644 index 0000000000..ddf6210a9a --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_738-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 738 + + + + + + + + +

This test examines the ARIA properties for Name test case 738.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_739-manual.html b/tests/assets/wpt/accname/name_test_case_739-manual.html new file mode 100644 index 0000000000..241c0fbff0 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_739-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 739 + + + + + + + + +

This test examines the ARIA properties for Name test case 739.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_740-manual.html b/tests/assets/wpt/accname/name_test_case_740-manual.html new file mode 100644 index 0000000000..f13ac6b4ad --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_740-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 740 + + + + + + + + +

This test examines the ARIA properties for Name test case 740.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_741-manual.html b/tests/assets/wpt/accname/name_test_case_741-manual.html new file mode 100644 index 0000000000..9b0b4bfef1 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_741-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 741 + + + + + + + + +

This test examines the ARIA properties for Name test case 741.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_742-manual.html b/tests/assets/wpt/accname/name_test_case_742-manual.html new file mode 100644 index 0000000000..e3fa6ad1fe --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_742-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 742 + + + + + + + + +

This test examines the ARIA properties for Name test case 742.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_743-manual.html b/tests/assets/wpt/accname/name_test_case_743-manual.html new file mode 100644 index 0000000000..b226f00c7e --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_743-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 743 + + + + + + + + +

This test examines the ARIA properties for Name test case 743.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_744-manual.html b/tests/assets/wpt/accname/name_test_case_744-manual.html new file mode 100644 index 0000000000..44a70f7c8e --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_744-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 744 + + + + + + + + +

This test examines the ARIA properties for Name test case 744.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_745-manual.html b/tests/assets/wpt/accname/name_test_case_745-manual.html new file mode 100644 index 0000000000..e54efda31c --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_745-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 745 + + + + + + + + +

This test examines the ARIA properties for Name test case 745.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_746-manual.html b/tests/assets/wpt/accname/name_test_case_746-manual.html new file mode 100644 index 0000000000..132fe30302 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_746-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 746 + + + + + + + + +

This test examines the ARIA properties for Name test case 746.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_747-manual.html b/tests/assets/wpt/accname/name_test_case_747-manual.html new file mode 100644 index 0000000000..be56f5b7f4 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_747-manual.html @@ -0,0 +1,75 @@ + + + + Name test case 747 + + + + + + + + +

This test examines the ARIA properties for Name test case 747.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_748-manual.html b/tests/assets/wpt/accname/name_test_case_748-manual.html new file mode 100644 index 0000000000..ad7581985b --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_748-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 748 + + + + + + + + +

This test examines the ARIA properties for Name test case 748.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_749-manual.html b/tests/assets/wpt/accname/name_test_case_749-manual.html new file mode 100644 index 0000000000..0ccaca7848 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_749-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 749 + + + + + + + + +

This test examines the ARIA properties for Name test case 749.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_750-manual.html b/tests/assets/wpt/accname/name_test_case_750-manual.html new file mode 100644 index 0000000000..19f1243204 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_750-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 750 + + + + + + + + +

This test examines the ARIA properties for Name test case 750.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_751-manual.html b/tests/assets/wpt/accname/name_test_case_751-manual.html new file mode 100644 index 0000000000..8f44ef9e42 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_751-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 751 + + + + + + + + +

This test examines the ARIA properties for Name test case 751.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_752-manual.html b/tests/assets/wpt/accname/name_test_case_752-manual.html new file mode 100644 index 0000000000..6d2593b330 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_752-manual.html @@ -0,0 +1,70 @@ + + + + Name test case 752 + + + + + + + + +

This test examines the ARIA properties for Name test case 752.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_753-manual.html b/tests/assets/wpt/accname/name_test_case_753-manual.html new file mode 100644 index 0000000000..82ee27cc26 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_753-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 753 + + + + + + + + +

This test examines the ARIA properties for Name test case 753.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_754-manual.html b/tests/assets/wpt/accname/name_test_case_754-manual.html new file mode 100644 index 0000000000..06d56eef39 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_754-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 754 + + + + + + + + +

This test examines the ARIA properties for Name test case 754.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_755-manual.html b/tests/assets/wpt/accname/name_test_case_755-manual.html new file mode 100644 index 0000000000..e621db7517 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_755-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 755 + + + + + + + + +

This test examines the ARIA properties for Name test case 755.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_756-manual.html b/tests/assets/wpt/accname/name_test_case_756-manual.html new file mode 100644 index 0000000000..70394d28a8 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_756-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 756 + + + + + + + + +

This test examines the ARIA properties for Name test case 756.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_757-manual.html b/tests/assets/wpt/accname/name_test_case_757-manual.html new file mode 100644 index 0000000000..4e7fd81bcf --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_757-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 757 + + + + + + + + +

This test examines the ARIA properties for Name test case 757.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_758-manual.html b/tests/assets/wpt/accname/name_test_case_758-manual.html new file mode 100644 index 0000000000..0381f1b947 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_758-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 758 + + + + + + + + +

This test examines the ARIA properties for Name test case 758.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_759-manual.html b/tests/assets/wpt/accname/name_test_case_759-manual.html new file mode 100644 index 0000000000..a9b2d2fc61 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_759-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 759 + + + + + + + + +

This test examines the ARIA properties for Name test case 759.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_760-manual.html b/tests/assets/wpt/accname/name_test_case_760-manual.html new file mode 100644 index 0000000000..bab3c19ead --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_760-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 760 + + + + + + + + +

This test examines the ARIA properties for Name test case 760.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_761-manual.html b/tests/assets/wpt/accname/name_test_case_761-manual.html new file mode 100644 index 0000000000..7848eea9b5 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_761-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 761 + + + + + + + + +

This test examines the ARIA properties for Name test case 761.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_test_case_762-manual.html b/tests/assets/wpt/accname/name_test_case_762-manual.html new file mode 100644 index 0000000000..d0d04e3ce4 --- /dev/null +++ b/tests/assets/wpt/accname/name_test_case_762-manual.html @@ -0,0 +1,74 @@ + + + + Name test case 762 + + + + + + + + +

This test examines the ARIA properties for Name test case 762.

+ + + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_text-label-embedded-combobox-manual.html b/tests/assets/wpt/accname/name_text-label-embedded-combobox-manual.html new file mode 100644 index 0000000000..a32b1c2b52 --- /dev/null +++ b/tests/assets/wpt/accname/name_text-label-embedded-combobox-manual.html @@ -0,0 +1,81 @@ + + + + Name text-label-embedded-combobox + + + + + + + + +

This test examines the ARIA properties for Name text-label-embedded-combobox.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_text-label-embedded-menu-manual.html b/tests/assets/wpt/accname/name_text-label-embedded-menu-manual.html new file mode 100644 index 0000000000..d6fddc6f1c --- /dev/null +++ b/tests/assets/wpt/accname/name_text-label-embedded-menu-manual.html @@ -0,0 +1,78 @@ + + + + Name text-label-embedded-menu + + + + + + + + +

This test examines the ARIA properties for Name text-label-embedded-menu.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_text-label-embedded-select-manual.html b/tests/assets/wpt/accname/name_text-label-embedded-select-manual.html new file mode 100644 index 0000000000..6a0f6e10b8 --- /dev/null +++ b/tests/assets/wpt/accname/name_text-label-embedded-select-manual.html @@ -0,0 +1,78 @@ + + + + Name text-label-embedded-select + + + + + + + + +

This test examines the ARIA properties for Name text-label-embedded-select.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_text-label-embedded-slider-manual.html b/tests/assets/wpt/accname/name_text-label-embedded-slider-manual.html new file mode 100644 index 0000000000..caf91243fa --- /dev/null +++ b/tests/assets/wpt/accname/name_text-label-embedded-slider-manual.html @@ -0,0 +1,72 @@ + + + + Name text-label-embedded-slider + + + + + + + + +

This test examines the ARIA properties for Name text-label-embedded-slider.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_text-label-embedded-spinbutton-manual.html b/tests/assets/wpt/accname/name_text-label-embedded-spinbutton-manual.html new file mode 100644 index 0000000000..8e1b1e21dd --- /dev/null +++ b/tests/assets/wpt/accname/name_text-label-embedded-spinbutton-manual.html @@ -0,0 +1,72 @@ + + + + Name text-label-embedded-spinbutton + + + + + + + + +

This test examines the ARIA properties for Name text-label-embedded-spinbutton.

+ + + +
+
+
+ + diff --git a/tests/assets/wpt/accname/name_text-title-manual.html b/tests/assets/wpt/accname/name_text-title-manual.html new file mode 100644 index 0000000000..720a94cd7a --- /dev/null +++ b/tests/assets/wpt/accname/name_text-title-manual.html @@ -0,0 +1,70 @@ + + + + Name text-title + + + + + + + + +

This test examines the ARIA properties for Name text-title.

+ + +
+
+
+ + diff --git a/tests/assets/wpt/wai-aria/scripts/manual.css b/tests/assets/wpt/wai-aria/scripts/manual.css new file mode 100644 index 0000000000..0e4f4a03e4 --- /dev/null +++ b/tests/assets/wpt/wai-aria/scripts/manual.css @@ -0,0 +1,70 @@ +html { + font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans; +} + +table#steps { + border-collapse:collapse; + table-layout:fixed; + width:100%; +} + +table#steps th:last-child, +table#steps td:last-child { + width:70%; +} + +// table#steps.assertions th:last-child, +// table#steps.assertions td:last-child { +// width:35%; +// } + +table#steps th { + padding:0; + padding-bottom:0.25; + border-bottom:medium solid black; +} + +table#steps td { + padding-top:0.25em; + padding-bottom:0.25em; + padding-left:0.5em; + padding-right:0.5em; + border-right:thin solid black; + border-top:thin solid black; + border-bottom:thin solid black; +} + +table#steps td.step, table#steps td.type, table#steps td.element { + vertical-align:top; +} +table#api { + border-collapse:collapse; + table-layout:fixed; + width:100%; +} + +// table#steps.assertions th:last-child, +// table#steps.assertions td:last-child { +// width:35%; +// } + +table#api th { + padding:0; + padding-bottom:0.25; + border-bottom:medium solid black; +} + +table#api td { + padding-top:0.25em; + padding-bottom:0.25em; + padding-left:0.5em; + padding-right:0.5em; + border-right:thin solid black; + border-top:thin solid black; + border-bottom:thin solid black; +} + +table#api td.step, table#api td.type, table#api td.element { + vertical-align:top; +} +} diff --git a/tests/role-utils.spec.ts b/tests/role-utils.spec.ts new file mode 100644 index 0000000000..1e0d856eaf --- /dev/null +++ b/tests/role-utils.spec.ts @@ -0,0 +1,79 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { contextTest as test, expect } from './config/browserTest'; +import fs from 'fs'; + +test('wpt accname', async ({ page, asset, server, browserName }) => { + const skipped = [ + // Spec clearly says to only use control's value when embedded in a label (step 2C). + 'name_heading-combobox-focusable-alternative-manual.html', + // This test expects ::before + title + ::after, which is neither 2F nor 2I. + 'name_test_case_659-manual.html', + // This test expects ::before + title + ::after, which is neither 2F nor 2I. + 'name_test_case_660-manual.html', + ]; + if (browserName === 'firefox') { + // This test contains the following style: + // [data-after]:after { content: attr(data-after); } + // In firefox, content is returned as "attr(data-after)" + // instead of being resolved to the actual value. + skipped.push('name_test_case_553-manual.html'); + } + + await page.addInitScript(() => { + const self = window as any; + self.setup = () => {}; + self.ATTAcomm = class { + constructor(data) { + self.steps = []; + for (const step of data.steps) { + if (!step.test.ATK) + continue; + for (const atk of step.test.ATK) { + if (atk[0] !== 'property' || atk[1] !== 'name' || atk[2] !== 'is' || typeof atk[3] !== 'string') + continue; + self.steps.push({ selector: '#' + step.element, name: atk[3] }); + } + } + } + }; + }); + + const testDir = asset('wpt/accname'); + const testFiles = fs.readdirSync(testDir, { withFileTypes: true }).filter(e => e.isFile() && e.name.endsWith('.html')).map(e => e.name); + for (const testFile of testFiles) { + if (skipped.includes(testFile)) + continue; + await test.step(testFile, async () => { + await page.goto(server.PREFIX + `/wpt/accname/` + testFile); + // Use $eval to force injected script. + const result = await page.$eval('body', () => { + const result = []; + for (const step of (window as any).steps) { + const element = document.querySelector(step.selector); + if (!element) + throw new Error(`Unable to resolve "${step.selector}"`); + const received = (window as any).__injectedScript.getElementAccessibleName(element); + result.push({ selector: step.selector, expected: step.name, received }); + } + return result; + }); + for (const { selector, expected, received } of result) + expect(received, `checking "${selector}"`).toBe(expected); + }); + } +});