| 
1 | 1 | Перем ТекущаяЗаписьXML;  | 
2 | 2 | Перем ДатаГенерации;  | 
3 |  | -Перем ИмяПроекта;  | 
4 | 3 | Перем ПутьКИсходникам;  | 
 | 4 | +Перем ТаблицаСтатистикиПокрытия;  | 
 | 5 | +Перем ТаблицаПакетов;  | 
 | 6 | +Перем ТаблицаДанныхПоКлассам;  | 
 | 7 | +Перем ТаблицаДанныхПоМетодамКлассов;  | 
5 | 8 | 
 
  | 
6 | 9 | // Выполняет формирование отчета  | 
7 | 10 | //  | 
8 | 11 | // Параметры:  | 
9 |  | -//   ДанныеСтатистикиПокрытия - Соответствие - Прочитанные данные статистики OScript  | 
 | 12 | +//   ВходящаяТаблицаСтатистикиПокрытия - ТаблицаЗначений - Прочитанные данные статистики OScript  | 
10 | 13 | //   ПутьКОтчету - Строка - Путь к файлу отчета  | 
11 | 14 | //  | 
12 |  | -Процедура Сформировать(Знач ДанныеСтатистикиПокрытия, Знач ПутьКОтчету) Экспорт  | 
 | 15 | +Процедура Сформировать(Знач ВходящаяТаблицаСтатистикиПокрытия, Знач ПутьКОтчету) Экспорт  | 
13 | 16 | 
 
  | 
14 |  | -	ДанныеПокрытия = ДанныеСтатистикиПокрытия;  | 
 | 17 | +	ТаблицаСтатистикиПокрытия = ВходящаяТаблицаСтатистикиПокрытия;  | 
15 | 18 | 
 
  | 
16 | 19 | 	ТекущаяЗаписьXML = Новый ЗаписьXML;  | 
17 | 20 | 	ТекущаяЗаписьXML.ОткрытьФайл(ПутьКОтчету);  | 
 | 
38 | 41 | 
 
  | 
39 | 42 | 	ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("packages");  | 
40 | 43 | 
 
  | 
41 |  | -	ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("package");  | 
 | 44 | +	ТаблицаПакетов = ТаблицаСтатистикиПокрытия.Скопировать();  | 
 | 45 | +	ТаблицаПакетов.Свернуть("Пакет", "Покрыто, НеПокрыто");  | 
42 | 46 | 
 
  | 
43 |  | -	ТекущаяЗаписьXML.ЗаписатьАтрибут("name", ".");  | 
44 |  | -	ТекущаяЗаписьXML.ЗаписатьАтрибут("complexity", "");  | 
45 |  | -	ТекущаяЗаписьXML.ЗаписатьАтрибут("branch-rate", "");  | 
46 |  | -	ТекущаяЗаписьXML.ЗаписатьАтрибут("line-rate", "");  | 
 | 47 | +	РассчитатьПроцентПокрытияПоТаблице(ТаблицаПакетов, "Пакет");  | 
47 | 48 | 
 
  | 
48 |  | -	ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("classes");  | 
 | 49 | +	ТаблицаДанныхПоКлассам = ТаблицаСтатистикиПокрытия.Скопировать();  | 
 | 50 | +	ТаблицаДанныхПоКлассам.Свернуть("Пакет, ПутьКФайлу, ИмяКласса", "Покрыто, НеПокрыто");  | 
 | 51 | +	  | 
 | 52 | +	РассчитатьПроцентПокрытияПоТаблице(ТаблицаДанныхПоКлассам, "Пакет, ПутьКФайлу, ИмяКласса");  | 
49 | 53 | 
 
  | 
50 |  | -	ВсегоФайловВПакете = 0;  | 
 | 54 | +	ТаблицаДанныхПоМетодамКлассов = ТаблицаСтатистикиПокрытия.Скопировать();  | 
 | 55 | +	ТаблицаДанныхПоМетодамКлассов.Свернуть("Пакет, ПутьКФайлу, ИмяКласса, ИмяМетода", "Покрыто, НеПокрыто");  | 
 | 56 | +	  | 
 | 57 | +	РассчитатьПроцентПокрытияПоТаблице(ТаблицаДанныхПоМетодамКлассов, "Пакет, ПутьКФайлу, ИмяКласса, ИмяМетода");  | 
51 | 58 | 
 
  | 
52 |  | -	Для Каждого Файл Из ДанныеПокрытия Цикл  | 
 | 59 | +	ЗаписатьДанныеПакетов();  | 
53 | 60 | 
 
  | 
54 |  | -		ДанныеФайла = Файл.Значение;  | 
 | 61 | +	ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // packages  | 
55 | 62 | 
 
  | 
56 |  | -		ПутьКФайлу = ДанныеФайла.Получить("#path");  | 
 | 63 | +	ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // coverage  | 
57 | 64 | 
 
  | 
58 |  | -		ВсегоФайловВПакете = ВсегоФайловВПакете + 1;  | 
 | 65 | +	ТекущаяЗаписьXML.Закрыть();  | 
59 | 66 | 
 
  | 
60 |  | -		ФайлПокрытия = Новый Файл(ПутьКФайлу);  | 
61 |  | -		ИмяФайла = ФайлПокрытия.Имя;  | 
 | 67 | +КонецПроцедуры  | 
62 | 68 | 
 
  | 
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 | +Процедура РассчитатьПроцентПокрытияПоТаблице(ТаблицаРасчета, Знач НаборРазрезовРасчета)  | 
70 | 70 | 
 
  | 
71 |  | -		ВсегоЭлементов = 0;  | 
72 |  | -		ВсегоПокрытоЭлементов = 0;  | 
 | 71 | +	ТаблицаРасчета.Колонки.Добавить("ПроцентПокрытияСтрок");  | 
 | 72 | +	// ПроцентПокрытияСтрок = (СтрокаПакета.Покрыто / (СтрокаПакета.Покрыто + СтрокаПакета.НеПокрыто))*100;  | 
 | 73 | +	// TODO: Реализовать расчет процентов	  | 
 | 74 | +КонецПроцедуры  | 
73 | 75 | 
 
  | 
74 |  | -		ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("methods");  | 
75 |  | -		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // sources  | 
76 | 76 | 
 
  | 
77 |  | -		ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("lines");  | 
 | 77 | +Процедура ЗаписатьДанныеПакетов()  | 
78 | 78 | 
 
  | 
79 |  | -		Для Каждого КлючИЗначение Из ДанныеФайла Цикл  | 
 | 79 | +	Для каждого СтрокаПакета Из ТаблицаПакетов Цикл  | 
 | 80 | +		  | 
 | 81 | +		ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("package");  | 
 | 82 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("name", СтрокаПакета.Пакет);  | 
 | 83 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("complexity", "");  | 
 | 84 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("branch-rate", "");  | 
 | 85 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("line-rate", Строка(СтрокаПакета.ПроцентПокрытияСтрок));  | 
 | 86 | +		  | 
 | 87 | +		ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("classes");  | 
80 | 88 | 
 
  | 
81 |  | -			ИмяМетода = КлючИЗначение.Ключ;  | 
 | 89 | +		ЗаписатьДанныеКлассов(СтрокаПакета.Пакет);  | 
82 | 90 | 
 
  | 
83 |  | -			Если ИмяМетода = "#path" Тогда  | 
84 |  | -				Продолжить;  | 
85 |  | -			КонецЕсли;  | 
 | 91 | +		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // classes  | 
 | 92 | +		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // package  | 
86 | 93 | 
 
  | 
87 |  | -			ДанныеПроцедуры = КлючИЗначение.Значение;  | 
88 |  | -			ВсегоЭлементовМетода = 0;  | 
 | 94 | +	КонецЦикла;  | 
89 | 95 | 
 
  | 
90 |  | -			ПокрытыхСтрокВМетоде = 0;  | 
 | 96 | +КонецПроцедуры  | 
91 | 97 | 
 
  | 
92 |  | -			Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл  | 
 | 98 | +Процедура ЗаписатьДанныеКлассов(ИмяПакета)  | 
 | 99 | +	  | 
 | 100 | +	Отбор = Новый Структура("Пакет", ИмяПакета);  | 
 | 101 | +	МассивСтрок = ТаблицаДанныхПоКлассам.НайтиСтроки(Отбор);  | 
93 | 102 | 
 
  | 
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");  | 
95 | 114 | 
 
  | 
96 |  | -				ТекущаяЗаписьXML.ЗаписатьАтрибут("number", ДанныеСтроки.Ключ);  | 
97 |  | -				ТекущаяЗаписьXML.ЗаписатьАтрибут("branch", "false");  | 
98 |  | -				ТекущаяЗаписьXML.ЗаписатьАтрибут("condition-coverage", "100%");  | 
 | 115 | +		ЗаписатьДанныеМетодов(СтрокаКласса.Пакет, СтрокаКласса.ИмяКласса);  | 
99 | 116 | 
 
  | 
100 |  | -				Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0;  | 
101 |  | -				ТекущаяЗаписьXML.ЗаписатьАтрибут("hits", ДанныеСтроки.Значение.Получить("count"));  | 
 | 117 | +		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // methods  | 
102 | 118 | 
 
  | 
103 |  | -				ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover  | 
 | 119 | +		ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("lines");  | 
104 | 120 | 
 
  | 
105 |  | -				Если Покрыто Тогда  | 
106 |  | -					ПокрытыхСтрокВМетоде = ПокрытыхСтрокВМетоде + 1;  | 
107 |  | -				КонецЕсли;  | 
 | 121 | +		ЗаписатьДанныеСтрок(СтрокаКласса.Пакет, СтрокаКласса.ИмяКласса);  | 
108 | 122 | 
 
  | 
109 |  | -				ВсегоЭлементовМетода = ВсегоЭлементовМетода + 1;  | 
 | 123 | +		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // lines  | 
110 | 124 | 
 
  | 
111 |  | -			КонецЦикла;  | 
 | 125 | +		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // class  | 
112 | 126 | 
 
  | 
 | 127 | +	КонецЦикла;  | 
113 | 128 | 
 
  | 
114 |  | -			ВсегоЭлементов = ВсегоЭлементов + ВсегоЭлементовМетода;  | 
 | 129 | +КонецПроцедуры  | 
115 | 130 | 
 
  | 
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");  | 
117 | 150 | 
 
  | 
118 |  | -		КонецЦикла;  | 
 | 151 | +		ЗаписатьДанныеСтрок(СтрокаМетода.Пакет, СтрокаМетода.ИмяКласса, СтрокаМетода.ИмяМетода);  | 
119 | 152 | 
 
  | 
120 | 153 | 		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // lines  | 
121 |  | -		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // class  | 
122 | 154 | 
 
  | 
 | 155 | +		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // method  | 
123 | 156 | 
 
  | 
124 | 157 | 	КонецЦикла;  | 
125 | 158 | 
 
  | 
126 |  | -	ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // classes  | 
 | 159 | +КонецПроцедуры  | 
127 | 160 | 
 
  | 
128 |  | -	ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // package  | 
 | 161 | +Процедура ЗаписатьДанныеСтрок(Знач ИмяПакета, Знач ИмяКласса, Знач ИмяМетода = Неопределено)  | 
 | 162 | +	  | 
 | 163 | +	Отбор = Новый Структура("Пакет, ИмяКласса", ИмяПакета, ИмяКласса);  | 
 | 164 | +	  | 
 | 165 | +	Если ЗначениеЗаполнено(ИмяМетода) Тогда  | 
 | 166 | +		Отбор.Вставить("ИмяМетода", ИмяМетода);  | 
 | 167 | +	КонецЕсли;  | 
129 | 168 | 
 
  | 
130 |  | -	ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // packages  | 
 | 169 | +	МассивСтрок = ТаблицаСтатистикиПокрытия.НайтиСтроки(Отбор);  | 
131 | 170 | 
 
  | 
132 |  | -	ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // coverage  | 
 | 171 | +	Для каждого СтрокаМодуля Из МассивСтрок Цикл  | 
 | 172 | +		  | 
 | 173 | +		ТекущаяЗаписьXML.ЗаписатьНачалоЭлемента("line");  | 
133 | 174 | 
 
  | 
134 |  | -	ТекущаяЗаписьXML.Закрыть();  | 
 | 175 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("number", СтрокаМодуля.СтрокаМодуля);  | 
 | 176 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("branch", "false");  | 
 | 177 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("condition-coverage", "100%");  | 
 | 178 | + | 
 | 179 | +		ТекущаяЗаписьXML.ЗаписатьАтрибут("hits", СтрокаМодуля.КоличествоВызовов);  | 
 | 180 | + | 
 | 181 | +		ТекущаяЗаписьXML.ЗаписатьКонецЭлемента(); // line  | 
 | 182 | + | 
 | 183 | +	КонецЦикла;  | 
135 | 184 | 
 
  | 
136 | 185 | КонецПроцедуры  | 
137 | 186 | 
 
  | 
 | 
0 commit comments