예제 #1
0
        public void Basics()
        {
            try{
            var parser = new BVE5RouteFileParser();
            var stmt = parser.ParseOneStatement(@"Sound.Load(sounds.txt);");
            var expected1 = 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.Identifier, null),
                            TypeDescriber.Create(NodeType.Identifier, null),
                            TypeDescriber.Create(NodeType.Identifier, null)
                        })
                    })
                })
            };
            Helpers.TestStructualEqual(expected1.GetEnumerator(), stmt);
            }
            catch(TypeLoadException e){
                var asms = AppDomain.CurrentDomain.GetAssemblies();
                foreach(var asm in asms)
                    Console.WriteLine(asm.FullName);

                Console.WriteLine(e.Message);
                Console.WriteLine(e.TypeName);
            }
        }
        public void Basics()
        {
            var parser = new BVE5RouteFileParser();
            var stmt = parser.ParseOneStatement("Sound.Load(sounds.txt);");
            var expected1 = 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.Identifier, null),
                            TypeDescriber.Create(NodeType.Identifier, null)
                        }),
                        TypeDescriber.Create(NodeType.Identifier, null)
                    })
                })
            };
            Helpers.TestStructualEqual(expected1.GetEnumerator(), stmt);

            var stmt2 = parser.ParseOneStatement("1000;");
            var expected2 = new List<TypeDescriber>{
                TypeDescriber.Create(NodeType.Statement, new List<TypeDescriber>{
                    TypeDescriber.Create(NodeType.Literal, null)
                })
            };
            Helpers.TestStructualEqual(expected2.GetEnumerator(), stmt2);

            var stmt3 = parser.ParseOneStatement("Track[Rail1].Position(9.7, 0, 300, 0);");
            var expected3 = 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),   //9.7
                        TypeDescriber.Create(NodeType.Literal, null),	//0
                        TypeDescriber.Create(NodeType.Literal, null),	//300
                        TypeDescriber.Create(NodeType.Literal, null)	//0
                    })
                })
            };
            Helpers.TestStructualEqual(expected3.GetEnumerator(), stmt3);
        }
        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);
        }
        public void Additions()
        {
            var parser = new BVE5RouteFileParser();
            var stmt = parser.ParseOneStatement("let a = 1;");
            var expected1 = 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(expected1.GetEnumerator(), stmt);

            var stmt2 = parser.ParseOneStatement("let ‰½‚© = 1;");
            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);
        }