diff --git a/src/bdd-asserts-class.os b/src/bdd-asserts-class.os index 76597e9..dd93093 100644 --- a/src/bdd-asserts-class.os +++ b/src/bdd-asserts-class.os @@ -420,97 +420,31 @@ ТекстИсключения = СтрСоединить(МассивТекстИсключения, Символы.ПС); ВызватьИсключение ТекстИсключения; - КонецПопытки + КонецПопытки; КонецПроцедуры Функция РазличияТаблиц(Знач ПроверяемоеЗначение, Знач ОжидаемоеЗначение, Знач СравнитьТолькоСтруктуру = Ложь) Различия = ПустаяТаблицаРазличийТаблиц(); - Если Не ТипЗнч(ОжидаемоеЗначение) = Тип("ТаблицаЗначений") Тогда - Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ОжидаемоеЗначение)); - ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); - КонецЕсли; - Если Не ТипЗнч(ПроверяемоеЗначение) = Тип("ТаблицаЗначений") Тогда - Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ПроверяемоеЗначение)); + Для Каждого Различие Из РазличияТиповТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение) Цикл ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); - КонецЕсли; + КонецЦикла; Если Различия.Количество() > 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[Стр][Кол]; - КонецЕсли; - Если Не Ожидание = Результат Тогда - Различие = РазличиеТаблиц(Стр, Кол, Ожидание, Результат); - ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); - КонецЕсли; - КонецЦикла; КонецЦикла; Возврат Различия; @@ -538,6 +472,119 @@ Возврат Различие; КонецФункции +Функция РазличияТиповТаблиц(Знач Таб1, Знач Таб2) + + Различия = ПустаяТаблицаРазличийТаблиц(); + + Если Не ТипЗнч(Таб1) = Тип("ТаблицаЗначений") Тогда + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", + "Тип значения", + "ТаблицаЗначений", + ТипЗнч(Таб1)); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + Если Не ТипЗнч(Таб2) = Тип("ТаблицаЗначений") Тогда + Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение", + "Тип значения", + "ТаблицаЗначений", + ТипЗнч(Таб2)); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + + Возврат Различия; +КонецФункции + +Функция РазличияКолонокТаблиц(Знач Таб1, Знач Таб2) + + Различия = ПустаяТаблицаРазличийТаблиц(); + + Если Не Таб1.Колонки.Количество() = Таб2.Колонки.Количество() Тогда + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", + "Количество КОЛОНОК", + Таб2.Колонки.Количество(), + Таб1.Колонки.Количество()); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + + Если Не ПараметрыСравненияТаблиц.УчитыватьИменаКолонок Тогда + Возврат Различия; + КонецЕсли; + + Для Кол = 0 По Таб1.Колонки.Количество() - 1 Цикл + Колонки = КолонкиТаблицПоИндексу(Таб1, Таб2, Кол); + Если Колонки[2] = Неопределено Или Не Колонки[1].Имя = Колонки[2].Имя Тогда + Ожидание = ?(Колонки[2] = Неопределено, "<ОТСУТСТВУЕТ>", СтрШаблон("колонку ""%1""", Колонки[2].Имя)); + Результат = СтрШаблон("колонку ""%1""", Колонки[1].Имя); + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "КОЛОНКИ", Ожидание, Результат); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + КонецЦикла; + + Возврат Различия; +КонецФункции + +Функция КолонкиТаблицПоИндексу(Знач Таб1, Знач Таб2, Знач ИндексКолонки) + + КолонкаТаб1 = Таб1.Колонки[ИндексКолонки]; + Если ПоискКолонкиПоИмени() Тогда + КолонкаТаб2 = Таб2.Колонки.Найти(КолонкаТаб1.Имя); + Иначе + КолонкаТаб2 = ?(ИндексКолонки < Таб2.Колонки.Количество(), Таб2.Колонки[ИндексКолонки], Неопределено); + КонецЕсли; + + Колонки = Новый Массив; + Колонки.Добавить("Для нумерации с 1"); + Колонки.Добавить(КолонкаТаб1); + Колонки.Добавить(КолонкаТаб2); + + Возврат Колонки; +КонецФункции + +Функция ПоискКолонкиПоИмени() + Возврат ПараметрыСравненияТаблиц.УчитыватьИменаКолонок И Не ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок; +КонецФункции + +Функция РазличияСтрокТаблиц(Знач ПроверяемоеЗначение, Знач ОжидаемоеЗначение) + + Различия = ПустаяТаблицаРазличийТаблиц(); + + Если Не ПроверяемоеЗначение.Количество() = ОжидаемоеЗначение.Количество() Тогда + Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", + "Количество СТРОК", + ОжидаемоеЗначение.Количество(), + ПроверяемоеЗначение.Количество()); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + + Если Различия.Количество() > 0 Тогда + Возврат Различия; + КонецЕсли; + + Если Не ПараметрыСравненияТаблиц.УчитыватьПорядокСтрок Тогда + Таб1 = ПроверяемоеЗначение.Скопировать(); + Таб2 = ОжидаемоеЗначение.Скопировать(); + Таб1 = ОтсортироватьТаблицуПоВсемКолонкам(Таб1); + Таб2 = ОтсортироватьТаблицуПоВсемКолонкам(Таб2); + Иначе + Таб1 = ПроверяемоеЗначение; + Таб2 = ОжидаемоеЗначение; + КонецЕсли; + + Для Стр = 0 По Таб1.Количество() - 1 Цикл + Для Кол = 0 По Таб1.Колонки.Количество() - 1 Цикл + Результат = Таб1[Стр][Кол]; + Колонки = КолонкиТаблицПоИндексу(Таб1, Таб2, Кол); + Ожидание = ?(Колонки[2] = Неопределено, "<НЕТ КОЛОНКИ>", Таб2[Стр][Колонки[2]]); + Если Не Ожидание = Результат Тогда + Различие = РазличиеТаблиц(Стр, Кол, Ожидание, Результат); + ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Различия; +КонецФункции + Функция ОтсортироватьТаблицуПоВсемКолонкам(Знач ТЗ) ИменаКолонок = СтрСоединить(ИменаКолонок(ТЗ), ","); @@ -568,14 +615,6 @@ Возврат "Ожидали, что проверяемое значение (" + ПроверяемоеЗначение + ")" + ?(ФлагОтрицанияДляСообщения, " НЕ ", " ") + Ожидание + ФорматДСО(ДопСообщениеОшибки); КонецФункции -// Процедура ЕстьПодстрока(Знач Строка, Знач ПроверяемаяСтрока) -// Если СтрЧислоСтрок(ПроверяемаяСтрока) = 1 Тогда -// ЭтотОбъект.Что(Строка, "Проверяем одиночную строку").Содержит(ПроверяемаяСтрока); -// Иначе -// ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, ПроверяемаяСтрока); -// КонецЕсли; -// КонецПроцедуры - Процедура ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, ДопСообщениеОшибки = "") СообщениеОшибки = ""; Нашли = МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, Подстрока, СообщениеОшибки); diff --git a/tests/bdd-assertions-tests.os b/tests/bdd-assertions-tests.os index 976297b..30861da 100644 --- a/tests/bdd-assertions-tests.os +++ b/tests/bdd-assertions-tests.os @@ -284,5 +284,4 @@ Массив.Добавить("Значение"); Ожидаем.Что(Контекст).Метод("Вставить", Массив).Не_().ВыбрасываетИсключение("Недостаточно фактических параметров"); - КонецПроцедуры