Пример #1
0
        private List <MethodIdentifier> FindCoveringTests(CciModuleSource module, ICodePartsMatcher targetsMatcher)
        {
            _log.Debug("Scanning " + module.Module.Name + " for selected covering tests. ");
            var visitor = new CoveringTestsVisitor(targetsMatcher);

            var traverser = new CodeTraverser
            {
                PreorderVisitor = visitor
            };

            traverser.Traverse(module.Decompile(module.Module));
            _log.Debug("Finished scanning module" + module.Module.Name + ". Found " + visitor.FoundTests.Count +
                       ". Scanned total: " + visitor.ScannedMethods + " methods and " +
                       visitor.ScannedMethodCalls + " method calls.");

            _log.Debug("Listing found tests: ");
            foreach (var methodIdentifier in visitor.FoundTests)
            {
                _log.Debug("Test: " + methodIdentifier);
            }

            if (visitor.IsChoiceError)
            {
                throw new TestWasSelectedToMutateException();
            }
            return(visitor.FoundTests.ToList());
        }
        private List<MethodIdentifier> FindCoveringTests(CciModuleSource module, ICodePartsMatcher targetsMatcher)
        {
            _log.Debug("Scanning " + module.Module.Name + " for selected covering tests. ");
            var visitor = new CoveringTestsVisitor(targetsMatcher);

            var traverser = new CodeTraverser
            {
                PreorderVisitor = visitor
            };
            
            traverser.Traverse(module.Decompile(module.Module));
            _log.Debug("Finished scanning module"+ module.Module.Name + ". Found " + visitor.FoundTests.Count+
                ". Scanned total: " + visitor.ScannedMethods + " methods and "+
                visitor.ScannedMethodCalls+" method calls.");

            _log.Debug("Listing found tests: ");
            foreach (var methodIdentifier in visitor.FoundTests)
            {
                _log.Debug("Test: "+ methodIdentifier);
            }

            if (visitor.IsChoiceError)
            {
                throw new TestWasSelectedToMutateException();
            }
            return visitor.FoundTests.ToList();
        } 
 public CoveringTestsSelectStrategy(Task<List<CciModuleSource>> assembliesTask,
     ICodePartsMatcher matcher, Task<TestsRootNode> testsTask)
 {
     _assembliesTask = assembliesTask;
     _matcher = matcher;
     _testsTask = testsTask;
 }
Пример #4
0
 public CoveringTestsSelectStrategy(Task <List <CciModuleSource> > assembliesTask,
                                    ICodePartsMatcher matcher, Task <TestsRootNode> testsTask)
 {
     _assembliesTask = assembliesTask;
     _matcher        = matcher;
     _testsTask      = testsTask;
 }
Пример #5
0
        public IList<AssemblyNode> CreateNodesFromAssemblies(List<CciModuleSource> modules, ICodePartsMatcher constraints)
        {
            var matcher = constraints.Join(new ProperlyNamedMatcher());

            List<AssemblyNode> assemblyNodes = modules.Select(m => CreateAssemblyNode(m.Module, matcher)).ToList();
            var root = new RootNode();
            root.Children.AddRange(assemblyNodes);
            root.IsIncluded = true;

            return assemblyNodes;
        }
Пример #6
0
        public AssemblyNode CreateAssemblyNode(IModuleInfo module,
                                               ICodePartsMatcher matcher)
        {
            var assemblyNode = new AssemblyNode(module.Name);

            assemblyNode.AssemblyPath = module.Module.Location.ToFilePathAbs();
            System.Action <CheckedNode, ICollection <INamedTypeDefinition> > typeNodeCreator = (parent, leafTypes) =>
            {
                foreach (INamedTypeDefinition typeDefinition in leafTypes)
                {
                    // _log.Debug("For types: matching: ");
                    if (matcher.Matches(typeDefinition))
                    {
                        var type = new TypeNode(parent, typeDefinition.Name.Value);
                        foreach (var method in typeDefinition.Methods)
                        {
                            if (matcher.Matches(method))
                            {
                                type.Children.Add(new MethodNode(type, method.Name.Value, method, false));
                            }
                        }
                        parent.Children.Add(type);
                    }
                }
            };
            Func <INamedTypeDefinition, string> namespaceExtractor = typeDef =>
                                                                     TypeHelper.GetDefiningNamespace(typeDef).Name.Value;


            NamespaceGrouper <INamespaceTypeDefinition, CheckedNode> .
            GroupTypes(assemblyNode,
                       namespaceExtractor,
                       (parent, name) => new TypeNamespaceNode(parent, name),
                       typeNodeCreator,
                       module.Module.GetAllTypes().ToList());


            //remove empty amespaces.
            //TODO to refactor...
            List <TypeNamespaceNode> checkedNodes = assemblyNode.Children.OfType <TypeNamespaceNode>().ToList();

            foreach (TypeNamespaceNode node in checkedNodes)
            {
                RemoveFromParentIfEmpty(node);
            }
            return(assemblyNode);
        }
        public AssemblyNode CreateAssemblyNode(IModuleInfo module, 
            ICodePartsMatcher matcher)
        {
            var assemblyNode = new AssemblyNode(module.Name);
            assemblyNode.AssemblyPath = module.Module.Location.ToFilePathAbs();
            System.Action<CheckedNode, ICollection<INamedTypeDefinition>> typeNodeCreator = (parent, leafTypes) =>
            {
                foreach (INamedTypeDefinition typeDefinition in leafTypes)
                {
                   // _log.Debug("For types: matching: ");
                    if (matcher.Matches(typeDefinition))
                    {
                        var type = new TypeNode(parent, typeDefinition.Name.Value);
                        foreach (var method in typeDefinition.Methods)
                        {
                            if (matcher.Matches(method))
                            {
                                type.Children.Add(new MethodNode(type, method.Name.Value, method, false));
                            }
                        }
                        parent.Children.Add(type);
                    }
                }
            };
            Func<INamedTypeDefinition, string> namespaceExtractor = typeDef =>
                TypeHelper.GetDefiningNamespace(typeDef).Name.Value;


            NamespaceGrouper<INamespaceTypeDefinition, CheckedNode>.
                GroupTypes(assemblyNode,
                    namespaceExtractor,
                    (parent, name) => new TypeNamespaceNode(parent, name),
                    typeNodeCreator,
                        module.Module.GetAllTypes().ToList());


            //remove empty amespaces. 
            //TODO to refactor...
            List<TypeNamespaceNode> checkedNodes = assemblyNode.Children.OfType<TypeNamespaceNode>().ToList();
            foreach (TypeNamespaceNode node in checkedNodes)
            {
                RemoveFromParentIfEmpty(node);
            }
            return assemblyNode;
        }
Пример #8
0
        public async Task<List<AssemblyNode>> BuildAssemblyTree(Task<List<CciModuleSource>> assembliesTask,
            bool constrainedMutation, ICodePartsMatcher matcher)
        {
            var modules = await assembliesTask;
            var assemblies = _typesManager.CreateNodesFromAssemblies(modules, matcher)
                .Where(a => a.Children.Count > 0).ToList();

            if (constrainedMutation)
            {
                var root = new CheckedNode("");
                root.Children.AddRange(assemblies);
                TreeUtils.ExpandLoneNodes(root);
            }
            if(assemblies.Count == 0)
            {
                throw new InvalidOperationException(UserMessages.ErrorNoFilesToMutate());
            }
            //  _reporting.LogError(UserMessages.ErrorNoFilesToMutate());
            return assemblies;
            //Events.OnNext(assemblies);
        }
Пример #9
0
        public async Task <List <AssemblyNode> > BuildAssemblyTree(Task <List <CciModuleSource> > assembliesTask,
                                                                   bool constrainedMutation, ICodePartsMatcher matcher)
        {
            var modules    = await assembliesTask;
            var assemblies = _typesManager.CreateNodesFromAssemblies(modules, matcher)
                             .Where(a => a.Children.Count > 0).ToList();

            if (constrainedMutation)
            {
                var root = new CheckedNode("");
                root.Children.AddRange(assemblies);
                TreeUtils.ExpandLoneNodes(root);
            }
            if (assemblies.Count == 0)
            {
                throw new InvalidOperationException(UserMessages.ErrorNoFilesToMutate());
            }
            //  _reporting.LogError(UserMessages.ErrorNoFilesToMutate());
            return(assemblies);
            //Events.OnNext(assemblies);
        }
Пример #10
0
 public CoveringTestsVisitor(ICodePartsMatcher constraints)
 {
     _foundTests = new HashSet<MethodIdentifier>();
     _searcher = constraints;
 }
Пример #11
0
        public IList <AssemblyNode> CreateNodesFromAssemblies(List <CciModuleSource> modules, ICodePartsMatcher constraints)
        {
            var matcher = constraints.Join(new ProperlyNamedMatcher());

            List <AssemblyNode> assemblyNodes = modules.Select(m => CreateAssemblyNode(m.Module, matcher)).ToList();
            var root = new RootNode();

            root.Children.AddRange(assemblyNodes);
            root.IsIncluded = true;
            // root.Children[1].IsIncluded = false; //experiment toDel

            return(assemblyNodes);
        }
Пример #12
0
        public Task <List <MethodIdentifier> > FindCoveringTests(List <CciModuleSource> modules, ICodePartsMatcher matcher)
        {
            var tt = modules.Select(module => Task.Run(() => FindCoveringTests(module, matcher)));

            return(Task.WhenAll(tt)
                   .ContinueWith(t => t.Result.Flatten().ToList()));
        }
Пример #13
0
 public static ICodePartsMatcher Join(this ICodePartsMatcher matcher, ICodePartsMatcher matcher2)
     {
         return new DelegatingMatcher(
             reff => matcher.Matches(reff) && matcher2.Matches(reff),
             reff => matcher.Matches(reff) && matcher2.Matches(reff));
     }
Пример #14
0
 public CoveringTestsVisitor(ICodePartsMatcher constraints)
 {
     _foundTests = new HashSet <MethodIdentifier>();
     _searcher   = constraints;
 }
Пример #15
0
 public static ICodePartsMatcher Join(this ICodePartsMatcher matcher, ICodePartsMatcher matcher2)
 {
     return(new DelegatingMatcher(
                reff => matcher.Matches(reff) && matcher2.Matches(reff),
                reff => matcher.Matches(reff) && matcher2.Matches(reff)));
 }
Пример #16
0
 public Task<List<MethodIdentifier>> FindCoveringTests(List<CciModuleSource> modules, ICodePartsMatcher matcher)
 {
     var tt = modules.Select(module => Task.Run(() => FindCoveringTests(module, matcher)));
     return Task.WhenAll(tt)
                 .ContinueWith(t => t.Result.Flatten().ToList());
 }