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 Parkinsonpackage org.mockito.internal.matchers; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.Array; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson//stolen from hamcrest because I didn't want to have more dependency than Matcher class 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class Equality { 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public static boolean areEqual(Object o1, Object o2) { 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (o1 == null || o2 == null) { 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return o1 == null && o2 == null; 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } else if (isArray(o1)) { 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return isArray(o2) && areArraysEqual(o1, o2); 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } else { 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return o1.equals(o2); 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson static boolean areArraysEqual(Object o1, Object o2) { 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return areArrayLengthsEqual(o1, o2) 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson && areArrayElementsEqual(o1, o2); 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson static boolean areArrayLengthsEqual(Object o1, Object o2) { 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return Array.getLength(o1) == Array.getLength(o2); 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson static boolean areArrayElementsEqual(Object o1, Object o2) { 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson for (int i = 0; i < Array.getLength(o1); i++) { 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (!areEqual(Array.get(o1, i), Array.get(o2, i))) return false; 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return true; 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson static boolean isArray(Object o) { 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return o.getClass().isArray(); 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}