Skip to content

Commit

Permalink
Перенести перехват исключения в загрузчик файла
Browse files Browse the repository at this point in the history
Перехват исключения фактически нужен "на будущее".
Для возможности пропустить незагруженный файл и обработать остальные,
но со статусом ошибки для тестов в целом.
Пока установки такого статуса нету, поэтому будет вызвано исключение
и все тесты не выполнятся.
Для этих же целей дерево тестов нужно сформировать заранее,
чтобы функция всегда его возвращала, после замены вызова исключения
на установку статуса ошибки.

Сейчас перехват исключения поможет быстро узнать имя файла,
который не удалось загруить.

см: vanessa-opensource#1095
  • Loading branch information
BarinovIN committed Aug 30, 2023
1 parent 9f0aaad commit 6578936
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -181,35 +181,11 @@
&НаКлиенте
Функция ЗагрузитьФайл(КонтекстЯдра, ФайлОбработки)
ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла");
Попытка
ДеревоТестовФайла = ЗагрузчикФайла.Загрузить(КонтекстЯдра, ФайлОбработки.ПолноеИмя);
Результат = ДеревоТестовФайла;
Если ДеревоТестовФайла.Строки.Количество() > 0 Тогда
Результат = ДеревоТестовФайла.Строки[0];
КонецЕсли;

Исключение
ШаблонСообщения = НСтр("ru = 'Не удалось загрузить файл %1
|%2'");

ИнформацияОбОшибке = ИнформацияОбОшибке();
ПолныйТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
КраткийТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);

ПолныйТекстОшибки = СтрШаблон(ШаблонСообщения, ФайлОбработки.ПолноеИмя, ПолныйТекстОшибки);
КраткийТекстОшибки = СтрШаблон(ШаблонСообщения, ФайлОбработки.Имя, КраткийТекстОшибки);

КонтекстЯдра.Отладка(ПолныйТекстОшибки);
КонтекстЯдра.ЗафиксироватьОшибкуВЖурналеРегистрации("ЗагрузкаТестов", ПолныйТекстОшибки);
КонтекстЯдра.ВывестиСообщение(КраткийТекстОшибки, СтатусСообщения.Внимание);

// Тут достаточно взвести флаг ошибки для всех тестов целиком и продолжить, но непонятно как взвести флаг ошибки отсюда.
// Поэтому пока вызываем исключение.
// Лучше ведь починить и перезапустить, чем пропустить ошибку из-за незагруженного файла с тестами.
ВызватьИсключение;

Результат = Неопределено;
КонецПопытки;
ДеревоТестовФайла = ЗагрузчикФайла.Загрузить(КонтекстЯдра, ФайлОбработки.ПолноеИмя);
Результат = ДеревоТестовФайла;
Если ДеревоТестовФайла.Строки.Количество() > 0 Тогда
Результат = ДеревоТестовФайла.Строки[0];
КонецЕсли;

Возврат Результат;
КонецФункции
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,33 +140,54 @@
ПолноеИмяБраузераТестов = КонтекстЯдра.Объект.ПолноеИмяБраузераТестов;

ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов");
ДеревоТестов = Неопределено;
Для Сч = 1 По СтрЧислоСтрок(Путь) Цикл
ФайлОбработки = Новый Файл(СтрПолучитьСтроку(Путь, Сч));
ПроверитьКорректностьФайла(ФайлОбработки);
ИмяКонтейнера = СтрПолучитьСтроку(Путь, 1);
ДеревоТестов = ПостроительДереваТестов.СоздатьКонтейнер(ИмяКонтейнера);
Попытка
Для Сч = 1 По СтрЧислоСтрок(Путь) Цикл
ФайлОбработки = Новый Файл(СтрПолучитьСтроку(Путь, Сч));
ПроверитьКорректностьФайла(ФайлОбработки);

ПодключитьВнешнююОбработку(КонтекстЯдра, ФайлОбработки);

ИмяОбработки = "";
МассивСообщений = Неопределено;

КонтейнерССервернымиТестамиОбработки = ЗагрузитьФайлНаСервере(ФайлОбработки.ПолноеИмя, ИмяОбработки,
КонтекстЯдра.Объект, МассивСообщений);
КонтейнерСКлиентскимиТестамиОбработки = ЗагрузитьФайлНаКлиенте(ПостроительДереваТестов, ФайлОбработки,
КонтекстЯдра, ИмяОбработки);
Если КонтейнерСКлиентскимиТестамиОбработки.Строки.Количество() > 0 Тогда
КонтейнерССервернымиТестамиОбработки.Строки.Добавить(КонтейнерСКлиентскимиТестамиОбработки);
КонецЕсли;
Если КонтейнерССервернымиТестамиОбработки.Строки.Количество() > 0 Тогда
ДеревоТестов.Строки.Добавить(КонтейнерССервернымиТестамиОбработки);
КонецЕсли;

КонтекстЯдра.ВывестиНакопленныеСообщенияОтСервераВРежимеОтладки(МассивСообщений);
КонецЦикла;

Если ДеревоТестов = Неопределено Тогда
ДеревоТестов = ПостроительДереваТестов.СоздатьКонтейнер(ФайлОбработки.Путь);
КонецЕсли;
Исключение

ПодключитьВнешнююОбработку(КонтекстЯдра, ФайлОбработки);
ШаблонСообщения = НСтр("ru = 'Не удалось загрузить файл %1
|%2'");

ИмяОбработки = "";
МассивСообщений = Неопределено;

КонтейнерССервернымиТестамиОбработки = ЗагрузитьФайлНаСервере(ФайлОбработки.ПолноеИмя, ИмяОбработки,
КонтекстЯдра.Объект, МассивСообщений);
КонтейнерСКлиентскимиТестамиОбработки = ЗагрузитьФайлНаКлиенте(ПостроительДереваТестов, ФайлОбработки,
КонтекстЯдра, ИмяОбработки);
Если КонтейнерСКлиентскимиТестамиОбработки.Строки.Количество() > 0 Тогда
КонтейнерССервернымиТестамиОбработки.Строки.Добавить(КонтейнерСКлиентскимиТестамиОбработки);
КонецЕсли;
Если КонтейнерССервернымиТестамиОбработки.Строки.Количество() > 0 Тогда
ДеревоТестов.Строки.Добавить(КонтейнерССервернымиТестамиОбработки);
КонецЕсли;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПолныйТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
КраткийТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);

КонтекстЯдра.ВывестиНакопленныеСообщенияОтСервераВРежимеОтладки(МассивСообщений);
КонецЦикла;
ПолныйТекстОшибки = СтрШаблон(ШаблонСообщения, Путь, ПолныйТекстОшибки);
КраткийТекстОшибки = СтрШаблон(ШаблонСообщения, Путь, КраткийТекстОшибки);

КонтекстЯдра.Отладка(ПолныйТекстОшибки);
КонтекстЯдра.ЗафиксироватьОшибкуВЖурналеРегистрации("ЗагрузкаТестов", ПолныйТекстОшибки);
КонтекстЯдра.ВывестиСообщение(КраткийТекстОшибки, СтатусСообщения.Внимание);

// Тут достаточно взвести флаг ошибки для всех тестов целиком и продолжить, но непонятно как взвести флаг ошибки отсюда.
// Поэтому пока вызываем исключение.
// Лучше ведь починить и перезапустить, чем пропустить ошибку из-за незагруженного файла с тестами.
ВызватьИсключение;

КонецПопытки;

Возврат ДеревоТестов;
КонецФункции
Expand Down

0 comments on commit 6578936

Please sign in to comment.