File tree Expand file tree Collapse file tree 5 files changed +78
-7
lines changed
OneScript.Language/LexicalAnalysis Expand file tree Collapse file tree 5 files changed +78
-7
lines changed Original file line number Diff line number Diff line change @@ -559,6 +559,43 @@ public void PreprocessingLexer_DirectiveNotOnNewLine()
559559 Assert . Throws < SyntaxErrorException > ( ( ) => { while ( pp . NextLexem ( ) . Token != Token . EndOfText ) ; } ) ;
560560 }
561561
562+ [ Fact ]
563+ public void PreprocessingLexer_DirectiveNotOnSingleLine ( )
564+ {
565+ var pp = new PreprocessingLexer ( ) ;
566+
567+ var code = @"
568+ #Если Нет
569+ Тогда
570+ F;
571+ #КонецОбласти
572+ " ;
573+
574+ pp . Code = code ;
575+ Assert . Throws < SyntaxErrorException > ( ( ) => { while ( pp . NextLexem ( ) . Token != Token . EndOfText ) ; } ) ;
576+ }
577+
578+ [ Fact ]
579+ public void PreprocessingLexer_ExcludedLines ( )
580+ {
581+ var pp = new PreprocessingLexer ( ) ;
582+ pp . Define ( "Да" ) ;
583+
584+ var code = @"
585+ #Если Да Тогда
586+ F;
587+ #Иначе
588+ !!
589+ #КонецЕсли
590+ " ;
591+
592+ pp . Code = code ;
593+
594+ Lexem lex ;
595+ do { lex = pp . NextLexem ( ) ; } while ( pp . NextLexem ( ) . Token != Token . EndOfText ) ;
596+ Assert . Equal ( Token . EndOfText , lex . Token ) ;
597+ }
598+
562599 private string GetPreprocessedContent ( PreprocessingLexer pp , string code )
563600 {
564601 pp . Code = code ;
Original file line number Diff line number Diff line change @@ -371,13 +371,13 @@ private void SkipTillNextDirective()
371371
372372 if ( _lastExtractedLexem . Token == Token . If )
373373 PushBlock ( ) ;
374- else if ( _lastExtractedLexem . Token == Token . EndIf )
375- {
376- if ( BlockLevel ( ) > currentLevel )
377- PopBlock ( ) ;
378- else if ( BlockLevel ( ) == currentLevel )
379- break ;
380- }
374+ else if ( _lastExtractedLexem . Token == Token . EndIf && BlockLevel ( ) > currentLevel )
375+ PopBlock ( ) ;
376+ else if ( BlockLevel ( ) == currentLevel &&
377+ ( _lastExtractedLexem . Token == Token . EndIf ||
378+ _lastExtractedLexem . Token == Token . ElseIf ||
379+ _lastExtractedLexem . Token == Token . Else ) )
380+ break ;
381381 }
382382
383383 _lexer . UnexpectedCharacterFound -= SkipErrors ;
Original file line number Diff line number Diff line change 77
88 ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоОбластиКомпилируются" );
99 ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоИспользоватьНеКомпилируетсяЕслиНачалсяКод" );
10+ ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоМногострочныеДирективыНеКомпилируются" );
11+ ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоИсключенныеСтрокиПропускаются" );
1012
1113 Возврат ВсеТесты;
1214
4345
4446КонецФункции
4547
48+ Функция ТестДолжен_ПроверитьЧтоМногострочныеДирективыНеКомпилируются () Экспорт
49+
50+ юТест.ПроверитьРавенство(ФайлКомпилируется("preprocessor/multiline-fail.os" ), Ложь ,
51+ "Файл multiline-fail.os компилируется, хотя не должен!"
52+ );
53+
54+ КонецФункции
55+
56+ Функция ТестДолжен_ПроверитьЧтоИсключенныеСтрокиПропускаются () Экспорт
57+
58+ юТест.ПроверитьРавенство(ФайлКомпилируется("preprocessor/excluded.os" ), Истина ,
59+ "Файл excluded.os не компилируется, хотя должен!"
60+ );
61+
62+ КонецФункции
63+
Original file line number Diff line number Diff line change 1+ #Если Windows И Linux Тогда
2+ !!
3+ #КонецЕсли
4+
5+ #Если Windows ИЛИ Linux Тогда //!! ok
6+
7+ #ИначеЕсли НЕ MacOS Тогда //??
8+ !!
9+ #Иначе //!!
10+ !!??
11+ #КонецЕсли
Original file line number Diff line number Diff line change 1+ #Если Windows
2+ или Linux
3+ Тогда
4+ //!!
5+ #КонецЕсли
You can’t perform that action at this time.
0 commit comments