no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / accessible / tests / mochitest / selectable.js
blob43c7260b0a0036df5737a2634a484623237201b1
1 /* import-globals-from common.js */
2 /* import-globals-from states.js */
4 /**
5  * Test selection getter methods of nsIAccessibleSelectable.
6  *
7  * @param aIdentifier        [in] selectable container accessible
8  * @param aSelectedChildren  [in] array of selected children
9  */
10 function testSelectableSelection(aIdentifier, aSelectedChildren, aMsg) {
11   var acc = getAccessible(aIdentifier, [nsIAccessibleSelectable]);
12   if (!acc) {
13     return;
14   }
16   var msg = aMsg ? aMsg : "";
17   var len = aSelectedChildren.length;
19   // getSelectedChildren
20   var selectedChildren = acc.selectedItems;
21   is(
22     selectedChildren ? selectedChildren.length : 0,
23     len,
24     msg +
25       "getSelectedChildren: wrong selected children count for " +
26       prettyName(aIdentifier)
27   );
29   for (let idx = 0; idx < len; idx++) {
30     let expectedAcc = aSelectedChildren[idx];
31     let expectedAccId =
32       expectedAcc instanceof nsIAccessible
33         ? getAccessibleDOMNodeID(expectedAcc)
34         : expectedAcc;
35     let actualAcc = selectedChildren.queryElementAt(idx, nsIAccessible);
36     let actualAccId = getAccessibleDOMNodeID(actualAcc);
37     is(
38       actualAccId,
39       expectedAccId,
40       msg +
41         "getSelectedChildren: wrong selected child at index " +
42         idx +
43         " for " +
44         prettyName(aIdentifier) +
45         " { actual : " +
46         prettyName(actualAcc) +
47         ", expected: " +
48         prettyName(expectedAcc) +
49         "}"
50     );
51   }
53   // selectedItemCount
54   is(
55     acc.selectedItemCount,
56     aSelectedChildren.length,
57     "selectedItemCount: wrong selected children count for " +
58       prettyName(aIdentifier)
59   );
61   // getSelectedItemAt
62   for (let idx = 0; idx < len; idx++) {
63     let expectedAcc = aSelectedChildren[idx];
64     let expectedAccId =
65       expectedAcc instanceof nsIAccessible
66         ? getAccessibleDOMNodeID(expectedAcc)
67         : expectedAcc;
68     is(
69       getAccessibleDOMNodeID(acc.getSelectedItemAt(idx)),
70       expectedAccId,
71       msg +
72         "getSelectedItemAt: wrong selected child at index " +
73         idx +
74         " for " +
75         prettyName(aIdentifier)
76     );
77   }
79   // isItemSelected
80   testIsItemSelected(acc, acc, { value: 0 }, aSelectedChildren, msg);
83 /**
84  * Test isItemSelected method, helper for testSelectableSelection
85  */
86 function testIsItemSelected(
87   aSelectAcc,
88   aTraversedAcc,
89   aIndexObj,
90   aSelectedChildren,
91   aMsg
92 ) {
93   var childCount = aTraversedAcc.childCount;
94   for (var idx = 0; idx < childCount; idx++) {
95     var child = aTraversedAcc.getChildAt(idx);
96     var [state /* extraState */] = getStates(child);
97     if (state & STATE_SELECTABLE) {
98       var isSelected = false;
99       var len = aSelectedChildren.length;
100       for (var jdx = 0; jdx < len; jdx++) {
101         let expectedAcc = aSelectedChildren[jdx];
102         let matches =
103           expectedAcc instanceof nsIAccessible
104             ? child == expectedAcc
105             : getAccessibleDOMNodeID(child) == expectedAcc;
107         if (matches) {
108           isSelected = true;
109           break;
110         }
111       }
113       // isItemSelected
114       is(
115         aSelectAcc.isItemSelected(aIndexObj.value++),
116         isSelected,
117         aMsg +
118           "isItemSelected: wrong selected child " +
119           prettyName(child) +
120           " for " +
121           prettyName(aSelectAcc)
122       );
124       // selected state
125       testStates(
126         child,
127         isSelected ? STATE_SELECTED : 0,
128         0,
129         !isSelected ? STATE_SELECTED : 0,
130         0
131       );
133       continue;
134     }
136     testIsItemSelected(aSelectAcc, child, aIndexObj, aSelectedChildren);
137   }