This tests that when a list has the presentational role, and it has required required children, those required children "li" are also presentational.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


All "li" elements accept the button should be presentational.
apples
bananas
cantalope
dates
Nested list inside a presentational list should not be presentational
This item should not expose an AXGroup;
this one should not either.
However, because the nested UL and LI do not have explicit role of presentation,
this list item should expose an AXGroup,
and this one should, too.
but this one is static text again.
PASS container.childAtIndex(0).role is 'AXRole: AXStaticText'
PASS container.childAtIndex(0).stringValue is 'AXValue: apples'
PASS container.childAtIndex(1).stringValue is 'AXValue: bananas'
PASS container.childAtIndex(3).stringValue is 'AXValue: dates'
PASS container.childAtIndex(2).role is 'AXRole: AXButton'
PASS container.childAtIndex(2).title is 'AXTitle: cantalope'
PASS container2.childAtIndex(0).role is 'AXRole: AXStaticText'
PASS container2.childAtIndex(1).role is 'AXRole: AXStaticText'
PASS container2.childAtIndex(2).role is 'AXRole: AXStaticText'
PASS container2.childAtIndex(4).role is 'AXRole: AXStaticText'
PASS container2.childAtIndex(3).role is 'AXRole: AXList'
PASS container2.childAtIndex(3).childAtIndex(0).role is 'AXRole: AXGroup'
PASS container2.childAtIndex(3).childAtIndex(0).childAtIndex(0).role is 'AXRole: AXListMarker'
PASS container2.childAtIndex(3).childAtIndex(0).childAtIndex(1).role is 'AXRole: AXStaticText'
PASS successfullyParsed is true

TEST COMPLETE

