|
5 | 5 | Перем ФлагОтрицания;
|
6 | 6 | Перем ФлагОтрицанияДляСообщения;
|
7 | 7 | Перем СтатусыРезультатаТестирования;
|
| 8 | +Перем ПараметрыСравненияТаблиц; |
8 | 9 |
|
9 | 10 | Функция Что(Знач ПроверяемоеЗначениеПараметр, Знач Сообщение = "") Экспорт
|
10 | 11 | ПроверяемоеЗначение = ПроверяемоеЗначениеПараметр;
|
|
24 | 25 | СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed");
|
25 | 26 | СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken");
|
26 | 27 | СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending");
|
| 28 | + |
| 29 | + ПараметрыСравненияТаблиц = Новый Структура; |
| 30 | + ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокСтрок", Истина); |
| 31 | + ПараметрыСравненияТаблиц.Вставить("УчитыватьПорядокКолонок", Истина); |
| 32 | + ПараметрыСравненияТаблиц.Вставить("УчитыватьИменаКолонок", Истина); |
27 | 33 | КонецПроцедуры
|
28 | 34 |
|
29 | 35 | Функция Не_() Экспорт
|
|
301 | 307 | Возврат ЭтотОбъект;
|
302 | 308 | КонецФункции
|
303 | 309 |
|
| 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 | + |
304 | 378 | // { Helpers
|
305 | 379 | Функция ФорматДСО(Знач ДопСообщениеОшибки)
|
306 | 380 | Если ДопСообщениеОшибки = "" Тогда
|
|
349 | 423 | КонецПопытки
|
350 | 424 | КонецПроцедуры
|
351 | 425 |
|
| 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 | + |
352 | 559 | Функция ЛогическоеВыражениеВерно(Знач ЛогическоеВыражение)
|
353 | 560 | Результат = ФлагОтрицания <> ЛогическоеВыражение;
|
354 | 561 | ФлагОтрицанияДляСообщения = ФлагОтрицания;
|
|
428 | 635 | КонецФункции
|
429 | 636 |
|
430 | 637 | // } Helpers
|
431 |
| - |
|
0 commit comments