001/*  Copyright (c) 2000-2006 hamcrest.org
002 */
003package org.hamcrest.core;
004
005import org.hamcrest.BaseMatcher;
006import org.hamcrest.Description;
007import org.hamcrest.Factory;
008import org.hamcrest.Matcher;
009
010
011/**
012 * Is the value the same object as another value?
013 */
014public class IsSame<T> extends BaseMatcher<T> {
015    private final T object;
016    
017    public IsSame(T object) {
018        this.object = object;
019    }
020
021    @Override
022    public boolean matches(Object arg) {
023        return arg == object;
024    }
025
026    @Override
027    public void describeTo(Description description) {
028        description.appendText("sameInstance(")
029                .appendValue(object)
030                .appendText(")");
031    }
032    
033    /**
034     * Creates a matcher that matches only when the examined object is the same instance as
035     * the specified target object.
036     *
037     * @param target
038     *     the target instance against which others should be assessed
039     */
040    @Factory
041    public static <T> Matcher<T> sameInstance(T target) {
042        return new IsSame<T>(target);
043    }
044    
045    /**
046     * Creates a matcher that matches only when the examined object is the same instance as
047     * the specified target object.
048     *
049     * @param target
050     *     the target instance against which others should be assessed
051     */
052    @Factory
053    public static <T> Matcher<T> theInstance(T target) {
054        return new IsSame<T>(target);
055    }
056}