From 94045e75cb25b94a355d217f13f082868a940d6f Mon Sep 17 00:00:00 2001 From: Vlada Shubina Date: Tue, 19 Jul 2022 17:52:39 +0200 Subject: [PATCH] added test showing the bug: dotnet/templating#4988 --- .../ConditionalTests.CStyleEvaluator.cs | 27 +++++- .../RunnableProjectGeneratorTests.cs | 82 +++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.TemplateEngine.Core.UnitTests/ConditionalTests.CStyleEvaluator.cs b/test/Microsoft.TemplateEngine.Core.UnitTests/ConditionalTests.CStyleEvaluator.cs index 5bceb15c582..08106b60d01 100644 --- a/test/Microsoft.TemplateEngine.Core.UnitTests/ConditionalTests.CStyleEvaluator.cs +++ b/test/Microsoft.TemplateEngine.Core.UnitTests/ConditionalTests.CStyleEvaluator.cs @@ -1532,7 +1532,32 @@ public void VerifyConditionAtEnd() IProcessor processor = SetupCStyleNoCommentsProcessor(vc); //Changes should be made - bool changed = processor.Run(input, output, 28); + bool changed = processor.Run(input, output, 50); + Verify(Encoding.UTF8, output, changed, value, expected); + } + +#pragma warning disable xUnit1004 // Test methods should not be skipped + [Fact(Skip = "https://github.com/dotnet/templating/issues/4988")] +#pragma warning restore xUnit1004 // Test methods should not be skipped + public void VerifyXMLConditionAtEnd() + { + string value = @"Hello + +"; + string expected = @"Hello +"; + + byte[] valueBytes = Encoding.UTF8.GetBytes(value); + MemoryStream input = new MemoryStream(valueBytes); + MemoryStream output = new MemoryStream(); + + VariableCollection vc = new VariableCollection(); + IProcessor processor = SetupXmlStyleProcessor(vc); + + //Changes should be made + bool changed = processor.Run(input, output, 50); Verify(Encoding.UTF8, output, changed, value, expected); } diff --git a/test/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectGeneratorTests.cs b/test/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectGeneratorTests.cs index d18b1e842f3..3b4276dc421 100644 --- a/test/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectGeneratorTests.cs +++ b/test/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectGeneratorTests.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using FakeItEasy; +using Microsoft.Extensions.Logging; using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Abstractions.Components; using Microsoft.TemplateEngine.Abstractions.Mount; @@ -20,6 +21,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Xunit; +using Xunit.Abstractions; using static Microsoft.TemplateEngine.Orchestrator.RunnableProjects.RunnableProjectGenerator; namespace Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests @@ -579,5 +581,85 @@ public async void CreateAsyncTest_MultiChoiceParamJoining() string resultContent = environment.Host.FileSystem.ReadAllText(Path.Combine(targetDir, "sourcFile")); Assert.Equal(expectedSnippet, resultContent); } + + [Fact] + public async void XMLCondiitonFailure() + { + // + // Template content preparation + // + + var templateConfig = new + { + identity = "test.template", + symbols = new + { + A = new + { + type = "parameter", + dataType = "bool", + defaultValue = "false" + }, + B = new + { + type = "parameter", + dataType = "bool", + defaultValue = "false" + }, + } + }; + + string sourceSnippet = @" + + +foo + + +"; + + string expectedSnippet = @" + +foo +"; + + IDictionary templateSourceFiles = new Dictionary(); + // template.json + templateSourceFiles.Add(TestFileSystemHelper.DefaultConfigRelativePath, JsonConvert.SerializeObject(templateConfig, Formatting.Indented)); + + //content + templateSourceFiles.Add("sourceFile.md", sourceSnippet); + + // + // Dependencies preparation and mounting + // + IEngineEnvironmentSettings settings = _environmentSettingsHelper.CreateEnvironment(virtualize: true); + string sourceBasePath = FileSystemHelpers.GetNewVirtualizedPath(settings); + string targetDir = FileSystemHelpers.GetNewVirtualizedPath(settings); + + TestFileSystemHelper.WriteTemplateSource(settings, sourceBasePath, templateSourceFiles); + IMountPoint? sourceMountPoint = TestFileSystemHelper.CreateMountPoint(settings, sourceBasePath); + RunnableProjectGenerator rpg = new RunnableProjectGenerator(); + SimpleConfigModel configModel = SimpleConfigModel.FromJObject(JObject.FromObject(templateConfig)); + IRunnableProjectConfig runnableConfig = new RunnableProjectConfig(settings, rpg, configModel, sourceMountPoint.FileInfo(TestFileSystemHelper.DefaultConfigRelativePath)); + IParameterSet parameters = new ParameterSet(runnableConfig); + parameters.TryGetParameterDefinition("A", out ITemplateParameter aParam); + parameters.ResolvedValues[aParam] = true; + IDirectory sourceDir = sourceMountPoint!.DirectoryInfo("/")!; + + // + // Running the actual scenario: template files processing and generating output (including macros processing) + // + await rpg.CreateAsync(settings, runnableConfig, sourceDir, parameters, targetDir, CancellationToken.None); + + // + // Veryfying the outputs + // + + string resultContent = settings.Host.FileSystem.ReadAllText(Path.Combine(targetDir, "sourceFile.md")); + Assert.Equal(expectedSnippet, resultContent); + } } }