blob: ad4afb0d9cab221b489993b99ee563a9ac868841 [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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.aggregate;
import java.util.*;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.testing.framework.WriteObjectTest;
import org.eclipse.persistence.testing.models.aggregate.Language;
import org.eclipse.persistence.testing.models.aggregate.Responsibility;
import org.eclipse.persistence.testing.models.aggregate.Computer;
import org.eclipse.persistence.testing.models.aggregate.Employee;
import org.eclipse.persistence.testing.models.aggregate.ProjectDescription;
/**
* This type was generated by a SmartGuide.
* @author Load Builder
*/
public class MergingUnitOfWorkTest extends WriteObjectTest {
public UnitOfWork unitOfWork1;
public UnitOfWork unitOfWork2;
public Employee workingCopy1;
public Employee workingCopy2;
public Employee mergedCopy;
/**
* MergingUnitOfWorkTest constructor comment.
* @param originalObject java.lang.Object
*/
public MergingUnitOfWorkTest(Object originalObject) {
super(originalObject);
setDescription("This suite tests merging of objects from two UOWs in the aggregate model.");
}
protected void changeWorkingCopy1() {
(this.workingCopy1).setFirstName("Kevin");
ProjectDescription projectDescription = (this.workingCopy1).getProjectDescription();
projectDescription.setDescription("Quality Assurance project");
((Vector)projectDescription.getResponsibilities().getValue()).removeElement(((Vector)projectDescription.getResponsibilities().getValue()).firstElement());
((Vector)projectDescription.getResponsibilities().getValue()).addElement(Responsibility.example1(this.workingCopy1));
((Vector)projectDescription.getResponsibilities().getValue()).addElement(Responsibility.example2(this.workingCopy1));
((Vector)projectDescription.getLanguages().getValue()).removeElement(((Vector)projectDescription.getLanguages().getValue()).firstElement());
((Vector)projectDescription.getLanguages().getValue()).addElement(Language.example1());
((Vector)projectDescription.getLanguages().getValue()).addElement(Language.example2());
projectDescription.getComputer().getValue().setDescription("Commodore 64");
}
protected void deepMergeWorkingCopies() {
// Everything should have changed
this.unitOfWork2 = getSession().acquireUnitOfWork();
this.workingCopy2 = (Employee)this.unitOfWork2.registerObject(this.originalObject);
{
this.mergedCopy = (Employee)this.unitOfWork2.deepMergeClone(workingCopy1);
ProjectDescription projectDescription = this.mergedCopy.getProjectDescription();
Vector responsibilities = (Vector)projectDescription.getResponsibilities().getValue();
Vector languages = (Vector)projectDescription.getLanguages().getValue();
Computer computer = projectDescription.getComputer().getValue();
if (this.mergedCopy.getFirstName() != "Kevin") {
throw new TestErrorException("Deep Merge did not merge changes in Employee.");
}
if (projectDescription.getDescription() != "Quality Assurance project") {
throw new TestErrorException("Deep Merge did not merge changes in ProjectDescription (Aggregate mapping).");
}
if (responsibilities.size() != this.workingCopy1.getProjectDescription().getResponsibilities().getValue().size()) {
throw new TestErrorException("Deep Merge did not merge changes in Responsibility (private 1:M).");
}
if (languages.size() != this.workingCopy1.getProjectDescription().getLanguages().getValue().size()) {
throw new TestErrorException("Deep Merge did not merge changes in Language (public M:M).");
}
if (computer.getDescription() != "Commodore 64") {
throw new TestErrorException("Deep Merge did not merge changes in Computer (private 1:1).");
}
}
{
this.mergedCopy = (Employee)this.unitOfWork2.deepRevertObject(workingCopy2);
ProjectDescription projectDescription = this.mergedCopy.getProjectDescription();
Vector responsibilities = (Vector)projectDescription.getResponsibilities().getValue();
Vector languages = (Vector)projectDescription.getLanguages().getValue();
Computer computer = projectDescription.getComputer().getValue();
if (this.mergedCopy.getFirstName() == "Kevin") {
throw new TestErrorException("Deep revert did not merge changes in Employee.");
}
if (projectDescription.getDescription() == "Quality Assurance project") {
throw new TestErrorException("Deep revert did not merge changes in ProjectDescription (Aggregate mapping).");
}
if (responsibilities.size() == this.workingCopy1.getProjectDescription().getResponsibilities().getValue().size()) {
throw new TestErrorException("Deep revert did not merge changes in Responsibility (private 1:M).");
}
if (languages.size() == this.workingCopy1.getProjectDescription().getLanguages().getValue().size()) {
throw new TestErrorException("Deep revert did not merge changes in Language (public M:M).");
}
if (computer.getDescription() == "Commodore 64") {
throw new TestErrorException("Deep revert did not merge changes in Computer (private 1:1).");
}
}
{
this.unitOfWork2.deepMergeClone(workingCopy1);
this.mergedCopy = (Employee)this.unitOfWork2.shallowRevertObject(workingCopy2);
ProjectDescription projectDescription = this.mergedCopy.getProjectDescription();
Vector responsibilities = (Vector)projectDescription.getResponsibilities().getValue();
Vector languages = (Vector)projectDescription.getLanguages().getValue();
Computer computer = projectDescription.getComputer().getValue();
if (this.mergedCopy.getFirstName() == "Kevin") {
throw new TestErrorException("Shallow revert did not merge changes in Employee.");
}
if (projectDescription.getDescription() == "Quality Assurance project") {
throw new TestErrorException("Shallow revert did not merge changes in ProjectDescription (Aggregate mapping).");
}
if (responsibilities.size() == this.workingCopy1.getProjectDescription().getResponsibilities().getValue().size()) {
throw new TestErrorException("Shallow revert did not merge changes in Responsibility (private 1:M).");
}
if (languages.size() == this.workingCopy1.getProjectDescription().getLanguages().getValue().size()) {
throw new TestErrorException("Shallow revert did not merge changes in Language (public M:M).");
}
if (computer.getDescription() != "Commodore 64") {
throw new TestErrorException("Shallow revert did not merge changes in Computer (private 1:1).");
}
}
{
this.unitOfWork2.deepMergeClone(workingCopy1);
this.mergedCopy = (Employee)this.unitOfWork2.revertObject(workingCopy2);
ProjectDescription projectDescription = this.mergedCopy.getProjectDescription();
Vector responsibilities = (Vector)projectDescription.getResponsibilities().getValue();
Vector languages = (Vector)projectDescription.getLanguages().getValue();
Computer computer = projectDescription.getComputer().getValue();
if (this.mergedCopy.getFirstName() == "Kevin") {
throw new TestErrorException("Revert did not merge changes in Employee.");
}
if (projectDescription.getDescription() == "Quality Assurance project") {
throw new TestErrorException("Revert did not merge changes in ProjectDescription (Aggregate mapping).");
}
if (responsibilities.size() == this.workingCopy1.getProjectDescription().getResponsibilities().getValue().size()) {
throw new TestErrorException("Revert did not merge changes in Responsibility (private 1:M).");
}
if (languages.size() == this.workingCopy1.getProjectDescription().getLanguages().getValue().size()) {
throw new TestErrorException("Revert did not merge changes in Language (public M:M).");
}
if (computer.getDescription() == "Commodore 64") {
throw new TestErrorException("Revert did not merge changes in Computer (private 1:1).");
}
}
}
@Override
protected void setup() {
super.setup();
this.unitOfWork1 = getSession().acquireUnitOfWork();
this.workingCopy1 = (Employee)this.unitOfWork1.registerObject(this.originalObject);
changeWorkingCopy1();
standardMergeWorkingCopies();
shallowMergeWorkingCopies();
deepMergeWorkingCopies();
}
protected void shallowMergeWorkingCopies() {
// Only Employee.firstName should have changed
this.unitOfWork2 = getSession().acquireUnitOfWork();
this.workingCopy2 = (Employee)this.unitOfWork2.registerObject(this.originalObject);
this.mergedCopy = (Employee)this.unitOfWork2.shallowMergeClone(workingCopy1);
ProjectDescription projectDescription = this.mergedCopy.getProjectDescription();
Vector responsibilities = (Vector)projectDescription.getResponsibilities().getValue();
Vector languages = (Vector)projectDescription.getLanguages().getValue();
Computer computer = projectDescription.getComputer().getValue();
if (this.mergedCopy.getFirstName() != "Kevin") {
throw new TestErrorException("Shallow Merge did not merge changes in Employee.");
}
if (projectDescription.getDescription() != "Quality Assurance project") {
throw new TestErrorException("Shallow Merge merged changes in ProjectDescription (Aggregate mapping) but shouldn't have.");
}
if (responsibilities.size() == this.workingCopy1.getProjectDescription().getResponsibilities().getValue().size()) {
throw new TestErrorException("Shallow Merge merged changes in Responsibility (private 1:M) but shouldn't have.");
}
if (languages.size() == this.workingCopy1.getProjectDescription().getLanguages().getValue().size()) {
throw new TestErrorException("Shallow Merge merged changes in Language (public M:M) but shouldn't have.");
}
if (computer.getDescription() == "Commodore 64") {
throw new TestErrorException("Shallow Merge merged changes in Computer (private 1:1) but shouldn't have.");
}
}
protected void standardMergeWorkingCopies() {
// Everything except languages should have changed
this.unitOfWork2 = getSession().acquireUnitOfWork();
this.workingCopy2 = (Employee)this.unitOfWork2.registerObject(this.originalObject);
this.mergedCopy = (Employee)this.unitOfWork2.mergeClone(workingCopy1);
ProjectDescription projectDescription = this.mergedCopy.getProjectDescription();
Vector responsibilities = (Vector)projectDescription.getResponsibilities().getValue();
Vector languages = (Vector)projectDescription.getLanguages().getValue();
Computer computer = projectDescription.getComputer().getValue();
if (this.mergedCopy.getFirstName() != "Kevin") {
throw new TestErrorException("Standard Merge did not merge changes in Employee.");
}
if (projectDescription.getDescription() != "Quality Assurance project") {
throw new TestErrorException("Standard Merge did not merge changes in ProjectDescription (Aggregate mapping).");
}
if (responsibilities.size() != this.workingCopy1.getProjectDescription().getResponsibilities().getValue().size()) {
throw new TestErrorException("Standard Merge did not merge changes in Responsibility (private 1:M).");
}
if (languages.size() == this.workingCopy1.getProjectDescription().getLanguages().getValue().size()) {
throw new TestErrorException("Standard Merge merged changes in Language (public M:M) but shouldn't have.");
}
if (computer.getDescription() != "Commodore 64") {
throw new TestErrorException("Standard Merge did not merge changes in Computer (private 1:1).");
}
}
@Override
protected void test() {
return;
}
@Override
protected void verify() {
return;
}
}