I'm currently writing unit tests on a code base that uses a lot of ActionEvent
's internally, and since ActionEvent
doesn't override equals()
, I'm creating a custom ArgumentMatcher
to match ActionEvent
's.
My ArgumentMatcher
currently looks like this:
public class ActionEventMatcher extends ArgumentMatcher<ActionEvent> {
private Object source;
private int id;
private String actionCommand;
public ActionEventMatcher(Object source, int id, String actionCommand) {
this.source = source;
this.id = id;
this.actionCommand = actionCommand;
}
@Override
public boolean matches(Object argument) {
if (!(argument instanceof ActionEvent))
return false;
ActionEvent e = (ActionEvent)argument;
return source.equals(e.getSource()) &&
id == e.getId() && actionCommand.equals(e.getActionCommand());
}
}
I would like to know if it possible to change my ArgumentMatcher
so that it accepts arguments that were created from other matchers. For instance, if I have a method called actionEvent()
that returns the matcher, I would like to be able to do the following:
verify(mock).fireEvent(argThat(actionEvent(same(source), anyInt(), eq("actionCommand"))));
Is there a way to have a custom ArgumentMatcher
that accepts arguments from other matchers this way?