Ejemplo n.º 1
0
        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}");
        }
Ejemplo n.º 2
0
        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}]");
                }
            }
        }