1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-02-10 19:41:26 +02:00

Рефакторинг

Доработка утверждений и регистрации ошибок для подключения других библиотек утверждений
This commit is contained in:
alkoleft 2023-05-02 23:22:40 +03:00
parent 6c588a6f54
commit 651a8a9cdf
6 changed files with 406 additions and 291 deletions

View File

@ -78,24 +78,24 @@
КонецФункции
Функция ПредставлениеПредикатов(Знач Предикаты, Разделитель) Экспорт
Функция ПредставлениеПредикатов(Знач Предикаты, Разделитель, ШаблонСвойства = "содержит свойство `%1`, которое") Экспорт
Представления = Новый Массив();
Предикаты = НаборПредикатов(Предикаты);
Для Каждого Выражение Из Предикаты Цикл
Представления.Добавить(ПредставлениеПредиката(Выражение));
Представления.Добавить(ПредставлениеПредиката(Выражение, ШаблонСвойства));
КонецЦикла;
Возврат СтрСоединить(Представления, Разделитель);
КонецФункции
Функция ПредставлениеПредиката(ВыражениеПредиката) Экспорт
Функция ПредставлениеПредиката(ВыражениеПредиката, ШаблонСвойства) Экспорт
Если ВыражениеПредиката.ИмяРеквизита = Неопределено Тогда
ПроверяемоеЗначение = "";
Иначе
ПроверяемоеЗначение = СтрШаблон("содержит свойство `%1`, которое ", ВыражениеПредиката.ИмяРеквизита);
ПроверяемоеЗначение = СтрШаблон(ШаблонСвойства, ВыражениеПредиката.ИмяРеквизита) + " ";
КонецЕсли;
Выражение = СтрШаблон(ШаблонВыражения(ВыражениеПредиката.ВидСравнения), ВыражениеПредиката.Значение);
@ -162,10 +162,10 @@
#Область СлужебныеПроцедурыИФункции
Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, БазовыеПараметрыПроверки, ПараметрыСравнения)
Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
Попытка
ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, БазовыеПараметрыПроверки, ПараметрыСравнения);
ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
Исключение
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(СтатусПроверки, ИнформацияОбОшибке());
КонецПопытки;
@ -178,15 +178,19 @@
// Значение - Произвольный - Значение
// Выражение - см. ЮТФабрика.ВыражениеПредиката
// СтатусПроверки - см. ЮТФабрика.ОписаниеРезультатаПроверки
// БазовыеПараметрыПроверки - см. ПараметрыПроверки
// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке
// ПараметрыСравнения - Неопределено
// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры
Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, БазовыеПараметрыПроверки, ПараметрыСравнения)
Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
// BSLLS:CognitiveComplexity-off
ВидыСравнения = ЮТПредикаты.Выражения();
ПараметрыПроверки = ЮТСравнениеКлиентСервер.ПараметрыПроверки(Выражение.ВидСравнения, Значение, Выражение.ИмяРеквизита, Выражение.Значение, Ложь);
ЗаполнитьЗначенияСвойств(ПараметрыПроверки, БазовыеПараметрыПроверки, "ОписаниеПроверки, ОбъектПроверки, ПредставлениеПроверяемогоЗначения");
ПараметрыПроверки.ОписаниеПроверки = ПараметрыСообщенийОбОшибке.ОписаниеПроверки;
ПараметрыПроверки.ТекстПроверяемоеЗначение = ПараметрыСообщенийОбОшибке.ТекстПроверяемоеЗначение;
ПараметрыПроверки.ОбъектПроверки.Представление = ПараметрыСообщенийОбОшибке.ПредставлениеПроверяемогоЗначения;
Если СтрНачинаетсяС(Выражение.ВидСравнения, "Не") И ВидыСравнения.Свойство(Сред(Выражение.ВидСравнения, 3)) Тогда
ПараметрыПроверки.Реверс = Истина;
@ -248,21 +252,21 @@
//
// Параметры:
// ОписаниеПроверки - Строка - Описание конкретной проверки
// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
// ТекстПроверяемоеЗначение - Строка - Человекочитаемое описание проверяемого значения
// ПредставлениеПроверяемогоЗначения - Неопределено - Представление проверяемого значения
//
// Возвращаемое значение:
// Структура - Параметры сообщений об ошибке:
// * ОписаниеПроверки - Строка - Описание конкретной проверки
// * ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
// * ПредставлениеПроверяемогоЗначения - Неопределено -
// * ОписаниеПроверки - Неопределено, Строка - Описание конкретной проверки
// * ТекстПроверяемоеЗначение - Неопределено, Строка - Человекочитаемое описание проверяемого значения
// * ПредставлениеПроверяемогоЗначения - Неопределено, Строка -
Функция ПараметрыСообщенийОбОшибке(ОписаниеПроверки = Неопределено,
ОбъектПроверки = "проверяемое значение",
ТекстПроверяемоеЗначение = "проверяемое значение",
ПредставлениеПроверяемогоЗначения = Неопределено) Экспорт
Возврат Новый Структура("ОписаниеПроверки, ОбъектПроверки, ПредставлениеПроверяемогоЗначения",
Возврат Новый Структура("ОписаниеПроверки, ТекстПроверяемоеЗначение, ПредставлениеПроверяемогоЗначения",
ОписаниеПроверки,
ОбъектПроверки,
ТекстПроверяемоеЗначение,
ПредставлениеПроверяемогоЗначения);
КонецФункции

View File

@ -94,12 +94,13 @@
//
// Параметры:
// ИнформацияОбОшибке - ИнформацияОбОшибке
Процедура СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке) Экспорт
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
Процедура СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке, ОписаниеПроверки = Неопределено) Экспорт
СтруктураОшибки = ЮТКонтекст.КонтекстОшибки();
СтруктураОшибки.ОшибкаУтверждения = Ложь;
ВызватьОшибкуИсполнения(ИнформацияОбОшибке);
ВызватьОшибкуИсполнения(ИнформацияОбОшибке, ОписаниеПроверки);
КонецПроцедуры
@ -107,16 +108,16 @@
// При этом сохраняет в контекст состояние, для дальнейшей обработки
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// Сообщение - Строка
// ПроверяемоеЗначение - Произвольный
// ОжидаемоеЗначение - Произвольный
// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
Процедура СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ОжидаемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
Процедура СгенерироватьОшибкуСравнения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОжидаемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение);
Контекст = ЮТКонтекст.КонтекстПроверки();
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ПроверяемоеЗначение, Сообщение, ОбъектПроверки, Контекст);
ВызватьОшибкуПроверки(ТекстСообщения);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);
КонецПроцедуры
@ -124,15 +125,15 @@
// При этом сохраняет в контекст состояние, для дальнейшей обработки
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// Сообщение - Строка
// ПроверяемоеЗначение - Произвольный
// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
Процедура СгенерироватьОшибкуУтверждения(Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
Процедура СгенерироватьОшибкуУтверждения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение);
Контекст = ЮТКонтекст.КонтекстПроверки();
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ПроверяемоеЗначение, Сообщение, ОбъектПроверки, Контекст);
ВызватьОшибкуПроверки(ТекстСообщения);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);
КонецПроцедуры
@ -160,9 +161,10 @@
// Служебный метод, предварительно нужно самостоятельно настроить контекст (см. ЮТКонтекст.КонтекстОшибки)
// Параметры:
// ТекстСообщения - Строка
Процедура ВызватьОшибкуПроверки(Знач ТекстСообщения) Экспорт
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
Процедура ВызватьОшибкуПроверки(Знач ТекстСообщения, ОписаниеПроверки = Неопределено) Экспорт
СообщениеОбОшибке = СообщениеОбОшибке(ТекстСообщения, ПрефиксОшибкиУтверждений());
СообщениеОбОшибке = СообщениеОбОшибке(ТекстСообщения, ПрефиксОшибкиУтверждений(), ОписаниеПроверки);
ВызватьИсключение СообщениеОбОшибке;
КонецПроцедуры
@ -307,20 +309,27 @@
КонецПроцедуры
Функция ФорматированныйТекстОшибкиУтверждения(Знач ПроверяемоеЗначение, ТекстОжидания, ОбъектПроверки, Контекст) Экспорт
// Форматированный текст ошибки утверждения.
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// ТекстОжидания - Строка - Описание ожидания
// ОбъектПроверки - Строка - Объект проверки
//
// Возвращаемое значение:
// Строка - Форматированный текст ошибки утверждения
Функция ФорматированныйТекстОшибкиУтверждения(Знач ОписаниеПроверки, ТекстОжидания, ОбъектПроверки) Экспорт
ИмяСвойства = Контекст.ИмяСвойства;
Если ЗначениеЗаполнено(ИмяСвойства) Тогда
ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ИмяСвойства);
Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.ИмяСвойства) Тогда
ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ОписаниеПроверки.ОбъектПроверки.ИмяСвойства);
Иначе
ВставкаСвойство = "";
КонецЕсли;
Если ЗначениеЗаполнено(Контекст.ПредставлениеПроверяемогоЗначения) Тогда
ПредставлениеЗначения = Контекст.ПредставлениеПроверяемогоЗначения;
Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.Представление) Тогда
ПредставлениеЗначения = ОписаниеПроверки.ОбъектПроверки.Представление;
Иначе
ПредставлениеЗначения = СтрШаблон("`%1`", Контекст.ПроверяемоеЗначение);
ПредставлениеЗначения = СтрШаблон("`%1`", ОписаниеПроверки.ОбъектПроверки.Значение);
КонецЕсли;
// Заголовок сообщения
@ -336,6 +345,20 @@
КонецФункции
Функция ДобавитьОписания(ТекстОшибки, ОписаниеПроверки = Неопределено) Экспорт
Если ОписаниеПроверки <> Неопределено Тогда
ПрефиксОшибки = ЮТОбщий.ДобавитьСтроку(ОписаниеПроверки.ПрефиксОшибки, ОписаниеПроверки.ОписаниеПроверки, " ");
СообщениеОбОшибке = ЮТОбщий.ДобавитьСтроку(ПрефиксОшибки, ТекстОшибки, ": ");
Иначе
СообщениеОбОшибке = ТекстОшибки;
КонецЕсли;
СообщениеОбОшибке = ВРег(Лев(СообщениеОбОшибке, 1)) + Сред(СообщениеОбОшибке, 2);
Возврат СообщениеОбОшибке;
КонецФункции
Процедура ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, Ошибка) Экспорт
РезультатПроверки.Успешно = Ложь;
@ -517,21 +540,17 @@
КонецПроцедуры
Процедура ВызватьОшибкуИсполнения(Знач ИнформацияОбОшибке)
Процедура ВызватьОшибкуИсполнения(Знач ИнформацияОбОшибке, ОписаниеПроверки)
ТекстОшибки = ИнформациюОбОшибкеВСтроку(ИнформацияОбОшибке);
СообщениеОбОшибке = СообщениеОбОшибке(ТекстОшибки, ПрефиксОшибкиВыполнения());
СообщениеОбОшибке = СообщениеОбОшибке(ТекстОшибки, ПрефиксОшибкиВыполнения(), ОписаниеПроверки);
ВызватьИсключение СообщениеОбОшибке;
КонецПроцедуры
Функция СообщениеОбОшибке(ТекстОшибки, ПрефиксТипаОшибки)
Функция СообщениеОбОшибке(ТекстОшибки, ПрефиксТипаОшибки, ОписаниеПроверки = Неопределено) Экспорт
Контекст = ЮТКонтекст.КонтекстПроверки();
ПрефиксОшибки = ЮТОбщий.ДобавитьСтроку(Контекст.ПрефиксОшибки, Контекст.ОписаниеПроверки, " ");
СообщениеОбОшибке = ЮТОбщий.ДобавитьСтроку(ПрефиксОшибки, ТекстОшибки, ": ");
СообщениеОбОшибке = ВРег(Лев(СообщениеОбОшибке, 1)) + Сред(СообщениеОбОшибке, 2);
СообщениеОбОшибке = ДобавитьОписания(ТекстОшибки, ОписаниеПроверки);
Возврат СтрШаблон("%1 <%2>", ПрефиксТипаОшибки, СообщениеОбОшибке);

View File

@ -249,18 +249,33 @@
КонецПроцедуры
// Параметры проверки.
//
// Параметры:
// ВидСравнения - Строка
// ПроверяемоеЗначение - Произвольный
// ИмяСвойства - Строка
// ОжидаемоеЗначение - Произвольный
// Реверс - Булево
//
// Возвращаемое значение:
// Структура - Параметры проверки:
// * ОбъектПроверки - см. ЮТФабрика.ОписаниеПроверяемогоЗначения
// * ПрефиксОшибки - Строка, Неопределено -
// * ОписаниеПроверки - Строка, Неопределено -
// * ВидСравнения - Строка
// * ОжидаемоеЗначение - Произвольный
// * Реверс - Булево
// * ТекстПроверяемоеЗначение - Строка
Функция ПараметрыПроверки(ВидСравнения, ПроверяемоеЗначение, ИмяСвойства, ОжидаемоеЗначение, Реверс = Ложь) Экспорт
Параметры = Новый Структура();
Параметры = ЮТФабрика.ОписаниеПроверки(ПроверяемоеЗначение);
Параметры.ОбъектПроверки.ИмяСвойства = ИмяСвойства;
Параметры.Вставить("ВидСравнения", ВидСравнения);
Параметры.Вставить("ПроверяемоеЗначение", ПроверяемоеЗначение);
Параметры.Вставить("ОжидаемоеЗначение", ОжидаемоеЗначение);
Параметры.Вставить("ИмяСвойства", ИмяСвойства);
Параметры.Вставить("Реверс", Реверс);
Параметры.Вставить("ОбъектПроверки", Неопределено);
Параметры.Вставить("ОписаниеПроверки", Неопределено);
Параметры.Вставить("ПредставлениеПроверяемогоЗначения", Неопределено);
Параметры.Вставить("ТекстПроверяемоеЗначение", "проверяемое значение");
Возврат Параметры;
@ -503,22 +518,11 @@
Процедура ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ФактическоеЗначение)
ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения);
Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение);
Если ЗначениеЗаполнено(ПараметрыПроверки.ПредставлениеПроверяемогоЗначения) Тогда
ПредставлениеЗначения = ПараметрыПроверки.ПредставлениеПроверяемогоЗначения;
Иначе
ПредставлениеЗначения = СтрШаблон("`%1`", ПараметрыПроверки.ПроверяемоеЗначение);
КонецЕсли;
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки);
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПредставлениеЗначения,
Сообщение,
ПараметрыПроверки.ОбъектПроверки,
ПараметрыПроверки);
ТекстОшибки = ЮТОбщий.ДобавитьСтроку(ПараметрыПроверки.ОписаниеПроверки, ТекстОшибки, ": ");
ТекстОшибки = ВРег(Лев(ТекстОшибки, 1)) + Сред(ТекстОшибки, 2);
ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки,
ТекстОшибки,
ФактическоеЗначение,
@ -535,10 +539,10 @@
// Произвольный
Функция ПроверяемоеЗначение(ПараметрыПроверки)
Если ПараметрыПроверки.ИмяСвойства <> Неопределено Тогда
Значение = ЗначениеСвойства(ПараметрыПроверки.ПроверяемоеЗначение, ПараметрыПроверки.ИмяСвойства);
Если ПараметрыПроверки.ОбъектПроверки.ИмяСвойства <> Неопределено Тогда
Значение = ЗначениеСвойства(ПараметрыПроверки.ОбъектПроверки.Значение, ПараметрыПроверки.ОбъектПроверки.ИмяСвойства);
Иначе
Значение = ПараметрыПроверки.ПроверяемоеЗначение;
Значение = ПараметрыПроверки.ОбъектПроверки.Значение;
КонецЕсли;
Возврат Значение;

View File

@ -540,6 +540,50 @@
КонецФункции
// Формирует описание проверяемого значения.
// Используется в утверждения для формирования дружелюбного сообщения об ошибке.
//
// Параметры:
// ПроверяемоеЗначение - Произвольный - Проверяемое значение
//
// Возвращаемое значение:
// Структура - Описание проверяемого значения:
// * Значение - Произвольный
// * Представление - Строка - Представление объекта
// - Неопределено - Если не указано тогда используется платформенное предсталение (`Строка(Значение)`)
// * ИмяСвойства - Строка, Число, Неопределено - Имя проверяемого реквизита, индекса
Функция ОписаниеПроверяемогоЗначения(ПроверяемоеЗначение) Экспорт
Описание = Новый Структура();
Описание.Вставить("Значение", ПроверяемоеЗначение);
Описание.Вставить("Представление", Неопределено);
Описание.Вставить("ИмяСвойства", Неопределено);
Возврат Описание;
КонецФункции
// Описание проверки.
//
// Параметры:
// ПроверяемоеЗначение - Произвольный
//
// Возвращаемое значение:
// Структура - Описание проверки:
// * ОбъектПроверки - см. ОписаниеПроверяемогоЗначения
// * ПрефиксОшибки - Строка, Неопределено -
// * ОписаниеПроверки - Строка, Неопределено -
Функция ОписаниеПроверки(ПроверяемоеЗначение) Экспорт
Описание = Новый Структура();
Описание.Вставить("ОбъектПроверки", ОписаниеПроверяемогоЗначения(ПроверяемоеЗначение));
Описание.Вставить("ПрефиксОшибки", Неопределено);
Описание.Вставить("ОписаниеПроверки", Неопределено);
Возврат Описание;
КонецФункции
#КонецОбласти
#Область КонструкторыКонтекстов

View File

@ -96,21 +96,21 @@
ДанныеКонтекста = ЮТКонтекст.КонтекстПроверки();
ЮТУтверждения.Что(ДанныеКонтекста, "Свойство не установлено")
.Свойство("ИмяСвойства").Равно(Неопределено);
.Свойство("ОбъектПроверки.ИмяСвойства").Равно(Неопределено);
ЮТУтверждения.Что(Объект)
.Свойство("Примитив");
ДанныеКонтекста = ЮТКонтекст.КонтекстПроверки();
ЮТУтверждения.Что(ДанныеКонтекста, "Свойство установлено")
.Свойство("ИмяСвойства").Равно("Примитив");
.Свойство("ОбъектПроверки.ИмяСвойства").Равно("Примитив");
ЮТУтверждения.Что(Объект)
.Свойство("Объект.Первый");
ДанныеКонтекста = ЮТКонтекст.КонтекстПроверки();
ЮТУтверждения.Что(ДанныеКонтекста, "Составное свойство")
.Свойство("ИмяСвойства").Равно("Объект.Первый");
.Свойство("ОбъектПроверки.ИмяСвойства").Равно("Объект.Первый");
// Негативные тесты
Попытка