Предыдущая серия была тут - Коротко. Делаем тесты к скриптовым словам №2.
Ну и чтобы проиллюстрировать "красоту" или "уродство" подхода протестируем собственно слова @( и @[.
Их код:
Тесты к ним:
Собственно рядом со словами определяем тесты к словам.
А в отдельном файле - вызываем эти тесты.
Ну и чтобы проиллюстрировать "красоту" или "уродство" подхода протестируем собственно слова @( и @[.
Их код:
// DogAndBracket.ms.dict USES axiom:Tl3TokenType axiom_push.ms.dict core.ms.dict io.ms.dict macro.ms.dict NoCapsLock.ms.dict params.ms.dict arrays.ms.dict Testing.ms.dict ; Procedure DogAndBracket String in aBracketOpen String in aBracketClose INTERFACE var l_Parser Ctx:Parser >>> l_Parser ARRAY var l_A l_A := [ ] l_Parser pop:Parser:NextToken while true begin String var l_Token l_Parser pop:Parser:TokenLongString >>> l_Token TOKEN_TYPE var l_TokenType l_Parser pop:Parser:TokenType >>> l_TokenType if ( l_TokenType = Tl3TokenType::l3_ttSymbol ) then begin ( l_Token = NameOf ( ) ?Fail 'Вложенные скобки пока не поддерживаются' ( l_Token = NameOf [ ) ?Fail 'Вложенные скобки пока не поддерживаются' if ( l_Token = aBracketClose ) then begin aBracketOpen Ctx:Parser:PushSymbol l_A .slice> 2 .for> begin TOKEN in aSymbol TOKEN_TYPE in aTokenType axiom:PushSymbol @ aSymbol aTokenType axiom:Push end l_Token Ctx:Parser:PushSymbol break end //l_Token = aBracketClose end // l_TokenType = Tl3TokenType::l3_ttSymbol if ( l_TokenType = Tl3TokenType::l3_ttInteger ) then begin l_Parser pop:Parser:TokenInt >>>[] l_A end // l_TokenType = Tl3TokenType::l3_ttInteger else begin l_Token >>>[] l_A end // l_TokenType = Tl3TokenType::l3_ttInteger l_TokenType >>>[] l_A l_Parser pop:Parser:NextToken end // while true ; // DogAndBracket MACRO @( %SUMMARY ' Компилирует СПИСОК адресов слов. Аналог ( @ X1 @ X2 .. @ XN ) ' ; NameOf ( NameOf ) DogAndBracket ; // @( TestsFor @( Test T1 @( 1 2 3 4 5 6 1 2 + '123' ) WHILE ( StackLevel > 0 ) Print ; ; // TestsFor @( MACRO @[ %SUMMARY ' Компилирует МАССИВ адресов слов. Аналог [ @ X1 @ X2 .. @ XN ] ' ; NameOf [ NameOf ] DogAndBracket ; // @[ TestsFor @[ Test T1 @[ 1 2 3 4 5 6 1 2 + '123' ] WHILE ( StackLevel > 0 ) Print ; ; // TestsFor @[
Тесты к ним:
// DogAndBracket.ms.script USES DogAndBracket.ms.dict Testing.ms.dict Documentation.ms.dict ; Test DogAndBracketTest RunTests.in.array @[ @( @[ ] %REMARK 'Запускаем тесты к указанным скриптовым словам' USES CodeDump.ms.dict ; @SELF DumpElement %REMARK 'Дампим собственный код в стандартный вывод чисто для отладки' ; // DogAndBracketTest DogAndBracketTest
Собственно рядом со словами определяем тесты к словам.
А в отдельном файле - вызываем эти тесты.
Комментариев нет:
Отправить комментарий