Source code

Revision control

Copy as Markdown

Other Tools

/* import-globals-from common.js */
/* import-globals-from states.js */
/**
* 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 (let idx = 0; idx < len; idx++) {
let expectedAcc = aSelectedChildren[idx];
let expectedAccId =
expectedAcc instanceof nsIAccessible
? getAccessibleDOMNodeID(expectedAcc)
: expectedAcc;
let actualAcc = selectedChildren.queryElementAt(idx, nsIAccessible);
let actualAccId = getAccessibleDOMNodeID(actualAcc);
is(
actualAccId,
expectedAccId,
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 (let idx = 0; idx < len; idx++) {
let expectedAcc = aSelectedChildren[idx];
let expectedAccId =
expectedAcc instanceof nsIAccessible
? getAccessibleDOMNodeID(expectedAcc)
: expectedAcc;
is(
getAccessibleDOMNodeID(acc.getSelectedItemAt(idx)),
expectedAccId,
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++) {
let expectedAcc = aSelectedChildren[jdx];
let matches =
expectedAcc instanceof nsIAccessible
? child == expectedAcc
: getAccessibleDOMNodeID(child) == expectedAcc;
if (matches) {
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);
}
}