@Test
  public void testOptionScanningEnabled_highlightsMenuButton() {
    mSharedPreferences
        .edit()
        .putString(
            mContext.getString(R.string.pref_scanning_methods_key),
            mContext.getString(R.string.option_scanning_key))
        .commit();
    mOptionManager.onSharedPreferenceChanged(mSharedPreferences, null);
    when(mOverlayController.getMenuButtonLocation()).thenReturn(MENU_BUTTON_BOUNDS);

    /* add a context menu with two items to the tree */
    CharSequence globalActionLabel0 = "global action label 0";
    CharSequence globalActionLabel1 = "global action label 1";
    GlobalActionNode globalNode0 = new GlobalActionNode(0, null, globalActionLabel0);
    GlobalActionNode globalNode1 = new GlobalActionNode(1, null, globalActionLabel1);
    ContextMenuNode contextMenu = new ContextMenuNode(globalNode0, globalNode1);
    mSelectionNode = new OptionScanSelectionNode(mSelectionNode, contextMenu);

    mOptionManager.clearFocusIfNewTree(mSelectionNode);
    mOptionManager.selectOption(0);
    verify(mOverlayController, times(1)).drawMenuButton();

    ShadowHandler.runMainLooperToEndOfTasks();

    verify(mOverlayController, times(2))
        .highlightPerimeterOfRects(mHighlightCaptor.capture(), mPaintCaptor.capture());

    List<Collection<Rect>> capturedHighlights = mHighlightCaptor.getAllValues();
    assertTrue(capturedHighlights.get(0).contains(NODE_BOUNDS_1));
    assertTrue(capturedHighlights.get(0).contains(NODE_BOUNDS_2));
    assertTrue(capturedHighlights.get(1).contains(MENU_BUTTON_BOUNDS));
  }
 @Test
 public void testHighlightStylesForOptionScanning_defaultsAreDifferent() {
   mOptionManager.onSharedPreferenceChanged(mSharedPreferences, null);
   mOptionManager.clearFocusIfNewTree(mSelectionNode);
   mOptionManager.selectOption(0);
   verify(mOverlayController, times(2))
       .highlightPerimeterOfRects(mHighlightCaptor.capture(), mPaintCaptor.capture());
   /* The two paint colors should be different */
   List<Paint> capturedPaints = mPaintCaptor.getAllValues();
   assertFalse(capturedPaints.get(0).getColor() == capturedPaints.get(1).getColor());
 }
 @Test
 public void testSelectionNodeWithOptionScanning_shouldHighlightTwoOptions() {
   mSharedPreferences
       .edit()
       .putString(
           mContext.getString(R.string.pref_highlight_0_color_key),
           mContext.getString(R.string.material_orange_500))
       .putString(
           mContext.getString(R.string.pref_highlight_0_weight_key),
           mContext.getString(R.string.thickness_4_dp))
       .putString(
           mContext.getString(R.string.pref_highlight_1_color_key),
           mContext.getString(R.string.material_blue_500))
       .putString(
           mContext.getString(R.string.pref_highlight_1_weight_key),
           mContext.getString(R.string.thickness_4_dp))
       .putString(
           mContext.getString(R.string.pref_scanning_methods_key),
           mContext.getString(R.string.option_scanning_key))
       .commit();
   mOptionManager.onSharedPreferenceChanged(mSharedPreferences, null);
   mOptionManager.clearFocusIfNewTree(mSelectionNode);
   mOptionManager.selectOption(0);
   verify(mOverlayController, times(2))
       .highlightPerimeterOfRects(mHighlightCaptor.capture(), mPaintCaptor.capture());
   /* One paint should be blue; the other should be orange */
   List<Collection<Rect>> capturedHighlights = mHighlightCaptor.getAllValues();
   List<Paint> capturedPaints = mPaintCaptor.getAllValues();
   int orangeIndex = 0;
   int blueIndex = 1;
   if (capturedPaints.get(0).getColor() == BLUE_500_COLOR) {
     blueIndex = 0;
     orangeIndex = 1;
   }
   assertEquals(BLUE_500_COLOR, capturedPaints.get(blueIndex).getColor());
   assertEquals(ORANGE_500_COLOR, capturedPaints.get(orangeIndex).getColor());
   assertEquals(0xff, capturedPaints.get(orangeIndex).getAlpha());
   DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
   float expectedStrokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, dm);
   assertEquals(expectedStrokeWidth, capturedPaints.get(orangeIndex).getStrokeWidth(), 0.01);
   assertTrue(capturedHighlights.get(orangeIndex).contains(NODE_BOUNDS_1));
   assertTrue(capturedHighlights.get(blueIndex).contains(NODE_BOUNDS_2));
 }