Esempio n. 1
0
        private List<KspPartObject> FindRemovedAndDependentParts (KspCraftObject craft, RegexFilter filter)
        {
            ui.DisplayUserMessage ($"Entering craft '{craft.Name}'...");

            var partLookup = new PartLookup (craft);

            var removedParts = partLookup.LookupParts (filter).ToList ();

            ui.DisplayUserMessage ($"Found {removedParts.Count} parts to be removed");

            var dependentParts = new HashSet<KspPartObject> ();

            Parallel.ForEach (removedParts, removedPart => {
                foreach (var part in partLookup.LookupHardDependencies (removedPart).Except (removedParts)) {
                    lock (dependentParts) {
                        dependentParts.Add (part);
                    }
                }
            });

            ui.DisplayUserMessage ($"Found {dependentParts.Count} dependent parts");

            return removedParts.Concat (dependentParts).ToList ();
        }
        public void CanLookupHardDependenciesOnAGivenPart ()
        {
            // given
            var craft = createTestCraft ();
            var parts = craft.Children<KspPartObject> ().ToArray ();

            var dependency = parts [2];
            var expectedDependencies = new[] {
                parts [1], // parent is [2]
                parts [5], // sym to [1]
                // parts [8] links do not not matter for hard-dependency check
            };

            var target = new PartLookup (craft);

            // when
            var actualDependencies = target.LookupHardDependencies (dependency);

            // then
            Assert.That (actualDependencies, Is.EqualTo (expectedDependencies));
        }