Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #4
0
        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));
        }