Exemplo n.º 1
0
        private static void AppendParameterArgumentNullCheck(
            StringBuilder sb,
            SyntaxGeneratorHandler sgHandler,
            List <Tuple <string, string> > usedInterfacesInConstructor)
        {
            sb.AppendLine(8, "[Fact]");
            sb.AppendLine(8, "public void ParameterArgumentNullCheck()");
            sb.AppendLine(8, "{");
            sb.AppendLine(12, "// Arrange");
            if (usedInterfacesInConstructor.Count > 0)
            {
                foreach (var item in usedInterfacesInConstructor)
                {
                    sb.AppendLine(12, $"var {item.Item2} = Substitute.For<{item.Item1}>();");
                }

                sb.AppendLine();

                var parameters = string.Join(", ", usedInterfacesInConstructor.Select(x => x.Item2));
                sb.AppendLine(12, $"var sut = new {sgHandler.HandlerTypeName}({parameters});");
            }
            else
            {
                sb.AppendLine(12, $"var sut = new {sgHandler.HandlerTypeName}();");
            }

            sb.AppendLine();
            sb.AppendLine(12, "// Act & Assert");
            sb.AppendLine(12, "Assert.ThrowsAsync<ArgumentException>(() => sut.ExecuteAsync(null!));");
            sb.AppendLine(8, "}");
        }
Exemplo n.º 2
0
        private static void AppendInstantiateConstructor(
            StringBuilder sb,
            SyntaxGeneratorHandler sgHandler,
            List <Tuple <string, string> > usedInterfacesInConstructor)
        {
            sb.AppendLine(8, "[Fact]");
            sb.AppendLine(8, "public void InstantiateConstructor()");
            sb.AppendLine(8, "{");
            if (usedInterfacesInConstructor.Count > 0)
            {
                sb.AppendLine(12, "// Arrange");
                foreach (var item in usedInterfacesInConstructor)
                {
                    sb.AppendLine(12, $"var {item.Item2} = Substitute.For<{item.Item1}>();");
                }

                sb.AppendLine();
            }

            sb.AppendLine(12, "// Act");
            if (usedInterfacesInConstructor.Count > 0)
            {
                var parameters = string.Join(", ", usedInterfacesInConstructor.Select(x => x.Item2));
                sb.AppendLine(12, $"var actual = new {sgHandler.HandlerTypeName}({parameters});");
            }
            else
            {
                sb.AppendLine(12, $"var actual = new {sgHandler.HandlerTypeName}();");
            }

            sb.AppendLine();
            sb.AppendLine(12, "// Assert");
            sb.AppendLine(12, "Assert.NotNull(actual);");
            sb.AppendLine(8, "}");
        }
Exemplo n.º 3
0
        public static LogKeyValueItem GenerateGeneratedTests(
            DomainProjectOptions domainProjectOptions,
            SyntaxGeneratorHandler sgHandler)
        {
            if (domainProjectOptions == null)
            {
                throw new ArgumentNullException(nameof(domainProjectOptions));
            }

            if (sgHandler == null)
            {
                throw new ArgumentNullException(nameof(sgHandler));
            }

            var area   = sgHandler.FocusOnSegmentName.EnsureFirstCharacterToUpper();
            var nsSrc  = $"{domainProjectOptions.ProjectName}.{NameConstants.Handlers}.{area}";
            var nsTest = $"{domainProjectOptions.ProjectName}.Tests.{NameConstants.Handlers}.{area}.Generated";

            var srcSyntaxNodeRoot           = ReadCsFile(domainProjectOptions, sgHandler.FocusOnSegmentName, sgHandler);
            var usedInterfacesInConstructor = GetUsedInterfacesInConstructor(srcSyntaxNodeRoot);

            var usingStatements = GetUsedUsingStatements(
                srcSyntaxNodeRoot,
                nsSrc,
                usedInterfacesInConstructor.Count > 0);

            var sb = new StringBuilder();

            foreach (var item in usingStatements)
            {
                sb.AppendLine($"using {item};");
            }

            sb.AppendLine();
            GenerateCodeHelper.AppendNamespaceComment(sb, domainProjectOptions.ToolNameAndVersion);
            sb.AppendLine($"namespace {nsTest}");
            sb.AppendLine("{");
            GenerateCodeHelper.AppendGeneratedCodeAttribute(sb, domainProjectOptions.ToolName, domainProjectOptions.ToolVersion);
            sb.AppendLine(4, $"public class {sgHandler.HandlerTypeName}GeneratedTests");
            sb.AppendLine(4, "{");
            AppendInstantiateConstructor(sb, sgHandler, usedInterfacesInConstructor);
            if (sgHandler.HasParametersOrRequestBody)
            {
                sb.AppendLine();
                AppendParameterArgumentNullCheck(sb, sgHandler, usedInterfacesInConstructor);
            }

            sb.AppendLine(4, "}");
            sb.AppendLine("}");

            var pathGenerated = Path.Combine(Path.Combine(domainProjectOptions.PathForTestHandlers !.FullName, area), "Generated");
            var fileGenerated = new FileInfo(Path.Combine(pathGenerated, $"{sgHandler.HandlerTypeName}GeneratedTests.cs"));

            return(TextFileHelper.Save(fileGenerated, sb.ToString()));
        }
Exemplo n.º 4
0
    private static SyntaxNode ReadCsFile(
        DomainProjectOptions domainProjectOptions,
        string area,
        SyntaxGeneratorHandler sgHandler)
    {
        var csSrcFile = DirectoryInfoHelper.GetCsFileNameForHandler(domainProjectOptions.PathForSrcHandlers !, area, sgHandler.HandlerTypeName);
        var csSrcCode = File.ReadAllText(csSrcFile);
        var tree      = CSharpSyntaxTree.ParseText(csSrcCode);

        return(tree.GetRoot());
    }
Exemplo n.º 5
0
    public static void GenerateGeneratedTests(
        ILogger logger,
        DomainProjectOptions domainProjectOptions,
        SyntaxGeneratorHandler sgHandler)
    {
        ArgumentNullException.ThrowIfNull(logger);
        ArgumentNullException.ThrowIfNull(domainProjectOptions);
        ArgumentNullException.ThrowIfNull(sgHandler);

        var area   = sgHandler.FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var nsSrc  = $"{domainProjectOptions.ProjectName}.{NameConstants.Handlers}.{area}";
        var nsTest = $"{domainProjectOptions.ProjectName}.Tests.{NameConstants.Handlers}.{area}.Generated";

        var srcSyntaxNodeRoot           = ReadCsFile(domainProjectOptions, sgHandler.FocusOnSegmentName, sgHandler);
        var usedInterfacesInConstructor = GetUsedInterfacesInConstructor(srcSyntaxNodeRoot);

        var usingStatements = GetUsedUsingStatements(
            srcSyntaxNodeRoot,
            nsSrc,
            usedInterfacesInConstructor.Count > 0);

        var sb = new StringBuilder();

        foreach (var item in usingStatements)
        {
            sb.AppendLine($"using {item};");
        }

        sb.AppendLine();
        GenerateCodeHelper.AppendGeneratedCodeWarningComment(sb, domainProjectOptions.ToolNameAndVersion);
        sb.AppendLine($"namespace {nsTest}");
        sb.AppendLine("{");
        GenerateCodeHelper.AppendGeneratedCodeAttribute(sb, domainProjectOptions.ToolName, domainProjectOptions.ToolVersion);
        sb.AppendLine(4, $"public class {sgHandler.HandlerTypeName}GeneratedTests");
        sb.AppendLine(4, "{");
        AppendInstantiateConstructor(sb, sgHandler, usedInterfacesInConstructor);
        if (sgHandler.HasParametersOrRequestBody)
        {
            sb.AppendLine();
            AppendParameterArgumentNullCheck(sb, sgHandler, usedInterfacesInConstructor);
        }

        sb.AppendLine(4, "}");
        sb.AppendLine("}");

        var pathGenerated = Path.Combine(Path.Combine(domainProjectOptions.PathForTestHandlers !.FullName, area), "Generated");
        var fileGenerated = new FileInfo(Path.Combine(pathGenerated, $"{sgHandler.HandlerTypeName}GeneratedTests.cs"));

        var fileDisplayLocation = fileGenerated.FullName.Replace(domainProjectOptions.PathForTestGenerate !.FullName, "test: ", StringComparison.Ordinal);

        TextFileHelper.Save(logger, fileGenerated, fileDisplayLocation, sb.ToString());
    }
Exemplo n.º 6
0
        public static LogKeyValueItem GenerateCustomTests(
            DomainProjectOptions domainProjectOptions,
            SyntaxGeneratorHandler sgHandler)
        {
            if (domainProjectOptions == null)
            {
                throw new ArgumentNullException(nameof(domainProjectOptions));
            }

            if (sgHandler == null)
            {
                throw new ArgumentNullException(nameof(sgHandler));
            }

            var area   = sgHandler.FocusOnSegmentName.EnsureFirstCharacterToUpper();
            var nsSrc  = $"{domainProjectOptions.ProjectName}.{NameConstants.Handlers}.{area}";
            var nsTest = $"{domainProjectOptions.ProjectName}.Tests.{NameConstants.Handlers}.{area}.Generated";

            var sb = new StringBuilder();

            sb.AppendLine($"using {nsSrc};");
            sb.AppendLine("using Xunit;");
            sb.AppendLine();
            sb.AppendLine($"namespace {nsTest}");
            sb.AppendLine("{");
            sb.AppendLine(4, $"public class {sgHandler.HandlerTypeName}Tests");
            sb.AppendLine(4, "{");
            sb.AppendLine(8, "[Fact(Skip=\"Change this to a real test\")]");
            sb.AppendLine(8, "public void Sample()");
            sb.AppendLine(8, "{");
            sb.AppendLine(12, "// Arrange");
            sb.AppendLine();
            sb.AppendLine(12, "// Act");
            sb.AppendLine();
            sb.AppendLine(12, "// Assert");
            sb.AppendLine(8, "}");
            sb.AppendLine(4, "}");
            sb.AppendLine("}");

            var pathCustom = Path.Combine(domainProjectOptions.PathForTestHandlers !.FullName, area);
            var fileCustom = new FileInfo(Path.Combine(pathCustom, $"{sgHandler.HandlerTypeName}Tests.cs"));

            return(TextFileHelper.Save(fileCustom, sb.ToString(), false));
        }
Exemplo n.º 7
0
    public static void GenerateCustomTests(
        ILogger logger,
        DomainProjectOptions domainProjectOptions,
        SyntaxGeneratorHandler sgHandler)
    {
        ArgumentNullException.ThrowIfNull(logger);
        ArgumentNullException.ThrowIfNull(domainProjectOptions);
        ArgumentNullException.ThrowIfNull(sgHandler);

        var area   = sgHandler.FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var nsTest = $"{domainProjectOptions.ProjectName}.Tests.{NameConstants.Handlers}.{area}";

        var sb = new StringBuilder();

        sb.AppendLine("using Xunit;");
        sb.AppendLine();
        sb.AppendLine($"namespace {nsTest}");
        sb.AppendLine("{");
        sb.AppendLine(4, $"public class {sgHandler.HandlerTypeName}Tests");
        sb.AppendLine(4, "{");
        sb.AppendLine(8, "[Fact(Skip=\"Change this to a real test\")]");
        sb.AppendLine(8, "public void Sample()");
        sb.AppendLine(8, "{");
        sb.AppendLine(12, "// Arrange");
        sb.AppendLine();
        sb.AppendLine(12, "// Act");
        sb.AppendLine();
        sb.AppendLine(12, "// Assert");
        sb.AppendLine(8, "}");
        sb.AppendLine(4, "}");
        sb.AppendLine("}");

        var pathCustom = Path.Combine(domainProjectOptions.PathForTestHandlers !.FullName, area);
        var fileCustom = new FileInfo(Path.Combine(pathCustom, $"{sgHandler.HandlerTypeName}Tests.cs"));

        var fileDisplayLocation = fileCustom.FullName.Replace(domainProjectOptions.PathForTestGenerate !.FullName, "test: ", StringComparison.Ordinal);

        TextFileHelper.Save(logger, fileCustom, fileDisplayLocation, sb.ToString(), overrideIfExist: false);
    }