Eq Tag added, to allow values to be compared
This commit is contained in:
parent
599dc7a78f
commit
7c3df01029
|
@ -1,26 +1,26 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<TestSettings name="Local" id="2bc42439-1bb6-4112-9c20-eca1ffcae064" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
|
<TestSettings name="Local" id="2bc42439-1bb6-4112-9c20-eca1ffcae064" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
|
||||||
<Description>These are default test settings for a local test run.</Description>
|
<Description>These are default test settings for a local test run.</Description>
|
||||||
<Execution>
|
<Execution>
|
||||||
<TestTypeSpecific>
|
<TestTypeSpecific>
|
||||||
<UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
|
<UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
|
||||||
<AssemblyResolution>
|
<AssemblyResolution>
|
||||||
<TestDirectory useLoadContext="true" />
|
<TestDirectory useLoadContext="true" />
|
||||||
</AssemblyResolution>
|
</AssemblyResolution>
|
||||||
</UnitTestRunConfig>
|
</UnitTestRunConfig>
|
||||||
</TestTypeSpecific>
|
</TestTypeSpecific>
|
||||||
<AgentRule name="LocalMachineDefaultRole">
|
<AgentRule name="LocalMachineDefaultRole">
|
||||||
<DataCollectors>
|
<DataCollectors>
|
||||||
<DataCollector uri="datacollector://microsoft/CodeCoverage/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.CodeCoverage.CoveragePlugIn, Microsoft.VisualStudio.QualityTools.Plugins.CodeCoverage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Code Coverage">
|
<DataCollector uri="datacollector://microsoft/CodeCoverage/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.CodeCoverage.CoveragePlugIn, Microsoft.VisualStudio.QualityTools.Plugins.CodeCoverage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Code Coverage">
|
||||||
<Configuration>
|
<Configuration>
|
||||||
<CodeCoverage xmlns="">
|
<CodeCoverage xmlns="">
|
||||||
<Regular>
|
<Regular>
|
||||||
<CodeCoverageItem binaryFile="mustache-sharp\bin\Debug\mustache-sharp.dll" pdbFile="mustache-sharp\bin\Debug\mustache-sharp.pdb" instrumentInPlace="true" />
|
<CodeCoverageItem binaryFile="mustache-sharp\bin\Debug\mustache-sharp.dll" pdbFile="mustache-sharp\bin\Debug\mustache-sharp.pdb" instrumentInPlace="true" />
|
||||||
</Regular>
|
</Regular>
|
||||||
</CodeCoverage>
|
</CodeCoverage>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</DataCollector>
|
</DataCollector>
|
||||||
</DataCollectors>
|
</DataCollectors>
|
||||||
</AgentRule>
|
</AgentRule>
|
||||||
</Execution>
|
</Execution>
|
||||||
</TestSettings>
|
</TestSettings>
|
|
@ -1,21 +1,21 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<TestSettings name="Trace and Test Impact" id="535ebf31-4d23-42a7-a823-ecb179ff7886" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
|
<TestSettings name="Trace and Test Impact" id="535ebf31-4d23-42a7-a823-ecb179ff7886" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
|
||||||
<Description>These are test settings for Trace and Test Impact.</Description>
|
<Description>These are test settings for Trace and Test Impact.</Description>
|
||||||
<Execution>
|
<Execution>
|
||||||
<TestTypeSpecific />
|
<TestTypeSpecific />
|
||||||
<AgentRule name="Execution Agents">
|
<AgentRule name="Execution Agents">
|
||||||
<DataCollectors>
|
<DataCollectors>
|
||||||
<DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
|
<DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
|
||||||
</DataCollector>
|
</DataCollector>
|
||||||
<DataCollector uri="datacollector://microsoft/ActionLog/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.ManualTest.ActionLog.ActionLogPlugin, Microsoft.VisualStudio.TestTools.ManualTest.ActionLog, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Actions">
|
<DataCollector uri="datacollector://microsoft/ActionLog/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.ManualTest.ActionLog.ActionLogPlugin, Microsoft.VisualStudio.TestTools.ManualTest.ActionLog, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Actions">
|
||||||
</DataCollector>
|
</DataCollector>
|
||||||
<DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
|
<DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
|
||||||
</DataCollector>
|
</DataCollector>
|
||||||
<DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
|
<DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
|
||||||
</DataCollector>
|
</DataCollector>
|
||||||
<DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
|
<DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
|
||||||
</DataCollector>
|
</DataCollector>
|
||||||
</DataCollectors>
|
</DataCollectors>
|
||||||
</AgentRule>
|
</AgentRule>
|
||||||
</Execution>
|
</Execution>
|
||||||
</TestSettings>
|
</TestSettings>
|
|
@ -1,36 +1,36 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 2010
|
# Visual Studio 2012
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mustache-sharp", "mustache-sharp\mustache-sharp.csproj", "{D71B378F-A4BA-4263-A4F0-07A49A0C528D}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mustache-sharp", "mustache-sharp\mustache-sharp.csproj", "{D71B378F-A4BA-4263-A4F0-07A49A0C528D}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mustache-sharp.test", "mustache-sharp.test\mustache-sharp.test.csproj", "{7F607362-0680-4751-B1DC-621219294AE3}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mustache-sharp.test", "mustache-sharp.test\mustache-sharp.test.csproj", "{7F607362-0680-4751-B1DC-621219294AE3}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{25414E49-67E6-4B8D-8AD8-78C70F8992A7}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{25414E49-67E6-4B8D-8AD8-78C70F8992A7}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
Local.testsettings = Local.testsettings
|
Local.testsettings = Local.testsettings
|
||||||
mustache-sharp.vsmdi = mustache-sharp.vsmdi
|
mustache-sharp.vsmdi = mustache-sharp.vsmdi
|
||||||
TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
|
TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(TestCaseManagementSettings) = postSolution
|
GlobalSection(TestCaseManagementSettings) = postSolution
|
||||||
CategoryFile = mustache-sharp.vsmdi
|
CategoryFile = mustache-sharp.vsmdi
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D71B378F-A4BA-4263-A4F0-07A49A0C528D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{7F607362-0680-4751-B1DC-621219294AE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{7F607362-0680-4751-B1DC-621219294AE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{7F607362-0680-4751-B1DC-621219294AE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{7F607362-0680-4751-B1DC-621219294AE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{7F607362-0680-4751-B1DC-621219294AE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{7F607362-0680-4751-B1DC-621219294AE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{7F607362-0680-4751-B1DC-621219294AE3}.Release|Any CPU.Build.0 = Release|Any CPU
|
{7F607362-0680-4751-B1DC-621219294AE3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -1158,6 +1158,32 @@ Item Number: foo<br />
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If the two values don't match, the content of an eq statement should not be printed.
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
public void TestCompile_Eq_EvaluatesToFalse_SkipsContent() {
|
||||||
|
FormatCompiler parser = new FormatCompiler();
|
||||||
|
const string format = "Before{{#eq OneValue OtherValue}}Content{{/eq}}After";
|
||||||
|
Generator generator = parser.Compile(format);
|
||||||
|
string result = generator.Render(new {OneValue = "Foo", OtherValue = "Bar"} );
|
||||||
|
Assert.AreEqual("BeforeAfter", result, "The wrong text was generated.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If the two values match, the content of an eq statement should be printed.
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
public void TestCompile_Eq_EvaluatesToTrue_PrintsContent() {
|
||||||
|
FormatCompiler parser = new FormatCompiler();
|
||||||
|
const string format = "Before{{#eq OneValue OtherValue}}Content{{/eq}}After";
|
||||||
|
Generator generator = parser.Compile(format);
|
||||||
|
string result = generator.Render(new { OneValue = "Foo", OtherValue = "Foo" });
|
||||||
|
Assert.AreEqual("BeforeContentAfter", result, "The wrong text was generated.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#region Compound Tags
|
#region Compound Tags
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
|
<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
|
||||||
<TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
|
<TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
|
||||||
<RunConfiguration id="2bc42439-1bb6-4112-9c20-eca1ffcae064" name="Local" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<RunConfiguration id="2bc42439-1bb6-4112-9c20-eca1ffcae064" name="Local" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
</TestList>
|
</TestList>
|
||||||
</TestLists>
|
</TestLists>
|
|
@ -29,7 +29,7 @@ namespace Mustache
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override IEnumerable<string> GetClosingTags()
|
protected override IEnumerable<string> GetClosingTags()
|
||||||
{
|
{
|
||||||
return new string[] { "if" };
|
return new string[] { "if","eq" };
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Mustache {
|
||||||
|
/// <summary>
|
||||||
|
/// Defines a tag that conditionally prints its content, based on whether the passed in values are equal
|
||||||
|
/// </summary>
|
||||||
|
internal sealed class EqTagDefinition : ConditionTagDefinition {
|
||||||
|
private const string ConditionParameter = "condition";
|
||||||
|
private const string TargetValueParameter = "targetValue";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of a IfTagDefinition.
|
||||||
|
/// </summary>
|
||||||
|
public EqTagDefinition()
|
||||||
|
: base("eq")
|
||||||
|
{}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets whether the tag only exists within the scope of its parent.
|
||||||
|
/// </summary>
|
||||||
|
protected override bool GetIsContextSensitive()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the parameters that can be passed to the tag.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The parameters.</returns>
|
||||||
|
protected override IEnumerable<TagParameter> GetParameters() {
|
||||||
|
return new[] { new TagParameter(ConditionParameter) { IsRequired = true },
|
||||||
|
new TagParameter(TargetValueParameter){IsRequired = true} };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets whether the primary generator group should be used to render the tag.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="arguments">The arguments passed to the tag.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// True if the primary generator group should be used to render the tag;
|
||||||
|
/// otherwise, false to use the secondary group.
|
||||||
|
/// </returns>
|
||||||
|
public override bool ShouldGeneratePrimaryGroup(Dictionary<string, object> arguments) {
|
||||||
|
object condition = arguments[ConditionParameter];
|
||||||
|
object targetValue = arguments[TargetValueParameter];
|
||||||
|
return isConditionSatisfied(condition,targetValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool isConditionSatisfied(object condition,object targetValue) {
|
||||||
|
if (condition == null || targetValue == null) {
|
||||||
|
if (condition == null && targetValue == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ((condition is double || condition is int) && (targetValue is double || targetValue is int) ) {
|
||||||
|
return Math.Abs((double) condition - (double) targetValue) < 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (condition is string && targetValue is string) {
|
||||||
|
return condition.ToString().Equals(targetValue.ToString(), StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (condition is bool && targetValue is bool) {
|
||||||
|
return (bool) condition == (bool) targetValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (condition is Char && targetValue is Char) {
|
||||||
|
return (Char)condition == (Char)targetValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the parameters that are used to create a new child context.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The parameters that are used to create a new child context.</returns>
|
||||||
|
public override IEnumerable<TagParameter> GetChildContextParameters() {
|
||||||
|
return new TagParameter[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -41,6 +41,9 @@ namespace Mustache
|
||||||
_tagLookup.Add(newlineDefinition.Name, newlineDefinition);
|
_tagLookup.Add(newlineDefinition.Name, newlineDefinition);
|
||||||
SetTagDefinition setDefinition = new SetTagDefinition();
|
SetTagDefinition setDefinition = new SetTagDefinition();
|
||||||
_tagLookup.Add(setDefinition.Name, setDefinition);
|
_tagLookup.Add(setDefinition.Name, setDefinition);
|
||||||
|
EqTagDefinition eqTagDefinition = new EqTagDefinition();
|
||||||
|
_tagLookup.Add(eqTagDefinition.Name,eqTagDefinition);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
<Compile Include="ContentTagDefinition.cs" />
|
<Compile Include="ContentTagDefinition.cs" />
|
||||||
<Compile Include="Context.cs" />
|
<Compile Include="Context.cs" />
|
||||||
<Compile Include="ContextParameter.cs" />
|
<Compile Include="ContextParameter.cs" />
|
||||||
|
<Compile Include="EqTagDefinition.cs" />
|
||||||
<Compile Include="VariableFoundEventArgs.cs" />
|
<Compile Include="VariableFoundEventArgs.cs" />
|
||||||
<Compile Include="SetTagDefinition.cs" />
|
<Compile Include="SetTagDefinition.cs" />
|
||||||
<Compile Include="NewlineTagDefinition.cs" />
|
<Compile Include="NewlineTagDefinition.cs" />
|
||||||
|
|
Loading…
Reference in New Issue