Skip to content

Commit 7eaa9fb

Browse files
committed
Наброски изменения механизма
1 parent 6353c14 commit 7eaa9fb

File tree

1 file changed

+166
-11
lines changed

1 file changed

+166
-11
lines changed

src/core/Классы/ГенераторОтчетаПокрытия.os

Lines changed: 166 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99
Перем ГенерируемыеОтчеты; // Структура
1010

1111
Перем ПутиФайловВОтносительные;
12-
1312
Перем Лог;
13+
Перем ШаблонИмениФайлаСтатистики; // Строка
14+
Перем МассивПутейЗамены; // Соответствие
15+
16+
Перем ТаблицаСтатистикиПокрытия; // ТаблицаЗначение
1417

1518
// Устанавливает путь к файлу статистик
1619
//
@@ -28,6 +31,22 @@
2831

2932
КонецФункции
3033

34+
// Устанавливает путь к файлу статистик
35+
//
36+
// Параметры:
37+
// ПутьКфайлу - Строка - Путь к файлу статистики (по умолчанию stat.json)
38+
//
39+
// Возвращаемое значение:
40+
// Объект.ГенераторОтчетаПокрытия - экземпляр этого объекта ГенераторОтчетаПокрытия
41+
//
42+
Функция ИмяФайлаСтатистики(Знач ПутьКфайлу = "stat.json") Экспорт
43+
44+
ПутьКФайлуСтатистики = ПутьКфайлу;
45+
46+
Возврат ЭтотОбъект;
47+
48+
КонецФункции
49+
3150
// Устанавливает выходной-рабочий каталог
3251
//
3352
// Параметры:
@@ -89,6 +108,23 @@
89108

90109
КонецФункции
91110

111+
// Добавляет путь к замене
112+
//
113+
// Параметры:
114+
// ЗаменяемыйПуть - Строка - путь к замене
115+
// НовыйПуть - Строка - новый путь
116+
//
117+
// Возвращаемое значение:
118+
// Объект.ГенераторОтчетаПокрытия - экземпляр этого объекта ГенераторОтчетаПокрытия
119+
//
120+
Функция ЗаменитьПуть(Знач ЗаменяемыйПуть, Знач НовыйПуть) Экспорт
121+
122+
МассивПутейЗамены.Вставить(ЗаменяемыйПуть, НовыйПуть);
123+
124+
Возврат ЭтотОбъект;
125+
126+
КонецФункции
127+
92128
// Добавляет отчет в формате Clover для генерации
93129
//
94130
// Параметры:
@@ -142,52 +178,169 @@
142178
//
143179
Процедура Сформировать() Экспорт
144180

145-
ПроверитьФайлСтатистики();
181+
НоваяТаблицаСтатистикиПокрытия();
146182

147183
ПрочитатьДанныеСтатистики();
148184

185+
ОбработатьТаблицуСтатистикиПокрытия();
186+
149187
СформироватьОтчетClover();
150188
СформироватьОтчетGenericCoverage();
151-
152189
СформироватьОтчетCobertura();
153190

154191
КонецПроцедуры
155192

156193
Процедура ПрочитатьДанныеСтатистики()
157194

158-
ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуСтатистики, КодировкаТекста.UTF8);
195+
МассивФайловСтатистики = НайтиФайлы(ПутьКРабочемуКаталогу, ШаблонИмениФайлаСтатистики);
196+
197+
Для Каждого ФайлСтатистики Из МассивФайловСтатистики Цикл
198+
199+
ПрочитатьФайлСтатистики(ФайлСтатистики);
200+
201+
КонецЦикла;
202+
203+
Если ЗначениеЗаполнено(ПутьКФайлуСтатистики) Тогда
204+
205+
ФайлСтатистики = Новый Файл(ПутьКФайлуСтатистики);
206+
207+
Если ФайлСтатистики.Существует() Тогда
208+
ПрочитатьФайлСтатистики(ФайлСтатистики);
209+
КонецЕсли;
210+
211+
КонецЕсли;
212+
213+
КонецПроцедуры
214+
215+
Функция ПрочитатьФайлСтатистики(Знач ФайлСтатистики)
216+
217+
ЧтениеТекста = Новый ЧтениеТекста(ФайлСтатистики.ПолноеИмя, КодировкаТекста.UTF8);
159218

160219
СтрокаJSON = ЧтениеТекста.Прочитать();
161220
ЧтениеТекста.Закрыть();
162221

163222
Парсер = Новый ПарсерJSON();
164223

165224
ДанныеФайлаСтатистики = Парсер.ПрочитатьJSON(СтрокаJSON);
166-
ДанныеСтатистикиПокрытия = Новый Соответствие;
167-
225+
168226
Для Каждого Файл Из ДанныеФайлаСтатистики Цикл
169227

170228
ДанныеФайла = Файл.Значение;
171229

172230
ПутьКФайлу = ДанныеФайла.Получить("#path");
173231

232+
ВыполнитьЗаменуПутей(ПутьКФайлу);
233+
174234
Если НЕ ЭтоФайлПроекта(ПутьКФайлу) Тогда
175235
Продолжить;
176236
КонецЕсли;
177237

178-
ФайлПокрытия = Новый Файл(ПутьКФайлу);
179-
ПолноеИмя = ФайлПокрытия.ПолноеИмя;
238+
ДобавитьВДанныеСтатистикиПокрытия(ПутьКФайлу, ДанныеФайла);
239+
240+
КонецЦикла;
241+
242+
СвернутьТаблицуСтатистикиПокрытия();
243+
244+
КонецФункции
245+
246+
Процедура ОбработатьТаблицуСтатистикиПокрытия()
247+
248+
Если НЕ ПутиФайловВОтносительные Тогда
249+
Возврат;
250+
КонецЕсли;
251+
252+
СтрокаЗамены = СтрШаблон("%1%2", ПутьККаталогуПроекта, ПолучитьРазделительПути());
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+
ИмяМетода = ДанныеМетодов.Ключ;
180286

181-
Если ПутиФайловВОтносительные Тогда
182-
ДанныеФайла.Вставить("#path", СтрЗаменить(ПолноеИмя, ПутьККаталогуПроекта + "/", ""));
287+
Если ИмяМетода = "#path" Тогда
288+
Продолжить;
183289
КонецЕсли;
290+
291+
СтрокиМетода = ДанныеМетодов.Значение;
292+
293+
Для каждого ДанныеПокрытияСтроки Из СтрокиМетода Цикл
294+
295+
СтрокаМодуля = ДанныеПокрытияСтроки.Ключ;
296+
КоличествоВызовов = ДанныеФайла.Получить("count");
297+
ВремяВыполнения = ДанныеФайла.Получить("time");
298+
299+
ДобавитьВТаблицуСтатистики(ПутьКфайлу,
300+
ИмяМетода,
301+
СтрокаМодуля,
302+
КоличествоВызовов,
303+
ВремяВыполнения);
184304

185-
ДанныеСтатистикиПокрытия.Вставить(Файл.Ключ, ДанныеФайла);
305+
КонецЦикла;
186306

187307
КонецЦикла;
188308

189309
КонецПроцедуры
190310

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+
191344
Функция ЭтоФайлПроекта(Знач ПутьКФайлу)
192345

193346
ФайлПодходит = СтрНачинаетсяС(ПутьКФайлу, ПутьККаталогуИсходников);
@@ -312,6 +465,8 @@
312465

313466
ГенерируемыеОтчеты = Новый Структура;
314467

468+
МассивПутейЗамены = Новый Массив;
469+
315470
ПутьКФайлуСтатистикиПоУмолчанию();
316471

317472
КонецПроцедуры

0 commit comments

Comments
 (0)