-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathКонсольноеПриложениеТестированиеСлужебный.os
More file actions
330 lines (240 loc) · 15 KB
/
Copy pathКонсольноеПриложениеТестированиеСлужебный.os
File metadata and controls
330 lines (240 loc) · 15 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
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
#Использовать fs
#Использовать logos
#Использовать decorator
#Использовать fluent
#Использовать collectionos
#Использовать "../../../shared"
Функция СоздатьТочкуВхода(Детальки, МенеджерВременныхФайлов, Лог, ВыполняемаяКоманда) Экспорт
Если Детальки.Получить("КаталогиТестов").Количество() = 0
И Детальки.Получить("ФайлыТестов").Количество() = 0 Тогда
Детальки.Получить("КаталогиТестов").Добавить("./tests");
КонецЕсли;
ФайлыТестовРазвернутые = ТестированиеСлужебный.РазвернутьСписокТестовыхНаборов(
Детальки.Получить("КаталогиТестов"),
Детальки.Получить("ФайлыТестов"),
Детальки.Получить("ИскатьВПодкаталогах")
);
Импорты = Новый КартаСоответствие();
ТекущийКаталог = ТекущийКаталог();
Для каждого Тест Из ФайлыТестовРазвернутые Цикл
ЧтениеТекста = Новый ЧтениеТекста(Тест.ПолноеИмя);
УстановитьТекущийКаталог(Тест.Путь);
Строка = ЧтениеТекста.ПрочитатьСтроку();
Пока Строка <> Неопределено Цикл
Если СтрНачинаетсяС(Строка, "#Использовать ") Тогда
ПоПути = Ложь;
Импорт = СтрЗаменить(Строка, "#Использовать ", "");
Если СокрЛП(НРег(Импорт)) = "oneunit" Тогда
Строка = ЧтениеТекста.ПрочитатьСтроку();
Продолжить;
КонецЕсли;
Если СтрНайти(Импорт, """") > 0 Тогда
Импорт = ФС.НормализоватьПуть(СтрЗаменить(Импорт, """", ""));
ПоПути = Истина;
КонецЕсли;
Импорты.Вставить(Импорт, ПоПути);
КонецЕсли;
Строка = ЧтениеТекста.ПрочитатьСтроку();
КонецЦикла;
ЧтениеТекста.Закрыть();
УстановитьТекущийКаталог(ТекущийКаталог);
КонецЦикла;
Лог.Отладка("Импорты считанные из тестов (Импорт=ПодключаетсяПоПути): %1", Импорты);
КаталогПриложения = ФС.НормализоватьПуть(
ОбъединитьПути(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..", ".."), "core")
);
ТекстСценария = Новый ПостроительДекоратора()
.Импорт(Новый Импорт(КаталогПриложения).ТипПодключения(ТипыПодключенияБиблиотек.ПоПути))
.ШагИнициализации(
Новый ШагИнициализации(СтрШаблон("
|
| Поделка = Новый Поделка(Новый СоветДругогоМастера()
| .ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек(""%2""));
| Поделка.ЗапуститьПриложение();
|
| МенеджерТестирования = Поделка.НайтиЖелудь(""МенеджерТестирования"");
|
| %1
|",
ВыполняемаяКоманда,
МенеджерВременныхФайлов.БазовыйКаталог
))
)
.ТекстСценария();
Лог.Отладка("Текст сценария запуска тестирования: %1", ТекстСценария);
ИмяВременногоФайла = МенеджерВременныхФайлов.НовоеИмяФайла("os");
ЗаписьТекста = Новый ЗаписьТекста();
ЗаписьТекста.Открыть(ИмяВременногоФайла);
ЗаписьТекста.Записать(ТекстСценария);
ЗаписьТекста.Закрыть();
ТочкаВхода = Новый ПостроительДекоратора();
Импорты.ЗаменитьВсе(
"Импорт, ПоПути ->
| Результат = Новый Импорт("""" + Импорт + """");
| Если ПоПути Тогда
| Результат.ТипПодключения(ТипыПодключенияБиблиотек.ПоПути);
| КонецЕсли;
|
| Возврат Результат;
|"
);
Импорты.Значения()
.ДляКаждого("Импорт -> ТочкаВхода.Импорт(Импорт)", Новый Структура("ТочкаВхода", ТочкаВхода));
ТекстСценария = ТочкаВхода
.ШагИнициализации(
Новый ШагИнициализации(СтрШаблон("
|
| // После импортов из тестов загружаем ядро и запускаем тесты
| ЗагрузитьСценарий(""%1"");
|
|",
ИмяВременногоФайла
))
)
.ТекстСценария();
Лог.Отладка("Текст сценария точки входа для запуска тестирования: %1", ТекстСценария);
ИмяВременногоФайла = МенеджерВременныхФайлов.НовоеИмяФайла("os");
ЗаписьТекста = Новый ЗаписьТекста();
ЗаписьТекста.Открыть(ИмяВременногоФайла);
ЗаписьТекста.Записать(ТекстСценария);
ЗаписьТекста.Закрыть();
КонфигурационныйФайл(Детальки, МенеджерВременныхФайлов, Лог);
ЗаписатьДетальки(Детальки, МенеджерВременныхФайлов);
Возврат ИмяВременногоФайла;
КонецФункции
Функция ЗаписатьДетальки(Детальки, МенеджерВременныхФайлов)
ЗначенияДеталек = Новый Соответствие;
Для Каждого Деталька Из Детальки Цикл
Если ТипЗнч(Деталька.Значение) = Тип("Массив")
Или ТипЗнч(Деталька.Значение) = Тип("ФиксированныйМассив") Тогда
Значение = СтрСоединить(Деталька.Значение, ",");
Иначе
Значение = Деталька.Значение;
КонецЕсли;
ЗначенияДеталек.Вставить(Деталька.Ключ, Значение);
КонецЦикла;
ПутьКФайлуДеталек = ОбъединитьПути(МенеджерВременныхФайлов.БазовыйКаталог, "autumn-properties.json");
Настройки = Новый Соответствие(НастройкиЛогоса("core", "JSONРаскладкаСообщения"));
Настройки.Вставить("OneUnit", ЗначенияДеталек);
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(ПутьКФайлуДеталек);
ЗаписатьJSON(ЗаписьJSON, Настройки);
ЗаписьJSON.Закрыть();
Возврат ПутьКФайлуДеталек;
КонецФункции
Функция КонфигурационныйФайл(Детальки, МенеджерВременныхФайлов, Лог)
ПутиККонфигурационнымФайлам = Новый СписокМассив;
ПутиККонфигурационнымФайлам.Добавить(ТекущийКаталог());
Для каждого Путь Из Детальки.Получить("КаталогиТестов") Цикл
ПутиККонфигурационнымФайлам.Добавить(Путь);
КонецЦикла;
Для каждого Путь Из Детальки.Получить("ФайлыТестов") Цикл
ПутиККонфигурационнымФайлам.Добавить(Новый Файл(Путь).Путь);
КонецЦикла;
ДанныеКонфигурационногоФайла = ПутиККонфигурационнымФайлам.ПроцессорКоллекции()
.Различные()
.Обработать("Путь -> ОбъединитьПути(Путь, ""oscript.cfg"")")
.Фильтровать("Путь -> ФС.ФайлСуществует(Путь)")
.Обработать(Новый Действие(ЭтотОбъект, "ПрочитатьКонфигурационныйФайл"))
.Развернуть("ДанныеФайла -> ДанныеФайла.КлючиИЗначения().ПроцессорКоллекции()")
.Сократить(
"Результат, Настройка ->
|
| Результат.Слить(
| Настройка.Ключ,
| Настройка.Значение,
| ""
| |Старое, Новое ->
| | Если ТипЗнч(Старое) = Тип(""""МножествоСоответствие"""") Тогда
| | Старое.ДобавитьВсе(Новое);
| | КонецЕсли;
| |
| | Возврат Старое;
| |""
| );
|
| Возврат Результат;
|",
Новый КартаСоответствие()
);
ДанныеКонфигурационногоФайла.Слить(
"lib.additional",
Новый МножествоСоответствие(
Множества.ИзЭлементов(ПолучитьЗначениеСистемнойНастройки("lib.system"))
),
"Старое, Новое -> Старое.ДобавитьВсе(Новое); Возврат Старое;"
);
ДанныеКонфигурационногоФайла.ВычислитьЕслиПрисутствует(
"lib.additional",
"Ключ, Значение -> Значение.Удалить(СистемныйКаталог); Возврат Значение;",
Новый Структура("СистемныйКаталог", ДанныеКонфигурационногоФайла.Получить("lib.system").Иначе_(""))
);
Лог.Отладка("Данные конфигурационного файла: %1", ДанныеКонфигурационногоФайла);
ПутьККонфигурационномуФайлу = ОбъединитьПути(МенеджерВременныхФайлов.БазовыйКаталог, "oscript.cfg");
ЗаписьТекста = Новый ЗаписьТекста();
ЗаписьТекста.Открыть(ПутьККонфигурационномуФайлу);
ДанныеКонфигурационногоФайла.ДляКаждого(
"Ключ, Значение -> ЗаписьТекста.ЗаписатьСтроку(
| Ключ + ""="" +
| ?(ТипЗнч(Значение) = Тип(""МножествоСоответствие"") Или ТипЗнч(Значение) = Тип(""ФиксированноеМножество""),
| СтрСоединить(Значение.ВМассив(), "";""),
| Значение
| ));",
Новый Структура("ЗаписьТекста", ЗаписьТекста)
);
ЗаписьТекста.Закрыть();
Возврат ПутьККонфигурационномуФайлу;
КонецФункции
Функция ПрочитатьКонфигурационныйФайл(Путь) Экспорт
ТекущийКаталог = ТекущийКаталог();
Результат = Новый КартаСоответствие();
ЧтениеТекста = Новый ЧтениеТекста(Путь);
ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку();
Пока ПрочитаннаяСтрока <> Неопределено Цикл
ПрочитаннаяСтрока = СтрРазделить(ПрочитаннаяСтрока, "=");
Ключ = ПрочитаннаяСтрока[0];
УстановитьТекущийКаталог(Новый Файл(Путь).Путь);
Если СтрНачинаетсяС(Ключ, "lib.") Тогда
Если СтрНачинаетсяС(Ключ, "lib.additional") Тогда
Значение = ПроцессорыКоллекций.ИзКоллекции(СтрРазделить(ПрочитаннаяСтрока[1], ";", Ложь))
.Фильтровать("Путь -> ФС.КаталогСуществует(Путь)")
.Обработать("Путь -> ФС.НормализоватьПуть(Путь)")
.Получить("МножествоСоответствие");
Иначе
Значение = ?(ФС.КаталогСуществует(ПрочитаннаяСтрока[1]), ФС.НормализоватьПуть(ПрочитаннаяСтрока[1]), "");
КонецЕсли;
Иначе
Значение = ПрочитаннаяСтрока[1];
КонецЕсли;
УстановитьТекущийКаталог(ТекущийКаталог);
Если ЗначениеЗаполнено(Значение) Тогда
Результат.Вставить(Ключ, Значение);
КонецЕсли;
ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку();
КонецЦикла;
ЧтениеТекста.Закрыть();
Возврат Результат;
КонецФункции
Функция РежимВыводаЛога(Режим) Экспорт
Если НРег(Режим) = "none" Тогда
Возврат РежимыВыводаЛога.Ничего;
ИначеЕсли НРег(Режим) = "summary" Тогда
Возврат РежимыВыводаЛога.Статистика;
ИначеЕсли НРег(Режим) = "flat" Тогда
Возврат РежимыВыводаЛога.ПлоскийСписок;
ИначеЕсли НРег(Режим) = "tree" Тогда
Возврат РежимыВыводаЛога.Дерево;
Иначе
ВызватьИсключение "Неизвестный режим вывода: " + Режим;
КонецЕсли;
КонецФункции
Функция НастройкиЛогоса(Компонент, Раскладка) Экспорт
Возврат Соответствия.ИзЭлементов(
"logos.logger", Соответствия.ИзЭлементов(
"oscript.lib.oneunit." + Компонент, Соответствия.ИзЭлементов(
"level", "DEFAULT",
"classlayout", Раскладка
)
)
);
КонецФункции