Skip to content

Commit

Permalink
added tests for dotnet#4988; skipped for now
Browse files Browse the repository at this point in the history
  • Loading branch information
vlada-shubina committed Aug 26, 2022
1 parent 2c366f3 commit cf5e6ea
Show file tree
Hide file tree
Showing 3 changed files with 193 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
<!--#if (B)
bar
#endif -->
";
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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -570,5 +570,171 @@ public async void CreateAsyncTest_MultiChoiceParamJoining()
string resultContent = environment.Host.FileSystem.ReadAllText(Path.Combine(targetDir, "sourcFile"));
Assert.Equal(expectedSnippet, resultContent);
}

#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 async void XMLConditionFailure()
{
//
// 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 = @"
<!--#if (A) -->
<!-- comment foo -->
foo
<!--#endif -->
<!--#if (B) -->
This text should not be generated, just to make file content longer to prove the bug.
If the buffer is advanced when evaluating condition, the bug won't be reproduced.
This text ensures that buffer is long enough even considering very-very-long env variable names available on CI machine.
<!--#endif -->
";

string expectedSnippet = @"
<!-- comment foo -->
foo
";

IDictionary<string, string?> templateSourceFiles = new Dictionary<string, string?>();
// 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);
}

#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 async void HashConditionFailure()
{
//
// 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 = @"
#if (A)
# comment foo
foo
#endif
##if (B)
This text should not be generated, just to make file content longer to prove the bug.
If the buffer is advanced when evaluating condition, the bug won't be reproduced.
This text ensures that buffer is long enough even considering very-very-long env variable names available on CI machine.
#endif
";

string expectedSnippet = @"
# comment foo
foo
";

IDictionary<string, string?> templateSourceFiles = new Dictionary<string, string?>();
// template.json
templateSourceFiles.Add(TestFileSystemHelper.DefaultConfigRelativePath, JsonConvert.SerializeObject(templateConfig, Formatting.Indented));

//content
templateSourceFiles.Add("sourceFile.yaml", 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.yaml"));
Assert.Equal(expectedSnippet, resultContent);
}
}
}
2 changes: 1 addition & 1 deletion test/Microsoft.TemplateEngine.TestHelper/TestHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ internal TestHost(

_loggerFactory = new TestLoggerFactory();
addLoggerProviders?.ToList().ForEach(_loggerFactory.AddProvider);
_logger = _loggerFactory.CreateLogger("Test Host");
_logger = _loggerFactory.CreateLogger(hostIdentifier);
_fallbackNames = fallbackNames ?? new[] { "dotnetcli" };
}

Expand Down

0 comments on commit cf5e6ea

Please sign in to comment.