blob: 47f57f9e2b9595aab81d937f5cbe92889c01d4f1 [file] [log] [blame]
/*
* Copyright (c) 2018, 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
*/
package org.eclipse.persistence.testing.tests.transparentindirection;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.models.transparentindirection.*;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.indirection.IndirectList;
import org.eclipse.persistence.indirection.IndirectSet;
import org.eclipse.persistence.indirection.IndirectMap;
import org.eclipse.persistence.indirection.ValueHolder;
import org.eclipse.persistence.internal.helper.Helper;
import org.eclipse.persistence.internal.indirection.IndirectionPolicy;
import org.eclipse.persistence.mappings.ForeignReferenceMapping;
/**
* Test indirection functionality when setting an indirect container's
* valueholder to a new ValueHolder.
* Bug 345495
*/
public class NullDelegateInValueHolderTest extends TestCase {
protected Class<?> indirectCollectionClass;
protected AbstractOrder testOrder;
public NullDelegateInValueHolderTest(Class<?> indirectCollectionClass) {
super();
this.indirectCollectionClass = indirectCollectionClass;
setDescription("NullDelegateInValueHolderTest: " + Helper.getShortClassName(this.indirectCollectionClass));
}
@Override
public void setup() {
String customerName = "ACME, Inc.";
if (indirectCollectionClass.equals(IndirectList.class)) {
testOrder = new Order(customerName);
} else if (indirectCollectionClass.equals(IndirectMap.class)) {
testOrder = new MappedOrder(customerName);
} else if (indirectCollectionClass.equals(IndirectSet.class)) {
testOrder = new SetOrder(customerName);
}
ClassDescriptor descriptor = getSession().getDescriptor(testOrder);
ForeignReferenceMapping mapping = (ForeignReferenceMapping) descriptor.getMappingForAttributeName("salesReps");
IndirectionPolicy policy = mapping.getIndirectionPolicy();
// replace indirect container's valueholder with a new ValueHolder instance
mapping.setAttributeValueInObject(testOrder, policy.buildIndirectObject(new ValueHolder()));
}
@Override
public void test() {
int numberOfObjects = -1;
try {
numberOfObjects = testOrder.getNumberOfSalesReps();
} catch (Exception e) {
throw new TestErrorException("Error retrieving number of sales reps from order " + testOrder, e);
}
if (numberOfObjects != 0) {
throwError("Number of sales reps != 0 :" + numberOfObjects);
}
}
}