diff --git a/src/ScriptEngine/Machine/MachineInstance.cs b/src/ScriptEngine/Machine/MachineInstance.cs index df2d33be3..045163956 100644 --- a/src/ScriptEngine/Machine/MachineInstance.cs +++ b/src/ScriptEngine/Machine/MachineInstance.cs @@ -1250,12 +1250,20 @@ private void RaiseException(int arg) else { var exceptionValue = _operationStack.Pop().GetRawValue(); - if (exceptionValue is ExceptionInfoContext { IsErrorTemplate: true } excInfo) + if (exceptionValue is ExceptionInfoContext { IsErrorTemplate: true } excTemplateInfo) + { + throw new ParametrizedRuntimeException( + excTemplateInfo.Description, + excTemplateInfo.Parameters, + excTemplateInfo.InnerException + ); + } + else if (exceptionValue is ExceptionInfoContext { IsErrorTemplate: false } excInfo) { throw new ParametrizedRuntimeException( excInfo.Description, - excInfo.Parameters, - excInfo.InnerException + ValueFactory.Create(), + excInfo ); } else diff --git a/tests/global-funcs.os b/tests/global-funcs.os index a83cd129c..3094086de 100644 --- a/tests/global-funcs.os +++ b/tests/global-funcs.os @@ -78,6 +78,7 @@ ВсеТесты.Добавить("Тест_ДолженПроверитьКраткоеПредставлениеОшибки"); ВсеТесты.Добавить("Тест_ДолженПроверитьПодробноеПредставлениеОшибки"); ВсеТесты.Добавить("Тест_ДолженПроверитьИнформацияОбОшибкеСПричиной"); + ВсеТесты.Добавить("Тест_ДолженПроверитьИнформацияОбОшибкеПробрасываетсяПриВызовеИсключения"); ВсеТесты.Добавить("Тест_ДолженПроверитьОбъединениеПутей"); @@ -933,6 +934,41 @@ КонецПроцедуры +Процедура Тест_ДолженПроверитьИнформацияОбОшибкеПробрасываетсяПриВызовеИсключения() Экспорт + + Попытка + ВыброситьТестовоеИсключение(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + + юТест.ПроверитьИстину(ЗначениеЗаполнено(ИнформацияОбОшибке), "Исключение не было брошено"); + + Попытка + ВызватьИсключение ИнформацияОбОшибке; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + юТест.ПроверитьИстину( + СтрНайти(ИнформацияОбОшибке.Описание, "тест-тест-тест") > 0, + "Сообщение в проброшенном исключении должно содержать текст оригинального исключения" + ); + + юТест.ПроверитьТип( + ИнформацияОбОшибке.Причина, + "ИнформацияОбОшибке", + "У проброшенного исключения должна быть заполнена причина, оригинальным исключением" + ); + + юТест.ПроверитьИстину( + СтрНайти(ИнформацияОбОшибке.Причина.Описание, "тест-тест-тест") > 0, + "Оригинальное сообщение должно содержать текст исключения" + ); + + КонецПопытки; + +КонецПроцедуры + Процедура Тест_ДолженПроверитьОбъединениеПутей() Экспорт СИ = Новый СистемнаяИнформация(); Если Найти(СИ.ВерсияОС,"Windows") > 0 Тогда