accessible/tests/mochitest/selectable.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/accessible/tests/mochitest/selectable.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,80 @@
     1.4 +/**
     1.5 + * Test selection getter methods of nsIAccessibleSelectable.
     1.6 + *
     1.7 + * @param aIdentifier        [in] selectable container accessible
     1.8 + * @param aSelectedChildren  [in] array of selected children
     1.9 + */
    1.10 +function testSelectableSelection(aIdentifier, aSelectedChildren, aMsg)
    1.11 +{
    1.12 +  var acc = getAccessible(aIdentifier, [nsIAccessibleSelectable]);
    1.13 +  if (!acc)
    1.14 +    return;
    1.15 +
    1.16 +  var msg = aMsg ? aMsg : "";
    1.17 +  var len = aSelectedChildren.length;
    1.18 +
    1.19 +  // getSelectedChildren
    1.20 +  var selectedChildren = acc.selectedItems;
    1.21 +  is(selectedChildren ? selectedChildren.length : 0, len,
    1.22 +     msg + "getSelectedChildren: wrong selected children count for " +
    1.23 +     prettyName(aIdentifier));
    1.24 +
    1.25 +  for (var idx = 0; idx < len; idx++) {
    1.26 +    var expectedAcc = getAccessible(aSelectedChildren[idx]);
    1.27 +    var actualAcc = selectedChildren.queryElementAt(idx, nsIAccessible);
    1.28 +    is(actualAcc, expectedAcc,
    1.29 +       msg + "getSelectedChildren: wrong selected child at index " + idx +
    1.30 +       " for " + prettyName(aIdentifier) + " { actual : " +
    1.31 +       prettyName(actualAcc) + ", expected: " + prettyName(expectedAcc) + "}");
    1.32 +  }
    1.33 +
    1.34 +  // selectedItemCount
    1.35 +  is(acc.selectedItemCount, aSelectedChildren.length,
    1.36 +     "selectedItemCount: wrong selected children count for " + prettyName(aIdentifier));
    1.37 +
    1.38 +  // getSelectedItemAt
    1.39 +  for (var idx = 0; idx < len; idx++) {
    1.40 +    var expectedAcc = getAccessible(aSelectedChildren[idx]);
    1.41 +    is(acc.getSelectedItemAt(idx), expectedAcc,
    1.42 +       msg + "getSelectedItemAt: wrong selected child at index " + idx + " for " +
    1.43 +       prettyName(aIdentifier));
    1.44 +  }
    1.45 +
    1.46 +  // isItemSelected
    1.47 +  testIsItemSelected(acc, acc, { value: 0 }, aSelectedChildren, msg);
    1.48 +}
    1.49 +
    1.50 +/**
    1.51 + * Test isItemSelected method, helper for testSelectableSelection
    1.52 + */
    1.53 +function testIsItemSelected(aSelectAcc, aTraversedAcc, aIndexObj, aSelectedChildren, aMsg)
    1.54 +{
    1.55 +  var childCount = aTraversedAcc.childCount;
    1.56 +  for (var idx = 0; idx < childCount; idx++) {
    1.57 +    var child = aTraversedAcc.getChildAt(idx);
    1.58 +    var [state, extraState] = getStates(child);
    1.59 +    if (state & STATE_SELECTABLE) {
    1.60 +      var isSelected = false;
    1.61 +      var len = aSelectedChildren.length;
    1.62 +      for (var jdx = 0; jdx < len; jdx++) {
    1.63 +        if (child == getAccessible(aSelectedChildren[jdx])) {
    1.64 +          isSelected = true;
    1.65 +          break;
    1.66 +        }
    1.67 +      }
    1.68 +
    1.69 +      // isItemSelected
    1.70 +      is(aSelectAcc.isItemSelected(aIndexObj.value++), isSelected,
    1.71 +         aMsg + "isItemSelected: wrong selected child " + prettyName(child) +
    1.72 +         " for " + prettyName(aSelectAcc));
    1.73 +
    1.74 +      // selected state
    1.75 +      testStates(child, isSelected ? STATE_SELECTED : 0, 0,
    1.76 +                 !isSelected ? STATE_SELECTED : 0 , 0);
    1.77 +
    1.78 +      continue;
    1.79 +    }
    1.80 +
    1.81 +    testIsItemSelected(aSelectAcc, child, aIndexObj, aSelectedChildren);
    1.82 +  }
    1.83 +}

mercurial