| /* |
| * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Chris Delahunt - initial API and implementation |
| package org.eclipse.persistence.testing.tests.feature; |
| |
| import java.util.Collection; |
| import java.util.Map; |
| |
| import org.eclipse.persistence.internal.helper.ClassConstants; |
| import org.eclipse.persistence.internal.queries.CollectionContainerPolicy; |
| import org.eclipse.persistence.internal.queries.ContainerPolicy; |
| import org.eclipse.persistence.internal.queries.MapContainerPolicy; |
| import org.eclipse.persistence.testing.framework.AutoVerifyTestCase; |
| import org.eclipse.persistence.testing.framework.TestErrorException; |
| import org.eclipse.persistence.testing.models.employee.domain.Employee; |
| |
| /* |
| * Added for bug 241322 - JPA Collection mapping assumes clone is implemented/supported |
| * tests java.util.Arrays$ArrayList from java.util.Arrays.asList() |
| * and java.util.WeakHashMap() neither of which implement cloneable. |
| */ |
| public class ContainerCloningTest extends AutoVerifyTestCase { |
| public ContainerCloningTest() { |
| setDescription("Test the cloneFor method on collections that are not cloneable."); |
| } |
| |
| @Override |
| public void test() { |
| ContainerPolicy cp = new CollectionContainerPolicy(); |
| cp.setContainerClass(ClassConstants.ArrayList_class); |
| Collection originalC = java.util.Arrays.asList(new Employee()); |
| Collection cloneC = (Collection)cp.cloneFor(originalC); |
| |
| cp = new MapContainerPolicy(); |
| cp.setContainerClass(java.util.WeakHashMap.class); |
| Map originalM = new java.util.WeakHashMap(); |
| originalM.put(1, 2); |
| Map cloneM = (Map)cp.cloneFor(originalM); |
| |
| if ((originalC == cloneC) || (originalC.size() != cloneC.size())) { |
| throw new TestErrorException("Cloned Collections are not copies."); |
| } |
| if ((originalM == cloneM) || (originalM.size() != cloneM.size())) { |
| throw new TestErrorException("Cloned Maps are not copies."); |
| } |
| |
| if (!originalC.iterator().next().equals(cloneC.iterator().next())) { |
| throw new TestErrorException("Cloned Collections are not the same."); |
| } |
| if (!originalM.get(1).equals(cloneM.get(1))) { |
| throw new TestErrorException("Cloned Maps are not the same."); |
| } |
| } |
| } |