diff --git a/exts/yaxunit/src/CommonModules/ЮТКонтекст/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТКонтекст/Module.bsl index 2cad9842..6611f55f 100644 --- a/exts/yaxunit/src/CommonModules/ЮТКонтекст/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТКонтекст/Module.bsl @@ -236,6 +236,20 @@ КонецФункции +// КонтекстОшибки +// Возвращает служебный контекст, содержит дополнительные детали ошибки теста +// Параметры: +// ПолучитьССервера - Булево - Получить значение из серверного контекста +// +// Возвращаемое значение: +// Неопределено, Массив из Строка- Детали ошибки +Функция КонтекстДеталиОшибки(ПолучитьССервера = Ложь) Экспорт + + //@skip-check constructor-function-return-section + Возврат ЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), ПолучитьССервера); + +КонецФункции + Функция ОписаниеКонтекста() Экспорт Описание = Новый Структура; @@ -293,6 +307,12 @@ КонецПроцедуры +Процедура УстановитьКонтекстДеталиОшибки(Знач ДанныеКонтекста) Экспорт + + УстановитьЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), ДанныеКонтекста); + +КонецПроцедуры + Процедура УдалитьКонтекст() Экспорт #Если Клиент Тогда @@ -354,4 +374,10 @@ КонецФункции +Функция ИмяКонтекстаДеталиОшибки() + + Возврат "ДеталиОшибки"; + +КонецФункции + #КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТПараметрыЗапуска/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТПараметрыЗапуска/Module.bsl index e42b7e5f..1c2fbb08 100644 --- a/exts/yaxunit/src/CommonModules/ЮТПараметрыЗапуска/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТПараметрыЗапуска/Module.bsl @@ -137,8 +137,8 @@ Исключение - Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ВызватьИсключение СтрШаблон("Ошибка загрузки настроек из файла: '%1'", Ошибка); + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка загрузки настроек из файла"); + ВызватьИсключение; КонецПопытки; diff --git a/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl index d9a306ab..d7653116 100644 --- a/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl @@ -26,10 +26,11 @@ // ИмяСобытия - Строка // ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов // Ошибка - ИнформацияОбОшибке +// - Строка Процедура ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка) Экспорт ТипОшибки = ЮТФабрика.ТипыОшибок().ОшибкаОбработкиСобытия; - Пояснение = СтрШаблон("%1 '%2': %3", ТипОшибки, ИмяСобытия, Ошибка.Описание); + Пояснение = ЮТСообщенияСлужебный.СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка); ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки); Если ОписаниеСобытия.Тест <> Неопределено Тогда @@ -70,7 +71,7 @@ ИначеЕсли ТипОшибки = ЮТФабрика.ТипыОшибок().Пропущен Тогда ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка); Иначе - ДанныеОшибки = ДанныеОшибки(Ошибка, Ошибка.Описание, ТипОшибки); + ДанныеОшибки = ДанныеОшибки(Ошибка, ЮТСообщенияСлужебный.КраткоеСообщениеОшибки(Ошибка), ТипОшибки); КонецЕсли; Тест.Ошибки.Добавить(ДанныеОшибки); @@ -131,7 +132,7 @@ ОбъектПроверки = "проверяемое значение") Экспорт УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение); - ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); + ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки); КонецПроцедуры @@ -147,7 +148,7 @@ Процедура СгенерироватьОшибкуУтверждения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение); - ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); + ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки); КонецПроцедуры @@ -186,7 +187,7 @@ Процедура ЗарегистрироватьОшибкуИнициализацииДвижка(Ошибка, Описание) Экспорт - Ошибка(Ошибка, Описание); + СообщитьОбОшибке(Ошибка, Описание); КонецПроцедуры @@ -324,42 +325,6 @@ КонецПроцедуры -// Форматированный текст ошибки утверждения. -// -// Параметры: -// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки -// ТекстОжидания - Строка - Описание ожидания -// ОбъектПроверки - Строка - Объект проверки -// -// Возвращаемое значение: -// Строка - Форматированный текст ошибки утверждения -Функция ФорматированныйТекстОшибкиУтверждения(Знач ОписаниеПроверки, ТекстОжидания, ОбъектПроверки) Экспорт - - Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.ИмяСвойства) Тогда - ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ОписаниеПроверки.ОбъектПроверки.ИмяСвойства); - Иначе - ВставкаСвойство = ""; - КонецЕсли; - - Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.Представление) Тогда - ПредставлениеЗначения = ОписаниеПроверки.ОбъектПроверки.Представление; - Иначе - ПредставлениеЗначения = СтрШаблон("`%1`", ОписаниеПроверки.ОбъектПроверки.Значение); - КонецЕсли; - - // Заголовок сообщения - ТекстСообщения = ""; - // Тело сообщения - ТекстСообщения = СтрШаблон("ожидали, что %1 %2%3 %4, но это не так.", - ОбъектПроверки, - ПредставлениеЗначения, - ВставкаСвойство, - ТекстОжидания); - - Возврат ТекстСообщения; - -КонецФункции - Функция ДобавитьОписания(ТекстОшибки, ОписаниеПроверки = Неопределено) Экспорт Если ОписаниеПроверки <> Неопределено Тогда @@ -399,18 +364,60 @@ КонецПроцедуры +Процедура ДобавитьПояснениеОшибки(Пояснение) Экспорт + + Детали = ЮТКонтекст.КонтекстДеталиОшибки(); + Установить = Детали = Неопределено; + + Если Установить Тогда + Детали = Новый Массив(); + КонецЕсли; + + Детали.Добавить(Пояснение); + + Если Установить Тогда + ЮТКонтекст.УстановитьКонтекстДеталиОшибки(Детали); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции #Область КонструкторыОписанийОшибки -Функция ДанныеОшибки(Ошибка, Сообщение, ТипОшибки) +Функция ДанныеОшибки(Ошибка, Знач Сообщение, ТипОшибки) + +#Если Сервер Тогда + Детали = ЮТКонтекст.КонтекстДеталиОшибки(Истина); +#Иначе + ДеталиСервер = ЮТКонтекст.КонтекстДеталиОшибки(Истина); + ДеталиКлиент = ЮТКонтекст.КонтекстДеталиОшибки(); + + Если ЗначениеЗаполнено(ДеталиКлиент) И ЗначениеЗаполнено(ДеталиСервер) Тогда + ЮТОбщий.ДополнитьМассив(ДеталиСервер, ДеталиКлиент); + Детали = ДеталиСервер; + ИначеЕсли ЗначениеЗаполнено(ДеталиКлиент) Тогда + Детали = ДеталиКлиент; + ИначеЕсли ЗначениеЗаполнено(ДеталиСервер) Тогда + Детали = ДеталиСервер; + Иначе + Детали = Неопределено; + КонецЕсли; +#КонецЕсли + + Если ЗначениеЗаполнено(Детали) Тогда + ЮТКонтекст.УстановитьКонтекстДеталиОшибки(Новый Массив()); + + Детали.Добавить(Сообщение); + Сообщение = СтрСоединить(Детали, Символы.ПС); + КонецЕсли; ДанныеОшибки = ЮТФабрика.ОписаниеВозникшейОшибки(ТипОшибки + ": " + Сообщение); Если Ошибка <> Неопределено Тогда - ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка); + ДанныеОшибки.Стек = СтекОшибки(Ошибка); КонецЕсли; ДанныеОшибки.ТипОшибки = ТипОшибки; ДобавитьСообщенияПользователю(ДанныеОшибки); @@ -419,13 +426,23 @@ КонецФункции +Функция СтекОшибки(Ошибка) + + Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда + Возврат ПодробноеПредставлениеОшибки(Ошибка); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + Функция ДанныеОшибкиУтверждений(Ошибка) Описание = ИзвлечьТекстОшибки(Ошибка, ПрефиксОшибкиУтверждений()); ДанныеОшибки = ЮТФабрика.ОписаниеОшибкиСравнения(Описание); - ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка); + ДанныеОшибки.Стек = СтекОшибки(Ошибка); ДобавитьСообщенияПользователю(ДанныеОшибки); СтруктураОшибки = ЮТКонтекст.КонтекстОшибки(); @@ -472,10 +489,9 @@ КонецФункции -Процедура Ошибка(Ошибка, Описание) +Процедура СообщитьОбОшибке(Ошибка, Описание) - ТекстОшибки = ПредставлениеОшибки(Описание, Ошибка); - ЮТОбщий.СообщитьПользователю(ТекстОшибки); + ЮТОбщий.СообщитьПользователю(ПредставлениеОшибки(Описание, Ошибка)); КонецПроцедуры diff --git a/exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/Module.bsl new file mode 100644 index 00000000..b8c62964 --- /dev/null +++ b/exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/Module.bsl @@ -0,0 +1,92 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Форматированный текст ошибки утверждения. +// +// Параметры: +// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки +// ТекстОжидания - Строка - Описание ожидания +// ОбъектПроверки - Строка - Объект проверки +// +// Возвращаемое значение: +// Строка - Форматированный текст ошибки утверждения +Функция ФорматированныйТекстОшибкиУтверждения(Знач ОписаниеПроверки, ТекстОжидания, ОбъектПроверки) Экспорт + + Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.ИмяСвойства) Тогда + ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ОписаниеПроверки.ОбъектПроверки.ИмяСвойства); + Иначе + ВставкаСвойство = ""; + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.Представление) Тогда + ПредставлениеЗначения = ОписаниеПроверки.ОбъектПроверки.Представление; + Иначе + ПредставлениеЗначения = СтрШаблон("`%1`", ОписаниеПроверки.ОбъектПроверки.Значение); + КонецЕсли; + + // Заголовок сообщения + ТекстСообщения = ""; + // Тело сообщения + ТекстСообщения = СтрШаблон("ожидали, что %1 %2%3 %4, но это не так.", + ОбъектПроверки, + ПредставлениеЗначения, + ВставкаСвойство, + ТекстОжидания); + + Возврат ТекстСообщения; + +КонецФункции + +// Сообщение об ошибке события. +// +// Параметры: +// ИмяСобытия - Строка +// Ошибка - Строка - Текст ошибки +// - ИнформацияОбОшибке - ошибка выполнения +// +// Возвращаемое значение: +// Строка - Сообщение об ошибке события +Функция СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка) Экспорт + + ТипОшибки = ЮТФабрика.ТипыОшибок().ОшибкаОбработкиСобытия; + Возврат СтрШаблон("%1 '%2': %3", ТипОшибки, ИмяСобытия, КраткоеСообщениеОшибки(Ошибка)); + +КонецФункции + +Функция КраткоеСообщениеОшибки(Ошибка) Экспорт + + Если ЭтоИнформацияОбОшибке(Ошибка) Тогда + Возврат КраткоеПредставлениеОшибки(Ошибка); + Иначе + Возврат Ошибка; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоИнформацияОбОшибке(Ошибка) Экспорт + + Возврат ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке"); + +КонецФункции +#КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/ЮТСообщенияСлужебный.mdo b/exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/ЮТСообщенияСлужебный.mdo new file mode 100644 index 00000000..bbc9121d --- /dev/null +++ b/exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/ЮТСообщенияСлужебный.mdo @@ -0,0 +1,11 @@ + + + ЮТСообщенияСлужебный + + ru + Сообщения служебный + + true + true + true + diff --git a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl index 07955cc3..959e6e32 100644 --- a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl @@ -437,7 +437,9 @@ Попытка Результат = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока, РегулярноеВыражение); Исключение - ВызватьИсключение РегулярныеВыражения.ОписаниеОшибки; + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка проверки строки по шаблону " + РегулярноеВыражение); + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(РегулярныеВыражения.ОписаниеОшибки); + ВызватьИсключение; КонецПопытки; Возврат Результат; @@ -636,7 +638,7 @@ ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения); Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение); - ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение); + ТекстОшибки = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение); ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки); ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки, diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl index 98e410ae..afb9c541 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl @@ -292,9 +292,8 @@ Исключение - Сообщение = СтрШаблон("Не удалось записать объект `%1` (%2) - |%3", Объект, ТипЗнч(Объект), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение Сообщение; + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось записать объект `%1` (%2)", Объект, ТипЗнч(Объект))); + ВызватьИсключение; КонецПопытки; diff --git a/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl index 4b5cde52..799592d0 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl @@ -48,8 +48,8 @@ СериализаторXDTO.ЗаписатьJSON(Запись, Тип); Возврат Запись.Закрыть(); Исключение - ВызватьИсключение СтрШаблон("Не удалось определить индетификатор типа для `%1` - |%2", Тип, ОписаниеОшибки()); + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось определить идетификатор типа для `%1`", Тип)); + ВызватьИсключение; КонецПопытки; #КонецЕсли diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo index d46ee925..e6deb45e 100644 --- a/exts/yaxunit/src/Configuration/Configuration.mdo +++ b/exts/yaxunit/src/Configuration/Configuration.mdo @@ -94,6 +94,7 @@ CommonModule.ЮТРасширения CommonModule.ЮТРегистрацияОшибок CommonModule.ЮТСобытия + CommonModule.ЮТСообщенияСлужебный CommonModule.ЮТСравнениеКлиентСервер CommonModule.ЮТСравнениеСервер CommonModule.ЮТСтроки