OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:41

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 24 Январь, 2008 21:58 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
Хочу написать тестовую программу, для проверки своего модуля ББ после внесения изменений. Как проверять исключения от операторов ASSERT, есть ли такая возможность?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Январь, 2008 13:39 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В принципе, для этого можно использовать Kernel.Try (не пользовался, пробуйте сами) + посмотреть, как там DevDebug это раскручивает (TrapHandler инсталлируется) - там найдёте коды, соотв. разным исключениям времени выполнения.
Вот тут участник форума предлагал свою реализацию try-except: viewtopic.php?f=2&t=294


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Январь, 2008 20:55 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
Спасибо Илья! Посмотрел, получил что требовалось, вот пример:
MODULE T_Trap; (* sia *)
IMPORT StdLog, Kernel;
VAR res, err: INTEGER;

PROCEDURE trapChk();
BEGIN err := Kernel.err END trapChk;

PROCEDURE trapView();
BEGIN END trapView;

PROCEDURE TestAssert(a, b, c: INTEGER);
BEGIN
res := 0; err := 0;
IF a = 21 THEN ASSERT(a = 0, 21); res := 21
ELSIF a = 41 THEN ASSERT(a = 0, 42); res := 42
ELSE res := 99 END;
INC(res, 100);
END TestAssert;

PROCEDURE Do*;
VAR
a, b, c: INTEGER;
BEGIN
Kernel.SetTrapGuard(FALSE);
Kernel.InstallTrapViewer(trapView);
Kernel.InstallTrapChecker(trapChk);

Kernel.Try( TestAssert, 21, 0, 0);
StdLog.String("21 ? res, err = "); StdLog.Int(res); StdLog.Int(err);
StdLog.Bool(err = 21); StdLog.Ln();

Kernel.Try( TestAssert, 41, 0, 0);
StdLog.String("41 ? res, err = "); StdLog.Int(res); StdLog.Int(err);
StdLog.Bool(err = 41); StdLog.Ln();

Kernel.Try( TestAssert, 99, 0, 0);
StdLog.String("0 ? res, err = "); StdLog.Int(res); StdLog.Int(err);
StdLog.Bool(err = 0); StdLog.Ln();

END Do;

END T_Trap.

T_Trap.Do;

(* Log:
21 ? res, err = 0 21 $TRUE
41 ? res, err = 0 42 $FALSE
0 ? res, err = 199 0 $TRUE
*)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB