package org.eclipse.recommenders.internal.snipmatch.rcp.util; import static java.lang.String.format; import static java.util.Objects.requireNonNull; import java.util.Set; import org.eclipse.recommenders.coordinates.ProjectCoordinate; import org.eclipse.recommenders.snipmatch.ISearchContext; import org.eclipse.recommenders.snipmatch.Location; import org.hamcrest.Description; import org.hamcrest.TypeSafeMatcher; public final class SearchContextMatcher extends TypeSafeMatcher<ISearchContext> { private final String searchTerm; private final Location location; private final Set<ProjectCoordinate> dependencies; private SearchContextMatcher(String searchTerm, Location location, Set<ProjectCoordinate> dependencies) { this.searchTerm = requireNonNull(searchTerm); this.location = requireNonNull(location); this.dependencies = requireNonNull(dependencies); } public static SearchContextMatcher context(String searchTerm, Location location, Set<ProjectCoordinate> dependencies) { return new SearchContextMatcher(searchTerm, location, dependencies); } @Override public boolean matchesSafely(ISearchContext context) { if (!context.getSearchText().equals(searchTerm)) { return false; } if (context.getLocation() != location) { return false; } return true; } @Override public void describeTo(Description description) { description.appendText(getDescription(searchTerm, location, dependencies)); } @Override public void describeMismatchSafely(ISearchContext context, Description description) { description .appendText(getDescription(context.getSearchText(), context.getLocation(), context.getDependencies())); } private String getDescription(String searchTerm, Location location, Set<ProjectCoordinate> dependencies) { return format("ISearchContext with searchtext '%s', location '%s', dependencies '%s'", searchTerm, location.name(), dependencies); } }