1 /* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 6 package org.mockito.internal.matchers; 7 8 import java.lang.reflect.Array; 9 import java.util.Arrays; 10 11 public class ArrayEquals extends Equals { 12 13 public ArrayEquals(Object wanted) { 14 super(wanted); 15 } 16 17 public boolean matches(Object actual) { 18 Object wanted = getWanted(); 19 if (wanted == null || actual == null) { 20 return super.matches(actual); 21 } else if (wanted instanceof boolean[] && actual instanceof boolean[]) { 22 return Arrays.equals((boolean[]) wanted, (boolean[]) actual); 23 } else if (wanted instanceof byte[] && actual instanceof byte[]) { 24 return Arrays.equals((byte[]) wanted, (byte[]) actual); 25 } else if (wanted instanceof char[] && actual instanceof char[]) { 26 return Arrays.equals((char[]) wanted, (char[]) actual); 27 } else if (wanted instanceof double[] && actual instanceof double[]) { 28 return Arrays.equals((double[]) wanted, (double[]) actual); 29 } else if (wanted instanceof float[] && actual instanceof float[]) { 30 return Arrays.equals((float[]) wanted, (float[]) actual); 31 } else if (wanted instanceof int[] && actual instanceof int[]) { 32 return Arrays.equals((int[]) wanted, (int[]) actual); 33 } else if (wanted instanceof long[] && actual instanceof long[]) { 34 return Arrays.equals((long[]) wanted, (long[]) actual); 35 } else if (wanted instanceof short[] && actual instanceof short[]) { 36 return Arrays.equals((short[]) wanted, (short[]) actual); 37 } else if (wanted instanceof Object[] && actual instanceof Object[]) { 38 return Arrays.equals((Object[]) wanted, (Object[]) actual); 39 } 40 return false; 41 } 42 43 public String toString() { 44 if (getWanted() != null && getWanted().getClass().isArray()) { 45 return appendArray(createObjectArray(getWanted())); 46 } else { 47 return super.toString(); 48 } 49 } 50 51 private String appendArray(Object[] array) { 52 //TODO SF overlap with ValuePrinter 53 StringBuilder out = new StringBuilder("["); 54 for (int i = 0; i < array.length; i++) { 55 out.append(new Equals(array[i]).toString()); 56 if (i != array.length - 1) { 57 out.append(", "); 58 } 59 } 60 out.append("]"); 61 return out.toString(); 62 } 63 64 public static Object[] createObjectArray(Object array) { 65 if (array instanceof Object[]) { 66 return (Object[]) array; 67 } 68 Object[] result = new Object[Array.getLength(array)]; 69 for (int i = 0; i < Array.getLength(array); i++) { 70 result[i] = Array.get(array, i); 71 } 72 return result; 73 } 74 } 75