Skip to content

Commit 3c52f58

Browse files
GolovanoffГолованов Сергей
andauthored
УтвержденияТаблиц (#12)
* рабочая проверка равенства * накидал СодержитСтроку и тесты * позеленело. только фоновые падают * позеленело. только фоновые падают * только фоновые красные * поправил зависимость от asserts * попилил когнитивку. недостаточно попилил * вот так вроде всё ок * чуток оптимизировал по замечанию Артура * убрал лишние строки --------- Co-authored-by: Голованов Сергей <[email protected]>
1 parent a0db0f4 commit 3c52f58

File tree

2 files changed

+119
-81
lines changed

2 files changed

+119
-81
lines changed

src/bdd-asserts-class.os

Lines changed: 119 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -420,97 +420,31 @@
420420
ТекстИсключения = СтрСоединить(МассивТекстИсключения, Символы.ПС);
421421

422422
ВызватьИсключение ТекстИсключения;
423-
КонецПопытки
423+
КонецПопытки;
424424
КонецПроцедуры
425425

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

428428
Различия = ПустаяТаблицаРазличийТаблиц();
429429

430-
Если Не ТипЗнч(ОжидаемоеЗначение) = Тип("ТаблицаЗначений") Тогда
431-
Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ОжидаемоеЗначение));
432-
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
433-
КонецЕсли;
434-
Если Не ТипЗнч(ПроверяемоеЗначение) = Тип("ТаблицаЗначений") Тогда
435-
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ПроверяемоеЗначение));
430+
Для Каждого Различие Из РазличияТиповТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение) Цикл
436431
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
437-
КонецЕсли;
432+
КонецЦикла;
438433

439434
Если Различия.Количество() > 0 Тогда
440435
Возврат Различия;
441436
КонецЕсли;
442437

443-
Если Не ОжидаемоеЗначение.Колонки.Количество() = ПроверяемоеЗначение.Колонки.Количество() Тогда
444-
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Количество КОЛОНОК", ОжидаемоеЗначение.Колонки.Количество(), ПроверяемоеЗначение.Колонки.Количество());
438+
Для Каждого Различие Из РазличияКолонокТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение) Цикл
445439
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
446-
КонецЕсли;
447-
448-
Если ПараметрыСравненияТаблиц.УчитыватьИменаКолонок Тогда
449-
Для Кол = 0 По ОжидаемоеЗначение.Колонки.Количество() - 1 Цикл
450-
КолонкаОжидания = ОжидаемоеЗначение.Колонки[Кол];
451-
КолонкаПроверяемого = ?(ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок,
452-
ПроверяемоеЗначение.Колонки[Кол],
453-
ПроверяемоеЗначение.Колонки.Найти(КолонкаОжидания.Имя));
454-
Если КолонкаПроверяемого = Неопределено Или Не КолонкаОжидания.Имя = КолонкаПроверяемого.Имя Тогда
455-
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Колонки",
456-
СтрШаблон("колонку ""%1""", КолонкаОжидания.Имя),
457-
?(КолонкаПроверяемого = Неопределено,
458-
"<ОТСУТСТВУЕТ>",
459-
СтрШаблон("колонку ""%1""", КолонкаПроверяемого.Имя)));
460-
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
461-
КонецЕсли;
462-
КонецЦикла;
463-
464-
Для Кол = 0 По ПроверяемоеЗначение.Колонки.Количество() - 1 Цикл
465-
КолонкаПроверяемого = ПроверяемоеЗначение.Колонки[Кол];
466-
КолонкаОжидания = ?(ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок,
467-
ОжидаемоеЗначение.Колонки[Кол],
468-
ОжидаемоеЗначение.Колонки.Найти(КолонкаПроверяемого.Имя));
469-
Если КолонкаОжидания = Неопределено Или Не КолонкаОжидания.Имя = КолонкаПроверяемого.Имя Тогда
470-
Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение", "Колонки",
471-
?(КолонкаОжидания = Неопределено,
472-
"<ОТСУТСТВУЕТ>",
473-
СтрШаблон("колонку ""%1""", КолонкаОжидания.Имя)),
474-
СтрШаблон("колонку ""%1""", КолонкаПроверяемого.Имя));
475-
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
476-
КонецЕсли;
477-
КонецЦикла;
478-
КонецЕсли;
440+
КонецЦикла;
479441

480442
Если СравнитьТолькоСтруктуру Тогда
481443
Возврат Различия;
482444
КонецЕсли;
483445

484-
Если Не ОжидаемоеЗначение.Количество() = ПроверяемоеЗначение.Количество() Тогда
485-
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Количество СТРОК", ОжидаемоеЗначение.Количество(), ПроверяемоеЗначение.Количество());
446+
Для Каждого Различие Из РазличияСтрокТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение) Цикл
486447
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
487-
КонецЕсли;
488-
489-
Таб1 = ПроверяемоеЗначение.Скопировать();
490-
Таб2 = ОжидаемоеЗначение.Скопировать();
491-
492-
Если Не ПараметрыСравненияТаблиц.УчитыватьПорядокСтрок Тогда
493-
Таб1 = ОтсортироватьТаблицуПоВсемКолонкам(Таб1);
494-
Таб2 = ОтсортироватьТаблицуПоВсемКолонкам(Таб2);
495-
КонецЕсли;
496-
497-
Для Стр = 0 По Таб1.Количество() - 1 Цикл
498-
Для Кол = 0 По Таб1.Колонки.Количество() - 1 Цикл
499-
Результат = Таб1[Стр][Кол];
500-
Если ПараметрыСравненияТаблиц.УчитыватьИменаКолонок
501-
И Не ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок
502-
Тогда
503-
КолонкаТаб1 = Таб1.Колонки[Кол];
504-
КолонкаТаб2 = Таб2.Колонки.Найти(КолонкаТаб1.Имя);
505-
Ожидание = Таб2[Стр][КолонкаТаб2];
506-
Иначе
507-
Ожидание = Таб2[Стр][Кол];
508-
КонецЕсли;
509-
Если Не Ожидание = Результат Тогда
510-
Различие = РазличиеТаблиц(Стр, Кол, Ожидание, Результат);
511-
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
512-
КонецЕсли;
513-
КонецЦикла;
514448
КонецЦикла;
515449

516450
Возврат Различия;
@@ -538,6 +472,119 @@
538472
Возврат Различие;
539473
КонецФункции
540474

475+
Функция РазличияТиповТаблиц(Знач Таб1, Знач Таб2)
476+
477+
Различия = ПустаяТаблицаРазличийТаблиц();
478+
479+
Если Не ТипЗнч(Таб1) = Тип("ТаблицаЗначений") Тогда
480+
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение",
481+
"Тип значения",
482+
"ТаблицаЗначений",
483+
ТипЗнч(Таб1));
484+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
485+
КонецЕсли;
486+
Если Не ТипЗнч(Таб2) = Тип("ТаблицаЗначений") Тогда
487+
Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение",
488+
"Тип значения",
489+
"ТаблицаЗначений",
490+
ТипЗнч(Таб2));
491+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
492+
КонецЕсли;
493+
494+
Возврат Различия;
495+
КонецФункции
496+
497+
Функция РазличияКолонокТаблиц(Знач Таб1, Знач Таб2)
498+
499+
Различия = ПустаяТаблицаРазличийТаблиц();
500+
501+
Если Не Таб1.Колонки.Количество() = Таб2.Колонки.Количество() Тогда
502+
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение",
503+
"Количество КОЛОНОК",
504+
Таб2.Колонки.Количество(),
505+
Таб1.Колонки.Количество());
506+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
507+
КонецЕсли;
508+
509+
Если Не ПараметрыСравненияТаблиц.УчитыватьИменаКолонок Тогда
510+
Возврат Различия;
511+
КонецЕсли;
512+
513+
Для Кол = 0 По Таб1.Колонки.Количество() - 1 Цикл
514+
Колонки = КолонкиТаблицПоИндексу(Таб1, Таб2, Кол);
515+
Если Колонки[2] = Неопределено Или Не Колонки[1].Имя = Колонки[2].Имя Тогда
516+
Ожидание = ?(Колонки[2] = Неопределено, "<ОТСУТСТВУЕТ>", СтрШаблон("колонку ""%1""", Колонки[2].Имя));
517+
Результат = СтрШаблон("колонку ""%1""", Колонки[1].Имя);
518+
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "КОЛОНКИ", Ожидание, Результат);
519+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
520+
КонецЕсли;
521+
КонецЦикла;
522+
523+
Возврат Различия;
524+
КонецФункции
525+
526+
Функция КолонкиТаблицПоИндексу(Знач Таб1, Знач Таб2, Знач ИндексКолонки)
527+
528+
КолонкаТаб1 = Таб1.Колонки[ИндексКолонки];
529+
Если ПоискКолонкиПоИмени() Тогда
530+
КолонкаТаб2 = Таб2.Колонки.Найти(КолонкаТаб1.Имя);
531+
Иначе
532+
КолонкаТаб2 = ?(ИндексКолонки < Таб2.Колонки.Количество(), Таб2.Колонки[ИндексКолонки], Неопределено);
533+
КонецЕсли;
534+
535+
Колонки = Новый Массив;
536+
Колонки.Добавить("Для нумерации с 1");
537+
Колонки.Добавить(КолонкаТаб1);
538+
Колонки.Добавить(КолонкаТаб2);
539+
540+
Возврат Колонки;
541+
КонецФункции
542+
543+
Функция ПоискКолонкиПоИмени()
544+
Возврат ПараметрыСравненияТаблиц.УчитыватьИменаКолонок И Не ПараметрыСравненияТаблиц.УчитыватьПорядокКолонок;
545+
КонецФункции
546+
547+
Функция РазличияСтрокТаблиц(Знач ПроверяемоеЗначение, Знач ОжидаемоеЗначение)
548+
549+
Различия = ПустаяТаблицаРазличийТаблиц();
550+
551+
Если Не ПроверяемоеЗначение.Количество() = ОжидаемоеЗначение.Количество() Тогда
552+
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение",
553+
"Количество СТРОК",
554+
ОжидаемоеЗначение.Количество(),
555+
ПроверяемоеЗначение.Количество());
556+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
557+
КонецЕсли;
558+
559+
Если Различия.Количество() > 0 Тогда
560+
Возврат Различия;
561+
КонецЕсли;
562+
563+
Если Не ПараметрыСравненияТаблиц.УчитыватьПорядокСтрок Тогда
564+
Таб1 = ПроверяемоеЗначение.Скопировать();
565+
Таб2 = ОжидаемоеЗначение.Скопировать();
566+
Таб1 = ОтсортироватьТаблицуПоВсемКолонкам(Таб1);
567+
Таб2 = ОтсортироватьТаблицуПоВсемКолонкам(Таб2);
568+
Иначе
569+
Таб1 = ПроверяемоеЗначение;
570+
Таб2 = ОжидаемоеЗначение;
571+
КонецЕсли;
572+
573+
Для Стр = 0 По Таб1.Количество() - 1 Цикл
574+
Для Кол = 0 По Таб1.Колонки.Количество() - 1 Цикл
575+
Результат = Таб1[Стр][Кол];
576+
Колонки = КолонкиТаблицПоИндексу(Таб1, Таб2, Кол);
577+
Ожидание = ?(Колонки[2] = Неопределено, "<НЕТ КОЛОНКИ>", Таб2[Стр][Колонки[2]]);
578+
Если Не Ожидание = Результат Тогда
579+
Различие = РазличиеТаблиц(Стр, Кол, Ожидание, Результат);
580+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
581+
КонецЕсли;
582+
КонецЦикла;
583+
КонецЦикла;
584+
585+
Возврат Различия;
586+
КонецФункции
587+
541588
Функция ОтсортироватьТаблицуПоВсемКолонкам(Знач ТЗ)
542589

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

571-
// Процедура ЕстьПодстрока(Знач Строка, Знач ПроверяемаяСтрока)
572-
// Если СтрЧислоСтрок(ПроверяемаяСтрока) = 1 Тогда
573-
// ЭтотОбъект.Что(Строка, "Проверяем одиночную строку").Содержит(ПроверяемаяСтрока);
574-
// Иначе
575-
// ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, ПроверяемаяСтрока);
576-
// КонецЕсли;
577-
// КонецПроцедуры
578-
579618
Процедура ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, ДопСообщениеОшибки = "")
580619
СообщениеОшибки = "";
581620
Нашли = МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, Подстрока, СообщениеОшибки);

tests/bdd-assertions-tests.os

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,5 +284,4 @@
284284
Массив.Добавить("Значение");
285285

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

0 commit comments

Comments
 (0)