blob: 7d9093f53c7fef7e105f92c27ca8b66fd797b6c4 [file] [log] [blame]
/*
* 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<Employee> 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.");
}
}
}