mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2024-11-28 08:48:45 +02:00
Merge branch 'feature/canonical' into develop
This commit is contained in:
commit
d4822fc731
@ -46,7 +46,7 @@
|
||||
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
|
||||
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
|
||||
- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле.
|
||||
|
||||
- `ИсправлениеНеКаноническогоНаписания` - Проверяет модули на каноничность написания ключевых слов и исправляет найденное
|
||||
## Изменение настроек
|
||||
|
||||
precommit4onec может читать настройки своей работы из специального конфигурационного файла.
|
||||
|
@ -146,4 +146,70 @@
|
||||
"""
|
||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
||||
Тогда Файл "\src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
|
||||
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
|
||||
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
|
||||
|
||||
Сценарий: Прекоммит, анализируя исходники исправляет неканоничкое написание ключевых слов на каноническое
|
||||
Когда Я копирую файл "tests\fixtures\ИсправлениеНеКаноническогоНаписания.bsl" в каталог репозитория "РабочийКаталог"
|
||||
И я выполняю команду "git" с параметрами "add --all"
|
||||
И я выполняю команду "git" с параметрами "commit -m addFile"
|
||||
Тогда Вывод команды "git" содержит """
|
||||
ИНФОРМАЦИЯ - В строке 5 найдено ключевое слово '#область' заменено на '#Область'
|
||||
ИНФОРМАЦИЯ - В строке 7 найдено ключевое слово 'ПЕРЕМ' заменено на 'Перем'
|
||||
ИНФОРМАЦИЯ - В строке 8 найдено ключевое слово 'перем' заменено на 'Перем'
|
||||
ИНФОРМАЦИЯ - В строке 14 найдено ключевое слово '#КонецОБласти' заменено на '#КонецОбласти'
|
||||
ИНФОРМАЦИЯ - В строке 16 найдено ключевое слово '&НаКлиентенаСервере' заменено на '&НаКлиентеНаСервере'
|
||||
ИНФОРМАЦИЯ - В строке 17 найдено ключевое слово 'ПРоцедура' заменено на 'Процедура'
|
||||
ИНФОРМАЦИЯ - В строке 18 найдено ключевое слово 'конецпроцедуры' заменено на 'КонецПроцедуры'
|
||||
ИНФОРМАЦИЯ - В строке 20 найдено ключевое слово '&Насервере' заменено на '&НаСервере'
|
||||
ИНФОРМАЦИЯ - В строке 21 найдено ключевое слово 'процедура' заменено на 'Процедура'
|
||||
ИНФОРМАЦИЯ - В строке 24 найдено ключевое слово '&Наклиенте' заменено на '&НаКлиенте'
|
||||
ИНФОРМАЦИЯ - В строке 25 найдено ключевое слово 'функция' заменено на 'Функция'
|
||||
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово '#если' заменено на '#Если'
|
||||
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово '#тогда' заменено на '#Тогда'
|
||||
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово 'КлиенТ' заменено на 'Клиент'
|
||||
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово 'сервер' заменено на 'Сервер'
|
||||
ИНФОРМАЦИЯ - В строке 27 найдено ключевое слово 'перейти' заменено на 'Перейти'
|
||||
ИНФОРМАЦИЯ - В строке 28 найдено ключевое слово '#Конецесли' заменено на '#КонецЕсли'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'если' заменено на 'Если'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'тогда' заменено на 'Тогда'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'иначе' заменено на 'Иначе'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'конецесли' заменено на 'КонецЕсли'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'возврат' заменено на 'Возврат'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'и' заменено на 'И'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'не' заменено на 'НЕ'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'ложь' заменено на 'Ложь'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'НеОпределено' заменено на 'Неопределено'
|
||||
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'null' заменено на 'NULL'
|
||||
ИНФОРМАЦИЯ - В строке 32 найдено ключевое слово 'цикл' заменено на 'Цикл'
|
||||
ИНФОРМАЦИЯ - В строке 32 найдено ключевое слово 'пока' заменено на 'Пока'
|
||||
ИНФОРМАЦИЯ - В строке 33 найдено ключевое слово 'прервать' заменено на 'Прервать'
|
||||
ИНФОРМАЦИЯ - В строке 34 найдено ключевое слово 'конеццикла' заменено на 'КонецЦикла'
|
||||
ИНФОРМАЦИЯ - В строке 38 найдено ключевое слово 'иначеЕсли' заменено на 'ИначеЕсли'
|
||||
ИНФОРМАЦИЯ - В строке 39 найдено ключевое слово 'попытка' заменено на 'Попытка'
|
||||
ИНФОРМАЦИЯ - В строке 40 найдено ключевое слово 'новый' заменено на 'Новый'
|
||||
ИНФОРМАЦИЯ - В строке 41 найдено ключевое слово 'исключение' заменено на 'Исключение'
|
||||
ИНФОРМАЦИЯ - В строке 42 найдено ключевое слово 'вызватьИсключение' заменено на 'ВызватьИсключение'
|
||||
ИНФОРМАЦИЯ - В строке 43 найдено ключевое слово 'конецпопытки' заменено на 'КонецПопытки'
|
||||
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'ТолстыйКлиентОбычноеприложение' заменено на 'ТолстыйКлиентОбычноеПриложение'
|
||||
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'толстыйКлиентУправляемоеПриложение' заменено на 'ТолстыйКлиентУправляемоеПриложение'
|
||||
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'Тонкийклиент' заменено на 'ТонкийКлиент'
|
||||
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'вебклиент' заменено на 'ВебКлиент'
|
||||
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'и' заменено на 'И'
|
||||
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'не' заменено на 'НЕ'
|
||||
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'для' заменено на 'Для'
|
||||
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'каждого' заменено на 'Каждого'
|
||||
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'из' заменено на 'Из'
|
||||
ИНФОРМАЦИЯ - В строке 52 найдено ключевое слово 'выполнить' заменено на 'Выполнить'
|
||||
ИНФОРМАЦИЯ - В строке 55 найдено ключевое слово 'по' заменено на 'По'
|
||||
ИНФОРМАЦИЯ - В строке 58 найдено ключевое слово 'добавитьОбработчик' заменено на 'ДобавитьОбработчик'
|
||||
ИНФОРМАЦИЯ - В строке 58 найдено ключевое слово 'Удалитьобработчик' заменено на 'УдалитьОбработчик'
|
||||
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'ложь' заменено на 'Ложь'
|
||||
ИНФОРМАЦИЯ - В строке 60 найдено ключевое слово 'конецфункции' заменено на 'КонецФункции'
|
||||
ИНФОРМАЦИЯ - В строке 62 найдено ключевое слово '&НасерверебезКонтекста' заменено на '&НаСервереБезКонтекста'
|
||||
ИНФОРМАЦИЯ - В строке 68 найдено ключевое слово '&наКлиентеНаСервереБезКонтекста' заменено на '&НаКлиентеНаСервереБезКонтекста'
|
||||
ИНФОРМАЦИЯ - В строке 72 найдено ключевое слово '&наКлиентенаСервере' заменено на '&НаКлиентеНаСервере'
|
||||
"""
|
388
src/СценарииОбработки/ИсправлениеНеКаноническогоНаписания.os
Normal file
388
src/СценарииОбработки/ИсправлениеНеКаноническогоНаписания.os
Normal file
@ -0,0 +1,388 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов
|
||||
// <ИсправлениеНеКаноническогоНаписания>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Перем Лог;
|
||||
|
||||
// ИмяСценария
|
||||
// Возвращает имя сценария обработки файлов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Имя текущего сценария обработки файлов
|
||||
//
|
||||
Функция ИмяСценария() Экспорт
|
||||
|
||||
Возврат "ИсправлениеНеКаноническогоНаписания";
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
// Параметры:
|
||||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак выполненной обработки файла
|
||||
//
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
Если ИсправитьНаКаноническоеНаписание(АнализируемыйФайл.ПолноеИмя) Тогда
|
||||
|
||||
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Функция ИсправитьНаКаноническоеНаписание(Знач ИмяФайла)
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Эталоны = Эталоны();
|
||||
КлючевыеСлова = КлючевыеСлова(Эталоны);
|
||||
|
||||
РазбираемоеСодержимоеФайла = СтрЗаменить(СодержимоеФайла, """""", "***ЗАМЕНА_ДВОЙНЫХ_КАВЫЧЕК***");
|
||||
РазбираемоеСодержимоеФайла = СтрЗаменить(РазбираемоеСодержимоеФайла, "://", "***ЗАМЕНА_ЧАСТИ_URL***"); // например, URLСтрока = "http://my.domain.com"
|
||||
НовоеСодержимоеФайла = Новый ТекстовыйДокумент;
|
||||
|
||||
ТекстРазбора = Новый ТекстовыйДокумент;
|
||||
ТекстРазбора.УстановитьТекст(РазбираемоеСодержимоеФайла);
|
||||
ВсегоСтрок = ТекстРазбора.КоличествоСтрок();
|
||||
СтрокаОткрыта = Ложь;
|
||||
|
||||
// символы, которые будут использоваться для нормализации строки
|
||||
ЗаменяемыеСимволы = "; = ( ) , " + Символы.Таб;
|
||||
ЗаменяемыеСимволы = СтрРазделить(ЗаменяемыеСимволы, " ", Истина);
|
||||
// Построчная проверка
|
||||
Для Ит = 1 По ВсегоСтрок Цикл
|
||||
|
||||
СтрокаМодуля = ТекстРазбора.ПолучитьСтроку(Ит);
|
||||
|
||||
// оставим строки, которые обрабатывать не нужно
|
||||
Если ПустаяСтрока(СтрокаМодуля)
|
||||
ИЛИ СтрНачинаетсяС(СокрЛ(СтрокаМодуля), "//") Тогда
|
||||
|
||||
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
|
||||
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрокаМодуля = СтрокаМодуля;
|
||||
Если НЕ СтрокаОткрыта Тогда
|
||||
|
||||
НоваяСтрокаМодуля = УдалитьКомИКавИзСтроки(НоваяСтрокаМодуля);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// Вырезаем часть строки в кавычках
|
||||
ПоследняяПозиция = 0;
|
||||
ПозицияКавычек = СтрНайти(НоваяСтрокаМодуля, """");
|
||||
|
||||
НоваяСтрокаМодуля = ВырезатьТекстВКавычках(НоваяСтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта);
|
||||
|
||||
// ничего интересного не осталось
|
||||
Если СтрокаОткрыта И ПозицияКавычек = 0
|
||||
ИЛИ ПустаяСтрока(НоваяСтрокаМодуля) Тогда
|
||||
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
|
||||
Продолжить;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// Проверяем правильное использование каждого ключевого слова
|
||||
ВРегНоваяСтрокаМодуля = НормализоватьСтроку(НоваяСтрокаМодуля, ЗаменяемыеСимволы);
|
||||
|
||||
ДлинаСтроки = СтрДлина(ВРегНоваяСтрокаМодуля);
|
||||
|
||||
Для Каждого ЭлементТаблицы Из КлючевыеСлова Цикл
|
||||
Эталон = ЭлементТаблицы.Наименование;
|
||||
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ");
|
||||
Если НЕ ПозицияЭталона Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ДлинаЭталона = СтрДлина(Эталон);
|
||||
|
||||
// Нашли ключевое слово, проверяем каноническое написание
|
||||
Пока ПозицияЭталона > 0 Цикл
|
||||
|
||||
СтартоваяПозиция = ПозицияЭталона - 1;
|
||||
Написание = СокрЛП(Сред(СтрокаМодуля, ПозицияЭталона, ДлинаЭталона));
|
||||
|
||||
Если Эталоны.Найти(Написание) = Неопределено Тогда // Ключевое слово написано не канонически
|
||||
|
||||
СтрокаМодуля = Лев(СтрокаМодуля, СтартоваяПозиция)
|
||||
+ ЭлементТаблицы.Значение
|
||||
+ Сред(СтрокаМодуля, СтартоваяПозиция + ДлинаЭталона + 1);
|
||||
|
||||
СтрокаСообщения = СтрШаблон("В строке %1 найдено ключевое слово '%2' заменено на '%3'",
|
||||
Ит, Написание, ЭлементТаблицы.Значение);
|
||||
Лог.Информация(СтрокаСообщения);
|
||||
КонецЕсли;
|
||||
|
||||
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ", , ПозицияЭталона + ДлинаЭталона);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если НовоеСодержимоеФайла.ПолучитьТекст() <> СодержимоеФайла Тогда
|
||||
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, НовоеСодержимоеФайла.ПолучитьТекст());
|
||||
Возврат Истина; // переиндексируем
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция НормализоватьСтроку(Знач Строка, ЗаменяемыеСимволы)
|
||||
|
||||
Строка = " " + ВРег(Строка) + " ";
|
||||
|
||||
Для Каждого Символ Из ЗаменяемыеСимволы Цикл
|
||||
|
||||
Строка = СтрЗаменить(Строка, Символ, " ");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Строка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, Знач СтрокаМодуля)
|
||||
|
||||
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ДВОЙНЫХ_КАВЫЧЕК***", """""");
|
||||
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ЧАСТИ_URL***", "://");
|
||||
|
||||
НовоеСодержимоеФайла.ДобавитьСтроку(СтрокаМодуля);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ВырезатьТекстВКавычках(Знач СтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта)
|
||||
|
||||
Пока ПозицияКавычек > 0 Цикл
|
||||
|
||||
Если СтрокаОткрыта Тогда
|
||||
|
||||
// кавычки закрывают строку, вырезаем часть в кавычках
|
||||
СтрокаМодуляВКавычках = Сред(СтрокаМодуля, ПозицияКавычек + 1);
|
||||
СтрокаМодуля = Лев(СтрокаМодуля, ПоследняяПозиция - 1)
|
||||
+ ДополнитьСтроку("", ПозицияКавычек - ПоследняяПозиция + 1, " ")
|
||||
+ СтрокаМодуляВКавычках;
|
||||
СтрокаОткрыта = Ложь;
|
||||
ПоследняяПозиция = 0;
|
||||
|
||||
Иначе
|
||||
|
||||
// позиция кавычек начинают строку
|
||||
ПоследняяПозиция = ПозицияКавычек;
|
||||
СтрокаОткрыта = Истина;
|
||||
СтрокаМодуля = Лев(СтрокаМодуля, ПозицияКавычек - 1) + " " + Сред(СтрокаМодуля, ПозицияКавычек + 1);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ПозицияКавычек = Найти(СтрокаМодуля, """");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтрокаМодуля;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УдалитьКомИКавИзСтроки(Знач СтрокаМодуля)
|
||||
|
||||
ПозицияКомментария = СтрНайти(СтрокаМодуля, "//");
|
||||
|
||||
Если ПозицияКомментария > 0 Тогда // есть комментарий
|
||||
ДлинаСтроки = СтрДлина(СтрокаМодуля);
|
||||
ПозицияКавычек = СтрНайти(СтрокаМодуля, """");
|
||||
Если ПозицияКавычек = 0 // нет кавычек, удаляем комментарий
|
||||
ИЛИ ПозицияКавычек > ПозицияКомментария Тогда // кавычки после комментария, удаляем комментарий
|
||||
|
||||
СтрокаМодуля = ДополнитьСтроку(Лев(СтрокаМодуля, ПозицияКомментария - 1), ДлинаСтроки, " ", "Справа");
|
||||
|
||||
Иначе
|
||||
|
||||
КоличествоКавычекДоКомментария = СтрЧислоВхождений(Лев(СтрокаМодуля, ПозицияКомментария), """");
|
||||
Если КоличествоКавычекДоКомментария % 2 = 0 Тогда // строка открывается и закрывается до комментария, удаляем комментарий
|
||||
|
||||
СтрокаМодуля = ДополнитьСтроку(Лев(СтрокаМодуля, ПозицияКомментария - 1), ДлинаСтроки, " ", "Справа");
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрокаМодуля;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КлючевыеСлова(Эталоны)
|
||||
|
||||
КлючевыеСлова = Новый ТаблицаЗначений;
|
||||
КлючевыеСлова.Колонки.Добавить("Наименование");
|
||||
КлючевыеСлова.Колонки.Добавить("Значение");
|
||||
Для Каждого Эталон Из Эталоны Цикл
|
||||
|
||||
Если КлючевыеСлова.НайтиСтроки(Новый Структура("Наименование", ВРег(Эталон))).Количество() = 0 Тогда
|
||||
|
||||
СтрокаТаблицы = КлючевыеСлова.Добавить();
|
||||
СтрокаТаблицы.Наименование = ВРег(Эталон);
|
||||
СтрокаТаблицы.Значение = Эталон;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат КлючевыеСлова;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Эталоны()
|
||||
|
||||
Эталоны = Новый Массив;
|
||||
|
||||
Эталоны.Добавить("Если");
|
||||
Эталоны.Добавить("#Если");
|
||||
Эталоны.Добавить("Тогда");
|
||||
Эталоны.Добавить("#Тогда");
|
||||
Эталоны.Добавить("Иначе");
|
||||
Эталоны.Добавить("#Иначе");
|
||||
Эталоны.Добавить("ИначеЕсли");
|
||||
Эталоны.Добавить("#ИначеЕсли");
|
||||
Эталоны.Добавить("КонецЕсли");
|
||||
Эталоны.Добавить("#КонецЕсли");
|
||||
Эталоны.Добавить("#Область");
|
||||
Эталоны.Добавить("#КонецОбласти");
|
||||
Эталоны.Добавить("Клиент");
|
||||
Эталоны.Добавить("НаКлиенте");
|
||||
Эталоны.Добавить("НаСервере");
|
||||
Эталоны.Добавить("ТолстыйКлиентОбычноеПриложение");
|
||||
Эталоны.Добавить("ТолстыйКлиентУправляемоеПриложение");
|
||||
Эталоны.Добавить("Сервер");
|
||||
Эталоны.Добавить("ВнешнееСоединение");
|
||||
Эталоны.Добавить("ТонкийКлиент");
|
||||
Эталоны.Добавить("ВебКлиент");
|
||||
Эталоны.Добавить("&НаКлиенте");
|
||||
Эталоны.Добавить("&НаСервере");
|
||||
Эталоны.Добавить("&НаСервереБезКонтекста");
|
||||
Эталоны.Добавить("&НаКлиентеНаСервереБезКонтекста");
|
||||
Эталоны.Добавить("&НаКлиентеНаСервере");
|
||||
Эталоны.Добавить("Для");
|
||||
Эталоны.Добавить("Каждого");
|
||||
Эталоны.Добавить("Цикл");
|
||||
Эталоны.Добавить("КонецЦикла");
|
||||
Эталоны.Добавить("Выполнить");
|
||||
Эталоны.Добавить("По");
|
||||
Эталоны.Добавить("Прервать");
|
||||
Эталоны.Добавить("Продолжить");
|
||||
Эталоны.Добавить("Из");
|
||||
Эталоны.Добавить("Новый");
|
||||
Эталоны.Добавить("Перейти");
|
||||
Эталоны.Добавить("Перем");
|
||||
Эталоны.Добавить("Пока");
|
||||
Эталоны.Добавить("Попытка");
|
||||
Эталоны.Добавить("Исключение");
|
||||
Эталоны.Добавить("КонецПопытки");
|
||||
Эталоны.Добавить("ВызватьИсключение");
|
||||
Эталоны.Добавить("Процедура");
|
||||
Эталоны.Добавить("КонецПроцедуры");
|
||||
Эталоны.Добавить("Функция");
|
||||
Эталоны.Добавить("КонецФункции");
|
||||
Эталоны.Добавить("Возврат");
|
||||
Эталоны.Добавить("ДобавитьОбработчик");
|
||||
Эталоны.Добавить("УдалитьОбработчик");
|
||||
Эталоны.Добавить("И");
|
||||
Эталоны.Добавить("ИЛИ");
|
||||
Эталоны.Добавить("НЕ");
|
||||
Эталоны.Добавить("Или");
|
||||
Эталоны.Добавить("Не");
|
||||
Эталоны.Добавить("Истина");
|
||||
Эталоны.Добавить("ИСТИНА");
|
||||
Эталоны.Добавить("Ложь");
|
||||
Эталоны.Добавить("ЛОЖЬ");
|
||||
Эталоны.Добавить("Знач");
|
||||
Эталоны.Добавить("ЗНАЧ");
|
||||
Эталоны.Добавить("Неопределено");
|
||||
Эталоны.Добавить("НЕОПРЕДЕЛЕНО");
|
||||
Эталоны.Добавить("NULL");
|
||||
Эталоны.Добавить("Null");
|
||||
|
||||
Возврат Эталоны;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// перенесено из строковых ф-ий ибо там ошибка
|
||||
|
||||
Функция СформироватьСтрокуСимволов(Знач Символ, Знач ДлинаСтроки)
|
||||
|
||||
Результат = "";
|
||||
Для Счетчик = 1 По ДлинаСтроки Цикл
|
||||
Результат = Результат + Символ;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева")
|
||||
|
||||
// Длина символа не должна превышать единицы.
|
||||
Символ = Лев(Символ, 1);
|
||||
|
||||
КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина(Строка);
|
||||
|
||||
Если КоличествоСимволовНадоДобавить > 0 Тогда
|
||||
|
||||
СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить);
|
||||
|
||||
Если ВРег(Режим) = "СЛЕВА" Тогда
|
||||
|
||||
Строка = СтрокаДляДобавления + Строка;
|
||||
|
||||
ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда
|
||||
|
||||
Строка = Строка + СтрокаДляДобавления;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Строка;
|
||||
|
||||
КонецФункции
|
||||
|
74
tests/fixtures/ИсправлениеНеКаноническогоНаписания.bsl
vendored
Normal file
74
tests/fixtures/ИсправлениеНеКаноническогоНаписания.bsl
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
#Область ХорошихПеременных
|
||||
Перем пер1
|
||||
#КонецОбласти
|
||||
|
||||
#область ПлохихПеременных
|
||||
|
||||
ПЕРЕМ пер1;
|
||||
перем пер3;
|
||||
//ПEрем пер4
|
||||
// ПEрем пер5
|
||||
Перем пер6; //если тут будет текст его не заменит
|
||||
|
||||
|
||||
#КонецОБласти
|
||||
|
||||
&НаКлиентенаСервере
|
||||
ПРоцедура тест()
|
||||
конецпроцедуры
|
||||
|
||||
&Насервере
|
||||
процедура СКомментарием() // Комментарий
|
||||
КонецПроцедуры
|
||||
|
||||
&Наклиенте
|
||||
функция ТестовыйУжас(ЗНАЧ пар)
|
||||
#если КлиенТ ИЛИ сервер #тогда
|
||||
перейти МеткаВыход :
|
||||
#Конецесли
|
||||
|
||||
если истина тогда Сообщить(не(ложь и null=НеОпределено)); возврат Неопределено; иначе конецесли;
|
||||
|
||||
пока п1 = п2 цикл // если тогда иначе конецесли;
|
||||
прервать;
|
||||
конеццикла;
|
||||
|
||||
Если ИСТИНА Тогда
|
||||
Сообщить();
|
||||
иначеЕсли ЛОЖЬ Тогда
|
||||
попытка
|
||||
Переменная1 = новый Массив;
|
||||
исключение
|
||||
вызватьИсключение "сложно набирать такой код"
|
||||
конецпопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
#Если НЕ вебклиент и не Тонкийклиент ИЛИ ТолстыйКлиентОбычноеприложение ИЛИ толстыйКлиентУправляемоеПриложение ИЛИ ВнешнееСоединение
|
||||
|
||||
#КонецЕсли
|
||||
|
||||
для каждого Элемент из Переменная1 Цикл
|
||||
выполнить("Сообщить(""Привет"")");
|
||||
КонецЦикла;
|
||||
|
||||
Для i = 1 по 10 Цикл
|
||||
КонецЦикла;
|
||||
|
||||
Соообщить("тут пример однострочника");добавитьОбработчик Накладная.ПриЗаписи Обработка.ПриЗаписиДокумента;Удалитьобработчик Накладная.ПриЗаписи, Обработка.ПриЗаписиДокумента;
|
||||
Возврат ?(истина=истина,ложь,истина);
|
||||
конецфункции
|
||||
|
||||
&НасерверебезКонтекста
|
||||
Процедура тест(Пар1,
|
||||
Пар2,
|
||||
ЗНАЧ пар3)// Комментарий
|
||||
КонецПроцедуры
|
||||
|
||||
&наКлиентеНаСервереБезКонтекста
|
||||
Процедура тест() // Комментарий
|
||||
КонецПроцедуры
|
||||
|
||||
&наКлиентенаСервере
|
||||
Процедура тест() // Комментарий
|
||||
КонецПроцедуры
|
@ -21,7 +21,8 @@
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
|
||||
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные");
|
||||
Возврат ВсеТесты;
|
||||
|
||||
КонецФункции
|
||||
@ -44,6 +45,33 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
|
||||
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
|
||||
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
|
||||
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
|
||||
Ожидаем.Что(Результат, Истина).ЭтоИстина();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
|
||||
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
|
||||
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
|
||||
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
|
||||
ДопНастройки = ПолучитьДополнительныеНастройки();
|
||||
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ДопНастройки);
|
||||
Ожидаем.Что(ДопНастройки.ИзмененныеКаталоги.Количество(), Истина).Равно(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
|
||||
@ -184,8 +212,20 @@
|
||||
Функция ПолучитьДополнительныеНастройки()
|
||||
|
||||
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
|
||||
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками);
|
||||
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками, ИзмененныеКаталоги",
|
||||
Лог, УправлениеНастройками, Новый Массив);
|
||||
|
||||
Возврат ДополнительныеНастройки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПодготовитьИзменяемыйТестовыйФайл(Знач ИмяТестовогоФайла)
|
||||
|
||||
ПутьКТесту = ОбъединитьПути(КаталогТестовыхФикстур(), ИмяТестовогоФайла);
|
||||
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(ИмяТестовогоФайла);
|
||||
КопироватьФайл(ПутьКТесту, ПутьКФайлу);
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
|
||||
Возврат Файл;
|
||||
|
||||
КонецФункции
|
||||
|
@ -5,6 +5,7 @@
|
||||
"ГлобальныеСценарии": [
|
||||
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
||||
"ЗапретИспользованияПерейти.os",
|
||||
"ИсправлениеНеКаноническогоНаписания.os",
|
||||
"КорректировкаXMLФорм.os",
|
||||
"ОтключениеПолнотекстовогоПоиска.os",
|
||||
"ПроверкаДублейПроцедурИФункций.os",
|
||||
|
Loading…
Reference in New Issue
Block a user