-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathvaluetable.os
781 lines (565 loc) · 36.6 KB
/
valuetable.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
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
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
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
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
///////////////////////////////////////////////////////////////////////
//
// Тест проверки работы таблицы значений
//
//
///////////////////////////////////////////////////////////////////////
Перем юТест;
////////////////////////////////////////////////////////////////////
// Программный интерфейс
Функция Версия() Экспорт
Возврат "0.2";
КонецФункции
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_СоздатьТаблицуЗначений");
ВсеТесты.Добавить("ТестДолжен_СоздатьУдалитьКолонки");
ВсеТесты.Добавить("ТестДолжен_СоздатьУдалитьСтроки");
ВсеТесты.Добавить("ТестДолжен_ПереместитьСтроки");
ВсеТесты.Добавить("ТестДолжен_ОтработатьСДанными");
ВсеТесты.Добавить("ТестДолжен_ВыгрузитьКолонкуВМассив");
ВсеТесты.Добавить("ТестДолжен_НайтиСтрокуВТаблице");
ВсеТесты.Добавить("ТестДолжен_НайтиНесколькоСтрокВТаблице");
ВсеТесты.Добавить("ТестДолжен_СкопироватьТаблицуПолностью");
ВсеТесты.Добавить("ТестДолжен_СкопироватьТаблицуПоМассивуСтрок");
ВсеТесты.Добавить("ТестДолжен_СкопироватьТаблицуНесколькоКолонок");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСверткуБезУказанияКолонок");
ВсеТесты.Добавить("ТестДолжен_ЗагрузитьКолонку");
ВсеТесты.Добавить("ТестДолжен_ПроверитьТипизациюКолонки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСверткуБольшойТаблицы");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСверткуБольшойТаблицы2");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСверткуПоДвумКолонкам");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСверткуПоДвумКолонкамСРазнымиТипами");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСверткуПоКолонкамСуммированияСРазнымиТипами");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСверткуПоОднойКолонкеСРазнымиТипами");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_СоздатьТаблицуЗначений() Экспорт
Перем Т;
Т = Новый ТаблицаЗначений;
КоличествоДобавляемыхКолонокСтрок = 5;
Для Инд = 1 По КоличествоДобавляемыхКолонокСтрок Цикл
Т.Колонки.Добавить("К" + Инд);
Т.Добавить();
КонецЦикла;
юТест.ПроверитьРавенство(Т.Колонки.Количество(), КоличествоДобавляемыхКолонокСтрок);
юТест.ПроверитьРавенство(Т.Количество(), КоличествоДобавляемыхКолонокСтрок);
КонецПроцедуры
Процедура ТестДолжен_СоздатьУдалитьКолонки() Экспорт
Перем Т;
Т = Новый ТаблицаЗначений;
К1 = Т.Колонки.Добавить("К1");
К2 = Т.Колонки.Добавить("К2");
К3 = Т.Колонки.Добавить("К3");
К4 = Т.Колонки.Добавить("К4");
К5 = Т.Колонки.Добавить("К5");
юТест.ПроверитьРавенство(Т.Колонки.Количество(), 5);
// Удаление колонки по ссылке
Т.Колонки.Удалить(К3);
юТест.ПроверитьРавенство(Т.Колонки.Количество(), 4);
юТест.ПроверитьРавенство(Т.Колонки.Найти("К3"), Неопределено);
юТест.ПроверитьРавенство(Т.Колонки.Найти("К2"), К2);
Строка1 = Т.Добавить();
Строка2 = Т.Добавить();
К6 = Т.Колонки.Добавить("К6");
// Доступность К6 после добавления строк
Попытка
Строка1["К6"] = 123;
юТест.ПроверитьРавенство(Строка1["К6"], 123);
Исключение
юТест.ПроверитьИстину(Ложь, "Колонка К6 не доступна!");
КонецПопытки;
// Удаление колонки по индексу
Т.Колонки.Удалить(0);
юТест.ПроверитьРавенство(Т.Колонки.Количество(), 4);
юТест.ПроверитьРавенство(Т.Колонки.Найти("К1"), Неопределено);
юТест.ПроверитьРавенство(Т.Колонки.Найти("К2"), К2);
// Удаление колонки по имени
Т.Колонки.Удалить("К4");
юТест.ПроверитьРавенство(Т.Колонки.Количество(), 3);
юТест.ПроверитьРавенство(Т.Колонки.Найти("К4"), Неопределено);
юТест.ПроверитьРавенство(Т.Колонки.Найти("К2"), К2);
// Недоступность удалённой колонки
Попытка
Значение = Строка1["К1"];
юТест.ПроверитьИстину(Ложь, "Доступна удалённая колонка!");
Исключение
КонецПопытки;
КонецПроцедуры
Процедура ТестДолжен_СоздатьУдалитьСтроки() Экспорт
Перем Т;
Т = Новый ТаблицаЗначений;
К1 = Т.Колонки.Добавить("К1");
К2 = Т.Колонки.Добавить("К2");
К3 = Т.Колонки.Добавить("К3");
К4 = Т.Колонки.Добавить("К4");
К5 = Т.Колонки.Добавить("К5");
С1 = Т.Добавить();
С2 = Т.Добавить();
С2_5 = Т.Добавить();
С2_6 = Т.Добавить();
С3 = Т.Добавить();
С4 = Т.Добавить();
Т.Удалить(С2_5);
Т.Удалить(2);
юТест.ПроверитьРавенство(Т.Количество(), 4);
юТест.ПроверитьРавенство(Т.Получить(0), С1);
юТест.ПроверитьРавенство(Т.Получить(1), С2);
юТест.ПроверитьРавенство(Т.Получить(2), С3);
юТест.ПроверитьРавенство(Т.Получить(3), С4);
юТест.ПроверитьРавенство(Т[0], С1);
юТест.ПроверитьРавенство(Т[1], С2);
юТест.ПроверитьРавенство(Т[2], С3);
юТест.ПроверитьРавенство(Т[3], С4);
юТест.ПроверитьРавенство(Т.Индекс(С1), 0);
юТест.ПроверитьРавенство(Т.Индекс(С2), 1);
юТест.ПроверитьРавенство(Т.Индекс(С3), 2);
юТест.ПроверитьРавенство(Т.Индекс(С4), 3);
Обошли = Новый Соответствие;
Для Каждого мСтрокаТаблицы Из Т Цикл
Обошли.Вставить(мСтрокаТаблицы, Истина);
КонецЦикла;
юТест.ПроверитьИстину(Обошли.Получить(С1), "Обход бегунком");
юТест.ПроверитьИстину(Обошли.Получить(С2), "Обход бегунком");
юТест.ПроверитьИстину(Обошли.Получить(С3), "Обход бегунком");
юТест.ПроверитьИстину(Обошли.Получить(С4), "Обход бегунком");
КонецПроцедуры
Функция ПроверитьПорядок(Т, П1, П2, П3, П4, П5)
Массив = Новый Массив;
Массив.Добавить(П1);
Массив.Добавить(П2);
Массив.Добавить(П3);
Массив.Добавить(П4);
Массив.Добавить(П5);
Для Инд = 0 По 4 Цикл
Если Т[Инд].Индекс <> Массив[Инд] Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Процедура ТестДолжен_ПереместитьСтроки() Экспорт
Перем Т;
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Индекс");
Для Инд = 1 По 5 Цикл
Т.Добавить().Индекс = Инд;
КонецЦикла;
С1 = Т[0];
С2 = Т[1];
С3 = Т[2];
С4 = Т[3];
С5 = Т[4];
// Проверим обычное перемещение
Т.Сдвинуть(С2, -1);
ПроверитьПорядок(Т, 2, 1, 3, 4, 5);
Т.Сдвинуть(С1, 2);
ПроверитьПорядок(Т, 2, 3, 4, 1, 5);
Т.Сдвинуть(3, -2);
ПроверитьПорядок(Т, 2, 1, 3, 4, 5);
Т.Сдвинуть(1, 2);
ПроверитьПорядок(Т, 2, 3, 4, 1, 5);
// Проверим приведение типа
Т.Сдвинуть("2", 2);
ПроверитьПорядок(Т, 2, 3, 1, 5, 4);
Т.Сдвинуть("1", "2");
ПроверитьПорядок(Т, 2, 1, 5, 3, 4);
// Проверим крайние случаи
Т.Сдвинуть(0, 4);
ПроверитьПорядок(Т, 1, 5, 3, 4, 2);
Т.Сдвинуть(4, -4);
ПроверитьПорядок(Т, 2, 1, 5, 3, 4);
// Проверим ошибки
Ошибка = "Сдвиг за пределы вниз";
Попытка
Т.Сдвинуть(0, 5);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Неверное значение аргумента номер 2");
Ошибка = "Сдвиг за пределы вверх";
Попытка
Т.Сдвинуть(1, -3);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Неверное значение аргумента номер 2");
Ошибка = "Сдвиг с неверным индексом";
Попытка
Т.Сдвинуть(10, 2);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Значение индекса выходит за пределы диапазона");
Ошибка = "Сдвиг несуществующего элемента";
ДругаяТЗ = Новый ТаблицаЗначений;
ДругаяТЗ.Колонки.Добавить("Индекс");
ДругаяТЗ.Добавить().Индекс = 1;
Попытка
Т.Сдвинуть(ДругаяТЗ[0], 2);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Строка не принадлежит таблице значений");
Ошибка = "Сдвиг с неверным типом параметра";
Попытка
Т.Сдвинуть("ё", 2);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Неверный тип аргумента");
КонецПроцедуры
Процедура ТестДолжен_ОтработатьСДанными() Экспорт
Перем Т;
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Количество");
Т.Колонки.Добавить("Цена");
Т.Колонки.Добавить("Сумма");
Для Инд = 1 По 5 Цикл
НоваяСтрока = Т.Добавить();
НоваяСтрока.Количество = Инд;
КонецЦикла;
Цены = Новый Массив;
Цены.Добавить(100);
Цены.Добавить(50);
Цены.Добавить(30);
Цены.Добавить(32.3);
Цены.Добавить(16);
Т.ЗагрузитьКолонку(Цены, "Цена");
мСумма = 0;
Для Каждого мСтрока Из Т Цикл
мСтрока.Сумма = мСтрока.Количество * мСтрока.Цена;
мСумма = мСумма + мСтрока.Сумма;
КонецЦикла;
КолонкаСумма = Т.Колонки.Сумма;
юТест.ПроверитьРавенство(Т.Итог("Сумма"), мСумма);
юТест.ПроверитьРавенство(Т.Итог(2), мСумма);
юТест.ПроверитьРавенство(Т.Итог(КолонкаСумма), мСумма);
Т.Свернуть("", "Сумма");
юТест.ПроверитьРавенство(Т[0].Сумма, мСумма);
КонецПроцедуры
Процедура ТестДолжен_ВыгрузитьКолонкуВМассив() Экспорт
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Ключ");
Т.Колонки.Добавить("Значение");
ЭталонКлючей = Новый Массив;
ЭталонЗначений = Новый Массив;
Для Сч = 1 По 5 Цикл
С = Т.Добавить();
С.Ключ = "Ключ" + Строка(Сч);
С.Значение = Сч;
ЭталонКлючей.Добавить(С.Ключ);
ЭталонЗначений.Добавить(С.Значение);
КонецЦикла;
// Передаем имя колонки
юТест.ПроверитьИстину(МассивыИдентичны(Т.ВыгрузитьКолонку("Ключ"), ЭталонКлючей), "Массивы ключей должны совпадать");
юТест.ПроверитьИстину(МассивыИдентичны(Т.ВыгрузитьКолонку("Значение"), ЭталонЗначений), "Массивы значений должны совпадать");
// Передаем индекс колонки
юТест.ПроверитьИстину(МассивыИдентичны(Т.ВыгрузитьКолонку(0), ЭталонКлючей), "Массивы ключей должны совпадать");
юТест.ПроверитьИстину(МассивыИдентичны(Т.ВыгрузитьКолонку(1), ЭталонЗначений), "Массивы значений должны совпадать");
// Передаем колонку
юТест.ПроверитьИстину(МассивыИдентичны(Т.ВыгрузитьКолонку(Т.Колонки.Ключ), ЭталонКлючей), "Массивы ключей должны совпадать");
юТест.ПроверитьИстину(МассивыИдентичны(Т.ВыгрузитьКолонку(Т.Колонки.Значение), ЭталонЗначений), "Массивы значений должны совпадать");
КонецПроцедуры
Функция МассивыИдентичны(Знач Проверяемый, Знач Эталон)
Если Проверяемый.Количество() <> Эталон.Количество() Тогда
Возврат Ложь;
КонецЕсли;
Для Сч = 0 По Проверяемый.Количество()-1 Цикл
Если Проверяемый[Сч] <> Эталон[Сч] Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Процедура ТестДолжен_НайтиСтрокуВТаблице() Экспорт
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Ключ");
Т.Колонки.Добавить("Значение");
Для Сч = 1 По 5 Цикл
С = Т.Добавить();
С.Ключ = "Ключ" + Строка(Сч);
С.Значение = Сч;
КонецЦикла;
ИскомаяСтрока = Т.Найти("Ключ2", "Ключ");
юТест.ПроверитьЛожь(ИскомаяСтрока = Неопределено, "Строка должна быть найдена");
юТест.ПроверитьРавенство(ИскомаяСтрока.Значение, 2);
КонецПроцедуры
Процедура ТестДолжен_НайтиНесколькоСтрокВТаблице() Экспорт
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Ключ");
Т.Колонки.Добавить("Значение");
Для Сч = 1 По 8 Цикл
С = Т.Добавить();
Если Сч % 2 Тогда
С.Ключ = "Истина";
С.Значение = Истина;
Иначе
С.Ключ = "Ложь";
С.Значение = Ложь;
КонецЕсли;
КонецЦикла;
КлючиПоиска = Новый Структура("Ключ,Значение", "Истина", Истина);
НайденныеСтроки = Т.НайтиСтроки(КлючиПоиска);
юТест.ПроверитьРавенство(НайденныеСтроки.Количество(), 4, "Количество строк должно совпадать с эталоном");
Для Каждого Стр Из НайденныеСтроки Цикл
юТест.ПроверитьРавенство(Стр.Ключ, "Истина");
юТест.ПроверитьРавенство(Стр.Значение, Истина);
КонецЦикла;
КонецПроцедуры
Функция СоздатьТаблицуСДанными()
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Ключ");
Т.Колонки.Добавить("Значение");
Т.Колонки.Добавить("К3");
Для Сч = 1 По 5 Цикл
С = Т.Добавить();
С.Ключ = "Ключ" + Строка(Сч);
С.Значение = Сч;
С.К3 = "К3-" + Сч
КонецЦикла;
Возврат Т;
КонецФункции
Процедура ТестДолжен_СкопироватьТаблицуПолностью() Экспорт
Т = СоздатьТаблицуСДанными();
Т2 = Т.Скопировать();
юТест.ПроверитьНеравенство(Т, Т2);
юТест.ПроверитьРавенство(Т.Количество(), Т2.Количество());
Для Сч = 0 По Т.Количество() - 1 Цикл
С1 = Т[сч];
С2 = Т2[сч];
юТест.ПроверитьРавенство(С1.Ключ, С2.Ключ, "Равенство Ключей в строке " + Сч);
юТест.ПроверитьРавенство(С1.Значение, С2.Значение, "Равенство Значений в строке " + Сч);
юТест.ПроверитьРавенство(С1.К3, С2.К3, "Равенство КЗ в строке " + Сч);
юТест.ПроверитьНеравенство(С1, С2);
КонецЦикла;
КонецПроцедуры
Процедура ТестДолжен_СкопироватьТаблицуПоМассивуСтрок() Экспорт
Т = СоздатьТаблицуСДанными();
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(Т[0]);
МассивСтрок.Добавить(Т[2]);
Т2 = Т.Скопировать(МассивСтрок);
юТест.ПроверитьНеравенство(Т, Т2);
юТест.ПроверитьРавенство(2, Т2.Количество());
Для Сч = 0 По Т2.Количество() - 1 Цикл
С1 = МассивСтрок[сч];
С2 = Т2[сч];
юТест.ПроверитьРавенство(С1.Ключ, С2.Ключ, "Равенство Ключей в строке " + Сч);
юТест.ПроверитьРавенство(С1.Значение, С2.Значение, "Равенство Значений в строке " + Сч);
юТест.ПроверитьРавенство(С1.К3, С2.К3, "Равенство КЗ в строке " + Сч);
юТест.ПроверитьНеравенство(С1, С2);
КонецЦикла;
КонецПроцедуры
Процедура ТестДолжен_СкопироватьТаблицуНесколькоКолонок() Экспорт
Т = СоздатьТаблицуСДанными();
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(Т[0]);
МассивСтрок.Добавить(Т[2]);
Т2 = Т.Скопировать(МассивСтрок, "Ключ, Значение");
юТест.ПроверитьНеравенство(Т, Т2);
юТест.ПроверитьРавенство(2, Т2.Количество());
юТест.ПроверитьРавенство(2, Т2.Колонки.Количество());
Для Сч = 0 По Т2.Количество() - 1 Цикл
С1 = МассивСтрок[сч];
С2 = Т2[сч];
юТест.ПроверитьРавенство(С1.Ключ, С2.Ключ, "Равенство Ключей в строке " + Сч);
юТест.ПроверитьРавенство(С1.Значение, С2.Значение, "Равенство Значений в строке " + Сч);
юТест.ПроверитьНеравенство(С1, С2);
КонецЦикла;
КонецПроцедуры
Процедура ТестДолжен_ПроверитьСверткуБезУказанияКолонок() Экспорт
Перем Т;
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Колонка1");
Т.Добавить().Колонка1 = "Значение1";
Т.Добавить().Колонка1 = "Значение2";
Т.Добавить().Колонка1 = "Значение1";
Т.Добавить().Колонка1 = "Значение2";
// Вызываем свёртку БЕЗ указания второго параметра
Т.Свернуть("Колонка1");
Т.Сортировать("Колонка1");
юТест.ПроверитьРавенство(Т.Количество(), 2, "После свёртки должно остаться 2 строки");
юТест.ПроверитьРавенство(Т.Получить(0).Колонка1, "Значение1", "Свёртка по значениям");
юТест.ПроверитьРавенство(Т.Получить(1).Колонка1, "Значение2", "Свёртка по значениям");
КонецПроцедуры
Процедура ТестДолжен_ЗагрузитьКолонку() Экспорт
Т = Новый ТаблицаЗначений;
Т.Колонки.Добавить("Количество1");
Т.Колонки.Добавить("Количество2");
Т.Колонки.Добавить("Количество3");
Для Инд = 1 По 5 Цикл
НоваяСтрока = Т.Добавить();
КонецЦикла;
Количество = Новый Массив;
Количество.Добавить(1);
Количество.Добавить(2);
Количество.Добавить(3);
Количество.Добавить(4);
Количество.Добавить(5);
Т.ЗагрузитьКолонку(Количество, "Количество1");
Т.ЗагрузитьКолонку(Количество, 1);
Т.ЗагрузитьКолонку(Количество, Т.Колонки.Количество3);
юТест.ПроверитьРавенство(Т.Итог("Количество1"), 15);
юТест.ПроверитьРавенство(Т.Итог("Количество2"), 15);
юТест.ПроверитьРавенство(Т.Итог("Количество3"), 15);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьТипизациюКолонки() Экспорт
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Колонка1", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
СтрокаТаблицы = Таблица.Добавить();
СтрокаТаблицы.Колонка1 = 1;
юТест.ПроверитьРавенство(СтрокаТаблицы.Колонка1, "1");
СтрокаТаблицы.Колонка1 = Неопределено;
юТест.ПроверитьРавенство(СтрокаТаблицы.Колонка1, "", "Неопределено - Пустая строка");
Таблица.Колонки.Добавить("Колонка2", Новый ОписаниеТипов("Строка,Число"));
СтрокаТаблицы.Колонка2 = 1;
юТест.ПроверитьРавенство(СтрокаТаблицы.Колонка2, 1);
СтрокаТаблицы.Колонка2 = "ъ";
юТест.ПроверитьРавенство(СтрокаТаблицы.Колонка2, "ъ");
СтрокаТаблицы.Колонка2 = Неопределено;
юТест.ПроверитьРавенство(СтрокаТаблицы.Колонка2, Неопределено);
КонецПроцедуры
// -- issue #1010
Функция ТестовыеДанные()
Возврат "135,29,91,60,30,120,61,31,92,121,130,131,133,8,9,10,11,134,13,14,15,16,5," +
"62,32,132,7,8,63,10,11,64,33,93,122,5,6,7,8,12,65,34,94,123,5,6,7,8,13,66,35,95,4,5," +
"6,7,8,14,96,67,36,4,5,15,68,37,97,4,5,6,9,17,124,69,38,98,4,5,6,19,70,39,99,4,5,6,7," +
"20,71,40,100,4,5,6,21,72,41,22,23,73,42,24,74,43,101,25,75,102,44,4,5,6,26,114,128," +
"-1,45,103,76,46,4,77,47,104,4,5,6,7,8,9,10,11,12,13,14,15,16,5,78,48,6,7,8,79,10,11," +
"80,49,105,4,5,6,7,8,12,81,50,106,4,5,6,7,8,13,82,51,107,4,5,6,7,8,14,108,83,52,4,5," +
"15,84,53,109,4,5,6,9,17,125,85,54,110,4,5,6,19,86,55,111,4,5,6,7,20,87,56,112,4,5,6," +
"21,88,57,22,23,89,58,24,90,59,113,25,1,3,2,4,5,6,26,115,129";
КонецФункции
Функция ТестоваяТаблица()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Значение1");
ТЗ.Колонки.Добавить("Значение2");
ТЗ.Колонки.Добавить("Количество1");
ТЗ.Колонки.Добавить("Количество2");
Возврат ТЗ;
КонецФункции
Процедура ТестДолжен_ПроверитьСверткуБольшойТаблицы() Экспорт
Строка = ТестовыеДанные();
ТЗ = ТестоваяТаблица();
Для каждого Элемент Из СтрРазделить(Строка, ",") Цикл
СтрТЗ = ТЗ.Добавить();
СтрТЗ.Значение1 = СокрЛП(Элемент);
СтрТЗ.Количество1 = 1;
КонецЦикла;
ТЗ.Свернуть("Значение1", "Количество1");
юТест.ПроверитьРавенство(ТЗ.Количество(), 127, "Количество строк после свёртки");
юТест.ПроверитьРавенство(ТЗ.Колонки.Количество(), 2, "Количество колонок после свёртки");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "53", 1);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "12", 3);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "4", 18);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "8", 10);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "6", 18);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьСверткуБольшойТаблицы2() Экспорт
Строка = ТестовыеДанные();
ТЗ = ТестоваяТаблица();
Для каждого Элемент Из СтрРазделить(Строка, ",") Цикл
СтрТЗ = ТЗ.Добавить();
СтрТЗ.Значение1 = СокрЛП(Элемент);
СтрТЗ.Значение2 = СокрЛП(Элемент);
СтрТЗ.Количество1 = 1;
КонецЦикла;
ТЗ2 = ТЗ.Скопировать(, "Значение1, Количество1");
ТЗ2.Свернуть("Значение1", "Количество1");
ТЗ.Свернуть("Значение1, Значение2", "Количество1");
юТест.ПроверитьРавенство(ТЗ.Количество(), 127, "Количество строк после свёртки");
юТест.ПроверитьРавенство(ТЗ.Колонки.Количество(), 3, "Количество колонок после свёртки");
Для Каждого Стр Из ТЗ Цикл
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ2, Стр.Значение1, Стр.Количество1)
КонецЦикла;
КонецПроцедуры
Процедура ТестДолжен_ПроверитьСверткуПоДвумКолонкам() Экспорт
Строка = ТестовыеДанные();
ТЗ = ТестоваяТаблица();
Сч=0;
Для каждого Элемент Из СтрРазделить(Строка, ",") Цикл
СтрТЗ = ТЗ.Добавить();
СтрТЗ.Значение1 = СокрЛП(Элемент);
СтрТЗ.Значение2 = Сч;
СтрТЗ.Количество1 = 1;
Сч=(Сч+1)%3;
КонецЦикла;
ТЗ.Свернуть("Значение1,Значение2", "Количество1");
юТест.ПроверитьРавенство(ТЗ.Количество(), 159, "Количество строк после свёртки");
юТест.ПроверитьРавенство(ТЗ.Колонки.Количество(), 3, "Количество колонок после свёртки");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "12", 2);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "4", 7);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "8", 2);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "6", 8);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьСверткуПоДвумКолонкамСРазнымиТипами() Экспорт
Строка = ТестовыеДанные();
ТЗ = ТестоваяТаблица();
Сч=0;
Для каждого Элемент Из СтрРазделить(Строка, ",") Цикл
СтрТЗ = ТЗ.Добавить();
СтрТЗ.Значение1 = СокрЛП(Элемент);
СтрТЗ.Значение2 = ?(Сч=0,Элемент,'20200511');
СтрТЗ.Количество1 = 1;
Сч=(Сч+1)%2;
КонецЦикла;
ТЗ.Свернуть("Значение1,Значение2", "Количество1");
юТест.ПроверитьРавенство(ТЗ.Количество(), 149, "Количество строк после свёртки");
юТест.ПроверитьРавенство(ТЗ.Колонки.Количество(), 3, "Количество колонок после свёртки");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "12", 1);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "4", 10);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "8", 5);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "6", 10);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьСверткуПоКолонкамСуммированияСРазнымиТипами() Экспорт
Строка = ТестовыеДанные();
ТЗ = ТестоваяТаблица();
Сч=0;
Для каждого Элемент Из СтрРазделить(Строка, ",") Цикл
СтрТЗ = ТЗ.Добавить();
СтрТЗ.Значение1 = СокрЛП(Элемент);
СтрТЗ.Количество1 = 1;
СтрТЗ.Количество2 = ?(Сч=0,1,'20200511');
Сч=(Сч+1)%2;
КонецЦикла;
ТЗ.Свернуть("Значение1", "Количество1,Количество2");
юТест.ПроверитьРавенство(ТЗ.Количество(), 127, "Количество строк после свёртки");
юТест.ПроверитьРавенство(ТЗ.Колонки.Количество(), 3, "Количество колонок после свёртки");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "12", 3, "Количество1");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "12", 2, "Количество2");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "4", 18, "Количество1");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "4", 10, "Количество2");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "8", 10, "Количество1");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "8", 5, "Количество2");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "6", 18, "Количество1");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "6", 10, "Количество2");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьСверткуПоОднойКолонкеСРазнымиТипами() Экспорт
Строка = ТестовыеДанные();
ТЗ = ТестоваяТаблица();
Сч=0;
Для каждого Элемент Из СтрРазделить(Строка, ",") Цикл
СтрТЗ = ТЗ.Добавить();
СтрТЗ.Значение1 = ?(Сч=0,Число(Элемент),СокрЛП(Элемент));;
СтрТЗ.Количество1 = 1;
Сч=(Сч+1)%2;
КонецЦикла;
ТЗ.Свернуть("Значение1", "Количество1");
юТест.ПроверитьРавенство(ТЗ.Количество(), 149, "Количество строк после свёртки");
юТест.ПроверитьРавенство(ТЗ.Колонки.Количество(), 2, "Количество колонок после свёртки");
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "12", 1);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, 12, 2);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "4", 8);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, 4, 10);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "8", 5);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, 8, 5);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, "6", 8);
ПроверитьВТаблицеКоличествоДляЗначения1(ТЗ, 6, 10);
КонецПроцедуры
Процедура ПроверитьВТаблицеКоличествоДляЗначения1(Таблица, Значение, Количество, КолонкаСуммы="Количество1")
СтрТЗ2 = Таблица.Найти(Значение, "Значение1" );
юТест.ПроверитьРавенство( СтрТЗ2[КолонкаСуммы], Количество,
СтрШаблон("Сумма колонки %1 для значения %2 типа %3", КолонкаСуммы, Значение, ТипЗнч(Значение)) );
КонецПроцедуры