blob: 8d0734a8e8dcdc928e00dfdb4749180c453e69a2 [file] [log] [blame]
package org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.tests.edit.policies.providers;
import static org.junit.jupiter.api.Assertions.*;
import org.eclipse.gef.EditPart;
import org.eclipse.gmf.runtime.common.core.service.IOperation;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation;
import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSDiagramImpl;
import org.eclipse.papyrus.infra.gmfdiag.tooling.runtime.linklf.router.LinkLFDiagramRootEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassAttributeCompartmentEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassFloatingNameEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassNameEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassNestedClassifierCompartmentEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassOperationCompartmentEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ModelEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.OperationForClassEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.edit.policies.EditPolicyFactory;
import org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.edit.policies.NotAClassEditPolicy;
import org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.edit.policies.NotHideableClassElementEditPolicy;
import org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.edit.policies.HideableClassElementEditPolicy;
import org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.edit.policies.ContainerEditPolicy;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
class ProviderToOverrideMouseMoveDuringCreation {
Mockito mock;
SubProvider providerToTest;
EditPart rootEditPart;
ModelEditPart modelEditPart;
CSSDiagramImpl cssDiagramImpl;
CreateEditPoliciesOperation createEditPoliciesOperation;
ClassAttributeCompartmentEditPart anAttributeCompartmentEditPart;
ClassOperationCompartmentEditPart anOperationCompartmentEditPart;
OperationForClassEditPart anOperationForClassEditPart;
ClassNestedClassifierCompartmentEditPart nestedClassifierCompartmentEditPart;
ClassEditPart classEditPart;
ClassNameEditPart classNameEditPart;
ClassFloatingNameEditPart classFloatingNameEditPart;
@BeforeEach
void setUp() throws Exception {
this.providerToTest = new SubProvider();
providerToTest.initFakePoliciesFactory();
rootEditPart = (EditPart) Mockito.mock(LinkLFDiagramRootEditPart.class);
modelEditPart = Mockito.mock(ModelEditPart.class);
cssDiagramImpl = Mockito.mock(CSSDiagramImpl.class);
Mockito.when(modelEditPart.getModel()).thenReturn(cssDiagramImpl);
Mockito.when(cssDiagramImpl.getType()).thenReturn("PapyrusUMLClassDiagram");
createEditPoliciesOperation = Mockito.mock(CreateEditPoliciesOperation.class);
anAttributeCompartmentEditPart = Mockito.mock(ClassAttributeCompartmentEditPart.class);
anOperationCompartmentEditPart = Mockito.mock(ClassOperationCompartmentEditPart.class);
anOperationForClassEditPart = Mockito.mock(OperationForClassEditPart.class);
nestedClassifierCompartmentEditPart = Mockito.mock(ClassNestedClassifierCompartmentEditPart.class);
classEditPart = Mockito.mock(ClassEditPart.class);
classNameEditPart = Mockito.mock(ClassNameEditPart.class);
classFloatingNameEditPart = Mockito.mock(ClassFloatingNameEditPart.class);
}
@AfterEach
void tearDown() throws Exception {
}
@Test
void testProvides() {
// As doesTheEditPartInTheOperationConcernAClassDiagramElement cannot be
// tested...
assertEquals(true, true);
}
public class MyAnswer<T> implements Answer<T> {
String labelPolicy;
CreationEditPolicy editPolicy;
public MyAnswer(String labelPolicy, CreationEditPolicy editPolicy) {
super();
this.labelPolicy = labelPolicy;
this.editPolicy = editPolicy;
}
@Override
public T answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
assertEquals(args[0], labelPolicy);
assertEquals(args[1], editPolicy);
return null;
}
}
@Test
void testCreateEditPolicies() {
final String POLICY_LABEL = org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.edit.policies.providers.MouseCreationEditPolicyProvider.POLICY_LABEL_TO_OVERRIDE;
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassComponentPotentiallyHideable))
.when(anAttributeCompartmentEditPart).installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(anAttributeCompartmentEditPart);
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassComponentPotentiallyHideable))
.when(anOperationCompartmentEditPart).installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(anOperationCompartmentEditPart);
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassComponentPotentiallyHideable))
.when(anOperationForClassEditPart).installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(anOperationForClassEditPart);
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassComponentPotentiallyHideable))
.when(nestedClassifierCompartmentEditPart).installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(nestedClassifierCompartmentEditPart);
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassComponentNotHideable))
.when(classEditPart).installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(classEditPart);
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassComponentNotHideable))
.when(classNameEditPart).installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(classNameEditPart);
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassComponentNotHideable))
.when(classFloatingNameEditPart).installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(classFloatingNameEditPart);
Mockito.doAnswer(new MyAnswer<Void>(POLICY_LABEL, providerToTest.policyForUmlClassDiagram)).when(modelEditPart)
.installEditPolicy(Mockito.anyObject(), Mockito.anyObject());
providerToTest.createEditPolicies(modelEditPart);
}
@Test
void testIsAnEditPolicyForCreationThatHasBeenAsked() {
assertEquals(providerToTest.isAnEditPolicyForCreationThatHasBeenAsked(createEditPoliciesOperation), true);
}
@Test
void testDoesTheEditPartInTheOperationConcernAClassDiagramElement() {
/*
* CreateEditPoliciesOperation.getEditPart is a final method and thus, not
* supported by Mockito
*
* This method is heavily based to isAnEditPartInAnUmlClassDiagram which can be
* tested
*
* Mockito.when(createEditPoliciesOperation.getEditPart()).thenReturn(
* modelEditPart); assertEquals(providerToTest.
* doesTheEditPartInTheOperationConcernAClassDiagramElement(
* createEditPoliciesOperation),true);
*
* Mockito.when(createEditPoliciesOperation.getEditPart()).thenReturn(
* rootEditPart); assertEquals(providerToTest.
* doesTheEditPartInTheOperationConcernAClassDiagramElement(
* createEditPoliciesOperation),false);
*
* EditPart simpleEditPart=Mockito.mock(EditPart.class);
* Mockito.when(simpleEditPart.getParent()).thenReturn(modelEditPart);
* Mockito.when(createEditPoliciesOperation.getEditPart()).thenReturn(
* simpleEditPart); assertEquals(providerToTest.
* doesTheEditPartInTheOperationConcernAClassDiagramElement(
* createEditPoliciesOperation),true);
*/
assertEquals(true, true);
}
@Test
void testIsAnEditPartInAnUmlClassDiagram() {
assertEquals(providerToTest.isAnEditPartInAnUmlClassDiagram(modelEditPart), true);
assertEquals(providerToTest.isAnEditPartInAnUmlClassDiagram(rootEditPart), false);
EditPart simpleEditPart = Mockito.mock(EditPart.class);
Mockito.when(simpleEditPart.getParent()).thenReturn(modelEditPart);
assertEquals(providerToTest.isAnEditPartInAnUmlClassDiagram(simpleEditPart), true);
}
@Test
void testIsTheUselessEditPartRootElement() {
assertEquals(providerToTest.isTheUselessEditPartRootElement(rootEditPart), true);
assertEquals(providerToTest.isTheUselessEditPartRootElement(null), true);
assertEquals(providerToTest.isTheUselessEditPartRootElement(modelEditPart), false);
}
@Test
void testIsAnEditPartForAUmlClassDiagram() {
assertEquals(providerToTest.isAnEditPartForAUmlClassDiagram(modelEditPart), true);
assertEquals(providerToTest.isAnEditPartForAUmlClassDiagram(rootEditPart), false);
}
@Test
void testIsAnEditPartForAnOperationInUmlClass() {
OperationForClassEditPart opEditPart = Mockito.mock(OperationForClassEditPart.class);
assertEquals(providerToTest.isAnEditPartForAnOperationInUmlClass(opEditPart), true);
}
@Test
void testIsAnEditPartForAnUmlClassComponentPotentiallyHideable() {
assertEquals(
providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(anAttributeCompartmentEditPart),
true);
assertEquals(
providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(anOperationCompartmentEditPart),
true);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(anOperationForClassEditPart),
true);
assertEquals(providerToTest
.isAnEditPartForAnUmlClassComponentPotentiallyHideable(nestedClassifierCompartmentEditPart), true);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(modelEditPart), false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(rootEditPart), false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(classEditPart), false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(classNameEditPart), false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentPotentiallyHideable(classFloatingNameEditPart),
false);
}
@Test
void testIsAnEditPartForAnUmlClassComponentNotHideable() {
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(anAttributeCompartmentEditPart),
false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(anOperationCompartmentEditPart),
false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(anOperationForClassEditPart), false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(nestedClassifierCompartmentEditPart),
false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(modelEditPart), false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(rootEditPart), false);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(classEditPart), true);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(classNameEditPart), true);
assertEquals(providerToTest.isAnEditPartForAnUmlClassComponentNotHideable(classFloatingNameEditPart), true);
}
// *************************
//
// INNER CLASS FOR ACCESSING TO PROTECTED METHODS
//
// *************************
public class SubProvider extends
org.eclipse.papyrus.uml.diagram.clazz.lf.autosizeableclasses.edit.policies.providers.MouseCreationEditPolicyProvider {
public NotAClassEditPolicy policyForAnythingInClassDiagramButClassAndItsComponents;
public NotHideableClassElementEditPolicy policyForUmlClassComponentNotHideable;
public HideableClassElementEditPolicy policyForUmlClassComponentPotentiallyHideable;
public ContainerEditPolicy policyForUmlClassDiagram;
public EditPolicyFactory policiesFactory;
protected void initFakePoliciesFactory() {
policyForAnythingInClassDiagramButClassAndItsComponents = Mockito
.mock(NotAClassEditPolicy.class);
policyForUmlClassComponentNotHideable = Mockito.mock(NotHideableClassElementEditPolicy.class);
policyForUmlClassComponentPotentiallyHideable = Mockito
.mock(HideableClassElementEditPolicy.class);
policyForUmlClassDiagram = Mockito.mock(ContainerEditPolicy.class);
policiesFactory = Mockito.mock(EditPolicyFactory.class);
Mockito.when(
policiesFactory.createNotAClassEditPolicy(Mockito.anyObject()))
.thenReturn(policyForAnythingInClassDiagramButClassAndItsComponents);
Mockito.when(policiesFactory.createNotHideableClassElementEditPolicy(Mockito.anyObject()))
.thenReturn(policyForUmlClassComponentNotHideable);
Mockito.when(policiesFactory.createHideableClassElementEditPolicy(Mockito.anyObject()))
.thenReturn(policyForUmlClassComponentPotentiallyHideable);
Mockito.when(policiesFactory.createContainerEditPolicy(Mockito.anyObject()))
.thenReturn(policyForUmlClassDiagram);
}
@Override
protected EditPolicyFactory getPoliciesFactory() {
if (policiesFactory == null)
initFakePoliciesFactory();
return policiesFactory;
}
@Override
protected boolean isAnEditPolicyForCreationThatHasBeenAsked(IOperation operation) {
return super.isAnEditPolicyForCreationThatHasBeenAsked(operation);
}
@Override
protected boolean doesTheEditPartInTheOperationConcernAClassDiagramElement(IOperation operation) {
return super.doesTheEditPartInTheOperationConcernAClassDiagramElement(operation);
}
@Override
protected boolean isAnEditPartInAnUmlClassDiagram(EditPart editPart) {
return super.isAnEditPartInAnUmlClassDiagram(editPart);
}
@Override
protected boolean isTheUselessEditPartRootElement(EditPart editPart) {
return super.isTheUselessEditPartRootElement(editPart);
}
@Override
protected boolean isAnEditPartForAUmlClassDiagram(EditPart editPart) {
return super.isAnEditPartForAUmlClassDiagram(editPart);
}
@Override
protected boolean isAnEditPartForAnOperationInUmlClass(EditPart editPart) {
return super.isAnEditPartForAnOperationInUmlClass(editPart);
}
@Override
protected boolean isAnEditPartForAnUmlClassComponentPotentiallyHideable(EditPart editPart) {
return super.isAnEditPartForAnUmlClassComponentPotentiallyHideable(editPart);
}
@Override
protected boolean isAnEditPartForAnUmlClassComponentNotHideable(EditPart editPart) {
return super.isAnEditPartForAnUmlClassComponentNotHideable(editPart);
}
}
}