package org.eclipse.uml2.diagram.sequence.tests; import org.eclipse.uml2.diagram.sequence.model.builder.SDBuilder; import org.eclipse.uml2.diagram.sequence.model.edit.CreateCombinedFragment; import org.eclipse.uml2.diagram.sequence.model.edit.SDAnchor; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDBracket; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDCombinedFragment; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDFrame; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDInteractionOperand; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDLifeLine; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDModel; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDMountingRegion; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDTrace; import org.eclipse.uml2.uml.InteractionOperand; import org.eclipse.uml2.uml.InteractionOperatorKind; public class SDCreateCombinedFragmentTest extends AbstractSDModelCreateTest { public void testFirstCreateCombinedFragmentOnLifeline() { SDModel sdModel = createSimpleLifeLineX2(); SDLifeLine a = findLifeLineByName(sdModel, "a"); SDLifeLine b = findLifeLineByName(sdModel, "b"); final InteractionOperatorKind ALT_LITERAL = InteractionOperatorKind.ALT_LITERAL; SDAnchor forFirstCreated = null; CreateCombinedFragment creator = new CreateCombinedFragment(sdModel); SDCombinedFragment firstForA = creator.createCombinedFragment(// a, forFirstCreated, ALT_LITERAL, 3); basicCheckCreatedCombinedFragment(firstForA, ALT_LITERAL, 3, a); assertTrue(sdModel.getFrames().contains(firstForA)); assertTrue(firstForA.getCoveredLifeLines().contains(a)); assertFalse(firstForA.getCoveredLifeLines().contains(b)); assertFalse(a.getBrackets().isEmpty()); assertTrue(b.getBrackets().isEmpty()); assertNotNull(firstForA.findRegionForSDLifeLine(a)); assertNull(firstForA.findRegionForSDLifeLine(b)); assertTrue(a.getBrackets().contains(firstForA.findRegionForSDLifeLine(a))); SDModel rebuilt = new SDBuilder(sdModel.getUmlInteraction()).getSDModel(); assertNotNull(rebuilt); assertEquals(1, rebuilt.getFrames().size()); assertTrue(rebuilt.getFrames().get(0) instanceof SDCombinedFragment); assertSame(firstForA.getUmlFragment(), rebuilt.getFrames().get(0).getUmlFragment()); } public void testCreateCombinedFragmentAfterAnchor() { SDModel sdModel = createSimpleLifeLineX2(); SDLifeLine a = findLifeLineByName(sdModel, "a"); SDLifeLine b = findLifeLineByName(sdModel, "b"); final InteractionOperatorKind SEQ_LITERAL = InteractionOperatorKind.SEQ_LITERAL; final InteractionOperatorKind ASSERT_LITERAL = InteractionOperatorKind.ASSERT_LITERAL; final CreateCombinedFragment creator = new CreateCombinedFragment(sdModel); SDCombinedFragment anchorOnB = creator.createCombinedFragment(// b, null, SEQ_LITERAL, 4); basicCheckCreatedCombinedFragment(anchorOnB, SEQ_LITERAL, 4, b); SDMountingRegion anchorMounter = anchorOnB.findRegionForSDLifeLine(b); assertNotNull(anchorMounter); assertSame(b, anchorMounter.getBracketContainer()); SDAnchor afterAnchor = SDAnchor.after(anchorMounter); SDCombinedFragment subj = creator.createCombinedFragment(b, afterAnchor, ASSERT_LITERAL, 1); basicCheckCreatedCombinedFragment(subj, ASSERT_LITERAL, 1, b); assertTrue(subj.getCoveredLifeLines().contains(b)); assertFalse(subj.getCoveredLifeLines().contains(a)); assertNotNull(subj.findRegionForSDLifeLine(b)); assertNull(subj.findRegionForSDLifeLine(a)); SDMountingRegion subjMounter = subj.findRegionForSDLifeLine(b); assertSame(b, subjMounter.getBracketContainer()); checkIsSiblingBefore(anchorMounter, subjMounter); } public void testCreateCombinedFragmentBeforeAnchor() { SDModel sdModel = createSimpleLifeLineX2(); SDLifeLine a = findLifeLineByName(sdModel, "a"); SDLifeLine b = findLifeLineByName(sdModel, "b"); final InteractionOperatorKind LOOP_LITERAL = InteractionOperatorKind.LOOP_LITERAL; final CreateCombinedFragment creator = new CreateCombinedFragment(sdModel); SDCombinedFragment anchorOnA = creator.createCombinedFragment(// a, null, LOOP_LITERAL, 1); basicCheckCreatedCombinedFragment(anchorOnA, LOOP_LITERAL, 1, a); assertNull(anchorOnA.findRegionForSDLifeLine(b)); SDMountingRegion anchorMounter = anchorOnA.findRegionForSDLifeLine(a); assertNotNull(anchorMounter); assertSame(a, anchorMounter.getBracketContainer()); SDAnchor beforeAnchor = SDAnchor.firstChildFor(a); SDCombinedFragment subj = creator.createCombinedFragment(a, beforeAnchor, LOOP_LITERAL, 1); basicCheckCreatedCombinedFragment(subj, LOOP_LITERAL, 1, a); assertFalse(subj.getCoveredLifeLines().contains(b)); assertTrue(subj.getCoveredLifeLines().contains(a)); assertNull(subj.findRegionForSDLifeLine(b)); assertNotNull(subj.findRegionForSDLifeLine(a)); SDMountingRegion subjMounter = subj.findRegionForSDLifeLine(a); assertSame(a, subjMounter.getBracketContainer()); checkIsSiblingBefore(subjMounter, anchorMounter); } public void testCombinedMountingRegionsAreInvalidContainers(){ SDModel sdModel = createSimpleLifeLineX2(); SDLifeLine a = findLifeLineByName(sdModel, "a"); final InteractionOperatorKind SOME_LITERAL = InteractionOperatorKind.STRICT_LITERAL; final CreateCombinedFragment creator = new CreateCombinedFragment(sdModel); SDCombinedFragment combineParent = creator.createCombinedFragment(// a, null, SOME_LITERAL, 1); basicCheckCreatedCombinedFragment(combineParent, SOME_LITERAL, 1, a); assertNotNull(combineParent.findRegionForSDLifeLine(a)); SDMountingRegion combinedMounter = combineParent.findRegionForSDLifeLine(a); assertNotNull(combinedMounter); assertSame(a, combinedMounter.getBracketContainer()); assertNull(creator.createCombinedFragment(// combinedMounter, SDAnchor.firstChildFor(combinedMounter), SOME_LITERAL, 1)); } public void testCreateNestedCombinedRegion(){ SDModel sdModel = createSimpleLifeLineX2(); SDLifeLine a = findLifeLineByName(sdModel, "a"); final InteractionOperatorKind SOME_LITERAL = InteractionOperatorKind.OPT_LITERAL; final int OPERANDS = 2; final CreateCombinedFragment creator = new CreateCombinedFragment(sdModel); SDCombinedFragment combineParent = creator.createCombinedFragment(// a, null, SOME_LITERAL, OPERANDS); basicCheckCreatedCombinedFragment(combineParent, SOME_LITERAL, OPERANDS, a); assertNotNull(combineParent.findRegionForSDLifeLine(a)); SDMountingRegion combinedMounter = combineParent.findRegionForSDLifeLine(a); assertNotNull(combinedMounter); assertSame(a, combinedMounter.getBracketContainer()); assertEquals(OPERANDS, combinedMounter.getBrackets().size()); for (SDBracket nextOperandMounter : combinedMounter.getBrackets()){ assertTrue(nextOperandMounter instanceof SDMountingRegion); SDCombinedFragment nextInner = creator.createCombinedFragment(// (SDMountingRegion)nextOperandMounter, null, SOME_LITERAL, 1); basicCheckCreatedCombinedFragment(nextInner, SOME_LITERAL, 1, a); } } protected void basicCheckCreatedCombinedFragment(SDCombinedFragment combined, InteractionOperatorKind expectedOperator, int expectedOperands, SDLifeLine... expectedCovereds) { assertNotNull(combined); assertNotNull(combined.getUmlFragment()); assertNotNull(combined.getUmlCombinedFragment()); assertEquals(expectedOperator, combined.getUmlCombinedFragment().getInteractionOperator()); assertEquals(expectedCovereds.length, combined.getCoveredLifeLines().size()); for (SDLifeLine nextLifeLine : expectedCovereds) { assertTrue(combined.getCoveredLifeLines().contains(nextLifeLine)); assertNotNull(combined.findRegionForSDLifeLine(nextLifeLine)); } assertEquals(expectedOperands, combined.getFrames().size()); for (SDFrame nextOperand : combined.getFrames()) { assertTrue(nextOperand instanceof SDInteractionOperand); assertEquals(expectedCovereds.length, nextOperand.getCoveredLifeLines().size()); for (SDLifeLine nextLifeLine : expectedCovereds) { assertTrue(nextOperand.getCoveredLifeLines().contains(nextLifeLine)); assertNotNull(nextOperand.findRegionForSDLifeLine(nextLifeLine)); assertTrue(nextOperand.findRegionForSDLifeLine(nextLifeLine).getBrackets().isEmpty()); } } checkModelReparsableAndContainsCopyFor(combined); SDTrace tracing = expectedCovereds[0].getModel().getUMLTracing(); assertSame(combined, tracing.findCombinedFragment(combined.getUmlCombinedFragment())); for (SDFrame nextOperand : combined.getFrames()){ assertSame(nextOperand, tracing.findInteractionOperand((InteractionOperand)nextOperand.getUmlFragment())); } } }