private bool RemoveMatchingParts (KspCraftObject craft, RegexFilter partFilter) { var toBeRemoved = FindRemovedAndDependentParts (craft, partFilter); if (toBeRemoved.Count <= 0) { return false; } ui.DisplayUserList ("Removed Parts", toBeRemoved.Select (part => ProgramUI.PartObjectToString (craft, part))); var removeConfirmed = ui.AskYesNoQuestion ("Remove the listed parts?"); if (removeConfirmed) { craft.Edit ().RemoveParts (toBeRemoved); ui.DisplayUserMessage ($"{toBeRemoved.Count} parts removed"); } return removeConfirmed; }
public void RemovesPartsAndCorrespondingLinks () { // given var craft = new KspCraftObject () .AddChild (new KspPartObject ().AddProperty (new KspStringProperty ("name", "part1"))) .AddChild (new KspPartObject ().AddProperty (new KspStringProperty ("name", "part2"))) .AddChild (new KspPartObject ().AddProperty (new KspStringProperty ("name", "part3"))) .AddChild (new KspPartObject ().AddProperty (new KspStringProperty ("name", "part4"))) as KspCraftObject; var parts = craft.Children<KspPartObject> ().ToArray (); parts [0] .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Link, "", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Link, "", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Link, "", parts [3])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Parent, "", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Parent, "", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Parent, "", parts [3])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Sym, "top", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Sym, "bottom", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Sym, "left", parts [3])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.SrfN, "srfAttach", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.SrfN, "srfAttach", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.SrfN, "srfAttach", parts [3])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.AttN, "left", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.AttN, "bottom", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.AttN, "top", parts [3])); parts [3] .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Link, "", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Link, "", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Link, "", parts [0])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Parent, "", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Parent, "", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Parent, "", parts [0])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Sym, "top", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Sym, "bottom", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.Sym, "left", parts [0])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.SrfN, "srfAttach", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.SrfN, "srfAttach", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.SrfN, "srfAttach", parts [0])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.AttN, "left", parts [1])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.AttN, "bottom", parts [2])) .AddProperty (new KspPartLinkProperty (KspPartLinkProperty.Types.AttN, "top", parts [0])); var partsToRemove = new[] { parts [1], parts [2] }; var expectedRemainingParts = new[] { parts [0], parts [3] }; var expectedPropertiesPart1 = new KspProperty[] { parts [0].Properties [0], parts [0].Properties [3], parts [0].Properties [6], parts [0].Properties [9], parts [0].Properties [12], parts [0].Properties [15] }; var expectedPropertiesPart2 = new KspProperty[] { parts [3].Properties [0], parts [3].Properties [3], parts [3].Properties [6], parts [3].Properties [9], parts [3].Properties [12], parts [3].Properties [15] }; // when craft.Edit ().RemoveParts (partsToRemove); var remainingParts = craft.Children<KspPartObject> ().ToArray (); // then Assert.That (remainingParts, Is.EqualTo (expectedRemainingParts)); Assert.That (remainingParts [0].Properties, Is.EqualTo (expectedPropertiesPart1)); Assert.That (remainingParts [1].Properties, Is.EqualTo (expectedPropertiesPart2)); }