package org.eclipse.recommenders.internal.snipmatch.rcp.util;
import static java.lang.String.format;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.recommenders.internal.snipmatch.rcp.completion.SnippetProposal;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;
public final class SnippetProposalMatcher extends TypeSafeMatcher<SnippetProposal> {
private final String displayString;
private final int repoPriority;
private final String selection;
private SnippetProposalMatcher(String displayString, int repoPriority, String selection) {
this.displayString = displayString;
this.repoPriority = repoPriority;
this.selection = selection;
}
public static SnippetProposalMatcher snippet(String displayString, int repoPriority, String selection) {
return new SnippetProposalMatcher(displayString, repoPriority, selection);
}
@Override
public boolean matchesSafely(SnippetProposal proposal) {
if (!displayString.equals(proposal.getDisplayString())) {
return false;
}
if (repoPriority != proposal.getRepositoryRelevance()) {
return false;
}
if (!StringUtils.equals(selection, proposal.getTemplateContext().getVariable("selection"))) {
return false;
}
return true;
}
@Override
public void describeTo(Description description) {
description.appendText(getDescription(displayString, repoPriority, selection));
}
@Override
public void describeMismatchSafely(SnippetProposal proposal, Description description) {
description.appendText("was ");
description.appendText(getDescription(proposal.getDisplayString(), proposal.getRepositoryRelevance(), proposal
.getTemplateContext().getVariable("selection")));
}
private String getDescription(String displayString, int repoPriority, String selection) {
return format("a proposal named '%s', repo priority: %d, selection: %s", displayString, repoPriority, selection);
}
}