Skip to content

Commit

Permalink
Merge pull request #6 from sfaqer/feature/nativeJson&Clover
Browse files Browse the repository at this point in the history
Нативный JSON парсер + Clover
  • Loading branch information
nixel2007 authored Jan 5, 2025
2 parents 2d22228 + 42f6e6f commit e1315a1
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 75 deletions.
4 changes: 2 additions & 2 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
//

Описание.Имя("coverage")
.Версия("0.6.1")
.Версия("0.7.0")
.Автор("Khorev Aleksey")
.АдресАвтора("[email protected]")
.Описание("Библиотека для конвертации результата расчета покрытия тестами в различные форматы")
.ВерсияСреды("1.0.18")
.ВерсияСреды("1.9.2")
.ВключитьФайл("src")
//.ВключитьФайл("docs")
//.ВключитьФайл("tests")
Expand Down
105 changes: 40 additions & 65 deletions src/core/Классы/ГенераторОтчетаClover.os
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
// ПутьКОтчетуClover - Строка - Путь к файлу отчета
//
Процедура Сформировать(Знач ДанныеСтатистикиПокрытия, Знач ПутьКОтчетуClover) Экспорт

Возврат;

ДанныеПокрытия = ДанныеСтатистикиПокрытия;

Expand All @@ -31,11 +29,11 @@
ВсегоФайловВПакете = 0;
МетрикаПакета = Новый Структура;

Для Каждого Файл Из ДанныеПокрытия Цикл

ДанныеФайла = Файл.Значение;
Файлы = ДанныеПокрытия.Скопировать(, "ПутьКФайлу");
Файлы.Свернуть("ПутьКФайлу");
Файлы = Файлы.ВыгрузитьКолонку("ПутьКФайлу");

ПутьКФайлу = ДанныеФайла.Получить("#path");
Для Каждого ПутьКФайлу Из Файлы Цикл

ВсегоФайловВПакете = ВсегоФайловВПакете + 1;

Expand All @@ -45,88 +43,65 @@
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("file");
ТекущаяЗаписьXML.ЗаписатьАтрибут("name", ИмяФайла);
ТекущаяЗаписьXML.ЗаписатьАтрибут("path", КаталогФайла);
КоличествоМетодов = 0;

КоличествоМетодов = 0;
КоличествоПокрытыхМетодов = 0;
ОбщееВремяВыполнения = 0;
ВсегоСтрокВФайле = 0;
ВсегоЭлементов = 0;
ВсегоПокрытоЭлементов = 0;

Для Каждого КлючИЗначение Из ДанныеФайла Цикл

ИмяМетода = КлючИЗначение.Ключ;

Если ИмяМетода = "#path" Тогда
Продолжить;
КонецЕсли;

КоличествоМетодов = КоличествоМетодов + 1;
ОбщееВремяВыполнения = 0;
ВсегоСтрокВФайле = 0;
ВсегоЭлементов = 0;
ВсегоПокрытоЭлементов = 0;

ПокрытыхСтрокВМетоде = 0;
ДанныеФайла = ДанныеПокрытия.НайтиСтроки(Новый Структура("ПутьКФайлу", ПутьКФайлу));

ДанныеПроцедуры = КлючИЗначение.Значение;
ВсегоЭлементовМетода = 0;
ЗаписатьМетод = Не ИмяМетода = "$entry";
ТекущийМетод = Неопределено;

Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл

ТипСтроки = "stmt";
Если ЗаписатьМетод Тогда
ТипСтроки = "method";
ЗаписатьМетод = Ложь;
КонецЕсли;
Для Каждого СтрокаДанныхФайла Из ДанныеФайла Цикл

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

ТекущаяЗаписьXML.ЗаписатьАтрибут("num", ДанныеСтроки.Ключ);
ТекущаяЗаписьXML.ЗаписатьАтрибут("type", ТипСтроки);

Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0;
ТекущаяЗаписьXML.ЗаписатьАтрибут("count", ДанныеСтроки.Значение.Получить("count"));

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

Если Покрыто Тогда
ПокрытыхСтрокВМетоде = ПокрытыхСтрокВМетоде + 1;
КонецЕсли;
ИмяМетода = СтрокаДанныхФайла.ИмяМетода;

ВсегоЭлементовМетода = ВсегоЭлементовМетода + 1;
Если ТекущийМетод <> ИмяМетода Тогда
КоличествоМетодов = КоличествоМетодов + 1;
ТекущийМетод = ИмяМетода;
КонецЕсли;

ОбщееВремяВыполнения = ОбщееВремяВыполнения + ДанныеСтроки.Значение.Получить("time");
ТипСтроки = ?(ИмяМетода = "$entry", "stmt", "method");

ВсегоСтрокВФайле = Макс(ВсегоСтрокВФайле, Число(ДанныеСтроки.Ключ));
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("line");

КонецЦикла;
ТекущаяЗаписьXML.ЗаписатьАтрибут("num", СтрокаДанныхФайла.СтрокаМодуля);
ТекущаяЗаписьXML.ЗаписатьАтрибут("type", ТипСтроки);
ТекущаяЗаписьXML.ЗаписатьАтрибут("count", СтрокаДанныхФайла.КоличествоВызовов);

МетодПокрытПолностью = ДанныеПроцедуры.Количество() = ПокрытыхСтрокВМетоде;
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover

Если МетодПокрытПолностью Тогда
КоличествоПокрытыхМетодов = КоличествоПокрытыхМетодов + 1;
КонецЕсли;
ОбщееВремяВыполнения = ОбщееВремяВыполнения + СтрокаДанныхФайла.ВремяВыполнения;

ВсегоЭлементов = ВсегоЭлементов + ВсегоЭлементовМетода;

ВсегоПокрытоЭлементов = ВсегоПокрытоЭлементов + ПокрытыхСтрокВМетоде;
ВсегоСтрокВФайле = Макс(ВсегоСтрокВФайле, СтрокаДанныхФайла.СтрокаМодуля);

ВсегоЭлементов = ВсегоЭлементов + 1;
ВсегоПокрытоЭлементов = ВсегоПокрытоЭлементов + СтрокаДанныхФайла.Покрыто;

КонецЦикла;

ИмяКласса = ФайлПокрытия.ИмяБезРасширения;
ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("class");
ТекущаяЗаписьXML.ЗаписатьАтрибут("name", ИмяКласса);
МетрикаКласса = ПодготовитьМетрикиКласса(ВсегоЭлементов,
ВсегоПокрытоЭлементов,
КоличествоМетодов,
КоличествоПокрытыхМетодов,
ОбщееВремяВыполнения);
МетрикаКласса = ПодготовитьМетрикиКласса(
ВсегоЭлементов,
ВсегоПокрытоЭлементов,
КоличествоМетодов,
КоличествоПокрытыхМетодов,
ОбщееВремяВыполнения
);

ЗаписатьЭлементXML("metrics", МетрикаКласса);
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // file

ПолучитьМетрикуФайла(ВсегоСтрокВФайле, МетрикаКласса);

ЗаписатьЭлементXML("metrics", МетрикаКласса);
ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // file

ДобавитьМетрикуВМетрикуПакета(МетрикаПакета, МетрикаКласса);

КонецЦикла;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,16 +226,12 @@
КонецПроцедуры

Функция ПрочитатьФайлСтатистики(Знач ФайлСтатистики)

ЧтениеТекста = Новый ЧтениеТекста(ФайлСтатистики.ПолноеИмя, КодировкаТекста.UTF8);

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

Парсер = Новый ПарсерJSON();
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ФайлСтатистики.ПолноеИмя);
ДанныеФайлаСтатистики = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();

ДанныеФайлаСтатистики = Парсер.ПрочитатьJSON(СтрокаJSON);

Для Каждого Файл Из ДанныеФайлаСтатистики Цикл

ДанныеФайла = Файл.Значение;
Expand Down

0 comments on commit e1315a1

Please sign in to comment.