mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2024-11-28 08:48:45 +02:00
Добавлен сценарий обработки тестов.
Скорректирован обход каталогов анализируемых фалов.
This commit is contained in:
parent
311d28380a
commit
ad381e42d9
@ -19,7 +19,8 @@
|
||||
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория",
|
||||
"Каталог анализируемого репозитория");
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir",
|
||||
"Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
|
||||
"Каталог расположения исходных файлов относительно корня репозитория.
|
||||
| Если сценариев несколько, указываются в кавычках через , . По умолчанию <src>");
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rules",
|
||||
"Перечень правил для применения. Если сценариев несколько, указываются в кавычках через ,");
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-cfg-file",
|
||||
@ -58,29 +59,45 @@
|
||||
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
|
||||
|
||||
КаталогИсходныхФайлов = "src";
|
||||
|
||||
|
||||
Иначе
|
||||
|
||||
КаталогиИсходныхФайлов = СтрЗаменить(ПараметрыКоманды["-source-dir"], " ", "");
|
||||
МассивКаталоговИсходныхФайлов = СтрРазделить(КаталогиИсходныхФайлов, ",", Ложь);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов);
|
||||
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
|
||||
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
|
||||
Если НЕ ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
|
||||
ОбрабатываемыеФайлы = Новый Массив();
|
||||
|
||||
Лог.Ошибка("Каталога <%1> не существует", ТекущийКаталогИсходныхФайлов);
|
||||
Для Каждого КаталогИсходныхФайлов Из МассивКаталоговИсходныхФайлов Цикл
|
||||
|
||||
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов);
|
||||
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
|
||||
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
|
||||
Если НЕ ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
|
||||
|
||||
Лог.Ошибка("Каталога <%1> не существует", ТекущийКаталогИсходныхФайлов);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
|
||||
|
||||
ОбрабатываемыеФайлыКаталога = НайтиФайлы(ТекущийКаталогИсходныхФайлов, "*", Истина);
|
||||
|
||||
Для Каждого ОбрабатываемыйФайлКаталога Из ОбрабатываемыеФайлыКаталога Цикл
|
||||
|
||||
ОбрабатываемыеФайлы.Добавить(ОбрабатываемыйФайлКаталога);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
|
||||
|
||||
ИменаЗагружаемыхСценариев = Неопределено;
|
||||
Если ЗначениеЗаполнено(ПараметрыКоманды["-rules"]) Тогда
|
||||
ПараметрИменаСценариев = СтрЗаменить(ПараметрыКоманды["-rules"], " ", "");
|
||||
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаСценариев, ",", Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
ОбрабатываемыеФайлы = НайтиФайлы(ТекущийКаталогИсходныхФайлов, "*", Истина);
|
||||
|
||||
|
||||
Ит = 0;
|
||||
|
||||
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(АдресПоискаКонфигурационногоФайла);
|
||||
|
149
src/СценарииОбработки/ОбработкаТестов.os
Normal file
149
src/СценарииОбработки/ОбработкаТестов.os
Normal file
@ -0,0 +1,149 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов <ИмяСценария>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ИмяСценария
|
||||
// Возвращает имя сценария обработки файлов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Имя текущего сценария обработки файлов
|
||||
//
|
||||
Функция ИмяСценария() Экспорт
|
||||
|
||||
Возврат "Обработка Юнит Тестов";
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ПолучитьСтандартныеНастройкиСценария
|
||||
// Возвращает структуру настроек сценария
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Структура с настройками сценария
|
||||
// * ИмяСценария - Строка - Имя, с которым сохранятся настройки
|
||||
// * Настройка - Соответствие - настройки
|
||||
//
|
||||
Функция ПолучитьСтандартныеНастройкиСценария() Экспорт
|
||||
|
||||
ВызватьИсключение "Настройки отсутствуют";
|
||||
|
||||
НастройкиСценария = Новый Соответствие;
|
||||
НастройкиСценария.Вставить("ИспользоватьПоУмолчанию", Истина);
|
||||
НастройкиСценария.Вставить("Версия", "");
|
||||
НастройкиСценария.Вставить("КоличествоПопыток", 5);
|
||||
НастройкиСценария.Вставить("МассивПараметров", Новый Массив);
|
||||
|
||||
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
// Параметры:
|
||||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги / файлы которые необходимо добавить в индекс
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак выполненной обработки файла
|
||||
//
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
|
||||
|
||||
// анализ файла без изменения его содержимого
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл)
|
||||
И СтрНайти(КаталогИсходныхФайлов, "tests/src") Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ОбработкаФайла(АнализируемыйФайл);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Процедура ОбработкаФайла(ИмяФайла)
|
||||
|
||||
РегулярноеВыражениеМетоды = Новый РегулярноеВыражение("\/\/\s*?\@unit-test\:.*?\nПроцедура\s+?(.+)\s*?\(.*\s*Экспорт");
|
||||
РегулярноеВыражениеМетоды.ИгнорироватьРегистр = Истина;
|
||||
РегулярноеВыражениеМетоды.Многострочный = Истина;
|
||||
|
||||
РегулярноеВыражениеAPI = Новый РегулярноеВыражение("(#Область ТестыAPI\s*?[.\w\W]+?#КонецОбласти\s*?$)");
|
||||
РегулярноеВыражениеAPI.ИгнорироватьРегистр = Истина;
|
||||
РегулярноеВыражениеAPI.Многострочный = Истина;
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||||
ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
|
||||
Текст = ТекстовыйДокумент.ПолучитьТекст();
|
||||
|
||||
Совпадения = РегулярноеВыражениеМетоды.НайтиСовпадения(Текст);
|
||||
ТекстМетода = "";
|
||||
Если Совпадения.Количество() Тогда
|
||||
Для Каждого Совпадение Из Совпадения Цикл
|
||||
ТекстМетода = ТекстМетода + Символы.ПС
|
||||
+ " ИсполняемыеСценарии.Добавить(""" + Совпадение.Группы[1].Значение + """);";
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
Если Не ПустаяСтрока(ТекстМетода) Тогда
|
||||
ТекстМетода = "#Область ТестыAPI
|
||||
|
|
||||
|// ИсполняемыеСценарии
|
||||
|// Сервисный метод для получения списка тестовых методов
|
||||
|// Параметры:
|
||||
|// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|
||||
|// Возвращаемое значение:
|
||||
|// Массив - Имена методов тестов
|
||||
|Функция ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
|
||||
| ИсполняемыеСценарии = Новый Массив; " + ТекстМетода + "
|
||||
|
|
||||
| Возврат ИсполняемыеСценарии;
|
||||
|
|
||||
|КонецФункции
|
||||
|
|
||||
|#КонецОбласти";
|
||||
|
||||
Совпадения = РегулярноеВыражениеAPI.НайтиСовпадения(Текст);
|
||||
НовыйТекстМодуля = Текст;
|
||||
Если Совпадения.Количество() Тогда
|
||||
НовыйТекстМодуля = РегулярноеВыражениеAPI.Заменить(Текст, ТекстМетода);
|
||||
Иначе
|
||||
Поз = СтрНайти(Текст, "#Область Тесты");
|
||||
Если Поз > 0 Тогда
|
||||
НовыйТекстМодуля = Лев(Текст, Поз - 1) + ТекстМетода + Символы.ПС + Символы.ПС + Сред(Текст, Поз);
|
||||
Иначе
|
||||
НовыйТекстМодуля = ТекстМетода + Символы.ПС + Символы.ПС + Текст;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если НовыйТекстМодуля <> Текст Тогда
|
||||
ТекстовыйДокумент.УстановитьТекст(НовыйТекстМодуля);
|
||||
ТекстовыйДокумент.Записать(Файл.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
|
||||
Сообщить("Обновлен файл " + Файл.ПолноеИмя);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
Loading…
Reference in New Issue
Block a user