четверг, 7 ноября 2013 г.

GUI-тестирование "по-русски". Про контроль стека и числа переданных параметров

Вот тут - http://18delphi.blogspot.ru/2013/11/gui-3.html я писал про слово "между".

А что делать если кто-то захочет вызвать его вот так:

2 между ( 2 5 10 )

?

Компилятор это - спокойно "переварит", но код будет выполняться с ошибками.

Да ещё и на стеке значений будут накапливаться "паразитные значения".

Как этого избежать?

На этот случай у нас есть "специальные" слова "для контроля за стеком значений".

Слова :

#BeginControlStack - начинает контроль стека (рекурсивно)
#EndControlStack - заканчивает контроль стека (рекурсивно) и проверяет, что верхушка стека сдвинулась на выражение указанное в лямбде.

Как это применяется?

А вот так:

BOOLEAN WORDWORKERFUNCTION "строго между" INTEGER IN anX
 INTEGER VAR "Нижняя граница"
 INTEGER VAR "Верхняя граница"

 #BeginControlStack // - начинаем контроль стека
 WordToWork // - слово справа, а на самом деле может быть "последовательность слов", за счёт оператора "скобки" (о нём я расскажу позже)
 DO // - вычисляем переданное слово
 #EndControlStack ( 2 == ) // - заканчиваем контроль стека и убеждаемся, что на стек попало РОВНО 2 значения

 =: "Верхняя граница" // - снимаем со стека верхнюю границу
 =: "Нижняя граница" // - снимаем со стека нижнюю границу
 ( anX больше "Нижняя граница" ) И ( anX меньше "Верхняя граница" ) =: Result
END // "строго между"

Тогда код:

2 между ( 2 5 )

- нормально выполнится.

 А код:

2 между ( 2 5 10 )

- поднимет ошибку.

На самом деле есть техника проверки количества передаваемых параметров при компиляции скриптов.

Но это - отдельная тема.

Об этом я ОБЯЗАТЕЛЬНО напишу - но чуть позже.

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

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