public void InitFileParser()
        {
            var parser = new InitFileParser("BveTs Vehicle Parameters", BVE5FileKind.VehicleParametersFile);
            var stmt = parser.ParseOneStatement("[Cab]");
            var expected1 = new List<TypeDescriber>{
                TypeDescriber.Create(NodeType.SectionStmt, new List<TypeDescriber>{
                    TypeDescriber.Create(NodeType.Identifier, null)
                })
            };
            Helpers.TestStructualEqual(expected1.GetEnumerator(), stmt);

            var stmt2 = parser.ParseOneStatement("driver = 100\n");
            var expected2 = new List<TypeDescriber>{
                TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                    TypeDescriber.Create(NodeType.Definition, new List<TypeDescriber>{
                        TypeDescriber.Create(NodeType.Identifier, null),
                        TypeDescriber.Create(NodeType.Literal, null)
                    })
                })
            };
            Helpers.TestStructualEqual(expected2.GetEnumerator(), stmt2);

            var tree = parser.Parse(@"color = #33ffbb
            ;This is a comment
            MotorcarCount = 4
            DayTimeImage = imgs\test.png
            ", "<string>");
            var expected3 = new List<TypeDescriber>{
                TypeDescriber.Create(NodeType.Tree, new List<TypeDescriber>{
                    TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                        TypeDescriber.Create(NodeType.Definition, new List<TypeDescriber>{
                            TypeDescriber.Create(NodeType.Identifier, null),
                            TypeDescriber.Create(NodeType.Literal, null)
                        })
                    }),
                    TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                        TypeDescriber.Create(NodeType.Definition, new List<TypeDescriber>{
                            TypeDescriber.Create(NodeType.Identifier, null),
                            TypeDescriber.Create(NodeType.Literal, null)
                        })
                    }),
                    TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                        TypeDescriber.Create(NodeType.Definition, new List<TypeDescriber>{
                            TypeDescriber.Create(NodeType.Identifier, null),
                            TypeDescriber.Create(NodeType.Literal, null)
                        })
                    })
                })
            };
            Assert.IsFalse(tree.Errors.Any());
            Helpers.TestStructualEqual(expected3.GetEnumerator(), tree);
        }
        public void Invalid()
        {
            var parser = new InitFileParser("BveTs Vehicle Parameters", BVE5FileKind.VehicleParametersFile);
            var tree = parser.Parse("bvets vihecle params 1.00\n", "<invalid header>", true);
            Assert.IsTrue(parser.HasErrors && parser.Errors.Count() == 1);
            Assert.IsNull(tree);

            var parser2 = new InitFileParser("BveTs Vehicle Parameters", BVE5FileKind.VehicleParametersFile);
            var stmt = parser2.ParseOneStatement("[Cab\n");
            Assert.IsTrue(parser2.HasErrors && parser2.Errors.Count() == 1);
        }