|  | 
| 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