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; }
public CoveringTestsSelectStrategy(Task <List <CciModuleSource> > assembliesTask, ICodePartsMatcher matcher, Task <TestsRootNode> testsTask) { _assembliesTask = assembliesTask; _matcher = matcher; _testsTask = testsTask; }
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; }
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; }
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); }
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); }
public CoveringTestsVisitor(ICodePartsMatcher constraints) { _foundTests = new HashSet<MethodIdentifier>(); _searcher = constraints; }
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); }
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())); }
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)); }
public CoveringTestsVisitor(ICodePartsMatcher constraints) { _foundTests = new HashSet <MethodIdentifier>(); _searcher = constraints; }
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))); }
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()); }