forked from yukon39/coverage-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
coverage.os
175 lines (122 loc) · 8.48 KB
/
coverage.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#Использовать 1commands
#Использовать cli
#Использовать coverage-cli
#Использовать fs
Перем СерверОтладки;
Перем ИмяКластера;
Перем ИмяИнформационнойБазы;
#Область Приложение
Процедура ВыполнитьПриложение()
Приложение = Новый КонсольноеПриложение("coverage", "Сбор покрытия средствами EDT");
Приложение.Опция("u debugger", "http://localhost:1550", "Сервер отладки")
.ТСтрока();
Приложение.Опция("i infobase", "coverage_test", "Имя информационной базы")
.ТСтрока();
Приложение.Опция("c cluster", "localhost", "Имя кластера")
.ТСтрока();
Приложение.Опция("w workspace", "", "Каталог проекта")
.ТСтрока();
Приложение.Опция("s sources", "src/cf", "Каталог с исходниками")
.ТСтрока();
Приложение.Опция("f format", "XML", "Формат исходников (XML или EDT)")
.ТСтрока();
Приложение.Опция("vbparms", "VBParams.json", "Конфигурационный файл тестирования")
.ТСтрока();
Приложение.Опция("sonarscanner", "", "Каталог сканера SonarQube")
.ТСтрока();
Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
Приложение.Запустить();
КонецПроцедуры
#КонецОбласти
#Область КомандаПриложения
Процедура ВыполнитьКоманду(Команда) Экспорт
// Общие переменные
СерверОтладки = Команда.ЗначениеОпции("debugger");
ИмяИнформационнойБазы = Команда.ЗначениеОпции("infobase");
ИмяКластера = Команда.ЗначениеОпции("cluster");
КаталогПроекта = Команда.ЗначениеОпции("workspace");
КаталогИсходныхФайлов = Команда.ЗначениеОпции("sources");
ФорматИсходныхФайлов = Команда.ЗначениеОпции("format");
ПараметрыVanessa = Команда.ЗначениеОпции("vbparms");
ПутьКСканеру = Команда.ЗначениеОпции("sonarscanner");
Если ЗначениеЗаполнено(КаталогПроекта) Тогда
КаталогИсходныхФайлов = ОбъединитьПути(КаталогПроекта, КаталогИсходныхФайлов);
КонецЕсли;
ФайлПокрытияCSV = ".coverage/coverage.csv";
ФайлПокрытияXML = ".coverage/coveredLines.xml";
ФайлСтрокиXML = ".coverage/linesToCover.xml";
// Подготовка рабочей области
ФС.ОбеспечитьПустойКаталог(".coverage");
ПараметрыСоединения = Новый ПараметрыСоединенияЗамера();
ПараметрыСоединения.УстановитьПредметОтладки(ИмяИнформационнойБазы);
ПараметрыСоединения.УстановитьСерверОтладки(СерверОтладки);
// Запуск сбора покрытия
МенеджерПокрытия = Новый МенеджерПокрытияEDT();
МенеджерПокрытия.УстановитьПараметрыСоединения(ПараметрыСоединения);
МенеджерПокрытия.ЗапуститьСборПокрытия(ФайлПокрытияRAW);
// Тестирование проекта
ПараметрыКоманды = Новый Массив;
ПараметрыКоманды.Добавить(СтрШаблон("--ibconnection %1", СтрокаСоединения()));
ПараметрыКоманды.Добавить(СтрШаблон("--vanessasettings %1", ПараметрыVanessa));
ПараметрыКоманды.Добавить(СтрШаблон("--additional ""/DEBUG -http -attach /DEBUGGERURL %1""", СерверОтладки));
ЗапуститьVRunner("vanessa", ПараметрыКоманды);
// Остановка сбора покрытия
МенеджерПокрытия.ОстановитьСборПокрытия();
// Разбор результатов покрытия
Конвертер = Новый Конвертер(КаталогПроекта);
Конвертер.УстановитьКаталогИсходниковКонфигурации(КаталогИсходныхФайлов, ФорматИсходныхФайлов);
Конвертер.УстановитьФайлПокрытия(ФайлПокрытияRAW);
Конвертер.УстановитьФайлВывода(ФайлПокрытияXML);
Конвертер.РазобратьПокрытие();
// Получение строк для покрытия
МенеджерПокрытия.СформироватьСтрокиКПокрытию(ФайлСтрокиXML, КаталогПроекта, КаталогИсходныхФайлов);
// Запуск проверки SQ
Если ЗначениеЗаполнено(ПутьКСканеру) Тогда
ФайлыПокрытия = Новый Массив;
ФайлыПокрытия.Добавить(ФайлПокрытияXML);
ФайлыПокрытия.Добавить(ФайлСтрокиXML);
ФайлыПокрытияСтр = СтрСоединить(ФайлыПокрытия, ",");
ПараметрыКоманды = Новый Массив;
ПараметрыКоманды.Добавить(СтрШаблон("-Dsonar.coverageReportPaths=%1", ФайлыПокрытияСтр));
ЗапуститьSonarScanner(ПутьКСканеру, ПараметрыКоманды);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗапуститьVRunner(Команда, ПараметрыКоманды)
СтрокаСоединения = СтрокаСоединения();
VRunner = Новый Команда();
VRunner.ПоказыватьВыводНемедленно(Истина);
VRunner.УстановитьКодировкуВывода(КодировкаТекста.UTF8);
VRunner.УстановитьКоманду("vrunner");
VRunner.ДобавитьПараметр(Команда);
VRunner.ДобавитьПараметры(ПараметрыКоманды);
VRunner.Исполнить();
КонецПроцедуры
Функция СтрокаСоединения()
Возврат СтрШаблон("/S%1/%2", ИмяКластера, ИмяИнформационнойБазы);
КонецФункции
Процедура ЗапуститьSonarScanner(ИмяКаталога, ПараметрыКоманды)
SonarScanner_bin = ОбъединитьПути(ИмяКаталога, "bin", "sonar-scanner");
SonarScanner_opts = Новый Массив;
SonarScanner_opts.Добавить("-XX:+UseG1GC");
SonarScanner_opts.Добавить("-XX:MaxGCPauseMillis=200");
SonarScanner_opts.Добавить("-Dfile.encoding=UTF-8");
SonarScanner_env = Новый Соответствие;
SonarScanner_env.Вставить("SONAR_SCANNER_OPTS", СтрСоединить(SonarScanner_opts, " "));
SonarScanner = Новый Команда();
SonarScanner.ПоказыватьВыводНемедленно(Истина);
SonarScanner.УстановитьКодировкуВывода(КодировкаТекста.UTF8);
SonarScanner.УстановитьКоманду(SonarScanner_bin);
SonarScanner.ДобавитьПараметры(ПараметрыКоманды);
SonarScanner.УстановитьПеременныеСреды(SonarScanner_env);
SonarScanner.Исполнить();
КонецПроцедуры
#КонецОбласти
Попытка
ВыполнитьПриложение();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
ЗавершитьРаботу(-1);
КонецПопытки;