0N/A/*
2362N/A * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A/*
0N/A * @test
0N/A * @bug 5050285
0N/A * @summary Inserting enum of wrong type does horrible things to EnumSet/Map
0N/A * @author Josh Bloch
0N/A */
0N/A
0N/Aimport java.util.*;
0N/A
0N/Apublic class InsertWrongType {
0N/A public static void main(String[] args) throws Exception {
0N/A // Ordinal in range
0N/A addIllTypedElt(Test32.class, Test33.T1); // Regular
0N/A addIllTypedElt(Test127.class, Test128.T1); // Jumbo
0N/A
0N/A // Ordinal out of range
0N/A addIllTypedElt(Test32.class, Test33.T33); // Regular
0N/A addIllTypedElt(Test127.class, Test128.T128); // Jumbo
0N/A
0N/A // Ordinal in range
0N/A addAllIllTypedElt(Test32.class, Test33.T1); // Regular
0N/A addAllIllTypedElt(Test127.class, Test128.T1); // Jumbo
0N/A
0N/A // Ordinal out of range
0N/A addAllIllTypedElt(Test32.class, Test33.T33); // Regular
0N/A addAllIllTypedElt(Test127.class, Test128.T128); // Jumbo
0N/A
0N/A addAllEmptyMistypedEnumSet(Test32.class, Test33.class); // Regular
0N/A addAllEmptyMistypedEnumSet(Test127.class, Test128.class); // Jumbo
0N/A
0N/A heterogeneousCopyOf(Test32.T1, Test33.T2); // Regular
0N/A heterogeneousCopyOf(Test127.T1, Test128.T2); // Jumbo
0N/A
0N/A heterogeneousOf2(Test32.T1, Test33.T2); // Regular
0N/A heterogeneousOf2(Test127.T1, Test128.T2); // Jumbo
0N/A
0N/A heterogeneousOf3(Test32.T1, Test33.T2); // Regular
0N/A heterogeneousOf3(Test127.T1, Test128.T2); // Jumbo
0N/A
0N/A heterogeneousOf4(Test32.T1, Test33.T2); // Regular
0N/A heterogeneousOf4(Test127.T1, Test128.T2); // Jumbo
0N/A
0N/A heterogeneousOf5(Test32.T1, Test33.T2); // Regular
0N/A heterogeneousOf5(Test127.T1, Test128.T2); // Jumbo
0N/A
0N/A heterogeneousOfVar(Test32.T1, Test33.T2); // Regular
0N/A heterogeneousOfVar(Test127.T1, Test128.T2); // Jumbo
0N/A
0N/A putIllTypedKey(Test32.class, Test33.T1);
0N/A putIllTypedKey(Test32.class, Test33.T33);
0N/A
0N/A putAllIllTypedKey(Test32.class, Test33.T1);
0N/A putAllIllTypedKey(Test32.class, Test33.T33);
0N/A
0N/A putAllIllTypedKeyEnumMap(Test32.class, Test33.T1);
0N/A putAllIllTypedKeyEnumMap(Test32.class, Test33.T33);
0N/A
0N/A putAllEmptyMistypedEnumMap(Test32.class, Test33.class);
0N/A }
0N/A
0N/A
0N/A static void addIllTypedElt(Class enumClass, Enum elt) {
0N/A EnumSet set = EnumSet.noneOf(enumClass);
0N/A try {
0N/A set.add(elt);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("Incorrectly typed add succeeded");
0N/A }
0N/A
0N/A static void addAllIllTypedElt(Class enumClass, Enum elt) {
0N/A EnumSet set = EnumSet.noneOf(enumClass);
0N/A try {
0N/A set.addAll(Collections.singleton(elt));
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("Incorrectly typed addAll succeeded");
0N/A }
0N/A
0N/A static void addAllEmptyMistypedEnumSet(Class destClass, Class srcClass) {
0N/A EnumSet dest = EnumSet.noneOf(destClass);
0N/A EnumSet src = EnumSet.noneOf(srcClass);
0N/A dest.addAll(src);
0N/A }
0N/A
0N/A static void heterogeneousCopyOf(Enum e1, Enum e2) {
0N/A List list = new ArrayList();
0N/A list.add(e1);
0N/A list.add(e2);
0N/A try {
0N/A EnumSet.copyOf(list);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("heterogeneous copyOf succeeded");
0N/A }
0N/A
0N/A static void heterogeneousOf2(Enum e1, Enum e2) {
0N/A try {
0N/A EnumSet.of(e1, e2);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("heterogeneous of (2 args) succeeded");
0N/A }
0N/A
0N/A static void heterogeneousOf3(Enum e1, Enum e2) {
0N/A try {
0N/A EnumSet.of(e1, e1, e2);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("heterogeneous of (3 args) succeeded");
0N/A }
0N/A
0N/A static void heterogeneousOf4(Enum e1, Enum e2) {
0N/A try {
0N/A EnumSet.of(e1, e1, e1, e2);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("heterogeneous of (4 args) succeeded");
0N/A }
0N/A
0N/A static void heterogeneousOf5(Enum e1, Enum e2) {
0N/A try {
0N/A EnumSet.of(e1, e1, e1, e1, e2);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("heterogeneous of (5 args) succeeded");
0N/A }
0N/A
0N/A static void heterogeneousOfVar(Enum e1, Enum e2) {
0N/A try {
0N/A EnumSet.of(e1, e1, e1, e1, e1, e2);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("heterogeneous of (Var args) succeeded");
0N/A }
0N/A
0N/A static void putIllTypedKey(Class enumClass, Enum elt) {
0N/A EnumMap map = new EnumMap(enumClass);
0N/A try {
0N/A map.put(elt, "foofy");
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("Incorrectly typed put succeeded");
0N/A }
0N/A
0N/A static void putAllIllTypedKey(Class enumClass, Enum elt) {
0N/A EnumMap dest = new EnumMap(enumClass);
0N/A Map src = new HashMap();
0N/A src.put(elt, "goofy");
0N/A try {
0N/A dest.putAll(src);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("Incorrectly typed putAll succeeded");
0N/A }
0N/A
0N/A static void putAllIllTypedKeyEnumMap(Class enumClass, Enum elt) {
0N/A EnumMap dest = new EnumMap(enumClass);
0N/A Map src = new EnumMap(elt.getClass());
0N/A src.put(elt, "goofy");
0N/A try {
0N/A dest.putAll(src);
0N/A } catch(ClassCastException e) {
0N/A return;
0N/A }
0N/A throw new RuntimeException("Incorrectly typed enum put All succeeded");
0N/A }
0N/A
0N/A static void putAllEmptyMistypedEnumMap(Class destClass, Class srcClass) {
0N/A EnumMap dest = new EnumMap(destClass);
0N/A EnumMap src = new EnumMap(srcClass);
0N/A dest.putAll(src);
0N/A }
0N/A
0N/A enum Test32 {
0N/A T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
0N/A T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
0N/A T31, T32
0N/A }
0N/A
0N/A enum Test33 {
0N/A T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
0N/A T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
0N/A T31, T32, T33
0N/A }
0N/A
0N/A enum Test127 {
0N/A T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
0N/A T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
0N/A T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
0N/A T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57,
0N/A T58, T59, T60, T61, T62, T63, T64, T65, T66, T67, T68, T69, T70, T71,
0N/A T72, T73, T74, T75, T76, T77, T78, T79, T80, T81, T82, T83, T84, T85,
0N/A T86, T87, T88, T89, T90, T91, T92, T93, T94, T95, T96, T97, T98, T99,
0N/A T100, T101, T102, T103, T104, T105, T106, T107, T108, T109, T110, T111,
0N/A T112, T113, T114, T115, T116, T117, T118, T119, T120, T121, T122, T123,
0N/A T124, T125, T126, T127
0N/A }
0N/A
0N/A enum Test128 {
0N/A T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
0N/A T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
0N/A T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
0N/A T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57,
0N/A T58, T59, T60, T61, T62, T63, T64, T65, T66, T67, T68, T69, T70, T71,
0N/A T72, T73, T74, T75, T76, T77, T78, T79, T80, T81, T82, T83, T84, T85,
0N/A T86, T87, T88, T89, T90, T91, T92, T93, T94, T95, T96, T97, T98, T99,
0N/A T100, T101, T102, T103, T104, T105, T106, T107, T108, T109, T110, T111,
0N/A T112, T113, T114, T115, T116, T117, T118, T119, T120, T121, T122, T123,
0N/A T124, T125, T126, T127, T128
0N/A }
0N/A}