public void ShouldFindTypeByIdentifier() { var searcher = new CciMethodMatcher(_context); var types = _module.GetAllTypes(); INamedTypeDefinition method = types.SingleOrDefault(searcher.Matches); Assert.IsNotNull(method); }
public void ShouldFindMethodByIdentifier() { var searcher = new CciMethodMatcher(_context); var methods = _module.GetAllTypes().SelectMany(t => t.Methods).ToList(); var methodsMatch = methods.Where(searcher.Matches).ToList(); Assert.IsNotNull(methodsMatch.Single()); }
public void ShouldFindMethodByIdentifier() { var searcher = new CciMethodMatcher(_context); var methods = _module.GetAllTypes().SelectMany(t => t.Methods).ToList(); IMethodDefinition method = methods.SingleOrDefault(searcher.Matches); Assert.IsNotNull(method); }
public IList <AssemblyNode> CreateNodesFromAssemblies(IModuleSource modules, CciMethodMatcher constraints) { List <AssemblyNode> assemblyNodes = modules.Modules.Select(m => CreateAssemblyNode(m, constraints)).ToList(); var root = new RootNode(); root.Children.AddRange(assemblyNodes); root.IsIncluded = true; return(assemblyNodes); }
public IList<AssemblyNode> CreateNodesFromAssemblies(IModuleSource modules, CciMethodMatcher constraints) { List<AssemblyNode> assemblyNodes = modules.Modules.Select(m => CreateAssemblyNode(m, constraints)).ToList(); var root = new RootNode(); root.Children.AddRange(assemblyNodes); root.IsIncluded = true; return assemblyNodes; }
public override void Visit(IMethodCall methodCall) { base.Visit(methodCall); ScannedMethodCalls++; if (_currentTestMethod != null) { if (_searcher.Matches(methodCall.MethodToCall)) { _log.Debug("Adding test" + _currentTestMethod + " invoking method " + methodCall.MethodToCall); _foundTests.Add(CciMethodMatcher.CreateIdentifier(_currentTestMethod)); } } }
public AssemblyNode CreateAssemblyNode(IModuleInfo module, CciMethodMatcher methodMatcher) { var matcher = methodMatcher.Join(new SolutionTypesManager.ProperlyNamedMatcher()); 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) { 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)); return; } } 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, CciMethodMatcher methodMatcher) { var matcher = methodMatcher.Join(new SolutionTypesManager.ProperlyNamedMatcher()); 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) { 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)); return; } } 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<CciModuleSource> assembliesTask, bool constrainedMutation, CciMethodMatcher matcher) { var modules = await assembliesTask; var assemblies = CreateNodesFromAssemblies(modules, matcher) .Where(a => a.Children.Count > 0).ToList(); var root = new CheckedNode(""); root.Children.AddRange(assemblies); ExpandLoneNodes(root); if (assemblies.Count == 0) { throw new InvalidOperationException(UserMessages.ErrorNoFilesToMutate()); } // _reporting.LogError(UserMessages.ErrorNoFilesToMutate()); return assemblies; //Events.OnNext(assemblies); }
public async Task <MutationSessionChoices> Run(MethodIdentifier singleMethodToMutate = null, List <string> testAssemblies = null, bool auto = false) { _sessionCreationWindowShowTime = DateTime.Now; SessionCreator sessionCreator = _sessionCreatorFactory.Create(); Task <List <CciModuleSource> > assembliesTask = _sessionConfiguration.LoadAssemblies(); // Task<List<MethodIdentifier>> coveringTask = sessionCreator.FindCoveringTests(assembliesTask, matcher); Task <TestsRootNode> testsTask = _sessionConfiguration.LoadTests(); ITestsSelectStrategy testsSelector; bool constrainedMutation = false; ICodePartsMatcher matcher; if (singleMethodToMutate != null) { matcher = new CciMethodMatcher(singleMethodToMutate); testsSelector = new CoveringTestsSelectStrategy(assembliesTask, matcher, testsTask); constrainedMutation = true; } else { testsSelector = new AllTestsSelectStrategy(testsTask); matcher = new AllMatcher(); } _log.Info("Selecting tests in assemblies: " + testAssemblies.MakeString()); var testsSelecting = testsSelector.SelectTests(testAssemblies); var t1 = sessionCreator.GetOperators(); var t2 = sessionCreator.BuildAssemblyTree(assembliesTask, constrainedMutation, matcher); var t11 = t1.ContinueWith(task => { _viewModel.MutationsTree.MutationPackages = new ReadOnlyCollection <PackageNode>(task.Result.Packages); }, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _execute.GuiScheduler); var t22 = t2.ContinueWith(task => { if (_typesManager.IsAssemblyLoadError) { _svc.Logging.ShowWarning(UserMessages.WarningAssemblyNotLoaded()); } var assembliesToMutate = task.Result.Where(a => !testAssemblies.ToEmptyIfNull().Contains(a.AssemblyPath.Path)).ToList(); //assembliesToMutate = ClassCoverage.UnmarkNotCovered(assembliesToMutate,testAssemblies); _viewModel.TypesTreeMutate.Assemblies = new ReadOnlyCollection <AssemblyNode>(assembliesToMutate); _whiteSource = assembliesTask.Result; }, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _execute.GuiScheduler); var t33 = testsSelecting.ContinueWith(task => { _viewModel.TypesTreeToTest.TestAssemblies = new ReadOnlyCollection <TestNodeAssembly>(task.Result); if (_options.UseCodeCoverage) { ClassCoverage.UnmarkNotCovered(_viewModel.TypesTreeMutate.Assemblies, _viewModel.TypesTreeToTest.TestAssemblies); } }, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _execute.GuiScheduler); try { var mainTask = Task.WhenAll(t1, t2, testsSelecting, t11, t22, t33).ContinueWith(t => { if (t.Exception != null) { ShowError(t.Exception); _viewModel.Close(); tcs.TrySetCanceled(); } }, _execute.GuiScheduler); var wrappedTask = Task.WhenAll(tcs.Task, mainTask); if (_sessionConfiguration.AssemblyLoadProblem) { new TaskFactory(_dispatcher.GuiScheduler) .StartNew(() => _svc.Logging.ShowWarning(UserMessages.WarningAssemblyNotLoaded())); } return(await WaitForResult(auto, wrappedTask)); } catch (Exception e) { _log.Error(e); throw; } }
public LimitedScopeStrategy(MethodIdentifier singleMethod) { _singleMethod = singleMethod; _matcher = new CciMethodMatcher(singleMethod); }
public async Task <List <AssemblyNode> > BuildAssemblyTree(Task <CciModuleSource> assembliesTask, bool constrainedMutation, CciMethodMatcher matcher) { var modules = await assembliesTask; var assemblies = CreateNodesFromAssemblies(modules, matcher) .Where(a => a.Children.Count > 0).ToList(); var root = new CheckedNode(""); root.Children.AddRange(assemblies); ExpandLoneNodes(root); if (assemblies.Count == 0) { throw new InvalidOperationException(UserMessages.ErrorNoFilesToMutate()); } // _reporting.LogError(UserMessages.ErrorNoFilesToMutate()); return(assemblies); //Events.OnNext(assemblies); }
public async Task<MutationSessionChoices> Run(MethodIdentifier singleMethodToMutate = null, List<string> testAssemblies = null, bool auto = false) { _sessionCreationWindowShowTime = DateTime.Now; SessionCreator sessionCreator = _sessionCreatorFactory.Create(); Task<List<CciModuleSource>> assembliesTask = _sessionConfiguration.LoadAssemblies(); // Task<List<MethodIdentifier>> coveringTask = sessionCreator.FindCoveringTests(assembliesTask, matcher); Task<TestsRootNode> testsTask = _sessionConfiguration.LoadTests(); ITestsSelectStrategy testsSelector; bool constrainedMutation = false; ICodePartsMatcher matcher; if (singleMethodToMutate != null) { matcher = new CciMethodMatcher(singleMethodToMutate); testsSelector = new CoveringTestsSelectStrategy(assembliesTask, matcher, testsTask); constrainedMutation = true; } else { testsSelector = new AllTestsSelectStrategy(testsTask); matcher = new AllMatcher(); } _log.Info("Selecting tests in assemblies: "+ testAssemblies.MakeString()); var testsSelecting = testsSelector.SelectTests(testAssemblies); var t1 = sessionCreator.GetOperators(); var t2 = sessionCreator.BuildAssemblyTree(assembliesTask, constrainedMutation, matcher); var t11 = t1.ContinueWith(task => { _viewModel.MutationsTree.MutationPackages = new ReadOnlyCollection<PackageNode>(task.Result.Packages); },CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _execute.GuiScheduler); var t22 = t2.ContinueWith(task => { if (_typesManager.IsAssemblyLoadError) { _svc.Logging.ShowWarning(UserMessages.WarningAssemblyNotLoaded()); } var assembliesToMutate = task.Result.Where(a => !testAssemblies.ToEmptyIfNull().Contains(a.AssemblyPath.Path)).ToList(); //assembliesToMutate = ClassCoverage.UnmarkNotCovered(assembliesToMutate,testAssemblies); _viewModel.TypesTreeMutate.Assemblies = new ReadOnlyCollection<AssemblyNode>(assembliesToMutate); _whiteSource = assembliesTask.Result; }, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _execute.GuiScheduler); var t33 = testsSelecting.ContinueWith(task => { _viewModel.TypesTreeToTest.TestAssemblies = new ReadOnlyCollection<TestNodeAssembly>(task.Result); if (_options.UseCodeCoverage) { ClassCoverage.UnmarkNotCovered(_viewModel.TypesTreeMutate.Assemblies, _viewModel.TypesTreeToTest.TestAssemblies); } }, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _execute.GuiScheduler); try { var mainTask = Task.WhenAll(t1, t2, testsSelecting, t11, t22, t33).ContinueWith(t => { if (t.Exception != null) { ShowError(t.Exception); _viewModel.Close(); tcs.TrySetCanceled(); } }, _execute.GuiScheduler); var wrappedTask = Task.WhenAll(tcs.Task, mainTask); if (_sessionConfiguration.AssemblyLoadProblem) { new TaskFactory(_dispatcher.GuiScheduler) .StartNew(() => _svc.Logging.ShowWarning(UserMessages.WarningAssemblyNotLoaded())); } return await WaitForResult(auto, wrappedTask); } catch (Exception e) { _log.Error(e); throw; } }