public IUndoableEdit UnMergeCombinations(EquivalenceClass selectedEquivalenceClass) { if (combination.Origin != CombinationOrigin.PERMUTATION) { throw new InvalidOperationException("The Unmerge is available only for combinations generated by permutation"); } if (!combination.GetChildrenCombinationEquivalenceClasses().Contains(selectedEquivalenceClass)) { throw new ArgumentException("The combination does not contain any child combination containing this equivalence class"); } if (combination.EquivalenceClasses.Contains(selectedEquivalenceClass)) { throw new ArgumentException("The combination contains this equivalence class and cannot be separated"); } CompoundEdit ce = new CompoundEdit(); //1-get all the combinations involved ISet <Combination> allCombinations = new HashedSet <Combination>(combination.Combinations); allCombinations.Add(combination); //2-get all the combinations involved that directly contains the equivalence class ISet <Combination> eqCombinations = new HashedSet <Combination>(); foreach (Combination eqCombination in allCombinations) { if (eqCombination.EquivalenceClasses.Contains(selectedEquivalenceClass)) { eqCombinations.Add(eqCombination); } } //3 remove any hierarchy foreach (Combination allCombination in allCombinations) { if (allCombination.ParentCombination != null) { ce.AddEdit( EditFactory.instance.CreateRemoveCombinationEdit(allCombination.ParentCombination, allCombination)); allCombination.ParentCombination.RemoveCombination(allCombination); } } //4 - merge the combinations that don't contain the equivalence class using the original root combination if (allCombinations.Minus(eqCombinations).Count > 0) { ce.AddEdit(MergeCombinations(new List <Combination>(allCombinations.Minus(eqCombinations)))); } //5- merge the combinations that contains the equivalence class using the first combination in the set if (eqCombinations.Count > 1) { CombinationManager cm = new CombinationManager(FindRootCombination(eqCombinations)); ce.AddEdit(cm.MergeCombinations(new List <Combination>(eqCombinations))); } return(ce); }
public IUndoableEdit DeleteAllCombinations() { CompoundEdit ce = new CompoundEdit(); List <Combination> combis = new List <Combination>(dependency.Combinations); foreach (Combination combination in combis) { CombinationManager man = new CombinationManager(combination); ce.AddEdit(man.DeleteCombination(dependency.ParentStructure)); } return(ce); }
private static IUndoableEdit PropagateStateChangeInCombination(Combination target, EquivalenceClass parentEquivalenceClass) { CompoundEdit ce = new CompoundEdit(); if (target.ParentDependency != null) { ce.AddEdit(EditFactory.instance.CreateRemoveEquivalenceClassEdit(target.ParentDependency, parentEquivalenceClass)); target.ParentDependency.RemoveEquivalenceClass(parentEquivalenceClass); CombinationManager cman = new CombinationManager(target); ce.AddEdit(cman.DeleteCombination(target.ParentDependency.ParentStructure)); } return(ce); }
private static Combination FindRootCombination(IEnumerable <Combination> combinations) { HashedSet <EquivalenceClass> equivalenceClasses = new HashedSet <EquivalenceClass>(); foreach (Combination combination in combinations) { equivalenceClasses.AddAll(combination.GetAllEquivalenceClasses()); } foreach (Combination combination1 in combinations) { CombinationManager cm = new CombinationManager(combination1); foreach (EquivalenceClass equivalenceClass in equivalenceClasses) { if (cm.FindMergeableCombinations(equivalenceClass).Count > 0) { return(combination1); } } } return(null); }
public IUndoableEdit DeleteCombinationPolicy(Combination combination, TestCasesStructure structure) { CombinationManager cm = new CombinationManager(combination); return(cm.DeleteCombination(structure)); }
public IUndoableEdit UnMergeCombinations(Combination combination, EquivalenceClass equivalenceClass) { CombinationManager cm = new CombinationManager(combination); return(cm.UnMergeCombinations(equivalenceClass)); }
public IList <Combination> FindCombinationsToMerge(Combination combination, EquivalenceClass equivalenceClass) { CombinationManager cm = new CombinationManager(combination); return(cm.FindMergeableCombinations(equivalenceClass)); }
public IUndoableEdit MergeCombination(Combination combination, IList <Combination> combinationsToMerge) { CombinationManager cm = new CombinationManager(combination); return(cm.MergeCombinations(combinationsToMerge)); }