< prev index next >

test/jdk/java/util/Collections/CheckedMapReplaceAll.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2014, 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.
--- 1,7 ---
  /*
!  * 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<Integer,Double> 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<Integer,Double>");
          } catch (ClassCastException thwarted) {
              thwarted.printStackTrace(System.out);
              System.out.println("Curses! Foiled again!");
          }
+ 
+         Map<VClass,VClass> 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,VClass>(), 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) { }
      }
  }
< prev index next >