public void ValidateElement(UmlDiagram diagram, UmlBase element) { foreach (KeyValuePair <string, string> pair in element.TaggedValues) { String name = diagram.GetType().Name + "_" + element.GetType().Name + "_" + pair.Key; if (pair.Key.Contains("jude.hyperlink")) { name = pair.Key.Replace('.', '_'); } MethodInfo method = this.GetType().GetMethod(name); String info; if (element is UmlUseCase) { UmlUseCase aux = (UmlUseCase)element; info = diagram.Name + " >> " + aux.Name + " >> " + pair.Key; } else { info = diagram.Name + " >> " + element.Name + " >> " + pair.Key; } if (method != null) { method.Invoke(this, new object[] { pair.Value, info }); } } }
/// <summary> /// Valida um elemento de acordo com o tipo e diagrama ao qual pertence /// </summary> public void ValidateElement(UmlDiagram diagram, UmlBase element) { foreach (KeyValuePair <string, string> pair in element.TaggedValues) { MethodInfo method = this.GetType().GetMethod( diagram.GetType().Name + "_" + element.GetType().Name + "_" + pair.Key); String info; if (element is UmlUseCase) { UmlUseCase aux = (UmlUseCase)element; info = diagram.Name + " >> " + aux.Name + " >> " + pair.Key; } else { info = diagram.Name + " >> " + element.Name + " >> " + pair.Key; } if (method != null) { method.Invoke(this, new object[] { pair.Value, info }); } } }
private void ValidateUseCase(UmlModel model, UmlDiagram diagram, UmlUseCase uCase) { Boolean existeAC = false; String aux = uCase.GetTaggedValue("jude.hyperlink"); if (aux != null) { foreach (UmlActivityDiagram actD in model.Diagrams.OfType <UmlActivityDiagram> ()) { if ((aux == uCase.Name) && (aux == actD.Name)) { existeAC = true; break; } } } if (!existeAC) { log("[WARNING] Missing activity diagram for { " + HttpUtility.UrlDecode(uCase.Name) + " } use case.", 2); } if (String.IsNullOrEmpty(uCase.GetTaggedValue("TDPRECONDITIONS"))) { log("[WARNING] Missing TDpreConditions in " + HttpUtility.UrlDecode(diagram.Name) + " # " + HttpUtility.UrlDecode(uCase.Name) + " element.", 2); } if (String.IsNullOrEmpty(uCase.GetTaggedValue("TDPOSTCONDITIONS"))) { log("[WARNING] Missing TDpostConditions in " + HttpUtility.UrlDecode(diagram.Name) + " # " + HttpUtility.UrlDecode(uCase.Name) + " element.", 2); } }
private void GetUseCaseTaggedValues(UmlUseCase useCase, DirectedGraph graph) { foreach (KeyValuePair <String, String> pair in useCase.TaggedValues) { if (!pair.Key.Equals("jude.hyperlink")) { graph.Values.Add(pair.Key, pair.Value); } } }
private bool ContainsInclude(UmlUseCaseDiagram diagram, UmlUseCase useCase) { bool IsInclude = true; foreach (UmlAssociation item in diagram.UmlObjects.OfType <UmlAssociation> ()) { if (item.End1.Id.Equals(useCase.Id) && item.End2 is UmlActor || item.End2.Id.Equals(useCase.Id) && item.End1 is UmlActor) { IsInclude = false; } } return(IsInclude); }
public TestPlan PopulateTestPlan(String[][] matriz, FiniteStateMachine machine, UmlModel model, List <CsvParamFile> paramFiles) { this.paramFiles = paramFiles; TestPlan testPlan = new TestPlan(); UmlUseCaseDiagram useCaseDiagram = model.Diagrams.OfType <UmlUseCaseDiagram> ().FirstOrDefault(); //Get the use case that corresponds to the current machine UmlUseCase useCase = GetUseCase(machine, model); if (!IsInclude(useCaseDiagram, useCase)) { PopulateTestCase(matriz, machine, model, testPlan, useCase); } return(testPlan); }
private Boolean IsInclude(UmlUseCaseDiagram diagram, UmlUseCase useCase) { String idActor = ""; foreach (UmlActor item in diagram.UmlObjects.OfType <UmlActor> ()) { idActor = item.Id; } foreach (UmlAssociation item in diagram.UmlObjects.OfType <UmlAssociation> ()) { if ((item.End2.Id.Equals(useCase.Id) && item.End1.Id.Equals(idActor)) || (item.End1.Id.Equals(useCase.Id) && item.End2.Id.Equals(idActor))) { return(false); } } return(true); }
private void ValidateUseCase(UmlModel model, UmlDiagram diagram, UmlBase item) { UmlUseCase uCase = (UmlUseCase)item; bool existeAC = false; foreach (UmlActivityDiagram actD in model.Diagrams.OfType <UmlActivityDiagram> ()) { if (actD.Name == uCase.Name) { existeAC = true; break; } } if (!existeAC) { log("[ERROR] Missing activity diagram for \"" + HttpUtility.UrlDecode(uCase.Name) + "\" use case.", 3); } }
private void GenerateUseCaseDiagram() { UmlUseCaseDiagram ucdiagram = new UmlUseCaseDiagram(); ucdiagram.Name = "UseCase Diagram0"; UmlActor actor = new UmlActor(); actor.Name = "Actor0"; UmlUseCase uc = new UmlUseCase(); uc.Name = "UseCase0"; UmlAssociation assoc = new UmlAssociation(); assoc.End1 = actor; assoc.End2 = uc; ucdiagram.UmlObjects.Add(actor); ucdiagram.UmlObjects.Add(uc); ucdiagram.UmlObjects.Add(assoc); model.AddDiagram(ucdiagram); }
public UmlModel TransformToUml(FiniteStateMachine[] fsms) { UmlModel model = new UmlModel("model"); UmlUseCaseDiagram ucDiagram = new UmlUseCaseDiagram(); ucDiagram.Id = Guid.NewGuid().ToString(); ucDiagram.Name = "useCase diagram"; UmlActor user = new UmlActor(); user.Name = "user"; user.Id = Guid.NewGuid().ToString(); ucDiagram.UmlObjects.Add(user); State s = new State(); foreach (FiniteStateMachine fsm in fsms) { UmlUseCase useCase = new UmlUseCase(); useCase.Name = fsm.Name; useCase.Id = Guid.NewGuid().ToString(); UmlAssociation association = new UmlAssociation(); association.Id = Guid.NewGuid().ToString(); association.End1 = user; association.End2 = useCase; ucDiagram.UmlObjects.Add(useCase); ucDiagram.UmlObjects.Add(association); UmlActivityDiagram actDiagram = new UmlActivityDiagram(fsm.Name); Transition initialTransition = new Transition(); State initialState = new State(); initialTransition = (from t in fsm.Transitions where fsm.Transitions.Count(x => x.TargetState.Equals(t.SourceState)) == 0 select t).First(); UmlInitialState initial = new UmlInitialState(); UmlActionState initialTarget = new UmlActionState(); UmlTransition transInitial = new UmlTransition(); initial.Name = initialTransition.SourceState.Name; initial.Id = initialTransition.SourceState.Id; initialTarget.Name = initialTransition.TargetState.Name; initialTarget.Id = initialTransition.TargetState.Id; transInitial.Source = initial; transInitial.Target = initialTarget; actDiagram.UmlObjects.Add(initialTarget); actDiagram.UmlObjects.Add(initial); actDiagram.UmlObjects.Add(transInitial); foreach (State state in fsm.States) { List <Transition> listTransition = new List <Transition> (); listTransition = GetTransitions(state, fsm); if (listTransition.Count < 2 && listTransition.Count != 0) { Transition transitionFSM = listTransition[0]; UmlActionState actionState_Source = new UmlActionState(); actionState_Source.Name = transitionFSM.SourceState.Name; actionState_Source.Id = transitionFSM.SourceState.Id; UmlActionState actionState_Target1 = new UmlActionState(); actionState_Target1.Name = transitionFSM.TargetState.Name; actionState_Target1.Id = transitionFSM.TargetState.Id; UmlTransition trans2 = new UmlTransition(); UmlTransition trans1 = new UmlTransition(); trans1.Source = actionState_Source; trans1.Target = actionState_Target1; trans1.SetTaggedValue("TDACTION", transitionFSM.Input); trans1.SetTaggedValue("TDEXPECTEDRESULT", transitionFSM.Output); if (!actDiagram.UmlObjects.Contains(trans1)) { actDiagram.UmlObjects.Add(trans1); } if (!actDiagram.UmlObjects.Contains(actionState_Source)) { actDiagram.UmlObjects.Add(actionState_Source); } if (!actDiagram.UmlObjects.Contains(actionState_Target1)) { actDiagram.UmlObjects.Add(actionState_Target1); } } else { //criar decision bool createDecision = false; UmlDecision decision = new UmlDecision(); foreach (Transition transition in listTransition) { if (createDecision == false) { actDiagram.UmlObjects.Add(decision); createDecision = true; } UmlActionState source = new UmlActionState(); UmlActionState target = new UmlActionState(); UmlTransition transitionBeforeDecision = new UmlTransition(); UmlTransition transitionAfterDecision = new UmlTransition(); source.Name = transition.SourceState.Name; source.Id = transition.SourceState.Id; target.Name = transition.TargetState.Name; target.Id = transition.TargetState.Id; transitionBeforeDecision.Source = source; transitionBeforeDecision.Target = decision; transitionAfterDecision.Source = decision; transitionAfterDecision.Target = target; transitionAfterDecision.SetTaggedValue("TDACTION", transition.Input); transitionAfterDecision.SetTaggedValue("TDEXPECTEDRESULT", transition.Output); actDiagram.UmlObjects.Add(transitionBeforeDecision); actDiagram.UmlObjects.Add(transitionAfterDecision); actDiagram.UmlObjects.Add(source); actDiagram.UmlObjects.Add(target); } } } State finalState = new State(); Transition aux = new Transition(); finalState = (from t in fsm.Transitions where fsm.Transitions.Count(x => x.SourceState.Equals(t.TargetState)) == 0 select t.TargetState).First(); UmlActionState finalSource = new UmlActionState(); finalSource.Name = finalState.Name; finalSource.Id = finalState.Id; UmlFinalState final = new UmlFinalState(); final.Name = "finalNode"; final.Id = Guid.NewGuid().ToString(); UmlTransition transFinal = new UmlTransition(); transFinal.Source = finalSource; transFinal.Target = final; if (!actDiagram.UmlObjects.Contains(finalSource)) { actDiagram.UmlObjects.Add(finalSource); } actDiagram.UmlObjects.Add(final); actDiagram.UmlObjects.Add(transFinal); model.AddDiagram(actDiagram); model.AddDiagram(ucDiagram); } return(model); }
private void ValidateDuplicatedActivitiesRecCall(UmlActivityDiagram actDiagram, UmlModel model, List <String> listActionForSingleUseCase, UmlUseCase useCase) { List <String> repeatedActivities = new List <String>(); foreach (UmlActionState act in actDiagram.UmlObjects.OfType <UmlActionState>()) { if (!String.IsNullOrEmpty(act.GetTaggedValue("jude.hyperlink"))) { UmlActivityDiagram actDiagramSub = model.Diagrams.OfType <UmlActivityDiagram>().Where(x => x.Name.Equals(act.Name)).FirstOrDefault(); ValidateDuplicatedActivitiesRecCall(actDiagramSub, model, listActionForSingleUseCase, useCase); } else { if (!(act is UmlInitialState || act is UmlFinalState)) { if (!listActionForSingleUseCase.Contains(act.Name)) { listActionForSingleUseCase.Add(act.Name); } else { if (!repeatedActivities.Contains(act.Name)) { log("[ERROR] Action state { " + HttpUtility.UrlDecode(act.Name) + " } has its name duplicated. Found at { " + HttpUtility.UrlDecode(useCase.Name) + " } diagram.", 3); repeatedActivities.Add(act.Name); } } } } } }
public UmlModel FromXmi(XmlDocument doc, ref String name) { UmlModel model = new UmlModel(""); //uml and astah namespaces XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable); nsManager.AddNamespace("JUDE", "http://objectclub.esm.co.jp/Jude/namespace/"); nsManager.AddNamespace("UML", "org.omg.xmi.namespace.UML"); XmlNodeList mod = doc.SelectNodes("//UML:Model[@xmi.id]", nsManager); foreach (XmlNode node in mod) { name = node.Attributes["name"].Value; break; } //importing activity diagrams into model. XmlNodeList nodesWithActivityDiagrams = doc.SelectNodes("//UML:ActivityGraph[@xmi.id]", nsManager); #region Activity Diagram if (nodesWithActivityDiagrams.Count != 0) { foreach (XmlNode node in nodesWithActivityDiagrams) { UmlActivityDiagram actDiagram = new UmlActivityDiagram(node.Attributes["name"].Value); actDiagram.Id = node.Attributes["xmi.id"].Value; actDiagram.Name = node.Attributes["name"].Value; model.AddDiagram(actDiagram); #region Pseudostate foreach (XmlNode pseudoNode in node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:Pseudostate[@xmi.id]", nsManager)) { UmlElement element = null; if (pseudoNode.Attributes["kind"].Value.Equals("initial")) { element = new UmlInitialState(); } else if (pseudoNode.Attributes["kind"].Value.Equals("fork")) { element = new UmlFork(); } else if (pseudoNode.Attributes["kind"].Value.Equals("junction")) { element = new UmlDecision(); } else if (pseudoNode.Attributes["kind"].Value.Equals("join")) { element = new UmlJoin(); } element.Name = pseudoNode.Attributes["name"].Value; element.Id = pseudoNode.Attributes["xmi.id"].Value; #region Tagged Values foreach (XmlNode taggedValuesNode in pseudoNode.SelectNodes("//UML:Pseudostate[@xmi.id='" + element.Id + "']//UML:ModelElement.taggedValue//UML:TaggedValue[@xmi.id]", nsManager)) { //element.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, HttpUtility.UrlDecode(taggedValuesNode.Attributes["value"].Value)); element.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, taggedValuesNode.Attributes["value"].Value); } #endregion actDiagram.UmlObjects.Add(element); } #endregion #region ActionState foreach (XmlNode stateNode in node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:ActionState[@xmi.id]", nsManager)) { UmlElement state = new UmlActionState(); state.Id = stateNode.Attributes["xmi.id"].Value; state.Name = stateNode.Attributes["name"].Value; #region Tagged Values foreach (XmlNode taggedValuesNode in stateNode.SelectNodes("//UML:ActionState[@xmi.id='" + state.Id + "']//UML:ModelElement.taggedValue//UML:TaggedValue[@xmi.id]", nsManager)) { #region Hyperlink if (taggedValuesNode.Attributes["tag"].Value.Equals("jude.hyperlink")) { string nameToken = "type%3Dmodel%2Cname%3D"; string commentToken = "%2Cpath%3D%2Ccomment%3D"; int i1 = taggedValuesNode.Attributes["value"].Value.IndexOf(nameToken) + (nameToken.Length); int i2 = taggedValuesNode.Attributes["value"].Value.IndexOf(commentToken); String aux_value = taggedValuesNode.Attributes["value"].Value.Substring(i1, i2 - commentToken.Length + 1); String aux_value2 = taggedValuesNode.Attributes["value"].Value.Substring(i2 + commentToken.Length); state.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, aux_value); if (!String.IsNullOrEmpty(aux_value2)) { state.SetTaggedValue("cycles", aux_value2); } foreach (XmlNode jude in node.SelectNodes("//JUDE:Diagram[@xmi.id='" + aux_value + "']//UML:ActivityGraph", nsManager)) { string idActivityGraph = jude.Attributes["xmi.idref"].Value; foreach (XmlNode item in node.SelectNodes("//UML:ActivityGraph[xmi.id='" + idActivityGraph + "']", nsManager)) { state.SetTaggedValue("jude.hyperlink", item.Attributes["name"].Value); } } foreach (XmlNode item in node.SelectNodes("//JUDE:ActivityDiagram[@xmi.id='" + aux_value + "']//UML:ActivityGraph", nsManager)) { string idActivityGraph = item.Attributes["xmi.idref"].Value; foreach (XmlNode item1 in node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + idActivityGraph + "']", nsManager)) { state.SetTaggedValue("jude.hyperlink", item1.Attributes["name"].Value); } } } #endregion else { string tag = taggedValuesNode.Attributes["tag"].Value; string var = null; try { var = taggedValuesNode.Attributes["value"].Value; } catch (Exception) { state.SetTaggedValue(tag, ""); } if (var != null) { state.SetTaggedValue(tag, var); } } } #endregion actDiagram.UmlObjects.Add(state); } #endregion #region FinalState foreach (XmlNode finalStateNode in node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:FinalState[@xmi.id]", nsManager)) { UmlElement finalState = new UmlFinalState(); finalState.Name = finalStateNode.Attributes["name"].Value; finalState.Id = finalStateNode.Attributes["xmi.id"].Value; #region Tagged Values foreach (XmlNode taggedValuesNode in finalStateNode.SelectNodes("//UML:FinalState[@xmi.id='" + finalState.Id + "']//UML:ModelElement.taggedValue//UML:TaggedValue[@xmi.id]", nsManager)) { //finalState.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, HttpUtility.UrlDecode(taggedValuesNode.Attributes["value"].Value)); finalState.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, taggedValuesNode.Attributes["value"].Value); } #endregion actDiagram.UmlObjects.Add(finalState); } #endregion #region Transition //UmlTransition foreach (XmlNode transitionNode in node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:Transition[@xmi.id]", nsManager)) { UmlTransition transition = new UmlTransition(); transition.Id = transitionNode.Attributes["xmi.id"].Value; transition.Name = transitionNode.Attributes["name"].Value; // Tagged Values foreach (XmlNode tagValuesNode in transitionNode.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:Transition[@xmi.id='" + transition.Id + "']//UML:TaggedValue", nsManager)) { try { //transition.SetTaggedValue(tagValuesNode.Attributes["tag"].Value, HttpUtility.UrlDecode(tagValuesNode.Attributes["value"].Value)); transition.SetTaggedValue(tagValuesNode.Attributes["tag"].Value.ToUpper(), tagValuesNode.Attributes["value"].Value); } catch { transition.SetTaggedValue(tagValuesNode.Attributes["tag"].Value.ToUpper(), ""); } } // Transition Source foreach (XmlNode transitionSource in transitionNode.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:Transition[@xmi.id='" + transition.Id + "']//UML:Transition.source//UML:StateVertex", nsManager)) { UmlElement element = actDiagram.GetElementById(transitionSource.Attributes["xmi.idref"].Value); transition.Source = element; } // Transition Target foreach (XmlNode transitionTarget in transitionNode.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:Transition[@xmi.id='" + transition.Id + "']//UML:Transition.target//UML:StateVertex", nsManager)) { UmlElement element = actDiagram.GetElementById(transitionTarget.Attributes["xmi.idref"].Value); transition.Target = element; } actDiagram.UmlObjects.Add(transition); } #endregion #region Lanes XmlNodeList partition = node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:Partition[@xmi.id]", nsManager); bool isDimension = false; if (partition.Count != 0) { foreach (XmlNode dimensionNode in partition) { if (isDimension == false) { isDimension = true; UmlLane dimension = new UmlLane(); dimension.Id = dimensionNode.Attributes["xmi.id"].Value; dimension.Name = dimensionNode.Attributes["name"].Value; foreach (XmlNode laneNode in dimensionNode.SelectNodes("//UML:ActivityGraph[@xmi.id='" + actDiagram.Id + "']//UML:Partition[@xmi.id='" + dimension.Id + "']//JUDE:ModelElement", nsManager)) { XmiImporter importer = new XmiImporter(); UmlLane lane = importer.CreateLane(dimension.Id, node, laneNode.Attributes["xmi.idref"].Value, actDiagram, nsManager); actDiagram.UmlObjects.Add(lane); actDiagram.Lanes.Add(lane); dimension.ListLane.Add(lane); } } } } #endregion } } #endregion //importing usecase diagrams into model. XmlNodeList nodesWithUseCaseDiagrams = doc.SelectNodes("//UML:UseCase[@xmi.id]", nsManager); XmlNodeList nodesWithActorDiagrams = doc.SelectNodes("//UML:Actor[@xmi.id]", nsManager); #region UseCase Diagrams // if (nodesWithUseCaseDiagrams.Count != 0 && nodesWithActorDiagrams.Count != 0) { XmlNodeList modelElements = doc.SelectNodes("//UML:Model[@xmi.id]", nsManager); foreach (XmlNode node in modelElements) { UmlUseCaseDiagram useCaseDiagram = new UmlUseCaseDiagram(); useCaseDiagram.Id = node.Attributes["xmi.id"].Value; useCaseDiagram.Name = node.Attributes["name"].Value; model.AddDiagram(useCaseDiagram); #region Actor foreach (XmlNode actorNode in node.SelectNodes("//UML:Actor[@xmi.id]", nsManager)) { UmlActor actor = new UmlActor(); actor.Id = actorNode.Attributes["xmi.id"].Value; actor.Name = actorNode.Attributes["name"].Value; #region Tagged Values foreach (XmlNode taggedValuesNode in actorNode.SelectNodes("//UML:Actor[@xmi.id='" + actor.Id + "']//UML:ModelElement.taggedValue//UML:TaggedValue[@xmi.id]", nsManager)) { #region Hyperlink if (taggedValuesNode.Attributes["tag"].Value.Equals("jude.hyperlink")) { string aux_value = taggedValuesNode.Attributes["value"].Value.Substring(22); aux_value = aux_value.Substring(0, aux_value.Length - 23); actor.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, aux_value); foreach (XmlNode jude in node.SelectNodes("//JUDE:Diagram[@xmi.id='" + aux_value + "']//UML:ActivityGraph", nsManager)) { string idActivityGraph = jude.Attributes["xmi.idref"].Value; foreach (XmlNode item in node.SelectNodes("//UML:ActivityGraph[xmi.id='" + idActivityGraph + "']", nsManager)) { actor.SetTaggedValue("jude.hyperlink", item.Attributes["name"].Value); } } foreach (XmlNode item in node.SelectNodes("//JUDE:ActivityDiagram[@xmi.id='" + aux_value + "']//UML:ActivityGraph", nsManager)) { string idActivityGraph = item.Attributes["xmi.idref"].Value; foreach (XmlNode item1 in node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + idActivityGraph + "']", nsManager)) { actor.SetTaggedValue("jude.hyperlink", item1.Attributes["name"].Value); } } } #endregion else { try { //actor.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, HttpUtility.UrlDecode(taggedValuesNode.Attributes["value"].Value)); actor.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value.ToUpper(), taggedValuesNode.Attributes["value"].Value); } catch { actor.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value.ToUpper(), ""); } } } #endregion useCaseDiagram.UmlObjects.Add(actor); } #endregion #region UseCase foreach (XmlNode useCaseNode in node.SelectNodes("//UML:UseCase[@xmi.id]", nsManager)) { UmlUseCase useCase = new UmlUseCase(); useCase.Id = useCaseNode.Attributes["xmi.id"].Value; useCase.Name = useCaseNode.Attributes["name"].Value; #region Tagged Values foreach (XmlNode taggedValuesNode in node.SelectNodes("//UML:UseCase[@xmi.id='" + useCase.Id + "']//UML:ModelElement.taggedValue//UML:TaggedValue[@xmi.id]", nsManager)) { #region Hyperlink if (taggedValuesNode.Attributes["tag"].Value.Equals("jude.hyperlink")) { string aux_value = taggedValuesNode.Attributes["value"].Value.Substring(22); aux_value = aux_value.Substring(0, aux_value.Length - 23); foreach (XmlNode jude in node.SelectNodes("//JUDE:Diagram[@xmi.id='" + aux_value + "']//UML:ActivityGraph", nsManager)) { string idActivityGraph = jude.Attributes["xmi.idref"].Value; foreach (XmlNode item in node.SelectNodes("//UML:ActivityGraph[xmi.id='" + idActivityGraph + "']", nsManager)) { useCase.SetTaggedValue("jude.hyperlink", item.Attributes["name"].Value); } } foreach (XmlNode item in node.SelectNodes("//JUDE:ActivityDiagram[@xmi.id='" + aux_value + "']//UML:ActivityGraph", nsManager)) { string idActivityGraph = item.Attributes["xmi.idref"].Value; foreach (XmlNode item1 in node.SelectNodes("//UML:ActivityGraph[@xmi.id='" + idActivityGraph + "']", nsManager)) { useCase.SetTaggedValue("jude.hyperlink", item1.Attributes["name"].Value); } } } #endregion else { try { //useCase.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, HttpUtility.UrlDecode(taggedValuesNode.Attributes["value"].Value)); useCase.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value.ToUpper(), taggedValuesNode.Attributes["value"].Value); } catch { useCase.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value.ToUpper(), ""); } } } #endregion useCaseDiagram.UmlObjects.Add(useCase); } #endregion #region Association foreach (XmlNode associationNode in node.SelectNodes("//UML:Association[@xmi.id]", nsManager)) { UmlAssociation association = new UmlAssociation(); association.Id = associationNode.Attributes["xmi.id"].Value; association.Name = associationNode.Attributes["name"].Value; bool putEnd1 = false; foreach (XmlNode associationEndNode in associationNode.SelectNodes("//UML:Association[@xmi.id='" + association.Id + "']//UML:AssociationEnd//UML:AssociationEnd.participant//UML:Classifier[@xmi.idref]", nsManager)) { foreach (UmlElement element in useCaseDiagram.UmlObjects.OfType <UmlElement>()) { if (!putEnd1) { if (element.Id.Equals(associationEndNode.Attributes["xmi.idref"].Value)) { association.End1 = element; putEnd1 = true; } } else { if (element.Id.Equals(associationEndNode.Attributes["xmi.idref"].Value)) { association.End2 = element; } } } } #region Tagged Values foreach (XmlNode taggedValuesNode in node.SelectNodes("//UML:Association[@xmi.id='" + association.Id + "']//UML:ModelElement.taggedValue//UML:TaggedValue[@xmi.id]", nsManager)) { try { //association.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, HttpUtility.UrlDecode(taggedValuesNode.Attributes["value"].Value)); association.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, taggedValuesNode.Attributes["value"].Value); } catch { association.SetTaggedValue(taggedValuesNode.Attributes["tag"].Value, ""); } } #endregion useCaseDiagram.UmlObjects.Add(association); } #endregion #region Include foreach (XmlNode includeNode in node.SelectNodes("//UML:Include[@xmi.id]", nsManager)) { UmlAssociation association = new UmlAssociation(); association.Id = includeNode.Attributes["xmi.id"].Value; association.Name = includeNode.Attributes["name"].Value; association.Stereotypes.Add("Include"); XmlNode begin = includeNode.SelectSingleNode("//UML:Include[@xmi.id='" + association.Id + "']//UML:Include.base//UML:UseCase[@xmi.idref]", nsManager); XmlNode end = includeNode.SelectSingleNode("//UML:Include[@xmi.id='" + association.Id + "']//UML:Include.addition//UML:UseCase[@xmi.idref]", nsManager); foreach (UmlElement element in useCaseDiagram.UmlObjects.OfType <UmlElement>()) { if (element.Id.Equals(begin.Attributes["xmi.idref"].Value)) { association.End1 = element; } else if (element.Id.Equals(end.Attributes["xmi.idref"].Value)) { association.End2 = element; } } useCaseDiagram.UmlObjects.Add(association); } #endregion #region Extend foreach (XmlNode extendNode in node.SelectNodes("//UML:Extend[@xmi.id]", nsManager)) { UmlAssociation association = new UmlAssociation(); association.Id = extendNode.Attributes["xmi.id"].Value; association.Name = extendNode.Attributes["name"].Value; association.Stereotypes.Add("Extend"); XmlNode end = extendNode.SelectSingleNode("//UML:Extend[@xmi.id='" + association.Id + "']//UML:Extend.base//UML:UseCase[@xmi.idref]", nsManager); XmlNode begin = extendNode.SelectSingleNode("//UML:Extend[@xmi.id='" + association.Id + "']//UML:Extend.extension//UML:UseCase[@xmi.idref]", nsManager); foreach (UmlElement element in useCaseDiagram.UmlObjects.OfType <UmlElement>()) { if (element.Id.Equals(begin.Attributes["xmi.idref"].Value)) { association.End1 = element; } else if (element.Id.Equals(end.Attributes["xmi.idref"].Value)) { association.End2 = element; } } useCaseDiagram.UmlObjects.Add(association); } #endregion } } #endregion return(model); }
private TestCase FillTestCase(UmlModel model, UmlUseCase useCase, List <Transition> listTransition, TestCase testCase) { int index = 1; TestStep testStep; Boolean existsTag = false; Boolean added = false; testCase = new TestCase(HttpUtility.UrlDecode(useCase.Name)); testCase.Title += "_" + TestCase.contWorkItemId; //testCase.TestCaseId = TestCase.contWorkItemId; testCase.WorkItemId = TestCase.contWorkItemId; TestCase.contWorkItemId++; testStep = new TestStep(); existsTag = CheckTestStepTags(useCase, testStep, existsTag); //if TDpreConditions or TDpostConditions exists if (!String.IsNullOrEmpty(testStep.Description) || !String.IsNullOrEmpty(testStep.ExpectedResult)) { testStep.Title = useCase.Name; // testStep.workItemIdString = "Test Case " + testCase.WorkItemId; testStep.Index = index.ToString(); testStep.Description = "- " + testStep.Description.Replace(" | ", ";" + Environment.NewLine + "- "); testStep.Description = "Pre-Requirements" + Environment.NewLine + Environment.NewLine + testStep.Description; testCase.TestSteps.Add(testStep); added = true; index++; } UmlActivityDiagram actDiagram = model.Diagrams .OfType <UmlActivityDiagram> () .Where(y => y.Name == useCase.Name) .FirstOrDefault(); if (actDiagram != null) { List <UmlTransition> listUmlTransition = GetListUmlTransition(listTransition, model); usedFiles = new List <CsvParamFile> (); foreach (UmlTransition tran in listUmlTransition) { readFile = false; bool isCycle = false; bool lastCycleTrans = false; if (tran.GetTaggedValue("TDlastCycleTrans") != null) { lastCycleTrans = (tran.GetTaggedValue("TDcycleTran").Equals("true") ? true : false); //doAgain = false; } if (tran.GetTaggedValue("TDcycleTran") != null) { isCycle = true; } if (lastCycleTrans) { usedFiles = usedFiles.Distinct().ToList(); foreach (CsvParamFile csv in usedFiles) { csv.NextLine(); } usedFiles.Clear(); } //se existiam tags que não foram adicionadas anteriormente, não dá "new teststep" if (existsTag && !added) { testStep.Index = index.ToString(); testStep.Description = GenerateDescription(tran); testStep.ExpectedResult = GenerateExpectedResult(tran); testCase.TestSteps.Add(testStep); index++; existsTag = false; } else { if (isCycle) { testStep = new TestStep(); testStep.Index = index.ToString(); testStep.Description = GenerateDescription(tran); testStep.ExpectedResult = GenerateExpectedResult(tran); testCase.TestSteps.Add(testStep); index++; } else { testStep = new TestStep(); testStep.Index = index.ToString(); testStep.Description = GenerateDescription(tran); testStep.ExpectedResult = GenerateExpectedResult(tran); testCase.TestSteps.Add(testStep); index++; if (readFile) { doAgain = true; } } } } } else { testCase = null; } return(testCase); }
public TestSuit PopulateTestSuit(String[][] matriz, Plets.Modeling.FiniteStateMachine.FiniteStateMachine machine, GeneralUseStructure modelGeneralUseStructure) { UmlModel model = (UmlModel)modelGeneralUseStructure; foreach (UmlUseCaseDiagram ucDiagram in model.Diagrams.OfType <UmlUseCaseDiagram> ()) { UmlUseCase equivalentUC = ucDiagram.UmlObjects.OfType <UmlUseCase> ().Where(x => x.Name.Equals(machine.Name)).FirstOrDefault(); foreach (UmlActor actor in ucDiagram.UmlObjects.OfType <UmlActor> ()) { foreach (UmlAssociation association in ucDiagram.UmlObjects.OfType <UmlAssociation> ()) { if ((association.End1.Equals(actor) && association.End2.Equals(equivalentUC)) || (association.End1.Equals(equivalentUC) && association.End2.Equals(actor))) { try { actualTestCaseProb = float.Parse(association.GetTaggedValue("TDprob"), CultureInfo.InvariantCulture); } catch { actualTestCaseProb = 0; } if (suit.Scenarios.Count < 1) { scenario = new Scenario(); scenario.Name = actor.Name; AddScenarioInformation(actor); suit.Scenarios.Add(scenario); } foreach (Scenario scenarioAlreadyAdded in suit.Scenarios) { if (actor.Name.Equals(scenarioAlreadyAdded.Name)) { scenario = scenarioAlreadyAdded; } else { scenario = new Scenario(); scenario.Name = actor.Name; AddScenarioInformation(actor); suit.Scenarios.Add(scenario); } } } } } } for (int k = 0; k < matriz.Length; k++) { List <Transition> listTransition = new List <Transition> (); String[] arraySequence = matriz[k]; foreach (String input in arraySequence) { Transition tran = new Transition(); tran = GetTransitionFSM(input, machine); if (tran != null) { listTransition.Add(tran); } } scenario.TestCases.Add(FillTestCase(machine, listTransition)); } return(suit); }
private UmlModel FromXmi(XmlDocument doc, ref String name) { UmlModel model = null; XmlNodeList modelQuery = doc.SelectNodes("//Objects.UmlModel"); foreach (XmlNode modelNode in modelQuery) { model = new UmlModel(); model.Id = modelNode.Attributes["id"].Value; model.Name = modelNode.Attributes["name"].Value; name = model.Name; } #region UseCaseDiagram XmlNodeList ucDiagramQuery = doc.SelectNodes("//Diagrams.UmlUseCaseDiagram"); foreach (XmlNode ucDiagram in ucDiagramQuery) { UmlUseCaseDiagram umlUseCaseDiagram = new UmlUseCaseDiagram(); umlUseCaseDiagram.Name = ucDiagram.Attributes["name"].Value; umlUseCaseDiagram.Id = ucDiagram.Attributes["id"].Value; #region Actor foreach (XmlNode actorNode in ucDiagram.SelectNodes("//Diagrams.UmlUseCaseDiagram[@id='" + umlUseCaseDiagram.Id + "']//Objects.UmlActor")) { UmlActor element = new UmlActor(); element.Id = actorNode.Attributes["id"].Value; element.Name = actorNode.Attributes["name"].Value; foreach (XmlNode tag in ucDiagram.SelectNodes("//Diagrams.UmlUseCaseDiagram[@id='" + umlUseCaseDiagram.Id + "']//Objects.UmlActor[@id='" + element.Id + "']//TAG")) { String key = tag.Attributes["tagName"].Value.ToUpper(); String value = tag.Attributes["tagValue"].Value; element.SetTaggedValue(key, value); } umlUseCaseDiagram.UmlObjects.Add(element); } #endregion #region UseCase foreach (XmlNode ucNode in ucDiagram.SelectNodes("//Diagrams.UmlUseCaseDiagram[@id='" + umlUseCaseDiagram.Id + "']//Objects.UmlUseCase")) { UmlUseCase element = new UmlUseCase(); element.Id = ucNode.Attributes["id"].Value; element.Name = ucNode.Attributes["name"].Value; umlUseCaseDiagram.UmlObjects.Add(element); } #endregion #region Association foreach (XmlNode associationNode in ucDiagram.SelectNodes("//Diagrams.UmlUseCaseDiagram[@id='" + umlUseCaseDiagram.Id + "']//Objects.UmlAssociation")) { UmlAssociation element = new UmlAssociation(); element.Id = associationNode.Attributes["id"].Value; UmlElement end1 = SearchUseCaseDiagramElement(associationNode.Attributes["end1Id"].Value, umlUseCaseDiagram); UmlElement end2 = SearchUseCaseDiagramElement(associationNode.Attributes["end2Id"].Value, umlUseCaseDiagram); element.End1 = end1; element.End2 = end2; umlUseCaseDiagram.UmlObjects.Add(element); } #endregion model.AddDiagram(umlUseCaseDiagram); } #endregion #region ActivityDiagram XmlNodeList actDiagramQuery = doc.SelectNodes("//Diagrams.UmlActivityDiagram"); foreach (XmlNode actDiagram in actDiagramQuery) { UmlActivityDiagram umlActivityDiagram = new UmlActivityDiagram(actDiagram.Attributes["name"].Value); umlActivityDiagram.Id = actDiagram.Attributes["id"].Value; #region State Initial foreach (XmlNode initialNode in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlInitialState")) { UmlInitialState element = new UmlInitialState(); element.Id = initialNode.Attributes["id"].Value; element.Name = initialNode.Attributes["name"].Value; umlActivityDiagram.UmlObjects.Add(element); } #endregion #region Action State foreach (XmlNode actionStateNode in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlActionState")) { UmlActionState element = new UmlActionState(); element.Id = actionStateNode.Attributes["id"].Value; element.Name = actionStateNode.Attributes["name"].Value; umlActivityDiagram.UmlObjects.Add(element); } #endregion #region State Final foreach (XmlNode finalNode in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlFinalState")) { UmlFinalState element = new UmlFinalState(); element.Id = finalNode.Attributes["id"].Value; element.Name = finalNode.Attributes["name"].Value; umlActivityDiagram.UmlObjects.Add(element); } #endregion #region Fork foreach (XmlNode forkNode in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlFork")) { UmlFork element = new UmlFork(); element.Id = forkNode.Attributes["id"].Value; element.Name = forkNode.Attributes["name"].Value; umlActivityDiagram.UmlObjects.Add(element); } #endregion #region Join foreach (XmlNode joinNode in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlJoin")) { UmlJoin element = new UmlJoin(); element.Id = joinNode.Attributes["id"].Value; element.Name = joinNode.Attributes["name"].Value; umlActivityDiagram.UmlObjects.Add(element); } #endregion #region Decision foreach (XmlNode decisionNode in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlDecision")) { UmlDecision element = new UmlDecision(); element.Id = decisionNode.Attributes["id"].Value; element.Name = decisionNode.Attributes["name"].Value; umlActivityDiagram.UmlObjects.Add(element); } #endregion #region Transition foreach (XmlNode transitionNode in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlTransition")) { UmlTransition element = new UmlTransition(); UmlActionState actSource = SearchActivityDiagramElement(transitionNode.Attributes["stateSourceId"].Value, umlActivityDiagram); UmlActionState actTarget = SearchActivityDiagramElement(transitionNode.Attributes["stateTargetId"].Value, umlActivityDiagram); element.Id = transitionNode.Attributes["id"].Value; element.Source = actSource; element.Target = actTarget; //Get TAG foreach (XmlNode tag in actDiagram.SelectNodes("//Diagrams.UmlActivityDiagram[@id='" + umlActivityDiagram.Id + "']//Objects.UmlTransition[@id='" + element.Id + "']//TAG")) { String key = tag.Attributes["tagName"].Value.ToUpper(); String value = tag.Attributes["tagValue"].Value; element.SetTaggedValue(key, value); } umlActivityDiagram.UmlObjects.Add(element); } #endregion model.AddDiagram(umlActivityDiagram); } #endregion return(model); }
private void PopulateTestCase(String[][] matriz, FiniteStateMachine machine, UmlModel model, TestPlan testPlan, UmlUseCase useCase) { for (int k = 0; k < matriz.Length; k++) { testPlan.Name = useCase.Name; Transition t = new Transition(); List <Transition> listTransition = new List <Transition> (); String[] arraySequence = matriz[k]; int maxUseCaseLines = int.MaxValue; foreach (String input in arraySequence) { t = GetTransition(input, t.TargetState, machine); if (t != null) { listTransition.Add(t); UmlTransition tran = GetUmlTransition(model, t); foreach (KeyValuePair <String, String> pair in tran.TaggedValues) { int aux = GetUsedFilesLineCount(pair.Value); if (maxUseCaseLines > aux) { maxUseCaseLines = aux; } } } } TestCase testCase = null; if (maxUseCaseLines == int.MaxValue) { ResetParamFilesPointers(); } else { ResetParamFilesPointers(maxUseCaseLines); } do { testCase = FillTestCase(model, useCase, listTransition, testCase); if (testCase != null) { testPlan.TestCases.Add(testCase); } currLine++; } while (doAgain && (currLine < maxLine)); } }
private Boolean CheckTestStepTags(UmlUseCase useCase, TestStep testStep, Boolean existsTag) { foreach (KeyValuePair <String, String> pair in useCase.TaggedValues) { switch (pair.Key) { //case "TDSTATE": // testStep.TDstate = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDASSIGNED": // testStep.TDassigned = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDREASON": // testStep.TDreason = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDITERATIONPATH": // testStep.TDiterationPath = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDAREAPATH": // testStep.TDareaPath = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDAPPLICATION": // testStep.TDapplication = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDCOMPLEXITY": // testStep.TDcomplexity = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDRISKS": // testStep.TDrisks = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDTCLIFECYCLE": // testStep.TDtcLifecycle = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDLIFECYCLETYPE": // testStep.TDlifecycleType = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDTCTEAMUSAGE": // testStep.TDtcTeamUsage = HttpUtility.UrlDecode(pair.Value); // existsTag = true; // break; //case "TDPOSTCONDITIONS": // testStep.ExpectedResult = HttpUtility.UrlDecode(pair.Value); // break; //case "TDPRECONDITIONS": // testStep.Description += HttpUtility.UrlDecode(pair.Value); // break; //default: // break; } } return(existsTag); }
private IEnumerable <UmlUseCase> GetUmlUseCase(XmlDocument xmiMetaModel) { var useCases = new List <UmlUseCase>(); var elemList = xmiMetaModel.GetElementsByTagName("packagedElement").Cast <XmlNode>() .Where(e => e.Attributes["xmi:type"].Value == "uml:UseCase"); foreach (var elem in elemList) { var useCase = new UmlUseCase { Id = Guid.NewGuid().ToString(), UmlElementId = elem.Attributes["id", _xmiNamespace].Value, Name = elem.Attributes["name"].Value }; if (elem.HasChildNodes) { useCase.Associations = new List <UmlAssociation>(); foreach (var nodeChild in elem.ChildNodes.Cast <XmlNode>().Where(e => e.Attributes["xmi:type"].Value == "uml:Include")) { var association = new UmlAssociation { Id = Guid.NewGuid().ToString(), UmlUseCaseId = useCase.Id, Type = AssociationType.Include, UmlElementId = nodeChild.Attributes["id", _xmiNamespace].Value, Source = useCase.UmlElementId, Destiny = nodeChild.Attributes["addition"].Value }; useCase.Associations.Add(association); } foreach (var nodeChild in elem.ChildNodes.Cast <XmlNode>().Where(e => e.Attributes["xmi:type"].Value == "uml:Extend")) { var association = new UmlAssociation { Id = Guid.NewGuid().ToString(), UmlUseCaseId = useCase.Id, Type = AssociationType.Extend, UmlElementId = nodeChild.Attributes["id", _xmiNamespace].Value, Source = useCase.UmlElementId, Destiny = $"{nodeChild.Attributes["extendedCase"].Value}{nodeChild.Attributes["extensionLocation"].Value}" }; useCase.Associations.Add(association); } foreach (var nodeChild in elem.ChildNodes.Cast <XmlNode>().Where(e => e.Attributes["xmi:type"].Value == "uml:ExtensionPoint")) { var association = new UmlAssociation { Id = Guid.NewGuid().ToString(), UmlUseCaseId = useCase.Id, Type = AssociationType.ExtensionPoint, UmlElementId = nodeChild.Attributes["id", _xmiNamespace].Value, Source = useCase.UmlElementId }; useCase.Associations.Add(association); } } useCases.Add(useCase); } return(useCases); }
public static TestPlan PopulateTP(UmlUseCaseDiagram UseCaseDiagram, Dictionary <String, UmlActionStateDiagram> dicActionDiagram) { int index = 2; TestPlan testPlan = new TestPlan(); foreach (String keyUC in UseCaseDiagram.useCases.Keys) { UmlUseCase useCase = UseCaseDiagram.useCases[keyUC]; if (useCase.includeList.Count == 0) { TestCase testCase = new TestCase(HttpUtility.UrlDecode(useCase.Name)); testCase.Title += "_" + TestCase.contWorkItemId; testCase.WorkItemId = TestCase.contWorkItemId; TestCase.contWorkItemId++; TestStep testStep = new TestStep(); testStep.FTstate = HttpUtility.UrlDecode(useCase.FTstate); testStep.FTassigned = HttpUtility.UrlDecode(useCase.FTassigned); testStep.FTreason = HttpUtility.UrlDecode(useCase.FTreason); testStep.FTiterationPath = HttpUtility.UrlDecode(useCase.FTiterationPath); testStep.FTareaPath = HttpUtility.UrlDecode(useCase.FTareaPath); testStep.FTapplication = HttpUtility.UrlDecode(useCase.FTapplication); testStep.FTcomplexity = HttpUtility.UrlDecode(useCase.FTcomplexity); testStep.FTrisks = HttpUtility.UrlDecode(useCase.FTrisks); testStep.FTtcLifecycle = HttpUtility.UrlDecode(useCase.FTtcLifecycle); testStep.FTlifecycleType = HttpUtility.UrlDecode(useCase.FTlifecycleType); testStep.FTtcTeamUsage = HttpUtility.UrlDecode(useCase.FTtcTeamUsage); testStep.Title = useCase.Name; testStep.workItemIdString = "Test Case " + testCase.WorkItemId; testStep.Index += index; testStep.Description = ""; testStep.ExpectedResult = HttpUtility.UrlDecode(useCase.posCondition); foreach (String tagKey in useCase.dictionaryTag.Keys) { testStep.Description += useCase.dictionaryTag[tagKey].value; } if (testStep.Description != null) { testStep.Description = HttpUtility.UrlDecode(testStep.Description).Replace("|", Environment.NewLine + "-"); } if (testStep.Description.Contains("[")) { testStep.Description = testStep.Description.Replace("[", Environment.NewLine + "[-"); testStep.Description = testStep.Description.Replace("[", "[/"); testStep.Description = testStep.Description.Replace("]", "/]"); String[] list = testStep.Description.Split(new char[] { '[', ']' }); for (int i = 0; i < list.Count() - 1; i++) { if (list[i].ToArray()[0] == '/') { list[i] = list[i].Replace("/", ""); list[i] = list[i].Replace("-", " -"); } } testStep.Description = String.Join("", list); } if (testStep.Description != "") { testStep.Description = "Pre-Requirements" + Environment.NewLine + Environment.NewLine + testStep.Description; } testCase.TestSteps.Add(testStep); foreach (var item in useCase.dicTagHyperLinkUseCase.Keys) { UmlActionStateDiagram actionDiagram = useCase.dicTagHyperLinkUseCase[item]; String idInicio = actionDiagram.InitialActivity.outgoing; UmlTransition t = actionDiagram.buscaTransition(idInicio, dicActionDiagram); testStep.Title = actionDiagram.Name; int subIndex = 0; populateActionDiagram("", testStep, "", t, actionDiagram, dicActionDiagram, testCase, index, subIndex, false); } if (testCase.TestSteps.Count > 1) { testCase.TestCaseId = TestCase.contTestCaseId++; testPlan.TestCases.Add(testCase); } } } PopulateTestPlan.ExpectedResultValidation(testPlan); return(testPlan); }