Equality.java revision 2637d96c202372854a7c71466ddcc6e90fc4fc53
1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5package org.mockito.internal.matchers;
6
7import java.lang.reflect.Array;
8
9//stolen from hamcrest because I didn't want to have more dependency than Matcher class
10public class Equality {
11
12    public static boolean areEqual(Object o1, Object o2) {
13        if (o1 == o2 ) {
14            return true;
15    } else if (o1 == null || o2 == null) {
16            return false;
17        } else if (isArray(o1)) {
18            return isArray(o2) && areArraysEqual(o1, o2);
19        } else {
20            return o1.equals(o2);
21        }
22    }
23
24    static boolean areArraysEqual(Object o1, Object o2) {
25        return areArrayLengthsEqual(o1, o2)
26                && areArrayElementsEqual(o1, o2);
27    }
28
29    static boolean areArrayLengthsEqual(Object o1, Object o2) {
30        return Array.getLength(o1) == Array.getLength(o2);
31    }
32
33    static boolean areArrayElementsEqual(Object o1, Object o2) {
34        for (int i = 0; i < Array.getLength(o1); i++) {
35            if (!areEqual(Array.get(o1, i), Array.get(o2, i))) return false;
36        }
37        return true;
38    }
39
40    static boolean isArray(Object o) {
41        return o.getClass().isArray();
42    }
43}
44