1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-01-03 22:52:10 +02:00

#ONECICD-20

Доработал сценарий и добавил тесты
This commit is contained in:
Medvedev Dmitriy 2019-03-07 18:05:19 +03:00
parent 557690e52a
commit 9e1f616819
3 changed files with 99 additions and 23 deletions

View File

@ -0,0 +1,55 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
#Использовать asserts
#Использовать logos
Перем БДД;
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
ВсеШаги = Новый Массив;
ВсеШаги.Добавить("ЯПолучаюФайлДляПроверкиДублейПроцедурИФункций");
ВсеШаги.Добавить("ВыполнениеСценарияВызываетИсключениеСТекстом");
ВсеШаги.Добавить("ВыполнениеСценарияПроходитШтатно");
Возврат ВсеШаги;
КонецФункции
// Я получаю файл для проверки дублей процедур и функций "ИмяФайла"
Процедура ЯПолучаюФайлДляПроверкиДублейПроцедурИФункций(ИмяФайла) Экспорт
НовыйФайл = Новый Файл(ИмяФайла);
БДД.СохранитьВКонтекст("ИмяФайла", НовыйФайл);
КонецПроцедуры
// Выполнение сценария "Сценарий" вызывает исключение с текстом "ТекстИсключения"
Процедура ВыполнениеСценарияВызываетИсключениеСТекстом(Сценарий, ТекстИсключения) Экспорт
ОбъектСценария = ЗагрузитьСценарий(Сценарий);
Файл = БДД.ПолучитьИзКонтекста("ИмяФайла");
Лог = Логирование.ПолучитьЛог("oscript.app.precommit4onec");
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(Файл);
ПараметрыМетода.Добавить(Файл.Путь);
ПараметрыМетода.Добавить(Новый Структура("Лог", Лог));
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения);
КонецПроцедуры
// Выполнение сценария "Сценарий" проходит штатно
Процедура ВыполнениеСценарияПроходитШтатно(Сценарий) Экспорт
ОбъектСценария = ЗагрузитьСценарий(Сценарий);
Файл = БДД.ПолучитьИзКонтекста("ИмяФайла");
Лог = Логирование.ПолучитьЛог("oscript.app.precommit4onec");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Новый Структура("Лог", Лог));
Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры

View File

@ -5,3 +5,15 @@
Как разработчик
Я хочу иметь возможность выполнять сценарии обработки прекоммита
Чтобы сценарии анализировали файлы коммита
Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я включаю отладку лога с именем "oscript.app.precommit4onec"
Сценарий: Проверка сценария ПроверкаДублейПроцедурИФункций вызовет исключение
Когда Я получаю файл для проверки дублей процедур и функций "tests\fixtures\ПроверкаДублейПроцедурНегативныйТест.bsl"
Тогда Выполнение сценария "src\СценарииОбработки\ПроверкаДублейПроцедурИФункций.os" вызывает исключение с текстом "обнаружены неуникальные имена методов"
Сценарий: Проверка сценария ПроверкаДублейПроцедурИФункций пройдет штатно и вернет истину
Когда Я получаю файл для проверки дублей процедур и функций "tests\fixtures\ПроверкаДублейПроцедурПоложительныйТест.bsl"
Тогда Выполнение сценария "src\СценарииОбработки\ПроверкаДублейПроцедурИФункций.os" проходит штатно

View File

@ -14,7 +14,7 @@
Функция ИмяСценария() Экспорт
Возврат "ПроверкаДублейПроцедурИФункций";
КонецФункции // ИмяСценария()
// ОбработатьФайл
@ -33,24 +33,32 @@
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
//Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
//
// Лог = ДополнительныеПараметры.Лог;
// НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
// Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
// Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
// ПроверитьНаДублированиеМетодов(АнализируемыйФайл.ПолноеИмя);
// Возврат Истина;
// КонецЕсли;
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
// Возврат Ложь;
Лог = ДополнительныеПараметры.Лог;
УправлениеНастройками = Неопределено;
ДополнительныеПараметры.Свойство("УправлениеНастройками", УправлениеНастройками);
Если УправлениеНастройками <> Неопределено Тогда
НастройкиСценария = УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
КонецЕсли;
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ПроверитьНаДублированиеМетодов(АнализируемыйФайл.ПолноеИмя);
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
//КонецФункции // ОбработатьФайл()
// ОбработатьФайл
// ПроверитьНаДублированиеМетодов
// Выполняет поиск дублей имен процедур и функций файла
//
// Параметры:
@ -89,7 +97,6 @@
КонецЦикла;
КоличествоПроцедур = ТЗПроцедуры.Количество();
ТЗПроцедуры.Свернуть("Процедура", "Количество");
КоличествоУникальных = ТЗПроцедуры.Количество();
@ -98,16 +105,18 @@
ТекстОшибки = СтрШаблон("В файле '%1' обнаружены неуникальные имена методов " + Символы.ПС, ПутьКФайлуМодуля);
Для Каждого СтрокаТЗ Из ТЗПроцедуры Цикл
ТекстОшибки = ТекстОшибки + ?(СтрокаТЗ.Количество > 1, СтрокаТЗ.Процедура + Символы.ПС, "");
КонецЦикла;
//Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
КонецПроцедуры // ПроверитьНаДублированиеМетодов()