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