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 LimitedScopeStrategy(MethodIdentifier singleMethod)
 {
     _singleMethod = singleMethod;
     _matcher      = new CciMethodMatcher(singleMethod);
 }
        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 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 void ShouldFindTypeByIdentifier()
        {
            var searcher = new CciMethodMatcher(_context);
            var types = _module.GetAllTypes();
            INamedTypeDefinition method = types.SingleOrDefault(searcher.Matches);

            Assert.IsNotNull(method);
        }