diff a/test/jdk/java/util/Collections/CheckedListReplaceAll.java b/test/jdk/java/util/Collections/CheckedListReplaceAll.java --- a/test/jdk/java/util/Collections/CheckedListReplaceAll.java +++ b/test/jdk/java/util/Collections/CheckedListReplaceAll.java @@ -1,7 +1,7 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. @@ -24,16 +24,19 @@ /* * @test * @bug 8047795 8053938 * @summary Ensure that replaceAll operator cannot add bad elements * @author Mike Duigou + * @library /test/lib */ +import jdk.test.lib.valueclass.VClass; import java.util.*; import java.util.function.UnaryOperator; public class CheckedListReplaceAll { + public static void main(String[] args) { List unwrapped = Arrays.asList(new Object[]{1, 2, 3}); List wrapped = Collections.checkedList(unwrapped, Integer.class); UnaryOperator evil = e -> (((int) e) % 2 != 0) ? e : "evil"; @@ -55,7 +58,18 @@ throw new RuntimeException("NPE not thrown when passed a null operator"); } catch (NullPointerException thwarted) { thwarted.printStackTrace(System.out); System.out.println("Curses! Foiled again!"); } + + List vList = Collections.checkedList(new ArrayList(Arrays.asList(new VClass(1, new int[] { 1 }))), VClass.class); + vList.replaceAll(v -> new VClass(v.x + 1, new int[] { v.x + 1 })); + if (!vList.get(0).equals(new VClass(2, new int[] { 2 }))) + throw new RuntimeException("value checkedList replaceAll failed"); + + List raw = Collections.checkedList(new ArrayList(Arrays.asList(new VClass(1, new int[] { 1 }))), VClass.class); + try { + raw.replaceAll(e -> "not a Tuple"); + throw new RuntimeException("value checkedList replaceAll accepted wrong type"); + } catch (ClassCastException expected) { } } }