From 5d41f58fb79e5c7e0d0d411809e6c337532d3023 Mon Sep 17 00:00:00 2001 From: Golovanoff <41572553+Golovanoff@users.noreply.github.com> Date: Fri, 6 Dec 2024 13:12:38 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=82=D0=B2=D0=B5=D1=80=D0=B6=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=D0=A2=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=20?= =?UTF-8?q?(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * рабочая проверка равенства * накидал СодержитСтроку и тесты * позеленело. только фоновые падают * позеленело. только фоновые падают * только фоновые красные * поправил зависимость от asserts --------- Co-authored-by: Голованов Сергей --- src/bdd-asserts-class.os | 208 ++++++++++++++++++++++++++- tests/bdd-assertions-tables-tests.os | 165 +++++++++++++++++++++ tests/bdd-assertions-tests.os | 2 +- 3 files changed, 373 insertions(+), 2 deletions(-) create mode 100644 tests/bdd-assertions-tables-tests.os diff --git a/src/bdd-asserts-class.os b/src/bdd-asserts-class.os index 458bb59..76597e9 100644 --- a/src/bdd-asserts-class.os +++ b/src/bdd-asserts-class.os @@ -5,6 +5,7 @@ Перем ФлагОтрицания; Перем ФлагОтрицанияДляСообщения; Перем СтатусыРезультатаТестирования; +Перем ПараметрыСравненияТаблиц; Функция Что(Знач ПроверяемоеЗначениеПараметр, Знач Сообщение = "") Экспорт ПроверяемоеЗначение = ПроверяемоеЗначениеПараметр; @@ -24,6 +25,11 @@ СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed"); СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken"); СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending"); + + ПараметрыСравненияТаблиц = Новый Структура; + ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Истина); + ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Истина); + ПараметрыСравненияТаблиц.Вставить("УчитыватьИменаКолонок", Истина); КонецПроцедуры Функция Не_() Экспорт @@ -301,6 +307,74 @@ Возврат ЭтотОбъект; КонецФункции +Функция РавнаТаблице(Знач ОжидаемоеЗначение, Знач СравнитьТолькоСТруктуру = Ложь) Экспорт + + Различия = РазличияТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение, СравнитьТолькоСТруктуру); + + + ВсеОК = Различия.Количество() = 0; + ВсеОК = ?(ФлагОтрицания, Не ВсеОК, ВсеОК); + + ФлагОтрицанияДляСообщения = ФлагОтрицания; + ФлагОтрицания = Ложь; + + Если Не ВсеОК Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "РАВНО (" + ОжидаемоеЗначение + "). + |Различия таблиц:"); + + Для Каждого Различие Из Различия Цикл + СообщениеОшибки = СтрШаблон("%1%2[%3:%4]: ожидали <%5>, а получили <%6>", СообщениеОшибки, Символы.ПС, + Различие.Строка, Различие.Колонка, Различие.Ожидание, Различие.Результат); + КонецЦикла; + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ИмеетРавнуюСтруктуруСТаблицей(Знач ОжидаемоеЗначение) Экспорт + Возврат РавнаТаблице(ОжидаемоеЗначение, Истина); +КонецФункции + +Функция СодержитСтрокуТаблицы(Знач ОжидаемоеЗначение) Экспорт + + СтруктураПоиска = Новый Структура(СтрСоединить(ИменаКолонок(ПроверяемоеЗначение), ",")); + ЗаполнитьЗначенияСвойств(СтруктураПоиска, ОжидаемоеЗначение); + + НайденныеСтроки = ПроверяемоеЗначение.НайтиСтроки(СтруктураПоиска); + + ВсеОК = НайденныеСтроки.Количество() = 1; + ВсеОК = ?(ФлагОтрицания, Не ВсеОК, ВсеОК); + + ФлагОтрицанияДляСообщения = ФлагОтрицания; + ФлагОтрицания = Ложь; + + Если Не ВсеОК Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "СОДЕРЖИТ нужную строку."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция БезУчетаПорядкаСтрок() Экспорт + ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Ложь); + + Возврат ЭтотОбъект; +КонецФункции + +Функция БезУчетаПорядкаКолонок() Экспорт + ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Ложь); + + Возврат ЭтотОбъект; +КонецФункции + +Функция БезУчетаИменКолонок() Экспорт + ПараметрыСравненияТаблиц.Вставить("УчитыватьИменаКолонок", Ложь); + + Возврат ЭтотОбъект; +КонецФункции + // { Helpers Функция ФорматДСО(Знач ДопСообщениеОшибки) Если ДопСообщениеОшибки = "" Тогда @@ -349,6 +423,139 @@ КонецПопытки КонецПроцедуры +Функция РазличияТаблиц(Знач ПроверяемоеЗначение, Знач ОжидаемоеЗначение, Знач СравнитьТолькоСтруктуру = Ложь) + + Различия = ПустаяТаблицаРазличийТаблиц(); + + Если Не ТипЗнч(ОжидаемоеЗначение) = Тип("ТаблицаЗначений") Тогда + Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ОжидаемоеЗначение)); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + Если Не ТипЗнч(ПроверяемоеЗначение) = Тип("ТаблицаЗначений") Тогда + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ПроверяемоеЗначение)); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + + Если Различия.Количество() > 0 Тогда + Возврат Различия; + КонецЕсли; + + Если Не ОжидаемоеЗначение.Колонки.Количество() = ПроверяемоеЗначение.Колонки.Количество() Тогда + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Количество КОЛОНОК", ОжидаемоеЗначение.Колонки.Количество(), ПроверяемоеЗначение.Колонки.Количество()); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + + Если ПараметрыСравненияТаблиц.УчитыватьИменаКолонок Тогда + Для Кол = 0 По ОжидаемоеЗначение.Колонки.Количество() - 1 Цикл + КолонкаОжидания = ОжидаемоеЗначение.Колонки[Кол]; + КолонкаПроверяемого = ?(ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок, + ПроверяемоеЗначение.Колонки[Кол], + ПроверяемоеЗначение.Колонки.Найти(КолонкаОжидания.Имя)); + Если КолонкаПроверяемого = Неопределено Или Не КолонкаОжидания.Имя = КолонкаПроверяемого.Имя Тогда + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Колонки", + СтрШаблон("колонку ""%1""", КолонкаОжидания.Имя), + ?(КолонкаПроверяемого = Неопределено, + "<ОТСУТСТВУЕТ>", + СтрШаблон("колонку ""%1""", КолонкаПроверяемого.Имя))); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + КонецЦикла; + + Для Кол = 0 По ПроверяемоеЗначение.Колонки.Количество() - 1 Цикл + КолонкаПроверяемого = ПроверяемоеЗначение.Колонки[Кол]; + КолонкаОжидания = ?(ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок, + ОжидаемоеЗначение.Колонки[Кол], + ОжидаемоеЗначение.Колонки.Найти(КолонкаПроверяемого.Имя)); + Если КолонкаОжидания = Неопределено Или Не КолонкаОжидания.Имя = КолонкаПроверяемого.Имя Тогда + Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение", "Колонки", + ?(КолонкаОжидания = Неопределено, + "<ОТСУТСТВУЕТ>", + СтрШаблон("колонку ""%1""", КолонкаОжидания.Имя)), + СтрШаблон("колонку ""%1""", КолонкаПроверяемого.Имя)); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если СравнитьТолькоСтруктуру Тогда + Возврат Различия; + КонецЕсли; + + Если Не ОжидаемоеЗначение.Количество() = ПроверяемоеЗначение.Количество() Тогда + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Количество СТРОК", ОжидаемоеЗначение.Количество(), ПроверяемоеЗначение.Количество()); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + + Таб1 = ПроверяемоеЗначение.Скопировать(); + Таб2 = ОжидаемоеЗначение.Скопировать(); + + Если Не ПараметрыСравненияТаблиц.УчитыватьПорядокСтрок Тогда + Таб1 = ОтсортироватьТаблицуПоВсемКолонкам(Таб1); + Таб2 = ОтсортироватьТаблицуПоВсемКолонкам(Таб2); + КонецЕсли; + + Для Стр = 0 По Таб1.Количество() - 1 Цикл + Для Кол = 0 По Таб1.Колонки.Количество() - 1 Цикл + Результат = Таб1[Стр][Кол]; + Если ПараметрыСравненияТаблиц.УчитыватьИменаКолонок + И Не ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок + Тогда + КолонкаТаб1 = Таб1.Колонки[Кол]; + КолонкаТаб2 = Таб2.Колонки.Найти(КолонкаТаб1.Имя); + Ожидание = Таб2[Стр][КолонкаТаб2]; + Иначе + Ожидание = Таб2[Стр][Кол]; + КонецЕсли; + Если Не Ожидание = Результат Тогда + Различие = РазличиеТаблиц(Стр, Кол, Ожидание, Результат); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Различия; +КонецФункции + +Функция ПустаяТаблицаРазличийТаблиц() + + Различия = Новый ТаблицаЗначений; + Различия.Колонки.Добавить("Строка"); + Различия.Колонки.Добавить("Колонка"); + Различия.Колонки.Добавить("Ожидание"); + Различия.Колонки.Добавить("Результат"); + + Возврат Различия; +КонецФункции + +Функция РазличиеТаблиц(Знач Строка = "", Знач Колонка = "", Знач Ожидание = "", Знач Результат = "") + + Различие = ПустаяТаблицаРазличийТаблиц().Добавить(); + Различие.Строка = Строка; + Различие.Колонка = Колонка; + Различие.Ожидание = Ожидание; + Различие.Результат = Результат; + + Возврат Различие; +КонецФункции + +Функция ОтсортироватьТаблицуПоВсемКолонкам(Знач ТЗ) + + ИменаКолонок = СтрСоединить(ИменаКолонок(ТЗ), ","); + ТЗ.Сортировать(ИменаКолонок); + + Возврат ТЗ; +КонецФункции + +Функция ИменаКолонок(Знач ТЗ) + + ИменаКолонок = Новый Массив; + Для Каждого Колонка Из ТЗ.Колонки Цикл + ИменаКолонок.Добавить(Колонка.Имя); + КонецЦикла; + + Возврат ИменаКолонок; +КонецФункции + Функция ЛогическоеВыражениеВерно(Знач ЛогическоеВыражение) Результат = ФлагОтрицания <> ЛогическоеВыражение; ФлагОтрицанияДляСообщения = ФлагОтрицания; @@ -428,4 +635,3 @@ КонецФункции // } Helpers - diff --git a/tests/bdd-assertions-tables-tests.os b/tests/bdd-assertions-tables-tests.os new file mode 100644 index 0000000..816f8fa --- /dev/null +++ b/tests/bdd-assertions-tables-tests.os @@ -0,0 +1,165 @@ +Перем ОбъектТеста; + +Функция ПолучитьСписокТестов(юТест) Экспорт + ВсеТесты = Новый Массив; + ВсеТесты.Добавить("ТестДолжен_Проверить_РавнаТаблице"); + ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_РавнаТаблице"); + ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетРавнуюСтруктуруСТаблицей"); + ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетРавнуюСтруктуруСТаблицей_БезУчетаПорядкаКолонок"); + ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_ИмеетРавнуюСтруктуруСТаблицей"); + ВсеТесты.Добавить("ТестДолжен_Проверить_НеравенствоТаблицСИзмененнымПорядкомСтрок"); + ВсеТесты.Добавить("ТестДолжен_Проверить_НеравенствоТаблицСИзмененнымПорядкомКолонок"); + ВсеТесты.Добавить("ТестДолжен_Проверить_СодержитСтрокуТаблицы"); + ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_СодержитСтрокуТаблицы"); + ВсеТесты.Добавить("ТестДолжен_Проверить_РавнаТаблице_БезУчетаПорядкаСтрок"); + ВсеТесты.Добавить("ТестДолжен_Проверить_РавнаТаблице_БезУчетаПорядкаКолонок"); + ВсеТесты.Добавить("ТестДолжен_Проверить_РавнаТаблице_БезУчетаИменКолонок"); + + Возврат ВсеТесты; +КонецФункции + +Процедура ТестДолжен_Проверить_РавнаТаблице() Экспорт + ОбъектТеста.Что(Таблица1()).РавнаТаблице(Таблица1()); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_Отрицание_РавнаТаблице() Экспорт + ОбъектТеста.Что(Таблица1()).Не_().РавнаТаблице(Таблица2()); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_ИмеетРавнуюСтруктуруСТаблицей() Экспорт + Таблица2 = Таблица1(); + Таблица2.Удалить(0); + ОбъектТеста.Что(Таблица1()).ИмеетРавнуюСтруктуруСТаблицей(Таблица2); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_ИмеетРавнуюСтруктуруСТаблицей_БезУчетаПорядкаКолонок() Экспорт + ОбъектТеста.Что(Таблица1()).БезУчетаПорядКаКолонок().ИмеетРавнуюСтруктуруСТаблицей(Таблица3()); +КонецПроцедуры + + +Процедура ТестДолжен_Проверить_Отрицание_ИмеетРавнуюСтруктуруСТаблицей() Экспорт + ОбъектТеста.Что(Таблица1()).Не_().ИмеетРавнуюСтруктуруСТаблицей(Таблица3()); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_НеравенствоТаблицСИзмененнымПорядкомСтрок() Экспорт + Таблица2 = Таблица1(); + Таблица2.Сортировать("К1 УБЫВ"); + ОбъектТеста.Что(Таблица1()).Не_().РавнаТаблице(Таблица2); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_НеравенствоТаблицСИзмененнымПорядкомКолонок() Экспорт + ОбъектТеста.Что(Таблица1()).Не_().РавнаТаблице(Таблица3()); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_НеравенствоТаблицСРазнымСоставомКолонок() Экспорт + Таблица2 = Таблица1(); + Таблица2.Колонки.К1.Имя = "КК"; + ОбъектТеста.Что(Таблица1()).Не_().РавнаТаблице(Таблица2); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_СодержитСтрокуТаблицы() Экспорт + СтрокаТаблицы = Таблица1()[0]; + ОбъектТеста.Что(Таблица1()).СодержитСтрокуТаблицы(СтрокаТаблицы); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_Отрицание_СодержитСТрокуТаблицы() Экспорт + СтрокаТаблицы = Таблица1()[0]; + СтрокаТаблицы.К0 = "777"; + ОбъектТеста.Что(Таблица1()).Не_().СодержитСтрокуТаблицы(СтрокаТаблицы); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_РавнаТаблице_БезУчетаПорядкаСтрок() Экспорт + Таблица2 = Таблица1(); + Таблица2.Сортировать("К1 УБЫВ"); + ОбъектТеста.Что(Таблица1()).БезУчетаПорядкаСтрок().РавнаТаблице(Таблица2); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_РавнаТаблице_БезУчетаПорядкаКолонок() Экспорт + ОбъектТеста.Что(Таблица1()).БезУчетаПорядкаКолонок().РавнаТаблице(Таблица3()); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_РавнаТаблице_БезУчетаИменКолонок() Экспорт + ОбъектТеста.Что(Таблица1()).БезУчетаИменКолонок().РавнаТаблице(Таблица2()); +КонецПроцедуры + +// helpers +Функция Таблица1() + + ТЗ = Новый ТаблицаЗначений; + ТЗ.Колонки.Добавить("К0"); + ТЗ.Колонки.Добавить("К1"); + ТЗ.Колонки.Добавить("К2"); + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.К0 = "11"; + СтрТЗ.К1 = "12"; + СтрТЗ.К2 = "13"; + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.К0 = "21"; + СтрТЗ.К1 = "22"; + СтрТЗ.К2 = "23"; + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.К0 = "31"; + СтрТЗ.К1 = "32"; + СтрТЗ.К2 = "33"; + + Возврат ТЗ; +КонецФункции + +Функция Таблица2() + + ТЗ = Новый ТаблицаЗначений; + ТЗ.Колонки.Добавить("А0"); + ТЗ.Колонки.Добавить("А1"); + ТЗ.Колонки.Добавить("А2"); + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.А0 = "11"; + СтрТЗ.А1 = "12"; + СтрТЗ.А2 = "13"; + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.А0 = "21"; + СтрТЗ.А1 = "22"; + СтрТЗ.А2 = "23"; + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.А0 = "31"; + СтрТЗ.А1 = "32"; + СтрТЗ.А2 = "33"; + + Возврат ТЗ; +КонецФункции + +Функция Таблица3() + + ТЗ = Новый ТаблицаЗначений; + ТЗ.Колонки.Добавить("К0"); + ТЗ.Колонки.Добавить("К2"); + ТЗ.Колонки.Добавить("К1"); + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.К0 = "11"; + СтрТЗ.К1 = "12"; + СтрТЗ.К2 = "13"; + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.К0 = "21"; + СтрТЗ.К1 = "22"; + СтрТЗ.К2 = "23"; + + СтрТЗ = ТЗ.Добавить(); + СтрТЗ.К0 = "31"; + СтрТЗ.К1 = "32"; + СтрТЗ.К2 = "33"; + + Возврат ТЗ; +КонецФункции + +Процедура Инициализация() + ОбъектТеста = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src", "bdd-asserts.os")); +КонецПроцедуры + +Инициализация(); diff --git a/tests/bdd-assertions-tests.os b/tests/bdd-assertions-tests.os index 8e3b05e..976297b 100644 --- a/tests/bdd-assertions-tests.os +++ b/tests/bdd-assertions-tests.os @@ -1,4 +1,4 @@ -#Использовать asserts +#Использовать ".." Функция ПолучитьСписокТестов(юТест) Экспорт ВсеТесты = Новый Массив;