public void MetaHeader()
 {
     var parser = new BVE5RouteFileParser();
     var tree = parser.Parse(@"BveTs Map 1.00
     Sound.Load(sounds\a.wav);", "<string>", true);
     Assert.IsFalse(parser.HasErrors);
 }
 public void Statements()
 {
     var parser = new BVE5RouteFileParser();
     var tree = parser.Parse(@"Track[1].Position(0, 0, 100, 0);
     //This is a comment
     Track[2].Position(5.4, 0, 100, 0);",
                             "<string>");
     var expected4 = new List<TypeDescriber>{
         TypeDescriber.Create(NodeType.Tree, new List<TypeDescriber>{
             TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                 TypeDescriber.Create(NodeType.Invocation, new List<TypeDescriber>{
                     TypeDescriber.Create(NodeType.MemRef, new List<TypeDescriber>{
                         TypeDescriber.Create(NodeType.Indexer, new List<TypeDescriber>{
                             TypeDescriber.Create(NodeType.Identifier, null),
                             TypeDescriber.Create(NodeType.Literal, null)
                         }),
                         TypeDescriber.Create(NodeType.Identifier, null)
                     }),
                     TypeDescriber.Create(NodeType.Literal, null),	//0
                     TypeDescriber.Create(NodeType.Literal, null),	//0
                     TypeDescriber.Create(NodeType.Literal, null),	//100
                     TypeDescriber.Create(NodeType.Literal, null)	//0
                 })
             }),
             TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                 TypeDescriber.Create(NodeType.Invocation, new List<TypeDescriber>{
                     TypeDescriber.Create(NodeType.MemRef, new List<TypeDescriber>{
                         TypeDescriber.Create(NodeType.Indexer, new List<TypeDescriber>{
                             TypeDescriber.Create(NodeType.Identifier, null),
                             TypeDescriber.Create(NodeType.Literal, null)
                         }),
                         TypeDescriber.Create(NodeType.Identifier, null)
                     }),
                     TypeDescriber.Create(NodeType.Literal, null),	//5.4
                     TypeDescriber.Create(NodeType.Literal, null),	//0
                     TypeDescriber.Create(NodeType.Literal, null),	//100
                     TypeDescriber.Create(NodeType.Literal, null)	//0
                 })
             })
         })
     };
     Helpers.TestStructualEqual(expected4.GetEnumerator(), tree);
 }
        public void Invalid()
        {
            var parser = new BVE5RouteFileParser();
            var tree = parser.Parse("bvets mip 1.00", "<invalid header>", true);
            Assert.IsTrue(parser.HasErrors && parser.Errors.Count() == 1);
            Assert.IsNull(tree);

            var parser2 = new BVE5RouteFileParser();
            var stmt = parser2.ParseOneStatement("Track[.Position");
            var expected1 = new List<TypeDescriber>{
                TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                    TypeDescriber.Create(NodeType.MemRef, new List<TypeDescriber>{
                        TypeDescriber.Create(NodeType.Indexer, new List<TypeDescriber>{
                            TypeDescriber.Create(NodeType.Identifier, null)
                        }),
                        TypeDescriber.Create(NodeType.Identifier, null)
                    })
                })
            };
            Helpers.TestStructualEqual(expected1.GetEnumerator(), stmt);
            Assert.IsTrue(parser2.HasErrors && parser2.Errors.Count() == 3);

            var parser3 = new BVE5RouteFileParser();
            var stmt2 = parser3.ParseOneStatement("Track[0].Position(100");
            var expected2 = new List<TypeDescriber>{
                TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                    TypeDescriber.Create(NodeType.Invocation, new List<TypeDescriber>{
                        TypeDescriber.Create(NodeType.MemRef, new List<TypeDescriber>{
                            TypeDescriber.Create(NodeType.Indexer, new List<TypeDescriber>{
                                TypeDescriber.Create(NodeType.Identifier, null),
                                TypeDescriber.Create(NodeType.Literal, null)
                            }),
                            TypeDescriber.Create(NodeType.Identifier, null)
                        }),
                        TypeDescriber.Create(NodeType.Literal, null)
                    })
                })
            };
            Helpers.TestStructualEqual(expected2.GetEnumerator(), stmt2);
            Assert.IsTrue(parser3.HasErrors && parser3.Errors.Count() == 2);
        }