1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.matchers; 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.ArgumentMatcher; 92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.matchers.text.ValuePrinter; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.io.Serializable; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class Equals implements ArgumentMatcher<Object>, ContainsExtraTypeInfo, Serializable { 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final Object wanted; 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public Equals(Object wanted) { 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.wanted = wanted; 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public boolean matches(Object actual) { 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return Equality.areEqual(this.wanted, actual); 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public String toString() { 262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return describe(wanted); 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private String describe(Object object) { 302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return ValuePrinter.print(object); 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson protected final Object getWanted() { 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return wanted; 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson @Override 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public boolean equals(Object o) { 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (o == null || !this.getClass().equals(o.getClass())) { 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return false; 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Equals other = (Equals) o; 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return this.wanted == null && other.wanted == null || this.wanted != null && this.wanted.equals(other.wanted); 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson @Override 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public int hashCode() { 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return 1; 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public String toStringWithType() { 522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return "("+ wanted.getClass().getSimpleName() +") " + describe(wanted); 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 552637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public boolean typeMatches(Object target) { 562637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return wanted != null && target != null && target.getClass() == wanted.getClass(); 57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 582637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin} 59