-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathreflector.os
949 lines (685 loc) · 66.5 KB
/
reflector.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
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
Перем юТест;
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодСуществует");
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаБезПараметров");
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаБезПараметровДляСтруктуры");
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаБезПараметров_ЯвноПередаюПустойМассив");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоУСтруктурыМетодСуществует");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляСтруктуры");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоУСоответствияМетодСуществует");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляСоответствия");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоУРефлектораМетодСуществует");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляРефлектора");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляРазныхТипов");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПараметрыИзмененныеВПроцедуреВозвращеныВМассив");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуСвойств");
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаСПараметрамиПоУмолчанию");
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаБезПараметровПоУмолчанию");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуПараметровПоУмолчанию");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодСуществуетДляТипа");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуМетодовДляТипа");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляСистемногоТипа");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляТипа");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляТипа_ПроверкаАннотаций");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоУПараметровЕстьИмена");
ВсеТесты.Добавить("ТестДолжен_ПроверитьУстановкуПриватногоСвойства");
ВсеТесты.Добавить("ТестДолжен_ПроверитьУстановкуПубличногоСвойства");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеПриватногоСвойства");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеПубличногоСвойства");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ПроверитьЗначенияПоУмолчанию");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ПроверитьЗначенияПоУмолчанию_ИзТипаОбъекта");
ВсеТесты.Добавить("ТестДолжен_ПроверитьРефлексиюДля_ЭтотОбъект");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПустыеАннотации");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПриватныеПоля");
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы");
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы_СОтборомКоллекция");
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПримитивный");
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПользовательский");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуВнешнихПараметров");
ВсеТесты.Добавить("ТестДолжен_ПроверитьРефлексиюВнешнегоПараметра");
ВсеТесты.Добавить("ТестДолжен_ПроверитьРефлексиюВнешнегоПараметраВРежимеПриватных");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляСтруктуры");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляФиксированнойСтруктуры");
#Если Windows Тогда
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаComОбъекта");
#КонецЕсли
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ПроверитьМетодСуществует() Экспорт
Пример = ПолучитьОбъектДляПроверки("Пример_reflector");
ИмяМетода = "Версия";
Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(Пример, ИмяМетода);
юТест.Проверить(ЕстьМетод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоУСтруктурыМетодСуществует() Экспорт
Пример = Новый Структура;
ИмяМетода = "Вставить";
Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(Пример, ИмяМетода);
юТест.Проверить(ЕстьМетод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоУСоответствияМетодСуществует() Экспорт
Пример = Новый Соответствие;
ИмяМетода = "Вставить";
Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(Пример, ИмяМетода);
юТест.Проверить(ЕстьМетод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоУРефлектораМетодСуществует() Экспорт
Пример = Новый Рефлектор;
ИмяМетода = "МетодСуществует";
Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(Пример, ИмяМетода);
юТест.Проверить(ЕстьМетод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьВызовМетодаБезПараметров() Экспорт
Пример = ПолучитьОбъектДляПроверки("Пример_reflector");
ИмяМетода = "Версия";
Рефлектор = Новый Рефлектор;
Версия = Рефлектор.ВызватьМетод(Пример, ИмяМетода);
юТест.ПроверитьРавенство(Пример.Версия(), Версия);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьВызовМетодаБезПараметровДляСтруктуры() Экспорт
Пример = Новый Структура;
Пример.Вставить("Ключ", 1);
ИмяМетода = "Очистить";
Рефлектор = Новый Рефлектор;
Версия = Рефлектор.ВызватьМетод(Пример, ИмяМетода);
юТест.ПроверитьРавенство(0, Пример.Количество(), "Ожидали, что структура будет пустой");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьВызовМетодаБезПараметров_ЯвноПередаюПустойМассив() Экспорт
Пример = ПолучитьОбъектДляПроверки("Пример_reflector2");
ИмяМетода = "Версия";
ПустойМассив = Новый Массив;
Рефлектор = Новый Рефлектор;
Версия = Рефлектор.ВызватьМетод(Пример, ИмяМетода, ПустойМассив);
юТест.ПроверитьРавенство(Пример.Версия(), Версия);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов() Экспорт
Пример = ПолучитьОбъектДляПроверки("Пример_reflector2");
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Пример);
юТест.ПроверитьРавенство(Строка(ТипЗнч(ТаблицаМетодов)), "ТаблицаЗначений", "ТаблицаМетодов");
юТест.ПроверитьРавенство(8, ТаблицаМетодов.Количество(), "ТаблицаМетодов.Количество()");
Метод0 = ТаблицаМетодов.Найти("Версия", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод0, "Метод0");
юТест.ПроверитьРавенство("Версия", Метод0.Имя, "Метод0.Имя");
юТест.ПроверитьРавенство(0, Метод0.КоличествоПараметров, "Метод0.КоличествоПараметров");
юТест.ПроверитьРавенство(Истина, Метод0.ЭтоФункция, "Метод0.ЭтоФункция");
Метод1 = ТаблицаМетодов.Найти("ПолучитьСписокТестов", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод1, "Метод1");
юТест.ПроверитьРавенство("ПолучитьСписокТестов", Метод1.Имя, "Метод1.Имя");
юТест.ПроверитьРавенство(1, Метод1.КоличествоПараметров, "Метод1.КоличествоПараметров");
юТест.ПроверитьРавенство(Истина, Метод1.ЭтоФункция, "Метод1.ЭтоФункция");
Метод2 = ТаблицаМетодов.Найти("ТестДолжен_ПроверитьВерсию", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод2, "Метод2");
юТест.ПроверитьРавенство("ТестДолжен_ПроверитьВерсию", Метод2.Имя, "Метод2.Имя");
юТест.ПроверитьРавенство(0, Метод2.КоличествоПараметров, "Метод2.КоличествоПараметров");
юТест.ПроверитьРавенство(Ложь, Метод2.ЭтоФункция, "Метод2.ЭтоФункция");
Метод3 = ТаблицаМетодов.Найти("ПриватнаяПроцедура", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод3, "Метод3");
юТест.ПроверитьРавенство("ПриватнаяПроцедура", Метод3.Имя, "Метод3.Имя");
юТест.ПроверитьРавенство(0, Метод3.КоличествоПараметров, "Метод3.КоличествоПараметров");
юТест.ПроверитьРавенство(Ложь, Метод3.ЭтоФункция, "Метод3.ЭтоФункция");
юТест.ПроверитьРавенство(Ложь, Метод3.Экспорт, "Метод3.Экспорт");
Метод4 = ТаблицаМетодов.Найти("ПриватнаяФункция", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод4, "Метод4");
юТест.ПроверитьРавенство("ПриватнаяФункция", Метод4.Имя, "Метод4.Имя");
юТест.ПроверитьРавенство(0, Метод4.КоличествоПараметров, "Метод4.КоличествоПараметров");
юТест.ПроверитьРавенство(Истина, Метод4.ЭтоФункция, "Метод4.ЭтоФункция");
юТест.ПроверитьРавенство(Ложь, Метод4.Экспорт, "Метод4.Экспорт");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляСтруктуры() Экспорт
Пример = Новый Структура;
Пример.Вставить("Ключ", 1);
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Пример);
юТест.ПроверитьРавенство(Строка(ТипЗнч(ТаблицаМетодов)), "ТаблицаЗначений", "ТаблицаМетодов");
юТест.ПроверитьРавенство(5, ТаблицаМетодов.Количество(), "ТаблицаМетодов.Количество()");
Метод0 = ТаблицаМетодов.Найти("Вставить", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод0, "Метод0");
юТест.ПроверитьРавенство("Вставить", Метод0.Имя, "Метод0.Имя");
юТест.ПроверитьРавенство(2, Метод0.КоличествоПараметров, "Метод0.КоличествоПараметров");
юТест.ПроверитьРавенство(Ложь, Метод0.ЭтоФункция, "Метод0.ЭтоФункция");
Метод4 = ТаблицаМетодов.Найти("Очистить", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод4, "Метод4");
юТест.ПроверитьРавенство("Очистить", Метод4.Имя, "Метод4.Имя");
юТест.ПроверитьРавенство(0, Метод4.КоличествоПараметров, "Метод4.КоличествоПараметров");
юТест.ПроверитьРавенство(Ложь, Метод4.ЭтоФункция, "Метод4.ЭтоФункция");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляСоответствия() Экспорт
Пример = Новый Соответствие;
Пример.Вставить("Ключ", 1);
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Пример);
юТест.ПроверитьРавенство(Строка(ТипЗнч(ТаблицаМетодов)), "ТаблицаЗначений", "ТаблицаМетодов");
юТест.ПроверитьРавенство(5, ТаблицаМетодов.Количество(), "ТаблицаМетодов.Количество()");
Метод0 = ТаблицаМетодов.Найти("Вставить", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод0, "Метод0");
юТест.ПроверитьРавенство("Вставить", Метод0.Имя, "Метод0.Имя");
юТест.ПроверитьРавенство(2, Метод0.КоличествоПараметров, "Метод0.КоличествоПараметров");
юТест.ПроверитьРавенство(Ложь, Метод0.ЭтоФункция, "Метод0.ЭтоФункция");
Метод4 = ТаблицаМетодов.Найти("Удалить", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод4, "Метод4");
юТест.ПроверитьРавенство("Удалить", Метод4.Имя, "Метод4.Имя");
юТест.ПроверитьРавенство(1, Метод4.КоличествоПараметров, "Метод4.КоличествоПараметров");
юТест.ПроверитьРавенство(Ложь, Метод4.ЭтоФункция, "Метод4.ЭтоФункция");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляРефлектора() Экспорт
Пример = Новый Рефлектор;
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Пример);
юТест.ПроверитьРавенство(Строка(ТипЗнч(ТаблицаМетодов)), "ТаблицаЗначений", "ТаблицаМетодов");
юТест.ПроверитьРавенство(7, ТаблицаМетодов.Количество(), "ТаблицаМетодов.Количество()");
Метод0 = ТаблицаМетодов.Найти("ВызватьМетод", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод0, "Метод0");
юТест.ПроверитьРавенство("ВызватьМетод", Метод0.Имя, "Метод0.Имя");
юТест.ПроверитьРавенство(3, Метод0.КоличествоПараметров, "Метод0.КоличествоПараметров");
юТест.ПроверитьРавенство(Истина, Метод0.ЭтоФункция, "Метод0.ЭтоФункция");
Метод2 = ТаблицаМетодов.Найти("ПолучитьТаблицуМетодов", "Имя");
юТест.ПроверитьНеРавенство(Неопределено, Метод2, "Метод2");
юТест.ПроверитьРавенство("ПолучитьТаблицуМетодов", Метод2.Имя, "Метод2.Имя");
юТест.ПроверитьРавенство(1, Метод2.КоличествоПараметров, "Метод2.КоличествоПараметров");
юТест.ПроверитьРавенство(Истина, Метод2.ЭтоФункция, "Метод2.ЭтоФункция");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ДляРазныхТипов() Экспорт
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(АргументыКоманднойСтроки);
МассивОбъектов.Добавить(Новый Массив);
МассивОбъектов.Добавить(Новый Рефлектор);
МассивОбъектов.Добавить(Новый ТаблицаЗначений);
МассивОбъектов.Добавить(Новый СписокЗначений);
МассивОбъектов.Добавить(Новый РегулярноеВыражение("а"));
МассивОбъектов.Добавить(Новый ЗаписьXML);
МассивОбъектов.Добавить(Новый ЧтениеXML);
МассивОбъектов.Добавить(Консоль);
МассивОбъектов.Добавить(Новый Файл("ыв"));
МассивОбъектов.Добавить(Новый ГенераторСлучайныхЧисел);
МассивОбъектов.Добавить(Новый СистемнаяИнформация);
МассивОбъектов.Добавить(Новый ТекстовыйДокумент);
МассивОбъектов.Добавить(Новый ЧтениеТекста);
МассивОбъектов.Добавить(Новый ЗаписьТекста);
Рефлектор = Новый Рефлектор;
Для Каждого Объект Из МассивОбъектов Цикл
ТипОбъекта = ТипЗнч(Объект);
Попытка
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Объект);
Исключение
ИнфоОшибки = ИнформацияОбОшибке();
текстОшибки = ПодробноеПредставлениеОшибки(ИнфоОшибки);
ВызватьИсключение "Тип <"+ТипОбъекта +">: не удалось получить таблицу методов" + Символы.ПС + текстОшибки;
КонецПопытки;
юТест.ПроверитьРавенство(Строка(ТипЗнч(ТаблицаМетодов)), "ТаблицаЗначений", "ТаблицаМетодов "+ТипЗнч(Объект));
юТест.ПроверитьБольше(ТаблицаМетодов.Количество(), 0, "ТаблицаМетодов.Количество()"+ТипЗнч(Объект));
КонецЦикла;
КонецПроцедуры
Процедура СообщитьПриветМир(БулеваПеременная, Знач ЧисловаяПеременная) Экспорт
Сообщить("Привет, Мир!");
БулеваПеременная = Ложь;
ЧисловаяПеременная = 7;
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоПараметрыИзмененныеВПроцедуреВозвращеныВМассив() Экспорт
БулеваПеременная = Истина;
ЧисловаяПеременная = 2;
ПараметрыОповещения = Новый Массив;
ПараметрыОповещения.Добавить(БулеваПеременная);
ПараметрыОповещения.Добавить(ЧисловаяПеременная);
Рефлектор = Новый Рефлектор;
Рефлектор.ВызватьМетод(ЭтотОбъект, "СообщитьПриветМир", ПараметрыОповещения);
юТест.ПроверитьИстину(БулеваПеременная, "Переменная не должна поменять значение");
юТест.ПроверитьРавенство(2, ЧисловаяПеременная, "Переменная не должна поменять значение");
юТест.ПроверитьЛожь(ПараметрыОповещения[0], "Аргумент метода должен принять значение Ложь");
юТест.ПроверитьРавенство(2, ПараметрыОповещения[1], "Аргумент метода не должен поменять значение");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуСвойств() Экспорт
Пример = ПолучитьОбъектДляПроверки("test_reflector");
Рефлектор = Новый Рефлектор;
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Пример);
юТест.ПроверитьРавенство(5, ТаблицаСвойств.Количество());
юТест.ПроверитьРавенство("ЭкспортнаяПеременная", ТаблицаСвойств[3].Имя);
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Рефлектор);
юТест.ПроверитьРавенство(0, ТаблицаСвойств.Количество());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляТипа() Экспорт
ОбъектДляПроверки = ПолучитьОбъектДляПроверки("test_export_props_type");
Тип = ТипЗнч(ОбъектДляПроверки);
Рефлектор = Новый Рефлектор;
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Тип, Истина);
юТест.ПроверитьРавенство(7, ТаблицаСвойств.Количество());
юТест.ПроверитьРавенство("ЭкспортнаяПеременная", ТаблицаСвойств[4].Имя);
юТест.ПроверитьРавенство("юТест", ТаблицаСвойств[2].Имя);
юТест.ПроверитьЛожь(ТаблицаСвойств[2].Экспорт);
юТест.ПроверитьИстину(ТаблицаСвойств[3].Экспорт);
юТест.ПроверитьИстину(ТаблицаСвойств[4].Экспорт);
юТест.ПроверитьИстину(ТаблицаСвойств[5].Экспорт);
юТест.ПроверитьЛожь(ТаблицаСвойств[6].Экспорт);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляТипа_ПроверкаАннотаций() Экспорт
ОбъектДляПроверки = ПолучитьОбъектДляПроверки("test_export_props_type_annotations");
Тип = ТипЗнч(ОбъектДляПроверки);
Рефлектор = Новый Рефлектор;
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Тип, Истина);
юТест.ПроверитьРавенство(1, ТаблицаСвойств[0].Аннотации.Количество());
юТест.ПроверитьРавенство(1, ТаблицаСвойств[1].Аннотации[0].Параметры[0].Значение);
юТест.ПроверитьРавенство("Парам1", ТаблицаСвойств[6].Аннотации[0].Параметры[0].Имя);
КонецПроцедуры
Функция ПолучитьОбъектДляПроверки(ИмяКласса)
ТекПуть = Новый Файл(ТекущийСценарий().Источник).Путь;
ПодключитьСценарий(ТекПуть+"example-test.os", ИмяКласса);
Пример = Новый(ИмяКласса);
Возврат Пример;
КонецФункции
Функция ФункцияСПараметрамиПоУмолчанию(Знач П1, Знач П2 = 2, Знач П3 = 3) Экспорт
Возврат П1 + П2 + П3;
КонецФункции
Функция НовыеПараметры(Знач П1 = Неопределено, Знач П2 = Неопределено, Знач П3 = Неопределено, Знач П4 = Неопределено)
М = Новый Массив;
Если Не П1 = Неопределено Тогда
М.Добавить(П1);
КонецЕсли;
Если Не П2 = Неопределено Тогда
М.Добавить(П2);
КонецЕсли;
Если Не П3 = Неопределено Тогда
М.Добавить(П3);
КонецЕсли;
Если Не П4 = Неопределено Тогда
М.Добавить(П4);
КонецЕсли;
Возврат М;
КонецФункции
Функция ТестДолжен_ПроверитьВызовМетодаСПараметрамиПоУмолчанию() Экспорт
Рефлектор = Новый Рефлектор;
Результат = Рефлектор.ВызватьМетод(ЭтотОбъект, "ФункцияСПараметрамиПоУмолчанию", НовыеПараметры(1));
юТест.ПроверитьРавенство(Результат, 6, "Вызов рефлектором с параметрами по-умолчанию");
Результат = Рефлектор.ВызватьМетод(ЭтотОбъект, "ФункцияСПараметрамиПоУмолчанию", НовыеПараметры(1, 1));
юТест.ПроверитьРавенство(Результат, 5, "Вызов рефлектором с параметрами по-умолчанию");
Ошибка = Ложь;
Попытка
Результат = Рефлектор.ВызватьМетод(ЭтотОбъект, "ФункцияСПараметрамиПоУмолчанию", НовыеПараметры(1, 1, 1, 1));
Ошибка = Истина;
Исключение
// Всё правильно!
КонецПопытки;
Если Ошибка Тогда
юТест.ТестПровален("Вызов рефлектора с превышением параметров");
КонецЕсли;
Ошибка = Ложь;
Попытка
Результат = Рефлектор.ВызватьМетод(ЭтотОбъект, "ФункцияСПараметрамиПоУмолчанию", НовыеПараметры());
Ошибка = Истина;
Исключение
// Всё правильно!
КонецПопытки;
Если Ошибка Тогда
юТест.ТестПровален("Вызов рефлектора с недостаточным количеством параметров");
КонецЕсли;
КонецФункции
Процедура ТестДолжен_ПроверитьВызовМетодаБезПараметровПоУмолчанию() Экспорт
Рефлектор = Новый Рефлектор;
Массив = Новый Массив(1);
Арг = Новый Массив;
Арг.Добавить(0);
Ошибка = Ложь;
Попытка
Рефлектор.ВызватьМетод(Массив, "Установить", Арг);
Ч = Массив[0];
Ошибка = Истина;
Исключение
Сообщение = ОписаниеОшибки();
Если СтрНайти(Сообщение,"NullReferenceException") <> 0 Тогда
Ошибка = Истина;
КонецЕсли;
КонецПопытки;
Если Ошибка Тогда
юТест.ТестПровален("Вызов рефлектора с недостаточным количеством параметров без умолчания");
КонецЕсли;
КонецПроцедуры
Процедура ТестПередачиПараметровПоУмолчанию(Пар1, Пар2="п2") Экспорт
юТест.ПроверитьРавенство(Пар1, "п1", "Тест передачи параметров: параметр 1");
юТест.ПроверитьРавенство(Пар2, "п2", "Тест передачи параметров: параметр 2");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПередачуПараметровПоУмолчанию() Экспорт
Рефлектор = Новый Рефлектор;
Массив = Новый Массив(1);
Арг = Новый Массив;
Арг.Добавить("п1");
Рефлектор.ВызватьМетод(ЭтотОбъект, "ТестПередачиПараметровПоУмолчанию", Арг);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетодСуществуетДляТипа() Экспорт
Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(Тип("HTTPОтвет"), "ПолучитьТелоКакСтроку");
юТест.ПроверитьИстину(ЕстьМетод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучитьТаблицуМетодовДляТипа() Экспорт
Рефлектор = Новый Рефлектор;
Таблица = Рефлектор.ПолучитьТаблицуМетодов(Тип("ДвоичныеДанные"));
юТест.ПроверитьРавенство(3, Таблица.Количество(), "Проверка числа методов");
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("Размер"));
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("Записать"));
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("ОткрытьПотокДляЧтения"));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоУПараметровЕстьИмена() Экспорт
Рефлектор = Новый Рефлектор();
Методы = Рефлектор.ПолучитьТаблицуМетодов(ЭтотОбъект);
МетодСПараметрами = Методы.Найти("ФункцияСПараметрамиПоУмолчанию");
юТест.ПроверитьНеРавенство(Неопределено, МетодСПараметрами);
Параметры = МетодСПараметрами.Параметры;
юТест.ПроверитьРавенство("П1", Параметры[0].Имя);
юТест.ПроверитьРавенство("П2", Параметры[1].Имя);
юТест.ПроверитьРавенство("П3", Параметры[2].Имя);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляСистемногоТипа() Экспорт
Рефлектор = Новый Рефлектор;
Таблица = Рефлектор.ПолучитьТаблицуСвойств(Тип("Файл"));
юТест.ПроверитьНеРавенство(0, Таблица.Количество());
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("ПолноеИмя"));
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("ИмяБезРасширения"));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьУстановкуПриватногоСвойства() Экспорт
Рефлектор = Новый Рефлектор;
Пример = ПолучитьОбъектДляПроверки("test_reflector");
НовоеЗначение = Новый УникальныйИдентификатор();
Рефлектор.УстановитьСвойство(Пример, "Яшма2", НовоеЗначение);
юТест.Проверить(НовоеЗначение = Пример.Яшма2(), "Значения должны совпадать");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьУстановкуПубличногоСвойства() Экспорт
Рефлектор = Новый Рефлектор;
Пример = ПолучитьОбъектДляПроверки("test_reflector");
НовоеЗначение = Новый УникальныйИдентификатор();
Рефлектор.УстановитьСвойство(Пример, "Яшма1", НовоеЗначение);
юТест.Проверить(НовоеЗначение = Пример.Яшма1, "Значения должны совпадать");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучениеПубличногоСвойства() Экспорт
Рефлектор = Новый Рефлектор;
Пример = ПолучитьОбъектДляПроверки("test_reflector");
НовоеЗначение = Новый УникальныйИдентификатор();
Рефлектор.УстановитьСвойство(Пример, "Яшма1", НовоеЗначение);
юТест.Проверить(НовоеЗначение = Рефлектор.ПолучитьСвойство(Пример, "Яшма1"), "Значения должны совпадать");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучениеПриватногоСвойства() Экспорт
Рефлектор = Новый Рефлектор;
Пример = ПолучитьОбъектДляПроверки("test_reflector");
НовоеЗначение = Новый УникальныйИдентификатор();
Рефлектор.УстановитьСвойство(Пример, "Яшма2", НовоеЗначение);
юТест.Проверить(НовоеЗначение = Рефлектор.ПолучитьСвойство(Пример, "Яшма2"), "Значения должны совпадать");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ПроверитьЗначенияПоУмолчанию() Экспорт
Пример = ПолучитьОбъектДляПроверки("test_reflector");
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Пример);
МетодСРазнымиПараметрами = ТаблицаМетодов.Найти("МетодСРазнымиПараметрами", "Имя");
Параметры = МетодСРазнымиПараметрами.Параметры;
юТест.ПроверитьРавенство(Параметры[0].ЕстьЗначениеПоУмолчанию, Ложь);
юТест.ПроверитьРавенство(Параметры[0].ЗначениеПоУмолчанию, Неопределено);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[0].ЗначениеПоУмолчанию), Тип("Неопределено"));
юТест.ПроверитьРавенство(Параметры[1].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[1].ЗначениеПоУмолчанию, Неопределено);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[1].ЗначениеПоУмолчанию), Тип("Неопределено"));
юТест.ПроверитьРавенство(Параметры[2].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[2].ЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[2].ЗначениеПоУмолчанию), Тип("Булево"));
юТест.ПроверитьРавенство(Параметры[3].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[3].ЗначениеПоУмолчанию, 1);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[3].ЗначениеПоУмолчанию), Тип("Число"));
юТест.ПроверитьРавенство(Параметры[4].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[4].ЗначениеПоУмолчанию, "Строка");
юТест.ПроверитьРавенство(ТипЗнч(Параметры[4].ЗначениеПоУмолчанию), Тип("Строка"));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ПроверитьЗначенияПоУмолчанию_ИзТипаОбъекта() Экспорт
Пример = ПолучитьОбъектДляПроверки("test_reflector");
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(Пример));
МетодСРазнымиПараметрами = ТаблицаМетодов.Найти("МетодСРазнымиПараметрами", "Имя");
Параметры = МетодСРазнымиПараметрами.Параметры;
юТест.ПроверитьРавенство(Параметры[0].ЕстьЗначениеПоУмолчанию, Ложь);
юТест.ПроверитьРавенство(Параметры[0].ЗначениеПоУмолчанию, Неопределено);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[0].ЗначениеПоУмолчанию), Тип("Неопределено"));
юТест.ПроверитьРавенство(Параметры[1].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[1].ЗначениеПоУмолчанию, Неопределено);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[1].ЗначениеПоУмолчанию), Тип("Неопределено"));
юТест.ПроверитьРавенство(Параметры[2].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[2].ЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[2].ЗначениеПоУмолчанию), Тип("Булево"));
юТест.ПроверитьРавенство(Параметры[3].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[3].ЗначениеПоУмолчанию, 1);
юТест.ПроверитьРавенство(ТипЗнч(Параметры[3].ЗначениеПоУмолчанию), Тип("Число"));
юТест.ПроверитьРавенство(Параметры[4].ЕстьЗначениеПоУмолчанию, Истина);
юТест.ПроверитьРавенство(Параметры[4].ЗначениеПоУмолчанию, "Строка");
юТест.ПроверитьРавенство(ТипЗнч(Параметры[4].ЗначениеПоУмолчанию), Тип("Строка"));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПустыеАннотации() Экспорт
Пример = ПолучитьОбъектДляПроверки("test_reflector");
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Пример);
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Пример);
МетодСРазнымиПараметрами = ТаблицаМетодов.Найти("МетодСРазнымиПараметрами", "Имя");
Яшма2 = ТаблицаМетодов.Найти("Яшма2", "Имя");
ПеременнаяСАннотацией = ТаблицаСвойств.Найти("ПеременнаяСАннотацией", "Имя");
ПеременнаяСАннотациейИПараметром = ТаблицаСвойств.Найти("ПеременнаяСАннотациейИПараметром", "Имя");
юТест.ПроверитьРавенство(типЗнч(МетодСРазнымиПараметрами.Аннотации[0].Параметры), Тип("ТаблицаЗначений"));
юТест.ПроверитьРавенство(типЗнч(Яшма2.Аннотации[0].Параметры), Тип("ТаблицаЗначений"));
юТест.ПроверитьРавенство(типЗнч(ПеременнаяСАннотацией.Аннотации[0].Параметры), Тип("ТаблицаЗначений"));
юТест.ПроверитьРавенство(типЗнч(ПеременнаяСАннотациейИПараметром.Аннотации[0].Параметры), Тип("ТаблицаЗначений"));
юТест.ПроверитьРавенство(МетодСРазнымиПараметрами.Аннотации[0].Параметры.Количество(), 0);
юТест.ПроверитьРавенство(Яшма2.Аннотации[0].Параметры.Количество(), 1);
юТест.ПроверитьРавенство(ПеременнаяСАннотацией.Аннотации[0].Параметры.Количество(), 0);
юТест.ПроверитьРавенство(ПеременнаяСАннотациейИПараметром.Аннотации[0].Параметры.Количество(), 1);
юТест.ПроверитьРавенство(Яшма2.Аннотации[0].Параметры[0].Значение, 1);
юТест.ПроверитьРавенство(ПеременнаяСАннотациейИПараметром.Аннотации[0].Параметры[0].Значение, 1);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПриватныеПоля() Экспорт
Пример = ПолучитьОбъектДляПроверки("test_reflector");
Рефлектор = Новый Рефлектор;
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Пример, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств.Количество(), 7);
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Имя, "ПеременнаяСАннотацией");
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Имя, "ПеременнаяСАннотациейИПараметром");
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Имя, "юТест");
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Экспорт, Ложь);
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Имя, "ЭтотОбъек");
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Имя, "ЭкспортнаяПеременная");
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[5].Имя, "Яшма1");
юТест.ПроверитьРавенство(ТаблицаСвойств[5].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[6].Имя, "Яшма2");
юТест.ПроверитьРавенство(ТаблицаСвойств[6].Экспорт, Ложь);
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Пример);
юТест.ПроверитьРавенство(ТаблицаСвойств.Количество(), 5);
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Имя, "ПеременнаяСАннотацией");
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Имя, "ПеременнаяСАннотациейИПараметром");
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Имя, "ЭтотОбъек");
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Имя, "ЭкспортнаяПеременная");
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Имя, "Яшма1");
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Экспорт, Истина);
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(ТипЗнч(Пример), Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств.Количество(), 7);
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Имя, "ПеременнаяСАннотацией");
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Имя, "ПеременнаяСАннотациейИПараметром");
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Имя, "юТест");
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Экспорт, Ложь);
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Имя, "ЭтотОбъек");
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Имя, "ЭкспортнаяПеременная");
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[5].Имя, "Яшма1");
юТест.ПроверитьРавенство(ТаблицаСвойств[5].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[6].Имя, "Яшма2");
юТест.ПроверитьРавенство(ТаблицаСвойств[6].Экспорт, Ложь);
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(ТипЗнч(Пример));
юТест.ПроверитьРавенство(ТаблицаСвойств.Количество(), 5);
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Имя, "ПеременнаяСАннотацией");
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Имя, "ПеременнаяСАннотациейИПараметром");
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Имя, "ЭтотОбъек");
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Имя, "ЭкспортнаяПеременная");
юТест.ПроверитьРавенство(ТаблицаСвойств[3].Экспорт, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Имя, "Яшма1");
юТест.ПроверитьРавенство(ТаблицаСвойств[4].Экспорт, Истина);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьРефлексиюДля_ЭтотОбъект() Экспорт
ОбъектПроверки = ЭтотОбъект;
РефлекторПроверки = Новый Рефлектор;
ТаблицаМетодов = РефлекторПроверки.ПолучитьТаблицуМетодов(ОбъектПроверки);
ТаблицаСвойств = РефлекторПроверки.ПолучитьТаблицуСвойств(ТипЗнч(ОбъектПроверки), Истина);
юТест.ПроверитьНеравенство(0, ТаблицаМетодов.Количество());
юТест.ПроверитьНеравенство(0, ТаблицаСвойств.Количество());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьИзвестныеТипы() Экспорт
ПолучитьОбъектДляПроверки("МойКлассныйТип");
Рефлектор = Новый Рефлектор;
ИзвестныеТипы = Рефлектор.ИзвестныеТипы();
ПроверитьТипИзвестныхТипов(ИзвестныеТипы);
Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл
ПроверитьСтрокуИзвестныхТипов(ИзвестныйТип);
КонецЦикла;
ОписаниеТипаЧисло = ИзвестныеТипы.Найти(Тип("Число"));
юТест.ПроверитьЗаполненность(ОписаниеТипаЧисло);
юТест.ПроверитьТип(ОписаниеТипаЧисло, "СтрокаТаблицыЗначений");
юТест.ПроверитьИстину(ОписаниеТипаЧисло.Примитивный);
юТест.ПроверитьЛожь(ОписаниеТипаЧисло.Пользовательский);
юТест.ПроверитьЛожь(ОписаниеТипаЧисло.Коллекция);
ОписаниеТипаМассив = ИзвестныеТипы.Найти(Тип("Массив"));
юТест.ПроверитьЗаполненность(ОписаниеТипаМассив);
юТест.ПроверитьТип(ОписаниеТипаМассив, "СтрокаТаблицыЗначений");
юТест.ПроверитьЛожь(ОписаниеТипаМассив.Примитивный);
юТест.ПроверитьЛожь(ОписаниеТипаМассив.Пользовательский);
юТест.ПроверитьИстину(ОписаниеТипаМассив.Коллекция);
ОписаниеТипаМойКлассныйТип = ИзвестныеТипы.Найти(Тип("МойКлассныйТип"));
юТест.ПроверитьЗаполненность(ОписаниеТипаМойКлассныйТип);
юТест.ПроверитьТип(ОписаниеТипаМойКлассныйТип, "СтрокаТаблицыЗначений");
юТест.ПроверитьЛожь(ОписаниеТипаМойКлассныйТип.Примитивный);
юТест.ПроверитьИстину(ОписаниеТипаМойКлассныйТип.Пользовательский);
юТест.ПроверитьЛожь(ОписаниеТипаМойКлассныйТип.Коллекция);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьИзвестныеТипы_СОтборомКоллекция() Экспорт
ПолучитьОбъектДляПроверки("МойКлассныйТип");
Рефлектор = Новый Рефлектор;
Отбор = Новый Структура("Коллекция", Истина);
ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Отбор);
ПроверитьТипИзвестныхТипов(ИзвестныеТипы);
Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл
ПроверитьСтрокуИзвестныхТипов(ИзвестныйТип);
юТест.ПроверитьИстину(ИзвестныйТип.Коллекция);
юТест.ПроверитьЛожь(ИзвестныйТип.Примитивный);
юТест.ПроверитьЛожь(ИзвестныйТип.Пользовательский);
КонецЦикла;
ОписаниеТипаМассив = ИзвестныеТипы.Найти(Тип("Массив"));
юТест.ПроверитьЗаполненность(ОписаниеТипаМассив);
юТест.ПроверитьТип(ОписаниеТипаМассив, "СтрокаТаблицыЗначений");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПримитивный() Экспорт
ПолучитьОбъектДляПроверки("МойКлассныйТип");
Рефлектор = Новый Рефлектор;
Отбор = Новый Структура("Примитивный", Истина);
ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Отбор);
ПроверитьТипИзвестныхТипов(ИзвестныеТипы);
Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл
ПроверитьСтрокуИзвестныхТипов(ИзвестныйТип);
юТест.ПроверитьЛожь(ИзвестныйТип.Коллекция);
юТест.ПроверитьИстину(ИзвестныйТип.Примитивный);
юТест.ПроверитьЛожь(ИзвестныйТип.Пользовательский);
КонецЦикла;
ОписаниеТипаЧисло = ИзвестныеТипы.Найти(Тип("Число"));
юТест.ПроверитьЗаполненность(ОписаниеТипаЧисло);
юТест.ПроверитьТип(ОписаниеТипаЧисло, "СтрокаТаблицыЗначений");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПользовательский() Экспорт
ПолучитьОбъектДляПроверки("МойКлассныйТип");
Рефлектор = Новый Рефлектор;
Отбор = Новый Структура("Пользовательский", Истина);
ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Отбор);
ПроверитьТипИзвестныхТипов(ИзвестныеТипы);
Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл
ПроверитьСтрокуИзвестныхТипов(ИзвестныйТип);
юТест.ПроверитьЛожь(ИзвестныйТип.Коллекция);
юТест.ПроверитьЛожь(ИзвестныйТип.Примитивный);
юТест.ПроверитьИстину(ИзвестныйТип.Пользовательский);
КонецЦикла;
ОписаниеТипаМойКлассныйТип = ИзвестныеТипы.Найти(Тип("МойКлассныйТип"));
юТест.ПроверитьЗаполненность(ОписаниеТипаМойКлассныйТип);
юТест.ПроверитьТип(ОписаниеТипаМойКлассныйТип, "СтрокаТаблицыЗначений");
КонецПроцедуры
Процедура ПроверитьТипИзвестныхТипов(ИзвестныеТипы)
юТест.ПроверитьТип(ИзвестныеТипы, "ТаблицаЗначений");
юТест.ПроверитьНеРавенство(ИзвестныеТипы.Количество(), 0);
юТест.ПроверитьРавенство(ИзвестныеТипы.Колонки.Количество(), 5);
юТест.ПроверитьЗаполненность(ИзвестныеТипы.Колонки.Найти("Имя"));
юТест.ПроверитьЗаполненность(ИзвестныеТипы.Колонки.Найти("Значение"));
юТест.ПроверитьЗаполненность(ИзвестныеТипы.Колонки.Найти("Примитивный"));
юТест.ПроверитьЗаполненность(ИзвестныеТипы.Колонки.Найти("Пользовательский"));
юТест.ПроверитьЗаполненность(ИзвестныеТипы.Колонки.Найти("Коллекция"));
КонецПроцедуры
Процедура ПроверитьСтрокуИзвестныхТипов(ИзвестныйТип)
юТест.ПроверитьТип(ИзвестныйТип.Имя, "Строка");
юТест.ПроверитьТип(ИзвестныйТип.Значение, "Тип");
юТест.ПроверитьТип(ИзвестныйТип.Примитивный, "Булево");
юТест.ПроверитьТип(ИзвестныйТип.Пользовательский, "Булево");
юТест.ПроверитьТип(ИзвестныйТип.Коллекция, "Булево");
юТест.ПроверитьЗаполненность(ИзвестныйТип.Имя);
юТест.ПроверитьЗаполненность(ИзвестныйТип.Значение);
КонецПроцедуры
#Если Windows Тогда
Процедура ТестДолжен_ПроверитьВызовМетодаComОбъекта() Экспорт
FSO = ПолучитьCOMОбъект("", "Scripting.FileSystemObject");
Рез = FSO.DriveExists("C");
юТест.ПроверитьТип(Рез, "Булево");
КонецПроцедуры
#КонецЕсли
Процедура ТестДолжен_ПроверитьПередачуВнешнихПараметров() Экспорт
Код = "Перем Результат Экспорт; Результат = Множитель * 5";
Параметры = Новый Структура("Множитель", 2);
ЗагружаемыйСценарий = ЗагрузитьСценарийИзСтроки(Код, Параметры);
юТест.ПроверитьРавенство(10, ЗагружаемыйСценарий.Результат);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьРефлексиюВнешнегоПараметра() Экспорт
Код = "Перем Результат Экспорт; Результат = Множитель * 5";
Параметры = Новый Структура("Множитель", 2);
ЗагружаемыйСценарий = ЗагрузитьСценарийИзСтроки(Код, Параметры);
Рефлектор = Новый Рефлектор;
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(ЗагружаемыйСценарий);
юТест.ПроверитьРавенство(1, ТаблицаСвойств.Количество());
юТест.ПроверитьРавенство("Результат", ТаблицаСвойств[0].Имя);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьРефлексиюВнешнегоПараметраВРежимеПриватных() Экспорт
Код = "Перем Результат Экспорт; Результат = Множитель * 5";
Параметры = Новый Структура("Множитель", 2);
ЗагружаемыйСценарий = ЗагрузитьСценарийИзСтроки(Код, Параметры);
Рефлектор = Новый Рефлектор;
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(ЗагружаемыйСценарий, Истина);
ТаблицаСвойств.Сортировать("Имя");
юТест.ПроверитьРавенство(2, ТаблицаСвойств.Количество());
юТест.ПроверитьРавенство("Множитель", ТаблицаСвойств[0].Имя);
юТест.ПроверитьЛожь(ТаблицаСвойств[0].Экспорт);
юТест.ПроверитьРавенство("Результат", ТаблицаСвойств[1].Имя);
юТест.ПроверитьИстину(ТаблицаСвойств[1].Экспорт);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляСтруктуры() Экспорт
Рефлектор = Новый Рефлектор;
Структура = Новый Структура("Поле1, Поле2", -1, -2);
Таблица = Рефлектор.ПолучитьТаблицуСвойств(Структура);
юТест.ПроверитьРавенство(2, Таблица.Количество());
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("Поле1"));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляФиксированнойСтруктуры() Экспорт
Рефлектор = Новый Рефлектор;
ФиксСтруктура = Новый ФиксированнаяСтруктура("Поле1, Поле2", -1, -2);
Таблица = Рефлектор.ПолучитьТаблицуСвойств(ФиксСтруктура);
юТест.ПроверитьРавенство(2, Таблица.Количество());
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("Поле1"));
КонецПроцедуры