Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 11:03

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 27 дек 2018, 14:25 
Не в сети

Сообщения: 350
Хочу оформить тесты в виде процедур. Но в отчёте нужно написать, какой тест упал. Для этого желательно узнать имя текущей процедуры - иначе придётся либо дублировать, либо вызывать по имени. Оба варианта не очень хороши. Возможно ли узнать имя текущей процедуры?

Или даже так - есть указатель на процедуру, задача - узнать её имя.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 27 дек 2018, 17:02 
Не в сети
Администратор
Аватара пользователя

Сообщения: 86
Странно. А как вызвать процедуру, если имени её не знаешь?)))
Код: "OBERON"
  1.  
  2. Out.StringLn("Begin testing TestingProcedure");
  3. TestingProcedure(_param_);
  4. Out.StringLn("End testing TestingProcedure");
  5.  

_________________
Действия профессионала предсказуемы. Но в мире полно любителей!


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 27 дек 2018, 17:24 
Не в сети

Сообщения: 350
В исполнитель модульного теста лучше всего передавать процедуру в качестве параметра. В общем-то очевидно, что процедура может быть параметром. Так что Ваши смайлики - это самоирония, по всей видимости. Повторять более одного раза название процедуры - это отстой. Даже в Си можно этого избежать.

По сути дела, я выдрал кусок из кода, показывающего стек. Теперь по ADR(Процедура) можно узнать её имя. Но если процедура приходит в качестве параметра типа PROCEDURE, то ничего не работает.


Последний раз редактировалось budden 27 дек 2018, 17:33, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 27 дек 2018, 17:30 
Не в сети
Администратор
Аватара пользователя

Сообщения: 86
Как по мне, так
Код: "OBERON"
  1.  
  2. IF bDebug THEN
  3. Out.StringLn("Begin test");
  4. ...
  5. Out.StringLn("End test")
  6. END;
  7.  

вполне достаточно.

_________________
Действия профессионала предсказуемы. Но в мире полно любителей!


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 27 дек 2018, 17:34 
Не в сети

Сообщения: 350
Код: "OBERON"
  1.  
  2. PROCEDURE УзнайИмяПроцедуры*(з:PROCEDURE):POINTER TO ARRAY OF CHAR;
  3. (* По мотивам StdDebug.ShowStack *)
  4. VAR ref, end, a: INTEGER; mod: Kernel.Module;
  5. modName, name: Kernel.Name;
  6. res: INTEGER; nn: Kernel.Utf8Name;
  7. Результат : POINTER TO ARRAY OF CHAR;
  8. длинаРезультата : INTEGER;
  9. BEGIN
  10. длинаРезультата := 1 (* символ конца строки *);
  11. a := SYSTEM.VAL(INTEGER,з);
  12. mod := Kernel.modList;
  13. WHILE (mod # NIL) & ((a < mod.code) OR (a >= mod.code + mod.csize)) DO mod := mod.next END;
  14. IF mod # NIL THEN
  15. DEC(a, mod.code);
  16. IF mod.refcnt >= 0 THEN
  17. Kernel.GetModName(mod, modName);
  18. INC(длинаРезультата,LEN(modName$));
  19. ref := mod.refs;
  20. REPEAT Kernel.GetRefProc(ref, end, nn) UNTIL (end = 0) OR (a < end);
  21. IF a < end THEN
  22. Strings.Utf8ToString(nn, name, res);
  23. INC(длинаРезультата, 1 (* точка *) + LEN(name$));
  24. NEW(Результат, длинаРезультата);
  25. Результат^ := modName + "." + name;
  26. RETURN Результат END END END;
  27. NEW(Результат, длинаРезультата);
  28. Результат^ := "";
  29. RETURN Результат END УзнайИмяПроцедуры;
  30.  


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

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


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

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


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club