|
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