diff a/test/jdk/java/util/Collections/CheckedMapReplaceAll.java b/test/jdk/java/util/Collections/CheckedMapReplaceAll.java --- a/test/jdk/java/util/Collections/CheckedMapReplaceAll.java +++ b/test/jdk/java/util/Collections/CheckedMapReplaceAll.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 * @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.BiFunction; public class CheckedMapReplaceAll { + public static void main(String[] args) { Map unwrapped = new HashMap<>(); unwrapped.put(1, 1.0); unwrapped.put(2, 2.0); unwrapped.put(3, 3.0); @@ -48,7 +51,20 @@ throw new RuntimeException("String added to checked Map"); } catch (ClassCastException thwarted) { thwarted.printStackTrace(System.out); System.out.println("Curses! Foiled again!"); } + + Map vMap = Collections.checkedMap(new HashMap<>(), VClass.class, VClass.class); + vMap.put(new VClass(1, new int[] { 1 }), new VClass(2, new int[] { 2 })); + vMap.replaceAll((k, v) -> new VClass(v.x + 1, new int[] { v.x + 1 })); + if (!vMap.get(new VClass(1, new int[] { 1 })).equals(new VClass(3, new int[] { 3 }))) + throw new RuntimeException("value checkedMap replaceAll failed"); + + Map raw = Collections.checkedMap(new HashMap(), VClass.class, VClass.class); + raw.put(new VClass(1, new int[] { 1 }), new VClass(2, new int[] { 2 })); + try { + raw.replaceAll((k, v) -> "not a Tuple"); + throw new RuntimeException("value checkedMap replaceAll accepted wrong type"); + } catch (ClassCastException expected) { } } }