Skip to content

Commit fb12d30

Browse files
authored
Merge pull request EvilBeaver#1488 from sfaqer/feature/excInfoRethrow
Пробрасывание информации об ошибке через ВызватьИсключение
2 parents 0d2445c + 3f7c479 commit fb12d30

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

src/ScriptEngine/Machine/MachineInstance.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,12 +1250,20 @@ private void RaiseException(int arg)
12501250
else
12511251
{
12521252
var exceptionValue = _operationStack.Pop().GetRawValue();
1253-
if (exceptionValue is ExceptionInfoContext { IsErrorTemplate: true } excInfo)
1253+
if (exceptionValue is ExceptionInfoContext { IsErrorTemplate: true } excTemplateInfo)
1254+
{
1255+
throw new ParametrizedRuntimeException(
1256+
excTemplateInfo.Description,
1257+
excTemplateInfo.Parameters,
1258+
excTemplateInfo.InnerException
1259+
);
1260+
}
1261+
else if (exceptionValue is ExceptionInfoContext { IsErrorTemplate: false } excInfo)
12541262
{
12551263
throw new ParametrizedRuntimeException(
12561264
excInfo.Description,
1257-
excInfo.Parameters,
1258-
excInfo.InnerException
1265+
ValueFactory.Create(),
1266+
excInfo
12591267
);
12601268
}
12611269
else

tests/global-funcs.os

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
ВсеТесты.Добавить("Тест_ДолженПроверитьКраткоеПредставлениеОшибки");
7979
ВсеТесты.Добавить("Тест_ДолженПроверитьПодробноеПредставлениеОшибки");
8080
ВсеТесты.Добавить("Тест_ДолженПроверитьИнформацияОбОшибкеСПричиной");
81+
ВсеТесты.Добавить("Тест_ДолженПроверитьИнформацияОбОшибкеПробрасываетсяПриВызовеИсключения");
8182

8283
ВсеТесты.Добавить("Тест_ДолженПроверитьОбъединениеПутей");
8384

@@ -933,6 +934,41 @@
933934

934935
КонецПроцедуры
935936

937+
Процедура Тест_ДолженПроверитьИнформацияОбОшибкеПробрасываетсяПриВызовеИсключения() Экспорт
938+
939+
Попытка
940+
ВыброситьТестовоеИсключение();
941+
Исключение
942+
ИнформацияОбОшибке = ИнформацияОбОшибке();
943+
КонецПопытки;
944+
945+
юТест.ПроверитьИстину(ЗначениеЗаполнено(ИнформацияОбОшибке), "Исключение не было брошено");
946+
947+
Попытка
948+
ВызватьИсключение ИнформацияОбОшибке;
949+
Исключение
950+
ИнформацияОбОшибке = ИнформацияОбОшибке();
951+
952+
юТест.ПроверитьИстину(
953+
СтрНайти(ИнформацияОбОшибке.Описание, "тест-тест-тест") > 0,
954+
"Сообщение в проброшенном исключении должно содержать текст оригинального исключения"
955+
);
956+
957+
юТест.ПроверитьТип(
958+
ИнформацияОбОшибке.Причина,
959+
"ИнформацияОбОшибке",
960+
"У проброшенного исключения должна быть заполнена причина, оригинальным исключением"
961+
);
962+
963+
юТест.ПроверитьИстину(
964+
СтрНайти(ИнформацияОбОшибке.Причина.Описание, "тест-тест-тест") > 0,
965+
"Оригинальное сообщение должно содержать текст исключения"
966+
);
967+
968+
КонецПопытки;
969+
970+
КонецПроцедуры
971+
936972
Процедура Тест_ДолженПроверитьОбъединениеПутей() Экспорт
937973
СИ = Новый СистемнаяИнформация();
938974
Если Найти(СИ.ВерсияОС,"Windows") > 0 Тогда

0 commit comments

Comments
 (0)