Skip to content

Commit

Permalink
#5 XUnit tests
Browse files Browse the repository at this point in the history
- Set expected.tt line encoding to unix style
- Update TransformerTest to work with updated engine
  • Loading branch information
araszka committed May 20, 2023
1 parent e86fa3d commit 804121a
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 18 deletions.
2 changes: 2 additions & 0 deletions tests/ManiaTemplates.Tests/Components/MtComponentTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ public void ShouldPopulatedTemplate()
<script>scriptText3</script>
</component>
""";

_engine.GetType().GetField("_maniaScripts", BindingFlags.NonPublic | BindingFlags.Instance)?.SetValue(_engine,
new Dictionary<string, string>() { { "res", "resourceScript" } });

var expected = new MtComponent
{
Namespaces = new() { "namespace" },
Expand Down
45 changes: 38 additions & 7 deletions tests/ManiaTemplates.Tests/Lib/TransformerTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Reflection;
using System.Globalization;
using System.Reflection;
using System.Text.RegularExpressions;
using ManiaTemplates.Components;
using ManiaTemplates.Languages;
Expand All @@ -10,6 +11,8 @@ public class TransformerTest
{
private readonly ManiaTemplateEngine _maniaTemplateEngine = new();
private readonly Regex _renderMethodSuffixPattern = new("_[A-Z0-9]+\\(");
private readonly Regex _contextGeneralizerPattern = new("MtContext\\d+");
private readonly Regex _renderMethodGeneralizerPattern = new("(Render.+?)_MtContext");

private readonly MtComponent _testComponent = new()
{
Expand All @@ -34,14 +37,14 @@ public class TransformerTest
{ "Graph", new() { TemplateKey = "newGraph.mt", Tag = "Graph" } }
},
TemplateContent =
@"<Label if=""enabled"" foreach=""var i in numbers"" x=""{{ 20 * __index }}"" text=""{{ i }} at index {{ __index }}"" />Text<!--Comment--><test><Graph/></test><slot />"
@"<Label if=""enabled"" foreach=""int i in numbers"" x=""{{ 20 * __index }}"" text=""{{ i }} at index {{ __index }}"" />Text<!--Comment--><test><Graph/></test>"
};

private readonly Transformer _transformer;
private readonly MtTransformer _transformer;

public TransformerTest()
{
_transformer = new Transformer(_maniaTemplateEngine, new MtLanguageT4());
_transformer = new MtTransformer(_maniaTemplateEngine, new MtLanguageT4());
}

[Fact]
Expand Down Expand Up @@ -77,8 +80,36 @@ public void ShouldBuildManialink()

var expected = File.ReadAllText("Lib/expected.tt");

var result = _transformer.BuildManialink(_testComponent, "expected");
var generated = _transformer.BuildManialink(_testComponent, "expected");
var result = _renderMethodSuffixPattern.Replace(generated, "(");

Assert.Equal(_renderMethodSuffixPattern.Replace(result, "("), expected);
result = GeneralizeGeneratedDocument(result);

File.WriteAllText("Test.tt", result);
Assert.Equal(expected, result);
}

private string GeneralizeGeneratedDocument(string generatedDocument)
{
var outDocument = generatedDocument;

//Replace MtContext123456 with MtContext
var m = _contextGeneralizerPattern.Match(generatedDocument);
while (m.Success)
{
outDocument = outDocument.Replace(m.Value, "MtContext");
m = m.NextMatch();
}

//Replace RenderComponent_MtContext with RenderComponent
m = _renderMethodGeneralizerPattern.Match(generatedDocument);
while (m.Success)
{
outDocument = outDocument.Replace(m.Value, m.Groups[1].Value);
m = m.NextMatch();
}

//Remove \r
return outDocument.Replace("\r", "");
}
}
}
114 changes: 103 additions & 11 deletions tests/ManiaTemplates.Tests/Lib/expected.tt
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,136 @@
<#@ import namespace="namespace" #>
<#@ import namespace="GraphNamespace" #>
<manialink version="3" id="expected" name="EvoSC#-expected">
<# RenderBody(); #>
<# RenderManiaScripts(); #>
<# RenderBody(new MtContext{ numbers = numbers,enabled = enabled }); #>
<# RenderManiaScripts(new MtContext{ numbers = numbers,enabled = enabled }); #>
</manialink>
<#+
public List<int> numbers { get; init; }
public boolean enabled { get; init; }
void RenderBody(){
int __index = 0;
foreach(var i in numbers)
class MtContext {
public List<int> numbers { get; set; }
public boolean enabled { get; set; }
}
class MtContext: MtContext {
public int __index { get; set; }
public int i { get; set; }
}
class MtContext: MtContext {
public double x { get; set; } = 0.0;
public double y { get; set; } = 0.0;
public double w { get; set; } = 0.0;
public double h { get; set; } = 0.0;
public string halign { get; set; } = "left";
public string valign { get; set; } = "center";
public double opacity { get; set; } = 1.0;
public int zIndex { get; set; } = 0;
public int events { get; set; } = 0;
public string action { get; set; } = "";
public string url { get; set; } = "";
public string manialink { get; set; } = "";
public string style { get; set; } = "";
public string textfont { get; set; } = "GameFont";
public double textsize { get; set; } = 1.0;
public string textcolor { get; set; } = "";
public string focusareacolor1 { get; set; } = "";
public string focusareacolor2 { get; set; } = "";
public string text { get; set; } = "";
public string textprefix { get; set; } = "";
public int bold { get; set; } = 0;
public int autonewline { get; set; } = 0;
public int maxline { get; set; } = 0;
public int translate { get; set; } = 0;
public string textid { get; set; } = "";
public string id { get; set; } = "";
public int i { get; set; }
}
class MtContext: MtContext {
public string arg1 { get; set; } = "";
public int arg2 { get; set; } = 0;
public test arg3 { get; set; }
}
void RenderBody(MtContext __data){
var numbers = __data.numbers;
var enabled = __data.enabled;
var __index = 0;
foreach(int i in numbers)
{
MtContext __loopData = new MtContext{__index = __index,i = i,numbers = __data.numbers,enabled = __data.enabled};
if(enabled)
{
RenderLabel(x: 20 * __index, y: 0.0, w: 0.0, h: 0.0, halign: $"left", valign: $"center", opacity: 1.0, zIndex: 0, events: 0, action: $"", url: $"", manialink: $"", style: $"", textfont: $"GameFont", textsize: 1.0, textcolor: $"", focusareacolor1: $"", focusareacolor2: $"", text: $"{i} at index {__index}", textprefix: $"", bold: 0, autonewline: 0, maxline: 0, translate: 0, textid: $"", id: $"");
RenderLabel(new MtContext { x = 20 * __index, text = $"{i} at index {__index}" });
}
__index++;
}
#>
Text
<!-- Comment -->
<test>
<#+ RenderGraph(arg1: $"", arg2: 0, arg3: new test()); #>
<#+ RenderGraph(new MtContext { }); #>
</test>
<!-- ERROR:slot -->
<#+
}
void RenderLabel(double x = 0.0, double y = 0.0, double w = 0.0, double h = 0.0, string halign = "left", string valign = "center", double opacity = 1.0, int zIndex = 0, int events = 0, string action = "", string url = "", string manialink = "", string style = "", string textfont = "GameFont", double textsize = 1.0, string textcolor = "", string focusareacolor1 = "", string focusareacolor2 = "", string text = "", string textprefix = "", int bold = 0, int autonewline = 0, int maxline = 0, int translate = 0, string textid = "", string id = "")
void RenderLabel(MtContext __data)
{
var x = __data.x;
var y = __data.y;
var w = __data.w;
var h = __data.h;
var halign = __data.halign;
var valign = __data.valign;
var opacity = __data.opacity;
var zIndex = __data.zIndex;
var events = __data.events;
var action = __data.action;
var url = __data.url;
var manialink = __data.manialink;
var style = __data.style;
var textfont = __data.textfont;
var textsize = __data.textsize;
var textcolor = __data.textcolor;
var focusareacolor1 = __data.focusareacolor1;
var focusareacolor2 = __data.focusareacolor2;
var text = __data.text;
var textprefix = __data.textprefix;
var bold = __data.bold;
var autonewline = __data.autonewline;
var maxline = __data.maxline;
var translate = __data.translate;
var textid = __data.textid;
var id = __data.id;
var i = __data.i;
var __index = __data.__index;
#>
<label pos="<#= x #> <#= y #>" size="<#= w #> <#= h #>" halign="<#= halign #>" valign="<#= valign #>" opacity="<#= opacity #>" z-index="<#= zIndex #>" ScriptEvents="<#= events #>" action="<#= action #>" url="<#= url #>" manialink="<#= manialink #>" style="<#= style #>" textfont="<#= textfont #>" textsize="<#= textsize #>" textcolor="<#= textcolor #>" focusareacolor1="<#= focusareacolor1 #>" focusareacolor2="<#= focusareacolor2 #>" text="<#= text #>" textprefix="<#= textprefix #>" textemboss="<#= bold #>" autonewline="<#= autonewline #>" maxline="<#= maxline #>" translate="<#= translate #>" textid="<#= textid #>" id="<#= id #>" />
<#+
}
void RenderGraph(string arg1 = "", int arg2 = 0, test arg3)
void RenderGraph(MtContext __data)
{
var arg1 = __data.arg1;
var arg2 = __data.arg2;
var arg3 = __data.arg3;
var numbers = __data.numbers;
var enabled = __data.enabled;
}
void RenderSlot(MtContext __data)
{
var __index = __data.__index;
var i = __data.i;
}
void RenderSlot(MtContext __data)
{
var numbers = __data.numbers;
var enabled = __data.enabled;
}
void RenderManiaScripts()
void RenderManiaScripts(MtContext __data)
{
var numbers = __data.numbers;
var enabled = __data.enabled;
#>
<script><!--
scriptText1
scriptText2
scriptText3
GraphScript
--></script>
<#+
Expand Down

0 comments on commit 804121a

Please sign in to comment.