public void PreprocessingLexer_If_True() { var pp = new PreprocessingLexer(); pp.Define("Сервер"); pp.Define("Клиент"); var code = @" #Если Сервер и Клиент Тогда F; #КонецЕсли"; pp.Code = code; var lex = pp.NextLexem(); Assert.Equal(LexemType.Identifier, lex.Type); Assert.Equal("F", lex.Content); lex = pp.NextLexem(); Assert.Equal(LexemType.EndOperator, lex.Type); lex = pp.NextLexem(); Assert.Equal(LexemType.EndOfText, lex.Type); }
public void PreprocessingLexer_IfElse() { var pp = new PreprocessingLexer(); pp.Define("Сервер"); pp.Define("Клиент"); pp.Define("ВебКлиент"); var code = @" #Если Сервер и Не Клиент Тогда А #ИначеЕсли ВебКлиент Тогда Б #ИначеЕсли СовсемНеКлиент Тогда Х #Иначе В #КонецЕсли"; pp.Code = code; Lexem lex; lex = pp.NextLexem(); Assert.True(lex.Content == "Б"); lex = pp.NextLexem(); Assert.Equal(Token.EndOfText, lex.Token); Assert.Equal(LexemType.EndOfText, lex.Type); }
public void PreprocessingLexer_NoRegionNameWithComment() { var pp = new PreprocessingLexer(); var code = @" #Область // no name #КонецОбласти F"; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => pp.NextLexem()); }
public void PreprocessingLexer_SymbolsAfterEndRegion() { var pp = new PreprocessingLexer(); var code = @" #Область reg #КонецОбласти reg F"; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => pp.NextLexem()); }
public void PreprocessingLexer_BadRegionName() { var pp = new PreprocessingLexer(); var code = @" #Область -reg #КонецОбласти F"; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => pp.NextLexem()); }
public void PreprocessingLexer_Else_Without_If() { var pp = new PreprocessingLexer(); pp.Define("Сервер"); var code = @" #Иначе F; #КонецЕсли"; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => pp.NextLexem()); }
public void PreprocessingLexer_SimpleRegion() { var pp = new PreprocessingLexer(); var code = @" #Область reg1 #КонецОбласти F"; pp.Code = code; var lex = pp.NextLexem(); Assert.Equal("F", lex.Content); }
public void PreprocessingLexer_Unclosed_IfBlock() { var pp = new PreprocessingLexer(); pp.Define("Сервер"); var code = @" #Если Сервер и Клиент Тогда F; "; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => pp.NextLexem()); }
public void PreprocessingLexer_ExcludedLines() { var pp = new PreprocessingLexer(); pp.Define("Да"); var code = @" #Если Да Тогда F; #Иначе !! #КонецЕсли "; pp.Code = code; Lexem lex; do { lex = pp.NextLexem(); } while (pp.NextLexem().Token != Token.EndOfText); Assert.Equal(Token.EndOfText, lex.Token); }
private string GetPreprocessedContent(PreprocessingLexer pp, string code) { pp.Code = code; Lexem lex = Lexem.Empty(); StringBuilder builder = new StringBuilder(); while (lex.Type != LexemType.EndOfText) { lex = pp.NextLexem(); builder.Append(lex.Content); } return(builder.ToString().Trim()); }
public void PreprocessingLexer_ExpressionUnexpected() { var pp = new PreprocessingLexer(); pp.Define("Сервер"); var code = @" #Если Сервер ИЛИ + Тогда F; #КонецЕсли"; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => pp.NextLexem()); }
public void PreprocessingLexer_Endif_Without_If() { var pp = new PreprocessingLexer(); pp.Define("Да"); var code = @" #КонецЕсли H; "; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => pp.NextLexem()); }
public void PreprocessingLexer_DirectiveNotOnNewLine() { var pp = new PreprocessingLexer(); var code = @" #Область reg F; #КонецОбласти "; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => { while (pp.NextLexem().Token != Token.EndOfText) { ; } }); }
public void PriorityOperators() { var pp = new PreprocessingLexer(); pp.Define("Да"); var code = @" #Если Нет и СовсемНет ИЛИ Да Тогда F; #КонецЕсли"; pp.Code = code; var lex = pp.NextLexem(); Assert.Equal("F", lex.Content); }
public void PriorityOperators_WithParenthesis() { var pp = new PreprocessingLexer(); pp.Define("Да"); var code = @" #Если Нет и (Да или Да) Тогда F; #КонецЕсли"; pp.Code = code; var lex = pp.NextLexem(); Assert.Equal(Token.EndOfText, lex.Token); }
public void ParsingFirstNot() { var pp = new PreprocessingLexer(); pp.Define("Да"); var code = @" #Если Не Да Тогда F; #КонецЕсли"; pp.Code = code; var lex = pp.NextLexem(); Assert.Equal(Token.EndOfText, lex.Token); }
public void PreprocessingLexer_NoEndRegion() { var pp = new PreprocessingLexer(); var code = @" #Область reg1 #Область reg2 #КонецОбласти F"; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => { while (pp.NextLexem().Token != Token.EndOfText) { ; } }); }
public void PreprocessingLexer_If_False() { var pp = new PreprocessingLexer(); pp.Define("Сервер"); var code = @" #Если Сервер и Клиент Тогда F; #КонецЕсли"; pp.Code = code; var lex = pp.NextLexem(); Assert.Equal(Token.EndOfText, lex.Token); Assert.Equal(LexemType.EndOfText, lex.Type); }
public void PreprocessingLexer_Extra_Endif() { var pp = new PreprocessingLexer(); pp.Define("Да"); var code = @" #Если Да Тогда F; #КонецЕсли #КонецЕсли "; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => { while (pp.NextLexem().Token != Token.EndOfText) { ; } }); }
public void PreprocessingLexer_Unclosed_ElseBlock() { var pp = new PreprocessingLexer(); pp.Define("Да"); var code = @" #Если Да и Не Да Тогда F; #Иначе G; "; pp.Code = code; Assert.Throws <SyntaxErrorException>(() => { while (pp.NextLexem().Token != Token.EndOfText) { ; } }); }
public void PreprocessingLexer_MultipleNestedRegions() { var pp = new PreprocessingLexer(); var code = @" #Region reg1 #Область reg2 #Область if // keywords are ok #endRegion #КонецОбласти // reg 1 #endRegion # Область reg1 // same name is ok #КонецОбласти F"; pp.Code = code; var lex = pp.NextLexem(); Assert.Equal("F", lex.Content); }