/*******************************************************************************
* Copyright (c) 1998, 2015 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 v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.test.mappingsmodel.mapping;
import java.util.ArrayList;
import java.util.Collection;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.persistence.tools.workbench.mappingsmodel.ProblemConstants;
import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWColumn;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWLockingPolicy;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWRelationalDescriptor;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWTableDescriptorLockingPolicy;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWDirectToFieldMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClassAttribute;
import org.eclipse.persistence.tools.workbench.test.mappingsmodel.ModelProblemsTestCase;
import org.eclipse.persistence.tools.workbench.test.models.projects.CrimeSceneProject;
public class MWMappingTests extends ModelProblemsTestCase {
public static Test suite() {
return new TestSuite(MWMappingTests.class);
}
public MWMappingTests(String name) {
super(name);
}
//TODO automap test
// public void testFindPotentialReferenceDescriptor() {
//
// CrimeSceneProject crimeSceneProject = new CrimeSceneProject();
// MWMapping crimeSceneMapping = crimeSceneProject.getCrimeSceneMappingInPieceOfEvidence();
// MWDescriptor crimeSceneDescriptor = crimeSceneProject.getCrimeSceneDescriptor();
// MWDescriptor potentialDescriptor = crimeSceneMapping.guessDescriptor(CollectionTools.collection(crimeSceneProject.getProject().descriptors()));
// assertTrue("Mapping should have found CrimeScene descriptor as potential reference descriptor",
// potentialDescriptor == crimeSceneDescriptor);
// }
// public void testGuessDescriptor() {
//
// CrimeSceneProject crimeSceneProject = new CrimeSceneProject();
// MWMapping crimeSceneMapping = crimeSceneProject.getCrimeSceneMappingInPieceOfEvidence();
// MWDescriptor crimeSceneDescriptor = crimeSceneProject.getCrimeSceneDescriptor();
// MWDescriptor potentialDescriptor = crimeSceneMapping.guessDescriptor(CollectionTools.collection(crimeSceneProject.getProject().descriptors()));
// assertTrue("Mapping should have found CrimeScene descriptor as potential reference descriptor",
// potentialDescriptor == crimeSceneDescriptor);
// }
public void testSetInstanceVariableName() {
CrimeSceneProject crimeSceneProject = new CrimeSceneProject();
MWMapping mapping = crimeSceneProject.getFirstNameMappingInPerson();
String oldName = mapping.getInstanceVariable().getName();
mapping.getInstanceVariable().setName("newName");
assertTrue("Instance variable's name was SOMEHOW not set.", "newName".equals(mapping.getInstanceVariable().getName()));
assertTrue("Mapping name should not have changed. This should be driven from the UI", "firstName".equals(mapping.getName()));
mapping.getInstanceVariable().setName(oldName);
}
public void testRemoveAttributeRemovesMapping() {
CrimeSceneProject crimeSceneProject = new CrimeSceneProject();
MWMapping mapping = crimeSceneProject.getFirstNameMappingInPerson();
MWClassAttribute ivar = mapping.getInstanceVariable();
ivar.getDeclaringType().removeAttribute(ivar);
MWMapping nullFirstNameMapping = crimeSceneProject.getFirstNameMappingInPerson();
assertTrue("Mapping should have been removed from descriptor when classAttribute was removed", nullFirstNameMapping == null);
}
public void testMethodsDefinedIfUsingMethodAccessingProblem() {
// If we are using method access, then make sure that the access methods are defined.
String errorName = ProblemConstants.MAPPING_METHOD_ACCESSORS_NOT_SPECIFIED;
checkMappingsForFalseFailures( errorName, MWMapping.class );
MWMapping mapping = getMappingForClass(MWDirectToFieldMapping.class, getCrimeSceneProject());
mapping.setUsesMethodAccessing(false);
assertTrue( "doesn't use method accessing -- should not have problem", !hasProblem(errorName, mapping));
mapping.setUsesMethodAccessing(true);
mapping.setGetMethod( mapping.getGetMethod() );
mapping.setSetMethod( mapping.getSetMethod() );
assertTrue( "has methods -- should not have problem", !hasProblem(errorName, mapping));
mapping.setGetMethod(null);
mapping.setSetMethod(null);
assertTrue( "no methods -- should have problems", hasProblem(errorName, mapping));
}
public void testWriteLockFieldNotViolatedProblem()
{
// Pass if my referenced fields do not interfere with the write
// lock field (must be read only if referenced).
String errorName = ProblemConstants.MAPPING_REFERENCE_WRITE_LOCK_FIELD_NOT_READ_ONLY;
checkMappingsForFalseFailures( errorName, MWMapping.class );
MWMapping mapping = getMappingForClass(MWDirectToFieldMapping.class, getCrimeSceneProject());
if(((MWRelationalDescriptor) mapping.getParentDescriptor()).isTableDescriptor()) {
MWTableDescriptorLockingPolicy policy = (MWTableDescriptorLockingPolicy) mapping.getParentDescriptor().getLockingPolicy();
MWColumn lockingField = (MWColumn) policy.getVersionLockField();
boolean isReadOnly = mapping.isReadOnly();
Collection translatableFields = new ArrayList();
mapping.addWrittenFieldsTo(translatableFields);
if (translatableFields.size() == 0) {
return;
}
policy.setLockingType(MWLockingPolicy.OPTIMISTIC_LOCKING);
policy.setVersionLockField((MWColumn) translatableFields.iterator().next());
mapping.setReadOnly(false);
assertTrue( "should have problem", hasProblem(errorName, mapping));
// restore original state
mapping.setReadOnly( isReadOnly );
policy.setVersionLockField( lockingField );
}
}
public void testGetSetMethodsInitializedWhenMappingAdded() {
// use a test project that has useMethodAccessing set to true
//add a mapping to one of the descriptors
// insure that mapping.methodAccessing == true, and the get and ste methods have been guessed
}
public void testSetUseMethodAccessing() {
//when set to false, make sure get and set methods are nulled
//when set to true make sure get and set methods are guessed
}
}