package org.eclipse.uml2.diagram.sequence.tests; import java.util.LinkedList; import org.eclipse.uml2.diagram.sequence.model.builder.SDBuilder; import org.eclipse.uml2.diagram.sequence.model.builder.SDModelHelper; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDBracket; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDBracketContainer; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDFrame; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDFrameContainer; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDLifeLine; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDModel; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Interaction; import org.eclipse.uml2.uml.Lifeline; import org.eclipse.uml2.uml.UMLFactory; public class AbstractSDModelCreateTest extends AbstractSDModelBuilderTest { public void testPreconditionsCreatetLifelineX2() { SDModel sdModel = createSimpleLifeLineX2(); assertNotNull(sdModel); SDLifeLine a = findLifeLineByName(sdModel, "a"); SDLifeLine b = findLifeLineByName(sdModel, "b"); assertNotNull(a); assertNotNull(b); } protected final void checkModelReparsableAndContainsCopyFor(SDBracket justCreated){ assertNotNull(justCreated.getCoveredLifeLine()); Element justCreatedUML = SDModelHelper.UML_ELEMENT_EXTRACTOR.doSwitch(justCreated); assertNotNull(justCreatedUML); SDModel actualSDModel = rootSDModel(justCreated); assertNotNull(actualSDModel); SDModel reparsed = new SDBuilder(actualSDModel.getUmlInteraction()).getSDModel(); assertNotNull(reparsed); SDLifeLine reparsedLifeLine = reparsed.getUMLTracing().findLifeLine(justCreated.getCoveredLifeLine().getUmlLifeline()); LinkedList<SDBracket> bracketsSearch = new LinkedList<SDBracket>(reparsedLifeLine.getBrackets()); SDBracket foundCopy = null; while (foundCopy == null && !bracketsSearch.isEmpty()){ SDBracket next = bracketsSearch.removeFirst(); Element nextUML = SDModelHelper.UML_ELEMENT_EXTRACTOR.doSwitch(next); if (justCreatedUML == nextUML){ foundCopy = next; } } assertNotNull(foundCopy); } protected final void checkModelReparsableAndContainsCopyFor(SDFrame justCreated){ SDModel actualSDModel = rootSDModel(justCreated); assertNotNull(actualSDModel); SDModel reparsed = new SDBuilder(actualSDModel.getUmlInteraction()).getSDModel(); assertNotNull(reparsed); LinkedList<SDFrame> framesSearch = new LinkedList<SDFrame>(reparsed.getFrames()); SDFrame foundCopy = null; while (foundCopy == null && !framesSearch.isEmpty()){ SDFrame next = framesSearch.removeFirst(); if (next.getUmlFragment() == justCreated.getUmlFragment()){ foundCopy = next; } else { framesSearch.addAll(next.getFrames()); } } assertNotNull(foundCopy); } protected static final SDModel rootSDModel(SDBracket bracket){ return bracket.getCoveredLifeLine().getModel(); } protected static final SDModel rootSDModel(SDFrame frame){ if (frame == null){ return null; } SDFrameContainer container = frame.getFrameContainer(); if (container instanceof SDModel){ return (SDModel)container; } return rootSDModel((SDFrame)container); } protected final void checkSiblingsInOrder(SDBracket... siblings) { assertTrue(siblings.length >= 2); for (int i = 0; i < siblings.length - 1; i++) { checkIsSiblingBefore(siblings[i], siblings[i + 1]); } } protected final void checkIsSiblingBefore(SDBracket expectedBefore, SDBracket expectedAfter) { assertFalse(expectedBefore == expectedAfter); assertNotNull(expectedBefore.getBracketContainer()); assertSame(expectedBefore.getBracketContainer(), expectedAfter.getBracketContainer()); SDBracketContainer commonContainer = expectedAfter.getBracketContainer(); assertTrue(commonContainer.getBrackets().indexOf(expectedAfter) > -1); assertTrue(commonContainer.getBrackets().indexOf(expectedBefore) > -1); assertTrue(commonContainer.getBrackets().indexOf(expectedBefore) < commonContainer.getBrackets().indexOf(expectedAfter)); } protected final SDModel createSimpleLifeLineX2() { Interaction umlResult = UMLFactory.eINSTANCE.createInteraction(); umlResult.setName("Interaction"); Lifeline a = umlResult.createLifeline("a"); Lifeline b = umlResult.createLifeline("b"); SDModel sdModel = new SDBuilder(umlResult).getSDModel(); assertNotNull(sdModel); assertEquals(2, sdModel.getLifelines().size()); assertTrue(sdModel.getFrames().isEmpty()); assertTrue(sdModel.getGates().isEmpty()); assertTrue(sdModel.getMessages().isEmpty()); assertSame(umlResult, sdModel.getUmlInteraction()); assertNotNull(sdModel.getUMLTracing()); SDLifeLine sdLifeLineA = findLifeLineByName(sdModel, "a"); SDLifeLine sdLifeLineB = findLifeLineByName(sdModel, "b"); assertNotNull(sdLifeLineA); assertNotNull(sdLifeLineB); assertSame(a, sdLifeLineA.getUmlLifeline()); assertSame(b, sdLifeLineB.getUmlLifeline()); assertSame(sdLifeLineA, sdLifeLineA.getCoveredLifeLine()); assertSame(sdLifeLineB, sdLifeLineB.getCoveredLifeLine()); return sdModel; } }