diff options
Diffstat (limited to 'accessible/tests/mochitest/selectable.js')
-rw-r--r-- | accessible/tests/mochitest/selectable.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/accessible/tests/mochitest/selectable.js b/accessible/tests/mochitest/selectable.js new file mode 100644 index 000000000..87bf296f0 --- /dev/null +++ b/accessible/tests/mochitest/selectable.js @@ -0,0 +1,80 @@ +/** + * Test selection getter methods of nsIAccessibleSelectable. + * + * @param aIdentifier [in] selectable container accessible + * @param aSelectedChildren [in] array of selected children + */ +function testSelectableSelection(aIdentifier, aSelectedChildren, aMsg) +{ + var acc = getAccessible(aIdentifier, [nsIAccessibleSelectable]); + if (!acc) + return; + + var msg = aMsg ? aMsg : ""; + var len = aSelectedChildren.length; + + // getSelectedChildren + var selectedChildren = acc.selectedItems; + is(selectedChildren ? selectedChildren.length : 0, len, + msg + "getSelectedChildren: wrong selected children count for " + + prettyName(aIdentifier)); + + for (var idx = 0; idx < len; idx++) { + var expectedAcc = getAccessible(aSelectedChildren[idx]); + var actualAcc = selectedChildren.queryElementAt(idx, nsIAccessible); + is(actualAcc, expectedAcc, + msg + "getSelectedChildren: wrong selected child at index " + idx + + " for " + prettyName(aIdentifier) + " { actual : " + + prettyName(actualAcc) + ", expected: " + prettyName(expectedAcc) + "}"); + } + + // selectedItemCount + is(acc.selectedItemCount, aSelectedChildren.length, + "selectedItemCount: wrong selected children count for " + prettyName(aIdentifier)); + + // getSelectedItemAt + for (var idx = 0; idx < len; idx++) { + var expectedAcc = getAccessible(aSelectedChildren[idx]); + is(acc.getSelectedItemAt(idx), expectedAcc, + msg + "getSelectedItemAt: wrong selected child at index " + idx + " for " + + prettyName(aIdentifier)); + } + + // isItemSelected + testIsItemSelected(acc, acc, { value: 0 }, aSelectedChildren, msg); +} + +/** + * Test isItemSelected method, helper for testSelectableSelection + */ +function testIsItemSelected(aSelectAcc, aTraversedAcc, aIndexObj, aSelectedChildren, aMsg) +{ + var childCount = aTraversedAcc.childCount; + for (var idx = 0; idx < childCount; idx++) { + var child = aTraversedAcc.getChildAt(idx); + var [state, extraState] = getStates(child); + if (state & STATE_SELECTABLE) { + var isSelected = false; + var len = aSelectedChildren.length; + for (var jdx = 0; jdx < len; jdx++) { + if (child == getAccessible(aSelectedChildren[jdx])) { + isSelected = true; + break; + } + } + + // isItemSelected + is(aSelectAcc.isItemSelected(aIndexObj.value++), isSelected, + aMsg + "isItemSelected: wrong selected child " + prettyName(child) + + " for " + prettyName(aSelectAcc)); + + // selected state + testStates(child, isSelected ? STATE_SELECTED : 0, 0, + !isSelected ? STATE_SELECTED : 0 , 0); + + continue; + } + + testIsItemSelected(aSelectAcc, child, aIndexObj, aSelectedChildren); + } +} |