public AstNode rewrite(final AstNode node, final C context) {
    return rewriter.process(node, context);
  }
@Test
  public void shouldRewriteGroupBy() {
    // Given:
    final Expression exp1 = mock(Expression.class);
    final Expression exp2 = mock(Expression.class);
    final Expression rewrittenExp1 = mock(Expression.class);
    final Expression rewrittenExp2 = mock(Expression.class);
    final GroupBy groupBy = new GroupBy(
        location,
        ImmutableList.of(exp1, exp2)
    );
    when(expressionRewriter.apply(exp1, context)).thenReturn(rewrittenExp1);
    when(expressionRewriter.apply(exp2, context)).thenReturn(rewrittenExp2);

    // When:
    final AstNode rewritten = rewriter.rewrite(groupBy, context);

    // Then:
    assertThat(
        rewritten,
        equalTo(
            new GroupBy(
                location,
                ImmutableList.of(rewrittenExp1, rewrittenExp2)
            )
        )
    );
  }