/* | |
* Copyright (c) 2007 Mockito contributors | |
* This program is made available under the terms of the MIT License. | |
*/ | |
package org.mockito.internal.matchers; | |
import org.hamcrest.Description; | |
import org.hamcrest.Matcher; | |
import org.hamcrest.SelfDescribing; | |
import org.mockito.internal.debugging.LocationImpl; | |
import org.mockito.invocation.Location; | |
import java.io.Serializable; | |
@SuppressWarnings("unchecked") | |
public class LocalizedMatcher implements Matcher, ContainsExtraTypeInformation, CapturesArguments, MatcherDecorator, Serializable { | |
private static final long serialVersionUID = 6748641229659825725L; | |
private final Matcher actualMatcher; | |
private final 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; | |
} | |
} |