пятница, 28 августа 2015 г.

#1131. Вводная. Делаем тесты к скриптовым словам

Предыдущая серия была тут - Кодогенерация. Вынесем конкретную модель и конкретные шаблоны во внешние словари.

Теперь отвлечёмся от кодогенерации и немножко поговорим о тестах.

Была тут мысль - ToDo. Сделать тесты к скриптовым словам.

Теперь эта мысль оформилась.

Попробую рассказать как.

Вот есть словарь функций:

string.ms.dict

USES
 Documentation.ms.dict
 params.ms.dict
 core.ms.dict
 map.ms.dict
;

: (string)
 ^ IN aValue
 aValue DO ToPrintable
; // (string)

STRING FUNCTION string:CatWihAny
 STRING IN aString
 IN aValue
 aString aValue ToPrintable Cat =: Result
; // string:CatWihAny

STRING FUNCTION any:Cat
 ARRAY IN anArray
 anArray .map> ToPrintable strings:Cat =: Result
; // any:Cat

STRING FUNCTION (+)?
 STRING in aPrefix
 STRING right aSuffix
 %SUMMARY 'Если aSuffix не пустой, то возвращает сумму aPrefix и aSuffix, иначе возвращает пустую строку' ;
 Result := ''
 STRING VAR l_Suffix
 aSuffix =: l_Suffix
 if ( l_Suffix =/= '' ) then
  ( aPrefix l_Suffix Cat =: Result )
; // (+)?

STRING FUNCTION ?(+)
 STRING in aPrefix
 STRING right aSuffix
 %SUMMARY 'Если aPrefix не пустой, то возвращает сумму aPrefix и aSuffix, иначе возвращает пустую строку' ;
 Result := ''
 if ( aPrefix =/= '' ) then
  ( aPrefix aSuffix Cat =: Result )
; // ?(+)

STRING FUNCTION strings:CatSep>
 STRING right aSep
 ARRAY right aValues
 aValues aSep strings:CatSep =: Result
; // strings:CatSep>

WordAlias CatSep> strings:CatSep>

И тесты к нему:

String.ms.script

USES
 string.ms.dict
;

'' (+)? 'B' Print
'A' (+)? 'B' Print
'A' (+)? '' Print
'------------------' Print

'' ?(+) 'B' Print
'A' ?(+) 'B' Print
'A' ?(+) '' Print
'------------------' Print

strings:CatSep> ' ' [ 'A' 'B' ] Print
strings:CatSep> ' ' [ 'A ' 'B' ] Print
strings:CatSep> ' ' [ 'A ' ' B' ] Print
strings:CatSep> ' ' [ 'A' ' B' ] Print
strings:CatSep> ' ' [ '' 'B' ] Print
strings:CatSep> ' ' [ 'A' '' ] Print
'------------------' Print

[ 'A' 123 'B' ] any:Cat Print
'------------------' Print

И вывод тестов:

B
AB

------------------

AB
A
------------------
A B
A B
A  B
A  B
B
A
------------------
A123B
------------------

Функции более-менее протестированы.

Покрываются разные условные участки.

Уже конечно неплохо, но пойдём дальше.

Но ведь можно тесты засунуть "внутрь" функций и запускать их извне. Автоматом.

Дальше постараюсь рассказать как.

Комментариев нет:

Отправить комментарий