From 9bacf444015e111784a81c4c8a3dae54073a2681 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Sat, 15 Nov 2025 15:21:59 +1000 Subject: [PATCH 1/3] =?UTF-8?q?*=20=D0=92=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D0=B0=D1=85=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20asserts=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=BE=D0=B3=D0=BE=20=D1=87=D1=82?= =?UTF-8?q?=D0=BE=D0=B1=D1=8B=20=D0=BE=D1=82=D0=BB=D0=B8=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20assertation=20fault=20=D0=BE=D1=82=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D1=85=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9=20*=20=D0=94=D0=BB=D1=8F=20=D1=83?= =?UTF-8?q?=D1=82=D0=B2=D0=B5=D1=80=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D1=85=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=BE=D1=81=20=D0=BE=D1=80=D0=B8=D0=B3=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B8=D1=81=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D1=87=D0=B8=D0=BD=D1=83=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20asserts=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=B8=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=BA=D0=B0=20*?= =?UTF-8?q?=20=D0=94=D0=BB=D1=8F=20=D0=9E=D0=B6=D0=B8=D0=B4=D0=B0=D0=B5?= =?UTF-8?q?=D0=BC.=D0=A1=D0=BE=D0=B4=D0=B5=D1=80=D0=B6=D0=B8=D1=82()=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B9=20CollectionOS=20*?= =?UTF-8?q?=20=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=BE=D0=B9=20?= =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 3 +- ...21\201\321\201\320\265\321\200\321\202.os" | 298 ++++++++++------ ...20\264\320\265\320\275\320\270\321\217.os" | 8 + ...20\264\320\265\320\275\320\270\321\217.os" | 332 +++++++++++++----- ...20\265\320\261\320\275\321\213\320\271.os" | 25 ++ tests/bdd-assertions-identity-tests.os | 4 +- tests/bdd-assertions-tests.os | 23 ++ ...21\210\320\276\320\275\320\276\321\201.os" | 198 +++++++++++ 8 files changed, 702 insertions(+), 189 deletions(-) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\236\321\210\320\270\320\261\320\272\320\260\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" create mode 100644 "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" create mode 100644 "tests/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\232\320\276\320\273\320\273\320\265\320\272\321\210\320\276\320\275\320\276\321\201.os" diff --git a/packagedef b/packagedef index b510d37..3276ad2 100644 --- a/packagedef +++ b/packagedef @@ -1,6 +1,6 @@  Описание.Имя("asserts") - .Версия("1.5.0") + .Версия("1.6.0") .ВерсияСреды("1.0.21") .ВключитьФайл("src") .ВключитьФайл("tests") @@ -10,3 +10,4 @@ .ОпределяетМодуль("Утверждения", "src/Модули/Утверждения.os") .РазработкаЗависитОт("1bdd") .РазработкаЗависитОт("1testrunner") + .РазработкаЗависитОт("collectionos") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" index b3d3bb8..9c9344a 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" @@ -1,12 +1,11 @@ -Перем ПроверяемоеЗначение; -Перем ИмяМетода; -Перем ПараметрыМетода; -Перем ДопСообщениеОшибки; -Перем ФлагОтрицания; -Перем ФлагОтрицанияДляСообщения; -Перем СтатусыРезультатаТестирования; -Перем ПараметрыСравненияТаблиц; -Перем ПараметрыСравненияМассивов; +Перем ПроверяемоеЗначение; // Установленное проверяемое значение +Перем ИмяМетода; // Имя проверяемого метода +Перем ПараметрыМетода; // Параметры проверяемого метода +Перем ДопСообщениеОшибки; // Пользовательское сообщение ошибки +Перем ФлагОтрицания; // Нужно инвертировать результат проверки +Перем ФлагОтрицанияДляСообщения; // Значение флага отрицания для вывода пользователю +Перем ПараметрыСравненияТаблиц; // Настройки сравнения таблиц +Перем ПараметрыСравненияМассивов; // Настройки сравнения массивов Функция Что(Знач ПроверяемоеЗначениеПараметр, Знач Сообщение = "") Экспорт ПроверяемоеЗначение = ПроверяемоеЗначениеПараметр; @@ -23,11 +22,6 @@ ФлагОтрицания = Ложь; ФлагОтрицанияДляСообщения = Ложь; - СтатусыРезультатаТестирования = Новый Структура; - СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed"); - СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken"); - СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending"); - ПараметрыСравненияТаблиц = Новый Структура; ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Истина); ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Истина); @@ -88,8 +82,13 @@ Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение = ОжидаемоеЗначение) Тогда СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "РАВНО (" + ОжидаемоеЗначение + ")."); Если ТипЗнч(ПроверяемоеЗначение) <> ТипЗнч(ОжидаемоеЗначение) Тогда - СообщениеОшибки = СообщениеОшибки + СтрШаблон("%3 Тип проверяемого значения (%1) НЕ РАВЕН типу ожидаемого значения (%2).", - ТипЗнч(ПроверяемоеЗначение), ТипЗнч(ОжидаемоеЗначение), Символы.ПС); + СообщениеОшибки = СтрШаблон( + "%1 + |Тип проверяемого значения (%2) НЕ РАВЕН типу ожидаемого значения (%3).", + СообщениеОшибки, + ТипЗнч(ПроверяемоеЗначение), + ТипЗнч(ОжидаемоеЗначение) + ); КонецЕсли; ВызватьОшибкуПроверки(СообщениеОшибки); КонецЕсли; @@ -108,7 +107,10 @@ Функция БольшеИлиРавно(Знач МеньшееИлиРавноеЗначение) Экспорт Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение >= МеньшееИлиРавноеЗначение) Тогда - СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "БОЛЬШЕ ИЛИ РАВНО (" + МеньшееИлиРавноеЗначение + ")."); + СообщениеОшибки = СформироватьСообщениеОбОшибке( + ПроверяемоеЗначение, + СтрШаблон("БОЛЬШЕ ИЛИ РАВНО (%1).", МеньшееИлиРавноеЗначение) + ); ВызватьОшибкуПроверки(СообщениеОшибки); КонецЕсли; @@ -121,7 +123,10 @@ Функция МеньшеИлиРавно(Знач БольшееИлиРавноеЗначение) Экспорт Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение <= БольшееИлиРавноеЗначение) Тогда - СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "МЕНЬШЕ ИЛИ РАВНО (" + БольшееИлиРавноеЗначение + ")."); + СообщениеОшибки = СформироватьСообщениеОбОшибке( + ПроверяемоеЗначение, + СтрШаблон("МЕНЬШЕ ИЛИ РАВНО (%1).", БольшееИлиРавноеЗначение) + ); ВызватьОшибкуПроверки(СообщениеОшибки); КонецЕсли; @@ -189,7 +194,10 @@ ОжидаемыйТип = ?(ТипЗнч(ТипИлиИмяТипа) = Тип("Строка"), Тип(ТипИлиИмяТипа), ТипИлиИмяТипа); ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); Если Не ЛогическоеВыражениеВерно(ТипПроверяемогоЗначения = ОжидаемыйТип) Тогда - СообщениеОшибки = СформироватьСообщениеОбОшибке("тип - " + ТипПроверяемогоЗначения, "имеет тип (" + ОжидаемыйТип + ")."); + СообщениеОшибки = СформироватьСообщениеОбОшибке( + СтрШаблон("тип - %1", ТипПроверяемогоЗначения), + СтрШаблон("имеет тип (%1).", ОжидаемыйТип) + ); ВызватьОшибкуПроверки(СообщениеОшибки); КонецЕсли; @@ -197,43 +205,52 @@ КонецФункции Функция Между(Знач НачальноеЗначение, Знач КонечноеЗначение) Экспорт - Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение >= НачальноеЗначение И ПроверяемоеЗначение <= КонечноеЗначение) Тогда - СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "МЕЖДУ (" + НачальноеЗначение + ") и (" + КонечноеЗначение + ")."); + Если Не ЛогическоеВыражениеВерно( + ПроверяемоеЗначение >= НачальноеЗначение И ПроверяемоеЗначение <= КонечноеЗначение) Тогда + + СообщениеОшибки = СформироватьСообщениеОбОшибке( + ПроверяемоеЗначение, + СтрШаблон("МЕЖДУ (%1) и (%2).", НачальноеЗначение, КонечноеЗначение) + ); ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтотОбъект; КонецФункции Функция Содержит(Знач ИскомоеЗначение) Экспорт - Перем ИскомоеЗначениеНайдено; - ТипПроверяемоегоЗначения = ТипЗнч(ПроверяемоеЗначение); - Если ТипПроверяемоегоЗначения = Тип("Строка") Тогда - Если СтрЧислоСтрок(ИскомоеЗначение) = 1 Тогда - ИскомоеЗначениеНайдено = Найти(ПроверяемоеЗначение, ИскомоеЗначение) > 0; - Иначе - ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(ПроверяемоеЗначение, ИскомоеЗначение, ФорматДСО(ДопСообщениеОшибки)); - ИскомоеЗначениеНайдено = Истина; - КонецЕсли; + ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); - ИначеЕсли ТипПроверяемоегоЗначения = Тип("Массив") Тогда + Если ТипПроверяемогоЗначения = Тип("Строка") Тогда + ИскомоеЗначениеНайдено = СодержитСтроку(ПроверяемоеЗначение, ИскомоеЗначение); + ИначеЕсли ТипПроверяемогоЗначения = Тип("Массив") Тогда ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ИскомоеЗначение) <> Неопределено; - ИначеЕсли ТипПроверяемоегоЗначения = Тип("Структура") - Или ТипПроверяемоегоЗначения = Тип("Соответствие") Тогда + ИначеЕсли ТипПроверяемогоЗначения = Тип("Структура") + Или ТипПроверяемогоЗначения = Тип("Соответствие") Тогда + Для каждого КлючЗначение Из ПроверяемоеЗначение Цикл ИскомоеЗначениеНайдено = КлючЗначение.Значение = ИскомоеЗначение; Если ИскомоеЗначениеНайдено Тогда Прервать; КонецЕсли; КонецЦикла; - ИначеЕсли ТипПроверяемоегоЗначения = Тип("СписокЗначений") Тогда + + ИначеЕсли ТипПроверяемогоЗначения = Тип("СписокЗначений") Тогда ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ИскомоеЗначение) <> Неопределено; - КонецЕсли; + ИначеЕсли ЭтоЧитаемаяКоллекция(ТипПроверяемогоЗначения) Тогда + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Содержит(ИскомоеЗначение); + ИначеЕсли ЭтоЧитаемаяКарта(ТипПроверяемогоЗначения) Тогда + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.СодержитЗначение(ИскомоеЗначение); + Иначе + + ВызватьИсключение СтрШаблон( + "Утверждение ""Содержит"" не умеет работать с типом <%1>, %2", + ТипПроверяемогоЗначения, + ФорматДСО(ДопСообщениеОшибки) + ); - Если ИскомоеЗначениеНайдено = Неопределено Тогда - СообщениеОшибки = "Утверждение ""Содержит"" не умеет работать с типом <" + ТипПроверяемоегоЗначения + ">." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение СообщениеОшибки; КонецЕсли; Если Не ЛогическоеВыражениеВерно(ИскомоеЗначениеНайдено) Тогда @@ -247,8 +264,8 @@ Функция ИмеетДлину(Знач ОжидаемаяДлина) Экспорт Перем ФактическаяДлина; - ТипПроверяемоегоЗначения = ТипЗнч(ПроверяемоеЗначение); - Если ТипПроверяемоегоЗначения = Тип("Строка") Тогда + ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); + Если ТипПроверяемогоЗначения = Тип("Строка") Тогда ФактическаяДлина = СтрДлина(ПроверяемоеЗначение); Иначе Попытка @@ -259,12 +276,19 @@ КонецЕсли; Если ФактическаяДлина = Неопределено Тогда - СообщениеОшибки = "Утверждение ""ИмеетДлину"" не умеет работать с типом <" + ТипПроверяемоегоЗначения + ">." + ФорматДСО(ДопСообщениеОшибки); + СообщениеОшибки = СтрШаблон( + "Утверждение ""ИмеетДлину"" не умеет работать с типом <%1>. %2", + ТипПроверяемогоЗначения, + ФорматДСО(ДопСообщениеОшибки) + ); ВызватьИсключение СообщениеОшибки; КонецЕсли; Если Не ЛогическоеВыражениеВерно(ФактическаяДлина = ОжидаемаяДлина) Тогда - СообщениеОшибки = СформироватьСообщениеОбОшибке("<" +ПроверяемоеЗначение + "> с длиной " + ФактическаяДлина, "ИМЕЕТ ДЛИНУ (" + ОжидаемаяДлина + ")."); + СообщениеОшибки = СформироватьСообщениеОбОшибке( + СтрШаблон("<%1> с длиной %2", ПроверяемоеЗначение, ФактическаяДлина), + СтрШаблон("ИМЕЕТ ДЛИНУ (%1).", ОжидаемаяДлина) + ); ВызватьОшибкуПроверки(СообщениеОшибки); КонецЕсли; @@ -281,14 +305,23 @@ Исключение ИсключениеВозникло = Истина; ТекстИсключения = ОписаниеОшибки(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; - Если Не ЛогическоеВыражениеВерно(ИсключениеВозникло И Найти(ТекстИсключения, ФрагментИсключения) > 0) Тогда - СообщениеОшибки = "Ожидали, что " + ИмяМетода - + ?(ФлагОтрицания, " НЕ ", " ") - + "ВЫБРОСИТ ИСКЛЮЧЕНИЕ" - + ?(ЗначениеЗаполнено(ФрагментИсключения), " СОДЕРЖАЩЕЕ ТЕКСТ <" + ФрагментИсключения + ">, а был текст <" + ТекстИсключения + ">.", ""); - ВызватьОшибкуПроверки(СообщениеОшибки); + Если Не ЛогическоеВыражениеВерно(ИсключениеВозникло И СтрНайти(ТекстИсключения, ФрагментИсключения) > 0) Тогда + + СообщениеОшибки = Новый СтрШаблон( + "Ожидали, что %1 %2 ВЫБРОСИТ ИСКЛЮЧЕНИЕ %3", + ИмяМетода, + ?(ФлагОтрицанияДляСообщения, "НЕ", ""), + ?(ЗначениеЗаполнено(ФрагментИсключения), + СтрШаблон("СОДЕРЖАЩЕЕ ТЕКСТ <%1>, а был текст <%2>.", ФрагментИсключения, ТекстИсключения), + ТекстИсключения + ) + ); + + ВызватьОшибкуПроверки(СообщениеОшибки, ИнформацияОбОшибке); + КонецЕсли; Возврат ЭтотОбъект; @@ -300,7 +333,10 @@ // // Параметры: // ИмяМетода - Строка - Имя метода, наличие которого требуется проверить -// +// +// Возвращаемое значение: +// БДДАссерт - Текущий объект +// Функция ИмеетМетод(Знач ИмяМетода) Экспорт Перем Рефлектор; @@ -387,28 +423,23 @@ КонецФункции Функция Идентично(Знач ОжидаемоеЗначение) Экспорт - + ТипОжидаемогоЗначения = ТипЗнч(ОжидаемоеЗначение); - ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); - - // Проверяем соответствие типов - Если ТипПроверяемогоЗначения <> ТипОжидаемогоЗначения тогда - СообщениеОшибки = СформироватьСообщениеОбОшибке(Строка(ПроверяемоеЗначение), СтрШаблон("Будет идентично (%1)", ОжидаемоеЗначение)); - СообщениеОшибки = СообщениеОшибки + СтрШаблон("%3 Тип проверяемого значения (%1) НЕ РАВЕН типу ожидаемого значения (%2).", - ТипПроверяемогоЗначения, ТипОжидаемогоЗначения, Символы.ПС); - ВызватьОшибкуПроверки(СообщениеОшибки); - КонецЕсли; - + + Флаги = СохранитьФлаги(); + ИмеетТип(ТипОжидаемогоЗначения); + ВосстановитьФлаги(Флаги); + // Направляем в соответствующие методы в зависимости от типа - Если ТипОжидаемогоЗначения = Тип("ТаблицаЗначений") тогда + Если ТипОжидаемогоЗначения = Тип("ТаблицаЗначений") Тогда РавнаТаблице(ОжидаемоеЗначение, Ложь); - ИначеЕсли ТипОжидаемогоЗначения = Тип("Массив") тогда + ИначеЕсли ТипОжидаемогоЗначения = Тип("Массив") Тогда РавноМассиву(ОжидаемоеЗначение); - ИначеЕсли ТипОжидаемогоЗначения = Тип("Структура") - Или ТипОжидаемогоЗначения = Тип("Соответствие") тогда + ИначеЕсли ТипОжидаемогоЗначения = Тип("Структура") + Или ТипОжидаемогоЗначения = Тип("Соответствие") Тогда РавноСтруктуреИлиСоответствию(ОжидаемоеЗначение); Иначе - // Для примитивных типов используем обычное сравнение + // Для прочих типов используем обычное сравнение Равно(ОжидаемоеЗначение); КонецЕсли; @@ -417,14 +448,14 @@ Функция РавноМассиву(Знач ОжидаемоеЗначение) Экспорт - Если Не ТипЗнч(ОжидаемоеЗначение) = Тип("Массив") тогда + Если Не ТипЗнч(ОжидаемоеЗначение) = Тип("Массив") Тогда СообщениеОшибки = СформироватьСообщениеОбОшибке(ОжидаемоеЗначение, "ИМЕЕТ ТИП <Массив>."); ВызватьОшибкуПроверки(СообщениеОшибки); КонецЕсли; // Используем функцию с детализацией РезультатСравнения = МассивыИдентичныСДетализацией(ПроверяемоеЗначение, ОжидаемоеЗначение, ""); - Если Не ЛогическоеВыражениеВерно(РезультатСравнения.Идентичны) тогда + Если Не ЛогическоеВыражениеВерно(РезультатСравнения.Идентичны) Тогда СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, СтрШаблон("РАВНО массиву (%1)%2%3", ОжидаемоеЗначение, Символы.ПС, РезультатСравнения.ОписаниеОшибки)); ВызватьОшибкуПроверки(СообщениеОшибки); @@ -436,15 +467,15 @@ Функция РавноСтруктуреИлиСоответствию(Знач ОжидаемоеЗначение) Экспорт ТипОжидаемогоЗначения = ТипЗнч(ОжидаемоеЗначение); - Если Не (ТипОжидаемогоЗначения = Тип("Структура") - Или ТипОжидаемогоЗначения = Тип("Соответствие")) тогда + Если Не (ТипОжидаемогоЗначения = Тип("Структура") + Или ТипОжидаемогоЗначения = Тип("Соответствие")) Тогда СообщениеОшибки = СформироватьСообщениеОбОшибке(ОжидаемоеЗначение, "ИМЕЕТ ТИП <Структура> или <Соответствие>."); ВызватьОшибкуПроверки(СообщениеОшибки); КонецЕсли; // Используем функцию с детализацией РезультатСравнения = СтруктурыИлиСоответствияИдентичныСДетализацией(ПроверяемоеЗначение, ОжидаемоеЗначение, ""); - Если Не ЛогическоеВыражениеВерно(РезультатСравнения.Идентичны) тогда + Если Не ЛогическоеВыражениеВерно(РезультатСравнения.Идентичны) Тогда ТипНазвание = ?(ТипОжидаемогоЗначения = Тип("Структура"), "структуре", "соответствию"); СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, СтрШаблон("РАВНО %1 (%2)%3%4", ТипНазвание, ОжидаемоеЗначение, Символы.ПС, РезультатСравнения.ОписаниеОшибки)); @@ -466,7 +497,7 @@ Результат = Новый Структура("Идентичны, ОписаниеОшибки", Истина, ""); // Проверяем типы - Если ТипЗнч(Массив1) <> Тип("Массив") Или ТипЗнч(Массив2) <> Тип("Массив") тогда + Если ТипЗнч(Массив1) <> Тип("Массив") Или ТипЗнч(Массив2) <> Тип("Массив") Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: ожидался массив, но получен %2 и %3", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу), ТипЗнч(Массив1), ТипЗнч(Массив2)); @@ -474,7 +505,7 @@ КонецЕсли; // Проверяем длину - Если Массив1.Количество() <> Массив2.Количество() тогда + Если Массив1.Количество() <> Массив2.Количество() Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: разное количество элементов - ожидалось %2, получено %3", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу), Массив2.Количество(), Массив1.Количество()); @@ -482,16 +513,16 @@ КонецЕсли; УчитыватьПорядокЗначений = Истина; - Если ПараметрыСравненияМассивов.Свойство("УчитыватьПорядокЗначений") тогда + Если ПараметрыСравненияМассивов.Свойство("УчитыватьПорядокЗначений") Тогда УчитыватьПорядокЗначений = ПараметрыСравненияМассивов.УчитыватьПорядокЗначений; КонецЕсли; - Если УчитыватьПорядокЗначений тогда + Если УчитыватьПорядокЗначений Тогда // Проверяем все элементы по порядку Для Индекс = 0 По Массив1.Количество() - 1 Цикл НовыйПуть = ?(ПутьКЭлементу = "", СтрШаблон("[%1]", Индекс), СтрШаблон("%1[%2]", ПутьКЭлементу, Индекс)); РезультатСравненияЭлемента = ЭлементыИдентичныСДетализацией(Массив1[Индекс], Массив2[Индекс], НовыйПуть); - Если Не РезультатСравненияЭлемента.Идентичны тогда + Если Не РезультатСравненияЭлемента.Идентичны Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = РезультатСравненияЭлемента.ОписаниеОшибки; Возврат Результат; @@ -509,13 +540,13 @@ НайденИндекс = -1; Для ИндексОжид = 0 По ОжидаемыеЭлементы.Количество() - 1 Цикл РезультатСравненияБазовый = ЭлементыИдентичныСДетализацией(ФактическийЭлемент, ОжидаемыеЭлементы[ИндексОжид], ""); - Если РезультатСравненияБазовый.Идентичны тогда + Если РезультатСравненияБазовый.Идентичны Тогда НайденИндекс = ИндексОжид; Прервать; КонецЕсли; КонецЦикла; - Если НайденИндекс = -1 тогда + Если НайденИндекс = -1 Тогда Результат.Идентичны = Ложь; НовыйПуть = ?(ПутьКЭлементу = "", СтрШаблон("[%1]", ИндексФакт), СтрШаблон("%1[%2]", ПутьКЭлементу, ИндексФакт)); Результат.ОписаниеОшибки = СтрШаблон("Элемент %1 со значением %2 не найден в ожидаемом массиве", @@ -545,14 +576,14 @@ ТипОбъекта2 = ТипЗнч(Объект2); // Проверяем типы - Если ТипОбъекта1 <> ТипОбъекта2 тогда + Если ТипОбъекта1 <> ТипОбъекта2 Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: ожидался %2, получен %3", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу), ТипОбъекта2, ТипОбъекта1); Возврат Результат; КонецЕсли; - Если Не (ТипОбъекта1 = Тип("Структура") Или ТипОбъекта1 = Тип("Соответствие")) тогда + Если Не (ТипОбъекта1 = Тип("Структура") Или ТипОбъекта1 = Тип("Соответствие")) Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: ожидались структура или соответствие, получен %2", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу), ТипОбъекта1); @@ -560,7 +591,7 @@ КонецЕсли; // Проверяем количество элементов - Если Объект1.Количество() <> Объект2.Количество() тогда + Если Объект1.Количество() <> Объект2.Количество() Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: разное количество элементов - ожидалось %2, получено %3", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу), Объект2.Количество(), Объект1.Количество()); @@ -572,7 +603,7 @@ Ключ = КлючЗначение.Ключ; ОжидаемоеЗначение = КлючЗначение.Значение; - Если Не СодержитКлюч(Объект1, Ключ) тогда + Если Не СодержитКлюч(Объект1, Ключ) Тогда Результат.Идентичны = Ложь; НовыйПуть = ?(ПутьКЭлементу = "", СтрШаблон(".%1", Ключ), СтрШаблон("%1.%2", ПутьКЭлементу, Ключ)); Результат.ОписаниеОшибки = СтрШаблон("Ключ %1 отсутствует в фактическом объекте", НовыйПуть); @@ -582,7 +613,7 @@ ФактическоеЗначение = ПолучитьЗначениеПоКлючу(Объект1, Ключ); НовыйПуть = ?(ПутьКЭлементу = "", СтрШаблон(".%1", Ключ), СтрШаблон("%1.%2", ПутьКЭлементу, Ключ)); РезультатСравненияЗначения = ЭлементыИдентичныСДетализацией(ФактическоеЗначение, ОжидаемоеЗначение, НовыйПуть); - Если Не РезультатСравненияЗначения.Идентичны тогда + Если Не РезультатСравненияЗначения.Идентичны Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = РезультатСравненияЗначения.ОписаниеОшибки; Возврат Результат; @@ -592,7 +623,7 @@ // Проверяем, что в фактическом объекте нет лишних ключей Для Каждого КлючЗначение Из Объект1 Цикл Ключ = КлючЗначение.Ключ; - Если Не СодержитКлюч(Объект2, Ключ) тогда + Если Не СодержитКлюч(Объект2, Ключ) Тогда Результат.Идентичны = Ложь; НовыйПуть = ?(ПутьКЭлементу = "", СтрШаблон(".%1", Ключ), СтрШаблон("%1.%2", ПутьКЭлементу, Ключ)); Результат.ОписаниеОшибки = СтрШаблон("Лишний ключ %1 в фактическом объекте", НовыйПуть); @@ -618,7 +649,7 @@ ТипЭлемента2 = ТипЗнч(Элемент2); // Сначала проверяем типы - Если ТипЭлемента1 <> ТипЭлемента2 тогда + Если ТипЭлемента1 <> ТипЭлемента2 Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: ожидался %2, получен %3", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу), ТипЭлемента2, ТипЭлемента1); @@ -626,20 +657,20 @@ КонецЕсли; // Для структур и соответствий - Если ТипЭлемента1 = Тип("Структура") Или ТипЭлемента1 = Тип("Соответствие") тогда + Если ТипЭлемента1 = Тип("Структура") Или ТипЭлемента1 = Тип("Соответствие") Тогда Возврат СтруктурыИлиСоответствияИдентичныСДетализацией(Элемент1, Элемент2, ПутьКЭлементу); КонецЕсли; // Для массивов - Если ТипЭлемента1 = Тип("Массив") тогда + Если ТипЭлемента1 = Тип("Массив") Тогда Возврат МассивыИдентичныСДетализацией(Элемент1, Элемент2, ПутьКЭлементу); КонецЕсли; // Для таблиц значений - Если ТипЭлемента1 = Тип("ТаблицаЗначений") тогда + Если ТипЭлемента1 = Тип("ТаблицаЗначений") Тогда // Используем существующую логику сравнения таблиц без детализации Различия = РазличияТаблиц(Элемент1, Элемент2, Ложь); - Если Различия.Количество() > 0 тогда + Если Различия.Количество() > 0 Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: таблицы значений не идентичны", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу)); @@ -648,7 +679,7 @@ КонецЕсли; // Для остальных типов - простое сравнение - Если Элемент1 <> Элемент2 тогда + Если Элемент1 <> Элемент2 Тогда Результат.Идентичны = Ложь; Результат.ОписаниеОшибки = СтрШаблон("Различие в %1: ожидалось %2, получено %3", ?(ПутьКЭлементу = "", "корне", ПутьКЭлементу), @@ -668,25 +699,25 @@ ТипЗначения = ТипЗнч(Значение); - Если Значение = Неопределено тогда + Если Значение = Неопределено Тогда Возврат "Неопределено"; - ИначеЕсли ТипЗначения = Тип("Строка") тогда - Если СтрДлина(Значение) > 50 тогда + ИначеЕсли ТипЗначения = Тип("Строка") Тогда + Если СтрДлина(Значение) > 50 Тогда Возврат """" + Лев(Значение, 47) + "..."""; Иначе Возврат """" + Значение + """"; КонецЕсли; - ИначеЕсли ТипЗначения = Тип("Число") Или ТипЗначения = Тип("Булево") тогда + ИначеЕсли ТипЗначения = Тип("Число") Или ТипЗначения = Тип("Булево") Тогда Возврат Строка(Значение); - ИначеЕсли ТипЗначения = Тип("Дата") тогда + ИначеЕсли ТипЗначения = Тип("Дата") Тогда Возврат Формат(Значение, "ДФ=dd.MM.yyyy ВФ=HH:mm:ss"); - ИначеЕсли ТипЗначения = Тип("Массив") тогда + ИначеЕсли ТипЗначения = Тип("Массив") Тогда Возврат СтрШаблон("Массив(%1)", Значение.Количество()); - ИначеЕсли ТипЗначения = Тип("Структура") тогда + ИначеЕсли ТипЗначения = Тип("Структура") Тогда Возврат СтрШаблон("Структура(%1)", Значение.Количество()); - ИначеЕсли ТипЗначения = Тип("Соответствие") тогда + ИначеЕсли ТипЗначения = Тип("Соответствие") Тогда Возврат СтрШаблон("Соответствие(%1)", Значение.Количество()); - ИначеЕсли ТипЗначения = Тип("ТаблицаЗначений") тогда + ИначеЕсли ТипЗначения = Тип("ТаблицаЗначений") Тогда Возврат СтрШаблон("ТаблицаЗначений(%1х%2)", Значение.Количество(), Значение.Колонки.Количество()); Иначе Возврат Строка(ТипЗначения); @@ -699,9 +730,9 @@ ТипОбъекта = ТипЗнч(Объект); - Если ТипОбъекта = Тип("Структура") тогда + Если ТипОбъекта = Тип("Структура") Тогда Возврат Объект.Свойство(Ключ); - ИначеЕсли ТипОбъекта = Тип("Соответствие") тогда + ИначеЕсли ТипОбъекта = Тип("Соответствие") Тогда Возврат Объект.Получить(Ключ) <> Неопределено; Иначе ВызватьИсключение "Неподдерживаемый тип объекта для проверки ключа: " + ТипОбъекта; @@ -714,9 +745,9 @@ ТипОбъекта = ТипЗнч(Объект); - Если ТипОбъекта = Тип("Структура") тогда + Если ТипОбъекта = Тип("Структура") Тогда Возврат Объект[Ключ]; - ИначеЕсли ТипОбъекта = Тип("Соответствие") тогда + ИначеЕсли ТипОбъекта = Тип("Соответствие") Тогда Возврат Объект.Получить(Ключ); Иначе ВызватьИсключение "Неподдерживаемый тип объекта для получения значения по ключу: " + ТипОбъекта; @@ -733,9 +764,9 @@ Возврат Символы.ПС + ДопСообщениеОшибки; КонецФункции -Процедура ВызватьОшибкуПроверки(Знач СообщениеОшибки) - Префикс = "[" + СтатусыРезультатаТестирования.ОшибкаПроверки + "]"; - ТекстИсключения = Префикс + " " + СообщениеОшибки; +Процедура ВызватьОшибкуПроверки(Знач СообщениеОшибки, Знач Причина = Неопределено) + + ТекстИсключения = "[Failed] " + СообщениеОшибки; Попытка ВызватьИсключение ТекстИсключения; Исключение @@ -768,7 +799,14 @@ КонецЦикла; ТекстИсключения = СтрСоединить(МассивТекстИсключения, Символы.ПС); - ВызватьИсключение ТекстИсключения; + Контекст = Новый ИсключениеОшибкаУтверждения(); + + Если Число(Лев(Новый СистемнаяИнформация().Версия, 1)) >= 2 Тогда + ВызватьИсключение Новый ИнформацияОбОшибке(ТекстИсключения, Контекст, Причина); + Иначе + ВызватьИсключение Новый ИнформацияОбОшибке(ТекстИсключения, Контекст); + КонецЕсли; + КонецПопытки; КонецПроцедуры @@ -1022,4 +1060,52 @@ Возврат Представление; КонецФункции +Функция ЭтоЧитаемаяКоллекция(Тип) + Возврат УтвержденияСлужебный.КоллекшоносЗагружен() + И Новый Рефлектор().МетодСуществует(Тип, "Содержит"); +КонецФункции + +Функция ЭтоЧитаемаяКарта(Тип) + Возврат УтвержденияСлужебный.КоллекшоносЗагружен() + И Новый Рефлектор().МетодСуществует(Тип, "СодержитЗначение"); +КонецФункции + +Функция СодержитСтроку(ПроверяемоеЗначение, ИскомоеЗначение) + + Если СтрЧислоСтрок(ИскомоеЗначение) = 1 Тогда + Результат = СтрНайти(ПроверяемоеЗначение, ИскомоеЗначение) > 0; + Иначе + ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках( + ПроверяемоеЗначение, + ИскомоеЗначение, ФорматДСО(ДопСообщениеОшибки) + ); + Результат = Истина; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция СохранитьФлаги() + + Результат = Новый Структура( + "ФлагОтрицания, ФлагОтрицанияДляСообщения", + ФлагОтрицания, + ФлагОтрицанияДляСообщения + ); + + ФлагОтрицания = Ложь; + ФлагОтрицанияДляСообщения = Ложь; + + Возврат Результат; + +КонецФункции + +Процедура ВосстановитьФлаги(Флаги) + + ФлагОтрицания = Флаги.ФлагОтрицания; + ФлагОтрицанияДляСообщения = Флаги.ФлагОтрицанияДляСообщения; + +КонецПроцедуры + // } Helpers diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\236\321\210\320\270\320\261\320\272\320\260\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\236\321\210\320\270\320\261\320\272\320\260\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" new file mode 100644 index 0000000..91c2edf --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\236\321\210\320\270\320\261\320\272\320\260\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" @@ -0,0 +1,8 @@ +Перем Тип; + +Процедура ОбработкаПолученияПредставления(Представление, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Представление = СтрШаблон("{Тип = %1}", Тип); +КонецПроцедуры + +Тип = "Ошибка утверждения"; diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" index 5b5e5e2..15f4a39 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.os" @@ -1,8 +1,17 @@ Процедура Проверить(Условие, ДопСообщениеОшибки = "") Экспорт - Если Не Условие Тогда - СообщениеОшибки = "Переданный параметр ("+Формат(Условие, "БЛ=ложь; БИ=истина")+") не является Истиной, а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); + + Если Условие Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Переданный параметр (%1) не является Истиной, а хотели, чтобы являлся. %2", + Формат(Условие, "БЛ=ложь; БИ=истина"), + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры Процедура ПроверитьИстину(Условие, ДопСообщениеОшибки = "") Экспорт @@ -10,154 +19,294 @@ КонецПроцедуры Процедура ПроверитьЛожь(Условие, ДопСообщениеОшибки = "") Экспорт - Если Условие Тогда - СообщениеОшибки = "Переданный параметр ("+Формат(Условие, "БЛ=ложь; БИ=истина")+") не является Ложью, а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); + + Если Не Условие Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Переданный параметр (%1) не является Ложью, а хотели, чтобы являлся. %2", + Формат(Условие, "БЛ=ложь; БИ=истина"), + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры -Процедура ПроверитьДату(_Дата, _Период, ДопСообщениеОшибки = "") Экспорт - Если _Дата < _Период.ДатаНачала или _Дата > _Период.ДатаОкончания Тогда - представление = ПредставлениеПериода(_Период.ДатаНачала, _Период.ДатаОкончания, "ФП = Истина"); - СообщениеОшибки = "Переданный параметр ("+Формат(_Дата, "ДФ='dd.MM.yyyy HH:mm:ss'")+") не входит в период "+представление+", а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); +Процедура ПроверитьДату(Дата, Период, ДопСообщениеОшибки = "") Экспорт + + Если Дата > Период.ДатаНачала И Дата < Период.ДатаОкончания Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Переданный параметр (%1) не входит в период %2, а хотели, чтобы входил. %3", + Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'"), + ПредставлениеПериода(Период.ДатаНачала, Период.ДатаОкончания, "ФП = Истина") + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры -Процедура ПроверитьРавенствоДатСТочностью2Секунды(_Дата, _Дата2, ДопСообщениеОшибки = "") Экспорт - Если _Дата < _Дата2-2 или _Дата > _Дата2+2 Тогда - СообщениеОшибки = "Переданная дата ("+Формат(_Дата, "ДФ='dd.MM.yyyy HH:mm:ss'")+") не равна дате ("+Формат(_Дата2, "ДФ='dd.MM.yyyy HH:mm:ss'")+") с точностью до 2-х секунд, а хотели, чтобы они равнялись." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); +Процедура ПроверитьРавенствоДатСТочностью2Секунды(Дата, Дата2, ДопСообщениеОшибки = "") Экспорт + + Если Дата > Дата2 - 2 И Дата < Дата2 + 2 Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Переданная дата (%1) не равна дате (%2) с точностью до 2-х секунд, а хотели, чтобы они равнялись. %3", + Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'"), + Формат(Дата2, "ДФ='dd.MM.yyyy HH:mm:ss'"), + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры Процедура ПроверитьРавенство(ПервоеЗначение, ВтороеЗначение, ДопСообщениеОшибки = "") Экспорт Если ПервоеЗначение <> ВтороеЗначение Тогда СообщениеОшибки = "Сравниваемые значения ("+ПервоеЗначение+"; "+ВтороеЗначение+") не равны, а хотели, чтобы были равны." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); + ВызватьОшибкуУтверждения(СообщениеОшибки); КонецЕсли; КонецПроцедуры Процедура ПроверитьНеРавенство(ПервоеЗначение, ВтороеЗначение, ДопСообщениеОшибки = "") Экспорт - Если ПервоеЗначение = ВтороеЗначение Тогда - СообщениеОшибки = "Сравниваемые значения ("+ПервоеЗначение+"; "+ВтороеЗначение+") равны, а хотели, чтобы были не равны." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); + + Если ПервоеЗначение <> ВтороеЗначение Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Сравниваемые значения (%1; %2) равны, а хотели, чтобы были не равны. %3", + ПервоеЗначение, + ВтороеЗначение, + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры -Процедура ПроверитьБольше(_Больше, _Меньше, ДопСообщениеОшибки = "") Экспорт - Если _Больше <= _Меньше Тогда - СообщениеОшибки = "Первый параметр ("+_Больше+") меньше или равен второму ("+_Меньше+") а хотели, чтобы был больше." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); +Процедура ПроверитьБольше(Больше, Меньше, ДопСообщениеОшибки = "") Экспорт + + Если Больше > Меньше Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Первый параметр (%1) меньше или равен второму (%2) а хотели, чтобы был больше. %3", + Больше, + Меньше, + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры -Процедура ПроверитьБольшеИлиРавно(_Больше, _Меньше, ДопСообщениеОшибки = "") Экспорт - Если _Больше < _Меньше Тогда - СообщениеОшибки = "Первый параметр ("+_Больше+") меньше второго ("+_Меньше+") а хотели, чтобы был больше или равен." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); +Процедура ПроверитьБольшеИлиРавно(Больше, Меньше, ДопСообщениеОшибки = "") Экспорт + + Если Больше >= Меньше Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Первый параметр (%1) меньше второго (%2) а хотели, чтобы был больше или равен. %3", + Больше, + Меньше, + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры -Процедура ПроверитьМеньше(проверяемоеЗначение1, проверяемоеЗначение2, СообщениеОбОшибке = "") Экспорт - Если проверяемоеЗначение1 >= проверяемоеЗначение2 Тогда - ВызватьИсключение "Значение <"+проверяемоеЗначение1+"> больше или равно, чем <"+проверяемоеЗначение2+">, а ожидалось меньше"+ - ФорматДСО(СообщениеОбОшибке); - КонецЕсли; +Процедура ПроверитьМеньше(Меньше, Больше, ДопСообщениеОшибки = "") Экспорт + + Если Больше > Меньше Тогда + Возврат; + КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Первый параметр (%1) больше или равен второму (%2) а хотели, чтобы был меньше. %3", + Меньше, + Больше, + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры -Процедура ПроверитьМеньшеИлиРавно(проверяемоеЗначение1, проверяемоеЗначение2, СообщениеОбОшибке = "") Экспорт - Если проверяемоеЗначение1 > проверяемоеЗначение2 Тогда - ВызватьИсключение "Значение <"+проверяемоеЗначение1+"> больше, чем <"+проверяемоеЗначение2+">, а ожидалось меньше или равно"+ - ФорматДСО(СообщениеОбОшибке); - КонецЕсли; +Процедура ПроверитьМеньшеИлиРавно(Меньше, Больше, ДопСообщениеОшибки = "") Экспорт + + Если Больше >= Меньше Тогда + Возврат; + КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Первый параметр (%1) больше второго (%2) а хотели, чтобы был больше или равен. %3", + Меньше, + Больше, + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры // проверка идет через ЗначениеЗаполнено, но мутабельные значение всегда считаем заполненными Процедура ПроверитьЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт - Попытка - фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); + + Попытка + Заполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); Исключение - Возврат; - КонецПопытки; - Если НЕ фЗаполнено Тогда - ВызватьИсключение "Значение ("+ПроверяемоеЗначение+") не заполнено, а ожидалась заполненность" + ФорматДСО(ДопСообщениеОшибки); - КонецЕсли; + Заполнено = Истина; + КонецПопытки; + + Если Заполнено Тогда + Возврат; + КонецЕсли; + + ВызватьОшибкуУтверждения( + СтрШаблон( + "Значение (%1) не заполнено, а ожидалась заполненность %2", + ПроверяемоеЗначение, + ФорматДСО(ДопСообщениеОшибки) + ) + ); + КонецПроцедуры Процедура ПроверитьНеЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт - СообщениеОшибки = "Значение ("+ПроверяемоеЗначение+") заполнено, а ожидалась незаполненность" + ФорматДСО(ДопСообщениеОшибки); - Попытка - фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); + + СообщениеОшибки = СтрШаблон( + "Значение (%1) заполнено, а ожидалась незаполненность", + ПроверяемоеЗначение, + ФорматДСО(ДопСообщениеОшибки) + ); + + Попытка + Заполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); Исключение - ВызватьИсключение СообщениеОшибки; - КонецПопытки; - Если фЗаполнено Тогда - ВызватьИсключение СообщениеОшибки; - КонецЕсли; + Заполнено = Истина; + КонецПопытки; + + Если Заполнено Тогда + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецЕсли; + КонецПроцедуры Процедура ПроверитьТип(Значение, ТипИлиИмяТипа, ДопСообщениеОшибки = "") Экспорт - + Если ТипЗнч(ТипИлиИмяТипа) = Тип("Строка") Тогда ОжидаемыйТип = Тип(ТипИлиИмяТипа); ИначеЕсли ТипЗнч(ТипИлиИмяТипа) = Тип("Тип") Тогда ОжидаемыйТип = ТипИлиИмяТипа; Иначе + ТекстИсключения = СтрШаблон( - "ПроверитьТип: Тип значения параметра ТипИлиИмяТипа должен быть <Тип> или <Строка>, а получили <%1>.%2", + "ПроверитьТип: Тип значения параметра ТипИлиИмяТипа должен быть <Тип> или <Строка>, а получили <%1>. %2", ТипЗнч(ТипИлиИмяТипа), - ФорматДСО(ДопСообщениеОшибки)); - ВызватьИсключение(ТекстИсключения); + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(ТекстИсключения); + КонецЕсли; - Если ТипЗнч(Значение) <> ОжидаемыйТип Тогда - ОшибкаПроверки = СтрШаблон( - "Типом значения <%1> является <%2>, а ожидался тип <%3>.%4", - Значение, ТипЗнч(Значение), ТипИлиИмяТипа, ФорматДСО(ДопСообщениеОшибки)); - ВызватьИсключение(ОшибкаПроверки); + + Если ТипЗнч(Значение) = ОжидаемыйТип Тогда + Возврат; КонецЕсли; + + ОшибкаПроверки = СтрШаблон( + "Типом значения <%1> является <%2>, а ожидался тип <%3>. %4", + Значение, + ТипЗнч(Значение), + ТипИлиИмяТипа, + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(ОшибкаПроверки); + КонецПроцедуры Процедура ПроверитьЧтоВСтрокеСодержатсяТолькоЦифры(Знач ИсходнаяСтрока, ДопСообщениеОшибки = "") Экспорт - //порт из testrunner в составе oscript-engine - СообщениеОшибки = "Строка ("+ИсходнаяСтрока+") содержит не только цифры, а ожидалась обратное" + ФорматДСО(ДопСообщениеОшибки); - + + // Порт из testrunner в составе oscript-engine + + СообщениеОшибки = СтрШаблон( + "Строка (%1) содержит не только цифры, а ожидалась обратное %2", + ИсходнаяСтрока, + ФорматДСО(ДопСообщениеОшибки) + ); + ТолькоЦифры = Ложь; ДлинаСтроки = СтрДлина(ИсходнаяСтрока); + Для Сч = 1 По ДлинаСтроки Цикл + ТекущийСимвол = КодСимвола(Сред(ИсходнаяСтрока, Сч, 1)); + Если 48 <= ТекущийСимвол И ТекущийСимвол <= 57 Тогда ТолькоЦифры = Истина; Иначе ТолькоЦифры = Ложь; Прервать; КонецЕсли; + КонецЦикла; + Если НЕ ТолькоЦифры Тогда - ВызватьИсключение СообщениеОшибки; + ВызватьОшибкуУтверждения(СообщениеОшибки); КонецЕсли; + КонецПроцедуры -Процедура ПроверитьВхождение(строка, подстрокаПоиска, ДопСообщениеОшибки = "") Экспорт - Если Найти(строка, подстрокаПоиска) = 0 Тогда - СообщениеОшибки = "Искали в <"+строка+"> подстроку <"+подстрокаПоиска+">, но не нашли." + ФорматДСО(ДопСообщениеОшибки); - ВызватьИсключение(СообщениеОшибки); +Процедура ПроверитьВхождение(Строка, ПодстрокаПоиска, ДопСообщениеОшибки = "") Экспорт + + Если СтрНайти(Строка, ПодстрокаПоиска) <> 0 Тогда + Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон( + "Искали в <%1> подстроку <%2>, но не нашли. %3", + Строка, + ПодстрокаПоиска, + ФорматДСО(ДопСообщениеОшибки) + ); + + ВызватьОшибкуУтверждения(СообщениеОшибки); + КонецПроцедуры Процедура ПроверитьКодСОшибкой( Код, Ошибка, ДопСообщениеОшибки = "" ) Экспорт + + ИнформацияОбОшибке = Неопределено; + Попытка Сценарий = ЗагрузитьСценарийИзСтроки(Код); - СообщениеОшибки = "Ожидали ошибку '"+Ошибка+"', но ее не было"; + СообщениеОшибки = СтрШаблон("Ожидали ошибку '%1', но ее не было", Ошибка); Исключение - ОписаниеОшибки = ИнформацияОбОшибке().Описание; - Если Найти(ОписаниеОшибки, Ошибка ) = 0 Тогда - СообщениеОшибки = "Ожидали ошибку '"+Ошибка+"', а была ошибка '"+ОписаниеОшибки+"'"; - Иначе + + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОписаниеОшибки = ИнформацияОбОшибке.Описание; + + Если СтрНайти(ОписаниеОшибки, Ошибка ) <> 0 Тогда Возврат; КонецЕсли; + + СообщениеОшибки = СтрШаблон("Ожидали ошибку '%1', а была ошибка %2", Ошибка, ОписаниеОшибки); + КонецПопытки; - ВызватьИсключение(СообщениеОшибки + ФорматДСО(ДопСообщениеОшибки)); + + ВызватьОшибкуУтверждения(СтрШаблон("%1 %2", СообщениеОшибки, ФорматДСО(ДопСообщениеОшибки)), ИнформацияОбОшибке); + КонецПроцедуры // Проверяет существование метода у объекта @@ -172,22 +321,43 @@ // ДопСообщениеОшибки - Строка - Необязательный. Дополнительное пояснение проверки. // Включается в текст исключения в случае, если проверка не была пройдена Процедура ПроверитьМетодСуществует(Знач Объект, Знач ИмяМетода, Знач ДопСообщениеОшибки = "") Экспорт - Перем Рефлектор; - Рефлектор = Новый Рефлектор; - Если НЕ Рефлектор.МетодСуществует(Объект, ИмяМетода) Тогда - ВызватьИсключение "Ожидали, что объект имеет метод с именем " + ИмяМетода + ФорматДСО(ДопСообщениеОшибки); + Если Новый Рефлектор.МетодСуществует(Объект, ИмяМетода) Тогда + Возврат КонецЕсли; + + ВызватьОшибкуУтверждения( + СтрШаблон( + "Ожидали, что объект имеет метод с именем %1. %2", + ИмяМетода, + ФорматДСО(ДопСообщениеОшибки) + ) + ); + КонецПроцедуры Функция ФорматДСО(ДопСообщениеОшибки) + Если ДопСообщениеОшибки = "" Тогда Возврат ""; КонецЕсли; - + Возврат Символы.ПС + ДопСообщениеОшибки; + КонецФункции Функция ПредставлениеПериода(ДатаНачала, ДатаОкончания, ФорматнаяСтрока = Неопределено) - Возврат "с "+ДатаНачала+" по "+ДатаОкончания; + Возврат СтрШаблон("с %1 по %2", ДатаНачала, ДатаОкончания); КонецФункции + +Процедура ВызватьОшибкуУтверждения(ТекстИсключения, Причина = Неопределено) + + Контекст = Новый ИсключениеОшибкаУтверждения(); + + Если Число(Лев(Новый СистемнаяИнформация().Версия, 1)) >= 2 Тогда + ВызватьИсключение Новый ИнформацияОбОшибке(ТекстИсключения, Контекст, Причина); + Иначе + ВызватьИсключение Новый ИнформацияОбОшибке(ТекстИсключения, Контекст); + КонецЕсли; + +КонецПроцедуры diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" new file mode 100644 index 0000000..b70e70e --- /dev/null +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -0,0 +1,25 @@ +Перем Рефлектор; +Перем ИзвестныеТипыКоличество; +Перем КоллекшоносЗагружен; + +Функция КоллекшоносЗагружен() Экспорт + + Если КоллекшоносЗагружен = Истина Тогда + Возврат Истина; + КонецЕсли; + + Рефлектор = Новый Рефлектор(); + + ИзвестныеТипы = Рефлектор.ИзвестныеТипы(); + + Если ИзвестныеТипыКоличество = ИзвестныеТипы.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + ИзвестныеТипыКоличество = ИзвестныеТипы.Количество(); + + КоллекшоносЗагружен = ИзвестныеТипы.Найти("Обходимое", "Имя") <> Неопределено; + + Возврат КоллекшоносЗагружен; + +КонецФункции diff --git a/tests/bdd-assertions-identity-tests.os b/tests/bdd-assertions-identity-tests.os index 13e11c8..680fb43 100644 --- a/tests/bdd-assertions-identity-tests.os +++ b/tests/bdd-assertions-identity-tests.os @@ -66,7 +66,9 @@ Ожидаем.Что(ПроверяемоеЗначение).Идентично(ОжидаемоеЗначение); Исключение // Ожидаемое поведение - исключение должно быть выброшено при сравнении разных типов - Если СтрНайти(ИнформацияОбОшибке().Описание, "НЕ РАВЕН типу ожидаемого значения") > 0 Тогда + Если СтрНайти( + ИнформацияОбОшибке().Описание, + "Ожидали, что проверяемое значение (тип - Строка) имеет тип (Число).") > 0 Тогда Возврат; КонецЕсли; КонецПопытки; diff --git a/tests/bdd-assertions-tests.os b/tests/bdd-assertions-tests.os index a608f72..356b1b4 100644 --- a/tests/bdd-assertions-tests.os +++ b/tests/bdd-assertions-tests.os @@ -278,3 +278,26 @@ Ожидаем.Что(Контекст).Метод("Вставить", Массив).Не_().ВыбрасываетИсключение("Недостаточно фактических параметров"); КонецПроцедуры + +&Тест +Процедура ТестДолжен_Проверить_ЧтоНеВыбрасываетсяИсключение() Экспорт + + Контекст = Новый Структура; + + Попытка + + Ожидаем.Что(Контекст) + .Метод("Вставить") + .Не_() + .ВыбрасываетИсключение(); + + Исключение + + ТекстОшибки = ОписаниеОшибки(); + Ожидаем.Что(ТекстОшибки) + .Содержит("Ожидали, что Вставить НЕ ВЫБРОСИТ ИСКЛЮЧЕНИЕ") + .Содержит("Недостаточно фактических параметров"); + + КонецПопытки; + +КонецПроцедуры diff --git "a/tests/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\232\320\276\320\273\320\273\320\265\320\272\321\210\320\276\320\275\320\276\321\201.os" "b/tests/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\232\320\276\320\273\320\273\320\265\320\272\321\210\320\276\320\275\320\276\321\201.os" new file mode 100644 index 0000000..096a84c --- /dev/null +++ "b/tests/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\232\320\276\320\273\320\273\320\265\320\272\321\210\320\276\320\275\320\276\321\201.os" @@ -0,0 +1,198 @@ +#Использовать ".." +#Использовать collectionos + +&Тест +Процедура ОжидаемСодержитВСписке() Экспорт + + // Дано + Список = Новый СписокМассив; + Список.Добавить(1); + + // Когда + Ожидаем.Что(Список) + .Содержит(1); + + // Тогда + +КонецПроцедуры + +&Тест +Процедура ОжидаемНеСодержитВСписке() Экспорт + + // Дано + БылоИсключение = Ложь; + + Список = Новый СписокМассив; + Список.Добавить(2); + + // Когда + Попытка + Ожидаем.Что(Список) + .Содержит(1); + Исключение + БылоИсключение = Истина; + ОписаниеОшибки = ОписаниеОшибки(); + КонецПопытки; + + // Тогда + ПроверитьИсключение( + БылоИсключение, + ОписаниеОшибки, + "Ожидали, что проверяемое значение ([2]) СОДЕРЖИТ (1)" + ); + +КонецПроцедуры + +&Тест +Процедура ОжидаемСодержитВМножестве() Экспорт + + // Дано + Множество = Новый МножествоСоответствие; + Множество.Добавить(1); + + // Когда + Ожидаем.Что(Множество) + .Содержит(1); + + // Тогда + +КонецПроцедуры + +&Тест +Процедура ОжидаемНеСодержитВМножестве() Экспорт + + // Дано + БылоИсключение = Ложь; + + Множество = Новый МножествоСоответствие; + Множество.Добавить(2); + + // Когда + Попытка + Ожидаем.Что(Множество) + .Содержит(1); + Исключение + БылоИсключение = Истина; + ОписаниеОшибки = ОписаниеОшибки(); + КонецПопытки; + + // Тогда + ПроверитьИсключение( + БылоИсключение, + ОписаниеОшибки, + "Ожидали, что проверяемое значение ([2]) СОДЕРЖИТ (1)" + ); + +КонецПроцедуры + +&Тест +Процедура ОжидаемСодержитВОчереди() Экспорт + + // Дано + Очередь = Новый ОчередьМассив; + Очередь.Добавить(1); + + // Когда + Ожидаем.Что(Очередь) + .Содержит(1); + + // Тогда + +КонецПроцедуры + +&Тест +Процедура ОжидаемНеСодержитВОчереди() Экспорт + + // Дано + БылоИсключение = Ложь; + + Очередь = Новый ОчередьМассив; + Очередь.Добавить(2); + + // Когда + Попытка + Ожидаем.Что(Очередь) + .Содержит(1); + Исключение + БылоИсключение = Истина; + ОписаниеОшибки = ОписаниеОшибки(); + КонецПопытки; + + // Тогда + ПроверитьИсключение( + БылоИсключение, + ОписаниеОшибки, + "Ожидали, что проверяемое значение ([2]) СОДЕРЖИТ (1)" + ); + +КонецПроцедуры + +&Тест +Процедура ОжидаемСодержитВКарте() Экспорт + + // Дано + Карта = Новый КартаСоответствие; + Карта.Вставить(1, 1); + + // Когда + Ожидаем.Что(Карта) + .Содержит(1); + + // Тогда + +КонецПроцедуры + +&Тест +Процедура ОжидаемНеСодержитВКарте() Экспорт + + // Дано + БылоИсключение = Ложь; + + Карта = Новый КартаСоответствие; + Карта.Вставить(1, 2); + + // Когда + Попытка + Ожидаем.Что(Карта) + .Содержит(1); + Исключение + БылоИсключение = Истина; + ОписаниеОшибки = ОписаниеОшибки(); + КонецПопытки; + + // Тогда + ПроверитьИсключение( + БылоИсключение, + ОписаниеОшибки, + "Ожидали, что проверяемое значение ({1=2}) СОДЕРЖИТ (1)" + ); + +КонецПроцедуры + +Процедура ПроверитьИсключение(БылоИсключение, ОписаниеОшибки, ИскомыйТекстИсключения) + + Контекст = Новый ИсключениеОшибкаУтверждения(); + + Если Не БылоИсключение Тогда + + ВызватьИсключение Новый ИнформацияОбОшибке( + "Ожидали, что будет исключение а это не так", + Контекст + ); + + КонецЕсли; + + Если СтрНайти(ОписаниеОшибки, ИскомыйТекстИсключения) = 0 Тогда + + ВызватьИсключение Новый ИнформацияОбОшибке( + СтрШаблон( + "Ожидали, что в тексте ошибки будет текст: { %1 }, а был { %2 }", + ИскомыйТекстИсключения, + ОписаниеОшибки + ), + Контекст + ); + + КонецЕсли; + +КонецПроцедуры From f68f5badc9e843e8b728c4009fe8720d550fb811 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 17 Nov 2025 20:06:32 +1000 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A1=D0=BB=D1=83=D0=B6=D0=B5=D0=B1=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=20=D0=B2=20internal=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BA=D0=B5=D1=82,=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=BC=D0=B5=D1=81=D1=82=D1=83=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\203\320\266\320\265\320\261\320\275\321\213\320\271.os" | 0 ...20\224\320\220\321\201\321\201\320\265\321\200\321\202.os" | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) rename "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" => "src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" (100%) diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" similarity index 100% rename from "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" rename to "src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" index 9c9344a..7117f70 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\224\320\224\320\220\321\201\321\201\320\265\321\200\321\202.os" @@ -1,4 +1,6 @@ -Перем ПроверяемоеЗначение; // Установленное проверяемое значение +#Использовать "../internal" + +Перем ПроверяемоеЗначение; // Установленное проверяемое значение Перем ИмяМетода; // Имя проверяемого метода Перем ПараметрыМетода; // Параметры проверяемого метода Перем ДопСообщениеОшибки; // Пользовательское сообщение ошибки From f5bbdc976c08e302c814b1b105e52958d679a3b8 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 17 Nov 2025 20:19:47 +1000 Subject: [PATCH 3/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + 1 file changed, 1 insertion(+) diff --git a/packagedef b/packagedef index 3276ad2..5dba85e 100644 --- a/packagedef +++ b/packagedef @@ -6,6 +6,7 @@ .ВключитьФайл("tests") .ВключитьФайл("readme.md") .ОпределяетКласс("БДДАссерт", "src/Классы/БДДАссерт.os") + .ОпределяетКласс("ИсключениеОшибкаУтверждения", "src/Классы/ИсключениеОшибкаУтверждения.os") .ОпределяетМодуль("Ожидаем", "src/Модули/Ожидаем.os") .ОпределяетМодуль("Утверждения", "src/Модули/Утверждения.os") .РазработкаЗависитОт("1bdd")