tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }