### Question:
InverseGridWidgetClipper implements IPathClipper { @Override public boolean clip(final Context2D context) { context.beginPath(); context.rect(0, 0, innerBoundingBox.getMinX(), outerBoundingBox.getHeight()); context.rect(innerBoundingBox.getMinX(), 0, innerBoundingBox.getWidth(), innerBoundingBox.getMinY()); context.rect(innerBoundingBox.getMinX(), innerBoundingBox.getMaxY(), innerBoundingBox.getWidth(), outerBoundingBox.getMaxY() - innerBoundingBox.getMaxY()); context.rect(innerBoundingBox.getMaxX(), 0, outerBoundingBox.getMaxX() - innerBoundingBox.getMaxX(), outerBoundingBox.getHeight()); context.clip(); return true; } InverseGridWidgetClipper(final GridWidget outer,
                                    final GridWidget inner); @Override boolean clip(final Context2D context); @Override boolean isActive(); @Override boolean setActive(final boolean isActive);  }### Answer:
@Test public void testClip() { clipper.clip(context2D); verify(context2D).beginPath(); verify(context2D).rect(eq(OUTER_ABSOLUTE_X), eq(OUTER_ABSOLUTE_Y), eq(INNER_ABSOLUTE_X), eq(OUTER_HEIGHT + BaseExpressionGridTheme.STROKE_WIDTH)); verify(context2D).rect(eq(INNER_ABSOLUTE_X), eq(OUTER_ABSOLUTE_Y), eq(INNER_WIDTH + BaseExpressionGridTheme.STROKE_WIDTH), eq(INNER_ABSOLUTE_Y)); verify(context2D).rect(eq(INNER_ABSOLUTE_X), eq(INNER_ABSOLUTE_Y + INNER_HEIGHT + BaseExpressionGridTheme.STROKE_WIDTH), eq(INNER_WIDTH + BaseExpressionGridTheme.STROKE_WIDTH), eq(OUTER_ABSOLUTE_Y + OUTER_HEIGHT - (INNER_ABSOLUTE_Y + INNER_HEIGHT))); verify(context2D).rect(eq(INNER_ABSOLUTE_X + INNER_WIDTH + BaseExpressionGridTheme.STROKE_WIDTH), eq(OUTER_ABSOLUTE_Y), eq(OUTER_ABSOLUTE_X + OUTER_WIDTH - (INNER_ABSOLUTE_X + INNER_WIDTH)), eq(OUTER_HEIGHT + BaseExpressionGridTheme.STROKE_WIDTH)); verify(context2D).clip(); }