selectable.js (3568B)
1 /* import-globals-from common.js */ 2 /* import-globals-from states.js */ 3 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 } 15 16 var msg = aMsg ? aMsg : ""; 17 var len = aSelectedChildren.length; 18 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 ); 28 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 } 52 53 // selectedItemCount 54 is( 55 acc.selectedItemCount, 56 aSelectedChildren.length, 57 "selectedItemCount: wrong selected children count for " + 58 prettyName(aIdentifier) 59 ); 60 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 } 78 79 // isItemSelected 80 testIsItemSelected(acc, acc, { value: 0 }, aSelectedChildren, msg); 81 } 82 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; 106 107 if (matches) { 108 isSelected = true; 109 break; 110 } 111 } 112 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 ); 123 124 // selected state 125 testStates( 126 child, 127 isSelected ? STATE_SELECTED : 0, 128 0, 129 !isSelected ? STATE_SELECTED : 0, 130 0 131 ); 132 133 continue; 134 } 135 136 testIsItemSelected(aSelectAcc, child, aIndexObj, aSelectedChildren); 137 } 138 }