| 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); |
| } |
| |
| } |
| |
| } |