summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/wai-aria
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/wai-aria')
-rw-r--r--testing/web-platform/tests/wai-aria/META.yml5
-rw-r--r--testing/web-platform/tests/wai-aria/idlharness.window.js15
-rw-r--r--testing/web-platform/tests/wai-aria/manual/README.md65
-rw-r--r--testing/web-platform/tests/wai-aria/manual/alertdialog_modal_false-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/alertdialog_modal_true-manual.html107
-rw-r--r--testing/web-platform/tests/wai-aria/manual/application_activedescendant-manual.html202
-rw-r--r--testing/web-platform/tests/wai-aria/manual/application_activedescendant_value_changes-manual.html253
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_not_declared-manual.html116
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_changes-manual.html110
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_date-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_location-manual.html114
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_page-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_step-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_time-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_true-manual.html116
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-current_with_value_unspecified-manual.html110
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_details_element-manual.html90
-rw-r--r--testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_div_element-manual.html89
-rw-r--r--testing/web-platform/tests/wai-aria/manual/article_in_feed_posinset_and_setsize-manual.html170
-rw-r--r--testing/web-platform/tests/wai-aria/manual/article_in_feed_setsize_-1-manual.html140
-rw-r--r--testing/web-platform/tests/wai-aria/manual/article_not_in_feed_posinset_and_setsize-manual.html174
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_dialog-manual.html132
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_emptystring-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_false-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_foo-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_grid-manual.html136
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_listbox-manual.html134
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_menu-manual.html134
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_tree-manual.html140
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_true-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_haspopup_unspecified-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_roledescription_empty-manual.html104
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_roledescription_valid-manual.html102
-rw-r--r--testing/web-platform/tests/wai-aria/manual/button_roledescription_whitespace_only-manual.html104
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell-manual.html216
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html115
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html109
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html113
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_colindex_4-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/cell_rowindex_4-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/checkbox_readonly_false-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/checkbox_readonly_true-manual.html126
-rw-r--r--testing/web-platform/tests/wai-aria/manual/checkbox_readonly_unspecified-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html109
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html113
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_colindex_4-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_rowindex_4-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_selected_false_not_automatically_propagated-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/columnheader_selected_true_not_automatically_propagated-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_controls_an_invalid_id-manual.html98
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_dialog-manual.html162
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_false-manual.html156
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_grid-manual.html164
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_listbox-manual.html154
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_menu-manual.html154
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_tree-manual.html171
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_true-manual.html162
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_haspopup_unspecified-manual.html159
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_orientation_horizontal-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_orientation_unspecified-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_orientation_vertical-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_readonly_false-manual.html149
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_readonly_true-manual.html155
-rw-r--r--testing/web-platform/tests/wai-aria/manual/combobox_readonly_unspecified-manual.html149
-rw-r--r--testing/web-platform/tests/wai-aria/manual/dialog_modal_false-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/dialog_modal_true-manual.html108
-rw-r--r--testing/web-platform/tests/wai-aria/manual/dialog_modal_unspecified-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/div_element_without_role_roledescription_valid-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/errormessage_object_in_invalid_state-manual.html100
-rw-r--r--testing/web-platform/tests/wai-aria/manual/errormessage_object_in_valid_state-manual.html100
-rw-r--r--testing/web-platform/tests/wai-aria/manual/feed-manual.html105
-rw-r--r--testing/web-platform/tests/wai-aria/manual/figure-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_false_automatically_propagated-manual.html249
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_true_automatically_propagated-manual.html249
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_busy_false-manual.html163
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_busy_true-manual.html157
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_busy_value_changes-manual.html200
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_colcount_8-manual.html130
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_false-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_true-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_unspecified-manual.html98
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_false-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_true-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_unspecified-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_rowcount_3-manual.html132
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_false-manual.html98
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_true-manual.html98
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_unspecified-manual.html98
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_false-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_true-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_unspecified-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/gridcell_aria-colspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/gridcell_aria-rowspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/gridcell_colindex_4-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/gridcell_rowindex_4-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_not_rendered-manual.html80
-rw-r--r--testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_rendered-manual.html116
-rw-r--r--testing/web-platform/tests/wai-aria/manual/heading_level_unspecified-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/keyshortcuts_multiple_shortcuts-manual.html82
-rw-r--r--testing/web-platform/tests/wai-aria/manual/keyshortcuts_one_shortcut-manual.html82
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_busy_false-manual.html121
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_busy_true-manual.html109
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_orientation_horizontal-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_orientation_unspecified-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_orientation_vertical-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_readonly_false-manual.html124
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_readonly_true-manual.html130
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listbox_readonly_unspecified-manual.html124
-rw-r--r--testing/web-platform/tests/wai-aria/manual/listitem_setsize_-1-manual.html134
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menu_orientation_horizontal-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menu_orientation_unspecified-manual.html122
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menu_orientation_vertical-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menubar_busy_false-manual.html130
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menubar_busy_true-manual.html130
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menubar_orientation_horizontal-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menubar_orientation_unspecified-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menubar_orientation_vertical-manual.html111
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitem_expanded_false-manual.html78
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitem_expanded_true-manual.html82
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitem_posinset_and_setsize-manual.html148
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_false-manual.html78
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_true-manual.html82
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_posinset_and_setsize-manual.html185
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_false-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_true-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_unspecified-manual.html122
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_false-manual.html78
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_true-manual.html82
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemradio_posinset_and_setsize-manual.html196
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_false-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_true-manual.html140
-rw-r--r--testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_unspecified-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/none-manual.html78
-rw-r--r--testing/web-platform/tests/wai-aria/manual/option_selected_false-manual.html131
-rw-r--r--testing/web-platform/tests/wai-aria/manual/option_selected_true-manual.html131
-rw-r--r--testing/web-platform/tests/wai-aria/manual/option_selected_undefined-manual.html131
-rw-r--r--testing/web-platform/tests/wai-aria/manual/option_selected_value_changes-manual.html146
-rw-r--r--testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_horizontal-manual.html123
-rw-r--r--testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_unspecified-manual.html135
-rw-r--r--testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_vertical-manual.html111
-rw-r--r--testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_false-manual.html115
-rw-r--r--testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_true-manual.html115
-rw-r--r--testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_unspecified-manual.html115
-rw-r--r--testing/web-platform/tests/wai-aria/manual/region_with_name-manual.html114
-rw-r--r--testing/web-platform/tests/wai-aria/manual/region_without_name-manual.html128
-rw-r--r--testing/web-platform/tests/wai-aria/manual/row_colindex_4-manual.html149
-rw-r--r--testing/web-platform/tests/wai-aria/manual/row_rowindex_4-manual.html149
-rw-r--r--testing/web-platform/tests/wai-aria/manual/rowheader_aria-colspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/rowheader_aria-rowspan_2_on_div-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/rowheader_colindex_4-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/rowheader_rowindex_4-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/rowheader_selected_false_not_automatically_propagated-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/rowheader_selected_true_not_automatically_propagated-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/scrollbar_all_values_unspecified-manual.html182
-rw-r--r--testing/web-platform/tests/wai-aria/manual/scrollbar_only_valuenow_unspecified-manual.html182
-rw-r--r--testing/web-platform/tests/wai-aria/manual/scrollbar_orientation_unspecified-manual.html132
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant-manual.html222
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant_value_changes-manual.html271
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_both-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_inline-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_list-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_none-manual.html133
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_unspecified-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_multiline_false-manual.html126
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_multiline_true-manual.html138
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_multiline_unspecified-manual.html108
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_placeholder-manual.html140
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_readonly_false-manual.html139
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_readonly_true-manual.html139
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_readonly_unspecified-manual.html139
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_required_false-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_required_true-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/searchbox_required_unspecified-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/separator_focusable_all_values_unspecified-manual.html182
-rw-r--r--testing/web-platform/tests/wai-aria/manual/separator_focusable_only_valuenow_unspecified-manual.html182
-rw-r--r--testing/web-platform/tests/wai-aria/manual/separator_focusable_valuetext-manual.html206
-rw-r--r--testing/web-platform/tests/wai-aria/manual/separator_orientation_unspecified-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/separator_unfocusable_all_values_unspecified-manual.html90
-rw-r--r--testing/web-platform/tests/wai-aria/manual/separator_unfocusable_valuetext-manual.html116
-rw-r--r--testing/web-platform/tests/wai-aria/manual/slider_all_values_unspecified-manual.html182
-rw-r--r--testing/web-platform/tests/wai-aria/manual/slider_only_valuenow_unspecified-manual.html182
-rw-r--r--testing/web-platform/tests/wai-aria/manual/slider_orientation_unspecified-manual.html132
-rw-r--r--testing/web-platform/tests/wai-aria/manual/slider_readonly_false-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/slider_readonly_true-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/slider_readonly_unspecified-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/spinbutton_all_values_unspecified-manual.html183
-rw-r--r--testing/web-platform/tests/wai-aria/manual/spinbutton_only_aria-valuenow_unspecified-manual.html183
-rw-r--r--testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_false-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_true-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_unspecified-manual.html127
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_checked_false-manual.html124
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_checked_mixed-manual.html130
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_checked_true-manual.html138
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_checked_undefined-manual.html124
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_checked_value_changes-manual.html163
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_readonly_false-manual.html119
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_readonly_true-manual.html119
-rw-r--r--testing/web-platform/tests/wai-aria/manual/switch_readonly_unspecified-manual.html119
-rw-r--r--testing/web-platform/tests/wai-aria/manual/tab_posinset_and_setsize-manual.html189
-rw-r--r--testing/web-platform/tests/wai-aria/manual/table_colcount_-1-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/table_colcount_8-manual.html112
-rw-r--r--testing/web-platform/tests/wai-aria/manual/table_rowcount_-1-manual.html126
-rw-r--r--testing/web-platform/tests/wai-aria/manual/table_rowcount_3-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/tablist_orientation_horizontal-manual.html142
-rw-r--r--testing/web-platform/tests/wai-aria/manual/tablist_orientation_unspecified-manual.html136
-rw-r--r--testing/web-platform/tests/wai-aria/manual/tablist_orientation_vertical-manual.html130
-rw-r--r--testing/web-platform/tests/wai-aria/manual/term_role-manual.html106
-rw-r--r--testing/web-platform/tests/wai-aria/manual/textbox_placeholder-manual.html134
-rw-r--r--testing/web-platform/tests/wai-aria/manual/toolbar_orientation_horizontal-manual.html122
-rw-r--r--testing/web-platform/tests/wai-aria/manual/toolbar_orientation_unspecified-manual.html122
-rw-r--r--testing/web-platform/tests/wai-aria/manual/toolbar_orientation_vertical-manual.html122
-rw-r--r--testing/web-platform/tests/wai-aria/manual/tree_orientation_horizontal-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/tree_orientation_unspecified-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/tree_orientation_vertical-manual.html129
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treegrid_colcount_8-manual.html118
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treegrid_orientation_horizontal-manual.html137
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treegrid_orientation_unspecified-manual.html155
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treegrid_orientation_vertical-manual.html137
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treegrid_rowcount_3-manual.html120
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treeitem_selected_false-manual.html125
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treeitem_selected_true-manual.html125
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treeitem_selected_undefined-manual.html125
-rw-r--r--testing/web-platform/tests/wai-aria/manual/treeitem_selected_value_changes-manual.html146
-rw-r--r--testing/web-platform/tests/wai-aria/role/ReadMe.md16
-rw-r--r--testing/web-platform/tests/wai-aria/role/abstract-roles.html36
-rw-r--r--testing/web-platform/tests/wai-aria/role/basic.html33
-rw-r--r--testing/web-platform/tests/wai-aria/role/button-roles.html32
-rw-r--r--testing/web-platform/tests/wai-aria/role/contextual-roles.html91
-rw-r--r--testing/web-platform/tests/wai-aria/role/fallback-roles.html57
-rw-r--r--testing/web-platform/tests/wai-aria/role/form-roles.html28
-rw-r--r--testing/web-platform/tests/wai-aria/role/generic-roles.html23
-rw-r--r--testing/web-platform/tests/wai-aria/role/grid-roles.html59
-rw-r--r--testing/web-platform/tests/wai-aria/role/invalid-roles.html135
-rw-r--r--testing/web-platform/tests/wai-aria/role/list-roles.html29
-rw-r--r--testing/web-platform/tests/wai-aria/role/listbox-roles.html43
-rw-r--r--testing/web-platform/tests/wai-aria/role/menu-roles.html82
-rw-r--r--testing/web-platform/tests/wai-aria/role/region-roles.html27
-rw-r--r--testing/web-platform/tests/wai-aria/role/role_none_conflict_resolution.html38
-rw-r--r--testing/web-platform/tests/wai-aria/role/roles.html140
-rw-r--r--testing/web-platform/tests/wai-aria/role/synonym-roles.html34
-rw-r--r--testing/web-platform/tests/wai-aria/role/tab-roles.html94
-rw-r--r--testing/web-platform/tests/wai-aria/role/table-roles.html156
-rw-r--r--testing/web-platform/tests/wai-aria/role/tree-roles.html150
-rw-r--r--testing/web-platform/tests/wai-aria/scripts/ATTAcomm.js947
-rw-r--r--testing/web-platform/tests/wai-aria/scripts/aria-utils.js196
-rw-r--r--testing/web-platform/tests/wai-aria/scripts/manual.css70
-rw-r--r--testing/web-platform/tests/wai-aria/tools/convert_wiki.pl648
-rw-r--r--testing/web-platform/tests/wai-aria/tools/make_tests.pl544
261 files changed, 34035 insertions, 0 deletions
diff --git a/testing/web-platform/tests/wai-aria/META.yml b/testing/web-platform/tests/wai-aria/META.yml
new file mode 100644
index 0000000000..17068230e5
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/META.yml
@@ -0,0 +1,5 @@
+spec: https://w3c.github.io/aria/
+suggested_reviewers:
+ - cookiecrook
+ - spectranaut
+ - jnurthen
diff --git a/testing/web-platform/tests/wai-aria/idlharness.window.js b/testing/web-platform/tests/wai-aria/idlharness.window.js
new file mode 100644
index 0000000000..590bf9e2e9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/idlharness.window.js
@@ -0,0 +1,15 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+idl_test(
+ ['wai-aria'],
+ ['dom'],
+ idl_array => {
+ idl_array.add_objects({
+ Element: ['element'],
+ });
+ self.element = document.createElementNS(null, "test");
+ }
+);
diff --git a/testing/web-platform/tests/wai-aria/manual/README.md b/testing/web-platform/tests/wai-aria/manual/README.md
new file mode 100644
index 0000000000..4e1a7706e3
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/README.md
@@ -0,0 +1,65 @@
+Wai-aria: Tests for the WAI-ARIA Recommendations
+================================================
+
+The [WAI ARIA Recommendations](https://www.w3.org/TR/wai-aria)
+define extensions to HTML4/5 for support of extended semantics. These
+semantics make it easier for Assistive Technologies to interpret and
+present content to users with varying physical and cognitive abilities.
+
+The purpose of these tests is to help ensure that user agents support the
+requirements of the Recommendations.
+
+The general approach for this testing is to enable both manual and automated
+testing, with a preference for automation.
+
+
+Running Tests
+-------------
+
+In order to run these tests in an automated fashion, you will need to have a
+special Assistive Technology Test Adapter (ATTA) for the platform under test. We will
+provide a list of these for popular platforms here as they are made available.
+
+The ATTA will monitor the window under test via the platforms Accessibility
+Layer, forwarding information about the Accessibility Tree to the running test
+so that it can evaluate support for the various features under test.
+
+The workflow for running these tests is something like:
+
+1. Start up the ATTA for the platform under test, informing it of the location
+ of the test server and the user agent to be tested.
+2. Start up the test driver window and select the wai-aria tests to be run
+ (e.g., the ARIA 1.1 tests) - click "Start"
+3. A window pops up that shows a test - the description of which tells the
+ tester what is being tested. In an automated test, the test with proceed
+ without user intervention. In a manual test, some user input may be required
+ in order to stimulate the test.
+4. The test runs. Success or failure is determined and reported to the test
+ driver window, which then cycles to the next test in the sequence.
+5. Repeat steps 2-4 until done.
+6. Download the JSON format report of test results, which can then be visually
+ inspected, reported on using various tools, or passed on to W3C for
+ evaluation and collection in the Implementation Report via github.
+
+**Remember that while these tests are written to help exercise implementations,
+their other (important) purpose is to increase confidence that there are
+interoperable implementations.** So, implementers are the audience, but these
+tests are not meant to be a comprehensive collection of tests for a client that
+might implement the Recommendation.
+
+
+Capturing and Reporting Results
+-------------------------------
+
+As tests are run against implementations, if the results of testing are
+submitted to [test-results](https://github.com/w3c/test-results/) then they will
+be automatically included in documents generated by
+[wptreport](https://www.github.com/w3c/wptreport). The same tool can be used
+locally to view reports about recorded results.
+
+
+Writing Tests
+-------------
+
+If you are interested in writing tests for this environment, see the
+associated [CONTRIBUTING](CONTRIBUTING.md) document.
diff --git a/testing/web-platform/tests/wai-aria/manual/alertdialog_modal_false-manual.html b/testing/web-platform/tests/wai-aria/manual/alertdialog_modal_false-manual.html
new file mode 100644
index 0000000000..ee64c9dbf0
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/alertdialog_modal_false-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>alertdialog modal false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_MODAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXApplicationAlertDialog"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "web alert dialog"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_MODAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Pane"
+ ],
+ [
+ "result",
+ "Window.isModal",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "Test2",
+ "test" : {
+ "AXAPI" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "alertdialog modal false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for alertdialog modal false.</p>
+ <h1 id="Test2">Modal Dialog Box Test</h1>
+ <div role="alertdialog" aria-modal="false" id="test">
+ You have an error.
+ <input type="button" value="ok"/>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/alertdialog_modal_true-manual.html b/testing/web-platform/tests/wai-aria/manual/alertdialog_modal_true-manual.html
new file mode 100644
index 0000000000..4affe2fd5e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/alertdialog_modal_true-manual.html
@@ -0,0 +1,107 @@
+<!doctype html>
+<html>
+ <head>
+ <title>alertdialog modal true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_MODAL"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_MODAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Pane"
+ ],
+ [
+ "result",
+ "Window.isModal",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "Test2",
+ "test" : {
+ "AXAPI" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "alertdialog modal true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for alertdialog modal true.</p>
+ <h1 id="Test2">Modal Dialog Box Test</h1>
+ <div role="alertdialog" aria-modal="true" id="test">
+ You have an error.
+ <input type="button" value="ok"/>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/application_activedescendant-manual.html b/testing/web-platform/tests/wai-aria/manual/application_activedescendant-manual.html
new file mode 100644
index 0000000000..a6ef85ac3d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/application_activedescendant-manual.html
@@ -0,0 +1,202 @@
+<!doctype html>
+<html>
+ <head>
+ <title>application activedescendant</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "event" : "focus",
+ "title" : "step 1",
+ "type" : "event"
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_EMBEDDED"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXWebApplication"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "web application"
+ ],
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_APPLICATION"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Pane"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "application"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ },
+ {
+ "element" : "bob",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "true"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXFocused)",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 3",
+ "type" : "test"
+ }
+ ],
+ "title" : "application activedescendant"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for application activedescendant.</p>
+ <div id='test' tabindex="0" aria-activedescendant="bob" role='application'>
+ <div id='bob' role='group'>Hello world</div>
+ </div>
+ then role:application, aria-activedescendant: bob
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/application_activedescendant_value_changes-manual.html b/testing/web-platform/tests/wai-aria/manual/application_activedescendant_value_changes-manual.html
new file mode 100644
index 0000000000..d923c84dea
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/application_activedescendant_value_changes-manual.html
@@ -0,0 +1,253 @@
+<!doctype html>
+<html>
+ <head>
+ <title>application activedescendant value changes</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "event" : "focus",
+ "title" : "step 1",
+ "type" : "event"
+ },
+ {
+ "attribute" : "aria-activedescendant",
+ "element" : "test",
+ "title" : "step 2",
+ "type" : "attribute",
+ "value" : "\"bob\""
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_EMBEDDED"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXWebApplication"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "web application"
+ ],
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "false"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXFocused)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_FOCUS"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_APPLICATION"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Pane"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "application"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 3",
+ "type" : "test"
+ },
+ {
+ "element" : "bob",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:focused"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "1"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "true"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXFocused)",
+ "is",
+ "true"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "AXFocusedUIElementChanged"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_FOCUS"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "UIA_AutomationFocusChangedEventId"
+ ]
+ ]
+ },
+ "title" : "step 4",
+ "type" : "test"
+ }
+ ],
+ "title" : "application activedescendant value changes"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for application activedescendant value changes.</p>
+ <div id='test' tabindex="0" role='application'>
+ <div id='bob' role='group'>Hello world</div>
+ </div>
+ then role:application, aria-activedescendant: bob generates a state change event
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_not_declared-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_not_declared-manual.html
new file mode 100644
index 0000000000..ecf95bb64f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_not_declared-manual.html
@@ -0,0 +1,116 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current not declared</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "current:false"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "current:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ListItem"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ ""
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current not declared"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current not declared.</p>
+ <ul role="list">
+ <li id="test" role="listitem">2</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_changes-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_changes-manual.html
new file mode 100644
index 0000000000..d3f1eae005
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_changes-manual.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value changes</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "attribute" : "aria-current",
+ "element" : "test",
+ "title" : "step 1",
+ "type" : "attribute",
+ "value" : "\"false\""
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:false"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:active"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "0"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXARIACurrent",
+ "contains",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:false"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "current",
+ "is",
+ "false"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "PropertyChangedEvent"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value changes"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value changes.</p>
+ <ul role="list">
+ <li id="test" role="listitem" aria-current="true">1</li>
+ <li role="listitem" aria-current="false">2</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_date-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_date-manual.html
new file mode 100644
index 0000000000..b15f5ec13a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_date-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value date</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:date"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "date"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:date"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "TableItem"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ "date"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value date"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value date.</p>
+ <table>
+ <tr>
+ <td id="test" role="cell" aria-current="date">1</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_location-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_location-manual.html
new file mode 100644
index 0000000000..e8cf762c0e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_location-manual.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value location</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_IMAGE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:location"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXImage"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "location"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GRAPHIC"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:location"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleImage"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GRAPHIC"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Image"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ "location"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value location"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value location.</p>
+ <div id="test" role="img" aria-current="location">1</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_page-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_page-manual.html
new file mode 100644
index 0000000000..ba48b738cc
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_page-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value page</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LINK"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:page"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXLink"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "page"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LINK"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:page"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleHypertext"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LINK"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_LINKED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HyperLink"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ "page"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value page"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value page.</p>
+ <div id="test" role="link" aria-current="page">1</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_step-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_step-manual.html
new file mode 100644
index 0000000000..6f4d5986c6
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_step-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value step</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LINK"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:step"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXLink"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "step"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LINK"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:step"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleHypertext"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LINK"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_LINKED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HyperLink"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ "step"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value step"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value step.</p>
+ <div id="test" role="link" aria-current="step">1</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_time-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_time-manual.html
new file mode 100644
index 0000000000..046fb81769
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_time-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value time</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:time"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "time"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:time"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "TableItem"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ "time"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value time"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value time.</p>
+ <table>
+ <tr>
+ <td id="test" role="cell" aria-current="time">1</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_true-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_true-manual.html
new file mode 100644
index 0000000000..3ce799f8b2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_true-manual.html
@@ -0,0 +1,116 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_ACTIVE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:true"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "current:true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ListItem"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value true.</p>
+ <ul role="list">
+ <li id="test" role="listitem" aria-current="true">1</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_unspecified-manual.html
new file mode 100644
index 0000000000..c017a000a1
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-current_with_value_unspecified-manual.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-current with value unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_ACTIVE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXARIACurrent",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "current:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ListItem"
+ ],
+ [
+ "property",
+ "current",
+ "is",
+ ""
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-current with value unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-current with value unspecified.</p>
+ <ul role="list">
+ <li id="test" role="listitem" aria-current="">1</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_details_element-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_details_element-manual.html
new file mode 100644
index 0000000000..6a0d9d776a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_details_element-manual.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-details pointing to details element</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "relation",
+ "RELATION_DETAILS",
+ "is",
+ "[details]"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "contains",
+ "IA2_RELATION_DETAILS"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.DescribedBy",
+ "is",
+ "[details]"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "details",
+ "test" : {
+ "ATK" : [
+ [
+ "relation",
+ "RELATION_DETAILS_FOR",
+ "is",
+ "[test]"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "contains",
+ "IA2_RELATION_DETAILS_FOR"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-details pointing to details element"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-details pointing to details element.</p>
+ <img id="test" src="foo.jpg" aria-details="details">
+ <details id="details">
+ <summary>More information at W3.org</summary>
+ <iframe src="data:text/html,<body>foo</body>"/>
+ </details>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_div_element-manual.html b/testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_div_element-manual.html
new file mode 100644
index 0000000000..8a46e78d97
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/aria-details_pointing_to_div_element-manual.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-details pointing to div element</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "relation",
+ "RELATION_DETAILS",
+ "is",
+ "[details]"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "contains",
+ "IA2_RELATION_DETAILS"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.DescribedBy",
+ "is",
+ "[details]"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "details",
+ "test" : {
+ "ATK" : [
+ [
+ "relation",
+ "RELATION_DETAILS_FOR",
+ "is",
+ "[test]"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "contains",
+ "IA2_RELATION_DETAILS_FOR"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-details pointing to div element"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-details pointing to div element.</p>
+ <img id="test" src="foo.jpg" aria-details="details">
+ <div id="details">
+ <iframe src="data:text/html,<body>foo</body>"/>
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/article_in_feed_posinset_and_setsize-manual.html b/testing/web-platform/tests/wai-aria/manual/article_in_feed_posinset_and_setsize-manual.html
new file mode 100644
index 0000000000..9c89dc3fa9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/article_in_feed_posinset_and_setsize-manual.html
@@ -0,0 +1,170 @@
+<!doctype html>
+<html>
+ <head>
+ <title>article in feed posinset and setsize</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ARTICLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:article"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXDocumentArticle"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "article"
+ ],
+ [
+ "property",
+ "AXARIAPosInSet",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "8"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:article"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "positionInGroup:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DOCUMENT"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "article"
+ ],
+ [
+ "property",
+ "AriaProperties.posinset",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "article in feed posinset and setsize"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for article in feed posinset and setsize.</p>
+ <div role="feed">
+ <div id="test" role="article" aria-posinset="4" aria-setsize="8">test cell</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/article_in_feed_setsize_-1-manual.html b/testing/web-platform/tests/wai-aria/manual/article_in_feed_setsize_-1-manual.html
new file mode 100644
index 0000000000..0552f926e9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/article_in_feed_setsize_-1-manual.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<html>
+ <head>
+ <title>article in feed setsize -1</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ARTICLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:article"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:-1"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXDocumentArticle"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "article"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "-1"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:article"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:-1"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:-1"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DOCUMENT"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "article"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "-1"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "article in feed setsize -1"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for article in feed setsize -1.</p>
+ <div role="feed">
+ <div id="test" role="article" aria-setsize="-1">test cell</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/article_not_in_feed_posinset_and_setsize-manual.html b/testing/web-platform/tests/wai-aria/manual/article_not_in_feed_posinset_and_setsize-manual.html
new file mode 100644
index 0000000000..91cb0e0eb4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/article_not_in_feed_posinset_and_setsize-manual.html
@@ -0,0 +1,174 @@
+<!doctype html>
+<html>
+ <head>
+ <title>article not in feed posinset and setsize</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ARTICLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:article"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXDocumentArticle"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "article"
+ ],
+ [
+ "property",
+ "AXARIAPosInSet",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "8"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DOCUMENT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:article"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "positionInGroup:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DOCUMENT"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "article"
+ ],
+ [
+ "property",
+ "AriaProperties.posinset",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "article not in feed posinset and setsize"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for article not in feed posinset and setsize.</p>
+ <div id="test" role="article" aria-posinset="4" aria-setsize="8">test cell</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_dialog-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_dialog-manual.html
new file mode 100644
index 0000000000..8ba0a22a8d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_dialog-manual.html
@@ -0,0 +1,132 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup dialog</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:dialog"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXPopUpButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "pop up button"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:dialog"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup dialog"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup dialog.</p>
+ <div id="test" role="button" aria-haspopup="dialog">
+ OK
+ </div>
+ <div role="dialog">
+ This is the dialog box
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_emptystring-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_emptystring-manual.html
new file mode 100644
index 0000000000..e909148906
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_emptystring-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup emptystring</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:false"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "button"
+ ],
+ [
+ "property",
+ "actions",
+ "doesNotContain",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "doesNotContain",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup emptystring"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup emptystring.</p>
+ <div id="test" role="button" aria-haspopup="">
+ OK
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_false-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_false-manual.html
new file mode 100644
index 0000000000..97188995e5
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_false-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "button"
+ ],
+ [
+ "property",
+ "actions",
+ "doesNotContain",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "doesNotContain",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup false.</p>
+ <div id="test" role="button" aria-haspopup="false">
+ OK
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_foo-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_foo-manual.html
new file mode 100644
index 0000000000..a09d21c074
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_foo-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup foo</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:false"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "button"
+ ],
+ [
+ "property",
+ "actions",
+ "doesNotContain",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "doesNotContain",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup foo"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup foo.</p>
+ <div id="test" role="button" aria-haspopup="foo">
+ OK
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_grid-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_grid-manual.html
new file mode 100644
index 0000000000..57c8efbde2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_grid-manual.html
@@ -0,0 +1,136 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup grid</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:grid"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXPopUpButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "pop up button"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:grid"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup grid"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup grid.</p>
+ <div id="test" role="button" aria-haspopup="grid">
+ OK
+ </div>
+ <table role="grid">
+ <tr>
+ <th>c1</th><th>c2</th>
+ </tr>
+ <tr>
+ <td>A</td><td>B</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_listbox-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_listbox-manual.html
new file mode 100644
index 0000000000..4191fc40a3
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_listbox-manual.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup listbox</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXPopUpButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "pop up button"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup listbox"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup listbox.</p>
+ <div id="test" role="button" aria-haspopup="listbox">
+ OK
+ </div>
+ <ul role="listbox">
+ <li tabindex="0" role="option">sprouts</li>
+ <li tabindex="-1" role="option">cucumbers</li>
+ </ul>
+
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_menu-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_menu-manual.html
new file mode 100644
index 0000000000..9378993f55
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_menu-manual.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup menu</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:menu"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXPopUpButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "pop up button"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:menu"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup menu"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup menu.</p>
+ <div id="test" role="button" aria-haspopup="menu">
+ OK
+ </div>
+ <ul tabindex="0" aria-activedescendant="foo" role="menu">
+ <li id="foo" tabindex="-1" role="menuitem">sprouts</li>
+ <li tabindex="-1" role="menuitem">cucumbers</li>
+ </ul>
+
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_tree-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_tree-manual.html
new file mode 100644
index 0000000000..e62b87f59d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_tree-manual.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup tree</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:tree"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXPopUpButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "pop up button"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:tree"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup tree"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup tree.</p>
+ <div id="test" role="button" aria-haspopup="tree">
+ OK
+ </div>
+ <ul tabindex="0" aria-activedescendant="foo" role="tree">
+ <li id="foo" tabindex="-1" role="treeitem">
+ squash
+ <ul role="group">
+ <li tabindex="-1"id="t1" role="treeitem">yellow</li>
+ <li tabindex="-1"id="t2" role="treeitem">summmer</li>
+ </ul>
+ </li>
+ <li tabindex="-1" role="treeitem">cucumbers</li>
+ </ul>
+
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_true-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_true-manual.html
new file mode 100644
index 0000000000..a6d94658d2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_true-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:menu"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXPopUpButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "pop up button"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:menu"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup true.</p>
+ <div role="button" aria-haspopup="true" id="test">
+ OK
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_haspopup_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/button_haspopup_unspecified-manual.html
new file mode 100644
index 0000000000..96d7095d4d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_haspopup_unspecified-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button haspopup unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "haspopup"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "button"
+ ],
+ [
+ "property",
+ "actions",
+ "doesNotContain",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_HASPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "doesNotContain",
+ "ExpandCollapse"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button haspopup unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button haspopup unspecified.</p>
+ <div id="test" role="button">
+ OK
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_roledescription_empty-manual.html b/testing/web-platform/tests/wai-aria/manual/button_roledescription_empty-manual.html
new file mode 100644
index 0000000000..d9eb0fe7cc
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_roledescription_empty-manual.html
@@ -0,0 +1,104 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button roledescription empty</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "roledescription"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "button"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "localizedExtendedRole",
+ "is",
+ "null"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "Button"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button roledescription empty"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button roledescription empty.</p>
+ <div role="button" aria-roledescription="" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_roledescription_valid-manual.html b/testing/web-platform/tests/wai-aria/manual/button_roledescription_valid-manual.html
new file mode 100644
index 0000000000..cdcf6071e6
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_roledescription_valid-manual.html
@@ -0,0 +1,102 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button roledescription valid</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "roledescription:SassyButton"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "SassyButton"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "localizedExtendedRole",
+ "is",
+ "SassyButton"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "SassyButton"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button roledescription valid"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button roledescription valid.</p>
+ <input type="button" value="Go Fish" aria-roledescription="SassyButton" id="test"/>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/button_roledescription_whitespace_only-manual.html b/testing/web-platform/tests/wai-aria/manual/button_roledescription_whitespace_only-manual.html
new file mode 100644
index 0000000000..59e463778a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/button_roledescription_whitespace_only-manual.html
@@ -0,0 +1,104 @@
+<!doctype html>
+<html>
+ <head>
+ <title>button roledescription whitespace only</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "roledescription"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "button"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "localizedExtendedRole",
+ "is",
+ "null"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "Button"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "button roledescription whitespace only"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for button roledescription whitespace only.</p>
+ <div role="button" aria-roledescription=" " id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell-manual.html b/testing/web-platform/tests/wai-aria/manual/cell-manual.html
new file mode 100644
index 0000000000..d9f0eafbe0
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell-manual.html
@@ -0,0 +1,216 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "foo",
+ "test" : {
+ "ATK" : [
+ [
+ "result",
+ "atk_table_get_n_columns()",
+ "is",
+ "8"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "table"
+ ],
+ [
+ "property",
+ "AXARIAColumnCount",
+ "is",
+ "8"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "Grid.ColumnCount",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "column=3"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "TableCell"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "cell"
+ ],
+ [
+ "property",
+ "AXARIAColumnIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "positionInGroup:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "GridItem pattern"
+ ],
+ [
+ "property",
+ "GridItem.Column",
+ "is",
+ "3"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "property",
+ "interfaces",
+ "MUST NOT contain",
+ "invoke pattern"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell.</p>
+ <div id="foo" role="table" aria-colcount="8">
+ <div role="row">
+ <span id="test" role="cell" aria-colindex="4" >test cell</span>
+ </div>
+ </div>
+ then role: cell, aria-colindex: 4, aria-colcount:8
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_div-manual.html
new file mode 100644
index 0000000000..fa120dc5e4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-colspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.ColumnSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-colspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-colspan 2 on div.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="cell" aria-colspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3-manual.html
new file mode 100644
index 0000000000..a7c65fed3d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-colspan 2 on td html colspan 3</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "doesNotContain",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "isNot",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.ColumnSpan",
+ "isNot",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-colspan 2 on td html colspan 3"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-colspan 2 on td html colspan 3.</p>
+ <table>
+ <tr>
+ <td id="test" colspan="3" aria-colspan="2">test cell</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html
new file mode 100644
index 0000000000..057918c6b0
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html
@@ -0,0 +1,115 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-colspan 2 on td html colspan 3 with headers and border</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.ColumnSpan",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-colspan 2 on td html colspan 3 with headers and border"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-colspan 2 on td html colspan 3 with headers and border.</p>
+ <table border="1">
+ <tr>
+ <th>test header 1</th><th>test header 2</th><th>test header 3</th>
+ </tr>
+ <tr>
+ <td id="test" colspan="3" aria-colspan="2">test cell</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html
new file mode 100644
index 0000000000..2c05e6ea71
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html
@@ -0,0 +1,109 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-colspan 2 on td html colspan 3 with three actual columns</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.ColumnSpan",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-colspan 2 on td html colspan 3 with three actual columns"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-colspan 2 on td html colspan 3 with three actual columns.</p>
+ <table>
+ <tr>
+ <td>1</td><td>2</td><td>3</td>
+ </tr>
+ <tr>
+ <td id="test" colspan="3" aria-colspan="2">test cell</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html
new file mode 100644
index 0000000000..06212078b7
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-colspan 2 on td with html colspan not specified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.ColumnSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-colspan 2 on td with html colspan not specified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-colspan 2 on td with html colspan not specified.</p>
+ <table>
+ <tr>
+ <td id="test" aria-colspan="2">test cell</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_div-manual.html
new file mode 100644
index 0000000000..e94303848d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-rowspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.RowSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-rowspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-rowspan 2 on div.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="cell" aria-rowspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html
new file mode 100644
index 0000000000..86ea1a4aec
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-rowspan 2 on td html rowspan 3</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "doesNotContain",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "isNot",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "rowspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.RowSpan",
+ "isNot",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-rowspan 2 on td html rowspan 3"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-rowspan 2 on td html rowspan 3.</p>
+ <table>
+ <tr>
+ <td id="test" role="cell" rowspan="3" aria-rowspan="2">test cell</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html
new file mode 100644
index 0000000000..f1572046f2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-rowspan 2 on td html rowspan 3 with three actual rows</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "rowspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.RowSpan",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-rowspan 2 on td html rowspan 3 with three actual rows"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-rowspan 2 on td html rowspan 3 with three actual rows.</p>
+ <table>
+ <tr>
+ <td>1</td>
+ <td id="test" role="cell" rowspan="3" aria-rowspan="2">test cell</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td>3</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html
new file mode 100644
index 0000000000..0978186feb
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell aria-rowspan 2 on td with html rowspan not specified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.RowSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell aria-rowspan 2 on td with html rowspan not specified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell aria-rowspan 2 on td with html rowspan not specified.</p>
+ <table>
+ <tr>
+ <td id="test" role="cell" aria-rowspan="2">test cell</td>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_colindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_colindex_4-manual.html
new file mode 100644
index 0000000000..02003065e0
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_colindex_4-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell colindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "column=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIAColumnIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "TableItem.Column",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell colindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell colindex 4.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="cell" aria-colindex="4" aria-colcount="8">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/cell_rowindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/cell_rowindex_4-manual.html
new file mode 100644
index 0000000000..ea2937efcb
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/cell_rowindex_4-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>cell rowindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "row=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIARowIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "Row",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "cell rowindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for cell rowindex 4.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="cell" aria-rowindex="4">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_false-manual.html
new file mode 100644
index 0000000000..558dc8e391
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_false-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>checkbox readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_CHECK_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "checkbox"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CHECKBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CHECKBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Checkbox"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "checkbox readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for checkbox readonly false.</p>
+ <div id="test" aria-readonly="false" role="checkbox">test cell</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_true-manual.html
new file mode 100644
index 0000000000..f3c879038f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_true-manual.html
@@ -0,0 +1,126 @@
+<!doctype html>
+<html>
+ <head>
+ <title>checkbox readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_CHECK_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "checkbox"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CHECKBUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Checkbox"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "checkbox readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for checkbox readonly true.</p>
+ <div id="test" aria-readonly="true" role="checkbox">test cell</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..583985f000
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/checkbox_readonly_unspecified-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>checkbox readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_CHECK_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "checkbox"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CHECKBUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CHECKBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Checkbox"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "checkbox readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for checkbox readonly unspecified.</p>
+ <div id="test" role="checkbox">test cell</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_div-manual.html
new file mode 100644
index 0000000000..4789ced84d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-colspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.ColumnSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-colspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-colspan 2 on div.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="columnheader" aria-colspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html
new file mode 100644
index 0000000000..2ad8cb4bed
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-colspan 2 on th html colspan 3</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "doesNotContain",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "isNot",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.ColumnSpan",
+ "isNot",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-colspan 2 on th html colspan 3"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-colspan 2 on th html colspan 3.</p>
+ <table>
+ <tr>
+ <th id="test" role="columnheader" colspan="3" aria-colspan="2">test cell</th>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html
new file mode 100644
index 0000000000..3ac8701f5d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html
@@ -0,0 +1,109 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-colspan 2 on th html colspan 3 with three actual columns</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "colspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "TableItem.ColumnSpan",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-colspan 2 on th html colspan 3 with three actual columns"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-colspan 2 on th html colspan 3 with three actual columns.</p>
+ <table>
+ <tr>
+ <th>1</th><th>2</th><th>3</th>
+ </tr>
+ <tr>
+ <th id="test" role="columnheader" colspan="3" aria-colspan="2">test cell</th>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html
new file mode 100644
index 0000000000..82c7599188
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-colspan 2 on th with html colspan not specified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.ColumnSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-colspan 2 on th with html colspan not specified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-colspan 2 on th with html colspan not specified.</p>
+ <table>
+ <tr>
+ <th id="test" role="columnheader" aria-colspan="2">test cell</th>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_div-manual.html
new file mode 100644
index 0000000000..00c0068392
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-rowspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.RowSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-rowspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-rowspan 2 on div.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="columnheader" aria-rowspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html
new file mode 100644
index 0000000000..256a3d73bd
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-rowspan 2 on th html rowspan 3</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "doesNotContain",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "isNot",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "rowspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.RowSpan",
+ "isNot",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-rowspan 2 on th html rowspan 3"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-rowspan 2 on th html rowspan 3.</p>
+ <table>
+ <tr>
+ <th id="test" role="columnheader" rowspan="3" aria-rowspan="2">test cell</th>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html
new file mode 100644
index 0000000000..6327e5fb4e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-rowspan 2 on th html rowspan 3 with three actual rows</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "rowspan:2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.RowSpan",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-rowspan 2 on th html rowspan 3 with three actual rows"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-rowspan 2 on th html rowspan 3 with three actual rows.</p>
+ <table>
+ <tr>
+ <th>1</th>
+ <th id="test" role="columnheader" rowspan="3" aria-rowspan="2">test cell</th>
+ </tr>
+ <tr>
+ <th>2</th>
+ </tr>
+ <tr>
+ <th>3</th>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html
new file mode 100644
index 0000000000..425eb5b15e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader aria-rowspan 2 on th with html rowspan not specified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.RowSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader aria-rowspan 2 on th with html rowspan not specified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader aria-rowspan 2 on th with html rowspan not specified.</p>
+ <table>
+ <tr>
+ <th id="test" role="columnheader" aria-rowspan="2">test cell</th>
+ </tr>
+ </table>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_colindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_colindex_4-manual.html
new file mode 100644
index 0000000000..f44e8343fb
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_colindex_4-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader colindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "column=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIAColumnIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Column",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader colindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader colindex 4.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="columnheader" aria-colindex="4" aria-colcount="8">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_rowindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_rowindex_4-manual.html
new file mode 100644
index 0000000000..7ab7e9c8d0
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_rowindex_4-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader rowindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "row=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIARowIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.Row",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader rowindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader rowindex 4.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="columnheader" aria-rowindex="4">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_selected_false_not_automatically_propagated-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_selected_false_not_automatically_propagated-manual.html
new file mode 100644
index 0000000000..7624f2a3b8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_selected_false_not_automatically_propagated-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader selected false not automatically propagated</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "cell"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "SelectionItem.IsSelected",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "SelectionItem.selectionContainer",
+ "is",
+ "test1"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader selected false not automatically propagated"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader selected false not automatically propagated.</p>
+ <div id="test1" role="grid">
+ <div role="row">
+ <div role="columnheader" aria-selected="false">C1</div>
+ <div role="columnheader">C2</div>
+ </div>
+ <div role="row">
+ <div id="test" aria-selected="true" role="gridcell">A1</div>
+ <div role="gridcell">A2</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/columnheader_selected_true_not_automatically_propagated-manual.html b/testing/web-platform/tests/wai-aria/manual/columnheader_selected_true_not_automatically_propagated-manual.html
new file mode 100644
index 0000000000..1bc364cb88
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/columnheader_selected_true_not_automatically_propagated-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>columnheader selected true not automatically propagated</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "cell"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "SelectionItem.IsSelected",
+ "is",
+ "false"
+ ],
+ [
+ "property",
+ "SelectionItem.selectionContainer",
+ "is",
+ "test1"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "columnheader selected true not automatically propagated"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for columnheader selected true not automatically propagated.</p>
+ <div id="test1" role="grid">
+ <div role="row">
+ <div role="columnheader" aria-selected="true">C1</div>
+ <div role="columnheader">C2</div>
+ </div>
+ <div role="row">
+ <div id="test" role="gridcell">A1</div>
+ <div role="gridcell">A2</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_controls_an_invalid_id-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_controls_an_invalid_id-manual.html
new file mode 100644
index 0000000000..91188d8e3c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_controls_an_invalid_id-manual.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox controls an invalid ID</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "RELATION_CONTROLLER_FOR"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXLinkedUIElements",
+ "doesNotContain",
+ "myID"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "IA2_RELATION_CONTROLLER_FOR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomation.ControllerFor",
+ "doesNotContain",
+ "myID"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "myID",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "RELATION_CONTROLLED_BY"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "IA2_RELATION_CONTROLLED_BY"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox controls an invalid ID"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox controls an invalid ID.</p>
+ <div id="test" role="combobox" aria-controls="fakeID" aria-owns="myID" aria-expanded="true" aria-haspopup="listbox"><span role="textbox">option 3</span></div>
+ <div role="listbox" id="myID">
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+ <div role="option">option 3</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_dialog-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_dialog-manual.html
new file mode 100644
index 0000000000..d9cf618d9b
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_dialog-manual.html
@@ -0,0 +1,162 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup dialog</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:dialog"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:dialog"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup dialog"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup dialog.</p>
+ <div aria-label="Tag" aria-haspopup="dialog" id="test" role="combobox" aria-expanded="true" aria-owns="owned_dialog">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_dialog" aria-activedescendant="selected_cell">
+ <div role="radiogroup">
+ <div role="radio" id="selected_radio" tabindex="-1">R1</div><div role="radio" tabindex="-1">R2</div>
+ </div>
+ <div role="button" tabindex="0">ok</div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_false-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_false-manual.html
new file mode 100644
index 0000000000..2b0ca94745
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_false-manual.html
@@ -0,0 +1,156 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HAS_POPUP"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "doesNotContain",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup false.</p>
+ <div aria-label="Tag" id="test" aria-haspopup="false" role="combobox" aria-expanded="true" aria-owns="owned_dialog">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_dialog" aria-activedescendant="selected_cell">
+ <div role="radiogroup">
+ <div role="radio" id="selected_radio" tabindex="-1">R1</div><div role="radio" tabindex="-1">R2</div>
+ </div>
+ <div role="button" tabindex="0">ok</div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_grid-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_grid-manual.html
new file mode 100644
index 0000000000..a3929cf79e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_grid-manual.html
@@ -0,0 +1,164 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup grid</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:grid"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:grid"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup grid"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup grid.</p>
+ <div aria-label="Tag" aria-haspopup="grid" id="test" role="combobox" aria-expanded="true" aria-owns="owned_grid">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_grid" aria-activedescendant="selected_cell">
+ </div>
+ <table id="owned_grid" role="grid">
+ <tr>
+ <th tabindex="-1" id="selected_cell" role="colomnheader">c1</th><th role="colomnheader">c2</th>
+ </tr>
+ <tr>
+ <td role="gridcell">A1</td><td role="gridcell">A2</td>
+ </tr>
+ <tr>
+ <td role="gridcell">A3</td><td role="gridcell">A4</td>
+ </tr>
+ </table>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_listbox-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_listbox-manual.html
new file mode 100644
index 0000000000..e1c9084fd5
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_listbox-manual.html
@@ -0,0 +1,154 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup listbox</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup listbox"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup listbox.</p>
+ <div aria-label="Tag" aria-haspopup="listbox" id="test" role="combobox" aria-expanded="true" aria-owns="owned_listbox">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_listbox" aria-activedescendant="selected_cell">
+ <div role="option">foo</div>
+ <div role="option">baz</div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_menu-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_menu-manual.html
new file mode 100644
index 0000000000..a9439ed496
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_menu-manual.html
@@ -0,0 +1,154 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup menu</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:menu"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:menu"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup menu"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup menu.</p>
+ <div aria-label="Tag" aria-haspopup="menu" id="test" role="combobox" aria-expanded="true" aria-owns="owned_menu">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_menu" aria-activedescendant="selected_cell">
+ <div role="menuitem">foo</div>
+ <div role="menuitem">baz</div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_tree-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_tree-manual.html
new file mode 100644
index 0000000000..a0602b520f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_tree-manual.html
@@ -0,0 +1,171 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup tree</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:tree"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:tree"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup tree"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup tree.</p>
+ <div aria-label="Tag" id="test" role="combobox" aria-expanded="true" aria-owns="owned_tree" aria-haspopup="tree">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_tree" aria-activedescendant="oranges">
+ <li id="fruits" role="treeitem" tabindex="0" aria-expanded="true"><span>Fruits</span>
+ <ul id="fruit-grp" role="group">
+ <li id="oranges" role="treeitem" tabindex="-1">Oranges</li>
+ <li id="apples" role="treeitem" tabindex="-1" aria-expanded="false"><span>Apples</span>
+ <ul id="apple-grp" role="group">
+ <li id="macintosh" role="treeitem" tabindex="-1">Macintosh</li>
+ <li id="granny_smith" role="treeitem" tabindex="-1" aria-expanded="false"><span>Granny Smith</span>
+ <ul id="granny-grp" role="group">
+ <li id="Washington" role="treeitem" tabindex="-1">Washington State</li>
+ <li id="Michigan" role="treeitem" tabindex="-1">Michigan</li>
+ </ul>
+ </li>
+ <li id="fuji" role="treeitem" tabindex="-1">Fuji</li>
+ </ul>
+ </li>
+ <li id="bananas" role="treeitem" tabindex="-1">Bananas</li>
+ <li id="pears" role="treeitem" tabindex="-1">Pears</li>
+ </ul>
+ </li>
+ <li id="vegetables" role="treeitem" tabindex="-1" aria-expanded="true">Vegetables</li>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_true-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_true-manual.html
new file mode 100644
index 0000000000..c7548ce5cd
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_true-manual.html
@@ -0,0 +1,162 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:true"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup true.</p>
+ <div aria-label="Tag" id="test" aria-haspopup="true" role="combobox" aria-expanded="true" aria-owns="owned_dialog">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_dialog" aria-activedescendant="selected_cell">
+ <div role="radiogroup">
+ <div role="radio" id="selected_radio" tabindex="-1">R1</div><div role="radio" tabindex="-1">R2</div>
+ </div>
+ <div role="button" tabindex="0">ok</div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_unspecified-manual.html
new file mode 100644
index 0000000000..cd61076fb4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_haspopup_unspecified-manual.html
@@ -0,0 +1,159 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox haspopup unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "actions",
+ "contains",
+ "AXShowMenu"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "ExpandCollapse pattern"
+ ],
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox haspopup unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox haspopup unspecified.</p>
+ <div aria-label="Tag" id="test" role="combobox" aria-expanded="true" aria-owns="owned_listbox">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_listbox" aria-activedescendant="selected_option">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..a5bcc700ec
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_orientation_horizontal-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox orientation horizontal.</p>
+ <div aria-label="Tag" id="test" role="combobox" aria-orientation="horizontal" aria-expanded="true" aria-owns="owned_listbox">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_listbox" aria-activedescendant="selected_option">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..20bd53d8d1
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_orientation_unspecified-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXUnknownOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "isNot",
+ "vertical"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "isNot",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox orientation unspecified.</p>
+ <div aria-label="Tag" id="test" role="combobox" aria-expanded="true" aria-owns="owned_listbox">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_listbox" aria-activedescendant="selected_option">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_orientation_vertical-manual.html
new file mode 100644
index 0000000000..189345c415
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_orientation_vertical-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox orientation vertical.</p>
+ <div aria-label="Tag" id="test" role="combobox" aria-orientation="vertical" aria-expanded="true" aria-owns="owned_listbox">
+ <input type="text" aria-autocomplete="list" aria-controls="owned_listbox" aria-activedescendant="selected_option">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_readonly_false-manual.html
new file mode 100644
index 0000000000..978ab11948
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_readonly_false-manual.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox readonly false.</p>
+ <div id="test" role="combobox" aria-readonly="false" aria-owns="myID" aria-expanded="true" aria-haspopup="listbox"><span role="textbox">option 3</span></div>
+ <div role="listbox" id="myID">
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+ <div role="option">option 3</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_readonly_true-manual.html
new file mode 100644
index 0000000000..26a4302c24
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_readonly_true-manual.html
@@ -0,0 +1,155 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox readonly true.</p>
+ <div id="test" role="combobox" aria-readonly="true" aria-owns="myID" aria-expanded="true" aria-haspopup="listbox"><span role="textbox">option 3</span></div>
+ <div role="listbox" id="myID">
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+ <div role="option">option 3</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/combobox_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/combobox_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..4ad87b2c0a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/combobox_readonly_unspecified-manual.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html>
+ <head>
+ <title>combobox readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COMBO_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HAS_POPUP"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXComboBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "combo box"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "haspopup:listbox"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COMBOBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_HASPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Combobox"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "combobox readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for combobox readonly unspecified.</p>
+ <div id="test" role="combobox" aria-owns="myID" aria-expanded="true" aria-haspopup="listbox"><span role="textbox">option 3</span></div>
+ <div role="listbox" id="myID">
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+ <div role="option">option 3</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/dialog_modal_false-manual.html b/testing/web-platform/tests/wai-aria/manual/dialog_modal_false-manual.html
new file mode 100644
index 0000000000..6c906d320f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/dialog_modal_false-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>dialog modal false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_MODAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXApplicationDialog"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "web dialog"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_MODAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Pane"
+ ],
+ [
+ "result",
+ "Window.isModal",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "Test2",
+ "test" : {
+ "AXAPI" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "dialog modal false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for dialog modal false.</p>
+ <h1 id="Test2">Modal Dialog Box Test</h1>
+ <div role="dialog" aria-modal="false" id="test">
+ You have an error.
+ <input type="button" value="ok"/>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/dialog_modal_true-manual.html b/testing/web-platform/tests/wai-aria/manual/dialog_modal_true-manual.html
new file mode 100644
index 0000000000..02cbfb5fe8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/dialog_modal_true-manual.html
@@ -0,0 +1,108 @@
+<!doctype html>
+<html>
+ <head>
+ <title>dialog modal true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_MODAL"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_MODAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Pane"
+ ],
+ [
+ "result",
+ "Window.isModal",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "Test2",
+ "test" : {
+ "AXAPI" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "dialog modal true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for dialog modal true.</p>
+ <body>
+ <h1 id="Test2">Modal Dialog Box Test</h1>
+ <div role="dialog" aria-modal="true" id="test">
+ <input type="button" value="ok"/>
+ </div>
+ </body>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/dialog_modal_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/dialog_modal_unspecified-manual.html
new file mode 100644
index 0000000000..edd4605dad
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/dialog_modal_unspecified-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>dialog modal unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_MODAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXApplicationDialog"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "web dialog"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_MODAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_DIALOG"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Pane"
+ ],
+ [
+ "result",
+ "Window.isModal",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "Test2",
+ "test" : {
+ "AXAPI" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "dialog modal unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for dialog modal unspecified.</p>
+ <h1 id="Test2">Modal Dialog Box Test</h1>
+ <div role="dialog" id="test">
+ You have an error.
+ <input type="button" value="ok"/>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/div_element_without_role_roledescription_valid-manual.html b/testing/web-platform/tests/wai-aria/manual/div_element_without_role_roledescription_valid-manual.html
new file mode 100644
index 0000000000..68b6cc51c7
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/div_element_without_role_roledescription_valid-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>div element without role roledescription valid</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SECTION"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "roledescription"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Text"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Hypertext"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "group"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_SECTION"
+ ],
+ [
+ "property",
+ "localizedExtendedRole",
+ "is",
+ "null"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleText2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleHypertext2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "div element without role roledescription valid"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for div element without role roledescription valid.</p>
+ <div aria-roledescription="foo" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/errormessage_object_in_invalid_state-manual.html b/testing/web-platform/tests/wai-aria/manual/errormessage_object_in_invalid_state-manual.html
new file mode 100644
index 0000000000..9996568262
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/errormessage_object_in_invalid_state-manual.html
@@ -0,0 +1,100 @@
+<!doctype html>
+<html>
+ <head>
+ <title>errormessage object in invalid state</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "relation",
+ "RELATION_ERROR_MESSAGE",
+ "is",
+ "[error]"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXValidationError",
+ "is",
+ "You did not enter a valid date!"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "properties",
+ "relations",
+ "contains",
+ "IA2_RELATION_ERROR_MESSAGE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControllerFor",
+ "is",
+ "error"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "error",
+ "test" : {
+ "ATK" : [
+ [
+ "relation",
+ "RELATION_ERROR_FOR",
+ "is",
+ "[test]"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "contains",
+ "IA2_RELATION_ERROR_FOR"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "errormessage object in invalid state"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for errormessage object in invalid state.</p>
+ <div role="form">
+ <label for="test">date</label><input type="text" id="test" value="foo" aria-invalid="true" aria-errormessage="error">
+ <label for="test1">surname</label><input type="text" id="test1">
+ </div>
+ <div id="error">
+ You did not enter a valid date!
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/errormessage_object_in_valid_state-manual.html b/testing/web-platform/tests/wai-aria/manual/errormessage_object_in_valid_state-manual.html
new file mode 100644
index 0000000000..7c194c6d0a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/errormessage_object_in_valid_state-manual.html
@@ -0,0 +1,100 @@
+<!doctype html>
+<html>
+ <head>
+ <title>errormessage object in valid state</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "RELATION_ERROR_MESSAGE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXValidationError",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "IA2_RELATION_ERROR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.ControllerFor",
+ "is",
+ ""
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "error",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "RELATION_ERROR_FOR"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "relations",
+ "doesNotContain",
+ "IA2_RELATION_ERROR_FOR"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "errormessage object in valid state"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for errormessage object in valid state.</p>
+ <div role="form">
+ <label for="test">date</label><input type="text" id="test" value="April 12" aria-invalid="false" aria-errormessage="error">
+ <label for="test1">surname</label><input type="text" id="test1">
+ </div>
+ <div id="error">
+ You did not enter a valid date!
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/feed-manual.html b/testing/web-platform/tests/wai-aria/manual/feed-manual.html
new file mode 100644
index 0000000000..91fc6778db
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/feed-manual.html
@@ -0,0 +1,105 @@
+<!doctype html>
+<html>
+ <head>
+ <title>feed</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:feed"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXApplicationGroup"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "feed"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:feed"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "feed"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "feed"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for feed.</p>
+ <section role="feed" id="test">
+ <article>This is article 1</article>
+ <div role="article">This is article 2</div>
+ </section>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/figure-manual.html b/testing/web-platform/tests/wai-aria/manual/figure-manual.html
new file mode 100644
index 0000000000..d60973527a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/figure-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>figure</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:figure"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "figure"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:figure"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "figure"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "figure"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for figure.</p>
+ <div role="figure" id="test">
+ <img src="foo.jpg" aria-label="fake image"/>
+ <img src="baz.jpg" aria-label="really fake image">
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_false_automatically_propagated-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_false_automatically_propagated-manual.html
new file mode 100644
index 0000000000..d373a3023e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_false_automatically_propagated-manual.html
@@ -0,0 +1,249 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid aria-readonly false automatically propagated</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "TableCell"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "selectionitem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "test1",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ },
+ {
+ "element" : "test2",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 3",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid aria-readonly false automatically propagated"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid aria-readonly false automatically propagated.</p>
+ <div role="grid" aria-readonly="false">
+ <div role="row">
+ <div id="test1" role="columnheader">c1</div>
+ <div role="columnheader">c2</div>
+ </div>
+ <div role="row">
+ <div id="test2" role="rowheader">rh1</div>
+ <div id="test" role="gridcell">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_true_automatically_propagated-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_true_automatically_propagated-manual.html
new file mode 100644
index 0000000000..7b6a22e292
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_aria-readonly_true_automatically_propagated-manual.html
@@ -0,0 +1,249 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid aria-readonly true automatically propagated</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "TableCell"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "SelectionItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "test1",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ },
+ {
+ "element" : "test2",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 3",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid aria-readonly true automatically propagated"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid aria-readonly true automatically propagated.</p>
+ <div role="grid" aria-readonly="true">
+ <div role="row">
+ <div id="test1" role="columnheader">c1</div>
+ <div role="columnheader">c2</div>
+ </div>
+ <div role="row">
+ <div id="test2" role="rowheader">rh1</div>
+ <div id="test" role="gridcell">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_busy_false-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_busy_false-manual.html
new file mode 100644
index 0000000000..48edba5bf7
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_busy_false-manual.html
@@ -0,0 +1,163 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid busy false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Table"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "result",
+ "atk_selection_clear_selection()",
+ "is",
+ "false"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_BUSY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "table"
+ ],
+ [
+ "property",
+ "AXElementBusy",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_BUSY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "result",
+ "AriaProperties.busy",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid busy false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid busy false.</p>
+ <div role="grid" aria-busy="false" id="test">
+ <div role="row">
+ <div role="columnheader">shoes</div>
+ <div role="columnheader">shirts</div>
+ </div>
+ <div role="row">
+ <div role="gridcell">loafers</div>
+ <div role="gridcell">polo</div>
+ </div>
+ <div role="row">
+ <div role="gridcell">laced</div>
+ <div role="gridcell">rugby</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_busy_true-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_busy_true-manual.html
new file mode 100644
index 0000000000..ddcdf0198f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_busy_true-manual.html
@@ -0,0 +1,157 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid busy true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Table"
+ ],
+ [
+ "result",
+ "atk_selection_clear_selection()",
+ "is",
+ "false"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_BUSY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "table"
+ ],
+ [
+ "property",
+ "AXElementBusy",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_BUSY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "result",
+ "AriaProperties.busy",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid busy true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid busy true.</p>
+ <div role="grid" aria-busy="true" id="test">
+ <div role="row">
+ <div role="columnheader">shoes</div>
+ <div role="columnheader">shirts</div>
+ </div>
+ <div role="row">
+ <div role="gridcell">loafers</div>
+ <div role="gridcell">polo</div>
+ </div>
+ <div role="row">
+ <div role="gridcell">laced</div>
+ <div role="gridcell">rugby</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_busy_value_changes-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_busy_value_changes-manual.html
new file mode 100644
index 0000000000..4891198882
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_busy_value_changes-manual.html
@@ -0,0 +1,200 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid busy value changes</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "attribute" : "aria-busy",
+ "element" : "test",
+ "title" : "step 1",
+ "type" : "attribute",
+ "value" : "\"true\""
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:busy"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "1"
+ ],
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Table"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "result",
+ "atk_selection_clear_selection()",
+ "is",
+ "false"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_BUSY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "event",
+ "type",
+ "is",
+ "AXElementBusyChanged"
+ ],
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "table"
+ ],
+ [
+ "property",
+ "AXElementBusy",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_STATECHANGE"
+ ],
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_BUSY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "event",
+ "type",
+ "is",
+ "PropertyChangedEvent"
+ ],
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "result",
+ "AriaProperties.busy",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid busy value changes"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid busy value changes.</p>
+ <div role="grid" aria-busy="false" id="test">
+ <div role="row">
+ <div role="columnheader">shoes</div>
+ <div role="columnheader">shirts</div>
+ </div>
+ <div role="row">
+ <div role="gridcell">loafers</div>
+ <div role="gridcell">polo</div>
+ </div>
+ <div role="row">
+ <div role="gridcell">laced</div>
+ <div role="gridcell">rugby</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_colcount_8-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_colcount_8-manual.html
new file mode 100644
index 0000000000..0f03b12605
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_colcount_8-manual.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid colcount 8</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ],
+ [
+ "result",
+ "atk_table_get_n_columns()",
+ "is",
+ "8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIAColumnCount",
+ "is",
+ "8"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "DataGrid.ColumnCount",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid colcount 8"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid colcount 8.</p>
+ <div role="grid" id="test" aria-colcount="8">
+ <div role="row">
+ <div role="gridcell" aria-colindex="4">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_false-manual.html
new file mode 100644
index 0000000000..bb8dd34a92
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_false-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid columnheader readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid columnheader readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid columnheader readonly false.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="columnheader" aria-readonly="false">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_true-manual.html
new file mode 100644
index 0000000000..a81e4cbdce
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_true-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid columnheader readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid columnheader readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid columnheader readonly true.</p>
+ <div role="grid" >
+ <div role="row">
+ <div id="test" role="columnheader" aria-readonly="true">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..d45d3b9ca7
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_readonly_unspecified-manual.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid columnheader readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid columnheader readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid columnheader readonly unspecified.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="columnheader">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_false-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_false-manual.html
new file mode 100644
index 0000000000..b8f7ae332c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_false-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid columnheader required false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid columnheader required false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid columnheader required false.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="columnheader" aria-required="false">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_true-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_true-manual.html
new file mode 100644
index 0000000000..76155ab905
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_true-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid columnheader required true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid columnheader required true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid columnheader required true.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="columnheader" aria-required="true">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_unspecified-manual.html
new file mode 100644
index 0000000000..491cbed6f2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_columnheader_required_unspecified-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid columnheader required unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_COLUMN_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_COLUMNHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid columnheader required unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid columnheader required unspecified.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="columnheader">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_rowcount_3-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_rowcount_3-manual.html
new file mode 100644
index 0000000000..3079b59b4d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_rowcount_3-manual.html
@@ -0,0 +1,132 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid rowcount 3</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:3"
+ ],
+ [
+ "result",
+ "atk_table_get_n_rows()",
+ "is",
+ "3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIARowCount",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:grid"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:3"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "DataGrid.RowCount",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid rowcount 3"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid rowcount 3.</p>
+ <div role='grid' id='test' aria-rowcount='3' aria-colcount='2'>
+ <div role='row'>
+ <span role='gridcell'>
+ <button>hello</button>
+ </span>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_false-manual.html
new file mode 100644
index 0000000000..883918fd04
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_false-manual.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid rowheader readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid rowheader readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid rowheader readonly false.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="rowheader" aria-readonly="false">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_true-manual.html
new file mode 100644
index 0000000000..5d53c3624c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_true-manual.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid rowheader readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid rowheader readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid rowheader readonly true.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="rowheader" aria-readonly="true">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..f9321cac10
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_readonly_unspecified-manual.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid rowheader readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid rowheader readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid rowheader readonly unspecified.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="rowheader">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_false-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_false-manual.html
new file mode 100644
index 0000000000..4fafba50a9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_false-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid rowheader required false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid rowheader required false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid rowheader required false.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="rowheader" aria-required="false">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_true-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_true-manual.html
new file mode 100644
index 0000000000..0f14d2dea8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_true-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid rowheader required true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid rowheader required true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid rowheader required true.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="rowheader" aria-required="true">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_unspecified-manual.html
new file mode 100644
index 0000000000..208f0c5e56
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/grid_rowheader_required_unspecified-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>grid rowheader required unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "grid rowheader required unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for grid rowheader required unspecified.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="rowheader">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/gridcell_aria-colspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/gridcell_aria-colspan_2_on_div-manual.html
new file mode 100644
index 0000000000..c151087767
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/gridcell_aria-colspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>gridcell aria-colspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "DataItem.ColumnSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "gridcell aria-colspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for gridcell aria-colspan 2 on div.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-colspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/gridcell_aria-rowspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/gridcell_aria-rowspan_2_on_div-manual.html
new file mode 100644
index 0000000000..318709b360
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/gridcell_aria-rowspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>gridcell aria-rowspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "DataItem.RowSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "gridcell aria-rowspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for gridcell aria-rowspan 2 on div.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-rowspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/gridcell_colindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/gridcell_colindex_4-manual.html
new file mode 100644
index 0000000000..6ef4fb3a16
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/gridcell_colindex_4-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>gridcell colindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "column=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIAColumnIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "DataItem.Column",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "gridcell colindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for gridcell colindex 4.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-colindex="4" aria-colcount="8">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/gridcell_rowindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/gridcell_rowindex_4-manual.html
new file mode 100644
index 0000000000..8b9daaa703
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/gridcell_rowindex_4-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>gridcell rowindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "row=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIARowIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "DataItem.Row",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "gridcell rowindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for gridcell rowindex 4.</p>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-rowindex="4">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_not_rendered-manual.html b/testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_not_rendered-manual.html
new file mode 100644
index 0000000000..ef947859db
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_not_rendered-manual.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<html>
+ <head>
+ <title>group hidden undefined element not rendered</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "group hidden undefined element not rendered"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for group hidden undefined element not rendered.</p>
+ <div role="group" id="test" style="display:none">
+ Some invisible group content
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_rendered-manual.html b/testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_rendered-manual.html
new file mode 100644
index 0000000000..92c067c216
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/group_hidden_undefined_element_rendered-manual.html
@@ -0,0 +1,116 @@
+<!doctype html>
+<html>
+ <head>
+ <title>group hidden undefined element rendered</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "hidden"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXApplicationGroup"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "group"
+ ],
+ [
+ "property",
+ "hidden",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "hidden:false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "AriaProperties.hidden",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "group hidden undefined element rendered"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for group hidden undefined element rendered.</p>
+ <div role="group" id="test">
+ Some group content
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/heading_level_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/heading_level_unspecified-manual.html
new file mode 100644
index 0000000000..819bc7b60c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/heading_level_unspecified-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>heading level unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_HEADING"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "level:2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXHeading"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "heading"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_HEADING"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "level:2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:heading"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Text"
+ ],
+ [
+ "property",
+ "StyleId_Heading",
+ "is",
+ "2"
+ ],
+ [
+ "property",
+ "AriaProperties.level",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "heading level unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for heading level unspecified.</p>
+ <div role="heading" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/keyshortcuts_multiple_shortcuts-manual.html b/testing/web-platform/tests/wai-aria/manual/keyshortcuts_multiple_shortcuts-manual.html
new file mode 100644
index 0000000000..ce4074a4f2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/keyshortcuts_multiple_shortcuts-manual.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+ <head>
+ <title>keyshortcuts multiple shortcuts</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "keyshortcuts:Shift+Space Alt+Space"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "accKeyboardShortcut",
+ "is",
+ "Shift+Space Alt+Space"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "AcceleratorKey",
+ "is",
+ "Shift+Space Alt+Space"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "keyshortcuts multiple shortcuts"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for keyshortcuts multiple shortcuts.</p>
+ <body>
+ <div id="test" tabindex="0" role="button" aria-keyshortcuts="Shift+Space Alt+Space">Submit</h1>
+ </body>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/keyshortcuts_one_shortcut-manual.html b/testing/web-platform/tests/wai-aria/manual/keyshortcuts_one_shortcut-manual.html
new file mode 100644
index 0000000000..d0238dbf20
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/keyshortcuts_one_shortcut-manual.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+ <head>
+ <title>keyshortcuts one shortcut</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PUSH_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "keyshortcuts:Shift+Space"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PUSHBUTTON"
+ ],
+ [
+ "property",
+ "accKeyboardShortcut",
+ "is",
+ "Shift+Space"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "AcceleratorKey",
+ "is",
+ "Shift+Space"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "keyshortcuts one shortcut"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for keyshortcuts one shortcut.</p>
+ <body>
+ <div id="test" tabindex="0" role="button" aria-keyshortcuts="Shift+Space">Submit</h1>
+ </body>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_busy_false-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_busy_false-manual.html
new file mode 100644
index 0000000000..9f6b8b36a8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_busy_false-manual.html
@@ -0,0 +1,121 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox busy false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "result",
+ "atk_selection_clear_selection()",
+ "is",
+ "false"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_BUSY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "property",
+ "AXElementBusy",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTBOX"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_BUSY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "result",
+ "AriaProperties.busy",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox busy false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox busy false.</p>
+ <ul role="listbox" aria-busy="false" id="test">
+ <li role="option">option 1</li>
+ <li role="option">option 2</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_busy_true-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_busy_true-manual.html
new file mode 100644
index 0000000000..c8388f7add
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_busy_true-manual.html
@@ -0,0 +1,109 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox busy true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_BUSY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "property",
+ "AXElementBusy",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTBOX"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_BUSY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "result",
+ "AriaProperties.busy",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox busy true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox busy true.</p>
+ <ul role="listbox" aria-busy="true" id="test">
+ <li role="option">option 1</li>
+ <li role="option">option 2</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..c718a54eaf
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_orientation_horizontal-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXsubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox orientation horizontal.</p>
+ <div id="test" aria-orientation="horizontal" tabindex="0" role="listbox" >
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..7dd2762d6d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_orientation_unspecified-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox orientation unspecified.</p>
+ <div id="test" tabindex="0" role="listbox" >
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_orientation_vertical-manual.html
new file mode 100644
index 0000000000..8bcca037d3
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_orientation_vertical-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox orientation vertical.</p>
+ <div id="test" aria-orientation="vertical" tabindex="0" role="listbox" >
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_readonly_false-manual.html
new file mode 100644
index 0000000000..b3bde923a4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_readonly_false-manual.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox readonly false.</p>
+ <div id="test" aria-readonly="false" role="listbox">
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+ <div role="option">option 3</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_readonly_true-manual.html
new file mode 100644
index 0000000000..30213919e4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_readonly_true-manual.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox readonly true.</p>
+ <div id="test" aria-readonly="true" role="listbox">
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+ <div role="option">option 3</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listbox_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/listbox_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..9283ad2404
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listbox_readonly_unspecified-manual.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listbox readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_BOX"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXList"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "list"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listbox readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listbox readonly unspecified.</p>
+ <div id="test" role="listbox">
+ <div role="option">option 1</div>
+ <div role="option">option 2</div>
+ <div role="option">option 3</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/listitem_setsize_-1-manual.html b/testing/web-platform/tests/wai-aria/manual/listitem_setsize_-1-manual.html
new file mode 100644
index 0000000000..7537a4bcd7
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/listitem_setsize_-1-manual.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html>
+ <head>
+ <title>listitem setsize -1</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_EDITABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:-1"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "group"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "-1"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:-1"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:-1"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ListItem"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "-1"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "SelectionItem"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "listitem setsize -1"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for listitem setsize -1.</p>
+ <div role="list">
+ <div id="test" role="listitem" aria-setsize="-1">test cell</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menu_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/menu_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..184c42052e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menu_orientation_horizontal-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menu orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenu"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Menu"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menu orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menu orientation horizontal.</p>
+ <ul id="test" role="menu" aria-orientation="horizontal">
+ <li role="menuitem">File</file>
+ <li role="menuitem">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menu_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/menu_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..07e8e691b9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menu_orientation_unspecified-manual.html
@@ -0,0 +1,122 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menu orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenu"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Menu"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menu orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menu orientation unspecified.</p>
+ <div id="test" tabindex="0" role="menu" >
+ <div role="menuitem">option 1</div>
+ <div role="menuitem">option 2</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menu_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/menu_orientation_vertical-manual.html
new file mode 100644
index 0000000000..10a65e997d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menu_orientation_vertical-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menu orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenu"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUPOPUP"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUPOPUP"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Menu"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menu orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menu orientation vertical.</p>
+ <ul id="test" role="menu" aria-orientation="vertical">
+ <li role="menuitem">File</file>
+ <li role="menuitem">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menubar_busy_false-manual.html b/testing/web-platform/tests/wai-aria/manual/menubar_busy_false-manual.html
new file mode 100644
index 0000000000..8224d79b87
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menubar_busy_false-manual.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menubar busy false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU_BAR"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:menubar"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_BUSY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu bar"
+ ],
+ [
+ "property",
+ "AXElementBusy",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:menubar"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUBAR"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_BUSY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuBar"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "property",
+ "AriaProperties.busy",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menubar busy false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menubar busy false.</p>
+ <div role="menubar" aria-busy="false" id="test">
+ <div role="menuitem">File</div>
+ <div role="menuitem">Edit</div>
+ <div role="menuitem">View</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menubar_busy_true-manual.html b/testing/web-platform/tests/wai-aria/manual/menubar_busy_true-manual.html
new file mode 100644
index 0000000000..b1695dcef4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menubar_busy_true-manual.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menubar busy true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU_BAR"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:menubar"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_BUSY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu bar"
+ ],
+ [
+ "property",
+ "AXElementBusy",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:menubar"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUBAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_BUSY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuBar"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "result",
+ "AriaProperties.busy",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menubar busy true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menubar busy true.</p>
+ <div role="menubar" aria-busy="true" id="test">
+ <div role="menuitem">File</div>
+ <div role="menuitem">Edit</div>
+ <div role="menuitem">View</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menubar_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/menubar_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..e47a68e81a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menubar_orientation_horizontal-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menubar orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU_BAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu bar"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUBAR"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuBar"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menubar orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menubar orientation horizontal.</p>
+ <ul id="test" role="menubar" aria-orientation="horizontal">
+ <li role="menuitem">File</file>
+ <li role="menuitem">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menubar_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/menubar_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..0e945ae26f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menubar_orientation_unspecified-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menubar orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU_BAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu bar"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUBAR"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuBar"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menubar orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menubar orientation unspecified.</p>
+ <ul id="test" role="menubar">
+ <li role="menuitem">File</file>
+ <li role="menuitem">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menubar_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/menubar_orientation_vertical-manual.html
new file mode 100644
index 0000000000..c0830abc7f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menubar_orientation_vertical-manual.html
@@ -0,0 +1,111 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menubar orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU_BAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu bar"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuBar"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menubar orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menubar orientation vertical.</p>
+ <ul id="test" role="menubar" aria-orientation="vertical">
+ <li role="menuitem">File</file>
+ <li role="menuitem">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitem_expanded_false-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitem_expanded_false-manual.html
new file mode 100644
index 0000000000..7e5ca5485b
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitem_expanded_false-manual.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-expanded=false on a menuitem</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_EXPANDED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "NO"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_COLLAPSED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Collapsed"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-expanded=false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-expanded=false on a menuitem.</p>
+ <div role='menu'>
+ <div role='menuitem' id='test' aria-expanded='false'>item 1</div>
+ <div role='menuitem'>item 2</div>
+ </div>
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitem_expanded_true-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitem_expanded_true-manual.html
new file mode 100644
index 0000000000..a9d9b5df35
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitem_expanded_true-manual.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-expanded=true on a menuitem</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "YES"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-expanded=true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-expanded=true on a menuitem.</p>
+ <div role='menu'>
+ <div role='menuitem' id='test' aria-expanded='true'>item 1</div>
+ <div role='menu'>
+ <div role='menuitem'>subitem 1</div>
+ <div role='menuitem'>subitem 2</div>
+ </div>
+ <div role='menuitem'>item 2</div>
+ </div>
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitem_posinset_and_setsize-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitem_posinset_and_setsize-manual.html
new file mode 100644
index 0000000000..ac0ec8871d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitem_posinset_and_setsize-manual.html
@@ -0,0 +1,148 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitem posinset and setsize</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_MENU_ITEM"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "property",
+ "AXARIAPosInSet",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "8"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "positionInGroup:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_MENUITEM"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "AriaProperties.posinset",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitem posinset and setsize"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitem posinset and setsize.</p>
+ <ul role='menu'>Menu
+ <li role='menuitem'> option 1</li>
+ <li role='menuitem' id='test' aria-posinset='4' aria-setsize='8'> option 2</li>
+ <li role='menuitem'> option 3</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_false-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_false-manual.html
new file mode 100644
index 0000000000..e05ea1af71
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_false-manual.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-expanded=false on a menuitemcheckbox</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_EXPANDED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "NO"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_COLLAPSED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Collapsed"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-expanded=false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-expanded=false on a menuitemcheckbox.</p>
+ <div role='menu'>
+ <div role='menuitemcheckbox' id='test' aria-expanded='false'>item 1</div>
+ <div role='menuitem'>item 2</div>
+ </div>
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_true-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_true-manual.html
new file mode 100644
index 0000000000..b2ac5db68f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_expanded_true-manual.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-expanded=true on a menuitemcheckbox</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "YES"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-expanded=true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-expanded=true on a menuitemcheckbox.</p>
+ <div role='menu'>
+ <div role='menuitemcheckbox' id='test' aria-expanded='true'>item 1</div>
+ <div role='menu'>
+ <div role='menuitem'>subitem 1</div>
+ <div role='menuitem'>subitem 2</div>
+ </div>
+ <div role='menuitem'>item 2</div>
+ </div>
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_posinset_and_setsize-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_posinset_and_setsize-manual.html
new file mode 100644
index 0000000000..cf867c1cf9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_posinset_and_setsize-manual.html
@@ -0,0 +1,185 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemcheckbox posinset and setsize</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKED"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "1"
+ ],
+ [
+ "property",
+ "AXARIAPosInSet",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "8"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "positionInGroup:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_MENUITEM, ROLE_SYSTEM_CHECKBUTTON]"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "Toggle.ToggleState",
+ "is",
+ "On"
+ ],
+ [
+ "property",
+ "AriaProperties.posinset",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemcheckbox posinset and setsize"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemcheckbox posinset and setsize.</p>
+ <ul role='menu'>Menu
+ <li role='menuitem'> option 1</li>
+ <li role='menuitemcheckbox' id='test' aria-posinset='4' aria-setsize='8'
+ class='ckbox' aria-checked='true'>panda doodles</li>
+ <li role='menuitem'> option 3</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_false-manual.html
new file mode 100644
index 0000000000..59f12ed0fc
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_false-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemcheckbox readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_MENUITEM]"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemcheckbox readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemcheckbox readonly false.</p>
+ <div role="menu">
+ <div role="menuitemcheckbox" aria-readonly="false" id="test">option 1</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_true-manual.html
new file mode 100644
index 0000000000..faa9703fda
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_true-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemcheckbox readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_MENUITEM]"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemcheckbox readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemcheckbox readonly true.</p>
+ <div role="menu">
+ <div role="menuitemcheckbox" aria-readonly="true" id="test">option 1</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..d9b5dc2980
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemcheckbox_readonly_unspecified-manual.html
@@ -0,0 +1,122 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemcheckbox readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_CHECK_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_MENUITEM]"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemcheckbox readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemcheckbox readonly unspecified.</p>
+ <div role="menu">
+ <div role="menuitemcheckbox" id="test">option 1</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_false-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_false-manual.html
new file mode 100644
index 0000000000..52c599d90e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_false-manual.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-expanded=false on a menuitemradio</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_EXPANDED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "NO"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_COLLAPSED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Collapsed"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-expanded=false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-expanded=false on a menuitemradio.</p>
+ <div role='menu'>
+ <div role='menuitemradio' id='test' aria-expanded='false'>item 1</div>
+ <div role='menuitem'>item 2</div>
+ </div>
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_true-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_true-manual.html
new file mode 100644
index 0000000000..601879885f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemradio_expanded_true-manual.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+ <head>
+ <title>aria-expanded=true on a menuitemradio</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_EXPANDED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXExpanded",
+ "is",
+ "YES"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_EXPANDED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ExpandCollapse.ExpandCollapseState",
+ "is",
+ "Expanded"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "aria-expanded=true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for aria-expanded=true on a menuitemradio.</p>
+ <div role='menu'>
+ <div role='menuitemradio' id='test' aria-expanded='true'>item 1</div>
+ <div role='menu'>
+ <div role='menuitem'>subitem 1</div>
+ <div role='menuitem'>subitem 2</div>
+ </div>
+ <div role='menuitem'>item 2</div>
+ </div>
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemradio_posinset_and_setsize-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemradio_posinset_and_setsize-manual.html
new file mode 100644
index 0000000000..d512e95ddd
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemradio_posinset_and_setsize-manual.html
@@ -0,0 +1,196 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemradio posinset and setsize</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXARIAPosInSet",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "8"
+ ],
+ [
+ "property",
+ "AXMenuItemMarkChar",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:4"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:8"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "positionInGroup:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_RADIOBUTTON, ROLE_SYSTEM_MENUITEM]"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "SelectionItem"
+ ],
+ [
+ "property",
+ "Toggle.ToggleState",
+ "is",
+ "Off"
+ ],
+ [
+ "property",
+ "AriaProperties.posinset",
+ "is",
+ "4"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemradio posinset and setsize"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemradio posinset and setsize.</p>
+ <ul role='menu'>Menu
+ <li role='menuitemradio'> option 1</li>
+ <li role='menuitemradio' id='test' aria-posinset='4' aria-setsize='8'>panda doodles</li>
+ <li role='menuitemradio'> option 3</li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_false-manual.html
new file mode 100644
index 0000000000..164bde7ae1
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_false-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemradio readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_RADIOBUTTON, ROLE_SYSTEM_MENUITEM]"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "SelectionItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemradio readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemradio readonly false.</p>
+ <div role="menu">
+ <div role="menuitemradio" aria-readonly="false" id="test">option 1</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_true-manual.html
new file mode 100644
index 0000000000..70690f372c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_true-manual.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemradio readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_RADIOBUTTON, ROLE_SYSTEM_MENUITEM]"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "SelectionItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemradio readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemradio readonly true.</p>
+ <div role="menu">
+ <div role="menuitemradio" aria-readonly="true" id="test">option 1</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..a4257c439f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/menuitemradio_readonly_unspecified-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>menuitemradio readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXMenuItem"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "menu item"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_RADIO_MENU_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "isAny",
+ "[ROLE_SYSTEM_RADIOBUTTON, ROLE_SYSTEM_MENUITEM]"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "MenuItem"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "SelectionItem"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "menuitemradio readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for menuitemradio readonly unspecified.</p>
+ <div role="menu">
+ <div role="menuitemradio" id="test">option 1</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/none-manual.html b/testing/web-platform/tests/wai-aria/manual/none-manual.html
new file mode 100644
index 0000000000..ded346faa6
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/none-manual.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+ <head>
+ <title>none</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "accessible",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "none"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for none.</p>
+ <img id='test' role='none' src="foo.jpg" alt="footest"/>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/option_selected_false-manual.html b/testing/web-platform/tests/wai-aria/manual/option_selected_false-manual.html
new file mode 100644
index 0000000000..02b1ec8293
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/option_selected_false-manual.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<html>
+ <head>
+ <title>option selected false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXStaticText"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "text"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ListItem"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Invoke"
+ ],
+ [
+ "property",
+ "ControlPatterns",
+ "doesNotContain",
+ "SelectionItem"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "option selected false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for option selected false.</p>
+ <div role="listbox">
+ <div role="option" aria-selected="false" id="test">
+ Fish
+ </div>
+ <div role="option">
+ beef
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/option_selected_true-manual.html b/testing/web-platform/tests/wai-aria/manual/option_selected_true-manual.html
new file mode 100644
index 0000000000..8bb7dd7ef5
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/option_selected_true-manual.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<html>
+ <head>
+ <title>option selected true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXStaticText"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "text"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ListItem"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Invoke"
+ ],
+ [
+ "property",
+ "SelectionItem.IsSelected",
+ "Is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "option selected true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for option selected true.</p>
+ <div role="listbox">
+ <div role="option" aria-selected="true" id="test">
+ Fish
+ </div>
+ <div role="option">
+ beef
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/option_selected_undefined-manual.html b/testing/web-platform/tests/wai-aria/manual/option_selected_undefined-manual.html
new file mode 100644
index 0000000000..5930de9a48
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/option_selected_undefined-manual.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<html>
+ <head>
+ <title>option selected undefined</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LIST_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXStaticText"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "text"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_LISTITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ListItem"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Invoke"
+ ],
+ [
+ "property",
+ "ControlPatterns",
+ "doesNotContain",
+ "SelectionItem"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "option selected undefined"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for option selected undefined.</p>
+ <div role="listbox">
+ <div role="option" id="test">
+ Fish
+ </div>
+ <div role="option">
+ beef
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/option_selected_value_changes-manual.html b/testing/web-platform/tests/wai-aria/manual/option_selected_value_changes-manual.html
new file mode 100644
index 0000000000..2c02a8707d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/option_selected_value_changes-manual.html
@@ -0,0 +1,146 @@
+<!doctype html>
+<html>
+ <head>
+ <title>option selected value changes</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "attribute" : "aria-activedescendant",
+ "element" : "test1",
+ "title" : "step 1",
+ "type" : "attribute",
+ "value" : "\"test\" "
+ },
+ {
+ "attribute" : "aria-selected",
+ "element" : "test",
+ "title" : "step 2",
+ "type" : "attribute",
+ "value" : "\"true\""
+ },
+ {
+ "attribute" : "aria-selected",
+ "element" : "test2",
+ "title" : "step 3",
+ "type" : "attribute",
+ "value" : "\"false\""
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:selected"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "1"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_SELECTION"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_STATECHANGE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "event",
+ "type",
+ "is",
+ "UIA_SelectionItem_ElementSelectedEventId"
+ ]
+ ]
+ },
+ "title" : "step 4",
+ "type" : "test"
+ },
+ {
+ "element" : "test1",
+ "test" : {
+ "ATK" : [
+ [
+ "event",
+ "type",
+ "is",
+ "object:selection-changed"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "event",
+ "type",
+ "is",
+ "AXSelectedChildrenChanged"
+ ]
+ ]
+ },
+ "title" : "step 5",
+ "type" : "test"
+ },
+ {
+ "element" : "test2",
+ "test" : {
+ "ATK" : [
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:selected"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "0"
+ ]
+ ]
+ },
+ "title" : "step 6",
+ "type" : "test"
+ }
+ ],
+ "title" : "option selected value changes"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for option selected value changes.</p>
+ <div id="test1" aria-activedescendant="test2" role="listbox">
+ <div role="option" aria-selected="false" id="test">
+ Fish
+ </div>
+ <div id="test2" aria-selected="true" role="option">
+ beef
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..4943335cf2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_horizontal-manual.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>radiogroup orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRadioGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "radio group"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "radiogroup orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for radiogroup orientation horizontal.</p>
+ <ul id="test" role="radiogroup" aria-orientation="horizontal">
+ <li role="radio">File</file>
+ <li role="radio">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..40ceab71ca
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_unspecified-manual.html
@@ -0,0 +1,135 @@
+<!doctype html>
+<html>
+ <head>
+ <title>radiogroup orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRadioGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "radio group"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXUnknownOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "isNot",
+ "vertical"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "isNot",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "radiogroup orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for radiogroup orientation unspecified.</p>
+ <ul id="test" role="radiogroup">
+ <li role="radio">File</file>
+ <li role="radio">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_vertical-manual.html
new file mode 100644
index 0000000000..def4543652
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/radiogroup_orientation_vertical-manual.html
@@ -0,0 +1,111 @@
+<!doctype html>
+<html>
+ <head>
+ <title>radiogroup orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRadioGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "radio group"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "radiogroup orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for radiogroup orientation vertical.</p>
+ <ul id="test" role="radiogroup" aria-orientation="vertical">
+ <li role="radio">File</file>
+ <li role="radio">Edit</file>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_false-manual.html
new file mode 100644
index 0000000000..102f51757b
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_false-manual.html
@@ -0,0 +1,115 @@
+<!doctype html>
+<html>
+ <head>
+ <title>radiogroup readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRadioGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "radio group"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "radiogroup readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for radiogroup readonly false.</p>
+ <div id="test" role="radiogroup" aria-readonly="false">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_true-manual.html
new file mode 100644
index 0000000000..0c97e24a8b
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_true-manual.html
@@ -0,0 +1,115 @@
+<!doctype html>
+<html>
+ <head>
+ <title>radiogroup readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRadioGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "radio group"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "radiogroup readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for radiogroup readonly true.</p>
+ <div id="test" role="radiogroup" aria-readonly="true">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..6e8c641ac7
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/radiogroup_readonly_unspecified-manual.html
@@ -0,0 +1,115 @@
+<!doctype html>
+<html>
+ <head>
+ <title>radiogroup readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PANEL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRadioGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "radio group"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "List"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "radiogroup readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for radiogroup readonly unspecified.</p>
+ <div id="test" role="radiogroup">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/region_with_name-manual.html b/testing/web-platform/tests/wai-aria/manual/region_with_name-manual.html
new file mode 100644
index 0000000000..ba868a77b2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/region_with_name-manual.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<html>
+ <head>
+ <title>region with name</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_LANDMARK"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:region"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXLandmarkRegion"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "region"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:region"
+ ],
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_LANDMARK"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "Control Group",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "localizedControlType",
+ "is",
+ "region"
+ ],
+ [
+ "property",
+ "landmarkType",
+ "is",
+ "Custom"
+ ],
+ [
+ "property",
+ "localizedLandmarkType",
+ "is",
+ "region"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "region with name"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for region with name.</p>
+ <section role="region" aria-label="foobar" id="test">
+ <article>This is article 1</article>
+ </section>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/region_without_name-manual.html b/testing/web-platform/tests/wai-aria/manual/region_without_name-manual.html
new file mode 100644
index 0000000000..84ea6658e7
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/region_without_name-manual.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html>
+ <head>
+ <title>region without name</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SECTION"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Text"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Hypertext"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "group"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleText2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleHypertext2"
+ ],
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_SECTION"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "Control Group",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "landmarkType",
+ "isNot",
+ "Custom"
+ ],
+ [
+ "property",
+ "localizedLandmarkType",
+ "isNot",
+ "region"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "region without name"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for region without name.</p>
+ <div role="region" id="test" tabindex="-1">
+ <article>This is article 1</article>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/row_colindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/row_colindex_4-manual.html
new file mode 100644
index 0000000000..82ee257d9e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/row_colindex_4-manual.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html>
+ <head>
+ <title>row colindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_ROW"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRow"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROW"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROW"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "Column",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "cell",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "column=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIAColumnIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "Column",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "row colindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for row colindex 4.</p>
+ <div role="table">
+ <div id="test" role="row" aria-colindex="4">
+ <div id="cell" role="cell">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/row_rowindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/row_rowindex_4-manual.html
new file mode 100644
index 0000000000..1333219e04
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/row_rowindex_4-manual.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html>
+ <head>
+ <title>row rowindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_ROW"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRow"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROW"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROW"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "DataItem.Row",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ },
+ {
+ "element" : "cell",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "row=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIARowIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "Row",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "row rowindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for row rowindex 4.</p>
+ <div role="table">
+ <div id="test" role="row" aria-rowindex="4">
+ <div id="cell" role="cell">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/rowheader_aria-colspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/rowheader_aria-colspan_2_on_div-manual.html
new file mode 100644
index 0000000000..3d82888959
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/rowheader_aria-colspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>rowheader aria-colspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "column_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXColumnIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.ColumnSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "rowheader aria-colspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for rowheader aria-colspan 2 on div.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="rowheader" aria-colspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/rowheader_aria-rowspan_2_on_div-manual.html b/testing/web-platform/tests/wai-aria/manual/rowheader_aria-rowspan_2_on_div-manual.html
new file mode 100644
index 0000000000..4ddf4f5c9a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/rowheader_aria-rowspan_2_on_div-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>rowheader aria-rowspan 2 on div</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_row_column_span()",
+ "contains",
+ "row_span=2"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXRowIndexRange.length",
+ "is",
+ "2"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowspan:2"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.RowSpan",
+ "is",
+ "2"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "rowheader aria-rowspan 2 on div"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for rowheader aria-rowspan 2 on div.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="rowheader" aria-rowspan="2">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/rowheader_colindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/rowheader_colindex_4-manual.html
new file mode 100644
index 0000000000..8b1eb477e4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/rowheader_colindex_4-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>rowheader colindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "column=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIAColumnIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTableCell"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "Column",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "rowheader colindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for rowheader colindex 4.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="rowheader" aria-colindex="4" aria-colcount="8">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/rowheader_rowindex_4-manual.html b/testing/web-platform/tests/wai-aria/manual/rowheader_rowindex_4-manual.html
new file mode 100644
index 0000000000..716403cfeb
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/rowheader_rowindex_4-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>rowheader rowindex 4</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ROW_HEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ],
+ [
+ "result",
+ "atk_table_cell_get_position()",
+ "contains",
+ "row=3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXARIARowIndex",
+ "is",
+ "4"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowindex:4"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_ROWHEADER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "HeaderItem"
+ ],
+ [
+ "property",
+ "HeaderItem.Row",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "rowheader rowindex 4"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for rowheader rowindex 4.</p>
+ <div role="table">
+ <div role="row">
+ <div id="test" role="rowheader" aria-rowindex="4">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/rowheader_selected_false_not_automatically_propagated-manual.html b/testing/web-platform/tests/wai-aria/manual/rowheader_selected_false_not_automatically_propagated-manual.html
new file mode 100644
index 0000000000..7cd9a55990
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/rowheader_selected_false_not_automatically_propagated-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>rowheader selected false not automatically propagated</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "cell"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "SelectionItem.IsSelected",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "SelectionItem.selectionContainer",
+ "is",
+ "test1"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "rowheader selected false not automatically propagated"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for rowheader selected false not automatically propagated.</p>
+ <div id="test1" role="grid">
+ <div role="row">
+ <div role="columnheader">C1</div>
+ <div role="columnheader">C2</div>
+ </div>
+ <div role="row">
+ <div aria-selected="false" role="rowheader">A1</div>
+ <div id="test" aria-selected="true" role="gridcell">A2</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/rowheader_selected_true_not_automatically_propagated-manual.html b/testing/web-platform/tests/wai-aria/manual/rowheader_selected_true_not_automatically_propagated-manual.html
new file mode 100644
index 0000000000..51b2b68fee
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/rowheader_selected_true_not_automatically_propagated-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>rowheader selected true not automatically propagated</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCell"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "cell"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_CELL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataItem"
+ ],
+ [
+ "property",
+ "SelectionItem.IsSelected",
+ "is",
+ "false"
+ ],
+ [
+ "property",
+ "SelectionItem.selectionContainer",
+ "is",
+ "test1"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "rowheader selected true not automatically propagated"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for rowheader selected true not automatically propagated.</p>
+ <div id="test1" role="grid">
+ <div role="row">
+ <div role="columnheader">C1</div>
+ <div role="columnheader">C2</div>
+ </div>
+ <div role="row">
+ <div role="rowheader" aria-selected="true">A1</div>
+ <div id="test" role="gridcell">A2</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/scrollbar_all_values_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/scrollbar_all_values_unspecified-manual.html
new file mode 100644
index 0000000000..910fe2b118
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/scrollbar_all_values_unspecified-manual.html
@@ -0,0 +1,182 @@
+<!doctype html>
+<html>
+ <head>
+ <title>scrollbar all values unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SCROLL_BAR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "100"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXScrollBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "scroll bar"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "100"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SCROLLBAR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "100"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SCROLLBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "scrollbar"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "100"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "scrollbar all values unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for scrollbar all values unspecified.</p>
+ <div role="scrollbar" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/scrollbar_only_valuenow_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/scrollbar_only_valuenow_unspecified-manual.html
new file mode 100644
index 0000000000..73e3158176
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/scrollbar_only_valuenow_unspecified-manual.html
@@ -0,0 +1,182 @@
+<!doctype html>
+<html>
+ <head>
+ <title>scrollbar only valuenow unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SCROLL_BAR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "20"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "40"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXScrollBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "scroll bar"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "20"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "40"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SCROLLBAR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "20"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "40"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SCROLLBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ScrollBar"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "20"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "40"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "scrollbar only valuenow unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for scrollbar only valuenow unspecified.</p>
+ <div role="scrollbar" aria-valuemin="0" aria-valuemax="40" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/scrollbar_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/scrollbar_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..32791ae1d8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/scrollbar_orientation_unspecified-manual.html
@@ -0,0 +1,132 @@
+<!doctype html>
+<html>
+ <head>
+ <title>scrollbar orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SCROLL_BAR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXScrollBar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "scroll bar"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SCROLLBAR"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SCROLLBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ScrollBar"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "vertical"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "RangeValue"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "scrollbar orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for scrollbar orientation unspecified.</p>
+ <div role="scrollbar" id="test"></div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox-manual.html
new file mode 100644
index 0000000000..979bd0fad4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:searchbox"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:searchbox"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox.</p>
+ <div id='test' role='searchbox' contenteditable='true'></div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant-manual.html
new file mode 100644
index 0000000000..a72cf93263
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant-manual.html
@@ -0,0 +1,222 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox activedescendant</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "event" : "focus",
+ "title" : "step 1",
+ "type" : "event"
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ },
+ {
+ "element" : "bob",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "true"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXFocused)",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 3",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox activedescendant"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox activedescendant.</p>
+ <div id='test' tabindex="0" aria-activedescendant="bob" role='searchbox'>
+ <div id='bob' role='group'>Hello world</div>
+ </div>
+ then role:searchbox, aria-activedescendant: bob
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant_value_changes-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant_value_changes-manual.html
new file mode 100644
index 0000000000..956f931ae8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_activedescendant_value_changes-manual.html
@@ -0,0 +1,271 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox activedescendant value changes</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "event" : "focus",
+ "title" : "step 1",
+ "type" : "event"
+ },
+ {
+ "attribute" : "aria-activedescendant",
+ "element" : "test",
+ "title" : "step 2",
+ "type" : "attribute",
+ "value" : "\"bob\""
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "false"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXFocused)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_FOCUS"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 3",
+ "type" : "test"
+ },
+ {
+ "element" : "bob",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_FOCUSABLE"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:focused"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "1"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXFocused",
+ "is",
+ "true"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXFocused)",
+ "is",
+ "true"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "AXFocusedUIElementChanged"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_FOCUSABLE"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_FOCUS"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "IUIAutomationElement.UIA_IsKeyboardFocusablePropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "property",
+ "IUIAutomationElement.UIA_HasKeyboardFocusPropertyId",
+ "is",
+ "true"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "UIA_AutomationFocusChangedEventId"
+ ]
+ ]
+ },
+ "title" : "step 4",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox activedescendant value changes"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox activedescendant value changes.</p>
+ <div id='test' tabindex="0" role='searchbox'>
+ <div id='bob' role='group'>Hello world</div>
+ </div>
+ then role:searchbox, aria-activedescendant: bob
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_both-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_both-manual.html
new file mode 100644
index 0000000000..ea8b698679
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_both-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox autocomplete both</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:both"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SUPPORTS_AUTOCOMPLETION"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:both"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "both"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox autocomplete both"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox autocomplete both.</p>
+ <div id="test" role="searchbox" aria-autocomplete="both"></div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_inline-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_inline-manual.html
new file mode 100644
index 0000000000..77e707666c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_inline-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox autocomplete inline</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:inline"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SUPPORTS_AUTOCOMPLETION"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:inline"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "inline"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox autocomplete inline"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox autocomplete inline.</p>
+ <div id="test" role="searchbox" aria-autocomplete="inline"></div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_list-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_list-manual.html
new file mode 100644
index 0000000000..0ce8068ea9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_list-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox autocomplete list</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:list"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SUPPORTS_AUTOCOMPLETION"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:list"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "list"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox autocomplete list"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox autocomplete list.</p>
+ <div id="test" role="searchbox" aria-autocomplete="list"></div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_none-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_none-manual.html
new file mode 100644
index 0000000000..341d75c532
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_none-manual.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox autocomplete none</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:none"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SUPPORTS_AUTOCOMPLETION"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:none"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "none"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox autocomplete none"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox autocomplete none.</p>
+ <div id="test" role="searchbox" aria-autocomplete="none"></div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_unspecified-manual.html
new file mode 100644
index 0000000000..59becae655
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_autocomplete_unspecified-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox autocomplete unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SUPPORTS_AUTOCOMPLETION"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ "<nil>"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "autocomplete:none"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "autocomplete",
+ "is",
+ ""
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox autocomplete unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox autocomplete unspecified.</p>
+ <div id="test" role="searchbox"></div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_false-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_false-manual.html
new file mode 100644
index 0000000000..8f49eb61e9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_false-manual.html
@@ -0,0 +1,126 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox multiline false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_MULTI_LINE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox multiline false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox multiline false.</p>
+ <div id='test' role='searchbox' contenteditable='true' aria-multiline='false'></div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_true-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_true-manual.html
new file mode 100644
index 0000000000..47e6c3aaa9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_true-manual.html
@@ -0,0 +1,138 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox multiline true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_MULTI_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_MULTI_LINE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "AriaProperties.multiline",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox multiline true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox multiline true.</p>
+ <div id='test' role='searchbox' contenteditable='true' aria-multiline='true'></div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_unspecified-manual.html
new file mode 100644
index 0000000000..5c1d7f5185
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_multiline_unspecified-manual.html
@@ -0,0 +1,108 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox multiline unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:search"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox multiline unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox multiline unspecified.</p>
+ <div id='test' role='searchbox' contenteditable='true'></div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_placeholder-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_placeholder-manual.html
new file mode 100644
index 0000000000..da513456d2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_placeholder-manual.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox placeholder</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "placeholder-text:DD/MM/YYYY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "property",
+ "AXPlaceholderValue",
+ "is",
+ "DD/MM/YYYY"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "placeholder-text:DD/MM/YYYY"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "result",
+ "AriaProperties.placeholder",
+ "is",
+ "DD/MM/YYYY"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox placeholder"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox placeholder.</p>
+ <div contenteditable="true" role="searchbox" aria-placeholder="DD/MM/YYYY" id="test">
+ "DD/MM/YYYY"
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_false-manual.html
new file mode 100644
index 0000000000..574666a017
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_false-manual.html
@@ -0,0 +1,139 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox readonly false.</p>
+ <div id="test" role="searchbox" aria-readonly="false">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_true-manual.html
new file mode 100644
index 0000000000..833f1bc428
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_true-manual.html
@@ -0,0 +1,139 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "doesNotContain",
+ "EditableText"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox readonly true.</p>
+ <div id="test" role="searchbox" aria-readonly="true">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..51b9893595
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_readonly_unspecified-manual.html
@@ -0,0 +1,139 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "search text field"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox readonly unspecified.</p>
+ <div id="test" role="searchbox">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_required_false-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_required_false-manual.html
new file mode 100644
index 0000000000..1bfc895356
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_required_false-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox required false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox required false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox required false.</p>
+ <div id="test" role="searchbox" aria-required="false">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_required_true-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_required_true-manual.html
new file mode 100644
index 0000000000..7e26e5ab03
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_required_true-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox required true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox required true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox required true.</p>
+ <div id="test" role="searchbox" aria-required="true">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/searchbox_required_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/searchbox_required_unspecified-manual.html
new file mode 100644
index 0000000000..13489ad13a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/searchbox_required_unspecified-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>searchbox required unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_REQUIRED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSearchField"
+ ],
+ [
+ "property",
+ "AXRequired",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "text-input-type:search"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_REQUIRED"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "search box"
+ ],
+ [
+ "property",
+ "IsrequiredForForm",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "searchbox required unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for searchbox required unspecified.</p>
+ <div id="test" role="searchbox">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/separator_focusable_all_values_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/separator_focusable_all_values_unspecified-manual.html
new file mode 100644
index 0000000000..fb8e852bb1
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/separator_focusable_all_values_unspecified-manual.html
@@ -0,0 +1,182 @@
+<!doctype html>
+<html>
+ <head>
+ <title>separator focusable all values unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SEPARATOR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "100"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSplitter"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "splitter"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "100"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "100"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Thumb"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "100"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "separator focusable all values unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for separator focusable all values unspecified.</p>
+ <div tabindex="0" role="separator" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/separator_focusable_only_valuenow_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/separator_focusable_only_valuenow_unspecified-manual.html
new file mode 100644
index 0000000000..680c2a3605
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/separator_focusable_only_valuenow_unspecified-manual.html
@@ -0,0 +1,182 @@
+<!doctype html>
+<html>
+ <head>
+ <title>separator focusable only valuenow unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SEPARATOR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "100"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSplitter"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "splitter"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "100"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "100"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Thumb"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "100"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "separator focusable only valuenow unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for separator focusable only valuenow unspecified.</p>
+ <div tabindex="0" role="separator" aria-valuemin="0", aria-valuemax="100" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/separator_focusable_valuetext-manual.html b/testing/web-platform/tests/wai-aria/manual/separator_focusable_valuetext-manual.html
new file mode 100644
index 0000000000..5992f15aeb
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/separator_focusable_valuetext-manual.html
@@ -0,0 +1,206 @@
+<!doctype html>
+<html>
+ <head>
+ <title>separator focusable valuetext</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SEPARATOR"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "valuetext:Bonaire"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "100"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSplitter"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "splitter"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "100"
+ ],
+ [
+ "property",
+ "AXValueDescription",
+ "is",
+ "Bonaire"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "valuetext:Bonaire"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "100"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Thumb"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "100"
+ ],
+ [
+ "property",
+ "Value.Value",
+ "is",
+ "Bonaire"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "separator focusable valuetext"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for separator focusable valuetext.</p>
+ <div tabindex="0" role="separator" aria-valuetext="Bonaire" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/separator_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/separator_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..3a3901b424
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/separator_orientation_unspecified-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>separator orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SEPARATOR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSplitter"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "splitter"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Separator"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "separator orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for separator orientation unspecified.</p>
+ <div role="separator" id="test"></div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/separator_unfocusable_all_values_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/separator_unfocusable_all_values_unspecified-manual.html
new file mode 100644
index 0000000000..171370f422
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/separator_unfocusable_all_values_unspecified-manual.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+ <head>
+ <title>separator unfocusable all values unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SEPARATOR"
+ ],
+ [
+ "property",
+ "interfaces",
+ "doesNotContain",
+ "Value"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSplitter"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "splitter"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Separator"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "separator unfocusable all values unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for separator unfocusable all values unspecified.</p>
+ <div role="separator" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/separator_unfocusable_valuetext-manual.html b/testing/web-platform/tests/wai-aria/manual/separator_unfocusable_valuetext-manual.html
new file mode 100644
index 0000000000..db8ee6322d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/separator_unfocusable_valuetext-manual.html
@@ -0,0 +1,116 @@
+<!doctype html>
+<html>
+ <head>
+ <title>separator unfocusable valuetext</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SEPARATOR"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "valuetext:Bonaire"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSplitter"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "splitter"
+ ],
+ [
+ "property",
+ "AXValueDescription",
+ "isNot",
+ "Bonaire"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "doesNotContain",
+ "valuetext:Bonaire"
+ ],
+ [
+ "property",
+ "value",
+ "isNot",
+ "Bonaire"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SEPARATOR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Separator"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "doesNotContain",
+ "RangeValue"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "separator unfocusable valuetext"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for separator unfocusable valuetext.</p>
+ <div role="separator" aria-valuetext="Bonaire" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/slider_all_values_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/slider_all_values_unspecified-manual.html
new file mode 100644
index 0000000000..0dea62e620
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/slider_all_values_unspecified-manual.html
@@ -0,0 +1,182 @@
+<!doctype html>
+<html>
+ <head>
+ <title>slider all values unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "100"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSlider"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "slider"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "100"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "50"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "100"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Slider"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "50"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "100"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "slider all values unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for slider all values unspecified.</p>
+ <div role="slider" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/slider_only_valuenow_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/slider_only_valuenow_unspecified-manual.html
new file mode 100644
index 0000000000..ffcbc78373
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/slider_only_valuenow_unspecified-manual.html
@@ -0,0 +1,182 @@
+<!doctype html>
+<html>
+ <head>
+ <title>slider only valuenow unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "20"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "40"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSlider"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "slider"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "20"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "40"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "20"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "40"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Slider"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "20"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "40"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "slider only valuenow unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for slider only valuenow unspecified.</p>
+ <div role="slider" aria-valuemin="0" aria-valuemax="40" id="test">
+ Go Fish
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/slider_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/slider_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..295b0a6196
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/slider_orientation_unspecified-manual.html
@@ -0,0 +1,132 @@
+<!doctype html>
+<html>
+ <head>
+ <title>slider orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSlider"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "slider"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Slider"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "RangeValue"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "slider orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for slider orientation unspecified.</p>
+ <div role="slider" id="test"></div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/slider_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/slider_readonly_false-manual.html
new file mode 100644
index 0000000000..f5a70984d5
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/slider_readonly_false-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>slider readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSlider"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "slider"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAcesssibleValue"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Slider"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "slider readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for slider readonly false.</p>
+ <div id="test" role="slider" aria-readonly="false">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/slider_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/slider_readonly_true-manual.html
new file mode 100644
index 0000000000..2588079d78
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/slider_readonly_true-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>slider readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSlider"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "slider"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAcesssibleValue"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Slider"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "slider readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for slider readonly true.</p>
+ <div id="test" role="slider" aria-readonly="true">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/slider_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/slider_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..271325a47d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/slider_readonly_unspecified-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>slider readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXSlider"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "slider"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAcesssibleValue"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SLIDER"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Slider"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "slider readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for slider readonly unspecified.</p>
+ <div id="test" role="slider">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/spinbutton_all_values_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/spinbutton_all_values_unspecified-manual.html
new file mode 100644
index 0000000000..8da69af36d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/spinbutton_all_values_unspecified-manual.html
@@ -0,0 +1,183 @@
+<!doctype html>
+<html>
+ <head>
+ <title>spinbutton all values unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SPIN_BUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "isLTE",
+ "-9007199254740992"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "isGTE",
+ "9007199254740992"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXIncrementor"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "stepper"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "isLTE",
+ "-9007199254740992"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "isGTE",
+ "9007199254740992"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "isLTE",
+ "-9007199254740992"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "isGTE",
+ "9007199254740992"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Spinner"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "isLTE",
+ "-9007199254740992"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "isGTE",
+ "9007199254740992"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "spinbutton all values unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for spinbutton all values unspecified.</p>
+ <div role="spinbutton" id="test">
+ Go Fish
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/spinbutton_only_aria-valuenow_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/spinbutton_only_aria-valuenow_unspecified-manual.html
new file mode 100644
index 0000000000..bbb94702fe
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/spinbutton_only_aria-valuenow_unspecified-manual.html
@@ -0,0 +1,183 @@
+<!doctype html>
+<html>
+ <head>
+ <title>spinbutton only aria-valuenow unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SPIN_BUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "result",
+ "atk_value_get_minimum_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_current_value()",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "atk_value_get_maximum_value()",
+ "is",
+ "100"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXIncrementor"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "stepper"
+ ],
+ [
+ "property",
+ "AXMinValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "AXMaxValue",
+ "is",
+ "100"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "AccessibleValue"
+ ],
+ [
+ "property",
+ "minimumValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "currentValue",
+ "is",
+ "0"
+ ],
+ [
+ "property",
+ "maximumValue",
+ "is",
+ "100"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Spinner"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "RangeValue"
+ ],
+ [
+ "result",
+ "RangeValue.Minimum",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Value",
+ "is",
+ "0"
+ ],
+ [
+ "result",
+ "RangeValue.Maximum",
+ "is",
+ "100"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "spinbutton only aria-valuenow unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for spinbutton only aria-valuenow unspecified.</p>
+ <div role="spinbutton" aria-valuemin="0" aria-valuemax="100" id="test">
+ Go Fish
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_false-manual.html
new file mode 100644
index 0000000000..5e9429ca28
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_false-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>spinbutton readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SPIN_BUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXIncrementor"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "stepper"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAcesssibleValue"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Spinner"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "spinbutton readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for spinbutton readonly false.</p>
+ <div id="test" role="spinbutton" aria-readonly="false">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_true-manual.html
new file mode 100644
index 0000000000..a7a3abe632
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_true-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>spinbutton readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SPIN_BUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXIncrementor"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "stepper"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAcesssibleValue"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Spinner"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "spinbutton readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for spinbutton readonly true.</p>
+ <div id="test" role="spinbutton" aria-readonly="true">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..0976b0737c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/spinbutton_readonly_unspecified-manual.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<html>
+ <head>
+ <title>spinbutton readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SPIN_BUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Value"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXIncrementor"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "stepper"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAcesssibleValue"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_SPINBUTTON"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Spinner"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "spinbutton readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for spinbutton readonly unspecified.</p>
+ <div id="test" role="spinbutton">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_checked_false-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_checked_false-manual.html
new file mode 100644
index 0000000000..ac61802bdf
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_checked_false-manual.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch checked false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_CHECKED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "0"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Toggle.ToggleState",
+ "is",
+ "Off"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch checked false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch checked false.</p>
+ <div id='test' role='switch' aria-checked='false' tabindex='0' class='switch'>power</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_checked_mixed-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_checked_mixed-manual.html
new file mode 100644
index 0000000000..a674c7d7bc
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_checked_mixed-manual.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch checked mixed</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_INDETERMINATE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_CHECKED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "0"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Toggle.ToggleState",
+ "is",
+ "Off"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch checked mixed"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch checked mixed.</p>
+ <div id='test' role='switch' aria-checked='mixed' tabindex='0' class='switch'>power</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_checked_true-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_checked_true-manual.html
new file mode 100644
index 0000000000..e23e723561
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_checked_true-manual.html
@@ -0,0 +1,138 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch checked true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "1"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_CHECKED"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "controlPatterns",
+ "contains",
+ "Toggle"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Toggle.ToggleState",
+ "is",
+ "On"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch checked true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch checked true.</p>
+ <div id='test' role='switch' aria-checked='true' tabindex='0'>power</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_checked_undefined-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_checked_undefined-manual.html
new file mode 100644
index 0000000000..4f5399e88c
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_checked_undefined-manual.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch checked undefined</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_CHECKED"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "0"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Toggle.ToggleState",
+ "is",
+ "Off"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch checked undefined"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch checked undefined.</p>
+ <div id='test' role='switch' tabindex='0' class='switch'>power</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_checked_value_changes-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_checked_value_changes-manual.html
new file mode 100644
index 0000000000..b58e52fefb
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_checked_value_changes-manual.html
@@ -0,0 +1,163 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch checked value changes</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "attribute" : "aria-checked",
+ "element" : "test",
+ "title" : "step 1",
+ "type" : "attribute",
+ "value" : "\"true\""
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKABLE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_CHECKED"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:checked"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "1"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "event",
+ "type",
+ "is",
+ "AXValueChanged"
+ ],
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "property",
+ "AXValue",
+ "is",
+ "1"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "checkable:true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_STATECHANGE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Toggle.ToggleState",
+ "is",
+ "On"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "TogglePattern.ToggleStateProperty"
+ ]
+ ]
+ },
+ "title" : "step 2",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch checked value changes"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch checked value changes.</p>
+ <div id='test' role='switch' aria-checked='false' tabindex='0' class='switch'>power</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_readonly_false-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_readonly_false-manual.html
new file mode 100644
index 0000000000..e68b6bb0d2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_readonly_false-manual.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch readonly false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch readonly false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch readonly false.</p>
+ <div id="test" role="switch" aria-readonly="false">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_readonly_true-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_readonly_true-manual.html
new file mode 100644
index 0000000000..605d2d0d9a
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_readonly_true-manual.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch readonly true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "false"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch readonly true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch readonly true.</p>
+ <div id="test" role="switch" aria-readonly="true">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/switch_readonly_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/switch_readonly_unspecified-manual.html
new file mode 100644
index 0000000000..0fd582c0e9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/switch_readonly_unspecified-manual.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<html>
+ <head>
+ <title>switch readonly unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_READ_ONLY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXCheckBox"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSwitch"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "switch"
+ ],
+ [
+ "result",
+ "AXUIElementIsAttributeSettable(AXValue)",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "IA2_ROLE_TOGGLE_BUTTON"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:switch"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_EDITABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Button"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "toggleswitch"
+ ],
+ [
+ "property",
+ "Value.IsReadOnly",
+ "is",
+ "false"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "switch readonly unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for switch readonly unspecified.</p>
+ <div id="test" role="switch">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/tab_posinset_and_setsize-manual.html b/testing/web-platform/tests/wai-aria/manual/tab_posinset_and_setsize-manual.html
new file mode 100644
index 0000000000..f27f485ac9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/tab_posinset_and_setsize-manual.html
@@ -0,0 +1,189 @@
+<!doctype html>
+<html>
+ <head>
+ <title>tab posinset and setsize</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PAGE_TAB"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:3"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:7"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRadioButton"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "tab"
+ ],
+ [
+ "property",
+ "AXARIAPosInSet",
+ "is",
+ "3"
+ ],
+ [
+ "property",
+ "AXARIASetSize",
+ "is",
+ "7"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "true"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PAGETAB"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "posinset:3"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "setsize:7"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "similarItemsInGroup:7"
+ ],
+ [
+ "property",
+ "groupPosition",
+ "contains",
+ "positionInGroup:3"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PAGETAB"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "TabItem"
+ ],
+ [
+ "property",
+ "AriaProperties.posinset",
+ "is",
+ "3"
+ ],
+ [
+ "property",
+ "AriaProperties.setsize",
+ "is",
+ "7"
+ ],
+ [
+ "property",
+ "SelectionItem",
+ "isNot",
+ "IsSelected"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "tab posinset and setsize"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for tab posinset and setsize.</p>
+ <div role='tabpanel'>
+ <div role='tab' aria-selected='false'>Hello Mary</div>
+ <div role='tab' id='test' aria-selected='true' aria-posinset='3' aria-setsize='7'>Hello Bob</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/table_colcount_-1-manual.html b/testing/web-platform/tests/wai-aria/manual/table_colcount_-1-manual.html
new file mode 100644
index 0000000000..2135f6ed8d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/table_colcount_-1-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>table colcount -1</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:-1"
+ ],
+ [
+ "result",
+ "atk_table_get_n_columns()",
+ "is",
+ "-1"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIAColumnCount",
+ "is",
+ "-1"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:-1"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Table"
+ ],
+ [
+ "property",
+ "Table.ColumnCount",
+ "is",
+ "-1"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "table colcount -1"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for table colcount -1.</p>
+ <div role="table" id="test" aria-colcount="-1">
+ <div role="row">
+ <div role="cell" aria-colindex="4" >test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/table_colcount_8-manual.html b/testing/web-platform/tests/wai-aria/manual/table_colcount_8-manual.html
new file mode 100644
index 0000000000..1b8e0affdd
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/table_colcount_8-manual.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+ <head>
+ <title>table colcount 8</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ],
+ [
+ "result",
+ "atk_table_get_n_columns()",
+ "is",
+ "8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIAColumnCount",
+ "is",
+ "8"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Table"
+ ],
+ [
+ "property",
+ "Table.ColumnCount",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "table colcount 8"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for table colcount 8.</p>
+ <div role="table" id="test" aria-colcount="8">
+ <div role="row">
+ <div role="cell" aria-colindex="4">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/table_rowcount_-1-manual.html b/testing/web-platform/tests/wai-aria/manual/table_rowcount_-1-manual.html
new file mode 100644
index 0000000000..5e7b5b8bf4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/table_rowcount_-1-manual.html
@@ -0,0 +1,126 @@
+<!doctype html>
+<html>
+ <head>
+ <title>table rowcount -1</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:-1"
+ ],
+ [
+ "result",
+ "atk_table_get_n_rows()",
+ "is",
+ "-1"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIARowCount",
+ "contains",
+ "-1"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:table"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:-1"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Table"
+ ],
+ [
+ "property",
+ "Table.RowCount",
+ "is",
+ "-1"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "table rowcount -1"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for table rowcount -1.</p>
+ <div role='table' id='test' aria-rowcount='-1' aria-colcount='2'>
+ <div role='row'>
+ <span role='cell'>
+ <button>hello</button>
+ </span>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/table_rowcount_3-manual.html b/testing/web-platform/tests/wai-aria/manual/table_rowcount_3-manual.html
new file mode 100644
index 0000000000..5bfad69b24
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/table_rowcount_3-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>table rowcount 3</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:3"
+ ],
+ [
+ "result",
+ "atk_table_get_n_rows()",
+ "is",
+ "3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIARowCount",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:3"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Table"
+ ],
+ [
+ "property",
+ "Table.RowCount",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "table rowcount 3"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for table rowcount 3.</p>
+ <div role='table' id='test' aria-rowcount='3' aria-colcount='2'>
+ <div role='row'>
+ <span role='cell'>cheese</span>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/tablist_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/tablist_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..104668cbb9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/tablist_orientation_horizontal-manual.html
@@ -0,0 +1,142 @@
+<!doctype html>
+<html>
+ <head>
+ <title>tablist orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PAGE_TAB_LIST"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTabGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "tab group"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PAGETABLIST"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PAGETABLIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Tab"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "tablist orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for tablist orientation horizontal.</p>
+ <div role="tablist" aria-orientation="horizontal" id="test">
+ <div role="tab" tabindex="0">Tab1</div><div role="tab" tabindex="-1">Tab2</div>
+ </div>
+ <div role="tabpanel"></div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/tablist_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/tablist_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..001c2ee77b
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/tablist_orientation_unspecified-manual.html
@@ -0,0 +1,136 @@
+<!doctype html>
+<html>
+ <head>
+ <title>tablist orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PAGE_TAB_LIST"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTabGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "tab group"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PAGETABLIST"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PAGETABLIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Tab"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "tablist orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for tablist orientation unspecified.</p>
+ <div role="tablist" id="test">
+ <div role="tab" tabindex="0">Tab1</div><div role="tab" tabindex="-1">Tab2</div>
+ </div>
+ <div role="tabpanel"></div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/tablist_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/tablist_orientation_vertical-manual.html
new file mode 100644
index 0000000000..f6fe16e895
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/tablist_orientation_vertical-manual.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html>
+ <head>
+ <title>tablist orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_PAGE_TAB_LIST"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTabGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "tab group"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_PAGETABLIST"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Tab"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "selection pattern"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "tablist orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for tablist orientation vertical.</p>
+ <div role="tablist" aria-orientation="vertical" id="test">
+ <div role="tab" tabindex="0">Tab1</div><div role="tab" tabindex="-1">Tab2</div>
+ </div>
+ <div role="tabpanel"></div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/term_role-manual.html b/testing/web-platform/tests/wai-aria/manual/term_role-manual.html
new file mode 100644
index 0000000000..ac5030df95
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/term_role-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html>
+ <head>
+ <title>term role</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_DESCRIPTION_TERM"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Text"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Hypertext"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXTerm"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "term"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TERM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "ROLE_SYSTEM_READONLY"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Text"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "term role"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for term role.</p>
+ <div role="term" id='test' aria-describedby="dfn">
+ w3c
+ </div>
+ <div role="definition" id="dfn">
+ World Wide Web Consortium
+ </div>
+
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/textbox_placeholder-manual.html b/testing/web-platform/tests/wai-aria/manual/textbox_placeholder-manual.html
new file mode 100644
index 0000000000..fdf0635be6
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/textbox_placeholder-manual.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html>
+ <head>
+ <title>textbox placeholder</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_ENTRY"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "EditableText"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "placeholder-text:DD/MM/YYYY"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTextField"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "text field"
+ ],
+ [
+ "property",
+ "AXPlaceholderValue",
+ "is",
+ "DD/MM/YYYY"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_SINGLE_LINE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "placeholder-text:DD/MM/YYYY"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TEXT"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Edit"
+ ],
+ [
+ "result",
+ "AriaProperties.placeholder",
+ "is",
+ "DD/MM/YYYY"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "textbox placeholder"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for textbox placeholder.</p>
+ <div contenteditable="true" role="textbox" aria-placeholder="DD/MM/YYYY" id="test">
+ "DD/MM/YYYY"
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..1b8fda8dd6
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_horizontal-manual.html
@@ -0,0 +1,122 @@
+<!doctype html>
+<html>
+ <head>
+ <title>toolbar orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOOL_BAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXToolbar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "toolbar"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TOOLBAR"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TOOLBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ToolBar"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "toolbar orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for toolbar orientation horizontal.</p>
+ <div role="toolbar" aria-orientation="horizontal" id="test">
+ <button value="b1"> <button value="b2">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..4607511874
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_unspecified-manual.html
@@ -0,0 +1,122 @@
+<!doctype html>
+<html>
+ <head>
+ <title>toolbar orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOOL_BAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXToolbar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "toolbar"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TOOLBAR"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TOOLBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ToolBar"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "toolbar orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for toolbar orientation unspecified.</p>
+ <div role="toolbar" id="test">
+ <button value="b1"> <button value="b2">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_vertical-manual.html
new file mode 100644
index 0000000000..792952d323
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/toolbar_orientation_vertical-manual.html
@@ -0,0 +1,122 @@
+<!doctype html>
+<html>
+ <head>
+ <title>toolbar orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TOOL_BAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXToolbar"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "toolbar"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TOOLBAR"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_TOOLBAR"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "ToolBar"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "toolbar orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for toolbar orientation vertical.</p>
+ <div role="toolbar" aria-orientation="vertical" id="test">
+ <button value="b1"> <button value="b2">
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/tree_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/tree_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..15813f5f03
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/tree_orientation_horizontal-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>tree orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXOutline"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "outline"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Tree"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "tree orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for tree orientation horizontal.</p>
+ <div role="tree" tabindex="0" aria-orientation="horizontal" aria-activedescendant="foo" id="test">
+ <div id="foo" role="treeitem">foo</div>
+ <div role="treeitem">baz</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/tree_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/tree_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..dfc1bdcc58
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/tree_orientation_unspecified-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>tree orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXOutline"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "outline"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Tree"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "tree orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for tree orientation unspecified.</p>
+ <div role="tree" tabindex="0" aria-activedescendant="foo" id="test">
+ <div id="foo" role="treeitem">foo</div>
+ <div role="treeitem">baz</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/tree_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/tree_orientation_vertical-manual.html
new file mode 100644
index 0000000000..b9afa33ff4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/tree_orientation_vertical-manual.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html>
+ <head>
+ <title>tree orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXOutline"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "outline"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Tree"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "tree orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for tree orientation vertical.</p>
+ <div role="tree" tabindex="0" aria-orientation="vertical" aria-activedescendant="foo" id="test">
+ <div id="foo" role="treeitem">foo</div>
+ <div role="treeitem">baz</div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treegrid_colcount_8-manual.html b/testing/web-platform/tests/wai-aria/manual/treegrid_colcount_8-manual.html
new file mode 100644
index 0000000000..a3e9ea1496
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treegrid_colcount_8-manual.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treegrid colcount 8</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ],
+ [
+ "result",
+ "atk_table_get_n_columns()",
+ "is",
+ "8"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIAColumnCount",
+ "is",
+ "8"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "colcount:8"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "DataGrid.ColumnCount",
+ "is",
+ "8"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treegrid colcount 8"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treegrid colcount 8.</p>
+ <div id="test" role="treegrid" aria-colcount="8">
+ <div role="row">
+ <div role="cell" aria-colindex="4">test cell</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_horizontal-manual.html b/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_horizontal-manual.html
new file mode 100644
index 0000000000..756153abf3
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_horizontal-manual.html
@@ -0,0 +1,137 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treegrid orientation horizontal</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "table"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_HORIZONTAL"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treegrid orientation horizontal"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treegrid orientation horizontal.</p>
+ <div role="treegrid" tabindex="0" aria-orientation="horizontal" aria-activedescendant="foo" id="test">
+ <div role="row">
+ <div role="cell" id="foo">c1</div>
+ <div role="cell">c2</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_unspecified-manual.html b/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_unspecified-manual.html
new file mode 100644
index 0000000000..d536e9afbe
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_unspecified-manual.html
@@ -0,0 +1,155 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treegrid orientation unspecified</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_HORIZONTAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "table"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "isNot",
+ "AXVerticalOrientation"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "isNot",
+ "AXHorizontalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "Orientation",
+ "isNot",
+ "vertical"
+ ],
+ [
+ "property",
+ "Orientation",
+ "isNot",
+ "horizontal"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treegrid orientation unspecified"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treegrid orientation unspecified.</p>
+ <div role="treegrid" tabindex="0" aria-activedescendant="foo" id="test">
+ <div role="row">
+ <div role="cell" id="foo">c1</div>
+ <div role="cell">c2</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_vertical-manual.html b/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_vertical-manual.html
new file mode 100644
index 0000000000..62a19d0904
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treegrid_orientation_vertical-manual.html
@@ -0,0 +1,137 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treegrid orientation vertical</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_TABLE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "Selection"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_VERTICAL"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "<nil>"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "table"
+ ],
+ [
+ "property",
+ "AXOrientation",
+ "is",
+ "AXVerticalOrientation"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "IA2_STATE_VERTICAL"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "IA2_STATE_HORIZONTAL"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "Orientation",
+ "is",
+ "vertical"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treegrid orientation vertical"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treegrid orientation vertical.</p>
+ <div role="treegrid" tabindex="0" aria-orientation="vertical" aria-activedescendant="foo" id="test">
+ <div role="row">
+ <div role="cell" id="foo">c1</div>
+ <div role="cell">c2</div>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treegrid_rowcount_3-manual.html b/testing/web-platform/tests/wai-aria/manual/treegrid_rowcount_3-manual.html
new file mode 100644
index 0000000000..9d9b8acf44
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treegrid_rowcount_3-manual.html
@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treegrid rowcount 3</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_TABLE"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:3"
+ ],
+ [
+ "result",
+ "atk_table_get_n_rows()",
+ "is",
+ "3"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXTable"
+ ],
+ [
+ "property",
+ "AXARIARowCount",
+ "is",
+ "3"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ],
+ [
+ "property",
+ "interfaces",
+ "contains",
+ "IAccessibleTable2"
+ ],
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "rowcount:3"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "DataGrid"
+ ],
+ [
+ "property",
+ "DataGrid.RowCount",
+ "is",
+ "3"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treegrid rowcount 3"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treegrid rowcount 3.</p>
+ <div role='treegrid' id='test' aria-rowcount='3' aria-colcount='2'>
+ <div role='row'>
+ <span role='gridcell'>
+ <button>hello</button>
+ </span>
+ </div>
+ </div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treeitem_selected_false-manual.html b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_false-manual.html
new file mode 100644
index 0000000000..684fda69b6
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_false-manual.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treeitem selected false</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRow"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXOutlineRow"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "outline row"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINEITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "TreeItem"
+ ],
+ [
+ "property",
+ "ControlPatterns",
+ "doesNotContain",
+ "SelectionItem"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treeitem selected false"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treeitem selected false.</p>
+ <UL role="tree">
+ <li role="treeitem" aria-selected="false" id="test">
+ Fish
+ </li>
+ <li role="treeitem">
+ beef
+ </li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treeitem_selected_true-manual.html b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_true-manual.html
new file mode 100644
index 0000000000..b951c54dec
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_true-manual.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treeitem selected true</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRow"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXOutlineRow"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "outline row"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "true"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINEITEM"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "TreeItem"
+ ],
+ [
+ "property",
+ "SelectionItem.IsSelected",
+ "Is",
+ "true"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treeitem selected true"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treeitem selected true.</p>
+ <UL role="tree">
+ <li role="treeitem" aria-selected="true" id="test">
+ Fish
+ </li>
+ <li role="treeitem">
+ beef
+ </li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treeitem_selected_undefined-manual.html b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_undefined-manual.html
new file mode 100644
index 0000000000..dddfd3826f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_undefined-manual.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treeitem selected undefined</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_TREE_ITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SELECTABLE"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXRow"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXOutlineRow"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "outline row"
+ ],
+ [
+ "property",
+ "AXSelected",
+ "is",
+ "false"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_OUTLINEITEM"
+ ],
+ [
+ "property",
+ "states",
+ "doesNotContain",
+ "STATE_SYSTEM_SELECTED"
+ ],
+ [
+ "property",
+ "states",
+ "contains",
+ "STATE_SYSTEM_SELECTABLE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "TreeItem"
+ ],
+ [
+ "property",
+ "ControlPatterns",
+ "doesNotContain",
+ "SelectionItem"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "treeitem selected undefined"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treeitem selected undefined.</p>
+ <UL role="tree">
+ <li role="treeitem" id="test">
+ Fish
+ </li>
+ <li role="treeitem">
+ beef
+ </li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/manual/treeitem_selected_value_changes-manual.html b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_value_changes-manual.html
new file mode 100644
index 0000000000..69734c82dd
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/manual/treeitem_selected_value_changes-manual.html
@@ -0,0 +1,146 @@
+<!doctype html>
+<html>
+ <head>
+ <title>treeitem selected value changes</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "attribute" : "aria-activedescendant",
+ "element" : "test1",
+ "title" : "step 1",
+ "type" : "attribute",
+ "value" : "\"test\" "
+ },
+ {
+ "attribute" : "aria-selected",
+ "element" : "test",
+ "title" : "step 2",
+ "type" : "attribute",
+ "value" : "\"true\""
+ },
+ {
+ "attribute" : "aria-selected",
+ "element" : "test2",
+ "title" : "step 3",
+ "type" : "attribute",
+ "value" : "\"false\""
+ },
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:selected"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "1"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_SELECTION"
+ ],
+ [
+ "event",
+ "type",
+ "is",
+ "EVENT_OBJECT_STATECHANGE"
+ ]
+ ],
+ "UIA" : [
+ [
+ "event",
+ "type",
+ "is",
+ "UIA_SelectionItem_ElementSelectedEventId"
+ ]
+ ]
+ },
+ "title" : "step 4",
+ "type" : "test"
+ },
+ {
+ "element" : "test1",
+ "test" : {
+ "ATK" : [
+ [
+ "event",
+ "type",
+ "is",
+ "object:selection-changed"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "event",
+ "type",
+ "is",
+ "AXSelectedChildrenChanged"
+ ]
+ ]
+ },
+ "title" : "step 5",
+ "type" : "test"
+ },
+ {
+ "element" : "test2",
+ "test" : {
+ "ATK" : [
+ [
+ "event",
+ "type",
+ "is",
+ "object:state-changed:selected"
+ ],
+ [
+ "event",
+ "detail1",
+ "is",
+ "0"
+ ]
+ ]
+ },
+ "title" : "step 6",
+ "type" : "test"
+ }
+ ],
+ "title" : "treeitem selected value changes"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for treeitem selected value changes.</p>
+ <ul id="test1" aria-activedescendant="test2" role="tree">
+ <li role="treeitem" aria-selected="false" id="test">
+ Fish
+ </li>
+ <li id="test2" aria-selected="true" role="treeitem">
+ beef
+ </li>
+ </ul>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/role/ReadMe.md b/testing/web-platform/tests/wai-aria/role/ReadMe.md
new file mode 100644
index 0000000000..eb89da7846
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/ReadMe.md
@@ -0,0 +1,16 @@
+
+# WPT Roles Tests
+
+/wai-aria/roles/ includes various files broken up by test type
+
+- **roles.html** covers simple assignment/verification of most core WAI-ARIA roles, and includes a list of cross-references to other specific files and spec directories.
+- role testing of *host language* implicit roles (E.g., `<main> -> main`) are in other directories (E.g., [html-aam](https://github.com/web-platform-tests/interop-accessibility/issues/13))
+- role testing of **ARIA extension specs** are in other directories (E.g., [graphics-aria](https://github.com/web-platform-tests/interop-accessibility/issues/9))
+- basic.html was the first to ensure basic test coverage of webdriver getcomputedrole
+- other context-dependent role tests, error handling, and edge cases are covered in separate files
+ - list-roles.html
+ - region-roles.html
+ - grid, listbox, menu, tree, etc
+ - fallback roles
+ - invalid roles
+ - error handling, etc.
diff --git a/testing/web-platform/tests/wai-aria/role/abstract-roles.html b/testing/web-platform/tests/wai-aria/role/abstract-roles.html
new file mode 100644
index 0000000000..520ecf2dbb
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/abstract-roles.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html>
+<head>
+ <title>Abstract Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+
+<p>Tests <a href="https://w3c.github.io/aria/#abstract_roles">Abstract Roles</a> and related <a href="https://w3c.github.io/aria/#document-handling_author-errors_roles">9.1 Roles - handling author errors</a></p>
+
+ <nav role="command" data-testname="command role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="composite" data-testname="composite role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="input" data-testname="input role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="landmark" data-testname="landmark role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="range" data-testname="range role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="roletype" data-testname="roletype role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="section" data-testname="section role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="sectionhead" data-testname="sectionhead role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="select" data-testname="select role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="structure" data-testname="structure role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="widget" data-testname="widget role" data-expectedrole="navigation" class="ex">x</nav>
+ <nav role="window" data-testname="window role" data-expectedrole="navigation" class="ex">x</nav>
+
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/basic.html b/testing/web-platform/tests/wai-aria/role/basic.html
new file mode 100644
index 0000000000..5fbe1fe2aa
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/basic.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+
+<!--
+
+These tests should remain solid and passing in any implementation that supports get_computed_role.
+
+It uses a standard promise_test (rather than aria-util.js) to reduce other dependencies.
+
+If you're adding something you expect to fail in one or more implementations, you probably want a different file.
+
+-->
+
+<div id='d' style='height: 100px; width: 100px' role="group" aria-label="test label"></div>
+<h1 id="h">test heading</h1>
+<script>
+
+promise_test(async t => {
+ const role = await test_driver.get_computed_role(document.getElementById('d'));
+ assert_equals(role, "group");
+}, "tests explicit role");
+
+
+promise_test(async t => {
+ const role = await test_driver.get_computed_role(document.getElementById('h'));
+ assert_equals(role, "heading");
+}, "tests implicit role");
+
+</script>
diff --git a/testing/web-platform/tests/wai-aria/role/button-roles.html b/testing/web-platform/tests/wai-aria/role/button-roles.html
new file mode 100644
index 0000000000..23d0cd22d6
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/button-roles.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html>
+<head>
+ <title>Button-related Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#button">button</a> and related roles.</p>
+
+<div role="button" aria-haspopup="false" data-testname="button aria-haspopup false" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-haspopup="true" data-testname="button aria-haspopup true" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-haspopup="menu" data-testname="button aria-haspopup menu" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-haspopup="dialog" data-testname="button aria-haspopup dialog" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-haspopup="listbox" data-testname="button aria-haspopup listbox" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-haspopup="tree" data-testname="button aria-haspopup tree" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-haspopup="grid" data-testname="button aria-haspopup grid" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-pressed="true" data-testname="button aria-pressed true" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-pressed="false" data-testname="button aria-pressed false" data-expectedrole="button" class="ex"></div>
+<div role="button" aria-pressed="" data-testname="button aria-pressed undefined" data-expectedrole="button" class="ex"></div>
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/role/contextual-roles.html b/testing/web-platform/tests/wai-aria/role/contextual-roles.html
new file mode 100644
index 0000000000..90b1842f08
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/contextual-roles.html
@@ -0,0 +1,91 @@
+<!doctype html>
+<html>
+<head>
+ <title>Contextual Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+ <p>Verifies Required Accessibility Parent Roles from <a href="https://w3c.github.io/aria/#scope">5.2.7 Required Accessibility Parent Role</a></p>
+ <p>Also verifies Allowed Accessibility Child Roles from <a href="https://w3c.github.io/aria/#mustContain">5.2.6 Allowed Accessibility Child Roles</a></p>
+
+<!-- Notes for "required context" testing:
+
+ - See Computed Role for more details on role computation when an element lacks required context:
+ https://w3c.github.io/core-aam/#roleMappingComputedRole
+
+ - See ARIA spec for full listing of "Required Accessibility Parent Role" for each element:
+ https://w3c.github.io/aria/#scope
+
+ Identified roles with "Required Context" excluding abstract roles (e.g., child -> parent):
+
+ - caption -> {figure, grid, table, treegrid}
+ - cell -> row
+ - columnheader -> row
+ - gridcell -> row
+ - listitem -> {list, directory} *Note: directory role is deprecated as of ARIA 1.2
+ - menuitem -> {group, menu, menubar}
+ - menuitemcheckbox -> {group, menu, menubar}
+ - menuitemradio -> {group, menu, menubar}
+ - option -> {group, listbox}
+ - row -> {grid, rowgroup, table, treegrid}
+ - rowgroup -> {grid, table, treegrid}
+ - rowheader -> row
+ - tab -> tablist
+ - treeitem -> {group, tree}
+
+ -->
+
+<!-- Required Context Roles Testing -->
+
+ <!-- caption -> ./table-roles.html -->
+
+ <!-- cell -> ./table-roles.html -->
+
+ <!-- columnheader -> ./grid-roles.html, ./table-roles.html -->
+
+ <!-- gridcell -> ./grid-roles.html -->
+
+ <!-- listitem -> ./list-roles.html -->
+
+ <!-- menuitem, menuitemcheckbox, menuitemradio -> ./menu-roles.html -->
+
+ <!-- option -> ./listbox-roles.html -->
+
+ <!-- row -> ./grid-roles.html, ./table-roles.html -->
+
+ <!-- rowgroup -> ./grid-roles.html, ./table-roles.html -->
+
+ <!-- rowheader -> ./grid-roles.html, ./table-roles.html -->
+
+ <!-- tab -> ./tab-roles.html -->
+
+ <!-- treeitem -> ./tree-roles.html -->
+
+<!-- Misc Contextual Role Testing -->
+
+ <!-- Testing contentinfo role computation when scoped to <main> or not:
+ 1. If <footer> is a descendant of <main>, it should become 'generic'
+ 2. If <footer> is scoped to <body>, it should be 'contentinfo' as expected
+
+ see: https://w3c.github.io/html-aam/#el-footer-ancestorbody -->
+ <main>
+ <footer data-testname="footer element scoped to main element is generic" class="ex-generic">x</footer>
+ <div role="contentinfo" data-testname="contentinfo region scoped to main element is generic" class="ex-generic">x</div>
+ </main>
+
+ <footer data-testname="footer scoped to body element is contentinfo" data-expectedrole="contentinfo" class="ex">x</footer>
+ <div role="contentinfo" data-testname="contentinfo region scoped to body element is contentinfo" data-expectedrole="contentinfo" class="ex">x</div>
+
+<script>
+ AriaUtils.verifyRolesBySelector(".ex");
+ AriaUtils.verifyGenericRolesBySelector(".ex-generic");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/fallback-roles.html b/testing/web-platform/tests/wai-aria/role/fallback-roles.html
new file mode 100644
index 0000000000..98011570b4
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/fallback-roles.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Fallback Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+ </head>
+ <body>
+
+ <p>Tests <a href="https://w3c.github.io/aria/#host_general_role">8.1 Role Attribute</a> role token list selection and <a href="https://w3c.github.io/aria/#document-handling_author-errors_roles">9.1 Roles - handling author errors</a>.</p>
+
+ <!-- known el and two known ARIA 1.0 roles -->
+ <nav role="region group" data-testname="fallback role w/ region with no label" data-expectedrole="group" class="ex">x</nav>
+ <nav role="region group" data-testname="fallback role w/ region with label" aria-label="x" data-expectedrole="region" class="ex">x</nav>
+
+ <!-- known el and known ARIA 1.1 with 1.0 role backup -->
+ <div role="switch checkbox" aria-checked="true" data-testname="aria 1.1 switch role w/ fallback to aria 1.0 checkbox role" aria-label="x" data-expectedrole="switch" class="ex">x</div>
+
+ <!-- known el and invalid role token with valid backup -->
+ <div role="foo button" data-testname="div[role=button] ignoring invalid foo role token" aria-label="x" data-expectedrole="button" class="ex">x</div>
+
+ <!-- unknown el and invalid role token with valid backup -->
+ <unknown role="foo button" data-testname="unknown[role=button] ignoring invalid foo role token" aria-label="x" data-expectedrole="button" class="ex">x</unknown>
+
+ <!-- known el and invalid role(s) -->
+ <button role="foo" data-testname="button ignoring single invalid role token" aria-label="x" data-expectedrole="button" class="ex">x</unknown>
+ <button role="foo bar" data-testname="button ignoring multiple invalid role tokens" aria-label="x" data-expectedrole="button" class="ex">x</unknown>
+
+ <!-- known el with invalid punctuation -->
+ <div role="invalid, punctuation, tests, link, button" data-testname="div[role=button] ignoring invalid foo role token including punctuation-contaminated known link role" aria-label="x" data-expectedrole="button" class="ex">x</div>
+
+
+
+ <!-- extra line breaks here to account for rendering of unicode diacritic etc char glitch tests -->
+
+
+
+ <div role="l̷̨̢̡̖̻̗̤̺̟̱͚͔͇͍͇̫̫̜͔̗̟̘̫̟̰̼̘͗̌̃͐̔̈́̚͝į̵̡̲̯̠̮͈͖̥̮̲͓̦̗̗̱̞͍̗̪͙͇͚͂̍͐̔̍͌̐̇̏̎͘͝ǹ̶̨̧̢̜̲̫͇̮͉̬͎͎͕̝̱͔̙̱̦̰̦̠̰̣̝͂̓̋̊͜ķ̷̧̧̨̨̨̘̳͕̰͎̮̠̘̪͇͕̥̭̼̼̜̤̫̥̼̤̰̦͖̪̀͒̆͑̒̅͑̓̒͂̽̈́̽̉̀̕͘͜͝ ̷̡̮̦̘͓̫̜͕͖̰̙̘͓̼͎̳̹͇̮͐͂́͛̃́̊̈͌̄̓̌̂̈̇̀̌̈́́̀̈́̍̈́̇̄̊̔͒̾̾̇́͒̽͂̾̕̚͜͜͝͠ͅͅg̸̨̧̧̧̧̛̺̦̣͇͈͙͇͎͕̠̞̳̹̣͋͑̑̓͛̓̉̔̉͑̇́̈́̉̃́̑̍̂̒͐͛͗̑̏̓̾͌̈̅́̇̕̕̚̚͝͝ͅr̶̛̤̲̘̮̟̭̲̋̾̀́́̒̀̀͑̎̀̌̈̀̍̂̏̊̎͐͒͗͗̀͘͘͘͠͠ȍ̴̧̡̢̡̢̞̝̠̙̬̗͍͍͉̺͔͙̫̝̰̮̜̩̙̳͉̻̻̼͍̊͋͐̐͆̈̿̒̊̄͑̈́̔͋̔̃͐̓̓͛́͊̉͑̊̔͆͘͘͜͠ͅu̴̱̯̞̞̞̺̼̳̳͚̞̇̈͒͠p̶̛͉̮̙̯̮̱͉̖͚͉̩̱̺̩̦̺͈̫͍͔̲̣̗̟̜̂̐̌̏͌̈́͗̾͌̿̓͒̋̆͆̾͛̐̈́̓͋̀͘̚͝͝͝ ̶͔͚̩̬͈̍̈́͗͐̀̊̏͛̃̈́͋̅͝ button" data-testname="div[role=button] ignoring invalid unicode diacritics etc on link and group role tokens" aria-label="x" data-expectedrole="button" class="ex">x</div>
+
+
+ <!-- known el and known role with whitespace edge cases -->
+ <div role=" button" data-testname="div[role=button] ignoring tab char" aria-label="x" data-expectedrole="button" class="ex">x</div>
+ <div role="
+button" data-testname="div[role=button] ignoring line break" aria-label="x" data-expectedrole="button" class="ex">x</div>
+ <div role="⠀ button" data-testname="div[role=button] ignoring braille whitespace char" aria-label="x" data-expectedrole="button" class="ex">x</div>
+
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/form-roles.html b/testing/web-platform/tests/wai-aria/role/form-roles.html
new file mode 100644
index 0000000000..935899c583
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/form-roles.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html>
+<head>
+ <title>Form Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Verifies <a href="https://w3c.github.io/aria/#document-handling_author-errors_roles">9.1 Roles - handling author errors</a> and the <a href="https://w3c.github.io/aria/#form">form</a> role.</p>
+
+
+<!-- no label -->
+<nav role="form" data-testname="form without label" data-expectedrole="navigation" class="ex">x</nav>
+
+<!-- w/ label -->
+<nav role="form" data-testname="form with label" data-expectedrole="form" aria-label="x" class="ex">x</nav>
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/generic-roles.html b/testing/web-platform/tests/wai-aria/role/generic-roles.html
new file mode 100644
index 0000000000..9a67312dd8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/generic-roles.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<html>
+<head>
+ <title>Generic Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#generic">generic</a>.</p>
+
+<p role="generic" data-testname="generic role on p element is generic" class="ex-generic">x</p>
+
+<script>
+AriaUtils.verifyGenericRolesBySelector(".ex-generic");
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/wai-aria/role/grid-roles.html b/testing/web-platform/tests/wai-aria/role/grid-roles.html
new file mode 100644
index 0000000000..c40771ba9f
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/grid-roles.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Grid Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+ </head>
+ <body>
+
+ <p>Tests <a href="https://w3c.github.io/aria/#grid">grid</a> and related roles.</p>
+
+ <!-- ARIA table roles tested in ./table-roles.html -->
+
+ <div role="grid" data-testname="role is grid" data-expectedrole="grid" class="ex">
+ <div role="row" data-testname="role is row (in grid)" data-expectedrole="row" class="ex">
+ <span role="columnheader" data-testname="role is columnheader (in row, in grid)" data-expectedrole="columnheader" class="ex">x</span>
+ <span role="columnheader">x</span>
+ </div>
+ <div role="row">
+ <span role="rowheader" data-testname="role is rowheader (in row, in grid)" data-expectedrole="rowheader" class="ex">x</span>
+ <span role="gridcell" data-testname="role is gridcell (in row, in grid)" data-expectedrole="gridcell" class="ex">x</span>
+ </div>
+ </div>
+
+ <div role="grid">
+ <div role="rowgroup" data-testname="role is rowgroup (in grid)" data-expectedrole="rowgroup" class="ex">
+ <div role="row" data-testname="role is row (in rowgroup, in grid)" data-expectedrole="row" class="ex">
+ <span role="columnheader" data-testname="role is columnheader (in row, in rowgroup, in grid)" data-expectedrole="columnheader" class="ex">x</span>
+ <span role="columnheader">x</span>
+ <span role="columnheader">x</span>
+ </div>
+ </div>
+ <div role="rowgroup">
+ <div role="row">
+ <span role="rowheader" data-testname="role is rowheader (in row, in rowgroup, in grid)" data-expectedrole="rowheader" class="ex">x</span>
+ <span role="gridcell" data-testname="role is gridcell (in row, in rowgroup, in grid)" data-expectedrole="gridcell" class="ex">x</span>
+ <span role="gridcell">x</span>
+ </div>
+ </div>
+ </div>
+
+ <span role="row" data-testname="orphaned row outside the context of table" class="ex-generic">x</span>
+ <span role="rowgroup" data-testname="orphaned rowgroup outside the context of row" class="ex-generic">x</span>
+ <div role="gridcell" data-testname="orphaned div with gridcell role outside the context of row" class="ex-generic">x</div>
+ <button role="gridcell" data-testname="orphaned button with gridcell role outside the context of row" data-expectedrole="button" class="ex">x</button>
+ <div role="rowheader" data-testname="orphaned rowheader outside the context of row" class="ex-generic">x</div>
+ <div role="columnheader" data-testname="orphaned columnheader outside the context of row" class="ex-generic">x</div>
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+AriaUtils.verifyGenericRolesBySelector(".ex-generic");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/invalid-roles.html b/testing/web-platform/tests/wai-aria/role/invalid-roles.html
new file mode 100644
index 0000000000..3f4255083e
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/invalid-roles.html
@@ -0,0 +1,135 @@
+<!doctype html>
+<html>
+<head>
+ <title>Invalid Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+ <meta charset="utf-8">
+</head>
+<body>
+
+<p>Tests invalid ARIA roles from <a href="https://w3c.github.io/aria/#document-handling_author-errors_roles">9.1 Roles - handling author errors</a>.</p>
+
+<!-- Tests fallback for <nav> when 1/2/3 invalid roles are supplied -->
+<nav role="foo" data-testname="nav with invalid role name foo" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="foo bar" data-testname="nav with two invalid role names" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="foo bar baz" data-testname="nav with three invalid role names" data-expectedrole="navigation" class="ex">x</nav>
+
+<!-- Tests fallback for <button> when 1/2/3 invalid roles are supplied -->
+<button role="foo" data-testname="button with invalid role name foo" data-expectedrole="button" class="ex">x</button>
+<button role="foo bar" data-testname="button with two invalid role names" data-expectedrole="button" class="ex">x</button>
+<button role="foo bar baz" data-testname="button with three invalid role names" data-expectedrole="button" class="ex">x</button>
+
+<!-- Tests fallback for semantically neutral elements when 1/2/3 invalid roles are supplied -->
+<span role="foo" data-testname="span with invalid role name foo" class="ex-generic">x</span>
+<span role="foo bar" data-testname="span with two invalid role names" class="ex-generic">x</span>
+<span role="foo bar baz" data-testname="span with three invalid role names" class="ex-generic">x</span>
+<div role="foo" data-testname="div with invalid role name foo" class="ex-generic">x</div>
+<div role="foo bar" data-testname="div with two invalid role names" class="ex-generic">x</div>
+<div role="foo bar baz" data-testname="div with three invalid role names"class="ex-generic">x</div>
+
+<!-- Whitespace tests with <nav> (including line breaks, tabs, zero-width space, braille space, non-breaking space, standard space) -->
+<nav role=" " data-testname="nav with empty character as role" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="&#13" data-testname="nav with line break (&#13) character as role" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="&#9" data-testname="nav with tab (&#9) as role (should be treated as whitespace)" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="&#8203" data-testname="nav with zero-width space as role (should be treated as whitespace)" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="&#10240" data-testname="nav with braille space (10240) as role" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="&#x2800" data-testname="nav with braille space (x2800) as role" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="&nbsp;" data-testname="nav with non-breaking space (nbsp) as role" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="&#20" data-testname="nav with standard space (nbsp) as role" data-expectedrole="navigation" class="ex">x</nav>
+
+<!-- Escaped whitespace tests with <span> (including line breaks, tabs, zero-width space, braille space, non-breaking space, standard space) -->
+<span role=" " data-testname="span with escaped empty character as role" class="ex-generic">x</span>
+<span role="&#13" data-testname="span with escaped line break (&#13) character as role" class="ex-generic">x</span>
+<span role="&#9" data-testname="span with escaped tab (&#9) as role (should be treated as whitespace)" class="ex-generic">x</span>
+<span role="&#8203" data-testname="span with escaped zero-width space as role (should be treated as whitespace)" class="ex-generic">x</span>
+<span role="&#10240" data-testname="span with escaped braille space (10240) as role" class="ex-generic">x</span>
+<span role="&#x2800" data-testname="span with escaped braille space (x2800) as role" class="ex-generic">x</span>
+<span role="&nbsp;" data-testname="span with escaped non-breaking space (nbsp) as role" class="ex-generic">x</span>
+<span role="&#20" data-testname="span with escaped standard space (nbsp) as role" class="ex-generic">x</span>
+
+<!-- Unescaped whitespace tests with <span> (including line breaks, tabs, zero-width space, braille space, non-breaking space, standard space) -->
+ <span role=" " data-testname="span with empty character as role" class="ex-generic">x</span>
+ <span role="
+ " data-testname="span with line break (&#13) character as role" class="ex-generic">x</span>
+ <span role=" " data-testname="span with tab (&#9) as role (should be treated as whitespace)" class="ex-generic">x</span>
+ <span role="‍" data-testname="span with zero-width space as role (should be treated as whitespace)" class="ex-generic">x</span>
+ <span role="⠀" data-testname="span with braille space (10240) as role" class="ex-generic">x</span>
+ <span role=" " data-testname="span with non-breaking space (nbsp) as role" class="ex-generic">x</span>
+ <span role=" " data-testname="span with standard space as role" class="ex-generic">x</span>
+
+<!-- Diacritics with <a> -->
+<a href="#" role="&#771" data-testname="link with role set to tilde diacritic" data-expectedrole="link" class="ex">x</a>
+<a href="#" role="foo&#771" data-testname="link with role foo that has tilde diacritic" data-expectedrole="link" class="ex">x</a>
+<a href="#" role="&#773" data-testname="link with role set to overline diacritic" data-expectedrole="link" class="ex">x</a>
+<a href="#" role="foo&#773" data-testname="link with role foo that has overline diacritic" data-expectedrole="link" class="ex">x</a>
+<a href="#" role="&#813" data-testname="link with role set to circumflex diacritic below" data-expectedrole="link" class="ex">x</a>
+<a href="#" role="foo&#813" data-testname="link with role foo that has circumflex diacritic below" data-expectedrole="link" class="ex">x</a>
+<a href="#" role="button&#771" data-testname="link with role set to button with tilde diacritic" data-expectedrole="link" class="ex">x</a>
+
+<!-- Diacritics with <div> -->
+<div role="&#771" data-testname="div with role set to tilde diacritic" class="ex-generic">x</div>
+<div role="foo&#771" data-testname="div with role foo that has tilde diacritic" class="ex-generic">x</div>
+<div role="button&#771" data-testname="div with role set to button with tilde diacritic" class="ex-generic">x</div>
+<div role="button´" data-testname="div with role set to button with unescaped tilde diacritic" class="ex-generic">x</div>
+
+<!-- Zero-width joiners (e.g., ZWJ like emoji variants use) with <button> -->
+<!-- [sic] role="‍" should include an invisible ZWJ], and role="link‍" ends with an invisible ZWJ. Use caution when editing. -->
+<button role="‍" data-testname="button with role set to zero-width joiner" data-expectedrole="button" class="ex">x</button>
+<button role="link‍" data-testname="button with role set to foo with zero-width joiner" data-expectedrole="button" class="ex">x</button>
+
+<!-- Non-western chars with <nav> -->
+<nav role="Θ" data-testname="nav with role set to theta (Θ)" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="ژ" data-testname="nav with role set to Persian character (ژ)" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="ژ ♮" data-testname="nav with multiple non-latin character roles, Persian character (ژ) and ♮" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="漢字" data-testname="nav with role set to Japanese kanji" data-expectedrole="navigation" class="ex">x</nav>
+
+<!-- Non-western chars with <span> -->
+<span role="Θ" data-testname="span with role set to theta (Θ)" class="ex-generic">x</span>
+<span role="ژ" data-testname="span with role set to Persian character (ژ)" class="ex-generic">x</span>
+<span role="ژ ♮" data-testname="span with multiple non-latin character roles, Persian character (ژ) and ♮" class="ex-generic">x</span>
+<span role="漢字" data-testname="span with role set to Japanese kanji" class="ex-generic">x</span>
+
+<!-- RTL strings (Hebrew & Arabic) with <nav> -->
+<nav role="سلام" data-testname="nav with role set to Arabic text" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="سلام حبيب" data-testname="nav with multiple role assignments set to Arabic text" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="שלום" data-testname="nav with role set to Hebrew text" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="שלום חבר" data-testname="nav with multiple role assignments set to Hebrew text" data-expectedrole="navigation" class="ex">x</nav>
+
+<!-- RTL strings (Hebrew & Arabic) with <div> -->
+<div role="سلام" data-testname="div with role set to Arabic text" class="ex-generic">x</div>
+<div role="سلام حبيب" data-testname="div with multiple role assignments set to Arabic text" class="ex-generic">x</div>
+<div role="שלום" data-testname="div with role set to Hebrew text" class="ex-generic">x</div>
+<div role="שלום חבר" data-testname="div with multiple role assignments set to Hebrew text" class="ex-generic">x</div>
+
+<!-- Escaped chars, URL-encoded chars with <a> -->
+<a href="https://www.apple.com/" role="&amp" data-testname="link with role set to ampersand character" data-expectedrole="link" class="ex">x</a>
+<a href="https://www.apple.com/" role="&lt" data-testname="link with role set to less than angle bracket character" data-expectedrole="link" class="ex">x</a>
+
+<!-- Escaped chars, URL-encoded chars with <span> -->
+<span role="&amp" data-testname="span with role set to ampersand character" class="ex-generic">x</span>
+<span role="&lt" data-testname="span with role set to less than angle bracket character" class="ex-generic">x</span>
+<span role="&" data-testname="span with role set to unescaped ampersand character" class="ex-generic">x</span>
+<span role="<" data-testname="span with role set to unescaped less than angle bracket character" class="ex-generic">x</span>
+
+<!-- Backslash closing quote and other malformed roles with characters with <nav> -->
+<nav role="region\" data-testname="nav with role set to region followed by backslash" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="\region" data-testname="nav with role set to backslash followed by region" data-expectedrole="navigation" class="ex">x</nav>
+<nav role="re/gion" data-testname="nav with role set to region with backslash after e character" data-expectedrole="navigation" class="ex">x</nav>
+
+<!-- Backslash closing quote and other malformed roles with characters with <span> -->
+<span role="region\" data-testname="span with role set to region followed by backslash" class="ex-generic">x</span>
+<span role="\region" data-testname="span with role set to backslash followed by region" class="ex-generic">x</span>
+<span role="re/gion" data-testname="span with role set to region with forward slash after e character" class="ex-generic">x</span>
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+AriaUtils.verifyGenericRolesBySelector(".ex-generic");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/list-roles.html b/testing/web-platform/tests/wai-aria/role/list-roles.html
new file mode 100644
index 0000000000..71c672c601
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/list-roles.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html>
+<head>
+ <title>List-related Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#list">list</a> and related roles.</p>
+
+<div role="list" data-testname="first simple list" data-expectedrole="list" class="ex">
+ <div role="listitem" data-testname="first simple listitem" data-expectedrole="listitem" class="ex">x</div>
+ <div role="listitem" data-testname="last simple listitem" data-expectedrole="listitem" class="ex">x</div>
+</div>
+
+<div role="listitem" data-testname="orphan div with listitem role" class="ex-generic">x</div>
+<p role="listitem" data-testname="orphan p with listitem role" data-expectedrole="paragraph" class="ex">x</p>
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/listbox-roles.html b/testing/web-platform/tests/wai-aria/role/listbox-roles.html
new file mode 100644
index 0000000000..5020822927
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/listbox-roles.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+<head>
+ <title>Listbox-related Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#listbox">listbox</a> and related roles.</p>
+
+<div role="listbox" data-testname="div role is listbox" data-expectedrole="listbox" class="ex">
+ <div role="option" data-testname="role is option (in div listbox)" data-expectedrole="option" class="ex">x</div>
+ <div role="group" data-testname="role is group (in div listbox)" data-expectedrole="group" class="ex">
+ <span role="option" data-testname="role is option (in group, in div listbox)" data-expectedrole="option" class="ex">x</span>
+ <span role="option">x</span>
+ </div>
+ <div role="option">x</div>
+</div>
+
+<ul role="listbox" data-testname="ul role is listbox" data-expectedrole="listbox" class="ex">
+ <li role="option" data-testname="li role is option (in ul listbox)" data-expectedrole="option" class="ex">
+ x
+ </li>
+ <li role="option">
+ x
+ </li>
+</ul>
+
+<nav role="option" data-testname="orphaned option outside the context of listbox" data-expectedrole="navigation"
+ class="ex">x
+</nav>
+
+<script>
+ AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/menu-roles.html b/testing/web-platform/tests/wai-aria/role/menu-roles.html
new file mode 100644
index 0000000000..4af4d8d2ff
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/menu-roles.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+<head>
+ <title>Menu-related Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<style>
+ /* Typically horizontal */
+ [role="menubar"] {
+ display: flex;
+ }
+</style>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#menu">menu</a> and related roles.</p>
+
+<div role="menu" data-testname="role is menu" data-expectedrole="menu" class="ex">
+ <div role="menuitem" data-testname="role is menuitem (in menu)" data-expectedrole="menuitem" class="ex">x</div>
+ <div role="menuitem">x</div>
+ <div role="menuitem">x</div>
+ <div role="group" data-testname="role is group (in menu)" data-expectedrole="group" class="ex">
+ <div role="menuitem" data-testname="role is menuitem (in group, in menu)" data-expectedrole="menuitem" class="ex">x</div>
+ <div role="menuitem">x</div>
+ </div>
+ <div role="group">
+ <div role="menuitemradio" aria-checked="true" data-testname="role is menuitemradio (in group, in menu)" data-expectedrole="menuitemradio" class="ex">x</div>
+ <div role="menuitemradio">x</div>
+ </div>
+ <div role="group">
+ <div role="menuitemcheckbox" aria-checked="true" data-testname="role is menuitemcheckbox (in group, in menu)" data-expectedrole="menuitemcheckbox" class="ex">x</div>
+ <div role="menuitemcheckbox">x</div>
+ </div>
+</div>
+
+<div role="menubar" data-testname="role is menubar" data-expectedrole="menubar" class="ex">
+ <div role="menuitem" data-testname="role is menuitem (in menubar)" data-expectedrole="menuitem" class="ex">x</div>
+ <div role="menuitem">x</div>
+ <div role="menuitem">x</div>
+ <div role="group" data-testname="role is group (in menubar)" data-expectedrole="group" class="ex">
+ <div role="menuitem" data-testname="role is menuitem (in group, in menubar)" data-expectedrole="menuitem" class="ex">x</div>
+ <div role="menuitem">x</div>
+ </div>
+ <div role="group">
+ <div role="menuitemradio" aria-checked="true" data-testname="role is menuitemradio (in group, in menubar)" data-expectedrole="menuitemradio" class="ex">x</div>
+ <div role="menuitemradio">x</div>
+ </div>
+ <div role="group">
+ <div role="menuitemcheckbox" aria-checked="true" data-testname="role is menuitemcheckbox (in group, in menubar)" data-expectedrole="menuitemcheckbox" class="ex">x</div>
+ <div role="menuitemcheckbox">x</div>
+ </div>
+</div>
+
+<nav role="menuitem" data-testname="orphaned menuitem outside the context of menu/menubar" data-expectedrole="navigation"
+ class="ex">x
+</nav>
+<nav role="menuitemradio" data-testname="orphaned menuitemradio outside the context of menu/menubar" data-expectedrole="navigation"
+ class="ex">x
+</nav>
+<nav role="menuitemcheckbox" data-testname="orphaned menuitemcheckbox outside the context of menu/menubar" data-expectedrole="navigation"
+ class="ex">x
+</nav>
+
+<button role="menuitem" data-testname="orphan button with menuitem role" data-expectedrole="button" class="ex">x</button>
+<div role="menuitem" data-testname="orphan div with menuitem role" class="ex-generic">x</div>
+
+<button role="menuitemcheckbox" data-testname="orphan button with menuitemcheckbox role" data-expectedrole="button" class="ex">x</button>
+<div role="menuitemcheckbox" data-testname="orphan div with menuitemcheckbox role" class="ex-generic">x</div>
+
+<button role="menuitemradio" data-testname="orphan button with menuitemradio role" data-expectedrole="button" class="ex">x</button>
+<div role="menuitemradio" data-testname="orphan div with menuitemradio role" class="ex-generic">x</div>
+
+<script>
+ AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/region-roles.html b/testing/web-platform/tests/wai-aria/role/region-roles.html
new file mode 100644
index 0000000000..d80570a97b
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/region-roles.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html>
+<head>
+ <title>Region Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#region">region</a> and related roles, as well as the "name from author" rule in <a href="https://w3c.github.io/aria/#document-handling_author-errors_roles">9.1 Roles - handling author errors</a>.</p>
+
+<!-- no label -->
+<nav role="region" data-testname="region without label" data-expectedrole="navigation" class="ex">x</nav>
+
+<!-- w/ label -->
+<nav role="region" data-testname="region with label" data-expectedrole="region" aria-label="x" class="ex">x</nav>
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/role_none_conflict_resolution.html b/testing/web-platform/tests/wai-aria/role/role_none_conflict_resolution.html
new file mode 100644
index 0000000000..9e2ee6ccfe
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/role_none_conflict_resolution.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html>
+<head>
+ <title>Role None Conflict Resolution Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Verifies <a href="https://w3c.github.io/aria/#conflict_resolution_presentation_none"></a>conflict resolution</a> requirements for the ARIA <a href="https://w3c.github.io/aria/#none">none</a> and <a href="https://w3c.github.io/aria/#presentation">presentation</a> roles.</p>
+
+<!-- none with label(global) on header -->
+<h1 role="none" data-testname="heading role none with global attr aria-label" data-expectedrole="heading" aria-label="x" class="ex">x</h1>
+
+<!-- none with label(global) on paragraph -->
+<p role="none" data-testname="p role none with global attr aria-label (prohibited role)" data-expectedrole="paragraph" aria-label="x" class="ex">x</p>
+<p role="none" data-testname="p role none without global attr aria-label (prohibited role)" class="ex-generic">x</p>
+
+<!-- none with focusable header -->
+<h1 role="none" data-testname="focusable heading role none with tabindex=0" data-expectedrole="heading" tabindex="0" class="ex">x</h1>
+<h1 role="none" data-testname="focusable heading role none with tabindex=-1" data-expectedrole="heading" tabindex="-1" class="ex">x</h1>
+<h1 role="none" data-testname="non-focusable heading role none" class="ex-generic">x</h1>
+
+<!-- none with non-global-->
+<h1 role="none" data-testname="none with non-global" class="ex-generic" aria-level="2"> Sample Content </h1>
+
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+AriaUtils.verifyGenericRolesBySelector(".ex-generic");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/roles.html b/testing/web-platform/tests/wai-aria/role/roles.html
new file mode 100644
index 0000000000..844da3ce47
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/roles.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<html>
+<head>
+ <title>Simple Core ARIA Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests most <a href="https://w3c.github.io/aria/#role_definitions">ARIA role definitions</a>. See comments for more info.</p>
+
+<script>
+
+/*
+
+Tests simple role assignment: <div role="alert">x</div>
+
+- Nested role structures (table>row>cell, etc) and
+ Abstract roles (e.g. widget, composite) are
+ commented with pointers to a separate test file.
+
+- ARIA extension specs (e.g. doc-*, graphics-*) are
+ commented with pointers to a separate spec directory.
+
+*/
+
+AriaUtils.assignAndVerifyRolesByRoleNames([
+ "alert",
+ "alertdialog",
+ "application",
+ "article",
+ // "associationlist" [AT-RISK: ARIA #1662] or possibly -> ./list-roles.html
+ // "associationlistitemkey" [AT-RISK: ARIA #1662] or possibly -> ./list-roles.html
+ // "associationlistitemvalue" [AT-RISK: ARIA #1662] or possibly -> ./list-roles.html
+ "banner",
+ "blockquote",
+ "button",
+ "caption",
+ // "cell" -> ./grid-roles.html
+ "checkbox",
+ "code",
+ // "columnheader" -> ./grid-roles.html
+ "combobox",
+ // "command" -> ./abstract-roles.html
+ // "comment" -> [AT-RISK: ARIA #1885]
+ "complementary",
+ // "composite" -> ./abstract-roles.html
+ "contentinfo",
+ "definition",
+ "deletion",
+ "dialog",
+ // "directory" -> FAIL. WONTFIX. Deprecated in ARIA 1.2; re-mapped to list role.
+ "document",
+ // doc-* roles -> TBD /dpub-aria or /dpub-aam
+ "emphasis",
+ "feed",
+ "figure",
+ // form -> ./form-roles.html
+ "generic",
+ // graphics-* roles -> /graphics-aria
+ // "grid" -> ./grid-roles.html
+ // "gridcell" -> ./grid-roles.html
+ "group",
+ "heading",
+ // "image" -> ./synonym-roles.html
+ // "img" -> ./synonym-roles.html
+ // "input" -> ./abstract-roles.html
+ "insertion",
+ // "landmark" -> ./abstract-roles.html
+ "link",
+ // "list" -> ./list-roles.html
+ // "listitem" -> ./list-roles.html
+ // "listitemkey" [See: ARIA #1662] or possibly -> ./list-roles.html
+ // "listitemvalue" [See: ARIA #1662] or possibly -> ./list-roles.html
+ // "listbox" -> ./listbox-roles.html
+ "log",
+ "main",
+ "marquee",
+ "math",
+ // "menu" -> ./menu-roles.html
+ // "menuitem" -> ./menu-roles.html
+ // "menuitemcheckbox" -> ./menu-roles.html
+ // "menuitemradio" -> ./menu-roles.html
+ // "menubar" -> ./menu-roles.html
+ "meter",
+ "navigation",
+ // "none" -> ./synonym-roles.html
+ "note",
+ // "option" -> ./listbox-roles.html
+ "paragraph",
+ // "presentation" -> ./synonym-roles.html
+ "progressbar",
+ "radio",
+ "radiogroup",
+ // "range" -> ./abstract-roles.html
+ // "region" -> ./region-roles.html
+ // "roletype" -> ./abstract-roles.html
+ // "row" -> ./grid-roles.html
+ // "rowgroup" -> ./grid-roles.html
+ // "rowheader" -> ./grid-roles.html
+ "scrollbar",
+ "search",
+ "searchbox",
+ // "section" -> ./abstract-roles.html
+ // "sectionhead" -> ./abstract-roles.html
+ // "select" -> ./abstract-roles.html
+ "separator",
+ "slider",
+ "spinbutton",
+ "status",
+ "strong",
+ // "structure" -> ./abstract-roles.html
+ "subscript",
+ "suggestion",
+ "superscript",
+ "switch",
+ // "tab" -> ./tab-roles.html
+ // "table" -> ./grid-roles.html
+ // "tablist" -> ./tab-roles.html
+ // "tabpanel" -> ./tab-roles.html
+ "term",
+ "textbox",
+ "time",
+ "timer",
+ "toolbar",
+ "tooltip",
+ // "tree" -> ./tree-roles.html
+ // "treeitem" -> ./tree-roles.html
+ // "treegrid" -> ./treegrid-roles.html
+ // "widget" -> ./abstract-roles.html
+ // "window" -> ./abstract-roles.html
+]);
+
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/synonym-roles.html b/testing/web-platform/tests/wai-aria/role/synonym-roles.html
new file mode 100644
index 0000000000..f9d3d7d0a9
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/synonym-roles.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html>
+<head>
+ <title>Region Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests synonym roles image/img and none/presentation via <a href="https://w3c.github.io/core-aam/#roleMappingComputedRole">Core-AAM Computed Role</a>.</p>
+
+<!-- spec resolution https://github.com/w3c/core-aam/issues/166 -->
+
+<div role="none" id="none" data-testname="none role == computedrole none" class="ex-generic">x</div><!-- preferred -->
+<div role="presentation" id="presentation" data-testname="synonym presentation role == computedrole none" class="ex-generic">x</div><!-- synonym -->
+
+<div role="image" id="image" data-expectedrole="image" data-testname="image role == computedrole image" class="ex">x</div><!-- preferred -->
+<div role="img" id="img" data-expectedrole="image" data-testname="synonym img role == computedrole image" class="ex">x</div><!-- synonym -->
+
+<!-- `directory` synonym deprecated in ARIA 1.2; these examples should all return computedrole `list` -->
+<ul role="list" id="list2" data-expectedrole="list" data-testname="list role == computedrole list" class="ex"><li>x</li></ul>
+<ul role="directory" id="directory" data-expectedrole="list" data-testname="directory role == computedrole list" class="ex"><li>x</li></ul>
+<div role="directory" id="div" data-expectedrole="list" data-testname="div w/directory role == computedrole list" class="ex"><div role="listitem">x</div></div>
+
+<script>
+AriaUtils.verifyRolesBySelector(".ex");
+AriaUtils.verifyGenericRolesBySelector(".ex-generic");
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/tab-roles.html b/testing/web-platform/tests/wai-aria/role/tab-roles.html
new file mode 100644
index 0000000000..e3d14741c8
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/tab-roles.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<html>
+<head>
+ <title>Tab-related Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#tab">tab</a> and related roles.</p>
+
+<!--<div> tab with tablist/tab/tabpanel semantics-->
+<div role="tablist" data-testname="div role is tablist" data-expectedrole="tablist" class="ex">
+ <div role="tab" data-testname="role is tab (in div tablist)" data-expectedrole="tab" class="ex">x</div>
+</div>
+<div role="tabpanel" data-testname="role is tabpanel (with sibling div tablist)" data-expectedrole="tabpanel" class="ex"></div>
+
+<!--<div> tabs with tablist/tab/tabpanel semantics, selection, no focus management-->
+<div role="tablist" data-testname="div role is tablist (with selection)" data-expectedrole="tablist" class="ex">
+ <div role="tab" aria-selected="true" data-testname="role is tab and tab is selected" data-expectedrole="tab" class="ex">x</div>
+ <div role="tab" aria-selected="false" data-testname="role is tab and tab is not selected" data-expectedrole="tab" class="ex">y</div>
+</div>
+<div role="tabpanel" data-testname="role is tabpanel (faux selected)" data-expectedrole="tabpanel" class="ex"></div>
+<div role="tabpanel" data-testname="role is tabpanel (faux unselected)" data-expectedrole="tabpanel" class="ex"></div>
+
+<!--<div> tabs with tablist/tab/tabpanel semantics, selection, roving tabindex-->
+<div role="tablist" data-testname="div role is tablist (with selection, roving tabindex)" data-expectedrole="tablist" class="ex">
+ <div role="tab" aria-selected="true" tabindex = "0" data-testname="role is tab, tab is selected and in tab order" data-expectedrole="tab" class="ex">x</div>
+ <div role="tab" aria-selected="false" tabindex = "-1" data-testname="role is tab and tab is not selected, not tabbable" data-expectedrole="tab" class="ex">y</div>
+ <div role="tab" aria-selected="false" tabindex = "-1" data-testname="role is tab and tab is not selected, not tabbable (duplicate)" data-expectedrole="tab" class="ex">z</div>
+</div>
+<div role="tabpanel" data-testname="role is tabpanel with selection, roving tabindex" data-expectedrole="tabpanel" class="ex"></div>
+<div role="tabpanel" data-testname="role is tabpanel with selection, roving tabindex (duplicate)" data-expectedrole="tabpanel" class="ex"></div>
+<div role="tabpanel" data-testname="role is tabpanel with selection, roving tabindex (duplicate 2)" data-expectedrole="tabpanel" class="ex"></div>
+
+<!--<div> tabs with tablist/tab/tabpanel semantics and non-empty tabpanel-->
+<div role="tablist" data-testname="div role is tablist (with non-empty tabpanel)" data-expectedrole="tablist" class="ex">
+ <div role="tab" aria-selected="true" data-testname="role is tab and tab is selected (with non-empty tabpanel content)" data-expectedrole="tab" class="ex">x</div>
+ <div role="tab" aria-selected="false" data-testname="role is tab and tab is not selected (with non-empty tabpanel content)" data-expectedrole="tab" class="ex">y</div>
+</div>
+<div role="tabpanel" data-testname="role is tabpanel with selection, non-empty content" data-expectedrole="tabpanel" class="ex">Tab one's stuff</div>
+<div role="tabpanel" data-testname="role is tabpanel with selection, non-empty content (duplicate)" data-expectedrole="tabpanel" class="ex">Tab two's stuff</div>
+
+<!--<div> tabs with tablist/tab/tabpanel semantics, non-empty tabpanel and aria-controls-->
+<div role="tablist" data-testname="div role is tablist (with non-empty tabpanel and aria-controls)" data-expectedrole="tablist" class="ex">
+ <div role="tab" aria-controls = "tabpanel1" aria-selected="true" data-testname="role is tab, tab is selected (with aria-controls)" data-expectedrole="tab" class="ex">x</div>
+ <div role="tab" aria-controls = "tabpanel2" aria-selected="false" data-testname="role is tab, tab is not selected (with aria-controls)" data-expectedrole="tab" class="ex">y</div>
+</div>
+<div role="tabpanel" id="tabpanel1" data-testname="role is tabpanel with aria-controls and non-empty content" data-expectedrole="tabpanel" class="ex">Tab one's stuff</div>
+<div role="tabpanel" id="tabpanel2" data-testname="role is tabpanel with aria-controls and non-empty content (duplicate)" data-expectedrole="tabpanel" class="ex">Tab one's stuff</div>
+
+<!--<div> tablist with child <button> that has explicit role="tab"-->
+<div role="tablist" data-testname="div role for button parent container is tablist" data-expectedrole="tablist" class="ex">
+ <button role="tab" data-testname="button role is tab (in div tablist)" data-expectedrole="tab" class="ex">x</div>
+</div>
+
+<!--<ul> tablist with child <divs> that have explicit role="tab"-->
+<ul role="tablist" data-testname="ul role is tablist" data-expectedrole="tablist" class="ex">
+ <li>
+ <div role="tab" aria-selected="true" tabindex = "0" data-testname="role is tab (within li), tab is selected and in tab order" data-expectedrole="tab" class="ex">x</div>
+ </li>
+ <li>
+ <div role="tab" aria-selected="false" tabindex = "-1" data-testname="role is tab (within li), tab is not selected and in tab order" data-expectedrole="tab" class="ex">y</div>
+ </li>
+</ul>
+<div role="tabpanel" data-testname="role is tabpanel as sibling to ul" data-expectedrole="tabpanel" class="ex">Tab one's stuff</div>
+<div role="tabpanel" data-testname="role is tabpanel as sibling to ul (duplicate)" data-expectedrole="tabpanel" class="ex">Tab two's stuff</div>
+
+<!--<ul> tablist with child <divs> that have explicit role="tab", role="none" on li elements-->
+ <ul role="tablist" data-testname="ul role is tablist (child li have role none)" data-expectedrole="tablist" class="ex">
+ <li role="none">
+ <div role="tab" aria-selected="true" tabindex = "0" data-testname="role is tab (within li with role none), tab is selected and in tab order" data-expectedrole="tab" class="ex">x</div>
+ </li>
+ <li role="none">
+ <div role="tab" aria-selected="false" tabindex = "-1" data-testname="role is tab (within li with role none), tab is not selected and in tab order" data-expectedrole="tab" class="ex">y</div>
+ </li>
+ </ul>
+ <div role="tabpanel" data-testname="role is tabpanel as sibling to ul with child role none li elements" data-expectedrole="tabpanel" class="ex">Tab one's stuff</div>
+ <div role="tabpanel" data-testname="role is tabpanel as sibling to ul with child role none li elements (duplicate)" data-expectedrole="tabpanel" class="ex">Tab two's stuff</div>
+
+<!--orphan tab semantics -->
+<button role="tab" data-testname="orphan button with tab role" data-expectedrole="button" class="ex">x</button>
+<span role="tab" data-testname="orphan span with tab role" class="ex-generic">x</span>
+
+<script>
+ AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/table-roles.html b/testing/web-platform/tests/wai-aria/role/table-roles.html
new file mode 100644
index 0000000000..6ffb94218d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/table-roles.html
@@ -0,0 +1,156 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Table Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+ </head>
+<body>
+ <p>Tests <a href="https://w3c.github.io/aria/#table">table</a> and related roles.</p>
+
+<!-- HTML <table> Elements Testing -->
+
+ <!-- <caption> -> wpt/html-aam/table-roles.html -->
+
+ <!-- <table> -> wpt/html-aam/table-roles.html -->
+ <!-- <tbody> -> wpt/html-aam/table-roles.html -->
+
+ <!-- <td> -> wpt/html-aam/table-roles.html -->
+
+ <!-- <tfoot> -> wpt/html-aam/table-roles.html -->
+
+ <!-- <th> -> wpt/html-aam/table-roles.html -->
+ <!-- <thead> -> wpt/html-aam/table-roles.html -->
+
+ <!-- <tr> -> wpt/html-aam/table-roles.html -->
+
+
+<!-- ARIA Grid Elements Testing -->
+
+ <!-- Grid roles tested in ./grid-roles.html -->
+
+
+<!-- ARIA Table Roles Testing -->
+
+ <!-- caption -->
+ <div role="table">
+ <div role="caption" data-testname="div role is caption (in div with table role)" data-expectedrole="caption" class="ex">x</div>
+ </div>
+
+ <p role="caption" data-testname="orphan p role is caption" data-expectedrole="caption" class="ex">x</p>
+
+ <!-- cell -->
+ <div role="table">
+ <div role="rowgroup">
+ <div role="row">
+ <span role="columnheader">x</span>
+ <span role="columnheader">x</span>
+ </div>
+ </div>
+ <div role="rowgroup">
+ <div role="row">
+ <span role="cell" data-testname="span role is cell (in div with row role, in div with rowgroup role, in div with table role)" data-expectedrole="cell" class="ex">x</span>
+ <span role="cell">x</span>
+ </div>
+ </div>
+ </div>
+
+ <span role="cell" data-testname="orphan span role is cell" data-expectedrole="cell" class="ex">x</span>
+
+ <!-- columnheader -->
+ <div role="table">
+ <div role="rowgroup">
+ <div role="row">
+ <span role="columnheader" data-testname="span role is columnheader (in div with row role, in div with rowgroup role, in div with table role)" data-expectedrole="columnheader" class="ex">x</span>
+ <span role="columnheader">x</span>
+ <span role="columnheader">x</span>
+ </div>
+ </div>
+ <div role="rowgroup">
+ <div role="row">
+ <span role="rowheader">x</span>
+ <span role="cell">x</span>
+ <span role="cell">x</span>
+ </div>
+ </div>
+ </div>
+
+ <!-- columnheader, orphaned -> ./grid-roles.html -->
+
+ <!-- row -->
+ <div role="table">
+ <div role="rowgroup">
+ <div role="row" data-testname="div role is row (in div with rowgroup role, in div with table role)" data-expectedrole="row" class="ex">
+ <span role="columnheader">x</span>
+ </div>
+ </div>
+ <div role="rowgroup">
+ <div role="row">
+ <span role="cell">x</span>
+ </div>
+ </div>
+ </div>
+
+ <!-- row, orphaned -> ./grid-roles.html -->
+
+ <!-- rowgroup -->
+ <div role="table">
+ <div role="rowgroup" data-testname="div role is rowgroup (in div with table role)" data-expectedrole="rowgroup" class="ex">
+ <div role="row">
+ <span role="columnheader">x</span>
+ <span role="columnheader">x</span>
+ </div>
+ </div>
+ <div role="rowgroup">
+ <div role="row">
+ <span role="cell">x</span>
+ <span role="cell">x</span>
+ </div>
+ </div>
+ </div>
+
+ <!-- rowgroup, orphaned -> ./grid-roles.html -->
+
+ <!-- rowheader -->
+ <div role="table">
+ <div role="rowgroup">
+ <div role="row">
+ <span role="columnheader">x</span>
+ <span role="columnheader">x</span>
+ <span role="columnheader">x</span>
+ </div>
+ </div>
+ <div role="rowgroup">
+ <div role="row">
+ <span role="rowheader" data-testname="role is rowheader (in div with row role, in div with rowgroup role, in div with table role)" data-expectedrole="rowheader" class="ex">x</span>
+ <span role="cell">x</span>
+ <span role="cell">x</span>
+ <span role="cell">x</span>
+ </div>
+ </div>
+ </div>
+
+ <!-- rowheader, orphaned -> ./grid-roles.html -->
+
+ <!-- table -->
+ <div role="table" data-testname="div role is table" data-expectedrole="table" class="ex">
+ <div role="row">
+ <span role="columnheader">x</span>
+ <span role="columnheader">x</span>
+ </div>
+ <div role="row">
+ <span role="cell">x</span>
+ <span role="cell">x</span>
+ </div>
+ </div>
+
+<script>
+ AriaUtils.verifyRolesBySelector(".ex");
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/role/tree-roles.html b/testing/web-platform/tests/wai-aria/role/tree-roles.html
new file mode 100644
index 0000000000..eb1084040d
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/role/tree-roles.html
@@ -0,0 +1,150 @@
+<!doctype html>
+<html>
+<head>
+ <title>Tree related Role Verification Tests</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+<style>
+ /* Hide collapsed rows */
+ [role="treegrid"] tr.hidden {
+ display: none;
+ }
+
+ /* Indents */
+ [role="treegrid"] tr[aria-level="2"] > td:first-child {
+ padding-left: 2ch;
+ }
+
+ [role="treegrid"] tr[aria-level="3"] > td:first-child {
+ padding-left: 4ch;
+ }
+
+ /* Collapse/expand icons */
+ [role="treegrid"] tr > td:first-child::before {
+ content: "";
+ display: inline-block;
+ width: 2ch;
+ height: 11px;
+ transition: transform 0.3s;
+ transform-origin: 5px 5px;
+ }
+
+ [role="treegrid"] tr[aria-expanded] > td:first-child::before,
+ [role="treegrid"] td[aria-expanded]:first-child::before {
+ cursor: pointer;
+
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12'%3E%3Cpolygon fill='black' points='2,0 2,10 10,5'%3E%3C/polygon%3E%3C/svg%3E%0A");
+ background-repeat: no-repeat;
+ }
+
+ [role="treegrid"] tr[aria-expanded="true"] > td:first-child::before,
+ [role="treegrid"] td[aria-expanded="true"]:first-child::before {
+ transform: rotate(90deg);
+ }
+</style>
+<body>
+
+<p>Tests <a href="https://w3c.github.io/aria/#tree">tree</a> and related roles.</p>
+
+<ul role="tree" data-testname="role is tree" data-expectedrole="tree" class="ex">
+ <li role="treeitem" data-testname="role is treeitem (in tree)" data-expectedrole="treeitem" class="ex">
+ x
+ <ul role="group" data-testname="role is group (in treeitem)" data-expectedrole="group" class="ex">
+ <li role="treeitem" data-testname="role is treeitem (in group, in treeitem)" data-expectedrole="treeitem" class="ex">x</li>
+ <li role="treeitem">x</li>
+ </ul>
+ </li>
+ <li role="treeitem">x</li>
+</ul>
+
+<table role="treegrid" data-testname="role is treegrid" data-expectedrole="treegrid" class="ex">
+ <tbody>
+ <tr role="row" aria-expanded="true" aria-level="1" aria-posinset="1" aria-setsize="2" data-testname="role is row (in treegrid)" data-expectedrole="row" class="ex expander">
+ <td role="gridcell" data-testname="role is gridcell (in row, in treegrid)" data-expectedrole="gridcell" class="ex">x</td>
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ </tr>
+ <tr role="row" aria-level="2" aria-posinset="1" aria-setsize="2">
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ </tr>
+ <tr aria-expanded="false" aria-level="2" aria-posinset="2" aria-setsize="2" role="row" class="expander">
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ </tr>
+ <tr role="row" aria-level="3" aria-posinset="1" aria-setsize="1" class="hidden">
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ </tr>
+ <tr role="row" aria-expanded="false" aria-level="1" aria-posinset="2" aria-setsize="2" class="expander">
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ </tr>
+ <tr role="row" aria-level="2" aria-posinset="1" aria-setsize="2" class="hidden">
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ </tr>
+ <tr role="row" aria-level="2" aria-posinset="1" aria-setsize="2" class="hidden">
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ <td role="gridcell">x</td>
+ </tr>
+ </tbody>
+</table>
+
+<nav role="treeitem" data-testname="orphaned treeitem outside the context of tree" data-expectedrole="navigation" class="ex">x</nav>
+<button role="treeitem" data-testname="orphaned button with treeitem role outside tree context" data-expectedrole="button" class="ex">x</button>
+
+<script>
+ AriaUtils.verifyRolesBySelector(".ex");
+
+ const expanders = document.querySelectorAll(".expander");
+ expanders.forEach((expander) => {
+ expander.addEventListener("click", () => {
+
+ const expanderLevel = parseInt(expander.getAttribute("aria-level"))
+ let nextSibling = expander.nextElementSibling;
+
+ // Toggle aria-expanded for the row being expanded
+ let isExpanding = expander.getAttribute("aria-expanded") !== "true";
+ expander.setAttribute("aria-expanded", isExpanding.toString());
+
+ while (nextSibling) {
+ const nextSiblingLevel = parseInt(nextSibling.getAttribute("aria-level"));
+
+ // Don't expand rows found on the same level
+ if (nextSiblingLevel === expanderLevel) nextSibling = null;
+
+ if (isExpanding) {
+ // Don't expand rows beyond the next level if an ".expander" row is found as the nextSibling
+ if (nextSiblingLevel - expanderLevel === 1) {
+ nextSibling.classList.remove("hidden");
+ // Don't expand sub rows found
+ if (nextSibling.hasAttribute("aria-expanded")) nextSibling.setAttribute("aria-expanded", "false");
+ }
+ } else {
+ // Only expand rows that are more "indented" than the ".expander" row. A higher aria-level indicates a
+ // higher "level"
+ if (nextSiblingLevel > expanderLevel) {
+ nextSibling.classList.add("hidden");
+ }
+ }
+
+ nextSibling = nextSibling.nextElementSibling;
+ }
+ });
+ });
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/wai-aria/scripts/ATTAcomm.js b/testing/web-platform/tests/wai-aria/scripts/ATTAcomm.js
new file mode 100644
index 0000000000..b748233fc2
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/scripts/ATTAcomm.js
@@ -0,0 +1,947 @@
+/* globals Promise, window, done, assert_true, on_event, promise_test */
+
+/**
+ * Creates an ATTAcomm object. If the parameters are supplied
+ * it sets up event listeners to send the test data to an ATTA if one
+ * is available. If the ATTA does not respond, it will assume the test
+ * is being done manually and the results are being entered in the
+ * parent test window.
+ *
+ * @constructor
+ * @param {object} params
+ * @param {string} [params.test] - object containing JSON test definition
+ * @param {string} [params.testFile] - URI of a file with JSON test definition
+ * @param {string} params.ATTAuri - URI to use to exercise the window
+ * @event DOMContentLoaded Calls go once DOM is fully loaded
+ * @returns {object} Reference to the new object
+ *
+ */
+
+function ATTAcomm(params) {
+ 'use strict';
+
+ this.Params = null; // parameters passed in
+ this.Promise = null; // master Promise that resolves when intialization is complete
+ this.Properties = null; // testharness_properties from the opening window
+ this.Tests = null; // test object being processed
+ this.testName = ""; // name of test being run
+ this.log = ""; // a buffer to capture log information for debugging
+ this.startReponse = {}; // startTest response will go in here for debugging
+
+ this.loading = true;
+
+ this.timeout = 5000;
+
+ var pending = [] ;
+
+ // set up in case DOM finishes loading early
+ pending.push(new Promise(function(resolve) {
+ on_event(document, "DOMContentLoaded", function() {
+ resolve(true);
+ }.bind(this));
+ }.bind(this)));
+
+ // if we are under runner, then there are props in the parent window
+ //
+ // if "output" is set in that, then pause at the end of running so the output
+ // can be analyzed. @@@TODO@@@
+ if (window && window.opener && window.opener.testharness_properties) {
+ this.Properties = window.opener.testharness_properties;
+ }
+
+ this.Params = params;
+
+ if (this.Params.hasOwnProperty("ATTAuri")) {
+ this.ATTAuri = this.Params.ATTAuri;
+ } else {
+ this.ATTAuri = "http://localhost:4119";
+ }
+
+ if (this.Params.hasOwnProperty("title")) {
+ this.testName = this.Params.title;
+ }
+
+ // start by loading the test (it might be inline, but
+ // loadTest deals with that
+ pending.push(this.loadTest(params)
+ .then(function(tests) {
+ // if the test is NOT an object, turn it into one
+ if (typeof tests === 'string') {
+ tests = JSON.parse(tests) ;
+ }
+
+ this.Tests = tests;
+
+ }.bind(this)));
+
+ this.Promise = new Promise(function(resolve, reject) {
+ // once the DOM and the test is loaded... set us up
+ Promise.all(pending)
+ .then(function() {
+ // Everything is loaded
+ this.loading = false ;
+ // run the automated tests (or setup for manual testing)
+ this.go();
+ resolve(this);
+ }.bind(this))
+ .catch(function(err) {
+ // loading the components failed somehow - report the errors and mark the test failed
+ test( function() {
+ assert_true(false, "Loading of test components failed: " +JSON.stringify(err)) ;
+ }, "Loading test components");
+ this.dumpLog();
+ done() ;
+ reject("Loading of test components failed: "+JSON.stringify(err));
+ return ;
+ }.bind(this));
+ }.bind(this));
+
+ return this;
+}
+
+ATTAcomm.prototype = {
+
+ /**
+ * go sets up the connection to the ATTA
+ *
+ * If that succeeds and the tests in this test file have methods for
+ * the API supported by the ATTA, then it automatically runs those tests.
+ *
+ * Otherwise it sets up for manualt testing.
+ */
+ go: function() {
+ 'use strict';
+ // everything is ready. Let's talk to the ATTA
+ this.startTest().then(function(res) {
+
+ // start was successful - iterate over steps
+ var API = res.body.API;
+
+ var subtestsForAPI = false;
+
+ // check main and potentially nested lists of tests for
+ // tests with this API. If any step is missing this API
+ // mapping, then we need to be manual
+ this.Tests.forEach(function(subtest) {
+ if (subtest.hasOwnProperty("test") &&
+ subtest.test.hasOwnProperty(API)) {
+ // there is at least one subtest for this API so
+ // this is a test that needs to be looked at by an atta
+ subtestsForAPI = true;
+ } else if (Array.isArray(subtest)) {
+ subtest.forEach(function(st) {
+ if (st.hasOwnProperty("test") &&
+ st.test.hasOwnProperty(API)) {
+ subtestsForAPI = true;
+ }
+ });
+ }
+ });
+
+ if (subtestsForAPI) {
+ this.runTests(API, this.Tests)
+ .then(function() {
+ // the tests all ran; close it out
+ this.endTest().then(function() {
+ this.dumpLog();
+ done();
+ }.bind(this));
+ }.bind(this))
+ .catch(function(err) {
+ this.endTest().then(function() {
+ this.dumpLog();
+ done();
+ }.bind(this));
+ }.bind(this));
+ } else {
+ // we don't know this API for this test
+ // but we ARE talking to an ATTA; skip this test
+ this.dumpLog();
+ if (window.opener && window.opener.completion_callback) {
+ window.opener.completion_callback([], { status: 3, message: "No steps for AT API " + API } );
+ } else {
+ done();
+ }
+ // this.setupManualTest("Unknown AT API: " + API);
+ }
+ }.bind(this))
+ .catch(function(res) {
+ // startTest failed so just sit and wait for a manual test to occur
+ if (res.timeout || res.status === 102) {
+ this.setupManualTest("No response from ATTA at " + this.ATTAuri);
+ } else if (res.status === 200 ) {
+ this.setupManualTest(res.message);
+ } else if (res.statusText === "No response from ATTA") {
+ this.setupManualTest("");
+ } else {
+ this.setupManualTest("Error from ATTA: " + res.status + ": " + res.statusText);
+ }
+ }.bind(this));
+ },
+
+ runTests: function(API, collection) {
+ // this method returns a promise
+
+ return new Promise(function(resolve, reject) {
+ // accumulate promises; complete when done
+ var pending = [];
+ var testCount = 0;
+
+ this.sendEvents(API, collection)
+ .then(function(eventStatus) {
+
+ /* Loop strategy...
+ *
+ * If the the step is a 'test' then push it into the pending queue as a promise
+ *
+ * If the step is anything else, then if there is anything in pending, wait on it
+ * Once it resolves, clear the queue and then execute the other step.
+ *
+ */
+ collection.forEach(function(subtest) {
+ // what "type" of step in the sequence is this?
+ var theType = "test" ;
+ if (Array.isArray(subtest)) {
+ // it is a group
+ Promise.all(pending).then(function() {
+ pending = [];
+ // recursively run the tests
+ pending.push(this.runTests(API, subtest));
+ }.bind(this));
+ } else if (subtest.hasOwnProperty("type")) {
+ theType = subtest.type;
+ }
+ testCount++;
+ if (theType === "test") {
+ // this is a set of assertions that should be evaluated
+ pending.push(this.runTest(testCount, API, subtest));
+ } else if (theType === "script") {
+ Promise.all(pending).then(function() {
+ pending = [];
+ // execute the script
+ this.runScript(testCount, subtest);
+ }.bind(this));
+ } else if (theType === "attribute") {
+ Promise.all(pending).then(function() {
+ pending = [];
+ // raise the event
+ this.handleAttribute(testCount, subtest);
+ }.bind(this));
+ // } else {
+ } else if (theType === "event") {
+ Promise.all(pending).then(function() {
+ pending = [];
+ // raise the event
+ this.raiseEvent(testCount, subtest);
+ }.bind(this));
+ // } else {
+ }
+ }.bind(this));
+
+ Promise.all(pending)
+ .then(function() {
+ // this collection all ran
+ if (eventStatus !== "NOEVENTS") {
+ // there were some events at the beginning
+ this.sendStopListen().then(function() {
+ resolve(true);
+ });
+ } else {
+ resolve(true);
+ }
+ }.bind(this));
+ }.bind(this));
+ }.bind(this));
+ },
+
+ setupManualTest: function(message) {
+ // if we determine the test should run manually, then expose all of the conditions that are
+ // in the TEST data structure so that a human can to the inspection and calculate the result
+ //
+ 'use strict';
+
+ var ref = document.getElementById("manualMode");
+ if (ref) {
+ // we have a manualMode block. Populate it
+ var content = "<h2>Manual Mode Enabled</h2><p>"+message+"</p>";
+ if (this.Tests.hasOwnProperty("description")) {
+ content += "<p>" + this.Tests.description + "</p>";
+ }
+ var theTable = "<table id='steps'><tr><th>Step</th><th>Type</th><th>Element ID</th><th>Assertions</th></tr>";
+ this.Tests.forEach(function(subtest) {
+ var type = "test";
+ if (subtest.hasOwnProperty("type")) {
+ type = subtest.type;
+ }
+ var id = "" ;
+ if (subtest.hasOwnProperty("element")) {
+ id = subtest.element;
+ }
+ theTable += "<tr><td class='step'>" + subtest.title +"</td>";
+ theTable += "<td class='type'>" + type + "</td>";
+ theTable += "<td class='element'>" + id +"</td>";
+
+ // now what do we put over here? depends on the type
+ if (type === "test") {
+ // it is a test; dump the assertions
+ theTable += "<td>" + this.buildAssertionTable(subtest.test) + "</td>";
+ } else if (type === "attribute" ) {
+ if (subtest.hasOwnProperty("attribute") && subtest.hasOwnProperty("value") && subtest.hasOwnProperty("element")) {
+ if (subtest.value === "none") {
+ theTable += "<td>Remove attribute <code>" + subtest.attribute + "</code> from the element with ID <code>" + subtest.element + "</code></td>";
+ } else {
+ theTable += "<td>Set attribute <code>" + subtest.attribute + "</code> on the element with ID <code>" + subtest.element + "</code> to the value <code>" + subtest.value + "</code></td>";
+ }
+ }
+ } else if (type === "event" ) {
+ // it is some events
+ if (subtest.hasOwnProperty("event") && subtest.hasOwnProperty("element")) {
+ theTable += "<td>Send event <code>" + subtest.event + "</code> to the element with ID <code>" + subtest.element + "</code></td>";
+ }
+ } else if (type === "script" ) {
+ // it is a script fragment
+ theTable += "<td>Script: " + subtest.script + "</td>";
+ } else {
+ theTable += "<td>Unknown type: " + type + "</td>";
+ }
+ theTable += "</tr>";
+
+
+ }.bind(this));
+
+ theTable += "</table>";
+ ref.innerHTML = content + theTable ;
+ }
+ },
+
+ buildAssertionTable: function(asserts) {
+ "use strict";
+ var output = "<table class='api'><tr><th>API Name</th><th colspan='4'>Assertions</th></tr>";
+ var APIs = [] ;
+ for (var k in asserts) {
+ if (asserts.hasOwnProperty(k)) {
+ APIs.push(k);
+ }
+ }
+
+ APIs.sort().forEach(function(theAPI) {
+ var rows = asserts[theAPI] ;
+ var height = rows.length;
+ output += "<tr><td rowspan='" + height + "' class='apiName'>"+theAPI+"</td>";
+ var lastRow = rows.length - 1;
+ rows.forEach(function(theRow, index) {
+ var span = 4 - theRow.length;
+ var colspan = span ? " colspan='"+span+"'" : "";
+ theRow.forEach(function(item) {
+ output += "<td" + colspan + ">" + item + "</td>";
+ });
+ output += "</tr>";
+ if (index < lastRow) {
+ output += "<tr>";
+ }
+ });
+ });
+
+ output += "</table>";
+ return output;
+ },
+
+ // eventList - find the events for an API
+ //
+ // @param {string} API
+ // @param {array} collection - a collection of tests
+ // @returns {array} list of event names
+
+ eventList: function(API, collection) {
+ var eventHash = {};
+
+ if (!API || API === "") {
+ return [];
+ }
+
+ collection.forEach(function(subtest) {
+ if (subtest.hasOwnProperty("test") &&
+ subtest.test.hasOwnProperty(API)) {
+ // this is a subtest for this API; look at the events
+ subtest.test[API].forEach(function(assert) {
+ // look for event names
+ if (assert[0] === "event" && assert[1] === "type" && assert[2] === "is") {
+ eventHash[assert[3]] = 1;
+ }
+ });
+ }
+ });
+
+ return Object.keys(eventHash);
+ },
+
+ // handleAttribute - set or clear an attribute
+ /**
+ * @param {integer} testNum - The subtest number
+ * @param {object} subtest - attribute information to set
+ */
+ handleAttribute: function(testNum, subtest) {
+ "use strict";
+ if (subtest) {
+ if (subtest.hasOwnProperty("attribute") && subtest.hasOwnProperty("element") && subtest.hasOwnProperty("value")) {
+ // update an attribute
+ try {
+ var node = document.getElementById(subtest.element);
+ if (node) {
+ if (subtest.value === "none") {
+ // remove this attribute
+ node.removeAttribute(subtest.attribute);
+ } else if (subtest.value === '""') {
+ node.setAttribute(subtest.attribute, "");
+ } else if (subtest.value.match(/^"/) ) {
+ var v = subtest.value;
+ v = v.replace(/^"/, '');
+ v = v.replace(/"$/, '');
+ node.setAttribute(subtest.attribute, v);
+ } else {
+ node.setAttribute(subtest.attribute, subtest.value);
+ }
+ }
+ }
+ catch (e) {
+ test(function() {
+ assert_true(false, "Subtest attribute failed to update: " +e);
+ }, "Attribute subtest " + testNum);
+ }
+ } else {
+ test(function() {
+ var err = "";
+ if (!subtest.hasOwnProperty("attribute")) {
+ err += "Attribute subtest has no attribute property; ";
+ } else if (!subtest.hasOwnProperty("value")) {
+ err += "Attribute subtest has no value property; ";
+ } else if (!subtest.hasOwnProperty("element")) {
+ err += "Attribute subtest has no element property; ";
+ }
+ assert_true(false, err);
+ }, "Attribute subtest " + testNum );
+ }
+ }
+ return;
+ },
+
+
+
+ // raiseEvent - throw an event at an item
+ /**
+ * @param {integer} testNum - The subtest number
+ * @param {object} subtest - event information to throw
+ */
+ raiseEvent: function(testNum, subtest) {
+ "use strict";
+ var evt;
+ if (subtest) {
+ var kp = function(target, key) {
+ evt = document.createEvent("KeyboardEvent");
+ evt.initKeyEvent ("keypress", true, true, window,
+ 0, 0, 0, 0, 0, "e".charCodeAt(0));
+ target.dispatchEvent(evt);
+ };
+ if (subtest.hasOwnProperty("event") && subtest.hasOwnProperty("element")) {
+ // throw an event
+ try {
+ var node = document.getElementById(subtest.element);
+ if (node) {
+ if (subtest.event === "focus") {
+ node.focus();
+ } else if (subtest.event === "select") {
+ node.click();
+ } else if (subtest.event.startsWith('key:')) {
+ var key = subtest.event.replace('key:', '');
+ evt = new KeyboardEvent("keypress", { "key": key});
+ node.dispatchEvent(evt);
+ } else {
+ evt = new Event(subtest.element);
+ node.dispatchEvent(evt);
+ }
+ }
+ }
+ catch (e) {
+ test(function() {
+ assert_true(false, "Subtest event failed to dispatch: " +e);
+ }, "Event subtest " + testNum);
+ }
+ } else {
+ test(function() {
+ var err = "";
+ if (!subtest.hasOwnProperty("event")) {
+ err += "Event subtest has no event property; ";
+ } else if (!subtest.hasOwnProperty("element")) {
+ err += "Event subtest has no element property; ";
+ }
+ assert_true(false, err);
+ }, "Event subtest " + testNum );
+ }
+ }
+ return;
+ },
+
+ // runScript - run a script in the context of the window
+ /**
+ * @param {integer} testNum - The subtest number
+ * @param {object} subtest - script and related information
+ */
+ runScript: function(testNum, subtest) {
+ "use strict";
+ if (subtest) {
+ if (subtest.hasOwnProperty("script") && typeof subtest.script === "string") {
+ try {
+ /* jshint evil:true */
+ eval(subtest.script);
+ }
+ catch (e) {
+ test(function() {
+ assert_true(false, "Subtest script " + subtest.script + " failed to evaluate: " +e);
+ }, "Event subtest " + testNum);
+ }
+ } else {
+ test(function() {
+ assert_true(false, "Event subtest has no script property");
+ }, "Event subtest " + testNum );
+ }
+ }
+ return;
+ },
+
+ // runTest - process subtest
+ /**
+ * @param {integer} testNum - The subtest number
+ * @param {string} API - name of the API being tested
+ * @param {object} subtest - a subtest to run; contains 'title', 'element', and
+ * 'test array'
+ * @returns {Promise} - a Promise that resolves when the test completes
+ */
+ runTest: function(testNum, API, subtest) {
+ 'use strict';
+
+ var data = {
+ "title" : subtest.title,
+ "id" : subtest.element,
+ "data": this.normalize(subtest.test[API])
+ };
+
+ return new Promise(function(resolve) {
+ var ANNO = this;
+ if (subtest.test[API]) {
+ // we actually have a test to run
+ promise_test(function() {
+ // force a resolve of the promise regardless
+ this.add_cleanup(function() { resolve(true); });
+ return ANNO.sendTest(data)
+ .then(function(res) {
+ if (typeof res.body === "object" && res.body.hasOwnProperty("status")) {
+ // we got some sort of response
+ if (res.body.status === "OK") {
+ // the test ran - yay!
+ var messages = "";
+ var thisResult = null;
+ var theLog = "";
+ var assertionCount = 0;
+ res.body.results.forEach( function (a) {
+ if (typeof a === "object") {
+ // we have a result for this assertion
+ // first, what is the assertion?
+ var aRef = data.data[assertionCount];
+ var assertionText = '"' + aRef.join(" ") +'"';
+
+ if (a.hasOwnProperty("log") && a.log !== null && a.log !== '' ) {
+ // there is log data - save it
+ theLog += "\n--- Assertion " + assertionCount + " ---";
+ theLog += "\nAssertion: " + assertionText + "\nLog data: "+a.log ;
+ }
+
+ // is there a message?
+ var theMessage = "";
+ if (a.hasOwnProperty("message")) {
+ theMessage = a.message;
+ }
+ if (!a.hasOwnProperty("result")) {
+ messages += "ATTA did not report a result " + theMessage + "; ";
+ } else if (a.result === "ERROR") {
+ messages += "ATTA reported ERROR with message: " + theMessage + "; ";
+ } else if (a.result === "FAIL") {
+ thisResult = false;
+ messages += assertionText + " failed " + theMessage + "; ";
+ } else if (a.result === "PASS" && thisResult === null) {
+ // if we got a pass and there was no other result thus far
+ // then we are passing
+ thisResult = true;
+ }
+ }
+ assertionCount++;
+ });
+ if (theLog !== "") {
+ ANNO.saveLog("runTest", theLog, subtest);
+ }
+ if (thisResult !== null) {
+ assert_true(thisResult, messages);
+ } else {
+ assert_true(false, "ERROR: No results reported from ATTA; " + messages);
+ }
+ } else if (res.body.status === "ERROR") {
+ assert_true(false, "ATTA returned ERROR with message: " + res.body.statusText);
+ } else {
+ assert_true(false, "ATTA returned unknown status " + res.body.status + " with message: " + res.body.statusText);
+ }
+ } else {
+ // the return wasn't an object!
+ assert_true(false, "ATTA failed to return a result object: returned: "+JSON.stringify(res));
+ }
+ });
+ }, subtest.name );
+ } else {
+ // there are no test steps for this API. fake a subtest result
+ promise_test(function() {
+ // force a resolve of the promise regardless
+ this.add_cleanup(function() { resolve(true); });
+ return new Promise(function(innerResolve) {
+ innerResolve(true);
+ })
+ .then(function(res) {
+ var theLog = "\nSUBTEST NOTRUN: No assertions for API " + API + "\n";
+ if (theLog !== "") {
+ ANNO.saveLog("runTest", theLog, subtest);
+ }
+ assert_false(true, "NOTRUN: No assertion for API " + API);
+ });
+ }, subtest.name );
+ }
+ }.bind(this));
+ },
+
+ // loadTest - load a test from an external JSON file
+ //
+ // returns a promise that resolves with the contents of the
+ // test
+
+ loadTest: function(params) {
+ 'use strict';
+
+ if (params.hasOwnProperty('stepFile')) {
+ // the test is referred to by a file name
+ return this._fetch("GET", params.stepFile);
+ } // else
+ return new Promise(function(resolve, reject) {
+ if (params.hasOwnProperty('steps')) {
+ resolve(params.steps);
+ } else {
+ reject("Must supply a 'steps' or 'stepFile' parameter");
+ }
+ });
+ },
+
+ /* dumpLog - put log information into the log div on the page if it exists
+ */
+
+ dumpLog: function() {
+ 'use strict';
+ if (this.log !== "") {
+ var ref = document.getElementById("ATTAmessages");
+ if (ref) {
+ // we have a manualMode block. Populate it
+ var content = "<h2>Logging information recorded</h2>";
+ if (this.startResponse && this.startResponse.hasOwnProperty("API")) {
+ content += "<h3>ATTA Information</h3>";
+ content += "<pre>"+JSON.stringify(this.startResponse, null, " ")+"</pre>";
+ }
+ content += "<textarea rows='50' style='width:100%'>"+this.log+"</textarea>";
+ ref.innerHTML = content ;
+ }
+ }
+ },
+
+ /* saveLog - capture logging information so that it can be displayed on the page after testing is complete
+ *
+ * @param {string} caller name
+ * @param {string} log message
+ * @param {object} subtest
+ */
+
+ saveLog: function(caller, message, subtest) {
+ 'use strict';
+
+ if (typeof message === "string" && message !== "") {
+ this.log += "============================================================\n";
+ this.log += "Message from " + caller + "\n";
+ if (subtest && typeof subtest === "object") {
+ var API = this.startResponse.API;
+ this.log += "\n SUBTEST TITLE: " + subtest.title;
+ this.log += "\n SUBTEST ELEMENT: " + subtest.element;
+ this.log += "\n SUBTEST DATA: " + JSON.stringify(subtest.test[API]);
+ this.log += "\n\n";
+ }
+ this.log += message;
+ }
+ return;
+ },
+
+ // startTest - send the test start message
+ //
+ // @returns {Promise} resolves if the start is successful, or rejects with
+
+ startTest: function() {
+ 'use strict';
+
+ return new Promise(function(resolve, reject) {
+ var params = {
+ test: this.testName || window.title,
+ url: document.location.href
+ };
+
+ this._fetch("POST", this.ATTAuri + "/start", null, params)
+ .then(function(res) {
+ if (res.body.hasOwnProperty("status")) {
+ if (res.body.status === "READY") {
+ this.startResponse = res.body;
+ if (res.body.hasOwnProperty("log")) {
+ // there is some logging data - capture it
+ this.saveLog("startTest", res.body.log);
+ }
+ // the system is ready for us - is it really?
+ if (res.body.hasOwnProperty("API")) {
+ resolve(res);
+ } else {
+ res.message = "No API in response from ATTA";
+ reject(res);
+ }
+ } else {
+ // the system reported something else - fail out with the statusText as a result
+ res.message = "ATTA reported an error: " + res.body.statusText;
+ reject(res);
+ }
+ } else {
+ res.message = "ATTA did not report a status";
+ reject(res);
+ }
+ }.bind(this))
+ .catch(function(res) {
+ reject(res);
+ });
+ }.bind(this));
+ },
+
+ // sendEvents - send the list of events the ATTA needs to listen for
+ //
+ // @param {string} API
+ // @param {array} collection - a list of tests
+ // @returns {Promise} resolves if the message is successful, or rejects with
+
+ sendEvents: function(API, collection) {
+ 'use strict';
+
+ return new Promise(function(resolve, reject) {
+ var eList = this.eventList(API, collection) ;
+ if (eList && eList.length) {
+ var params = {
+ events: eList
+ };
+
+ this._fetch("POST", this.ATTAuri + "/startlisten", null, params)
+ .then(function(res) {
+ if (res.body.hasOwnProperty("status")) {
+ if (res.body.status === "READY") {
+ if (res.body.hasOwnProperty("log")) {
+ // there is some logging data - capture it
+ this.saveLog("sendEvents", res.body.log);
+ }
+ resolve(res.body.status);
+ } else {
+ // the system reported something else - fail out with the statusText as a result
+ res.message = "ATTA reported an error: " + res.body.statusText;
+ reject(res);
+ }
+ } else {
+ res.message = "ATTA did not report a status";
+ reject(res);
+ }
+ }.bind(this))
+ .catch(function(res) {
+ reject(res);
+ });
+ } else {
+ // there are no events
+ resolve("NOEVENTS");
+ }
+ }.bind(this));
+ },
+
+ sendStopListen: function() {
+ 'use strict';
+
+ return this._fetch("POST", this.ATTAuri + "/stoplisten", null, null);
+ },
+
+ // sendTest - send test data to an ATTA and wait for a response
+ //
+ // returns a promise that resolves with the results of the test
+
+ sendTest: function(testData) {
+ 'use strict';
+
+ if (typeof testData !== "string") {
+ testData = JSON.stringify(testData);
+ }
+ var ret = this._fetch("POST", this.ATTAuri + "/test", null, testData, true);
+ ret.then(function(res) {
+ if (res.body.hasOwnProperty("log")) {
+ // there is some logging data - capture it
+ this.saveLog("sendTest", res.body.log);
+ }
+ }.bind(this));
+ return ret;
+ },
+
+ endTest: function() {
+ 'use strict';
+
+ return this._fetch("GET", this.ATTAuri + "/end");
+ },
+
+ /* normalize - ensure subtest data conforms to ATTA spec
+ */
+
+ normalize: function( data ) {
+ 'use strict';
+
+ var ret = [] ;
+
+ if (data) {
+ data.forEach(function(assert) {
+ var normal = [] ;
+ // ensure if there is a value list it is compressed
+ if (Array.isArray(assert)) {
+ // we have an array
+ normal[0] = assert[0];
+ normal[1] = assert[1];
+ normal[2] = assert[2];
+ if ("string" === typeof assert[3] && assert[3].match(/^\[.*\]$/)) {
+ // it is a string and matches the valuelist pattern
+ normal[3] = assert[3].replace(/, +/, ',');
+ } else {
+ normal[3] = assert[3];
+ }
+ ret.push(normal);
+ } else {
+ ret.push(assert);
+ }
+ });
+ }
+ return ret;
+ },
+
+ // _fetch - return a promise after sending data
+ //
+ // Resolves with the returned information in a structure
+ // including:
+ //
+ // xhr - a raw xhr object
+ // headers - an array of headers sent in the request
+ // status - the status code
+ // statusText - the text of the return status
+ // text - raw returned data
+ // body - an object parsed from the returned content
+ //
+
+ _fetch: function (method, url, headers, content, parse) {
+ 'use strict';
+ if (method === null || method === undefined) {
+ method = "GET";
+ }
+ if (parse === null || parse === undefined) {
+ parse = true;
+ }
+ if (headers === null || headers === undefined) {
+ headers = [];
+ }
+
+
+ // note that this Promise always resolves - there is no reject
+ // condition
+
+ return new Promise(function (resolve, reject) {
+ var xhr = new XMLHttpRequest();
+
+ // this gets returned when the request completes
+ var resp = {
+ xhr: xhr,
+ headers: null,
+ status: 0,
+ statusText: "",
+ body: null,
+ text: ""
+ };
+
+ xhr.open(method, url);
+
+ // headers?
+ headers.forEach(function(ref) {
+ xhr.setRequestHeader(ref[0], ref[1]);
+ });
+
+ //if (this.timeout) {
+ // xhr.timeout = this.timeout;
+ //}
+
+ xhr.ontimeout = function() {
+ resp.timeout = this.timeout;
+ resolve(resp);
+ };
+
+ xhr.onerror = function() {
+ if (this.status) {
+ resp.status = this.status;
+ resp.statusText = xhr.statusText;
+ } else if (this.status === 0) {
+ resp.status = 0;
+ resp.statusText = "No response from ATTA";
+ }
+ reject(resp);
+ };
+
+ xhr.onload = function () {
+ resp.status = this.status;
+ if (this.status >= 200 && this.status < 300) {
+ var d = xhr.response;
+ // return the raw text of the response
+ resp.text = d;
+ // we have it; what is it?
+ if (parse) {
+ try {
+ d = JSON.parse(d);
+ resp.body = d;
+ }
+ catch(err) {
+ resp.body = null;
+ }
+ }
+ resolve(resp);
+ } else {
+ reject({
+ status: this.status,
+ statusText: xhr.statusText
+ });
+ }
+ };
+
+ if (content !== null && content !== undefined) {
+ if ("object" === typeof(content)) {
+ xhr.send(JSON.stringify(content));
+ } else if ("function" === typeof(content)) {
+ xhr.send(content());
+ } else if ("string" === typeof(content)) {
+ xhr.send(content);
+ }
+ } else {
+ xhr.send();
+ }
+ });
+ },
+
+};
+
+// vim: set ts=2 sw=2:
diff --git a/testing/web-platform/tests/wai-aria/scripts/aria-utils.js b/testing/web-platform/tests/wai-aria/scripts/aria-utils.js
new file mode 100644
index 0000000000..ec53464c18
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/scripts/aria-utils.js
@@ -0,0 +1,196 @@
+/* Utilities related to WAI-ARIA */
+
+const AriaUtils = {
+
+ /*
+ Tests simple role assignment: <div role="alert">x</div>
+ Not intended for nested, context-dependent, or other complex role tests.
+
+ Ex: AriaUtils.assignAndVerifyRolesByRoleNames(["group", "main", "button"])
+
+ */
+ assignAndVerifyRolesByRoleNames: function(roleNames) {
+ if (!Array.isArray(roleNames) || !roleNames.length) {
+ throw `Param roleNames of assignAndVerifyRolesByRoleNames("${roleNames}") should be an array containing at least one role string.`;
+ }
+ for (const role of roleNames) {
+ promise_test(async t => {
+ let el = document.createElement("div");
+ el.appendChild(document.createTextNode("x"));
+ el.setAttribute("role", role); // el.role not yet supported by Gecko.
+ document.body.appendChild(el);
+ const computedRole = await test_driver.get_computed_role(el);
+ assert_equals(computedRole, role, el.outerHTML);
+ }, `role: ${role}`);
+ }
+ },
+
+
+ /*
+ Tests computed ROLE of all elements matching selector
+ against the string value of their data-expectedrole attribute.
+
+ Ex: <div role="list"
+ data-testname="optional unique test name"
+ data-expectedrole="list"
+ class="ex">
+
+ AriaUtils.verifyRolesBySelector(".ex")
+
+ */
+ verifyRolesBySelector: function(selector, roleTestNamePrefix) {
+ const els = document.querySelectorAll(selector);
+ if (!els.length) {
+ throw `Selector passed in verifyRolesBySelector("${selector}") should match at least one element.`;
+ }
+ for (const el of els) {
+ let role = el.getAttribute("data-expectedrole");
+ let testName = el.getAttribute("data-testname") || role; // data-testname optional if role is unique per test file
+ if (typeof roleTestNamePrefix !== "undefined") {
+ testName = roleTestNamePrefix + testName;
+ }
+ promise_test(async t => {
+ const expectedRole = el.getAttribute("data-expectedrole");
+ const computedRole = await test_driver.get_computed_role(el);
+ assert_equals(computedRole, expectedRole, el.outerHTML);
+ }, `${testName}`);
+ }
+ },
+
+
+ /*
+ Tests computed ROLE of selected elements matching selector
+ against the string value of provided roles array.
+
+ Ex: <foo
+ data-testname="verify fooRole or barRole role on span"
+ class="ex-foo-or-bar">
+
+ AriaUtils.verifyRoleOrVariantRolesBySelector(".ex-foo-or-bar", ["fooRole", "barRole"]);
+
+ See also helper function verifyGenericRolesBySelector shorthand of the above using ["generic", "", "none"].
+
+ Note: This function should not be used to circumvent unexpected interop differences in implementations.
+ It should only be used in specific cases (like "generic") determined by ARIA WG or other spec maintainers to be acceptable for the purposes of testing.
+
+ */
+ verifyRoleOrVariantRolesBySelector: function(selector, roles) {
+ const els = document.querySelectorAll(selector);
+ if (!els.length) {
+ throw `Selector "${selector}" should match at least one element.`;
+ }
+ if (!roles.length || roles.length < 2) {
+ throw `Roles array ["${roles.join('", "')}"] should include at least two strings, a primary role and at least one acceptable implementation-specific variant. E.g. ["generic", "", "none"]…`;
+ }
+ for (const el of els) {
+ let testName = el.getAttribute("data-testname");
+ promise_test(async t => {
+ const expectedRoles = roles;
+ const computedRole = await test_driver.get_computed_role(el);
+ for (role of roles){
+ if (computedRole === role) {
+ return assert_equals(computedRole, role, `Computed Role: "${computedRole}" matches one of the acceptable role strings in ["${roles.join('", "')}"]: ${el.outerHTML}`);
+ }
+ }
+ return assert_false(true, `Computed Role: "${computedRole}" does not match any of the acceptable role strings in ["${roles.join('", "')}"]: ${el.outerHTML}`);
+ }, `${testName}`);
+ }
+ },
+
+
+ /*
+ Helper function for "generic" ROLE tests.
+
+ Ex: <span
+ data-testname="verify generic, none, or empty computed role on span"
+ class="ex-generic">
+
+ AriaUtils.verifyGenericRolesBySelector(".ex-generic");
+
+ This helper function is equivalant to AriaUtils.verifyRoleOrVariantRolesBySelector(".ex-generic", ["generic", "", "none"]);
+ See various issues and discussions linked from https://github.com/web-platform-tests/interop-accessibility/issues/48
+
+ */
+ verifyGenericRolesBySelector: function(selector) {
+ // ARIA WG determined implementation variants "none" (Chromium), and the empty string "" (WebKit), are sufficiently equivalent to "generic" for WPT test verification of HTML-AAM.
+ // See various discussions linked from https://github.com/web-platform-tests/interop-accessibility/issues/48
+ this.verifyRoleOrVariantRolesBySelector(selector, ["generic", "", "none"]);
+ },
+
+
+ /*
+ Tests computed LABEL of all elements matching selector
+ against the string value of their data-expectedlabel attribute.
+
+ Ex: <div aria-label="foo"
+ data-testname="optional unique test name"
+ data-expectedlabel="foo"
+ class="ex">
+
+ AriaUtils.verifyLabelsBySelector(".ex")
+
+ */
+ verifyLabelsBySelector: function(selector, labelTestNamePrefix) {
+ const els = document.querySelectorAll(selector);
+ if (!els.length) {
+ throw `Selector passed in verifyLabelsBySelector("${selector}") should match at least one element.`;
+ }
+ for (const el of els) {
+ let label = el.getAttribute("data-expectedlabel");
+ let testName = el.getAttribute("data-testname") || label; // data-testname optional if label is unique per test file
+ if (typeof labelTestNamePrefix !== "undefined") {
+ testName = labelTestNamePrefix + testName;
+ }
+ promise_test(async t => {
+ const expectedLabel = el.getAttribute("data-expectedlabel");
+ let computedLabel = await test_driver.get_computed_label(el);
+ assert_not_equals(computedLabel, null, `get_computed_label(el) shouldn't return null for ${el.outerHTML}`);
+
+ // See:
+ // - https://github.com/w3c/accname/pull/165
+ // - https://github.com/w3c/accname/issues/192
+ // - https://github.com/w3c/accname/issues/208
+ //
+ // AccName references HTML's definition of ASCII Whitespace
+ // https://infra.spec.whatwg.org/#ascii-whitespace
+ // which matches tab (\t), newline (\n), formfeed (\f), return (\r), and regular space (\u0020).
+ // but it does NOT match non-breaking space (\xA0,\u00A0) and others matched by \s
+ const asciiWhitespace = /[\t\n\f\r\u0020]+/g;
+ computedLabel = computedLabel.replace(asciiWhitespace, '\u0020').replace(/^\u0020|\u0020$/g, '');
+
+ assert_equals(computedLabel, expectedLabel, el.outerHTML);
+ }, `${testName}`);
+ }
+ },
+
+
+ /*
+ Tests computed LABEL and ROLE of all elements matching selector using existing
+ verifyLabelsBySelector(), verifyRolesBySelector() functions and passes a test name prefix
+ to ensure uniqueness.
+
+ Ex: <div aria-label="foo" role="button"
+ data-testname="div with role=button is labelled via aria-label"
+ data-expectedlabel="foo"
+ data-expectedrole="button"
+ class="ex-role-and-label">
+
+ AriaUtils.verifyRolesAndLabelsBySelector(".ex-role-and-label")
+
+ */
+ verifyRolesAndLabelsBySelector: function(selector) {
+ let labelTestNamePrefix = "Label: ";
+ let roleTestNamePrefix = "Role: ";
+ const els = document.querySelectorAll(selector);
+ if (!els.length) {
+ throw `Selector passed in verifyRolesAndLabelsBySelector("${selector}") should match at least one element.`;
+ }
+ for (const el of els) {
+ el.classList.add("ex-label-only");
+ el.classList.add("ex-role-only");
+ }
+ this.verifyLabelsBySelector(".ex-label-only", labelTestNamePrefix);
+ this.verifyRolesBySelector(".ex-role-only", roleTestNamePrefix);
+ },
+};
+
diff --git a/testing/web-platform/tests/wai-aria/scripts/manual.css b/testing/web-platform/tests/wai-aria/scripts/manual.css
new file mode 100644
index 0000000000..0e4f4a03e4
--- /dev/null
+++ b/testing/web-platform/tests/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/testing/web-platform/tests/wai-aria/tools/convert_wiki.pl b/testing/web-platform/tests/wai-aria/tools/convert_wiki.pl
new file mode 100644
index 0000000000..d3415f2653
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/tools/convert_wiki.pl
@@ -0,0 +1,648 @@
+#!/usr/bin/perl
+#
+# convert_wiki.pl - Transform an old-style wiki into the new format
+#
+# This script assumes that a wiki has testable statement entries
+# with varying lemgth lines. Those lines will be converted into
+# the format described by the specification at
+# https://spec-ops.github.io/atta-api/index.html
+#
+# usage: convert_wiki.pl -f file | -w wiki_title -o outFile
+
+use strict;
+
+use IO::String ;
+use JSON ;
+use MediaWiki::API ;
+use Getopt::Long;
+
+my @apiNames = qw(UIA MSAA ATK IAccessible2 AXAPI);
+
+# dir is determined based upon the short name of the spec and is defined
+# by the input or on the command line
+
+my $file = undef ;
+my $spec = undef ;
+my $wiki_title = undef ;
+my $dir = undef;
+my $outFile = undef;
+
+my $result = GetOptions(
+ "f|file=s" => \$file,
+ "w|wiki=s" => \$wiki_title,
+ "s|spec=s" => \$spec,
+ "o|output=s" => \$outFile);
+
+my $wiki_config = {
+ "api_url" => "https://www.w3.org/wiki/api.php"
+};
+
+my %specs = (
+ "aria11" => {
+ title => "ARIA_1.1_Testable_Statements",
+ specURL => "https://www.w3.org/TR/wai-aria11"
+ },
+ "svg" => {
+ title => "SVG_Accessibility/Testing/Test_Assertions_with_Tables_for_ATTA",
+ specURL => "https://www.w3.org/TR/svg-aam-1.0/"
+ }
+);
+
+my $io ;
+our $theSpecURL = "";
+
+if ($spec) {
+ $wiki_title = $specs{$spec}->{title};
+ $theSpecURL = $specs{$spec}->{specURL};
+}
+
+if ($wiki_title) {
+ my $MW = MediaWiki::API->new( $wiki_config );
+ my $page = $MW->get_page( { title => $wiki_title } );
+ my $theContent = $page->{'*'};
+ $io = IO::String->new($theContent);
+} elsif ($file) {
+ open($io, "<", $file) || die("Failed to open $file: " . $@);
+} else {
+ usage() ;
+}
+
+my $outH ;
+if (defined $outFile) {
+ open($outH, ">", $outFile) || die("Failed to create file $outFile: $@");
+} else {
+ $outH = new IO::Handle;
+ $outH->fdopen(fileno(STDOUT), "w");
+}
+
+
+# Now let's walk through the content and spit it back out
+# transformed
+#
+
+# iterate over the content
+
+# my $io ;
+# open($io, "<", "raw") ;
+
+my $state = 0; # between items
+my $theCode = "";
+my $theAttributes = {};
+my $theAsserts = {} ;
+my $theAssertCount = 0;
+my $theAPI = "";
+my $typeRows = 0;
+my $theType = "";
+my $theName = "";
+my $theRef = "";
+
+my $before = "" ;
+my $after = "" ;
+
+my @errors = () ;
+my $linecount = 0;
+
+while (<$io>) {
+ $linecount++;
+ # look for state
+ if ($state == 0) {
+ if (scalar(keys(%$theAsserts))) {
+ # we were in an item; dump it
+ print $outH dump_table($theAsserts) ;
+ $theAsserts = {};
+ }
+ print $outH $_;
+ }
+ if (m/^\{\|/) {
+ # table started
+ $state = 4;
+ $theAPI = "";
+ }
+ if ($state == 4) {
+ if (m/^\|-/) {
+ if ($theAPI
+ && exists($theAsserts->{$theAPI}->[$theAssertCount])
+ && scalar(@{$theAsserts->{$theAPI}->[$theAssertCount]})) {
+ $theAssertCount++;
+ }
+ # start of a table row
+ if ($theType ne "" && $typeRows) {
+ # we are still processing items for a type
+ $typeRows--;
+ # populate the first cell
+ $theAsserts->{$theAPI}->[$theAssertCount] = [ $theType ] ;
+ } else {
+ $theType = "";
+ }
+ } elsif (m/^\|\}/) {
+ # ran out of table
+ $state = 0;
+ } elsif (m/^\|rowspan="*([0-9])"*\|(.*)$/) {
+ # someone put a rowspan in here.. is ht an API?
+ my $rows = $1;
+ my $theString = $2;
+ $theString =~ s/ +$//;
+ $theString =~ s/^ +//;
+ $theString = "IAccessible2" if ($theString eq "IA2") ;
+ if (grep { $_ eq $theString } @apiNames) {
+ $theAssertCount = 0;
+ # this is a new API section
+ $theAPI = $theString ;
+ $theAsserts->{$theAPI} = [ [] ] ;
+ $theType = "";
+ } else {
+ # nope, this is a multi-row type
+ $theType = $theString;
+ $typeRows = $rows;
+ $typeRows--;
+ # populate the first cell
+ if ($theAPI
+ && exists($theAsserts->{$theAPI}->[$theAssertCount])
+ && scalar(@{$theAsserts->{$theAPI}->[$theAssertCount]})) {
+ $theAssertCount++;
+ }
+ $theAsserts->{$theAPI}->[$theAssertCount] = [ $theType ] ;
+ }
+ } elsif (m/^\|note/) {
+ # there is a note in the table... throw it out
+ # and the next line too
+ my $l = <$io>;
+ } elsif (m/^\|(MSAA|UIA|IA2|IAccessible2|ATK|AXAPI) *$/) {
+ # they FORGOT a rowspan on an API. That means there is only 1
+ # row
+ my $theString = $1;
+ $theString =~ s/ +$//;
+ $theString =~ s/^ +//;
+ $theString = "IAccessible2" if ($theString eq "IA2") ;
+ if (grep { $_ eq $theString } @apiNames) {
+ $theAssertCount = 0;
+ # this is a new API section
+ $theAPI = $theString ;
+ $theAsserts->{$theAPI} = [ [] ] ;
+ $theType = "";
+ } else {
+ push(@errors, "Bad API Name at $linecount: $theString");
+ }
+ } elsif (m/^\|(.*)$/) {
+ my $item = $1;
+ $item =~ s/^ *//;
+ $item =~ s/ *$//;
+ $item =~ s/^['"]//;
+ $item =~ s/['"]$//;
+ # add into the data structure for the API
+ if (!exists $theAsserts->{$theAPI}->[$theAssertCount]) {
+ $theAsserts->{$theAPI}->[$theAssertCount] = [ $item ] ;
+ } else {
+ push(@{$theAsserts->{$theAPI}->[$theAssertCount]}, $item);
+ }
+ }
+ next;
+ }
+};
+
+if ($state == 0) {
+ if (scalar(keys(%$theAsserts))) {
+ # we were in an item; dump it
+ print $outH dump_table($theAsserts) ;
+ }
+}
+
+if (@errors) {
+ print "There were the following errors:\n";
+ foreach my $err (@errors) {
+ print $err . "\n";
+ }
+}
+
+exit 0;
+
+
+sub dump_table() {
+ my $asserts = shift;
+
+ if (!scalar(keys(%$asserts)) ) {
+ # no actual assertions
+ return "";
+ }
+
+ my $output = "" ;
+
+ my @keywords = qw(property result event);
+
+ foreach my $API (sort(keys(%$asserts))) {
+ # looking at each API in turn
+ my $ref = $asserts->{$API};
+ my $rowcount = scalar(@$ref) ;
+ # $output .= "|-\n|rowspan=$count|$API\n" ;
+ # now we are in the assertions; special case each API
+ my @conditions = @$ref;
+ for (my $i = 0; $i < scalar(@conditions); $i++) {
+ my (@new, @additional) ;
+ if ($i) {
+ $output .= "|-\n";
+ }
+ if ($API eq "ATK") {
+ my $start = 0;
+ my $assert = "is";
+ if ($conditions[$i]->[0] =~ m/^NOT/) {
+ $start = 1;
+ $assert = "isNot";
+ }
+
+ if ($conditions[$i]->[$start] =~ m/^ROLE_/) {
+ $new[0] = "property";
+ $new[1] = "role";
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start];
+ } elsif ($conditions[$i]->[$start] =~ m/^xml-roles/) {
+ $new[0] = "property";
+ $new[1] = "role";
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/^description/) {
+ my $id = $conditions[$i]->[$start+1];
+ $new[0] = "property";
+ $new[1] = "description";
+ $new[2] = $assert;
+ $new[3] = $id;
+ push(@{$additional[0]}, ("relation", "RELATION_DESCRIBED_BY", $assert, $id));
+ push(@{$additional[1]}, ("relation", "RELATION_DESCRIPTION_FOR", $assert, "test"));
+ } elsif ($conditions[$i]->[$start] =~ m/not in accessibility tree/i) {
+ @new = qw(property accessible exists false);
+ } elsif ($conditions[$i]->[$start] =~ m/^RELATION/) {
+ $new[0] = "relation";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/(.*) interface/i) {
+ $new[0] = "property";
+ $new[1] = "interfaces";
+ $new[3] = $1;
+ if ($conditions[$i]->[$start+1] ne '<shown>'
+ && $conditions[$i]->[$start+1] !~ m/true/i ) {
+ $assert = "doesNotContain";
+ } else {
+ $assert = "contains";
+ }
+ $new[2] = $assert;
+ } elsif ($conditions[$i]->[$start] eq "object" || $conditions[$i]->[$start] eq "attribute" ) {
+ $new[0] = "property";
+ $new[1] = "objectAttributes";
+ my $val = $conditions[$i]->[2];
+ $val =~ s/"//g;
+ $new[3] = $conditions[$i]->[1] . ":" . $val;
+ if ($conditions[$i]->[1] eq "not exposed"
+ || $conditions[$i]->[2] eq "false") {
+ $new[2] = "doesNotContain";
+ } else {
+ $new[2] = "contains";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/^STATE_/) {
+ $new[0] = "property";
+ $new[1] = "states";
+ $new[3] = $conditions[$i]->[$start];
+ if ($assert eq "true") {
+ $new[2] = "contains";
+ } else {
+ $new[2] = "doesNotContain";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/^object attribute (.*)/) {
+ my $name = $1;
+ $new[0] = "property";
+ $new[0] = "objectAttributes";
+ my $val = $conditions[$i]->[1];
+ $val =~ s/"//g;
+ if ($val eq "not exposed" || $val eq "not mapped") {
+ $new[3] = $name;
+ $new[2] = "doesNotContain";
+ } else {
+ $new[3] = $name . ":" . $val;
+ $new[2] = "contains";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/^name/) {
+ my $name = $conditions[$i]->[1];
+ my $cond = "is" ;
+ if ($name eq "<empty>" ) {
+ $cond = "empty";
+ $name = "true"
+ } elsif ($name eq "<not empty>") {
+ $cond = "empty";
+ $name = "false";
+ }
+ $new[0] = "property";
+ $new[1] = "name";
+ $new[2] = $cond;
+ $new[3] = $name;
+ } else {
+ @new = @{$conditions[$i]};
+ if ($conditions[$i]->[2] eq '<shown>') {
+ $new[2] = "contains";
+ }
+ }
+ $conditions[$i] = \@new;
+ } elsif ($API eq "UIA") {
+ my $start = 0;
+ my $assert = "is";
+ if ($conditions[$i]->[$start] =~ m/\./) {
+ my $val = $conditions[$i]->[$start+1];
+ $val =~ s/"//g;
+ $val =~ s/'//g;
+ $new[0] = "result";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/not in accessibility tree/i) {
+ @new = qw(property accessible exists false);
+ } elsif ($conditions[$i]->[$start] =~ m/^(AriaProperties|Toggle|ExpandCollapse)/) {
+ my $name = $conditions[$i]->[1];
+ $new[0] = "property";
+ $new[1] = $1;
+ my $val = $conditions[$i]->[2];
+ $val =~ s/"//g;
+ if ($val eq "not exposed" || $val eq "not mapped") {
+ $new[3] = $name;
+ $new[2] = "doesNotContain";
+ } else {
+ $new[3] = $name . ":" . $val;
+ $new[2] = "contains";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/^LabeledBy/i) {
+ $new[0] = "property";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/^Name/) {
+ my $name = $conditions[$i]->[1];
+ my $cond = "is" ;
+ if ($name eq "<empty>" ) {
+ $cond = "empty";
+ $name = "true"
+ } elsif ($name eq "<not empty>") {
+ $cond = "empty";
+ $name = "false";
+ }
+ $new[0] = "property";
+ $new[1] = "Name";
+ $new[2] = $cond;
+ $new[3] = $name;
+ } elsif ($conditions[$i]->[$start] =~ m/^TBD/) {
+ $new[0] = "TBD";
+ $new[1] = $new[2] = $new[3] = "";
+ } else {
+ if ($conditions[$i]->[1] ne '<shown>'
+ && $conditions[$i]->[1] !~ m/true/i ) {
+ $assert = "isNot";
+ } else {
+ $assert = "is";
+ }
+ $new[0] = "property";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ }
+ } elsif ($API eq "MSAA") {
+ my $start = 0;
+ my $assert = "is";
+ if ($conditions[$i]->[0] =~ m/^NOT/) {
+ $start = 1;
+ $assert = "isNot";
+ }
+
+ if ($conditions[$i]->[$start] =~ m/^role/) {
+ $new[0] = "property";
+ $new[1] = "role";
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/^xml-roles/) {
+ $new[0] = "property";
+ $new[1] = "role";
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/not in accessibility tree/i) {
+ @new = qw(property accessible exists false);
+ } elsif ($conditions[$i]->[$start] =~ m/^(accName|accDescription)/) {
+ my $name = $conditions[$i]->[$start+1];
+ my $cond = "is" ;
+ if ($name eq "<empty>" ) {
+ $cond = "empty";
+ $name = "true"
+ } elsif ($name eq "<not empty>") {
+ $cond = "empty";
+ $name = "false";
+ }
+ $new[0] = "property";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $cond;
+ $new[3] = $name;
+ } elsif ($conditions[$i]->[$start] =~ m/^ROLE_/) {
+ $new[0] = "property";
+ $new[1] = "role";
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start];
+ } elsif ($conditions[$i]->[$start] =~ m/^(STATE_.*) *([^ ]*)/) {
+ $new[0] = "property";
+ $new[1] = "states";
+ $new[3] = $1;
+ if ($2 && $2 eq "cleared") {
+ print "MATCHED $1, $2\n";
+ $new[2] = "doesNotContain";
+ } else {
+ $new[2] = "contains";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/^TBD/) {
+ $new[0] = "TBD";
+ $new[1] = $new[2] = $new[3] = "";
+ }
+ } elsif ($API eq "IAccessible2") {
+ my $start = 0;
+ my $assert = "is";
+ if ($conditions[$i]->[0] =~ m/^NOT/) {
+ $start = 1;
+ $assert = "isNot";
+ }
+ if ($conditions[$i]->[$start] =~ m/^IA2_ROLE_/) {
+ $new[0] = "property";
+ $new[1] = "role";
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start];
+ } elsif ($conditions[$i]->[$start] =~ m/not in accessibility tree/i) {
+ @new = qw(property accessible exists false);
+ } elsif ($conditions[$i]->[$start] =~ m/^IA2_RELATION_/) {
+ $new[0] = "relation";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/^IA2_STATE_/) {
+ $new[0] = "property";
+ $new[1] = "states";
+ $new[3] = $conditions[$i]->[$start];
+ if ($assert eq "true") {
+ $new[2] = "contains";
+ } else {
+ $new[2] = "doesNotContain";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/^IA2_/) {
+ $new[0] = "property";
+ $new[1] = "states";
+ $new[3] = $conditions[$i]->[$start];
+ if ($assert eq "true") {
+ $new[2] = "contains";
+ } else {
+ $new[2] = "doesNotContain";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/(IAccessibleTable2)/i) {
+ $new[0] = "property";
+ $new[1] = "interfaces";
+ $new[3] = $1;
+ if ($conditions[$i]->[$start+1] ne '<shown>'
+ && $conditions[$i]->[$start+1] !~ m/true/i ) {
+ $assert = "doesNotContain";
+ } else {
+ $assert = "contains";
+ }
+ $new[2] = $assert;
+ } elsif ($conditions[$i]->[$start] =~ m/(.*) interface/i) {
+ $new[0] = "property";
+ $new[1] = "interfaces";
+ $new[3] = $1;
+ if ($conditions[$i]->[$start+1] ne '<shown>'
+ && $conditions[$i]->[$start+1] !~ m/true/i ) {
+ $assert = "doesNotContain";
+ } else {
+ $assert = "contains";
+ }
+ $new[2] = $assert;
+ } elsif ($conditions[$i]->[$start] =~ m/(.*)\(\)/) {
+ $new[0] = "result";
+ $new[1] = $conditions[$i]->[$start];
+ my $val = $conditions[$i]->[2];
+ $val =~ s/"//g;
+ $new[3] = $conditions[$i]->[1] . ":" . $val;
+ if ($conditions[$i]->[1] eq "not exposed"
+ || $conditions[$i]->[2] eq "false") {
+ $new[2] = "doesNotContain";
+ } else {
+ $new[2] = "contains";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/(.*localizedExtendedRole)/) {
+ $new[0] = "result";
+ $new[1] = $conditions[$i]->[$start];
+ my $val = $conditions[$i]->[2];
+ $val =~ s/"//g;
+ $new[3] = $conditions[$i]->[1] . ":" . $val;
+ if ($conditions[$i]->[1] eq "not exposed"
+ || $conditions[$i]->[2] eq "false") {
+ $new[2] = "doesNotContain";
+ } else {
+ $new[2] = "contains";
+ }
+ } elsif ($conditions[$i]->[$start] eq "object" || $conditions[$i]->[$start] eq "attribute" ) {
+ $new[0] = "property";
+ $new[1] = "objectAttributes";
+ my $val = $conditions[$i]->[2];
+ $val =~ s/"//g;
+ $new[3] = $conditions[$i]->[1] . ":" . $val;
+ if ($conditions[$i]->[1] eq "not exposed"
+ || $conditions[$i]->[2] eq "false") {
+ $new[2] = "doesNotContain";
+ } else {
+ $new[2] = "contains";
+ }
+ } elsif ($conditions[$i]->[$start] =~ m/^object attribute (.*)/) {
+ my $name = $1;
+ $new[0] = "property";
+ $new[1] = "objectAttributes";
+ my $val = $conditions[$i]->[1];
+ $val =~ s/"//g;
+ if ($val eq "not exposed" || $val eq "not mapped") {
+ $new[3] = $name;
+ $new[2] = "doesNotContain";
+ } else {
+ $new[3] = $name . ":" . $val;
+ $new[2] = "contains";
+ }
+ } else {
+ @new = @{$conditions[$i]};
+ if ($conditions[$i]->[2] eq '<shown>') {
+ $new[2] = "contains";
+ }
+ }
+ $conditions[$i] = \@new;
+ } elsif ($API eq "AXAPI") {
+ my $start = 0;
+ my $assert = "is";
+ if ($conditions[$i]->[0] =~ m/^NOT/) {
+ $start = 1;
+ $assert = "isNot";
+ }
+ if ($conditions[$i]->[$start] =~ m/^AXElementBusy/) {
+ if ($conditions[$i]->[$start+1] =~ m/yes/i) {
+ $new[3] = "true";
+ } else {
+ $new[3] = "false";
+ }
+ $new[0] = "property";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $assert;
+ } elsif ($conditions[$i]->[$start] =~ m/not in accessibility tree/i) {
+ @new = qw(property accessible exists false);
+ } elsif ($conditions[$i]->[$start] =~ m/^AX/) {
+ $new[0] = "property";
+ $new[1] = $conditions[$i]->[$start];
+ $new[2] = $assert;
+ $new[3] = $conditions[$i]->[$start+1];
+ } elsif ($conditions[$i]->[$start] =~ m/^TBD/) {
+ $new[0] = "TBD";
+ $new[1] = $new[2] = $new[3] = "";
+ } else {
+ if ($conditions[$i]->[1] ne '<shown>'
+ && $conditions[$i]->[1] !~ m/true/i ) {
+ $assert = "isNot";
+ } else {
+ $assert = "is";
+ }
+ $new[0] = "result";
+ $new[1] = $conditions[$i]->[0];
+ $new[2] = $assert;
+ $new[3] = "true";
+ }
+ }
+ if ($i == 0) {
+ if (scalar(@additional)) {
+ $rowcount += scalar(@additional);
+ }
+ $output .= "|-\n|rowspan=$rowcount|$API\n";
+ }
+ foreach my $row (@new) {
+ $output .= "|$row\n";
+ }
+ if (scalar(@additional)) {
+ foreach my $arow (@additional) {
+ $output .= "|-\n" ;
+ foreach my $aItem (@$arow) {
+ $output .= "|$aItem\n";
+ }
+ }
+ }
+ }
+ }
+ $output .= "|}\n";
+
+ return $output;
+}
+
+sub usage() {
+ print STDERR q(usage: make_tests.pl -f file | -w wiki_title | -s spec [-n -v -d dir ]
+
+ -s specname - the name of a spec known to the system
+ -w wiki_title - the TITLE of a wiki page with testable statements
+ -f file - the file from which to read
+ -o outFile - the file to fill with the converted wiki; defaults to STDOUT
+
+ -n - do nothing
+ -v - be verbose
+ );
+ exit 1;
+}
+
+# vim: ts=2 sw=2 ai:
diff --git a/testing/web-platform/tests/wai-aria/tools/make_tests.pl b/testing/web-platform/tests/wai-aria/tools/make_tests.pl
new file mode 100644
index 0000000000..01cb5b0b85
--- /dev/null
+++ b/testing/web-platform/tests/wai-aria/tools/make_tests.pl
@@ -0,0 +1,544 @@
+#!/usr/bin/perl
+#
+# make_tests.pl - generate WPT test cases from the testable statements wiki
+#
+# This script assumes that a wiki has testable statement entries
+# in the format described by the specification at
+# https://spec-ops.github.io/atta-api/index.html
+#
+# usage: make_tests.pl -f file | -w wiki_title | -s spec -d dir
+
+use strict;
+
+use IO::String ;
+use JSON ;
+use MediaWiki::API ;
+use Getopt::Long;
+
+my %specs = (
+ "aria11" => {
+ title => "ARIA_1.1_Testable_Statements",
+ specURL => "https://www.w3.org/TR/wai-aria11/",
+ dir => "aria11"
+ },
+ "svg" => {
+ title => "SVG_Accessibility/Testing/Test_Assertions_with_Tables_for_ATTA",
+ specURL => "https://www.w3.org/TR/svg-aam-1.0/",
+ dir => "svg",
+ fragment => '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">%code%</svg>'
+ }
+);
+
+my @apiNames = qw(UIA MSAA ATK IAccessible2 AXAPI);
+my $apiNamesRegex = "(" . join("|", @apiNames) . ")";
+
+# the suffix to attach to the automatically generated test case names
+my $theSuffix = "-manual.html";
+
+# dir is determined based upon the short name of the spec and is defined
+# by the input or on the command line
+
+my $file = undef ;
+my $spec = undef ;
+my $wiki_title = undef ;
+my $dir = undef;
+my $theSpecFragment = "%code%";
+my $preserveWiki = "";
+my $fake = 0;
+
+my $result = GetOptions(
+ "f|file=s" => \$file,
+ "p=s" => \$preserveWiki,
+ "w|wiki=s" => \$wiki_title,
+ "s|spec=s" => \$spec,
+ "f|fake" => \$fake,
+ "d|dir=s" => \$dir) || usage();
+
+my $wiki_config = {
+ "api_url" => "https://www.w3.org/wiki/api.php"
+};
+
+my $io ;
+our $theSpecURL = "";
+
+if ($spec) {
+ print "Processing spec $spec\n";
+ $wiki_title = $specs{$spec}->{title};
+ $theSpecURL = $specs{$spec}->{specURL};
+ if (!$dir) {
+ $dir = "../" . $specs{$spec}->{dir};
+ }
+ $theSpecFragment = $specs{$spec}->{fragment};
+}
+
+if (!$dir) {
+ $dir = "../raw";
+}
+
+if (!-d $dir) {
+ print STDERR "No such directory: $dir\n";
+ exit 1;
+}
+
+if ($file) {
+ open($io, "<", $file) || die("Failed to open $file: " . $@);
+} elsif ($wiki_title) {
+ my $MW = MediaWiki::API->new( $wiki_config );
+
+ $MW->{config}->{on_error} = \&on_error;
+
+ sub on_error {
+ print "Error code: " . $MW->{error}->{code} . "\n";
+ print $MW->{error}->{stacktrace}."\n";
+ die;
+ }
+ my $page = $MW->get_page( { title => $wiki_title } );
+ my $theContent = $page->{'*'};
+ print "Loaded " . length($theContent) . " from $wiki_title\n";
+ if ($preserveWiki) {
+ if (open(OUTPUT, ">$preserveWiki")) {
+ print OUTPUT $theContent;
+ close OUTPUT;
+ print "Wiki preserved in $preserveWiki\n";
+ exit 0;
+ } else {
+ print "Failed to create $preserveWiki. Terminating.\n";
+ exit 1;
+ }
+ }
+ $io = IO::String->new($theContent);
+} else {
+ usage() ;
+}
+
+
+
+# Now let's walk through the content and build a test page for every item
+#
+
+# iterate over the content
+
+# my $io ;
+# open($io, "<", "raw") ;
+
+# data structure:
+#
+# steps is a list of steps to be performed.
+# Each step is an object that has a type property and other properties based upon that type.
+#
+# Types include:
+#
+# 'test' - has a property for each ATAPI for which there are tests
+# 'attribute' - has a property for the target id, attribute name, and value
+# 'event' - has a property for the target id and event name
+my $state = 0; # between items
+my $theStep = undef;
+my $current = "";
+my $theCode = "";
+my $theAttributes = {};
+my @steps ;
+my $theAsserts = {} ;
+my $theAssertCount = 0;
+my $theAPI = "";
+my $typeRows = 0;
+my $theType = "";
+my $theName = "";
+my $theRef = "";
+my $lineCounter = 0;
+my $skipping = 0;
+
+our $testNames = {} ;
+
+while (<$io>) {
+ if (m/<!-- END OF TESTS -->/) {
+ last;
+ }
+ $lineCounter++;
+ # look for state
+ if (m/^SpecURL: (.*)$/) {
+ $theSpecURL = $1;
+ $theSpecURL =~ s/^ *//;
+ $theSpecURL =~ s/ *$//;
+ }
+ if ($state == 5 && m/^; \/\/ (.*)/) {
+ # we found another test inside a block
+ # we were in an item; dump it
+ build_test($current, $theAttributes, $theCode, \@steps, $theSpecFragment) ;
+ # print "Finished $current and new subblock $1\n";
+ $state = 1;
+ $theAttributes = {} ;
+ $theAPI = "";
+ @steps = ();
+ $theCode = "";
+ $theAsserts = undef;
+ $theName = "";
+ } elsif (m/^=== +(.*[^ ]) +===/) {
+ if ($state != 0) {
+ if ($skipping) {
+ print STDERR "Flag on assertion $current; skipping\n";
+ } else {
+ # we were in an item; dump it
+ build_test($current, $theAttributes, $theCode, \@steps, $theSpecFragment) ;
+ # print "Finished $current\n";
+ }
+ }
+ $state = 1;
+ $current = $1;
+ $theAttributes = {} ;
+ @steps = ();
+ $theCode = "";
+ $theAsserts = undef;
+ $theAPI = "";
+ $theName = "";
+ if ($current =~ m/\(/) {
+ # there is a paren in the name -skip it
+ $skipping = 1;
+ } else {
+ $skipping = 0;
+ }
+ }
+
+ if ($state == 1) {
+ if (m/<pre>/) {
+ # we are now in the code block
+ $state = 2;
+ next;
+ } elsif (m/==== +(.*) +====/) {
+ # we are in some other block
+ $theName = lc($1);
+ $theAttributes->{$theName} = "";
+ next;
+ }
+ if (m/^Reference: +(.*)$/) {
+ $theAttributes->{reference} = $theSpecURL . "#" . $1;
+ } elsif ($theName ne "") {
+ # accumulate whatever was in the block under the data for it
+ chomp();
+ $theAttributes->{$theName} .= $_;
+ } elsif (m/TODO/) {
+ $state = 0;
+ }
+ }
+
+ if ($state == 2) {
+ if (m/<\/pre>/) {
+ # we are done with the code block
+ $state = 3;
+ } else {
+ if (m/^\s/ && !m/if given/) {
+ # trim any trailing whitespace
+ $theCode =~ s/ +$//;
+ $theCode =~ s/\t/ /g;
+ $theCode .= $_;
+ # In MediaWiki, to display & symbol escapes as literal text, one
+ # must use "&amp;&" for the "&" character. We need to undo that.
+ $theCode =~ s/&amp;(\S)/&$1/g;
+ }
+ }
+ } elsif ($state == 3) {
+ # look for a table
+ if (m/^\{\|/) {
+ # table started
+ $state = 4;
+ }
+ } elsif ($state == 4) {
+ if (m/^\|-/) {
+ if ($theAPI
+ && exists($theAsserts->{$theAPI}->[$theAssertCount])
+ && scalar(@{$theAsserts->{$theAPI}->[$theAssertCount]})) {
+ $theAssertCount++;
+ }
+ # start of a table row
+ if ($theType ne "" && $typeRows) {
+ # print qq($theType typeRows was $typeRows\n);
+ # we are still processing items for a type
+ $typeRows--;
+ # populate the first cell
+ $theAsserts->{$theAPI}->[$theAssertCount] = [ $theType ] ;
+ } else {
+ $theType = "";
+ }
+ } elsif (m/^\|\}/) {
+ # ran out of table
+ $state = 5;
+ # adding processing for additional block types
+ # a colspan followed by a keyword triggers a start
+ # so |colspan=5|element triggers a new collection
+ # |colspan=5|attribute triggers the setting of an attribute
+ } elsif (m/^\|colspan="*([0-9])"*\|([^ ]+) (.*)$/) {
+ my $type = $2;
+ my $params = $3;
+
+ my $obj = {} ;
+ if ($type eq "attribute") {
+ if ($params =~ m/([^:]+):([^ ]+) +(.*)$/) {
+ $obj = {
+ type => $type,
+ element => $1,
+ attribute => $2,
+ value => $3
+ };
+ $theStep = undef;
+ push(@steps, $obj);
+ } else {
+ print STDERR "Malformed attribute instruction at line $lineCounter: " . $_ . "\n";
+ }
+ } elsif ($type eq "event") {
+ if ($params =~ m/([^:]+):([^ ]+).*$/) {
+ $obj = {
+ type => $type,
+ element => $1,
+ value => $2
+ };
+ $theStep = undef;
+ push(@steps, $obj);
+ } else {
+ print STDERR "Malformed event instruction at line $lineCounter: " . $_ . "\n";
+ }
+ } elsif ($type eq "element") {
+ $obj = {
+ type => "test",
+ element => $3
+ };
+ push(@steps, $obj);
+ $theStep = scalar(@steps) - 1;
+ $theAsserts = $steps[$theStep];
+ } else {
+ print STDERR "Unknown operation type: $type at line " . $lineCounter . "; skipping.\n";
+ }
+ } elsif (m/($apiNamesRegex)$/) {
+ my $theString = $1;
+ $theString =~ s/ +$//;
+ $theString =~ s/^ +//;
+ if ($theString eq "IA2") {
+ $theString = "IAccessible2" ;
+ }
+ my $rows = 1;
+ if (m/^\|rowspan="*([0-9])"*\|(.*)$/) {
+ $rows = $1
+ }
+ if (grep { $_ eq $theString } @apiNames) {
+ # we found an API name - were we already processing assertions?
+ if (!$theAsserts) {
+ # nope - now what?
+ $theAsserts = {
+ type => "test",
+ element => "test"
+ };
+ push(@steps, $theAsserts);
+ }
+ $theAssertCount = 0;
+ # this is a new API section
+ $theAPI = $theString ;
+ $theAsserts->{$theAPI} = [ [] ] ;
+ $theType = "";
+ } else {
+ # this is a multi-row type
+ $theType = $theString;
+ $typeRows = $rows;
+ # print qq(Found multi-row $theString for $theAPI with $typeRows rows\n);
+ $typeRows--;
+ # populate the first cell
+ if ($theAPI
+ && exists($theAsserts->{$theAPI}->[$theAssertCount])
+ && scalar(@{$theAsserts->{$theAPI}->[$theAssertCount]})) {
+ $theAssertCount++;
+ }
+ $theAsserts->{$theAPI}->[$theAssertCount] = [ $theType ] ;
+ }
+ } elsif (m/^\|(.*)$/) {
+ my $item = $1;
+ $item =~ s/^ *//;
+ $item =~ s/ *$//;
+ $item =~ s/^['"]//;
+ $item =~ s/['"]$//;
+ # add into the data structure for the API
+ if (!exists $theAsserts->{$theAPI}->[$theAssertCount]) {
+ $theAsserts->{$theAPI}->[$theAssertCount] = [ $item ] ;
+ } else {
+ push(@{$theAsserts->{$theAPI}->[$theAssertCount]}, $item);
+ }
+ }
+ }
+};
+
+if ($state != 0) {
+ build_test($current, $theAttributes, $theCode, \@steps, $theSpecFragment) ;
+ print "Finished $current\n";
+}
+
+exit 0;
+
+# build_test
+#
+# create a test file
+#
+# attempts to create unique test names
+
+sub build_test() {
+ my $title = shift ;
+ my $attrs = shift ;
+ my $code = shift ;
+ my $steps = shift;
+ my $frag = shift ;
+
+ if ($title eq "") {
+ print STDERR "No name provided!";
+ return;
+ }
+
+ if ($frag ne "") {
+ $frag =~ s/%code%/$code/;
+ $code = $frag;
+ }
+
+ $code =~ s/ +$//m;
+ $code =~ s/\t/ /g;
+
+ my $title_reference = $title;
+
+ if ($code eq "") {
+ print STDERR "No code for $title; skipping.\n";
+ return;
+ }
+ if ( $steps eq {}) {
+ print STDERR "No assertions for $title; skipping.\n";
+ return;
+ }
+
+ my $testDef =
+ { "title" => $title,
+ "steps" => []
+ };
+ my $stepCount = 0;
+ foreach my $asserts (@$steps) {
+ $stepCount++;
+ my $step =
+ {
+ "type" => $asserts->{"type"},
+ "title"=> "step " . $stepCount,
+ };
+
+ if ($asserts->{type} eq "test") {
+ # everything in the block is about testing an element
+ $step->{"element"} = ( $asserts->{"element"} || "test" );
+
+ my $tests = {};
+ if ($fake) {
+ $tests->{"WAIFAKE"} = [ [ "property", "role", "is", "ROLE_TABLE_CELL" ], [ "property", "interfaces", "contains", "TableCell" ] ];
+ }
+ foreach my $name (@apiNames) {
+ if (exists $asserts->{$name} && scalar(@{$asserts->{$name}})) {
+ $tests->{$name} = $asserts->{$name};
+ }
+ };
+
+ $step->{test} = $tests;
+
+ } elsif ($asserts->{type} eq "attribute") {
+ $step->{type} = "attribute";
+ $step->{element} = $asserts->{"element"};
+ $step->{attribute} = $asserts->{"attribute"};
+ $step->{value} = $asserts->{value};
+ } elsif ($asserts->{type} eq "event") {
+ $step->{type} = "event";
+ $step->{element} = $asserts->{"element"};
+ $step->{event} = $asserts->{value};
+ } else {
+ print STDERR "Invalid step type: " . $asserts->{type} . "\n";
+ next;
+ }
+ push(@{$testDef->{steps}}, $step);
+ }
+
+
+ # populate the rest of the test definition
+
+ if (scalar(keys(%$attrs))) {
+ while (my $key = each(%$attrs)) {
+ # print "Copying $key \n";
+ $testDef->{$key} = $attrs->{$key};
+ }
+ }
+
+ if (exists $attrs->{reference}) {
+ $title_reference = "<a href='" . $attrs->{reference} . "'>" . $title_reference . "</a>" ;
+ }
+
+ my $testDef_json = to_json($testDef, { canonical => 1, pretty => 1, utf8 => 1});
+
+ my $fileName = $title;
+ $fileName =~ s/\s*$//;
+ $fileName =~ s/\///g;
+ $fileName =~ s/\s+/_/g;
+ $fileName =~ s/[,=:]/_/g;
+ $fileName =~ s/['"]//g;
+
+ my $count = 2;
+ if ($testNames->{$fileName}) {
+ while (exists $testNames->{$fileName . "_$count"}) {
+ $count++;
+ }
+ $fileName .= "_$count";
+ }
+
+ $fileName = lc($fileName);
+
+ $testNames->{$fileName} = 1;
+
+ $fileName .= $theSuffix;
+
+ my $template = qq(<!doctype html>
+<html>
+ <head>
+ <title>$title</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ $testDef_json
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for $title_reference.</p>
+ $code
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>);
+
+ my $file ;
+
+ if (open($file, ">", "$dir/$fileName")) {
+ print $file $template;
+ print $file "\n";
+ close $file;
+ } else {
+ print STDERR qq(Failed to create file "$dir/$fileName" $!\n);
+ }
+
+ return;
+}
+
+sub usage() {
+ print STDERR q(usage: make_tests.pl -f file | -w wiki_title | -s spec [-n -v -d dir ]
+
+ -s specname - the name of a spec known to the system
+ -w wiki_title - the TITLE of a wiki page with testable statements
+ -f file - the file from which to read
+
+ -n - do nothing
+ -v - be verbose
+ -d dir - put generated tests in directory dir
+ );
+ exit 1;
+}
+
+# vim: ts=2 sw=2 ai: