private void ValidateTestClasses() { if (!string.IsNullOrWhiteSpace(TestClassParameter) && !MultipleTestClasses.Any()) { MultipleSourceClasses .ForEach(x => MultipleTestClasses.Add(TestClassParameter)); return; } var isAllClassesFound = true; var testClasses = new List <string>(); foreach (var testClass in MultipleTestClasses) { var classes = new FileInfo(TestProjectParameter).GetProjectFiles(); var file = classes.FindKey(testClass); if (!string.IsNullOrWhiteSpace(file)) { var path = new FileInfo(classes[file]); if (path.Exists) { testClasses.Add(path.FullName); } else { isAllClassesFound = false; break; } } else { isAllClassesFound = false; break; } } if (isAllClassesFound) { MultipleTestClasses.Clear(); MultipleTestClasses.AddRange(testClasses); return; } throw new MuTestInputException(ErrorMessage, $"One or more Test class file(s) (.cs) are not exist. {CliOptions.MultipleTestClasses.ArgumentDescription}"); }
public MuTestOptions Build() { var muTestOptions = new MuTestOptions { SourceProjectParameter = GetOption(SourceProject.Value(), CliOptions.SourceProject), SourceProjectLibraryParameter = GetOption(SourceLib.Value(), CliOptions.SourceLib), SourceClassParameter = GetOption(SourceClass.Value(), CliOptions.SourceClass), TestProjectParameter = GetOption(TestProject.Value(), CliOptions.TestProject), TestProjectLibraryParameter = GetOption(TestLib.Value(), CliOptions.TestLib), TestClassParameter = GetOption(TestClass.Value(), CliOptions.TestClass), ExecuteAllTests = GetOption(ExecuteAllTests.Value(), CliOptions.ExecuteAllTests), SkipTestProjectBuild = GetOption(SkipTestProjectBuild.Value(), CliOptions.SkipTestProjectBuild), IncludePartialClasses = GetOption(IncludePartialClasses.Value(), CliOptions.IncludePartialClasses), AnalyzeExternalCoveredClasses = GetOption(AnalyzeExternalCoveredClasses.Value(), CliOptions.AnalyzeExternalCoveredClasses), IncludeNestedClasses = GetOption(IncludeNestedClasses.Value(), CliOptions.IncludeNestedClasses), UseClassFilter = GetOption(UseClassFilter.Value(), CliOptions.UseClassFilter), X64TargetPlatform = GetOption(X64.Value(), CliOptions.X64TargetPlatform), BuildInReleaseModeParameter = GetOption(ReleaseMode.Value(), CliOptions.BuildInReleaseMode), EnableDiagnostics = GetOption(Diagnostics.Value(), CliOptions.EnableDiagnostics), OptimizeTestProject = GetOption(OptimizeTestProject.Value(), CliOptions.OptimizeTestProject), ConcurrentTestRunners = GetOption(Parallel.Value(), CliOptions.Parallel), SurvivedThreshold = GetOption(SurvivedThreshold.Value(), CliOptions.SurvivedThreshold), KilledThreshold = GetOption(KilledThreshold.Value(), CliOptions.KilledThreshold), OutputPathParameter = GetOption(OutputPath.Value(), CliOptions.OutputPath), NoCoverage = GetOption(NoCoverage.Value(), CliOptions.NoCoverage), RegEx = GetOption(RegEx.Value(), CliOptions.Regex), Specific = GetOption(Specific.Value(), CliOptions.Specific), ClassName = GetOption(ClassName.Value(), CliOptions.ClassName), ProcessWholeProject = GetOption(ProcessWholeProject.Value(), CliOptions.ProcessWholeProject), TestExecutionThreshold = GetOption(FindTestTime.Value(), CliOptions.TestExecutionThreshold), MutantsPerLine = GetOption(MutantsPerLine.Value(), CliOptions.MutantsPerLine) }; muTestOptions .MultipleSourceClasses .AddRange(GetOption(MultipleSourceClasses.Value(), CliOptions.MultipleSourceClasses).Distinct()); muTestOptions .MultipleTestClasses .AddRange(GetOption(MultipleTestClasses.Value(), CliOptions.MultipleTestClasses).Distinct()); muTestOptions.ValidateOptions(); return(muTestOptions); }
private void ValidateRequiredParameters() { if (string.IsNullOrWhiteSpace(SourceProjectParameter) || !SourceProjectParameter.EndsWith(".csproj") || !File.Exists(SourceProjectParameter)) { throw new MuTestInputException(ErrorMessage, $"The Source Project File (.csproj) is required. Valid Options are {CliOptions.SourceProject.ArgumentShortName}"); } if (string.IsNullOrWhiteSpace(TestProjectParameter) || !TestProjectParameter.EndsWith(".csproj") || !File.Exists(TestProjectParameter) ) { throw new MuTestInputException(ErrorMessage, $"The Test Project File (.csproj) is required. Valid Options are {CliOptions.TestProject.ArgumentShortName}"); } if (string.IsNullOrWhiteSpace(ProcessWholeProject)) { if (string.IsNullOrWhiteSpace(ClassName) && !MultipleSourceClasses.Any()) { throw new MuTestInputException(ErrorMessage, $"Source class file name or fully qualified name is required. Valid Options are {CliOptions.SourceClass.ArgumentShortName} or process whole project using {CliOptions.ProcessWholeProject.ArgumentShortName}"); } if (string.IsNullOrWhiteSpace(TestClassParameter) && !MultipleTestClasses.Any()) { throw new MuTestInputException(ErrorMessage, $"Test class file name (.cs) is required. Valid Options are {CliOptions.TestClass.ArgumentShortName}"); } if (string.IsNullOrWhiteSpace(TestClassParameter) && MultipleSourceClasses.Count != MultipleTestClasses.Count) { throw new MuTestInputException(ErrorMessage, $"Number of source Classes Should be equal to number of test classes Count[{CliOptions.MultipleSourceClasses.ArgumentShortName}] = Count[{CliOptions.MultipleTestClasses.ArgumentShortName}]"); } } }
private void ValidateTestClass() { if (File.Exists(TestClassParameter) || MultipleTestClasses.Any()) { return; } var classes = new FileInfo(TestProjectParameter).GetProjectFiles(); var file = classes.FindKey(TestClassParameter); if (!string.IsNullOrWhiteSpace(file)) { var path = new FileInfo(classes[file]); if (path.Exists) { TestClassParameter = path.FullName; return; } } throw new MuTestInputException(ErrorMessage, $"Test class file (.cs) is not exist. {CliOptions.TestClass.ArgumentDescription}"); }