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