-
Notifications
You must be signed in to change notification settings - Fork 117
Expand file tree
/
Copy pathannotations.os
More file actions
254 lines (169 loc) · 19.1 KB
/
annotations.os
File metadata and controls
254 lines (169 loc) · 19.1 KB
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
Перем юТест;
////////////////////////////////////////////////////////////////////
// Программный интерфейс
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийМетода");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийПараметров");
ВсеТесты.Добавить("ТестДолжен_ПроверитьАннотацииПолейЗагрузитьСценарий");
ВсеТесты.Добавить("ТестДолжен_ПроверитьАннотацииПолейЗагрузитьСценарийИзСтроки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьАннотациюКакЗначениеПараметраАннотации");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийСпискаПеременных");
Возврат ВсеТесты;
КонецФункции
&Аннотация(Параметр = &ТожеАннотация(&СТожеПараметромАннотацией, П2 = &СТожеПараметромАннотацией))
Процедура ТестДолжен_ПроверитьАннотациюКакЗначениеПараметраАннотации() Экспорт
Рефлектор = Новый Рефлектор;
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ЭтотОбъект);
юТест.ПроверитьНеРавенство(ТаблицаМетодов.Колонки.Найти("Аннотации"), Неопределено, "Есть колонка Аннотации");
СтрокаМетода = ТаблицаМетодов.Найти("ТестДолжен_ПроверитьАннотациюКакЗначениеПараметраАннотации", "Имя");
ПерваяАннотация = СтрокаМетода.Аннотации[0];
ПервыйПараметрПервойАннотации = ПерваяАннотация.Параметры[0];
юТест.ПроверитьТип(ПервыйПараметрПервойАннотации.Значение, Тип("СтрокаТаблицыЗначений"));
юТест.ПроверитьРавенство(ПервыйПараметрПервойАннотации.Значение.Имя, "ТожеАннотация");
юТест.ПроверитьТип(ПервыйПараметрПервойАннотации.Значение.Параметры, Тип("ТаблицаЗначений"));
юТест.ПроверитьТип(ПервыйПараметрПервойАннотации.Значение.Параметры[0].Значение, Тип("СтрокаТаблицыЗначений"));
юТест.ПроверитьРавенство(ПервыйПараметрПервойАннотации.Значение.Параметры[0].Значение.Имя, "СТожеПараметромАннотацией");
юТест.ПроверитьРавенство(ПервыйПараметрПервойАннотации.Значение.Параметры[1].Имя, "П2");
юТест.ПроверитьРавенство(ПервыйПараметрПервойАннотации.Значение.Параметры[1].Значение.Имя, "СТожеПараметромАннотацией");
КонецПроцедуры
Процедура САннотированнымиПараметрами(
&АннотацияДляПараметра
Знач Парам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];
Если ПараметрАннотации.Имя <> "ИмяПараметра" Или ПараметрАннотации.Значение <> "Значение" Тогда
ВызватьИсключение
"Ожидали, что у параметра третьей аннотации будет имя ИмяПараметра и строка Значение в поле значение, а там:
| Имя = " + ПараметрАннотации.Имя + " Значение = " + ПараметрАннотации.Значение;
КонецЕсли;
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучениеАннотацийСпискаПеременных() Экспорт
ТекстСценария = "&Аннотация1
|Перем Поле1 Экспорт, Поле2;
|Перем Поле3;
|";
Сценарий = ЗагрузитьСценарийИзСтроки(ТекстСценария);
Рефлектор = Новый Рефлектор;
ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Сценарий, Истина);
юТест.ПроверитьРавенство(ТаблицаСвойств.Количество(), 3, "Ожидали, что в таблице свойств будет 3 свойства");
юТест.ПроверитьРавенство(ТаблицаСвойств[0].Аннотации.Количество(), 1, "Ожидали, что Поле1 имеет 1 аннотацию");
ИмяАннотации = ТаблицаСвойств[0].Аннотации[0].Имя;
юТест.ПроверитьРавенство(ИмяАннотации, "Аннотация1", "Ожидали, что Поле1 имеет аннотацию Аннотация1");
юТест.ПроверитьРавенство(ТаблицаСвойств[1].Аннотации.Количество(), 1, "Ожидали, что Поле2 имеет 1 аннотацию");
ИмяАннотации = ТаблицаСвойств[1].Аннотации[0].Имя;
юТест.ПроверитьРавенство(ИмяАннотации, "Аннотация1", "Ожидали, что Поле2 имеет аннотацию Аннотация1");
юТест.ПроверитьРавенство(ТаблицаСвойств[2].Аннотации.Количество(), 0, "Ожидали, что Поле3 не имеет аннотаций");
КонецПроцедуры