15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2007 Mockito contributors 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This program is made available under the terms of the MIT License. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.mockito.internal.matchers; 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.hamcrest.Description; 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.hamcrest.SelfDescribing; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.mockito.ArgumentMatcher; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.Serializable; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class Equals extends ArgumentMatcher<Object> implements ContainsExtraTypeInformation, Serializable { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final long serialVersionUID = -3395637450058086891L; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final Object wanted; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public Equals(Object wanted) { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.wanted = wanted; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean matches(Object actual) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Equality.areEqual(this.wanted, actual); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void describeTo(Description description) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description.appendText(describe(wanted)); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public String describe(Object object) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String text = quoting(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text+="" + object; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) text+= quoting(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return text; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String quoting() { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wanted instanceof String) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "\""; 41 } else if (wanted instanceof Character) { 42 return "'"; 43 } else { 44 return ""; 45 } 46 } 47 48 protected final Object getWanted() { 49 return wanted; 50 } 51 52 @Override 53 public boolean equals(Object o) { 54 if (o == null || !this.getClass().equals(o.getClass())) { 55 return false; 56 } 57 Equals other = (Equals) o; 58 return this.wanted == null && other.wanted == null || this.wanted != null && this.wanted.equals(other.wanted); 59 } 60 61 @Override 62 public int hashCode() { 63 return 1; 64 } 65 66 public SelfDescribing withExtraTypeInfo() { 67 return new SelfDescribing() { 68 public void describeTo(Description description) { 69 description.appendText(describe("("+ wanted.getClass().getSimpleName() +") " + wanted)); 70 }}; 71 } 72 73 public boolean typeMatches(Object object) { 74 return wanted != null && object != null && object.getClass() == wanted.getClass(); 75 } 76}