Fix Arrays.equals(Object[], Object[]) to handle nulls.

Patch by: hhchan@google.com
Review by: jat


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7119 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/util/Arrays.java b/user/super/com/google/gwt/emul/java/util/Arrays.java
index 15d39f4..cfcdafa 100644
--- a/user/super/com/google/gwt/emul/java/util/Arrays.java
+++ b/user/super/com/google/gwt/emul/java/util/Arrays.java
@@ -680,7 +680,7 @@
     for (int i = 0; i < array1.length; ++i) {
       Object val1 = array1[i];
       Object val2 = array2[i];
-      if (!val1.equals(val2)) {
+      if (Utility.equalsWithNullCheck(val1, val2)) {
         return false;
       }
     }
diff --git a/user/test/com/google/gwt/emultest/java/util/ArraysTest.java b/user/test/com/google/gwt/emultest/java/util/ArraysTest.java
index 9a0f70f..6b17574 100644
--- a/user/test/com/google/gwt/emultest/java/util/ArraysTest.java
+++ b/user/test/com/google/gwt/emultest/java/util/ArraysTest.java
@@ -71,6 +71,40 @@
     Arrays.hashCode(a);
   }
 
+  public void testArraysEqualsWithEmptyArrays() {
+    assertTrue(Arrays.equals(new String[0], new String[0]));
+  }
+
+  public void testArraysEqualsWithoutNullElementsEqual() {
+    assertTrue(Arrays.equals(
+        new String[] { "foo" }, new String[]{ "foo" }));
+  }
+
+  public void testArraysEqualsWithoutNullElementsNotEqual() {
+    assertFalse(Arrays.equals(
+        new String[] { "foo" }, new String[]{ "bar" }));
+  }
+
+  public void testArraysEqualsWithNullElementsEqual() {
+    assertTrue(Arrays.equals(new String[2], new String[2]));
+  }
+
+  public void testArraysEqualsWithNullElementsNotEqual() {
+    assertFalse(Arrays.equals(new String[2], new String[1]));
+  }
+
+  public void testArraysEqualsWithNullAndNonNullElementsEqual() {
+    assertTrue(Arrays.equals(
+        new String[]{ null, "foo", null, "bar" },
+        new String[]{ null, "foo", null, "bar" }));
+  }
+
+  public void testArraysEqualsWithNullAndNonNullElementsNotEqual() {
+    assertFalse(Arrays.equals(
+        new String[]{ null, "bar", null, "foo" },
+        new String[]{ null, "foo", null, "foo" }));
+  }
+
   /**
    * Tests {@link Arrays#asList(Object[])}.
    */
@@ -606,7 +640,7 @@
    * Advance the permutation to the next value. It leaves the first index set to
    * -1 if the range has been exceeded.
    * 
-   * @param permutation array of indices -- see {@link getPermutation} for
+   * @param permutation array of indices -- see {@link #getPermutation} for
    *          details.
    */
   private void nextPermutation(int[] permutation) {
@@ -621,7 +655,7 @@
 
   /**
    * Checks to see if this permutation is valid; ie, if all of the indices are
-   * between 0 and n-i (see {@link getPermutation} for details).
+   * between 0 and n-i (see {@link #getPermutation} for details).
    * 
    * @param permutations array of indices
    * @param n length of source array.