Skip to content

Commit 2efbf2f

Browse files
committed
Finish 0.6.0
2 parents d75de0c + 33bc38e commit 2efbf2f

10 files changed

+640
-195
lines changed

README.md

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77
[![Build Status](https://travis-ci.org/khorevaa/oscript-coverage.svg?branch=master)](https://travis-ci.org/khorevaa/oscript-coverage)
88
[![Coverage Status](https://coveralls.io/repos/github/khorevaa/oscript-coverage/badge.svg?branch=master)](https://coveralls.io/github/khorevaa/oscript-coverage?branch=master)
99

10-
# Библиотека для конвертации в результата расчета покрытия тестами в различных форматах
11-
10+
# Библиотека для конвертации результата расчета покрытия тестами в различные форматы
1211

1312
## Возможности
1413

15-
- Конвертация в формат `GenericCoverage`, используемый SonarQube
16-
- Конвертация в формат `Clover`, используемый на сервера сборок `Bamboo`
17-
- Конвертация в формат `Cobertura` - популярный формат `python` и `java`
14+
* Конвертация в формат `GenericCoverage`, используемый SonarQube
15+
* Конвертация в формат `Clover`, используемый на серверe сборок `Bamboo`
16+
* Конвертация в формат `Cobertura` - популярный формат `python` и `java`
1817

1918
## Установка
2019

@@ -67,6 +66,40 @@ opm install coverage
6766
ЗавершитьРаботу(КодВозврата);
6867
```
6968

69+
## Использование совместно с `vscode`
70+
71+
* Установить расширение `coverage-gutters` для `vscode`
72+
* Установить путь к файлу покрытия (настройка `coverage-gutters.xmlname`): `coverage/coverage.xml`
73+
* Установить библиотеке `coverage` по инструкции
74+
* Создать файла `coverage.os` с содержанием
75+
```
76+
#Использовать coverage
77+
#Использовать 1commands
78+
79+
ФС.ОбеспечитьПустойКаталог("coverage");
80+
ПутьКСтат = "coverage/stat.json";
81+
82+
Команда = Новый Команда;
83+
Команда.УстановитьКоманду("oscript");
84+
Команда.ДобавитьПараметр("-encoding=utf-8");
85+
Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат));
86+
Команда.ДобавитьПараметр("tasks/test.os"); // ВАЖНО ФАЙЛ ДЛЯ ТЕСТОВ
87+
Команда.ПоказыватьВыводНемедленно(Истина);
88+
89+
КодВозврата = Команда.Исполнить();
90+
91+
Файл_Стат = Новый Файл(ПутьКСтат);
92+
93+
ПроцессорГенерации = Новый ГенераторОтчетаПокрытия();
94+
95+
ПроцессорГенерации.ОтносительныеПути()
96+
.ФайлСтатистики(Файл_Стат.ПолноеИмя)
97+
.Cobertura()
98+
.Сформировать();
99+
```
100+
* Запустить файл `coverage.os` для выполнения тестов и создания отчетов
101+
* Включить просмотр покрытия (`Display Coverage`) в контекстном меню открытого файла
102+
70103
## Публичный интерфейс
71104

72105
[Документация публичного интерфейса (в разработке)](docs/README.md)
@@ -77,4 +110,4 @@ opm install coverage
77110

78111
## Лицензия
79112

80-
Смотри файл `LICENSE`.
113+
Смотри файл `LICENSE`.

packagedef

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//
55

66
Описание.Имя("coverage")
7-
.Версия("0.5.0")
7+
.Версия("0.6.0")
88
.Автор("Khorev Aleksey")
99
.АдресАвтора("[email protected]")
1010
.Описание("Библиотека для конвертации результата расчета покрытия тестами в различные форматы")
@@ -19,5 +19,5 @@
1919
.ОпределяетКласс("ГенераторОтчетаПокрытия", "src/core/Классы/ГенераторОтчетаПокрытия.os")
2020
.ОпределяетКласс("ГенераторОтчетаGenericCoverage", "src/core/Классы/ГенераторОтчетаGenericCoverage.os")
2121
.ОпределяетКласс("ГенераторОтчетаClover", "src/core/Классы/ГенераторОтчетаClover.os")
22-
.ОпределяетКласс("ГенераторОтчетаCovertura", "src/core/Классы/ГенераторОтчетаCovertura.os")
22+
.ОпределяетКласс("ГенераторОтчетаCobertura", "src/core/Классы/ГенераторОтчетаCobertura.os")
2323
;

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

0 commit comments

Comments
 (0)