SND\AstrorEnales_cp 9eca0e4bcd - Fixed a small issue with comment out multiline comments parsing
- Started refactoring some code in the hlsl parser
- Brought the test coverage of the hlsl parser back to 100%
2012-08-17 10:07:35 +00:00

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
}
}