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}