Ejemplo n.º 1
0
        public void Analyze_OK01()
        {
            const string text = "  service test\r\n  {\r\n rpc test1 (test2) returns (test3);\r\n}\r\n";

              var lex = new Lexer(text);

              lex.Analyze();

              Assert.AreEqual(7, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(18, lex.Index);
        }
        public void ParseEnum_NOK05()
        {
            const string text = "  syntax = \"proto\";\r\n";

            var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

            Assert.IsFalse(lex.ParseSyntax());

            Assert.AreEqual(1, lex.Tokens.Count);
            Assert.AreEqual(1, lex.Errors.Count);
            Assert.AreEqual(3, lex.Index);
        }
        public void ParseOneOf_NOK01()
        {
            const string Text = "  oneof oneof_name {\r\n  string url = 2;\r\n  string title = 3;\r\n  msg1 snippets = 4;\r\n}";

            var lex = new Lexer(Text) { Matches = Helper.SplitText(Text) };

            lex.ParseTopLevelStatement();

            Assert.AreEqual(0, lex.Tokens.Count);
            Assert.AreEqual(1, lex.Errors.Count);
            Assert.AreEqual(1, lex.Index);
        }
Ejemplo n.º 4
0
        public void Analyze_NOK01()
        {
            const string text = "\r\n  service test\r\n  {\r\n rpx test1 (test2) returns (test3);\r\n}\r\n" + // rpx instead of rpc
                          "  service test\r\n  {\r\n rpc test1 (test2) returns (test3);\r\n}\r\n";

              var lex = new Lexer(text);

              lex.Analyze();

              Assert.AreEqual(9, lex.Tokens.Count);
              Assert.AreEqual(11, lex.Errors.Count);
              Assert.AreEqual(37, lex.Index);
        }
        public void ParseOneOf_OK01()
        {
            const string Text = "  oneof oneof_name {\r\n  string url = 2;\r\n  string title = 3;\r\n  msg1 snippets = 4;\r\n}";

            var lex = new Lexer(Text) { Matches = Helper.SplitText(Text) };

            Assert.IsTrue(lex.ParseOneOf());

            Assert.AreEqual(11, lex.Tokens.Count);
            Assert.AreEqual(0, lex.Errors.Count);
            Assert.AreEqual(23, lex.Index);

            Assert.AreEqual(2, lex.Tokens[0].Position);
            Assert.AreEqual(8, lex.Tokens[1].Position);
            Assert.AreEqual(24, lex.Tokens[2].Position);
            Assert.AreEqual(31, lex.Tokens[3].Position);
            Assert.AreEqual(37, lex.Tokens[4].Position);
            Assert.AreEqual(43, lex.Tokens[5].Position);
            Assert.AreEqual(50, lex.Tokens[6].Position);
            Assert.AreEqual(58, lex.Tokens[7].Position);
            Assert.AreEqual(64, lex.Tokens[8].Position);
            Assert.AreEqual(69, lex.Tokens[9].Position);
            Assert.AreEqual(80, lex.Tokens[10].Position);

            Assert.AreEqual(5, lex.Tokens[0].Length);
            Assert.AreEqual(10, lex.Tokens[1].Length);
            Assert.AreEqual(6, lex.Tokens[2].Length);
            Assert.AreEqual(3, lex.Tokens[3].Length);
            Assert.AreEqual(1, lex.Tokens[4].Length);
            Assert.AreEqual(6, lex.Tokens[5].Length);
            Assert.AreEqual(5, lex.Tokens[6].Length);
            Assert.AreEqual(1, lex.Tokens[7].Length);
            Assert.AreEqual(4, lex.Tokens[8].Length);
            Assert.AreEqual(8, lex.Tokens[9].Length);
            Assert.AreEqual(1, lex.Tokens[10].Length);

            Assert.AreEqual(CodeType.Keyword, lex.Tokens[0].CodeType);
            Assert.AreEqual(CodeType.SymDef, lex.Tokens[1].CodeType);
            Assert.AreEqual(CodeType.Keyword, lex.Tokens[2].CodeType);
            Assert.AreEqual(CodeType.SymDef, lex.Tokens[3].CodeType);
            Assert.AreEqual(CodeType.Number, lex.Tokens[4].CodeType);
            Assert.AreEqual(CodeType.Keyword, lex.Tokens[5].CodeType);
            Assert.AreEqual(CodeType.SymDef, lex.Tokens[6].CodeType);
            Assert.AreEqual(CodeType.Number, lex.Tokens[7].CodeType);
            Assert.AreEqual(CodeType.SymRef, lex.Tokens[8].CodeType);
            Assert.AreEqual(CodeType.SymDef, lex.Tokens[9].CodeType);
            Assert.AreEqual(CodeType.Number, lex.Tokens[10].CodeType);
        }
Ejemplo n.º 6
0
        public void ParseTopLevel_OK04()
        {
            const string text = "  extend test\r\n  {\r\n optional int32 abc = 12;\r\n}\r\n";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.ParseTopLevelStatement();

              Assert.AreEqual(6, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(14, lex.Index);
        }
Ejemplo n.º 7
0
        public void ParseTopLevel_OK03()
        {
            const string text = "  service test\r\n  {\r\n rpc test1 (test2) returns (test3);\r\n}\r\n";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.ParseTopLevelStatement();

              Assert.AreEqual(7, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(18, lex.Index);
        }
Ejemplo n.º 8
0
        public void ParseTopLevel_OK02()
        {
            const string text = "  enum test\r\n  {\r\n  a=1;\r\n  b=2;\r\n}\r\n";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.ParseTopLevelStatement();

              Assert.AreEqual(6, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(17, lex.Index);
        }
Ejemplo n.º 9
0
        public void ParseTopLevel_OK01()
        {
            const string text = "  message SearchResponse {\r\n  required string url = 2;\r\n  optional string title = 3;\r\n  repeated string snippets = 4;\r\n}\r\n";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.ParseTopLevelStatement();

              Assert.AreEqual(14, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(27, lex.Index);
        }
Ejemplo n.º 10
0
        public void ParseTopLevel_OK07()
        {
            const string text = "  option abc = true;";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.ParseTopLevelStatement();

              Assert.AreEqual(3, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(5, lex.Index);
        }
Ejemplo n.º 11
0
        public void GetString_OK()
        {
            const string text = "\"abc def\"";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              Assert.IsTrue(lex.GetString("xxx"));

              Assert.AreEqual(1, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Tokens[0].Position);
              Assert.AreEqual(9, lex.Tokens[0].Length);
              Assert.AreEqual(3, lex.Index);
        }
Ejemplo n.º 12
0
        public void GetFloat_OK9()
        {
            const string text = "+123";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              var ret = lex.GetFloatNumber();

              Assert.AreEqual(text, ret);
              Assert.AreEqual(1, lex.Index);
        }
Ejemplo n.º 13
0
        public void GetFloat_OK8()
        {
            const string text = "1.123E+]";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              var ret = lex.GetFloatNumber();

              Assert.AreEqual(text.Substring(0, text.Length - 1), ret);
              Assert.AreEqual(3, lex.Index);
        }
Ejemplo n.º 14
0
        public void BlockComment_Over_Multiple_Lines_Until_EOF_Missing_EndComment()
        {
            const string text = " asdölfkj asdfj asdölkjfas  asdflj /* asöldkfjasdfölkjhas\r\n dfhöö \r\nhasdf";

              var lex = new Lexer(text) {Matches = Helper.SplitText(text) };

              lex.EatComments();

              Assert.AreEqual(1, lex.Tokens.Count);
              Assert.AreEqual(1, lex.Errors.Count);
              Assert.AreEqual(0, lex.Index);
              Assert.AreEqual(4, lex.Matches.Count);

              Assert.AreEqual(35, lex.Tokens[0].Position);
              Assert.AreEqual(38, lex.Tokens[0].Length);

              Assert.AreEqual(0, lex.Errors[0].Line);
              Assert.AreEqual(1, lex.Errors[0].Length);
              Assert.AreEqual(73, lex.Errors[0].Position);

              Assert.AreEqual(0, lex.Line);
        }
        public void ParseEnum_OK02()
        {
            const string text = "  syntax = \"proto3\";\r\n";

            var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

            Assert.IsTrue(lex.ParseSyntax());

            Assert.AreEqual(2, lex.Tokens.Count);
            Assert.AreEqual(0, lex.Errors.Count);
            Assert.AreEqual(7, lex.Index);
        }
Ejemplo n.º 16
0
        public void ParseTopLevel_OK05()
        {
            const string text = "  import \"lkjlkjlkj\";";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.ParseTopLevelStatement();

              Assert.AreEqual(2, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(5, lex.Index);
        }
Ejemplo n.º 17
0
        public void ParseTopLevel_OK06()
        {
            const string text = "  package asdf.sdf.sf;\r\n";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.ParseTopLevelStatement();

              Assert.AreEqual(4, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(8, lex.Index);
        }
Ejemplo n.º 18
0
        public void LineComment_until_EOF()
        {
            const string text = "  option farz = true;  // this is a comment until EOF";

              var lex = new Lexer(text) {Matches = Helper.SplitText(text) };

              lex.EatComments();

              Assert.AreEqual(1, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(0, lex.Index);
              Assert.AreEqual(5, lex.Matches.Count);

              Assert.AreEqual(23, lex.Tokens[0].Position);
              Assert.AreEqual(30, lex.Tokens[0].Length);
              Assert.AreEqual(0, lex.Line);
        }
Ejemplo n.º 19
0
        public void BlockComment_In_One_Line()
        {
            const string text = " asdölfkj asdfj asdölkjfas  asdflj /* asöldkfjasdfölkjhas dfhööhasdf */ hö\r\nas dlfjhas dflasd fasdlkfh ";

              var lex = new Lexer(text) {Matches = Helper.SplitText(text) };

              lex.EatComments();

              Assert.AreEqual(1, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(0, lex.Index);
              Assert.AreEqual(10, lex.Matches.Count);

              Assert.AreEqual(35, lex.Tokens[0].Position);
              Assert.AreEqual(36, lex.Tokens[0].Length);
              Assert.AreEqual(0, lex.Line);
        }
Ejemplo n.º 20
0
        public void LineComment_without_EOF2()
        {
            const string text = " option farz = true;  // this is a comment until end of line\r\n message...";

              var lex = new Lexer(text) { Matches = Helper.SplitText(text) };

              lex.EatComments();

              Assert.AreEqual(1, lex.Tokens.Count);
              Assert.AreEqual(0, lex.Errors.Count);
              Assert.AreEqual(0, lex.Index);
              Assert.AreEqual(10, lex.Matches.Count);

              Assert.AreEqual(22, lex.Tokens[0].Position);
              Assert.AreEqual(38, lex.Tokens[0].Length);
              Assert.AreEqual(0, lex.Line);
        }