Skip to content

УтвержденияТаблиц #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
199 changes: 119 additions & 80 deletions src/bdd-asserts-class.os
Original file line number Diff line number Diff line change
Expand Up @@ -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[Стр][Кол];
КонецЕсли;
Если Не Ожидание = Результат Тогда
Различие = РазличиеТаблиц(Стр, Кол, Ожидание, Результат);
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
КонецЕсли;
КонецЦикла;
КонецЦикла;

Возврат Различия;
Expand Down Expand Up @@ -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]]);
Если Не Ожидание = Результат Тогда
Различие = РазличиеТаблиц(Стр, Кол, Ожидание, Результат);
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
КонецЕсли;
КонецЦикла;
КонецЦикла;

Возврат Различия;
КонецФункции

Функция ОтсортироватьТаблицуПоВсемКолонкам(Знач ТЗ)

ИменаКолонок = СтрСоединить(ИменаКолонок(ТЗ), ",");
Expand Down Expand Up @@ -568,14 +615,6 @@
Возврат "Ожидали, что проверяемое значение (" + ПроверяемоеЗначение + ")" + ?(ФлагОтрицанияДляСообщения, " НЕ ", " ") + Ожидание + ФорматДСО(ДопСообщениеОшибки);
КонецФункции

// Процедура ЕстьПодстрока(Знач Строка, Знач ПроверяемаяСтрока)
// Если СтрЧислоСтрок(ПроверяемаяСтрока) = 1 Тогда
// ЭтотОбъект.Что(Строка, "Проверяем одиночную строку").Содержит(ПроверяемаяСтрока);
// Иначе
// ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, ПроверяемаяСтрока);
// КонецЕсли;
// КонецПроцедуры

Процедура ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, ДопСообщениеОшибки = "")
СообщениеОшибки = "";
Нашли = МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, Подстрока, СообщениеОшибки);
Expand Down
1 change: 0 additions & 1 deletion tests/bdd-assertions-tests.os
Original file line number Diff line number Diff line change
Expand Up @@ -284,5 +284,4 @@
Массив.Добавить("Значение");

Ожидаем.Что(Контекст).Метод("Вставить", Массив).Не_().ВыбрасываетИсключение("Недостаточно фактических параметров");

КонецПроцедуры
Loading