From 55914faa2307b24e32177e76f070e9ae5dea1cf9 Mon Sep 17 00:00:00 2001 From: alkoleft Date: Sat, 9 Dec 2023 03:14:46 +0300 Subject: [PATCH] #199 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена поддержка форматированных строк в утверждениях Исправлена проверка наличия метода у объекта/модуля --- .../src/CommonModules/ЮТОбщий/Module.bsl | 34 ++++++++++++++++--- .../ЮТСравнениеКлиентСервер/Module.bsl | 17 +++++----- .../CommonModules/ЮТУтверждения/Module.bsl | 4 +-- .../CommonModules/ОМ_ЮТУтверждения/Module.bsl | 18 ++++++++++ 4 files changed, 58 insertions(+), 15 deletions(-) diff --git a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl index 01852619..e80c3b4a 100644 --- a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl @@ -583,7 +583,7 @@ #КонецОбласти // МетодМодуляСуществует -// Проверяет существование публичного (экспортного) метода у объекта +// Проверяет существование публичного (экспортного) метода у модуля // // Параметры: // ИмяМодуля - Строка - Имя модуля, метод которого нужно поискать @@ -595,16 +595,42 @@ // Булево - Метод найден Функция МетодМодуляСуществует(ИмяМодуля, ИмяМетода, КоличествоПараметров = 0, Кешировать = Истина) Экспорт + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяМодуля, Тип("Строка"), "ЮТОбщий.МетодМодуляСуществует", "ИмяМодуля"); + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяМетода, Тип("Строка"), "ЮТОбщий.МетодМодуляСуществует", "ИмяМетода"); + Если Кешировать Тогда Возврат ЮТПовторногоИспользования.МетодМодуляСуществует(ИмяМодуля, ИмяМетода, КоличествоПараметров); КонецЕсли; - Алгоритм = СтрШаблон("%1.%2(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)", ИмяМодуля, ИмяМетода); + ПолноеИмяМетода = СтрШаблон("%1.%2", ИмяМодуля, ИмяМетода);; + Алгоритм = ПолноеИмяМетода + "(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)"; Ошибка = ВыполнитьМетод(Алгоритм); - МетодСуществует = СтрНайти(НРег(Ошибка.Описание), "(" + НРег(ИмяМетода) + ")") = 0; - Возврат МетодСуществует; + ТипОшибки = ЮТРегистрацияОшибок.ТипОшибки(Ошибка, ПолноеИмяМетода); + Возврат ТипОшибки = ЮТФабрика.ТипыОшибок().МногоПараметров; + +КонецФункции + +// Проверяет существование публичного (экспортного) метода у объекта +// +// Параметры: +// Объект - Произвольный - Объект, метод которого нужно поискать +// ИмяМетода - Строка - Имя метода, который ищем +// +// Возвращаемое значение: +// Булево - Метод найден +Функция МетодОбъектаСуществует(Объект, ИмяМетода) Экспорт + + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяМетода, Тип("Строка"), "ЮТОбщий.МетодМодуляСуществует", "ИмяМетода"); + + ПолноеИмяМетода = СтрШаблон("Объект.%1", ИмяМетода);; + Алгоритм = ПолноеИмяМетода + "(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)"; + + Ошибка = ВыполнитьМетод(Алгоритм); + + ТипОшибки = ЮТРегистрацияОшибок.ТипОшибки(Ошибка, ПолноеИмяМетода); + Возврат ТипОшибки = ЮТФабрика.ТипыОшибок().МногоПараметров; КонецФункции diff --git a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl index 959e6e32..0e33d80a 100644 --- a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl @@ -408,7 +408,7 @@ ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); - Если ТипПроверяемогоЗначения = Тип("Строка") Тогда + Если ТипПроверяемогоЗначения = Тип("Строка") ИЛИ ТипПроверяемогоЗначения = Тип("ФорматированнаяСтрока") Тогда ФактическаяДлина = СтрДлина(ПроверяемоеЗначение); @@ -428,14 +428,10 @@ Функция СоответствуетШаблону(ПроверяемаяСтрока, РегулярноеВыражение) - Если ТипЗнч(ПроверяемаяСтрока) <> Тип("Строка") Тогда - Возврат Неопределено; - КонецЕсли; - РегулярныеВыражения = ЮТКомпоненты.РегулярныеВыражения(); Попытка - Результат = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока, РегулярноеВыражение); + Результат = РегулярныеВыражения.Совпадает(Строка(ПроверяемаяСтрока), РегулярноеВыражение); Исключение ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка проверки строки по шаблону " + РегулярноеВыражение); ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(РегулярныеВыражения.ОписаниеОшибки); @@ -450,7 +446,7 @@ ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); - Если ТипПроверяемогоЗначения = Тип("Строка") Тогда + Если ТипПроверяемогоЗначения = Тип("Строка") Или ТипПроверяемогоЗначения = Тип("ФорматированнаяСтрока") Тогда ИскомоеЗначениеНайдено = СтрНайти(ПроверяемоеЗначение, ОжидаемоеЗначение) > 0; @@ -475,7 +471,7 @@ ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ОжидаемоеЗначение) <> Неопределено; - ИначеЕсли ПроверяемоеЗначение <> Неопределено И ЮТОбщий.МетодМодуляСуществует(ПроверяемоеЗначение, "Найти", , Ложь) Тогда + ИначеЕсли ПроверяемоеЗначение <> Неопределено И ЮТОбщий.МетодОбъектаСуществует(ПроверяемоеЗначение, "Найти") Тогда ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ОжидаемоеЗначение) <> Неопределено; @@ -737,7 +733,10 @@ Функция ПроверитьСоответствуетШаблону(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки) - Если НЕ ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Строка") Тогда + ТипыПараметровСоответствуют = ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Строка") + И ПроверитьТипЗначения(РезультатПроверки, ПроверяемоеЗначение, "Строка, ФорматированнаяСтрока", "проверяемого значения"); + + Если Не ТипыПараметровСоответствуют Тогда Возврат Неопределено; КонецЕсли; diff --git a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl index e28befb6..fbee4f56 100644 --- a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl @@ -875,7 +875,7 @@ Контекст = Контекст(); УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); - ПроверитьТипЗначения(Контекст, ПроверяемоеЗначение, "Строка", "проверяемого значения"); + ПроверитьТипЗначения(Контекст, ПроверяемоеЗначение, "Строка, ФорматированнаяСтрока", "проверяемого значения"); ПроверитьТипЗначения(Контекст, СтрокаПоиска, "Строка", "ожидаемого значения"); ПроверитьЗаполненностьЗначения(Контекст, СтрокаПоиска, "ожидаемое значение"); @@ -905,7 +905,7 @@ Контекст = Контекст(); УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); - ПроверитьТипЗначения(Контекст, ПроверяемоеЗначение, "Строка", "проверяемого значения"); + ПроверитьТипЗначения(Контекст, ПроверяемоеЗначение, "Строка, ФорматированнаяСтрока", "проверяемого значения"); ПроверитьТипЗначения(Контекст, СтрокаПоиска, "Строка", "ожидаемого значения"); ПроверитьЗаполненностьЗначения(Контекст, СтрокаПоиска, "ожидаемое значение"); diff --git a/tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl b/tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl index e371325a..d2866d82 100644 --- a/tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl @@ -76,6 +76,7 @@ .ДобавитьТест("ЛюбойЭлементСоответствуетПредикату") .ДобавитьТест("СодержитПредикат") .ДобавитьТест("НеСодержитПредикат") + .ДобавитьТест("ФорматированныеСтроки") ; КонецПроцедуры @@ -2342,6 +2343,23 @@ КонецПроцедуры +Процедура ФорматированныеСтроки() Экспорт + + Строка = Новый ФорматированнаяСтрока("Тестовая строка"); + + ЮТест.ОжидаетЧто(Строка) + .ИмеетТип("ФорматированнаяСтрока") + .ИмеетДлину(15) + .НачинаетсяС("Те") + .ЗаканчиваетсяНа("ка") + .Содержит("ова") + .НеСодержит("число") + .СодержитСтрокуПоШаблону("[\w\W]+") + .НеСодержитСтрокуПоШаблону("\d+") + ; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции