Home | History | Annotate | Download | only in matchers
      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 import org.hamcrest.Description;
     12 
     13 public class ArrayEquals extends Equals {
     14 
     15     private static final long serialVersionUID = -7167812844261087583L;
     16 
     17     public ArrayEquals(Object wanted) {
     18         super(wanted);
     19     }
     20 
     21     public boolean matches(Object actual) {
     22         Object wanted = getWanted();
     23         if (wanted == null || actual == null) {
     24             return super.matches(actual);
     25         } else if (wanted instanceof boolean[] && actual instanceof boolean[]) {
     26             return Arrays.equals((boolean[]) wanted, (boolean[]) actual);
     27         } else if (wanted instanceof byte[] && actual instanceof byte[]) {
     28             return Arrays.equals((byte[]) wanted, (byte[]) actual);
     29         } else if (wanted instanceof char[] && actual instanceof char[]) {
     30             return Arrays.equals((char[]) wanted, (char[]) actual);
     31         } else if (wanted instanceof double[] && actual instanceof double[]) {
     32             return Arrays.equals((double[]) wanted, (double[]) actual);
     33         } else if (wanted instanceof float[] && actual instanceof float[]) {
     34             return Arrays.equals((float[]) wanted, (float[]) actual);
     35         } else if (wanted instanceof int[] && actual instanceof int[]) {
     36             return Arrays.equals((int[]) wanted, (int[]) actual);
     37         } else if (wanted instanceof long[] && actual instanceof long[]) {
     38             return Arrays.equals((long[]) wanted, (long[]) actual);
     39         } else if (wanted instanceof short[] && actual instanceof short[]) {
     40             return Arrays.equals((short[]) wanted, (short[]) actual);
     41         } else if (wanted instanceof Object[] && actual instanceof Object[]) {
     42             return Arrays.equals((Object[]) wanted, (Object[]) actual);
     43         }
     44         return false;
     45     }
     46 
     47     public void describeTo(Description description) {
     48         if (getWanted() != null && getWanted().getClass().isArray()) {
     49             appendArray(createObjectArray(getWanted()), description);
     50         } else {
     51             super.describeTo(description);
     52         }
     53     }
     54 
     55     private void appendArray(Object[] array, Description description) {
     56         description.appendText("[");
     57         for (int i = 0; i < array.length; i++) {
     58             new Equals(array[i]).describeTo(description);
     59             if (i != array.length - 1) {
     60                 description.appendText(", ");
     61             }
     62         }
     63         description.appendText("]");
     64     }
     65 
     66     public static Object[] createObjectArray(Object array) {
     67         if (array instanceof Object[]) {
     68             return (Object[]) array;
     69         }
     70         Object[] result = new Object[Array.getLength(array)];
     71         for (int i = 0; i < Array.getLength(array); i++) {
     72             result[i] = Array.get(array, i);
     73         }
     74         return result;
     75     }
     76 }
     77