Skip to content

Commit 558e7a7

Browse files
authored
Merge pull request #2 from khorevaa/feature/path-for-stats
fix: #1 Возможность загрузки статистики из нескольких файлов
2 parents 6353c14 + da4c759 commit 558e7a7

8 files changed

+599
-187
lines changed

src/core/Классы/ГенераторОтчетаClover.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
//
1212
Процедура Сформировать(Знач ДанныеСтатистикиПокрытия, Знач ПутьКОтчетуClover) Экспорт
1313

14+
Возврат;
15+
1416
ДанныеПокрытия = ДанныеСтатистикиПокрытия;
1517

1618
ТекущаяЗаписьXML = Новый ЗаписьXML;

src/core/Классы/ГенераторОтчетаCobertura.os

Lines changed: 108 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
Перем ТекущаяЗаписьXML;
22
Перем ДатаГенерации;
3-
Перем ИмяПроекта;
43
Перем ПутьКИсходникам;
4+
Перем ТаблицаСтатистикиПокрытия;
5+
Перем ТаблицаПакетов;
6+
Перем ТаблицаДанныхПоКлассам;
7+
Перем ТаблицаДанныхПоМетодамКлассов;
58

69
// Выполняет формирование отчета
710
//
811
// Параметры:
9-
// ДанныеСтатистикиПокрытия - Соответствие - Прочитанные данные статистики OScript
12+
// ВходящаяТаблицаСтатистикиПокрытия - ТаблицаЗначений - Прочитанные данные статистики OScript
1013
// ПутьКОтчету - Строка - Путь к файлу отчета
1114
//
12-
Процедура Сформировать(Знач ДанныеСтатистикиПокрытия, Знач ПутьКОтчету) Экспорт
15+
Процедура Сформировать(Знач ВходящаяТаблицаСтатистикиПокрытия, Знач ПутьКОтчету) Экспорт
1316

14-
ДанныеПокрытия = ДанныеСтатистикиПокрытия;
17+
ТаблицаСтатистикиПокрытия = ВходящаяТаблицаСтатистикиПокрытия;
1518

1619
ТекущаяЗаписьXML = Новый ЗаписьXML;
1720
ТекущаяЗаписьXML.ОткрытьФайл(ПутьКОтчету);
@@ -38,100 +41,146 @@
3841

3942
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("packages");
4043

41-
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("package");
44+
ТаблицаПакетов = ТаблицаСтатистикиПокрытия.Скопировать();
45+
ТаблицаПакетов.Свернуть("Пакет", "Покрыто, НеПокрыто");
4246

43-
ТекущаяЗаписьXML.ЗаписатьАтрибут("name", ".");
44-
ТекущаяЗаписьXML.ЗаписатьАтрибут("complexity", "");
45-
ТекущаяЗаписьXML.ЗаписатьАтрибут("branch-rate", "");
46-
ТекущаяЗаписьXML.ЗаписатьАтрибут("line-rate", "");
47+
РассчитатьПроцентПокрытияПоТаблице(ТаблицаПакетов, "Пакет");
4748

48-
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("classes");
49+
ТаблицаДанныхПоКлассам = ТаблицаСтатистикиПокрытия.Скопировать();
50+
ТаблицаДанныхПоКлассам.Свернуть("Пакет, ПутьКФайлу, ИмяКласса", "Покрыто, НеПокрыто");
51+
52+
РассчитатьПроцентПокрытияПоТаблице(ТаблицаДанныхПоКлассам, "Пакет, ПутьКФайлу, ИмяКласса");
4953

50-
ВсегоФайловВПакете = 0;
54+
ТаблицаДанныхПоМетодамКлассов = ТаблицаСтатистикиПокрытия.Скопировать();
55+
ТаблицаДанныхПоМетодамКлассов.Свернуть("Пакет, ПутьКФайлу, ИмяКласса, ИмяМетода", "Покрыто, НеПокрыто");
56+
57+
РассчитатьПроцентПокрытияПоТаблице(ТаблицаДанныхПоМетодамКлассов, "Пакет, ПутьКФайлу, ИмяКласса, ИмяМетода");
5158

52-
Для Каждого Файл Из ДанныеПокрытия Цикл
59+
ЗаписатьДанныеПакетов();
5360

54-
ДанныеФайла = Файл.Значение;
61+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // packages
5562

56-
ПутьКФайлу = ДанныеФайла.Получить("#path");
63+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // coverage
5764

58-
ВсегоФайловВПакете = ВсегоФайловВПакете + 1;
65+
ТекущаяЗаписьXML.Закрыть();
5966

60-
ФайлПокрытия = Новый Файл(ПутьКФайлу);
61-
ИмяФайла = ФайлПокрытия.Имя;
67+
КонецПроцедуры
6268

63-
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("class");
64-
ТекущаяЗаписьXML.ЗаписатьАтрибут("name", ИмяФайла);
65-
ТекущаяЗаписьXML.ЗаписатьАтрибут("filename", ПутьКФайлу);
66-
ТекущаяЗаписьXML.ЗаписатьАтрибут("complexity", "");
67-
ТекущаяЗаписьXML.ЗаписатьАтрибут("branch-rate", "");
68-
ТекущаяЗаписьXML.ЗаписатьАтрибут("line-rate", "");
69-
ТекущаяЗаписьXML.ЗаписатьАтрибут("condition-coverage", "100%");
69+
Процедура РассчитатьПроцентПокрытияПоТаблице(ТаблицаРасчета, Знач НаборРазрезовРасчета)
7070

71-
ВсегоЭлементов = 0;
72-
ВсегоПокрытоЭлементов = 0;
71+
ТаблицаРасчета.Колонки.Добавить("ПроцентПокрытияСтрок");
72+
// ПроцентПокрытияСтрок = (СтрокаПакета.Покрыто / (СтрокаПакета.Покрыто + СтрокаПакета.НеПокрыто))*100;
73+
// TODO: Реализовать расчет процентов
74+
КонецПроцедуры
7375

74-
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("methods");
75-
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // sources
7676

77-
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("lines");
77+
Процедура ЗаписатьДанныеПакетов()
7878

79-
Для Каждого КлючИЗначение Из ДанныеФайла Цикл
79+
Для каждого СтрокаПакета Из ТаблицаПакетов Цикл
80+
81+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("package");
82+
ТекущаяЗаписьXML.ЗаписатьАтрибут("name", СтрокаПакета.Пакет);
83+
ТекущаяЗаписьXML.ЗаписатьАтрибут("complexity", "");
84+
ТекущаяЗаписьXML.ЗаписатьАтрибут("branch-rate", "");
85+
ТекущаяЗаписьXML.ЗаписатьАтрибут("line-rate", Строка(СтрокаПакета.ПроцентПокрытияСтрок));
86+
87+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("classes");
8088

81-
ИмяМетода = КлючИЗначение.Ключ;
89+
ЗаписатьДанныеКлассов(СтрокаПакета.Пакет);
8290

83-
Если ИмяМетода = "#path" Тогда
84-
Продолжить;
85-
КонецЕсли;
91+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // classes
92+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // package
8693

87-
ДанныеПроцедуры = КлючИЗначение.Значение;
88-
ВсегоЭлементовМетода = 0;
94+
КонецЦикла;
8995

90-
ПокрытыхСтрокВМетоде = 0;
96+
КонецПроцедуры
9197

92-
Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл
98+
Процедура ЗаписатьДанныеКлассов(ИмяПакета)
99+
100+
Отбор = Новый Структура("Пакет", ИмяПакета);
101+
МассивСтрок = ТаблицаДанныхПоКлассам.НайтиСтроки(Отбор);
93102

94-
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("line");
103+
Для каждого СтрокаКласса Из МассивСтрок Цикл
104+
105+
// ПроцентПокрытияСтрок = (СтрокаПакета.Покрыто / (СтрокаПакета.Покрыто + СтрокаПакета.НеПокрыто))*100;
106+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("class");
107+
ТекущаяЗаписьXML.ЗаписатьАтрибут("name", СтрокаКласса.ИмяКласса);
108+
ТекущаяЗаписьXML.ЗаписатьАтрибут("filename", СтрокаКласса.ПутьКФайлу);
109+
ТекущаяЗаписьXML.ЗаписатьАтрибут("complexity", "");
110+
ТекущаяЗаписьXML.ЗаписатьАтрибут("branch-rate", "");
111+
ТекущаяЗаписьXML.ЗаписатьАтрибут("line-rate", Строка(СтрокаКласса.ПроцентПокрытияСтрок));
112+
113+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("methods");
95114

96-
ТекущаяЗаписьXML.ЗаписатьАтрибут("number", ДанныеСтроки.Ключ);
97-
ТекущаяЗаписьXML.ЗаписатьАтрибут("branch", "false");
98-
ТекущаяЗаписьXML.ЗаписатьАтрибут("condition-coverage", "100%");
115+
ЗаписатьДанныеМетодов(СтрокаКласса.Пакет, СтрокаКласса.ИмяКласса);
99116

100-
Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0;
101-
ТекущаяЗаписьXML.ЗаписатьАтрибут("hits", ДанныеСтроки.Значение.Получить("count"));
117+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // methods
102118

103-
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover
119+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("lines");
104120

105-
Если Покрыто Тогда
106-
ПокрытыхСтрокВМетоде = ПокрытыхСтрокВМетоде + 1;
107-
КонецЕсли;
121+
ЗаписатьДанныеСтрок(СтрокаКласса.Пакет, СтрокаКласса.ИмяКласса);
108122

109-
ВсегоЭлементовМетода = ВсегоЭлементовМетода + 1;
123+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // lines
110124

111-
КонецЦикла;
125+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // class
112126

127+
КонецЦикла;
113128

114-
ВсегоЭлементов = ВсегоЭлементов + ВсегоЭлементовМетода;
129+
КонецПроцедуры
115130

116-
ВсегоПокрытоЭлементов = ВсегоПокрытоЭлементов + ПокрытыхСтрокВМетоде;
131+
Процедура ЗаписатьДанныеМетодов(Знач ИмяПакета, Знач ИмяКласса)
132+
133+
Отбор = Новый Структура("Пакет, ИмяКласса", ИмяПакета, ИмяКласса);
134+
МассивСтрок = ТаблицаДанныхПоМетодамКлассов.НайтиСтроки(Отбор);
135+
136+
Для каждого СтрокаМетода Из МассивСтрок Цикл
137+
138+
Если СтрокаМетода.ИмяМетода = "$entry" Тогда
139+
Продолжить;
140+
КонецЕсли;
141+
// ПроцентПокрытияСтрок = (СтрокаПакета.Покрыто / (СтрокаПакета.Покрыто + СтрокаПакета.НеПокрыто))*100;
142+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("method");
143+
ТекущаяЗаписьXML.ЗаписатьАтрибут("name", СтрокаМетода.ИмяМетода);
144+
ТекущаяЗаписьXML.ЗаписатьАтрибут("filename", СтрокаМетода.ПутьКФайлу);
145+
ТекущаяЗаписьXML.ЗаписатьАтрибут("complexity", "");
146+
ТекущаяЗаписьXML.ЗаписатьАтрибут("branch-rate", "");
147+
ТекущаяЗаписьXML.ЗаписатьАтрибут("line-rate", Строка(СтрокаМетода.ПроцентПокрытияСтрок));
148+
149+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("lines");
117150

118-
КонецЦикла;
151+
ЗаписатьДанныеСтрок(СтрокаМетода.Пакет, СтрокаМетода.ИмяКласса, СтрокаМетода.ИмяМетода);
119152

120153
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // lines
121-
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // class
122154

155+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // method
123156

124157
КонецЦикла;
125158

126-
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // classes
159+
КонецПроцедуры
127160

128-
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // package
161+
Процедура ЗаписатьДанныеСтрок(Знач ИмяПакета, Знач ИмяКласса, Знач ИмяМетода = Неопределено)
162+
163+
Отбор = Новый Структура("Пакет, ИмяКласса", ИмяПакета, ИмяКласса);
164+
165+
Если ЗначениеЗаполнено(ИмяМетода) Тогда
166+
Отбор.Вставить("ИмяМетода", ИмяМетода);
167+
КонецЕсли;
129168

130-
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // packages
169+
МассивСтрок = ТаблицаСтатистикиПокрытия.НайтиСтроки(Отбор);
131170

132-
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // coverage
171+
Для каждого СтрокаМодуля Из МассивСтрок Цикл
172+
173+
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("line");
133174

134-
ТекущаяЗаписьXML.Закрыть();
175+
ТекущаяЗаписьXML.ЗаписатьАтрибут("number", СтрокаМодуля.СтрокаМодуля);
176+
ТекущаяЗаписьXML.ЗаписатьАтрибут("branch", "false");
177+
ТекущаяЗаписьXML.ЗаписатьАтрибут("condition-coverage", "100%");
178+
179+
ТекущаяЗаписьXML.ЗаписатьАтрибут("hits", СтрокаМодуля.КоличествоВызовов);
180+
181+
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // line
182+
183+
КонецЦикла;
135184

136185
КонецПроцедуры
137186

src/core/Классы/ГенераторОтчетаGenericCoverage.os

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,51 @@
22
// Выполняет формирование отчета
33
//
44
// Параметры:
5-
// ДанныеСтатистикиПокрытия - Соответствие - Прочитанные данные статистики OScript
5+
// ТаблицаСтатистикиПокрытия - ТаблицаЗначений - Прочитанные данные статистики OScript
66
// ПутьКВыходномуФайлу - Строка - Путь к файлу отчета
77
//
8-
Процедура Сформировать(Знач ДанныеСтатистикиПокрытия, ПутьКВыходномуФайлу) Экспорт
8+
Процедура Сформировать(Знач ТаблицаСтатистикиПокрытия, Знач ПутьКВыходномуФайлу) Экспорт
99

10-
ДанныеПокрытия = ДанныеСтатистикиПокрытия;
10+
ТаблицаСтатистикиПокрытия.Сортировать("ПутьКФайлу, ИмяМетода, СтрокаМодуля");
1111

1212
ЗаписьXML = Новый ЗаписьXML;
1313
ЗаписьXML.ОткрытьФайл(ПутьКВыходномуФайлу);
1414
ЗаписьXML.ЗаписатьОбъявлениеXML();
1515
ЗаписьXML.ЗаписатьНачалоЭлемента("coverage");
1616
ЗаписьXML.ЗаписатьАтрибут("version", "1");
1717

18-
Для Каждого Файл Из ДанныеПокрытия Цикл
19-
20-
ДанныеФайла = Файл.Значение;
21-
22-
ПутьКФайлу = ДанныеФайла.Получить("#path");
18+
ТекущийПутьКФайлу = "";
2319

24-
ЗаписьXML.ЗаписатьНачалоЭлемента("file");
25-
ЗаписьXML.ЗаписатьАтрибут("path", ПутьКФайлу);
20+
Для Каждого СтрокаПокрытия Из ТаблицаСтатистикиПокрытия Цикл
2621

27-
Для Каждого КлючИЗначение Из ДанныеФайла Цикл
22+
ПутьКФайлу = СтрокаПокрытия.ПутьКФайлу;
23+
24+
Если Не ПутьКФайлу = ТекущийПутьКФайлу Тогда
2825

29-
Если КлючИЗначение.Ключ = "#path" Тогда
30-
Продолжить;
26+
Если Не ПустаяСтрока(ТекущийПутьКФайлу) Тогда
27+
ЗаписьXML.ЗаписатьКонецЭлемента();
3128
КонецЕсли;
29+
30+
ЗаписьXML.ЗаписатьНачалоЭлемента("file");
31+
ЗаписьXML.ЗаписатьАтрибут("path", ПутьКФайлу);
32+
ТекущийПутьКФайлу = ПутьКФайлу;
3233

33-
ДанныеПроцедуры = КлючИЗначение.Значение;
34-
Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл
35-
36-
ЗаписьXML.ЗаписатьНачалоЭлемента("lineToCover");
37-
38-
ЗаписьXML.ЗаписатьАтрибут("lineNumber", ДанныеСтроки.Ключ);
39-
Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0;
40-
ЗаписьXML.ЗаписатьАтрибут("covered", Формат(Покрыто, "БИ=true; БЛ=false"));
41-
42-
ЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover
43-
КонецЦикла;
44-
КонецЦикла;
34+
КонецЕсли;
35+
36+
ЗаписьXML.ЗаписатьНачалоЭлемента("lineToCover");
4537

46-
ЗаписьXML.ЗаписатьКонецЭлемента(); // file
38+
ЗаписьXML.ЗаписатьАтрибут("lineNumber", СтрокаПокрытия.СтрокаМодуля);
39+
Покрыто = СтрокаПокрытия.КоличествоВызовов > 0;
40+
ЗаписьXML.ЗаписатьАтрибут("covered", Формат(Покрыто, "БИ=true; БЛ=false"));
41+
42+
ЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover
4743

4844
КонецЦикла;
4945

46+
Если Не ПустаяСтрока(ТекущийПутьКФайлу) Тогда
47+
ЗаписьXML.ЗаписатьКонецЭлемента(); // file
48+
КонецЕсли;
49+
5050
ЗаписьXML.ЗаписатьКонецЭлемента(); // coverage
5151
ЗаписьXML.Закрыть();
5252

0 commit comments

Comments
 (0)