From a3add5b9f741838ad0d8900661801f616e0d57b8 Mon Sep 17 00:00:00 2001 From: alkoleft Date: Sun, 10 Sep 2023 00:02:51 +0300 Subject: [PATCH] #162 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Рефакторинг предикатов --- .../ЮТПредикатыКлиентСервер/Module.bsl | 64 +++++++++++-- .../ЮТСравнениеКлиентСервер/Module.bsl | 95 +++++++------------ 2 files changed, 94 insertions(+), 65 deletions(-) diff --git a/exts/yaxunit/src/CommonModules/ЮТПредикатыКлиентСервер/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТПредикатыКлиентСервер/Module.bsl index b212083c..8318b42d 100644 --- a/exts/yaxunit/src/CommonModules/ЮТПредикатыКлиентСервер/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТПредикатыКлиентСервер/Module.bsl @@ -241,29 +241,33 @@ ВидСравненияВыражения = Выражение.ВидСравнения; КонецЕсли; + Результат = Неопределено; + + ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки); + Если ВидСравненияВыражения = ВидыСравнения.Равно Тогда - ЮТСравнениеКлиентСервер.ПроверитьРавенствоЗначений(СтатусПроверки, ПараметрыПроверки, ПараметрыСравнения); + Результат = ЮТСравнениеКлиентСервер.ЗначенияРавны(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, ПараметрыСравнения); ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Заполнено Тогда - ЮТСравнениеКлиентСервер.ПроверитьЗаполненность(СтатусПроверки, ПараметрыПроверки); + Результат = ЗначениеЗаполнено(ПроверяемоеЗначение) ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Больше Тогда - ЮТСравнениеКлиентСервер.ПроверитьНеравенство(СтатусПроверки, ПараметрыПроверки, Истина); + Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, Истина); ИначеЕсли ВидСравненияВыражения = ВидыСравнения.БольшеРавно Тогда - ЮТСравнениеКлиентСервер.ПроверитьНеравенство(СтатусПроверки, ПараметрыПроверки, Истина, , Истина); + Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, Истина, , Истина); ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Меньше Тогда - ЮТСравнениеКлиентСервер.ПроверитьНеравенство(СтатусПроверки, ПараметрыПроверки, , Истина); + Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, , Истина); ИначеЕсли ВидСравненияВыражения = ВидыСравнения.МеньшеРавно Тогда - ЮТСравнениеКлиентСервер.ПроверитьНеравенство(СтатусПроверки, ПараметрыПроверки, , Истина, Истина); + Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, , Истина, Истина); ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетТип Тогда @@ -292,6 +296,16 @@ КонецЕсли; // BSLLS:CognitiveComplexity-on + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПараметрыПроверки.Реверс Тогда + Результат = НЕ Результат; + КонецЕсли; + + ОбработатьРезультатСравнения(Результат, СтатусПроверки, ПараметрыПроверки, ПроверяемоеЗначение); + КонецПроцедуры Функция ЭтоПредикатОбщийМодуль(ТипПредикатов, Предикаты) @@ -314,4 +328,42 @@ КонецФункции +Процедура ОбработатьРезультатСравнения(Результат, РезультатПроверки, ПараметрыПроверки, ФактическоеЗначение) + + Если Результат Тогда + Возврат; + КонецЕсли; + + ШаблонСообщения = ШаблонВыражения(ПараметрыПроверки.ВидСравнения); + Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение); + + ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение); + ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки); + + ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки, + ТекстОшибки, + ФактическоеЗначение, + ПараметрыПроверки.ОжидаемоеЗначение); + +КонецПроцедуры + +// Параметры проверки. +// +// Параметры: +// ПараметрыПроверки - см. ПараметрыПроверки +// +// Возвращаемое значение: +// Произвольный +Функция ПроверяемоеЗначение(ПараметрыПроверки) + + Если ПараметрыПроверки.ОбъектПроверки.ИмяСвойства <> Неопределено Тогда + Значение = ЮТСравнениеКлиентСервер.ЗначениеСвойства(ПараметрыПроверки.ОбъектПроверки.Значение, ПараметрыПроверки.ОбъектПроверки.ИмяСвойства); + Иначе + Значение = ПараметрыПроверки.ОбъектПроверки.Значение; + КонецЕсли; + + Возврат Значение; + +КонецФункции + #КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl index efcc18a4..d4a590ac 100644 --- a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl @@ -92,48 +92,25 @@ КонецФункции -// Проверить равенство значений. -// -// Параметры: -// РезультатПроверки - см. ЮТФабрика.ОписаниеРезультатаПроверки -// ПараметрыПроверки - см. ПараметрыПроверки -// ПараметрыСравнения - Структура - Параметры проверки: -// * ГлубокийАнализ - Булево - Использовать сериализацию и прочие алгоритмы сравнения -Процедура ПроверитьРавенствоЗначений(РезультатПроверки, ПараметрыПроверки, ПараметрыСравнения) Экспорт - - ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки); - Результат = ЗначенияРавны(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, ПараметрыСравнения); - - Реверс(Результат, ПараметрыПроверки); - - Если НЕ Результат Тогда - ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение); - КонецЕсли; - -КонецПроцедуры - -Процедура ПроверитьНеравенство(РезультатПроверки, ПараметрыПроверки, Больше = Ложь, Меньше = Ложь, Равно = Ложь) Экспорт +Функция ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, Больше = Ложь, Меньше = Ложь, Равно = Ложь) Экспорт Результат = Ложь; - ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки); Если Больше Тогда - Результат = ПроверяемоеЗначение > ПараметрыПроверки.ОжидаемоеЗначение; + Результат = ПроверяемоеЗначение > ОжидаемоеЗначение; КонецЕсли; Если Меньше Тогда - Результат = Результат ИЛИ ПроверяемоеЗначение < ПараметрыПроверки.ОжидаемоеЗначение; + Результат = Результат ИЛИ ПроверяемоеЗначение < ОжидаемоеЗначение; КонецЕсли; Если Равно Тогда - Результат = Результат ИЛИ ПроверяемоеЗначение = ПараметрыПроверки.ОжидаемоеЗначение; - КонецЕсли; - - Если НЕ Результат Тогда - ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение); + Результат = Результат ИЛИ ПроверяемоеЗначение = ОжидаемоеЗначение; КонецЕсли; -КонецПроцедуры + Возврат Результат; + +КонецФункции Процедура ПроверитьТипПараметра(РезультатПроверки, ПараметрыПроверки) Экспорт @@ -250,27 +227,27 @@ КонецПроцедуры Процедура ПроверитьСоответствуетШаблону(РезультатПроверки, ПараметрыПроверки) Экспорт - + Если НЕ ПроверитьТипЗначения(РезультатПроверки, ПараметрыПроверки.ОжидаемоеЗначение, "Строка") Тогда Возврат; КонецЕсли; - + ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки); СоответствуетШаблону = СоответствуетШаблону(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение); - + Если СоответствуетШаблону = Неопределено Тогда ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение)); ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки); Возврат; КонецЕсли; - + Результат = СоответствуетШаблону; Реверс(Результат, ПараметрыПроверки); - + Если НЕ Результат Тогда ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение); КонецЕсли; - + КонецПроцедуры // Параметры проверки. @@ -305,6 +282,29 @@ КонецФункции +Функция ЗначениеСвойства(Объект, ИмяСвойства) Экспорт + + Путь = ЧастиПути(ИмяСвойства); + + Значение = Объект; + Для Каждого Часть Из Путь Цикл + + Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда + Значение = Значение.Получить(); + КонецЕсли; + + Если ТипЗнч(Часть) = Тип("Число") И Часть < 0 И ТипЗнч(Значение) <> Тип("Соответствие") Тогда + Часть = Значение.Количество() + Часть; + КонецЕсли; + + Значение = Значение[Часть]; + + КонецЦикла; + + Возврат Значение; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -545,29 +545,6 @@ КонецФункции -Функция ЗначениеСвойства(Объект, ИмяСвойства) - - Путь = ЧастиПути(ИмяСвойства); - - Значение = Объект; - Для Каждого Часть Из Путь Цикл - - Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда - Значение = Значение.Получить(); - КонецЕсли; - - Если ТипЗнч(Часть) = Тип("Число") И Часть < 0 И ТипЗнч(Значение) <> Тип("Соответствие") Тогда - Часть = Значение.Количество() + Часть; - КонецЕсли; - - Значение = Значение[Часть]; - - КонецЦикла; - - Возврат Значение; - -КонецФункции - Процедура Реверс(Значение, ПараметрыПроверки) Если ПараметрыПроверки.Реверс Тогда