138 lines
3.5 KiB
JavaScript
138 lines
3.5 KiB
JavaScript
/* 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);
|
|
}
|
|
}
|