Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Нативный JSON парсер + Clover #6

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Импорт тоже дропнуть мб?

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

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

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

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