-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathannotations.os
200 lines (134 loc) · 14.5 KB
/
annotations.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
Перем юТест;
////////////////////////////////////////////////////////////////////
// Программный интерфейс
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийМетода");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийПараметров");
ВсеТесты.Добавить("ТестДолжен_ПроверитьАннотацииПолейЗагрузитьСценарий");
ВсеТесты.Добавить("ТестДолжен_ПроверитьАннотацииПолейЗагрузитьСценарийИзСтроки");
Возврат ВсеТесты;
КонецФункции
Процедура САннотированнымиПараметрами(
&АннотацияДляПараметра
Знач Парам1,
&АннотацияДляПараметра()
&АннотацияДляПараметра1
&АннотацияДляПараметра2(СПараметрами = 3, 4, -5)
Знач Парам2,
Парам3,
Парам4 = Неопределено
) Экспорт
КонецПроцедуры
&НаСервере
&НаКлиентеНаСервереБезКонтекста
&НаЧемУгодно(ДажеСПараметром = "Да", СПараметромБезЗначения, "Значение без параметра")
&НаЧемУгодно(ДажеДважды = Истина)
&НаЧемУгодно()
Процедура ТестДолжен_ПроверитьПолучениеАннотацийМетода() Экспорт
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ЭтотОбъект);
юТест.ПроверитьНеРавенство(ТаблицаМетодов.Колонки.Найти("Аннотации"), Неопределено, "Есть колонка Аннотации");
СтрокаМетода = ТаблицаМетодов.Найти("ТестДолжен_ПроверитьПолучениеАннотацийМетода", "Имя");
юТест.ПроверитьНеРавенство(СтрокаМетода, Неопределено, "Метод с аннотациями есть в таблице рефлектора");
юТест.ПроверитьНеРавенство(СтрокаМетода.Аннотации, Неопределено, "Рефлектор знает про аннотации метода");
юТест.ПроверитьРавенство(СтрокаМетода.Аннотации.Количество(), 5, "Рефлектор вернул верное количество аннотаций");
юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[0].Имя, "НаСервере", "Рефлектор сохранил порядок указания аннотаций");
юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[1].Имя, "НаКлиентеНаСервереБезКонтекста", "Рефлектор сохранил порядок указания аннотаций");
юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[2].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций");
юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[3].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций");
юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[4].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций");
Аннотация2 = СтрокаМетода.Аннотации[2];
юТест.ПроверитьНеРавенство(Аннотация2.Параметры, Неопределено, "Есть таблица параметров аннотации");
юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(0).Имя, "ДажеСПараметром", "Знаем имя именованного параметра");
юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(0).Значение, "Да", "Знаем значение именованного параметра");
юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(1).Имя, "СПараметромБезЗначения", "Знаем имя именованного параметра");
юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(1).Значение, Неопределено, "Знаем, что значение не определено");
юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(2).Имя, Неопределено, "Знаем, что имя не определно");
юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(2).Значение, "Значение без параметра", "Знаем значение параметра без имени");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучениеАннотацийПараметров() Экспорт
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ЭтотОбъект);
юТест.ПроверитьНеРавенство(ТаблицаМетодов.Колонки.Найти("Параметры"), Неопределено, "Рефлектор знает о параметрах");
СтрокаМетода = ТаблицаМетодов.Найти("САннотированнымиПараметрами", "Имя");
юТест.ПроверитьРавенство(СтрокаМетода.Параметры.Количество(), 4, "Правильное количество параметров");
Парам1 = СтрокаМетода.Параметры.Получить(0);
Парам2 = СтрокаМетода.Параметры.Получить(1);
Парам3 = СтрокаМетода.Параметры.Получить(2);
Парам4 = СтрокаМетода.Параметры.Получить(3);
юТест.ПроверитьРавенство(Парам1.Аннотации.Получить(0).Имя, "АннотацияДляПараметра", "Аннотации параметров");
юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(0).Имя, "АннотацияДляПараметра", "Аннотации параметров");
юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(1).Имя, "АннотацияДляПараметра1", "Аннотации параметров");
юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Имя, "АннотацияДляПараметра2", "Аннотации параметров");
юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры.Количество(), 3, "Параметры аннотации параметров");
юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры[0].Значение, 3, "Значения параметров аннотации параметров");
юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры[1].Значение, 4, "Значения параметров аннотации параметров");
юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры[2].Значение, -5, "Значения параметров аннотации параметров");
юТест.ПроверитьРавенство(Парам3.Аннотации.Количество(), 0);
юТест.ПроверитьРавенство(Парам4.Аннотации.Количество(), 0);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьАннотацииПолейЗагрузитьСценарий() Экспорт
Файл = ПолучитьИмяВременногоФайла(".os");
Запись = Новый ЗаписьТекста(Файл);
Запись.Записать(ТекстСценария());
Запись.Закрыть();
Сценарий = ЗагрузитьСценарий(Файл);
УдалитьФайлы(Файл);
ПроверитьАннотацииПоляСценария(Сценарий);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьАннотацииПолейЗагрузитьСценарийИзСтроки() Экспорт
Сценарий = ЗагрузитьСценарийИзСтроки(ТекстСценария());
ПроверитьАннотацииПоляСценария(Сценарий);
КонецПроцедуры
Функция ТекстСценария()
Возврат
"&АннотацияБезПараметра
|&АннотацияСПараметром(""Значение"")
|&АннотацияСИменованнымПараметром(ИмяПараметра = ""Значение"")
|Перем Поле Экспорт;";
КонецФункции
Процедура ПроверитьАннотацииПоляСценария(Сценарий)
Рефлектор = Новый Рефлектор();
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Сценарий);
Если ТаблицаСвойств.Количество() <> 1 Тогда
ВызватьИсключение "Ожидали, что в таблице свойств будет одно свойство а это не так";
КонецЕсли;
КоличествоАннотаций = ТаблицаСвойств[0].Аннотации.Количество();
Если КоличествоАннотаций <> 3 Тогда
ВызватьИсключение "Ожидали, что в таблице аннотаций свойства будет 3 аннотации а их там " + КоличествоАннотаций;
КонецЕсли;
ИмяАннотации = ТаблицаСвойств[0].Аннотации[0].Имя;
Если ИмяАннотации <> "АннотацияБезПараметра" Тогда
ВызватьИсключение "Ожидали, что первой аннотацией свойства будет АннотацияБезПараметра а там " + ИмяАннотации;
КонецЕсли;
ИмяАннотации = ТаблицаСвойств[0].Аннотации[1].Имя;
Если ИмяАннотации <> "АннотацияСПараметром" Тогда
ВызватьИсключение "Ожидали, что второй аннотацией свойства будет АннотацияСПараметром а там " + ИмяАннотации;
КонецЕсли;
КоличествоПараметров = ТаблицаСвойств[0].Аннотации[1].Параметры.Количество();
Если КоличествоПараметров <> 1 Тогда
ВызватьИсключение "Ожидали, что количество параметров второй аннотации будет равно 1 а их там " + КоличествоПараметров;
КонецЕсли;
ПараметрАннотации = ТаблицаСвойств[0].Аннотации[1].Параметры[0];
Если ПараметрАннотации.Имя <> Неопределено Или ПараметрАннотации.Значение <> "Значение" Тогда
ВызватьИсключение
"Ожидали, что у параметра второй аннотации будет имя Неопределено и строка Значение в поле значение, а там:
| Имя = " + ПараметрАннотации.Имя + " Значение = " + ПараметрАннотации.Значение;
КонецЕсли;
ИмяАннотации = ТаблицаСвойств[0].Аннотации[2].Имя;
Если ИмяАннотации <> "АннотацияСИменованнымПараметром" Тогда
ВызватьИсключение "Ожидали, что третьей аннотацией свойства будет АннотацияСИменованнымПараметром а там " + ИмяАннотации;
КонецЕсли;
КоличествоПараметров = ТаблицаСвойств[0].Аннотации[2].Параметры.Количество();
Если КоличествоПараметров <> 1 Тогда
ВызватьИсключение "Ожидали, что количество параметров третьей аннотации будет равно 1 а их там " + КоличествоПараметров;
КонецЕсли;
ПараметрАннотации = ТаблицаСвойств[0].Аннотации[2].Параметры[0];
Если ПараметрАннотации.Имя <> "ИмяПараметра" Или ПараметрАннотации.Значение <> "Значение" Тогда
ВызватьИсключение
"Ожидали, что у параметра третьей аннотации будет имя ИмяПараметра и строка Значение в поле значение, а там:
| Имя = " + ПараметрАннотации.Имя + " Значение = " + ПараметрАннотации.Значение;
КонецЕсли;
КонецПроцедуры