michael@0: /** michael@0: * Test selection getter methods of nsIAccessibleSelectable. michael@0: * michael@0: * @param aIdentifier [in] selectable container accessible michael@0: * @param aSelectedChildren [in] array of selected children michael@0: */ michael@0: function testSelectableSelection(aIdentifier, aSelectedChildren, aMsg) michael@0: { michael@0: var acc = getAccessible(aIdentifier, [nsIAccessibleSelectable]); michael@0: if (!acc) michael@0: return; michael@0: michael@0: var msg = aMsg ? aMsg : ""; michael@0: var len = aSelectedChildren.length; michael@0: michael@0: // getSelectedChildren michael@0: var selectedChildren = acc.selectedItems; michael@0: is(selectedChildren ? selectedChildren.length : 0, len, michael@0: msg + "getSelectedChildren: wrong selected children count for " + michael@0: prettyName(aIdentifier)); michael@0: michael@0: for (var idx = 0; idx < len; idx++) { michael@0: var expectedAcc = getAccessible(aSelectedChildren[idx]); michael@0: var actualAcc = selectedChildren.queryElementAt(idx, nsIAccessible); michael@0: is(actualAcc, expectedAcc, michael@0: msg + "getSelectedChildren: wrong selected child at index " + idx + michael@0: " for " + prettyName(aIdentifier) + " { actual : " + michael@0: prettyName(actualAcc) + ", expected: " + prettyName(expectedAcc) + "}"); michael@0: } michael@0: michael@0: // selectedItemCount michael@0: is(acc.selectedItemCount, aSelectedChildren.length, michael@0: "selectedItemCount: wrong selected children count for " + prettyName(aIdentifier)); michael@0: michael@0: // getSelectedItemAt michael@0: for (var idx = 0; idx < len; idx++) { michael@0: var expectedAcc = getAccessible(aSelectedChildren[idx]); michael@0: is(acc.getSelectedItemAt(idx), expectedAcc, michael@0: msg + "getSelectedItemAt: wrong selected child at index " + idx + " for " + michael@0: prettyName(aIdentifier)); michael@0: } michael@0: michael@0: // isItemSelected michael@0: testIsItemSelected(acc, acc, { value: 0 }, aSelectedChildren, msg); michael@0: } michael@0: michael@0: /** michael@0: * Test isItemSelected method, helper for testSelectableSelection michael@0: */ michael@0: function testIsItemSelected(aSelectAcc, aTraversedAcc, aIndexObj, aSelectedChildren, aMsg) michael@0: { michael@0: var childCount = aTraversedAcc.childCount; michael@0: for (var idx = 0; idx < childCount; idx++) { michael@0: var child = aTraversedAcc.getChildAt(idx); michael@0: var [state, extraState] = getStates(child); michael@0: if (state & STATE_SELECTABLE) { michael@0: var isSelected = false; michael@0: var len = aSelectedChildren.length; michael@0: for (var jdx = 0; jdx < len; jdx++) { michael@0: if (child == getAccessible(aSelectedChildren[jdx])) { michael@0: isSelected = true; michael@0: break; michael@0: } michael@0: } michael@0: michael@0: // isItemSelected michael@0: is(aSelectAcc.isItemSelected(aIndexObj.value++), isSelected, michael@0: aMsg + "isItemSelected: wrong selected child " + prettyName(child) + michael@0: " for " + prettyName(aSelectAcc)); michael@0: michael@0: // selected state michael@0: testStates(child, isSelected ? STATE_SELECTED : 0, 0, michael@0: !isSelected ? STATE_SELECTED : 0 , 0); michael@0: michael@0: continue; michael@0: } michael@0: michael@0: testIsItemSelected(aSelectAcc, child, aIndexObj, aSelectedChildren); michael@0: } michael@0: }