/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockito.internal.matchers; import java.io.Serializable; import org.hamcrest.*; import org.mockito.internal.debugging.LocationImpl; import org.mockito.invocation.Location; @SuppressWarnings("unchecked") public class LocalizedMatcher implements Matcher, ContainsExtraTypeInformation, CapturesArguments, MatcherDecorator, Serializable { private static final long serialVersionUID = 6748641229659825725L; private final Matcher actualMatcher; private Location location; public LocalizedMatcher(Matcher actualMatcher) { this.actualMatcher = actualMatcher; this.location = new LocationImpl(); } public void _dont_implement_Matcher___instead_extend_BaseMatcher_() { // yeah right } public boolean matches(Object item) { return actualMatcher.matches(item); } public void describeTo(Description description) { actualMatcher.describeTo(description); } public Location getLocation() { return location; } @Override public String toString() { return "Localized: " + this.actualMatcher; } public SelfDescribing withExtraTypeInfo() { if (actualMatcher instanceof ContainsExtraTypeInformation) { return ((ContainsExtraTypeInformation) actualMatcher).withExtraTypeInfo(); } else { return this; } } public boolean typeMatches(Object object) { return actualMatcher instanceof ContainsExtraTypeInformation && ((ContainsExtraTypeInformation) actualMatcher).typeMatches(object); } public void captureFrom(Object argument) { if (actualMatcher instanceof CapturesArguments) { ((CapturesArguments) actualMatcher).captureFrom(argument); } } //TODO: refactor other 'delegated interfaces' to use the MatcherDecorator feature public Matcher getActualMatcher() { return actualMatcher; } }