1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-02-07 13:31:49 +02:00

Merge remote-tracking branch 'origin/develop' into feature/ONECICD-59

# Conflicts:
#	features/step_definitions/precommitonec_feature.os
This commit is contained in:
Medvedev Dmitriy 2019-03-22 15:58:57 +03:00
commit 2a0f2dcdee
14 changed files with 398 additions and 61 deletions

View File

@ -17,6 +17,7 @@
ВсеШаги.Добавить("ВКаталогеРепозиторияЕстьФайл");
ВсеШаги.Добавить("ЯКопируюФайлВКаталогРепозитория");
ВсеШаги.Добавить("ЯФиксируюИзмененияВРепозиторииСКомментарием");
ВсеШаги.Добавить("ЯУстанавливаюКодировкуВыводаКоманды");
ВсеШаги.Добавить("КодировкаФайлаИФайлаОдинаковая");
ВсеШаги.Добавить("СодержимоеФайлаИФайлаРазное");
@ -106,16 +107,16 @@
КонецПроцедуры
// Кодировка файла "ИсходныйФайл" и файла "КонечныйФайл" одинаковая
Процедура КодировкаФайлаИФайлаОдинаковая(ИсходныйФайл, КонечныйФайл) Экспорт
ИсходныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("КаталогПроекта"), ИсходныйФайл);
КонечныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("РабочийКаталог"), КонечныйФайл);
КодировкаИсходногоФайла = ОпределитьКодировку(ИсходныйФайл);
КодировкаКонечногоФайла = ОпределитьКодировку(КонечныйФайл);
Ожидаем.Что(КодировкаИсходногоФайла).Равно(КодировкаКонечногоФайла);
// я устанавливаю кодировку вывода "Кодировка" команды "ИмяКоманды"
Процедура ЯУстанавливаюКодировкуВыводаКоманды(Кодировка, ИмяКоманды) Экспорт
КлючКонтекста = КлючКоманды(ИмяКоманды);
Команда = БДД.ПолучитьИзКонтекста(КлючКонтекста);
Команда.УстановитьКодировкуВывода(Кодировка);
КонецПроцедуры
Функция КлючКоманды(Знач ИмяКоманды)
Возврат "Команда-" + ИмяКоманды;
КонецФункции
КонецПроцедуры
@ -132,6 +133,17 @@
КонецПроцедуры
// Кодировка файла "ИсходныйФайл" и файла "КонечныйФайл" одинаковая
Процедура КодировкаФайлаИФайлаОдинаковая(ИсходныйФайл, КонечныйФайл) Экспорт
ИсходныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("КаталогПроекта"), ИсходныйФайл);
КонечныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("РабочийКаталог"), КонечныйФайл);
КодировкаИсходногоФайла = ОпределитьКодировку(ИсходныйФайл);
КодировкаКонечногоФайла = ОпределитьКодировку(КонечныйФайл);
Ожидаем.Что(КодировкаИсходногоФайла).Равно(КодировкаКонечногоФайла);
Функция ПрочитатьТекстФайла(ПутьКФайлу) Экспорт
@ -154,7 +166,7 @@
Буфер = Новый БуферДвоичныхДанных(МаркерUTFBOM.Количество());
ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(Буфер, , МаркерUTFBOM.Количество());
сч = 0;
cч = 0;
ЕстьBOM = Истина;
Для Каждого Байт ИЗ Буфер Цикл

View File

@ -10,33 +10,51 @@
И я включаю отладку лога с именем "oscript.app.precommit4onec"
И я создаю временный каталог и запоминаю его как "КаталогРепозиториев"
И я переключаюсь во временный каталог "КаталогРепозиториев"
И я создаю новый репозиторий "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "Репозиторий1"
И я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install rep1"
И я создаю новый репозиторий "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "РабочийКаталог"
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
Сценарий: Фиксация изменений
Когда Я копирую файл "features/demo/DemoОбработка.epf" в каталог репозитория "Репозиторий1"
И я копирую файл "features/demo/DemoОтчет.erf" в каталог репозитория "Репозиторий1"
И я копирую файл "features/demo/DemoРасширение.cfe" в каталог репозитория "Репозиторий1"
И я фиксирую изменения в репозитории "Репозиторий1" с комментарием "demo коммит"
Тогда В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\form"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных\Ext\Template.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form.bin"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ\Ext\Form.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form.bin"
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ\Ext\Form.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\form"
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\ConfigDumpInfo.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\Configuration.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo\Ext\Module.bsl"
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\Subsystems\DemoРасш_Demo.xml"
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\Languages\Русский.xml"
Сценарий: Разбор отчетов, обработок, конфигурации на исходники.
Когда Я копирую файл "fixtures/demo/DemoОбработка.epf" в каталог репозитория "РабочийКаталог"
И я копирую файл "fixtures/demo/DemoОтчет.erf" в каталог репозитория "РабочийКаталог"
И я копирую файл "fixtures/demo/DemoРасширение.cfe" в каталог репозитория "РабочийКаталог"
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
Тогда В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\form"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных\Ext\Template.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form.bin"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ\Ext\Form.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form.bin"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ\Ext\Form.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\form"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\ConfigDumpInfo.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\Configuration.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo\Ext\Module.bsl"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\Subsystems\DemoРасш_Demo.xml"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\Languages\Русский.xml"
Сценарий: Успешный коммит в репозиторий
Когда Я копирую файл "fixtures\ПроверкаДублейПроцедурПоложительныйТест.bsl" в каталог репозитория "РабочийКаталог"
И Я очищаю параметры команды "git" в контексте
И Я установил рабочий каталог как текущий каталог
И Я устанавливаю кодировку вывода "utf-8" команды "git"
И Я выполняю команду "git" с параметрами "add --all"
И Я выполняю команду "git" с параметрами "commit -m addProcedure"
Тогда Вывод команды "git" не содержит "обнаружены неуникальные имена методов"
Сценарий: Прекоммит заблокировал коммит в репозиторий
Когда Я копирую файл "fixtures\ПроверкаДублейПроцедурНегативныйТест.bsl" в каталог репозитория "РабочийКаталог"
И Я очищаю параметры команды "git" в контексте
И Я установил рабочий каталог как текущий каталог
И Я устанавливаю кодировку вывода "utf-8" команды "git"
И Я выполняю команду "git" с параметрами "add --all"
И Я выполняю команду "git" с параметрами "commit -m addProcedure"
Тогда Вывод команды "git" содержит "обнаружены неуникальные имена методов"

View File

@ -7,7 +7,7 @@
Чтобы автоматически выполнять обработку исходников перед фиксацией изменений в репозитории
Сценарий: Печать текущих настроек precommit4onec
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os configure -global"
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"
@ -17,9 +17,9 @@
И Вывод команды "oscript" содержит "ГлобальныеСценарии ="
Сценарий: Сброс настроек к значениям по умолчанию
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os configure -global -reset"
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global -reset"
Тогда Код возврата команды "oscript" равен 0
И Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os configure -global"
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
И Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит
@ -28,5 +28,5 @@
Установленные настройки:
ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев =
ГлобальныеСценарии = КорректировкаXMLФорм.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,КорректировкаXMLФорм.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
"""

View File

@ -12,14 +12,14 @@
# И я включаю отладку лога с именем "bdd"
Сценарий: Получение версии продукта
Когда Я выполняю команду "oscript" c параметрами "src/main.os version"
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "1.0.12.2"
И Вывод команды "oscript" не содержит "precommit4onec v"
И Код возврата команды "oscript" равен 0
Сценарий: Получение помощи продукта
Когда Я выполняю команду "oscript" c параметрами "src/main.os help"
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v1.0.12.2
@ -33,7 +33,7 @@
И Код возврата команды "oscript" равен 0
Сценарий: Вызов исполняемого файла без параметров
Когда Я выполняю команду "oscript" c параметрами "src/main.os"
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v1.0.12.2

View File

@ -15,7 +15,7 @@
И я создаю новый репозиторий "rep2" в каталоге "КаталогРепозиториев" и запоминаю его как "Репозиторий2"
Сценарий: Установка precommit4onec в репозиторий
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install rep1"
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"
@ -23,14 +23,16 @@
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
Сценарий: precommit4onec не устанавливается в пустой каталог
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install ./"
Тогда Код возврата команды "oscript" равен 0
Когда я создаю временный каталог и запоминаю его как "ПустойКаталог"
И я переключаюсь во временный каталог "ПустойКаталог"
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
Тогда Код возврата команды "oscript" равен 1
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"
И Вывод команды "oscript" содержит "не является репозиторием git"
И Вывод команды "oscript" содержит "can only be used inside a git repository"
Сценарий: Установка precommit4onec во вложенные каталоги
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"

View File

@ -0,0 +1,34 @@
Процедура Проц() Экспорт
КонецПроцедуры
//ПРоцедура Проц()
Функция Проц() Экспорт
КонецПроцедуры // Процедура проц()
Процедура УпроститьLevel() Экспорт
КонецПроцедуры
Процедура level_Forma1t() Экспорт
КонецПроцедуры
Процедура Проц1_() Экспорт
КонецПроцедуры
Процедура _Проц12() Экспорт
КонецПроцедуры
пРоцедура проц2 (парам1)
КонецПроцедуры;
Функция функё1() Экспорт
КонецФункции
Процедура ПРоц3()
КонецПроцедуры
Функция Функ1()
КонецФункции
Функция _Функ1()
КонецФункции

View File

@ -0,0 +1,30 @@
Процедура Проц() Экспорт
КонецПроцедуры
Процедура УпроститьLevel() Экспорт
КонецПроцедуры
Процедура level_Forma1t() Экспорт
КонецПроцедуры
Процедура Проц1_() Экспорт
КонецПроцедуры
Процедура _Проц12() Экспорт
КонецПроцедуры
пРоцедура проц2 (парам1)
КонецПроцедуры;
Функция функё1() Экспорт
КонецФункции
Процедура ПРоц3()
КонецПроцедуры
Функция Функ1()
КонецФункции
Функция _Функ1()
КонецФункции

View File

@ -1,4 +1,4 @@
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыПриложения.os");
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыПриложения.os");
ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
@ -6,14 +6,12 @@
Описание.Имя(ИмяПродукта)
.ВерсияСреды("1.0.17")
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
.ЗависитОт("logos", "0.5")
.ЗависитОт("cmdline", "0.4.1")
.ЗависитОт("1bdd", "1.5.2")
.ЗависитОт("gitrunner", "1.4.0")
.ЗависитОт("v8runner", "0.4.1")
.ЗависитОт("v8unpack", "1.0.1")
.ЗависитОт("logos", "1.2.0")
.ЗависитОт("cmdline", "1.0.0")
.ЗависитОт("1bdd", "1.9.0")
.ЗависитОт("gitrunner", "1.6.0")
.ЗависитОт("v8runner", "1.3.0")
.ЗависитОт("v8unpack", "1.0.3")
.ВключитьФайл("src")
.ВключитьФайл("features")
.ВключитьФайл("tasks")
.ВключитьФайл("v8config.json")
.ИсполняемыйФайл("src/main.os", ИмяПродукта);

View File

@ -0,0 +1,115 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов <ИмяСценария>
//
///////////////////////////////////////////////////////////////////////////////
Перем Лог;
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ПроверкаДублейПроцедурИФункций";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ПроверитьНаДублированиеМетодов(АнализируемыйФайл.ПолноеИмя);
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
// ПроверитьНаДублированиеМетодов
// Выполняет поиск дублей имен процедур и функций файла
//
// Параметры:
// ПутьКФайлуМодуля - Строка - Путь до файла
//
Процедура ПроверитьНаДублированиеМетодов(ПутьКФайлуМодуля)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
ТекстМодуля = Текст.Прочитать();
Текст.Закрыть();
ТекстОшибки = "";
ШаблонПоиска = Новый РегулярноеВыражение("^\s*(?:Процедура|Функция|procedure|function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\(\)");
ШаблонПоиска.Многострочный = Истина;
ШаблонПоиска.ИгнорироватьРегистр = Истина;
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
Если Совпадения.Количество() Тогда
ТЗПроцедуры = Новый ТаблицаЗначений;
ТЗПроцедуры.Колонки.Добавить("ИмяПроцедуры");
ТЗПроцедуры.Колонки.Добавить("Количество");
Для Каждого Совпадение Из Совпадения Цикл
СтрокаТЗ = ТЗПроцедуры.Добавить();
СтрокаТЗ.ИмяПроцедуры = НРЕГ(Совпадение.Группы[1].Значение);
СтрокаТЗ.Количество = 1;
КонецЦикла;
КоличествоПроцедур = ТЗПроцедуры.Количество();
ТЗПроцедуры.Свернуть("ИмяПроцедуры", "Количество");
КоличествоУникальных = ТЗПроцедуры.Количество();
Если КоличествоПроцедур <> КоличествоУникальных Тогда
ТекстОшибки = СтрШаблон("В файле '%1' обнаружены неуникальные имена методов " + Символы.ПС, ПутьКФайлуМодуля);
Для Каждого СтрокаТЗ Из ТЗПроцедуры Цикл
ТекстОшибки = ТекстОшибки + ?(СтрокаТЗ.Количество > 1, СтрокаТЗ.ИмяПроцедуры + Символы.ПС, "");
КонецЦикла;
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ПроверитьНаДублированиеМетодов()

View File

@ -0,0 +1,127 @@
#Использовать asserts
#Использовать logos
#Использовать tempfiles
Перем юТест;
Перем Лог;
Перем МенеджерВременныхФайлов;
// Основная точка входа
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник");
Возврат ВсеТесты;
КонецФункции
Процедура ПередЗапускомТеста() Экспорт
ВремТестер = Новый Тестер;
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
ВключитьПоказОтладки();
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
МенеджерВременныхФайлов.Удалить();
МенеджерВременныхФайлов = Неопределено;
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение() Экспорт
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций();
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурНегативныйТест.bsl"));
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл() Экспорт
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурПоложительныйТест.bsl"));
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций();
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл() Экспорт
Файл = Новый Файл(ПолучитьИмяВременногоФайла("bsl"));
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций();
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник() Экспорт
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("xml"));
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций();
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры
Процедура ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, ТекстИсключения)
ДополнительныеНастройки = ПолучитьДополнительныеНастройки();
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(Файл);
ПараметрыМетода.Добавить(Файл.Путь);
ПараметрыМетода.Добавить(ДополнительныеНастройки);
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения);
КонецПроцедуры
Функция ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций()
Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", "ПроверкаДублейПроцедурИФункций.os");
ОбъектСценария = ЗагрузитьСценарий(Сценарий);
Возврат ОбъектСценария;
КонецФункции
Процедура ВключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Отладка);
КонецПроцедуры
Процедура ВыключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Информация);
КонецПроцедуры
Функция КаталогТестовыхФикстур()
Возврат ОбъединитьПути(КаталогИсходников(), "fixtures");
КонецФункции
Функция КаталогИсходников()
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
КонецФункции
Функция ПолучитьДополнительныеНастройки()
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками);
Возврат ДополнительныеНастройки;
КонецФункции

View File

@ -6,6 +6,7 @@
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os",
"КорректировкаXMLФорм.os",
"ПроверкаДублейПроцедурИФункций.os",
"ПроверкаКорректностиОбластей.os",
"РазборОбычныхФормНаИсходники.os",
"РазборОтчетовОбработокРасширений.os",