You've already forked precommit4onec
mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2025-07-13 01:20:15 +02:00
Добавлен сценарий обработки тестов.
Скорректирован обход каталогов анализируемых фалов.
This commit is contained in:
@ -19,7 +19,8 @@
|
|||||||
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория",
|
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория",
|
||||||
"Каталог анализируемого репозитория");
|
"Каталог анализируемого репозитория");
|
||||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir",
|
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir",
|
||||||
"Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
|
"Каталог расположения исходных файлов относительно корня репозитория.
|
||||||
|
| Если сценариев несколько, указываются в кавычках через , . По умолчанию <src>");
|
||||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rules",
|
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rules",
|
||||||
"Перечень правил для применения. Если сценариев несколько, указываются в кавычках через ,");
|
"Перечень правил для применения. Если сценариев несколько, указываются в кавычках через ,");
|
||||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-cfg-file",
|
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-cfg-file",
|
||||||
@ -58,29 +59,45 @@
|
|||||||
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
|
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
|
||||||
|
|
||||||
КаталогИсходныхФайлов = "src";
|
КаталогИсходныхФайлов = "src";
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
КаталогиИсходныхФайлов = СтрЗаменить(ПараметрыКоманды["-source-dir"], " ", "");
|
||||||
|
МассивКаталоговИсходныхФайлов = СтрРазделить(КаталогиИсходныхФайлов, ",", Ложь);
|
||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов);
|
ОбрабатываемыеФайлы = Новый Массив();
|
||||||
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
|
|
||||||
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
|
|
||||||
Если НЕ ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
|
|
||||||
|
|
||||||
Лог.Ошибка("Каталога <%1> не существует", ТекущийКаталогИсходныхФайлов);
|
Для Каждого КаталогИсходныхФайлов Из МассивКаталоговИсходныхФайлов Цикл
|
||||||
|
|
||||||
|
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов);
|
||||||
|
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
|
||||||
|
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
|
||||||
|
Если НЕ ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
|
||||||
|
|
||||||
|
Лог.Ошибка("Каталога <%1> не существует", ТекущийКаталогИсходныхФайлов);
|
||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
|
||||||
|
|
||||||
|
ОбрабатываемыеФайлыКаталога = НайтиФайлы(ТекущийКаталогИсходныхФайлов, "*", Истина);
|
||||||
|
|
||||||
|
Для Каждого ОбрабатываемыйФайлКаталога Из ОбрабатываемыеФайлыКаталога Цикл
|
||||||
|
|
||||||
|
ОбрабатываемыеФайлы.Добавить(ОбрабатываемыйФайлКаталога);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
|
|
||||||
|
|
||||||
ИменаЗагружаемыхСценариев = Неопределено;
|
ИменаЗагружаемыхСценариев = Неопределено;
|
||||||
Если ЗначениеЗаполнено(ПараметрыКоманды["-rules"]) Тогда
|
Если ЗначениеЗаполнено(ПараметрыКоманды["-rules"]) Тогда
|
||||||
ПараметрИменаСценариев = СтрЗаменить(ПараметрыКоманды["-rules"], " ", "");
|
ПараметрИменаСценариев = СтрЗаменить(ПараметрыКоманды["-rules"], " ", "");
|
||||||
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаСценариев, ",", Ложь);
|
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаСценариев, ",", Ложь);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ОбрабатываемыеФайлы = НайтиФайлы(ТекущийКаталогИсходныхФайлов, "*", Истина);
|
|
||||||
|
|
||||||
Ит = 0;
|
Ит = 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);
|
||||||
|
Сообщить("Обновлен файл " + Файл.ПолноеИмя);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
Reference in New Issue
Block a user