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