|
1 /** |
|
2 * Test selection getter methods of nsIAccessibleSelectable. |
|
3 * |
|
4 * @param aIdentifier [in] selectable container accessible |
|
5 * @param aSelectedChildren [in] array of selected children |
|
6 */ |
|
7 function testSelectableSelection(aIdentifier, aSelectedChildren, aMsg) |
|
8 { |
|
9 var acc = getAccessible(aIdentifier, [nsIAccessibleSelectable]); |
|
10 if (!acc) |
|
11 return; |
|
12 |
|
13 var msg = aMsg ? aMsg : ""; |
|
14 var len = aSelectedChildren.length; |
|
15 |
|
16 // getSelectedChildren |
|
17 var selectedChildren = acc.selectedItems; |
|
18 is(selectedChildren ? selectedChildren.length : 0, len, |
|
19 msg + "getSelectedChildren: wrong selected children count for " + |
|
20 prettyName(aIdentifier)); |
|
21 |
|
22 for (var idx = 0; idx < len; idx++) { |
|
23 var expectedAcc = getAccessible(aSelectedChildren[idx]); |
|
24 var actualAcc = selectedChildren.queryElementAt(idx, nsIAccessible); |
|
25 is(actualAcc, expectedAcc, |
|
26 msg + "getSelectedChildren: wrong selected child at index " + idx + |
|
27 " for " + prettyName(aIdentifier) + " { actual : " + |
|
28 prettyName(actualAcc) + ", expected: " + prettyName(expectedAcc) + "}"); |
|
29 } |
|
30 |
|
31 // selectedItemCount |
|
32 is(acc.selectedItemCount, aSelectedChildren.length, |
|
33 "selectedItemCount: wrong selected children count for " + prettyName(aIdentifier)); |
|
34 |
|
35 // getSelectedItemAt |
|
36 for (var idx = 0; idx < len; idx++) { |
|
37 var expectedAcc = getAccessible(aSelectedChildren[idx]); |
|
38 is(acc.getSelectedItemAt(idx), expectedAcc, |
|
39 msg + "getSelectedItemAt: wrong selected child at index " + idx + " for " + |
|
40 prettyName(aIdentifier)); |
|
41 } |
|
42 |
|
43 // isItemSelected |
|
44 testIsItemSelected(acc, acc, { value: 0 }, aSelectedChildren, msg); |
|
45 } |
|
46 |
|
47 /** |
|
48 * Test isItemSelected method, helper for testSelectableSelection |
|
49 */ |
|
50 function testIsItemSelected(aSelectAcc, aTraversedAcc, aIndexObj, aSelectedChildren, aMsg) |
|
51 { |
|
52 var childCount = aTraversedAcc.childCount; |
|
53 for (var idx = 0; idx < childCount; idx++) { |
|
54 var child = aTraversedAcc.getChildAt(idx); |
|
55 var [state, extraState] = getStates(child); |
|
56 if (state & STATE_SELECTABLE) { |
|
57 var isSelected = false; |
|
58 var len = aSelectedChildren.length; |
|
59 for (var jdx = 0; jdx < len; jdx++) { |
|
60 if (child == getAccessible(aSelectedChildren[jdx])) { |
|
61 isSelected = true; |
|
62 break; |
|
63 } |
|
64 } |
|
65 |
|
66 // isItemSelected |
|
67 is(aSelectAcc.isItemSelected(aIndexObj.value++), isSelected, |
|
68 aMsg + "isItemSelected: wrong selected child " + prettyName(child) + |
|
69 " for " + prettyName(aSelectAcc)); |
|
70 |
|
71 // selected state |
|
72 testStates(child, isSelected ? STATE_SELECTED : 0, 0, |
|
73 !isSelected ? STATE_SELECTED : 0 , 0); |
|
74 |
|
75 continue; |
|
76 } |
|
77 |
|
78 testIsItemSelected(aSelectAcc, child, aIndexObj, aSelectedChildren); |
|
79 } |
|
80 } |