public async Task CompileMutationProjects_WhenCompilerNotReturnsError_ShouldNotThrowExceptionAndShouldHaveCreatedABaselineDirectory()
        {
            var compiler = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var baselineCreatorCompileMutationProjectsHandler = new BaselineCreatorCompileMutationProjectsHandler(compiler, _fileSystem);

            await baselineCreatorCompileMutationProjectsHandler.CompileMutationProjectsAsync(_config, Path);

            Assert.IsTrue(_fileSystem.Directory.Exists(Path), "Have not created the baseline directory");
        }
        public async Task ExecuteMutationAsync_WhenExecuteMutationAndTestsPass_ShouldSetMutationsAsSurvived()
        {
            var compiler   = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var testRunner = TestRunnerClientCreator.CreatePositive();

            var mutationDocumentExecutor = new MutationDocumentExecutor(compiler, _dependency, testRunner, _fileSystem);
            var result = await mutationDocumentExecutor.ExecuteMutationAsync(_config, _mutationDocument);

            Assert.IsTrue(result.Survived);
        }
        public void CompileMutationProjects_WhenSolutionDoesntHaveProjectWithName_ShouldThrowException()
        {
            var compiler = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var baselineCreatorCompileMutationProjectsHandler = new BaselineCreatorCompileMutationProjectsHandler(compiler, _fileSystem);

            _config.MutationProjects.First().Project.Name = "WAAA";

            var exception = Assert.ThrowsAsync <BaselineException>(async() => await baselineCreatorCompileMutationProjectsHandler.CompileMutationProjectsAsync(_config, Path));

            StringAssert.Contains("Could not find any project with the name WAAA", exception.Message);
        }
        public void CompileMutationProjects_WhenCompilerReturnsError_ShouldThrowException()
        {
            var compiler = ProjectCompilerCreator.CreateNegativeCompiler(_fileSystem);
            var baselineCreatorCompileMutationProjectsHandler = new BaselineCreatorCompileMutationProjectsHandler(compiler, _fileSystem);

            var exception            = Assert.ThrowsAsync <BaselineException>(async() => await baselineCreatorCompileMutationProjectsHandler.CompileMutationProjectsAsync(_config, Path));
            var compilationException = exception.InnerException as CompilationException;

            Assert.AreEqual(1, compilationException.ErrorMessages.Count);
            Assert.AreEqual("Compile message", compilationException.ErrorMessages.First());
        }
        public async Task CompileMutationProjects_WhenCancel_ShouldThrowCancellException()
        {
            var compiler = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var baselineCreatorCompileMutationProjectsHandler = new BaselineCreatorCompileMutationProjectsHandler(compiler, _fileSystem);

            var cts   = new CancellationTokenSource();
            var token = cts.Token;

            cts.Cancel();

            Assert.ThrowsAsync <TaskCanceledException>(async() => await baselineCreatorCompileMutationProjectsHandler.CompileMutationProjectsAsync(_config, Path, token));
        }
        public void ExecuteMutationAsync_WhenExecuteMutationAndNoMappingMatch_ShouldThrowException()
        {
            _config.MutationProjects.First().MappedTestProjects = new List <string> {
                "TestProject2"
            };

            var compiler   = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var testRunner = TestRunnerClientCreator.CreatePositive();

            var mutationDocumentExecutor = new MutationDocumentExecutor(compiler, _dependency, testRunner, _fileSystem);

            Assert.ThrowsAsync <MutationDocumentException>(async() => await mutationDocumentExecutor.ExecuteMutationAsync(_config, _mutationDocument));
        }
        public void SetUp()
        {
            _fileSystem        = new MockFileSystem();
            _config            = ConfigCreator.CreateConfig(_fileSystem);
            _mutationDocuments = new MutationDocumentCreator().CreateMutations(_config);

            var dependency = new TestRunnerDependencyFilesHandler(_fileSystem);

            var compiler   = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var testRunner = TestRunnerClientCreator.CreateNegative();

            _mutationExecutor = new MutationDocumentExecutor(compiler, dependency, testRunner, _fileSystem);
        }
        public async Task ExecuteMutationAsync_WhenExecuteMutationAndCancel_ShouldGetMutationCancelled()
        {
            var compiler     = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var testRunner   = TestRunnerClientCreator.CreatePositive();
            var cancellation = new CancellationTokenSource();
            var token        = cancellation.Token;

            cancellation.Cancel();

            var mutationDocumentExecutor = new MutationDocumentExecutor(compiler, _dependency, testRunner, _fileSystem);
            var result = await mutationDocumentExecutor.ExecuteMutationAsync(_config, _mutationDocument, token);

            Assert.AreEqual("Mutation cancelled", result.UnexpectedError);
        }
        public async Task CreateBaselineAsync_WhenCreatingBaseline_ShouldGetBaselineInfoAndDeleteBaselineDirectory()
        {
            var baselineCreator = new BaselineCreator(
                _fileSystem,
                new BaselineCreatorCompileMutationProjectsHandler(ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem), _fileSystem),
                new BaselineCreatorRunUnitTestsHandler(TestRunnerClientCreator.CreatePositive(), new TestRunnerDependencyFilesHandler(_fileSystem)),
                new BaselineCreatorLogSummaryHandler());

            var result = await baselineCreator.CreateBaselineAsync(_config);

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual("TestProject", result.First().TestProjectName);
            Assert.AreEqual(TimeSpan.FromSeconds(1), result.First().ExecutionTime);
        }
        public async Task Handle_WhenExecuteMutationAndGetUnknownError_ShouldFindUnknownMutation()
        {
            var dependency = new TestRunnerDependencyFilesHandler(_fileSystem);

            var compiler   = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var testRunner = TestRunnerClientCreator.CreateEmptyTestResult();

            _mutationExecutor = new MutationDocumentExecutor(compiler, dependency, testRunner, _fileSystem);
            var mutationDocumentExecutor = new ExecuteMutationsCommandHandler(_mutationExecutor, new MutationRunLoggerManager());


            var results = await mutationDocumentExecutor.Handle(new ExecuteMutationsCommand(_config, _mutationDocuments), CancellationToken.None);

            Assert.AreEqual(3, results.MutationDocumentResults.Count);

            var result = results.MutationDocumentResults.First();

            Assert.IsNotNull(result.UnexpectedError);
        }