Skip to content

Commit 5d41f58

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

File tree

3 files changed

+373
-2
lines changed

3 files changed

+373
-2
lines changed

src/bdd-asserts-class.os

Lines changed: 207 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Перем ФлагОтрицания;
66
Перем ФлагОтрицанияДляСообщения;
77
Перем СтатусыРезультатаТестирования;
8+
Перем ПараметрыСравненияТаблиц;
89

910
Функция Что(Знач ПроверяемоеЗначениеПараметр, Знач Сообщение = "") Экспорт
1011
ПроверяемоеЗначение = ПроверяемоеЗначениеПараметр;
@@ -24,6 +25,11 @@
2425
СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed");
2526
СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken");
2627
СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending");
28+
29+
ПараметрыСравненияТаблиц = Новый Структура;
30+
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Истина);
31+
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Истина);
32+
ПараметрыСравненияТаблиц.Вставить("УчитыватьИменаКолонок", Истина);
2733
КонецПроцедуры
2834

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

310+
Функция РавнаТаблице(Знач ОжидаемоеЗначение, Знач СравнитьТолькоСТруктуру = Ложь) Экспорт
311+
312+
Различия = РазличияТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение, СравнитьТолькоСТруктуру);
313+
314+
315+
ВсеОК = Различия.Количество() = 0;
316+
ВсеОК = ?(ФлагОтрицания, Не ВсеОК, ВсеОК);
317+
318+
ФлагОтрицанияДляСообщения = ФлагОтрицания;
319+
ФлагОтрицания = Ложь;
320+
321+
Если Не ВсеОК Тогда
322+
СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "РАВНО (" + ОжидаемоеЗначение + ").
323+
|Различия таблиц:");
324+
325+
Для Каждого Различие Из Различия Цикл
326+
СообщениеОшибки = СтрШаблон("%1%2[%3:%4]: ожидали <%5>, а получили <%6>", СообщениеОшибки, Символы.ПС,
327+
Различие.Строка, Различие.Колонка, Различие.Ожидание, Различие.Результат);
328+
КонецЦикла;
329+
ВызватьОшибкуПроверки(СообщениеОшибки);
330+
КонецЕсли;
331+
332+
Возврат ЭтотОбъект;
333+
КонецФункции
334+
335+
Функция ИмеетРавнуюСтруктуруСТаблицей(Знач ОжидаемоеЗначение) Экспорт
336+
Возврат РавнаТаблице(ОжидаемоеЗначение, Истина);
337+
КонецФункции
338+
339+
Функция СодержитСтрокуТаблицы(Знач ОжидаемоеЗначение) Экспорт
340+
341+
СтруктураПоиска = Новый Структура(СтрСоединить(ИменаКолонок(ПроверяемоеЗначение), ","));
342+
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ОжидаемоеЗначение);
343+
344+
НайденныеСтроки = ПроверяемоеЗначение.НайтиСтроки(СтруктураПоиска);
345+
346+
ВсеОК = НайденныеСтроки.Количество() = 1;
347+
ВсеОК = ?(ФлагОтрицания, Не ВсеОК, ВсеОК);
348+
349+
ФлагОтрицанияДляСообщения = ФлагОтрицания;
350+
ФлагОтрицания = Ложь;
351+
352+
Если Не ВсеОК Тогда
353+
СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "СОДЕРЖИТ нужную строку.");
354+
ВызватьОшибкуПроверки(СообщениеОшибки);
355+
КонецЕсли;
356+
357+
Возврат ЭтотОбъект;
358+
КонецФункции
359+
360+
Функция БезУчетаПорядкаСтрок() Экспорт
361+
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Ложь);
362+
363+
Возврат ЭтотОбъект;
364+
КонецФункции
365+
366+
Функция БезУчетаПорядкаКолонок() Экспорт
367+
ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Ложь);
368+
369+
Возврат ЭтотОбъект;
370+
КонецФункции
371+
372+
Функция БезУчетаИменКолонок() Экспорт
373+
ПараметрыСравненияТаблиц.Вставить("УчитыватьИменаКолонок", Ложь);
374+
375+
Возврат ЭтотОбъект;
376+
КонецФункции
377+
304378
// { Helpers
305379
Функция ФорматДСО(Знач ДопСообщениеОшибки)
306380
Если ДопСообщениеОшибки = "" Тогда
@@ -349,6 +423,139 @@
349423
КонецПопытки
350424
КонецПроцедуры
351425

426+
Функция РазличияТаблиц(Знач ПроверяемоеЗначение, Знач ОжидаемоеЗначение, Знач СравнитьТолькоСтруктуру = Ложь)
427+
428+
Различия = ПустаяТаблицаРазличийТаблиц();
429+
430+
Если Не ТипЗнч(ОжидаемоеЗначение) = Тип("ТаблицаЗначений") Тогда
431+
Различие = РазличиеТаблиц("ОЖИДАЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ОжидаемоеЗначение));
432+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
433+
КонецЕсли;
434+
Если Не ТипЗнч(ПроверяемоеЗначение) = Тип("ТаблицаЗначений") Тогда
435+
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Тип значения", "ТаблицаЗначений", ТипЗнч(ПроверяемоеЗначение));
436+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
437+
КонецЕсли;
438+
439+
Если Различия.Количество() > 0 Тогда
440+
Возврат Различия;
441+
КонецЕсли;
442+
443+
Если Не ОжидаемоеЗначение.Колонки.Количество() = ПроверяемоеЗначение.Колонки.Количество() Тогда
444+
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Количество КОЛОНОК", ОжидаемоеЗначение.Колонки.Количество(), ПроверяемоеЗначение.Колонки.Количество());
445+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
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+
КонецЕсли;
479+
480+
Если СравнитьТолькоСтруктуру Тогда
481+
Возврат Различия;
482+
КонецЕсли;
483+
484+
Если Не ОжидаемоеЗначение.Количество() = ПроверяемоеЗначение.Количество() Тогда
485+
Различие = РазличиеТаблиц("ПРОВЕРЯЕМОЕ значение", "Количество СТРОК", ОжидаемоеЗначение.Количество(), ПроверяемоеЗначение.Количество());
486+
ЗаполнитьЗначенияСвойств(Различия.Добавить(), Различие);
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+
КонецЦикла;
514+
КонецЦикла;
515+
516+
Возврат Различия;
517+
КонецФункции
518+
519+
Функция ПустаяТаблицаРазличийТаблиц()
520+
521+
Различия = Новый ТаблицаЗначений;
522+
Различия.Колонки.Добавить("Строка");
523+
Различия.Колонки.Добавить("Колонка");
524+
Различия.Колонки.Добавить("Ожидание");
525+
Различия.Колонки.Добавить("Результат");
526+
527+
Возврат Различия;
528+
КонецФункции
529+
530+
Функция РазличиеТаблиц(Знач Строка = "", Знач Колонка = "", Знач Ожидание = "", Знач Результат = "")
531+
532+
Различие = ПустаяТаблицаРазличийТаблиц().Добавить();
533+
Различие.Строка = Строка;
534+
Различие.Колонка = Колонка;
535+
Различие.Ожидание = Ожидание;
536+
Различие.Результат = Результат;
537+
538+
Возврат Различие;
539+
КонецФункции
540+
541+
Функция ОтсортироватьТаблицуПоВсемКолонкам(Знач ТЗ)
542+
543+
ИменаКолонок = СтрСоединить(ИменаКолонок(ТЗ), ",");
544+
ТЗ.Сортировать(ИменаКолонок);
545+
546+
Возврат ТЗ;
547+
КонецФункции
548+
549+
Функция ИменаКолонок(Знач ТЗ)
550+
551+
ИменаКолонок = Новый Массив;
552+
Для Каждого Колонка Из ТЗ.Колонки Цикл
553+
ИменаКолонок.Добавить(Колонка.Имя);
554+
КонецЦикла;
555+
556+
Возврат ИменаКолонок;
557+
КонецФункции
558+
352559
Функция ЛогическоеВыражениеВерно(Знач ЛогическоеВыражение)
353560
Результат = ФлагОтрицания <> ЛогическоеВыражение;
354561
ФлагОтрицанияДляСообщения = ФлагОтрицания;
@@ -428,4 +635,3 @@
428635
КонецФункции
429636

430637
// } Helpers
431-

0 commit comments

Comments
 (0)