- Started refactoring some code in the hlsl parser - Brought the test coverage of the hlsl parser back to 100%
142 lines
3.5 KiB
C#
142 lines
3.5 KiB
C#
using System;
|
|
using NUnit.Framework;
|
|
using HLSLParser;
|
|
|
|
// This file is part of the ANX.Framework created by the
|
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
|
// For details see: http://anxframework.codeplex.com/license
|
|
|
|
namespace HLSLParserTests
|
|
{
|
|
public static class MethodTests
|
|
{
|
|
#region Constants
|
|
private const string TestMethod =
|
|
@"float4 PSPointSprite(PSSceneIn input) : SV_Target
|
|
{
|
|
return g_txDiffuse.Sample(g_samLinear, input.tex) * input.color;
|
|
}";
|
|
|
|
private const string TestMethodWithBodyBraces =
|
|
@"float4 PSPointSprite(PSSceneIn input) : SV_Target
|
|
{
|
|
if(true)
|
|
{
|
|
return g_txDiffuse.Sample(g_samLinear, input.tex) * input.color;
|
|
}
|
|
else
|
|
{
|
|
return g_txDiffuse.Sample(g_samLinear, input.tex);
|
|
}
|
|
}";
|
|
|
|
private const string TestMethodInline =
|
|
@"inline float4 PSPointSprite(PSSceneIn input) : SV_Target
|
|
{
|
|
return g_txDiffuse.Sample(g_samLinear, input.tex) * input.color;
|
|
}";
|
|
#endregion
|
|
|
|
#region TestParseIfMethod
|
|
[Test]
|
|
public static void TestParseIfMethod()
|
|
{
|
|
var text = new ParseTextWalker(TestMethod);
|
|
var result = Method.TryParse(text);
|
|
|
|
Assert.NotNull(result);
|
|
Assert.AreEqual("PSPointSprite", result.Name);
|
|
Assert.AreEqual("float4", result.ReturnType);
|
|
Assert.AreEqual("PSSceneIn input", result.Arguments);
|
|
Assert.AreEqual("SV_Target", result.Semantic);
|
|
Assert.AreEqual(
|
|
"return g_txDiffuse.Sample(g_samLinear, input.tex) * input.color;",
|
|
result.Body);
|
|
}
|
|
#endregion
|
|
|
|
#region TestParseIfMethodWithBodyBraces
|
|
[Test]
|
|
public static void TestParseIfMethodWithBodyBraces()
|
|
{
|
|
var text = new ParseTextWalker(TestMethodWithBodyBraces);
|
|
var result = Method.TryParse(text);
|
|
|
|
Assert.NotNull(result);
|
|
Assert.AreEqual("PSPointSprite", result.Name);
|
|
Assert.AreEqual("float4", result.ReturnType);
|
|
|
|
string expected =
|
|
@"if(true)
|
|
{
|
|
return g_txDiffuse.Sample(g_samLinear, input.tex) * input.color;
|
|
}
|
|
else
|
|
{
|
|
return g_txDiffuse.Sample(g_samLinear, input.tex);
|
|
}";
|
|
|
|
Assert.AreEqual(expected, result.Body);
|
|
}
|
|
#endregion
|
|
|
|
#region TestParseIfMethodInline
|
|
[Test]
|
|
public static void TestParseIfMethodInline()
|
|
{
|
|
var text = new ParseTextWalker(TestMethodInline);
|
|
var result = Method.TryParse(text);
|
|
|
|
Assert.NotNull(result);
|
|
Assert.AreEqual("PSPointSprite", result.Name);
|
|
Assert.AreEqual("float4", result.ReturnType);
|
|
Assert.AreEqual("inline", result.StorageClass);
|
|
}
|
|
#endregion
|
|
|
|
#region TestParseIfMethodWithVariable
|
|
[Test]
|
|
public static void TestParseIfMethodWithVariable()
|
|
{
|
|
var text = new ParseTextWalker("float4 value;");
|
|
var result = Method.TryParse(text);
|
|
|
|
Assert.Null(result);
|
|
}
|
|
#endregion
|
|
|
|
#region TestParseIfMethodWithoutCode
|
|
[Test]
|
|
public static void TestParseIfMethodWithoutCode()
|
|
{
|
|
var text = new ParseTextWalker("testtest");
|
|
var result = Method.TryParse(text);
|
|
|
|
Assert.Null(result);
|
|
}
|
|
#endregion
|
|
|
|
#region TestToString
|
|
[Test]
|
|
public static void TestToString()
|
|
{
|
|
var text = new ParseTextWalker(TestMethod);
|
|
var result = Method.TryParse(text);
|
|
|
|
Assert.AreEqual(TestMethod.Replace("\r", ""), result.ToString());
|
|
}
|
|
#endregion
|
|
|
|
#region TestToStringWithInline
|
|
[Test]
|
|
public static void TestToStringWithInline()
|
|
{
|
|
var text = new ParseTextWalker("inline " + TestMethod);
|
|
var result = Method.TryParse(text);
|
|
|
|
Assert.AreEqual("inline " + TestMethod.Replace("\r", ""), result.ToString());
|
|
}
|
|
#endregion
|
|
}
|
|
}
|