< prev index next >

test/jdk/java/util/Collection/MOAT.java

Print this page
rev 48060 : 8060192: Add default method <A> A[] Collection.toArray(IntFunction<A[]> generator)
Reviewed-by: XXX

@@ -361,10 +361,11 @@
         check(c.isEmpty());
         equal(c.size(), 0);
         equal(c.toString(),"[]");
         equal(c.toArray().length, 0);
         equal(c.toArray(new Object[0]).length, 0);
+        equal(c.toArray(Object[]::new).length, 0);
         check(c.toArray(new Object[]{42})[0] == null);
 
         Object[] a = new Object[1]; a[0] = Boolean.TRUE;
         equal(c.toArray(a), a);
         equal(a[0], null);

@@ -600,16 +601,10 @@
         catch (UnsupportedOperationException t) { return false; }
         catch (Throwable t) { unexpected(t); }
         return true;
     }
 
-    // 6260652: (coll) Arrays.asList(x).toArray().getClass()
-    //          should be Object[].class
-    // Fixed in jdk9, but not jdk8 ...
-    static final boolean needToWorkAround6260652 =
-        Arrays.asList("").toArray().getClass() != Object[].class;
-
     private static void checkFunctionalInvariants(Collection<Integer> c) {
         try {
             checkContainsSelf(c);
             checkContainsEmpty(c);
             check(c.size() != 0 ^ c.isEmpty());

@@ -624,22 +619,26 @@
             if (c instanceof Set) {
                 checkUnique((Set<Integer>)c);
             }
 
             check(c.toArray().length == c.size());
-            check(c.toArray().getClass() == Object[].class
-                  ||
-                  (needToWorkAround6260652 &&
-                   c.getClass().getName().equals("java.util.Arrays$ArrayList")));
+            check(c.toArray().getClass() == Object[].class);
             for (int size : new int[]{0,1,c.size(), c.size()+1}) {
                 Integer[] a = c.toArray(new Integer[size]);
                 check((size > c.size()) || a.length == c.size());
                 int i = 0; for (Integer j : c) check(a[i++] == j);
                 check((size <= c.size()) || (a[c.size()] == null));
                 check(a.getClass() == Integer[].class);
             }
 
+            {
+                Integer[] a = c.toArray(Integer[]::new);
+                equal(c.size(), a.length);
+                check(a.getClass() == Integer[].class);
+                check(Arrays.equals(c.toArray(new Integer[0]), a));
+            }
+
             check(c.equals(c));
             if (c instanceof Serializable) {
                 //System.out.printf("Serializing %s%n", c.getClass().getName());
                 try {
                     Object clone = serialClone(c);
< prev index next >