public void CanParseFragmentWithParamBlockWithInitialValues()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"fragment basic_material;

				[params]
				float alpha : ALPHA = 1.0f;
				float3 dir = float3(1.0f, -1.1f, 0.0);
				bool enable = false;");

			FragmentParser parser = new FragmentParser(null, lexer.GetTokens());

			// Act.
			FragmentNode fragment = parser.Parse();

			// Assert.
			Assert.AreEqual("basic_material", fragment.Name);
			Assert.IsNotNull(fragment.Parameters);
			Assert.AreEqual(3, fragment.Parameters.VariableDeclarations.Count);
            Assert.AreEqual(TokenType.Float, fragment.Parameters.VariableDeclarations[0].DataType);
			Assert.AreEqual("alpha", fragment.Parameters.VariableDeclarations[0].Name);
			Assert.AreEqual("ALPHA", fragment.Parameters.VariableDeclarations[0].Semantic);
			Assert.AreEqual("1", fragment.Parameters.VariableDeclarations[0].InitialValue);
            Assert.AreEqual(TokenType.Float3, fragment.Parameters.VariableDeclarations[1].DataType);
			Assert.AreEqual("dir", fragment.Parameters.VariableDeclarations[1].Name);
			Assert.AreEqual("float3(1,-1.1,0)", fragment.Parameters.VariableDeclarations[1].InitialValue);
            Assert.AreEqual(TokenType.Bool, fragment.Parameters.VariableDeclarations[2].DataType);
			Assert.AreEqual("enable", fragment.Parameters.VariableDeclarations[2].Name);
			Assert.AreEqual("false", fragment.Parameters.VariableDeclarations[2].InitialValue);
		}
Exemple #2
0
		private static void TestTokenType(string value, TokenType expectedTokenType)
		{
			// Arrange.
			Lexer lexer = new Lexer(null, value);

			// Act.
			Token token = lexer.NextToken();

			// Assert.
			Assert.AreEqual(expectedTokenType, token.Type);
		}
		public void CanParseFragmentWithParamBlock()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"fragment basic_material;

				[params]
				float alpha : ALPHA;
				float3 color;");

			FragmentParser parser = new FragmentParser(null, lexer.GetTokens());

			// Act.
			FragmentNode fragment = parser.Parse();

			// Assert.
			Assert.AreEqual("basic_material", fragment.Name);
			Assert.IsNotNull(fragment.Parameters);
			Assert.AreEqual(2, fragment.Parameters.VariableDeclarations.Count);
			Assert.AreEqual(TokenType.Float, fragment.Parameters.VariableDeclarations[0].DataType);
			Assert.AreEqual("alpha", fragment.Parameters.VariableDeclarations[0].Name);
			Assert.AreEqual("ALPHA", fragment.Parameters.VariableDeclarations[0].Semantic);
            Assert.AreEqual(TokenType.Float3, fragment.Parameters.VariableDeclarations[1].DataType);
			Assert.AreEqual("color", fragment.Parameters.VariableDeclarations[1].Name);
		}
Exemple #4
0
        public void BadlyFormattedCommentResultsInErrorToken()
        {
            // Arrange.
            Lexer lexer = new Lexer(null, @"/ this is a bad comment");

            // Act.
            var tokens = lexer.GetTokens();

            // Assert.
            Assert.AreEqual(TokenType.Error, tokens[0].Type);
        }
Exemple #5
0
		public void CanLexComment()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"[params] // this is a comment
				// This is a commented line float3 = { }
				[interpolators]");

			// Act.
			var tokens = lexer.GetTokens();

			// Assert.
			Assert.AreEqual(7, tokens.Count());
			Assert.AreEqual(TokenType.OpenSquare, tokens[0].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[1].Type);
			Assert.AreEqual("params", ((IdentifierToken)tokens[1]).Identifier);
			Assert.AreEqual(TokenType.CloseSquare, tokens[2].Type);
			Assert.AreEqual(TokenType.OpenSquare, tokens[3].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[4].Type);
			Assert.AreEqual("interpolators", ((IdentifierToken)tokens[4]).Identifier);
			Assert.AreEqual(TokenType.CloseSquare, tokens[5].Type);
			Assert.AreEqual(TokenType.Eof, tokens[6].Type);
		}
Exemple #6
0
		public void CanLexCodeBlock()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"[vs 2_0]
				__hlsl__
				void main(INPUT input, inout OUTPUT output)
				{
				}
				__hlsl__");

			// Act.
			var tokens = lexer.GetTokens();

			// Assert.
			Assert.AreEqual(6, tokens.Count());
			Assert.AreEqual(TokenType.OpenSquare, tokens[0].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[1].Type);
			Assert.AreEqual("vs", ((IdentifierToken)tokens[1]).Identifier);
			Assert.AreEqual(TokenType.Identifier, tokens[2].Type);
			Assert.AreEqual("2_0", ((IdentifierToken)tokens[2]).Identifier);
			Assert.AreEqual(TokenType.CloseSquare, tokens[3].Type);
			Assert.AreEqual(TokenType.ShaderCode, tokens[4].Type);
			Assert.AreEqual("void main(INPUT input, inout OUTPUT output)\r\t\t\t\t{\r\t\t\t\t}", ((ShaderCodeToken)tokens[4]).ShaderCode);
			Assert.AreEqual(TokenType.Eof, tokens[5].Type);
		}
Exemple #7
0
		public void CanLexDeclarationWithSemanticAndInitialValue1()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"float3 normal : ""NORMAL"" = float3(0, 1, 0);");

			// Act.
			var tokens = lexer.GetTokens();

			// Assert.
			Assert.AreEqual(15, tokens.Count());
			Assert.AreEqual(TokenType.Float3, tokens[0].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[1].Type);
			Assert.AreEqual("normal", ((IdentifierToken)tokens[1]).Identifier);
			Assert.AreEqual(TokenType.Colon, tokens[2].Type);
			Assert.AreEqual(TokenType.Literal, tokens[3].Type);
			Assert.AreEqual("NORMAL", ((StringToken)tokens[3]).Value);
			Assert.AreEqual(TokenType.Equal, tokens[4].Type);
			Assert.AreEqual(TokenType.Float3, tokens[5].Type);
			Assert.AreEqual(TokenType.OpenParen, tokens[6].Type);
			Assert.AreEqual(TokenType.Literal, tokens[7].Type);
			Assert.AreEqual(0, ((IntToken)tokens[7]).Value);
			Assert.AreEqual(TokenType.Comma, tokens[8].Type);
			Assert.AreEqual(TokenType.Literal, tokens[9].Type);
			Assert.AreEqual(1, ((IntToken)tokens[9]).Value);
			Assert.AreEqual(TokenType.Comma, tokens[10].Type);
			Assert.AreEqual(TokenType.Literal, tokens[11].Type);
			Assert.AreEqual(0, ((IntToken)tokens[11]).Value);
			Assert.AreEqual(TokenType.CloseParen, tokens[12].Type);
			Assert.AreEqual(TokenType.Semicolon, tokens[13].Type);
			Assert.AreEqual(TokenType.Eof, tokens[14].Type);
		}
Exemple #8
0
		public void CanLexDeclarationWithInitialValue2()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"float3 normal = {0, -1f, 0.0f};");

			// Act.
			var tokens = lexer.GetTokens();

			// Assert.
			Assert.AreEqual(13, tokens.Count());
			Assert.AreEqual(TokenType.Float3, tokens[0].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[1].Type);
			Assert.AreEqual("normal", ((IdentifierToken)tokens[1]).Identifier);
			Assert.AreEqual(TokenType.Equal, tokens[2].Type);
			Assert.AreEqual(TokenType.OpenCurly, tokens[3].Type);
			Assert.AreEqual(TokenType.Literal, tokens[4].Type);
			Assert.AreEqual(0, ((IntToken)tokens[4]).Value);
			Assert.AreEqual(TokenType.Comma, tokens[5].Type);
			Assert.AreEqual(TokenType.Minus, tokens[6].Type);
			Assert.AreEqual(TokenType.Literal, tokens[7].Type);
			Assert.AreEqual(1f, ((FloatToken)tokens[7]).Value);
			Assert.AreEqual(TokenType.Comma, tokens[8].Type);
			Assert.AreEqual(TokenType.Literal, tokens[9].Type);
			Assert.AreEqual(0.0f, ((FloatToken)tokens[9]).Value);
			Assert.AreEqual(TokenType.CloseCurly, tokens[10].Type);
			Assert.AreEqual(TokenType.Semicolon, tokens[11].Type);
			Assert.AreEqual(TokenType.Eof, tokens[12].Type);
		}
Exemple #9
0
		public void CanLexDeclarationWithSemantic()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"float3 normal : ""NORMAL"";");

			// Act.
			var tokens = lexer.GetTokens();

			// Assert.
			Assert.AreEqual(6, tokens.Count());
			Assert.AreEqual(TokenType.Float3, tokens[0].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[1].Type);
			Assert.AreEqual("normal", ((IdentifierToken)tokens[1]).Identifier);
			Assert.AreEqual(TokenType.Colon, tokens[2].Type);
			Assert.AreEqual(TokenType.Literal, tokens[3].Type);
			Assert.AreEqual("NORMAL", ((StringToken)tokens[3]).Value);
			Assert.AreEqual(TokenType.Semicolon, tokens[4].Type);
			Assert.AreEqual(TokenType.Eof, tokens[5].Type);
		}
Exemple #10
0
		public void CanLexFragmentWithVertexParameters()
		{
			// Arrange.
			Lexer lexer = new Lexer(null, @"fragment MyFragment;

				[vertex]
				float3 normal : ""NORMAL"";
				float2 texCoord;");

			// Act.
			var tokens = lexer.GetTokens();

			// Assert.
			Assert.AreEqual(15, tokens.Count());
			Assert.AreEqual(TokenType.Fragment, tokens[0].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[1].Type);
			Assert.AreEqual("MyFragment", ((IdentifierToken)tokens[1]).Identifier);
			Assert.AreEqual(TokenType.Semicolon, tokens[2].Type);
			Assert.AreEqual(TokenType.OpenSquare, tokens[3].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[4].Type);
			Assert.AreEqual("vertex", ((IdentifierToken)tokens[4]).Identifier);
			Assert.AreEqual(TokenType.CloseSquare, tokens[5].Type);
			Assert.AreEqual(TokenType.Float3, tokens[6].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[7].Type);
			Assert.AreEqual("normal", ((IdentifierToken)tokens[7]).Identifier);
			Assert.AreEqual(TokenType.Colon, tokens[8].Type);
			Assert.AreEqual(TokenType.Literal, tokens[9].Type);
			Assert.AreEqual("NORMAL", ((StringToken)tokens[9]).Value);
			Assert.AreEqual(TokenType.Semicolon, tokens[10].Type);
			Assert.AreEqual(TokenType.Float2, tokens[11].Type);
			Assert.AreEqual(TokenType.Identifier, tokens[12].Type);
			Assert.AreEqual("texCoord", ((IdentifierToken)tokens[12]).Identifier);
			Assert.AreEqual(TokenType.Semicolon, tokens[13].Type);
			Assert.AreEqual(TokenType.Eof, tokens[14].Type);
		}