Add layout test verifying role, subrole, and role description for all HTML elements...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Feb 2013 23:17:19 +0000 (23:17 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Feb 2013 23:17:19 +0000 (23:17 +0000)
https://bugs.webkit.org/show_bug.cgi?id=109027

Patch by James Craig <jcraig@apple.com> on 2013-02-07
Reviewed by Chris Fleizach.

New layout test verifies AXRole, AXSubrole, and AXRoleDescription for all HTML elements and ARIA roles.

* platform/mac/accessibility/role-subrole-roledescription-expected.txt: Added.
* platform/mac/accessibility/role-subrole-roledescription.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@142185 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/mac/accessibility/role-subrole-roledescription-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/accessibility/role-subrole-roledescription.html [new file with mode: 0644]

index 806c7e9c74885e34e9a9593ef4864a4da3315145..29cd2590fbdbbd0d97357c1bcca99295e74f7025 100644 (file)
@@ -1,3 +1,15 @@
+2013-02-07  James Craig  <jcraig@apple.com>
+
+        Add layout test verifying role, subrole, and role description for all HTML elements and ARIA roles
+        https://bugs.webkit.org/show_bug.cgi?id=109027
+
+        Reviewed by Chris Fleizach.
+
+        New layout test verifies AXRole, AXSubrole, and AXRoleDescription for all HTML elements and ARIA roles. 
+
+        * platform/mac/accessibility/role-subrole-roledescription-expected.txt: Added.
+        * platform/mac/accessibility/role-subrole-roledescription.html: Added.
+
 2013-02-07  Zan Dobersek  <zdobersek@igalia.com>
 
         Unreviewed GTK gardening.
diff --git a/LayoutTests/platform/mac/accessibility/role-subrole-roledescription-expected.txt b/LayoutTests/platform/mac/accessibility/role-subrole-roledescription-expected.txt
new file mode 100644 (file)
index 0000000..0cc1e96
--- /dev/null
@@ -0,0 +1,950 @@
+ X
+This tests that native elements and ARIA overrides result in the expected role, subrole, and role description.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS: a[href]
+      AXRole: AXLink
+      AXSubrole: 
+      AXRoleDescription: link
+      
+PASS: a:not([href])
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: abbr
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: address
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkContentInfo
+      AXRoleDescription: content information
+      
+PASS: article
+      AXRole: AXGroup
+      AXSubrole: AXDocumentArticle
+      AXRoleDescription: article
+      
+PASS: aside
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkComplementary
+      AXRoleDescription: complementary
+      
+PASS: audio
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: b
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: bdo
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: blockquote
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: button
+      AXRole: AXButton
+      AXSubrole: 
+      AXRoleDescription: button
+      
+PASS: canvas
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: cite
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: code
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: del
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: dfn
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: dl
+      AXRole: AXList
+      AXSubrole: AXDescriptionList
+      AXRoleDescription: list
+      
+PASS: dt
+      AXRole: AXGroup
+      AXSubrole: AXTerm
+      AXRoleDescription: term
+      
+PASS: dd
+      AXRole: AXGroup
+      AXSubrole: AXDescription
+      AXRoleDescription: description
+      
+PASS: div
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: em
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: fieldset
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: legend
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: footer
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkContentInfo
+      AXRoleDescription: footer
+      
+PASS: form
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: header
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkBanner
+      AXRoleDescription: banner
+      
+PASS: hgroup
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: h1
+      AXRole: AXHeading
+      AXSubrole: 
+      AXRoleDescription: heading
+      
+PASS: h2
+      AXRole: AXHeading
+      AXSubrole: 
+      AXRoleDescription: heading
+      
+PASS: h3
+      AXRole: AXHeading
+      AXSubrole: 
+      AXRoleDescription: heading
+      
+PASS: h4
+      AXRole: AXHeading
+      AXSubrole: 
+      AXRoleDescription: heading
+      
+PASS: h5
+      AXRole: AXHeading
+      AXSubrole: 
+      AXRoleDescription: heading
+      
+PASS: h6
+      AXRole: AXHeading
+      AXSubrole: 
+      AXRoleDescription: heading
+      
+PASS: hr
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: i
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: img:not([src]):not([alt])
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: img[alt='']
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: img[src]:not([alt])
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: img[alt='X']
+      AXRole: AXImage
+      AXSubrole: 
+      AXRoleDescription: image
+      
+PASS: input[type='button']
+      AXRole: AXButton
+      AXSubrole: 
+      AXRoleDescription: button
+      
+PASS: input[type='color']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='checkbox']
+      AXRole: AXCheckBox
+      AXSubrole: 
+      AXRoleDescription: check box
+      
+PASS: input[type='date']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='datetime']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='datetime-local']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='email']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='file']
+      AXRole: AXButton
+      AXSubrole: AXFileUploadButton
+      AXRoleDescription: file upload button
+      
+PASS: input[type='hidden']
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: input[type='image']
+      AXRole: AXButton
+      AXSubrole: 
+      AXRoleDescription: button
+      
+PASS: input[type='month']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='number']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='password']
+      AXRole: AXTextField
+      AXSubrole: AXSecureTextField
+      AXRoleDescription: secure text field
+      
+PASS: input[type='radio']
+      AXRole: AXRadioButton
+      AXSubrole: 
+      AXRoleDescription: radio button
+      
+PASS: input[type='range']
+      AXRole: AXSlider
+      AXSubrole: 
+      AXRoleDescription: slider
+      
+PASS: input[type='reset']
+      AXRole: AXButton
+      AXSubrole: 
+      AXRoleDescription: button
+      
+PASS: input[type='search']
+      AXRole: AXTextField
+      AXSubrole: AXSearchField
+      AXRoleDescription: search text field
+      
+PASS: input[type='submit']
+      AXRole: AXButton
+      AXSubrole: 
+      AXRoleDescription: button
+      
+PASS: input[type='tel']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='text']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='time']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='url']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: input[type='week']
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: ins
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: mark
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: math
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: meter
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: nav
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkNavigation
+      AXRoleDescription: navigation
+      
+PASS: ol
+      AXRole: AXList
+      AXSubrole: AXContentList
+      AXRoleDescription: content list
+      
+PASS: li
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: p
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: pre
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: progress
+      AXRole: AXProgressIndicator
+      AXSubrole: 
+      AXRoleDescription: progress indicator
+      
+PASS: q
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: s
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: samp
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: section
+      AXRole: AXGroup
+      AXSubrole: AXDocumentRegion
+      AXRoleDescription: region
+      
+PASS: select:not([multiple])
+      AXRole: AXPopUpButton
+      AXSubrole: 
+      AXRoleDescription: pop up button
+      
+PASS: option
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: optgroup
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: select[multiple]
+      AXRole: AXList
+      AXSubrole: 
+      AXRoleDescription: list
+      
+PASS: option
+      AXRole: AXStaticText
+      AXSubrole: 
+      AXRoleDescription: text
+      
+PASS: optgroup
+      AXRole: AXStaticText
+      AXSubrole: 
+      AXRoleDescription: text
+      
+PASS: small
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: span
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: strong
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: sub
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: sup
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: svg
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: table
+      AXRole: AXTable
+      AXSubrole: 
+      AXRoleDescription: table
+      
+PASS: caption
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: thead
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: tr
+      AXRole: AXRow
+      AXSubrole: 
+      AXRoleDescription: row
+      
+PASS: th
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: tbody
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: tr
+      AXRole: AXRow
+      AXSubrole: 
+      AXRoleDescription: row
+      
+PASS: td
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: tfoot
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: tr
+      AXRole: AXRow
+      AXSubrole: 
+      AXRoleDescription: row
+      
+PASS: th
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: textarea
+      AXRole: AXTextArea
+      AXSubrole: 
+      AXRoleDescription: text entry area
+      
+PASS: time
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: ul
+      AXRole: AXList
+      AXSubrole: AXContentList
+      AXRoleDescription: content list
+      
+PASS: li
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: var
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: wbr
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: div[role=command]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=composite]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=input]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=landmark]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=range]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=roletype]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=section]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=sectionhead]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=select]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=structure]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=widget]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=window]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=alert]
+      AXRole: AXGroup
+      AXSubrole: AXApplicationAlert
+      AXRoleDescription: alert
+      
+PASS: div[role=alertdialog]
+      AXRole: AXGroup
+      AXSubrole: AXApplicationAlertDialog
+      AXRoleDescription: alert dialog
+      
+PASS: div[role=application]
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkApplication
+      AXRoleDescription: application
+      
+PASS: div[role=article]
+      AXRole: AXGroup
+      AXSubrole: AXDocumentArticle
+      AXRoleDescription: article
+      
+PASS: div[role=banner]
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkBanner
+      AXRoleDescription: banner
+      
+PASS: div[role=button]
+      AXRole: AXButton
+      AXSubrole: 
+      AXRoleDescription: button
+      
+PASS: div[role=checkbox]
+      AXRole: AXCheckBox
+      AXSubrole: 
+      AXRoleDescription: check box
+      
+PASS: div[role=combobox]
+      AXRole: AXComboBox
+      AXSubrole: 
+      AXRoleDescription: combo box
+      
+PASS: div[role=complementary]
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkComplementary
+      AXRoleDescription: complementary
+      
+PASS: div[role=contentinfo]
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkContentInfo
+      AXRoleDescription: content information
+      
+PASS: div[role=definition]
+      AXRole: AXGroup
+      AXSubrole: AXDefinition
+      AXRoleDescription: definition
+      
+PASS: div[role=dialog]
+      AXRole: AXGroup
+      AXSubrole: AXApplicationDialog
+      AXRoleDescription: dialog
+      
+PASS: div[role=directory]
+      AXRole: AXList
+      AXSubrole: AXContentList
+      AXRoleDescription: content list
+      
+PASS: div[role=document]
+      AXRole: AXGroup
+      AXSubrole: AXDocument
+      AXRoleDescription: document
+      
+PASS: div[role=form]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=grid]
+      AXRole: AXTable
+      AXSubrole: 
+      AXRoleDescription: table
+      
+PASS: div[role=rowgroup]
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: div[role=row]
+      AXRole: AXRow
+      AXSubrole: 
+      AXRoleDescription: row
+      
+PASS: div[role=rowheader]
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: div[role=columnheader]
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: div[role=gridcell]
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: div[role=group]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=heading]
+      AXRole: AXHeading
+      AXSubrole: 
+      AXRoleDescription: heading
+      
+PASS: div[role=img]
+      AXRole: AXImage
+      AXSubrole: 
+      AXRoleDescription: image
+      
+PASS: div[role=link]
+      AXRole: AXLink
+      AXSubrole: 
+      AXRoleDescription: link
+      
+PASS: div[role=list]
+      AXRole: AXList
+      AXSubrole: AXContentList
+      AXRoleDescription: content list
+      
+PASS: div[role=listitem]
+      AXRole: AXGroup
+      AXSubrole: 
+      AXRoleDescription: group
+      
+PASS: div[role=listbox]
+      AXRole: AXList
+      AXSubrole: 
+      AXRoleDescription: list
+      
+PASS: div[role=option]
+      AXRole: AXStaticText
+      AXSubrole: 
+      AXRoleDescription: text
+      
+PASS: div[role=log]
+      AXRole: AXGroup
+      AXSubrole: AXApplicationLog
+      AXRoleDescription: log
+      
+PASS: div[role=main]
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkMain
+      AXRoleDescription: main
+      
+PASS: div[role=marquee]
+      AXRole: AXGroup
+      AXSubrole: AXApplicationMarquee
+      AXRoleDescription: marquee
+      
+PASS: div[role=math]
+      AXRole: AXGroup
+      AXSubrole: AXDocumentMath
+      AXRoleDescription: math
+      
+PASS: div[role=menu]
+      AXRole: AXMenu
+      AXSubrole: 
+      AXRoleDescription: menu
+      
+PASS: div[role=menuitem]
+      AXRole: AXMenuItem
+      AXSubrole: 
+      AXRoleDescription: menu item
+      
+PASS: div[role=menuitemcheckbox]
+      AXRole: AXMenuItem
+      AXSubrole: 
+      AXRoleDescription: menu item
+      
+PASS: div[role=menuitemradio]
+      AXRole: AXMenuItem
+      AXSubrole: 
+      AXRoleDescription: menu item
+      
+PASS: div[role=menubar]
+      AXRole: AXMenuBar
+      AXSubrole: 
+      AXRoleDescription: menu bar
+      
+PASS: div[role=menuitem]
+      AXRole: AXMenuItem
+      AXSubrole: 
+      AXRoleDescription: menu item
+      
+PASS: div[role=menuitemcheckbox]
+      AXRole: AXMenuItem
+      AXSubrole: 
+      AXRoleDescription: menu item
+      
+PASS: div[role=menuitemradio]
+      AXRole: AXMenuItem
+      AXSubrole: 
+      AXRoleDescription: menu item
+      
+PASS: div[role=navigation]
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkNavigation
+      AXRoleDescription: navigation
+      
+PASS: div[role=note]
+      AXRole: AXGroup
+      AXSubrole: AXDocumentNote
+      AXRoleDescription: note
+      
+PASS: div[role=presentation]
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: div[role=progressbar]
+      AXRole: AXProgressIndicator
+      AXSubrole: 
+      AXRoleDescription: progress indicator
+      
+PASS: div[role=radiogroup]
+      AXRole: AXRadioGroup
+      AXSubrole: 
+      AXRoleDescription: radio group
+      
+PASS: div[role=radio]
+      AXRole: AXRadioButton
+      AXSubrole: 
+      AXRoleDescription: radio button
+      
+PASS: div[role=region]
+      AXRole: AXGroup
+      AXSubrole: AXDocumentRegion
+      AXRoleDescription: region
+      
+PASS: div[role=scrollbar]
+      AXRole: AXScrollBar
+      AXSubrole: 
+      AXRoleDescription: scroll bar
+      
+PASS: div[role=search]
+      AXRole: AXGroup
+      AXSubrole: AXLandmarkSearch
+      AXRoleDescription: search
+      
+PASS: div[role=separator]
+      AXRole: AXSplitter
+      AXSubrole: 
+      AXRoleDescription: splitter
+      
+PASS: div[role=slider]
+      AXRole: AXSlider
+      AXSubrole: 
+      AXRoleDescription: slider
+      
+PASS: div[role=spinbutton]
+      AXRole: AXIncrementor
+      AXSubrole: 
+      AXRoleDescription: stepper
+      
+PASS: div[role=status]
+      AXRole: AXGroup
+      AXSubrole: AXApplicationStatus
+      AXRoleDescription: application status
+      
+PASS: div[role=tablist]
+      AXRole: AXTabGroup
+      AXSubrole: 
+      AXRoleDescription: tab group
+      
+PASS: div[role=tab]
+      AXRole: AXRadioButton
+      AXSubrole: 
+      AXRoleDescription: tab
+      
+PASS: div[role=tabpanel]
+      AXRole: AXGroup
+      AXSubrole: AXTabPanel
+      AXRoleDescription: tab panel
+      
+PASS: div[role=textbox]
+      AXRole: AXTextField
+      AXSubrole: 
+      AXRoleDescription: text field
+      
+PASS: div[role=timer]
+      AXRole: AXGroup
+      AXSubrole: AXApplicationTimer
+      AXRoleDescription: timer
+      
+PASS: div[role=toolbar]
+      AXRole: AXToolbar
+      AXSubrole: 
+      AXRoleDescription: toolbar
+      
+PASS: div[role=tooltip]
+      AXRole: AXGroup
+      AXSubrole: AXUserInterfaceTooltip
+      AXRoleDescription: tooltip
+      
+PASS: div[role=tree]
+      AXRole: AXOutline
+      AXSubrole: 
+      AXRoleDescription: outline
+      
+PASS: div[role=treeitem]
+      AXRole: AXRow
+      AXSubrole: AXOutlineRow
+      AXRoleDescription: outline row
+      
+PASS: div[role=group]
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: div[role=treeitem]
+      AXRole: AXRow
+      AXSubrole: AXOutlineRow
+      AXRoleDescription: outline row
+      
+PASS: div[role=treegrid]
+      AXRole: AXTable
+      AXSubrole: 
+      AXRoleDescription: table
+      
+PASS: div[role=rowgroup]
+      AXRole: 
+      AXSubrole: 
+      AXRoleDescription: 
+      
+PASS: div[role=row]
+      AXRole: AXRow
+      AXSubrole: 
+      AXRoleDescription: row
+      
+PASS: div[role=rowheader]
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: div[role=columnheader]
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS: div[role=gridcell]
+      AXRole: AXCell
+      AXSubrole: 
+      AXRoleDescription: cell
+      
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/mac/accessibility/role-subrole-roledescription.html b/LayoutTests/platform/mac/accessibility/role-subrole-roledescription.html
new file mode 100644 (file)
index 0000000..ae14127
--- /dev/null
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML>
+<html>
+<body>
+<script src="../../../fast/js/resources/js-test-pre.js"></script>
+
+
+<!-- ==================================================================================================== -->
+<!-- HTML elements in alphabetical order, excepting the need for nesting (e.g. <li> is with its <ol> and <ul> parents) -->
+<!-- ==================================================================================================== -->
+<a data-role="AXLink" data-subrole="" data-roledescription="link" href="#" data-note="[href]" class="ex">X</a>
+<a data-role="" data-subrole="" data-roledescription="" data-note=":not([href])" class="ex">X</a>
+<abbr data-role="" data-subrole="" data-roledescription="" class="ex">X</abbr>
+<!-- http://webkit.org/b/83989 --><address data-role="AXGroup" data-subrole="AXLandmarkContentInfo" data-roledescription="content information" class="ex">X</address>
+<!-- skipped <area> -->
+<article data-role="AXGroup" data-subrole="AXDocumentArticle" data-roledescription="article" class="ex">X</article>
+<aside data-role="AXGroup" data-subrole="AXLandmarkComplementary" data-roledescription="complementary" class="ex">X</aside>
+<audio data-role="" data-subrole="" data-roledescription="" class="ex">X</audio>
+<b data-role="" data-subrole="" data-roledescription="" class="ex">X</b>
+<bdo data-role="" data-subrole="" data-roledescription="" class="ex">X</bdo>
+<blockquote data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</blockquote>
+<button data-role="AXButton" data-subrole="" data-roledescription="button" class="ex">X</button>
+<canvas data-role="" data-subrole="" data-roledescription="" class="ex">X</canvas>
+<cite data-role="" data-subrole="" data-roledescription="" class="ex">X</cite>
+<code data-role="" data-subrole="" data-roledescription="" class="ex">X</code>
+<!-- skipped <command> -->
+<!-- skipped <datalist> -->
+<del data-role="" data-subrole="" data-roledescription="" class="ex">X</del>
+<!-- skipped <details/summary> http://webkit.org/b/108979 -->
+<!-- <dfn> http://webkit.org/b/108980 --><dfn data-role="" data-subrole="" data-roledescription="" class="ex">X</dfn>
+<dl data-role="AXList" data-subrole="AXDescriptionList" data-roledescription="list" class="ex">
+    <dt data-role="AXGroup" data-subrole="AXTerm" data-roledescription="term" class="ex">X</dt>
+    <dd data-role="AXGroup" data-subrole="AXDescription" data-roledescription="description" class="ex">X</dd>
+</dl>
+<div data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<em data-role="" data-subrole="" data-roledescription="" class="ex">X</em>
+<!-- skipped <embed> -->
+<fieldset data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">
+    <legend data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</legend>
+</fieldset>
+<!-- skipped figure/figcaption http://webkit.org/b/108996 -->
+<footer data-role="AXGroup" data-subrole="AXLandmarkContentInfo" data-roledescription="footer" class="ex">X</footer>
+<form data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</form>
+<!-- skipped <frame> -->
+<!-- skipped <frameset> -->
+<!-- skipped <head> -->
+<!-- http://webkit.org/b/109013 --><header data-role="AXGroup" data-subrole="AXLandmarkBanner" data-roledescription="banner" class="ex">X</header>
+<hgroup data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</hgroup>
+<h1 data-role="AXHeading" data-subrole="" data-roledescription="heading" class="ex">X</h1>
+<h2 data-role="AXHeading" data-subrole="" data-roledescription="heading" class="ex">X</h2>
+<h3 data-role="AXHeading" data-subrole="" data-roledescription="heading" class="ex">X</h3>
+<h4 data-role="AXHeading" data-subrole="" data-roledescription="heading" class="ex">X</h4>
+<h5 data-role="AXHeading" data-subrole="" data-roledescription="heading" class="ex">X</h5>
+<h6 data-role="AXHeading" data-subrole="" data-roledescription="heading" class="ex">X</h6>
+<!-- http://webkit.org/b/109015 --><hr data-role="" data-subrole="" data-roledescription="" class="ex">
+<!-- skipped <html> -->
+<i data-role="" data-subrole="" data-roledescription="" class="ex">X</i>
+<!-- skipped <iframe> -->
+<img data-role="" data-subrole="" data-roledescription="" class="ex" data-note=":not([src]):not([alt])">
+<img data-role="" data-subrole="" data-roledescription="" class="ex" alt="" data-note="[alt='']">
+<img data-role="" data-subrole="" data-roledescription="" class="ex" src="foo.png" data-note="[src]:not([alt])">
+<img data-role="AXImage" data-subrole="" data-roledescription="image" class="ex" alt="X" data-note="[alt='X']">
+<input type="button" value="X" data-role="AXButton" data-subrole="" data-roledescription="button" class="ex" data-note="[type='button']">
+<!-- skipped <menu><input type="button"></menu> -->
+<!-- http://webkit.org/b/109017 --><input type="color" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='color']">
+<input type="checkbox" data-role="AXCheckBox" data-subrole="" data-roledescription="check box" class="ex" data-note="[type='checkbox']">
+<!-- skipped <menu><input type="checkbox"></menu> -->
+<!-- http://webkit.org/b/109017 --><input type="date" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='date']">
+<!-- http://webkit.org/b/109017 --><input type="datetime" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='datetime']">
+<!-- http://webkit.org/b/109017 --><input type="datetime-local" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='datetime-local']">
+<!-- http://webkit.org/b/109017 --><input type="email" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='email']">
+<input type="file" data-role="AXButton" data-subrole="AXFileUploadButton" data-roledescription="file upload button" class="ex" data-note="[type='file']">
+<input type="hidden" data-role="" data-subrole="" data-roledescription="" class="ex" data-note="[type='hidden']">
+<input type="image" data-role="AXButton" data-subrole="" data-roledescription="button" class="ex" data-note="[type='image']">
+<!-- http://webkit.org/b/109017 --><input type="month" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='month']">
+<!-- http://webkit.org/b/109017 --><input type="number" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='number']">
+<input type="password" value="X" data-role="AXTextField" data-subrole="AXSecureTextField" data-roledescription="secure text field" class="ex" data-note="[type='password']">
+<input type="radio" data-role="AXRadioButton" data-subrole="" data-roledescription="radio button" class="ex" data-note="[type='radio']">
+<!-- skipped <menu><input type="radio"></menu> -->
+<input type="range" data-role="AXSlider" data-subrole="" data-roledescription="slider" class="ex" data-note="[type='range']">
+<input type="reset" data-role="AXButton" data-subrole="" data-roledescription="button" class="ex" data-note="[type='reset']">
+<input type="search" value="X" data-role="AXTextField" data-subrole="AXSearchField" data-roledescription="search text field" class="ex" data-note="[type='search']">
+<input type="submit" data-role="AXButton" data-subrole="" data-roledescription="button" class="ex" data-note="[type='submit']">
+<!-- http://webkit.org/b/109017 --><input type="tel" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='tel']">
+<input type="text" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='text']">
+<!-- skipped <input type="text"> with suggestions source element: http://www.w3.org/html/wg/drafts/html/master/forms.html#concept-input-list -->
+<!-- http://webkit.org/b/109017 --><input type="time" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='time']">
+<!-- http://webkit.org/b/109017 --><input type="url" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='url']">
+<!-- http://webkit.org/b/109017 --><input type="week" value="X" data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex" data-note="[type='week']">
+<ins data-role="" data-subrole="" data-roledescription="" class="ex">X</ins>
+<!-- skipped <link> -->
+<!-- skipped <map> -->
+<!-- http://webkit.org/b/109018 --><mark data-role="" data-subrole="" data-roledescription="" class="ex">X</mark>
+<math data-role="" data-subrole="" data-roledescription="" class="ex">X</math>
+<!-- skipped <menu> -->
+<!-- skipped <meta> -->
+<!-- http://webkit.org/b/109023 --><meter data-role="" data-subrole="" data-roledescription="" class="ex" value="0.75">X</meter>
+<nav data-role="AXGroup" data-subrole="AXLandmarkNavigation" data-roledescription="navigation" class="ex">X</nav>
+<!-- skipped <noscript> -->
+<!-- skipped <object> -->
+<ol data-role="AXList" data-subrole="AXContentList" data-roledescription="content list" class="ex">
+    <li data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</li>
+</ol>
+<!-- skipped <optgroup> -->
+<!-- skipped <option> -->
+<!-- skipped <output> -->
+<p data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</p>
+<!-- skipped <param> -->
+<pre data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</pre>
+<progress data-role="AXProgressIndicator" data-subrole="" data-roledescription="progress indicator" class="ex" value="0.75">X</progress>
+<q data-role="" data-subrole="" data-roledescription="" class="ex">X</q>
+<!-- skipped <ruby/rp/rt> -->
+<s data-role="" data-subrole="" data-roledescription="" class="ex">X</s>
+<samp data-role="" data-subrole="" data-roledescription="" class="ex">X</samp>
+<!-- skipped <script> -->
+<!-- http://webkit.org/b/109024 --><section data-role="AXGroup" data-subrole="AXDocumentRegion" data-roledescription="region" class="ex">X</section>
+<select data-role="AXPopUpButton" data-subrole="" data-roledescription="pop up button" class="ex" data-note=":not([multiple])">
+    <option data-role="" data-subrole="" data-roledescription="" class="ex">X</option>
+    <optgroup data-role="" data-subrole="" data-roledescription="" class="ex" label="more">
+        <option>X</option>
+    </optgroup>
+</select>
+<select data-role="AXList" data-subrole="" data-roledescription="list" class="ex" multiple data-note="[multiple]">
+    <option data-role="AXStaticText" data-subrole="" data-roledescription="text" class="ex">X</option>
+    <optgroup data-role="AXStaticText" data-subrole="" data-roledescription="text" class="ex" label="more">
+        <option>Y</option>
+        <option>Z</option>
+    </optgroup>
+</select>
+<small data-role="" data-subrole="" data-roledescription="" class="ex">X</small>
+<!-- skipped <source> -->
+<span data-role="" data-subrole="" data-roledescription="" class="ex">X</span>
+<strong data-role="" data-subrole="" data-roledescription="" class="ex">X</strong>
+<!-- skipped <style> -->
+<sub data-role="" data-subrole="" data-roledescription="" class="ex">X</sub>
+<sup data-role="" data-subrole="" data-roledescription="" class="ex">X</sup>
+<svg data-role="" data-subrole="" data-roledescription="" class="ex">X</svg>
+
+<table data-role="AXTable" data-subrole="" data-roledescription="table" class="ex">
+    <caption data-role="" data-subrole="" data-roledescription="" class="ex">X</caption>
+    <thead data-role="" data-subrole="" data-roledescription="" class="ex">
+        <tr data-role="AXRow" data-subrole="" data-roledescription="row" class="ex">
+            <!-- Need separate test to verify colheader/rowheader -->
+            <th data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</th>
+        </tr>
+    </thead>
+    <tbody data-role="" data-subrole="" data-roledescription="" class="ex">
+        <tr data-role="AXRow" data-subrole="" data-roledescription="row" class="ex">
+            <td data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</td>
+        </tr>
+    </tbody>
+    <tfoot data-role="" data-subrole="" data-roledescription="" class="ex">
+        <tr data-role="AXRow" data-subrole="" data-roledescription="row" class="ex">
+            <!-- Need separate test to verify colheader/rowheader -->
+            <th data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</th>
+        </tr>
+    </tfoot>
+</table>
+<textarea data-role="AXTextArea" data-subrole="" data-roledescription="text entry area" class="ex">X</textarea>
+<time data-role="" data-subrole="" data-roledescription="" class="ex">X</time>
+<!-- skipped <title> -->
+<ul data-role="AXList" data-subrole="AXContentList" data-roledescription="content list" class="ex">
+    <li data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</li>
+</ul>
+<var data-role="" data-subrole="" data-roledescription="" class="ex">X</var>
+<!-- skipped <video> -->
+<wbr data-role="" data-subrole="" data-roledescription="" class="ex">X</wbr>
+<!-- Todo: I left off adding HTML5 elements here at previous element: https://dvcs.w3.org/hg/html-api-map/raw-file/default/Overview.html -->
+
+
+
+<!-- ==================================================================================================== -->
+<!-- Abstract ARIA roles in alphabetical order; only generic AXGroup role should be exposed on abstract roles -->
+<!-- ==================================================================================================== -->
+<div role="command"     data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="composite"   data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="input"       data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="landmark"    data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="range"       data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="roletype"    data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="section"     data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="sectionhead" data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="select"      data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="structure"   data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="widget"      data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="window"      data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+
+
+<!-- ==================================================================================================== -->
+<!-- Non-abstract ARIA roles in alphabetical order, excepting the need for nesting (e.g. row is with its grid parent) -->
+<!-- ==================================================================================================== -->
+<div role="alert"                    data-role="AXGroup" data-subrole="AXApplicationAlert" data-roledescription="alert" class="ex">X</div>
+<div role="alertdialog"              data-role="AXGroup" data-subrole="AXApplicationAlertDialog" data-roledescription="alert dialog" class="ex">X</div>
+<div role="application"              data-role="AXGroup" data-subrole="AXLandmarkApplication" data-roledescription="application" class="ex">X</div>
+<div role="article"                  data-role="AXGroup" data-subrole="AXDocumentArticle" data-roledescription="article" class="ex">X</div>
+<div role="banner"                   data-role="AXGroup" data-subrole="AXLandmarkBanner" data-roledescription="banner" class="ex">X</div>
+<div role="button"                   data-role="AXButton" data-subrole="" data-roledescription="button" class="ex">X</div>
+<div role="checkbox"                 data-role="AXCheckBox" data-subrole="" data-roledescription="check box" class="ex">X</div>
+<div role="combobox"                 data-role="AXComboBox" data-subrole="" data-roledescription="combo box" class="ex">X</div>
+<div role="complementary"            data-role="AXGroup" data-subrole="AXLandmarkComplementary" data-roledescription="complementary" class="ex">X</div>
+<div role="contentinfo"              data-role="AXGroup" data-subrole="AXLandmarkContentInfo" data-roledescription="content information" class="ex">X</div>
+<div role="definition"               data-role="AXGroup" data-subrole="AXDefinition" data-roledescription="definition" class="ex">X</div>
+<div role="dialog"                   data-role="AXGroup" data-subrole="AXApplicationDialog" data-roledescription="dialog" class="ex">X</div>
+<div role="directory"                data-role="AXList" data-subrole="AXContentList" data-roledescription="content list" class="ex">X</div>
+<div role="document"                 data-role="AXGroup" data-subrole="AXDocument" data-roledescription="document" class="ex">X</div>
+<div role="form"                     data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="grid"                     data-role="AXTable" data-subrole="" data-roledescription="table" class="ex">
+    <div role="rowgroup"             data-role="" data-subrole="" data-roledescription="" class="ex">
+        <div role="row"              data-role="AXRow" data-subrole="" data-roledescription="row" class="ex">
+            <!-- Note: diff between rowheader, columnheader, and gridcell is in cross-reference from grid; need additional non-role verification in another test. -->
+            <div role="rowheader"    data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</div>
+            <div role="columnheader" data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</div>
+            <div role="gridcell"     data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</div>
+        </div>
+    </div>
+</div>
+<div role="group"                    data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+<div role="heading"                  data-role="AXHeading" data-subrole="" data-roledescription="heading" class="ex">X</div>
+<div role="img"                      data-role="AXImage" data-subrole="" data-roledescription="image" class="ex">X</div>
+<div role="link"                     data-role="AXLink" data-subrole="" data-roledescription="link" class="ex">X</div>
+<div role="list"                     data-role="AXList" data-subrole="AXContentList" data-roledescription="content list" class="ex">
+    <div role="listitem"             data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</div>
+</div>
+<div role="listbox"                  data-role="AXList" data-subrole="" data-roledescription="list" class="ex">
+    <div role="option"               data-role="AXStaticText" data-subrole="" data-roledescription="text" class="ex">X</div>
+</div>
+<div role="log"                      data-role="AXGroup" data-subrole="AXApplicationLog" data-roledescription="log" class="ex">X</div>
+<div role="main"                     data-role="AXGroup" data-subrole="AXLandmarkMain" data-roledescription="main" class="ex">X</div>
+<div role="marquee"                  data-role="AXGroup" data-subrole="AXApplicationMarquee" data-roledescription="marquee" class="ex">X</div>
+<div role="math"                     data-role="AXGroup" data-subrole="AXDocumentMath" data-roledescription="math" class="ex">X</div>
+<div role="menu"                     data-role="AXMenu" data-subrole="" data-roledescription="menu" class="ex">
+    <!-- Note: diff between menuitem types is an attribute; need additional non-role verification in another test. -->
+    <div role="menuitem"             data-role="AXMenuItem" data-subrole="" data-roledescription="menu item" class="ex">X</div>
+    <div role="menuitemcheckbox"     data-role="AXMenuItem" data-subrole="" data-roledescription="menu item" class="ex">X</div>
+    <div role="menuitemradio"        data-role="AXMenuItem" data-subrole="" data-roledescription="menu item" class="ex">X</div>
+</div>
+<div role="menubar"                  data-role="AXMenuBar" data-subrole="" data-roledescription="menu bar" class="ex">
+    <!-- Note: diff between menuitem types is an attribute; need additional non-role verification in another test. -->
+    <div role="menuitem"             data-role="AXMenuItem" data-subrole="" data-roledescription="menu item" class="ex">X</div>
+    <div role="menuitemcheckbox"     data-role="AXMenuItem" data-subrole="" data-roledescription="menu item" class="ex">X</div>
+    <div role="menuitemradio"        data-role="AXMenuItem" data-subrole="" data-roledescription="menu item" class="ex">X</div>
+</div>
+<div role="navigation"               data-role="AXGroup" data-subrole="AXLandmarkNavigation" data-roledescription="navigation" class="ex">X</div>
+<div role="note"                     data-role="AXGroup" data-subrole="AXDocumentNote" data-roledescription="note" class="ex">X</div>
+<div role="presentation"             data-role="" data-subrole="" data-roledescription="" class="ex">X</div>
+<div role="progressbar"              data-role="AXProgressIndicator" data-subrole="" data-roledescription="progress indicator" class="ex">X</div>
+<div role="radiogroup"               data-role="AXRadioGroup" data-subrole="" data-roledescription="radio group" class="ex">
+    <div role="radio"                data-role="AXRadioButton" data-subrole="" data-roledescription="radio button" class="ex">X</div>
+</div>
+<div role="region"                   data-role="AXGroup" data-subrole="AXDocumentRegion" data-roledescription="region" class="ex">X</div>
+<div role="scrollbar"                data-role="AXScrollBar" data-subrole="" data-roledescription="scroll bar" class="ex">X</div>
+<div role="search"                   data-role="AXGroup" data-subrole="AXLandmarkSearch" data-roledescription="search" class="ex">X</div>
+<div role="separator"                data-role="AXSplitter" data-subrole="" data-roledescription="splitter" class="ex">X</div>
+<div role="slider"                   data-role="AXSlider" data-subrole="" data-roledescription="slider" class="ex">X</div>
+<div role="spinbutton"               data-role="AXIncrementor" data-subrole="" data-roledescription="stepper" class="ex">X</div>
+<div role="status"                   data-role="AXGroup" data-subrole="AXApplicationStatus" data-roledescription="application status" class="ex">X</div>
+<div role="tablist"                  data-role="AXTabGroup" data-subrole="" data-roledescription="tab group" class="ex">
+    <div role="tab"                  data-role="AXRadioButton" data-subrole="" data-roledescription="tab" class="ex">X</div>
+</div>
+<div role="tabpanel"                 data-role="AXGroup" data-subrole="AXTabPanel" data-roledescription="tab panel" class="ex">X</div>
+<div role="textbox"                  data-role="AXTextField" data-subrole="" data-roledescription="text field" class="ex">X</div>
+<div role="timer"                    data-role="AXGroup" data-subrole="AXApplicationTimer" data-roledescription="timer" class="ex">X</div>
+<div role="toolbar"                  data-role="AXToolbar" data-subrole="" data-roledescription="toolbar" class="ex">X</div>
+<div role="tooltip"                  data-role="AXGroup" data-subrole="AXUserInterfaceTooltip" data-roledescription="tooltip" class="ex">X</div>
+<div role="tree"                     data-role="AXOutline" data-subrole="" data-roledescription="outline" class="ex">
+    <div role="treeitem"             data-role="AXRow" data-subrole="AXOutlineRow" data-roledescription="outline row" class="ex">X</div>
+    <div role="group"                data-role="" data-subrole="" data-roledescription="" class="ex">
+        <div role="treeitem"         data-role="AXRow" data-subrole="AXOutlineRow" data-roledescription="outline row" class="ex">X</div>
+    </div>
+</div>
+<div role="treegrid"                 data-role="AXTable" data-subrole="" data-roledescription="table" class="ex">
+    <div role="rowgroup"             data-role="" data-subrole="" data-roledescription="" class="ex">
+        <div role="row"              data-role="AXRow" data-subrole="" data-roledescription="row" class="ex">
+            <!-- Note: diff between rowheader, columnheader, and gridcell is in cross-reference from grid; need additional non-role verification in another test. -->
+            <div role="rowheader"    data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</div>
+            <div role="columnheader" data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</div>
+            <div role="gridcell"     data-role="AXCell" data-subrole="" data-roledescription="cell" class="ex">X</div>
+        </div>
+    </div>
+</div>
+
+
+<div id="console"></div>
+<script>
+if (window.testRunner && window.accessibilityController) {
+    description("This tests that native elements and ARIA overrides result in the expected role, subrole, and role description.")
+    var examples = document.querySelectorAll('.ex');
+    var indent = "\n      "; // newline and six spaces
+    var el, ariaRole, axElement, role, subrole, roleDescription, output, expectation, result;
+    for (var i = 0, c = examples.length; i < c; i++) {
+        el = examples[i];
+        el.id = 'ex' + i;
+        ariaRole = el.getAttribute('role');
+        axElement = accessibilityController.accessibleElementById(el.id);
+        if (axElement) {
+            role = axElement.role;
+            subrole = axElement.subrole;
+            roleDescription = axElement.roleDescription;
+        } else {
+            role = 'AXRole: ';
+            subrole = 'AXSubrole: ';
+            roleDescription = 'AXRoleDescription: ';
+        }
+        
+        output = el.tagName.toLowerCase() + (ariaRole?("[role="+ariaRole+"]"):'');
+        if (el.getAttribute('data-note')) {
+            output += el.getAttribute('data-note');
+        }
+        output += indent;
+        output += role + indent;
+        output += subrole + indent;
+        output += roleDescription + indent;
+
+        expectation = el.getAttribute('data-role') +"/"+ el.getAttribute('data-subrole') +"/"+ el.getAttribute('data-roledescription');
+
+        result = document.getElementById('console');
+        
+        // Test AXRole, AXSubrole, and AXRoleDescription.
+        if (role.replace('AXRole: ','') == el.getAttribute('data-role')
+            && subrole.replace('AXSubrole: ','') == el.getAttribute('data-subrole')
+            && roleDescription.replace('AXRoleDescription: ','') == el.getAttribute('data-roledescription')) {
+            result.innerText += "PASS: " + output + "\n";
+        } else {
+            result.innerText += "FAIL: " + output + "Expected: " + expectation + "\n\n";
+        }
+    }
+    
+    // Once tests are complete, hide all the example markup.
+    examples = document.querySelectorAll('.ex');
+    for (var i = 0, c = examples.length; i < c; i++) {
+        el = examples[i];
+        el.style.display = 'none';
+    }
+}
+</script>
+<script src="../../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>