Skip to content

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

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
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
208 changes: 207 additions & 1 deletion src/bdd-asserts-class.os
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Перем ФлагОтрицания;
Перем ФлагОтрицанияДляСообщения;
Перем СтатусыРезультатаТестирования;
Перем ПараметрыСравненияТаблиц;

Функция Что(Знач ПроверяемоеЗначениеПараметр, Знач Сообщение = "") Экспорт
ПроверяемоеЗначение = ПроверяемоеЗначениеПараметр;
Expand All @@ -24,6 +25,11 @@
СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed");
СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken");
СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending");

ПараметрыСравненияТаблиц = Новый Структура;
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Истина);
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Истина);
ПараметрыСравненияТаблиц.Вставить("УчитыватьИменаКолонок", Истина);
КонецПроцедуры

Функция Не_() Экспорт
Expand Down Expand Up @@ -301,6 +307,74 @@
Возврат ЭтотОбъект;
КонецФункции

Функция РавнаТаблице(Знач ОжидаемоеЗначение, Знач СравнитьТолькоСТруктуру = Ложь) Экспорт

Различия = РазличияТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение, СравнитьТолькоСТруктуру);


ВсеОК = Различия.Количество() = 0;
ВсеОК = ?(ФлагОтрицания, Не ВсеОК, ВсеОК);

ФлагОтрицанияДляСообщения = ФлагОтрицания;
ФлагОтрицания = Ложь;

Если Не ВсеОК Тогда
СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "РАВНО (" + ОжидаемоеЗначение + ").
|Различия таблиц:");

Для Каждого Различие Из Различия Цикл
СообщениеОшибки = СтрШаблон("%1%2[%3:%4]: ожидали <%5>, а получили <%6>", СообщениеОшибки, Символы.ПС,
Различие.Строка, Различие.Колонка, Различие.Ожидание, Различие.Результат);
КонецЦикла;
ВызватьОшибкуПроверки(СообщениеОшибки);
КонецЕсли;

Возврат ЭтотОбъект;
КонецФункции

Функция ИмеетРавнуюСтруктуруСТаблицей(Знач ОжидаемоеЗначение) Экспорт
Возврат РавнаТаблице(ОжидаемоеЗначение, Истина);
КонецФункции

Функция СодержитСтрокуТаблицы(Знач ОжидаемоеЗначение) Экспорт

СтруктураПоиска = Новый Структура(СтрСоединить(ИменаКолонок(ПроверяемоеЗначение), ","));
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ОжидаемоеЗначение);

НайденныеСтроки = ПроверяемоеЗначение.НайтиСтроки(СтруктураПоиска);

ВсеОК = НайденныеСтроки.Количество() = 1;
ВсеОК = ?(ФлагОтрицания, Не ВсеОК, ВсеОК);

ФлагОтрицанияДляСообщения = ФлагОтрицания;
ФлагОтрицания = Ложь;

Если Не ВсеОК Тогда
СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "СОДЕРЖИТ нужную строку.");
ВызватьОшибкуПроверки(СообщениеОшибки);
КонецЕсли;

Возврат ЭтотОбъект;
КонецФункции

Функция БезУчетаПорядкаСтрок() Экспорт
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Ложь);

Возврат ЭтотОбъект;
КонецФункции

Функция БезУчетаПорядкаКолонок() Экспорт
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Ложь);

Возврат ЭтотОбъект;
КонецФункции

Функция БезУчетаИменКолонок() Экспорт
ПараметрыСравненияТаблиц.Вставить("УчитыватьИменаКолонок", Ложь);

Возврат ЭтотОбъект;
КонецФункции

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

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

Функция ПустаяТаблицаРазличийТаблиц()

Различия = Новый ТаблицаЗначений;
Различия.Колонки.Добавить("Строка");
Различия.Колонки.Добавить("Колонка");
Различия.Колонки.Добавить("Ожидание");
Различия.Колонки.Добавить("Результат");

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

Функция РазличиеТаблиц(Знач Строка = "", Знач Колонка = "", Знач Ожидание = "", Знач Результат = "")

Различие = ПустаяТаблицаРазличийТаблиц().Добавить();
Различие.Строка = Строка;
Различие.Колонка = Колонка;
Различие.Ожидание = Ожидание;
Различие.Результат = Результат;

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

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

ИменаКолонок = СтрСоединить(ИменаКолонок(ТЗ), ",");
ТЗ.Сортировать(ИменаКолонок);

Возврат ТЗ;
КонецФункции

Функция ИменаКолонок(Знач ТЗ)

ИменаКолонок = Новый Массив;
Для Каждого Колонка Из ТЗ.Колонки Цикл
ИменаКолонок.Добавить(Колонка.Имя);
КонецЦикла;

Возврат ИменаКолонок;
КонецФункции

Функция ЛогическоеВыражениеВерно(Знач ЛогическоеВыражение)
Результат = ФлагОтрицания <> ЛогическоеВыражение;
ФлагОтрицанияДляСообщения = ФлагОтрицания;
Expand Down Expand Up @@ -428,4 +635,3 @@
КонецФункции

// } Helpers

Loading