private void ValidateSourceClass() { if (File.Exists(SourceClassParameter) || MultipleSourceClasses.Any()) { return; } if (!string.IsNullOrWhiteSpace(SourceClassParameter)) { var classes = new FileInfo(SourceProjectParameter).GetProjectFiles(); var file = classes.FindKey(SourceClassParameter); if (!string.IsNullOrWhiteSpace(file)) { var path = new FileInfo(classes[file]); if (path.Exists) { SourceClassParameter = path.FullName; return; } } } if (string.IsNullOrWhiteSpace(SourceClassParameter)) { var classes = SourceProjectParameter.GetCSharpClassDeclarationsFromProject(); if (classes.Any()) { var sourceClassDetails = classes.SelectMany(cu => cu.CompilationUnitSyntax.DescendantNodes <ClassDeclarationSyntax>(), (cu, claz) => new SourceClassDetail { Claz = new ClassDeclaration(claz), FullName = $"{cu.CompilationUnitSyntax.NameSpace()}.{claz.Identifier.Text}", FilePath = cu.FileName }) .OrderBy(x => x.Claz.Syntax.Ancestors <ClassDeclarationSyntax>().Count).ToList(); SourceClassParameter = sourceClassDetails.FirstOrDefault(x => x.FullName.Equals(ClassName, StringComparison.InvariantCultureIgnoreCase))?.FilePath; if (string.IsNullOrWhiteSpace(SourceClassParameter)) { SourceClassParameter = sourceClassDetails.FirstOrDefault(x => x.Claz.Syntax.ClassName().Equals(ClassName, StringComparison.CurrentCultureIgnoreCase))?.FilePath; if (!string.IsNullOrWhiteSpace(SourceClassParameter)) { return; } } else { return; } } } throw new MuTestInputException(ErrorMessage, $"Source class file (.cs) or class with class name {ClassName} is not exist. {CliOptions.SourceClass.ArgumentDescription}"); }
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}]"); } } }