mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2025-01-20 02:59:51 +02:00
Merge branch 'release/21.09'
This commit is contained in:
commit
1087ce5bb6
@ -41,8 +41,9 @@
|
||||
- `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`).
|
||||
- `ОбработкаЮнитТестов` - обновляет метод-загрузчик сценариев в общих модулях расширения с unit-тестами (по умолчанию отключен).
|
||||
- `ОтключениеПолнотекстовогоПоиска` - отключает полнотекстовый поиск в файлах описаний метаданных. [См. подробнее](/docs/ОтключениеПолнотекстовогоПоиска.md)
|
||||
- `ОтключениеРазрешенияИзменятьФорму` - снимает флаг `РазрешеноИзменятьФорму` в описаниях форм. [См. подробнее](/docs/ОтключениеРазрешенияИзменятьФорму.md)
|
||||
- `ПроверкаДублейПроцедурИФункций` - проверяет уникальность названий процедур и функций в модулях.
|
||||
- `ПроверкаКорректностиДирективКомпиляции` - проверяет корректность написания директив компиляции в модулях.
|
||||
- `ПроверкаКорректностиИнструкцийПрепроцессора` - проверяет корректность написания инструкций препроцессора в модулях.
|
||||
- `ПроверкаКорректностиОбластей` - проверяет корректность "скобок" областей в модулях (парность и последовательность).
|
||||
- `ПроверкаНецензурныхСлов` - проверяет наличие нецензурных слов в модулях. [См. подробнее](/docs/ПроверкаНецензурныхСлов.md)
|
||||
- `РазборОбычныхФормНаИсходники` - раскладывает файлы обычных форм (`Form.bin`) на исходные файлы с помощью инструмента `v8unpack`.
|
||||
|
12
docs/ОтключениеРазрешенияИзменятьФорму.md
Normal file
12
docs/ОтключениеРазрешенияИзменятьФорму.md
Normal file
@ -0,0 +1,12 @@
|
||||
# Сценарий `ОтключениеРазрешенияИзменятьФорму`
|
||||
|
||||
Cнимает флаг `РазрешеноИзменятьФорму` в описаниях форм.
|
||||
|
||||
При выполнении команды `precommit` вызывается только для новых объектов.
|
||||
При выполнении команды `exec-rules` не выполняется по умолчанию. Для выполнения этого сценария необходимо явно указать его при запуске команды в параметре `rules`
|
||||
```
|
||||
precommit4onec exec-rules C:\МойЛучшийРепозиторий -source-dir МойЛучшийИсходныйКод\НоваяПапка4 -rules ОтключениеРазрешенияИзменятьФорму
|
||||
```
|
||||
```
|
||||
precommit4onec exec-rules C:\МойЛучшийРепозиторий -source-dir МойЛучшийИсходныйКод\НоваяПапка4 -rules "ОтключениеРазрешенияИзменятьФорму,ПроверкаНецензурныхСлов"
|
||||
```
|
@ -40,6 +40,7 @@ y
|
||||
y
|
||||
y
|
||||
y
|
||||
y
|
||||
local
|
||||
n
|
||||
"""
|
||||
@ -58,8 +59,9 @@ n
|
||||
"КорректировкаXMLФорм.os",
|
||||
"ОбработкаЮнитТестов.os",
|
||||
"ОтключениеПолнотекстовогоПоиска.os",
|
||||
"ОтключениеРазрешенияИзменятьФорму.os"
|
||||
"ПроверкаДублейПроцедурИФункций.os",
|
||||
"ПроверкаКорректностиДирективКомпиляции.os",
|
||||
"ПроверкаКорректностиИнструкцийПрепроцессора.os",
|
||||
"ПроверкаКорректностиОбластей.os",
|
||||
"ПроверкаНецензурныхСлов.os",
|
||||
"РазборОбычныхФормНаИсходники.os",
|
||||
|
@ -60,16 +60,21 @@
|
||||
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ."
|
||||
Тогда Вывод команды "oscript" содержит "обнаружены нецензурные слова"
|
||||
|
||||
Сценарий: Прекоммит вывел ошибку о некорректных директивах компиляции
|
||||
Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиДирективКомпиляции.bsl" в каталог репозитория "РабочийКаталог"
|
||||
Сценарий: Прекоммит вывел ошибку о некорректных инструкциях препроцессора
|
||||
Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиИнструкцийПрепроцессора.bsl" в каталог репозитория "РабочийКаталог"
|
||||
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ."
|
||||
Тогда Вывод команды "oscript" содержит "ошибка в написании директивы"
|
||||
Тогда Вывод команды "oscript" содержит "ошибка в написании инструкции"
|
||||
|
||||
Сценарий: Прекоммит вывел ошибку о некорректных директивах компиляции
|
||||
Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиДирективКомпиляции2.bsl" в каталог репозитория "РабочийКаталог"
|
||||
Сценарий: Прекоммит вывел ошибку о некорректных инструкциях препроцессона
|
||||
Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиИнструкцийПрепроцессора2.bsl" в каталог репозитория "РабочийКаталог"
|
||||
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ."
|
||||
Тогда Вывод команды "oscript" содержит "ошибки в парности директив #Если и #КонецЕсли."
|
||||
Тогда Вывод команды "oscript" содержит "ошибки в порядке #Если и #КонецЕсли"
|
||||
|
||||
Сценарий: Прекоммит корректно обрабатывает концевые и лидирующие пробелы у инструкций
|
||||
Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиИнструкцийПрепроцессора3.bsl" в каталог репозитория "РабочийКаталог"
|
||||
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ."
|
||||
Тогда Вывод команды "oscript" не содержит "ошибка в написании инструкции"
|
||||
|
||||
Сценарий: Прекоммит использует локальные настройки репозитория вместо глобальных
|
||||
Когда Я копирую каталог "localscenario" из каталога "tests\fixtures" проекта в рабочий каталог
|
||||
И Я копирую файл "v8config.json" из каталога "tests\fixtures" проекта в рабочий каталог
|
||||
|
@ -10,7 +10,7 @@
|
||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.05"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.09"
|
||||
И Вывод команды "oscript" содержит "Установленные настройки:"
|
||||
И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория ="
|
||||
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
|
||||
@ -36,11 +36,11 @@
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит
|
||||
"""
|
||||
precommit4onec v21.05
|
||||
precommit4onec v21.09
|
||||
Установленные настройки: Базовые настройки
|
||||
ИспользоватьСценарииРепозитория = Нет
|
||||
КаталогЛокальныхСценариев =
|
||||
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ДобавлениеТестовВРасширение.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОбработкаЮнитТестов.os,ОтключениеПолнотекстовогоПоиска.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиДирективКомпиляции.os,ПроверкаКорректностиОбластей.os,ПроверкаНецензурныхСлов.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
|
||||
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ДобавлениеТестовВРасширение.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОбработкаЮнитТестов.os,ОтключениеПолнотекстовогоПоиска.os,ОтключениеРазрешенияИзменятьФорму.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиИнструкцийПрепроцессора.os,ПроверкаКорректностиОбластей.os,ПроверкаНецензурныхСлов.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
|
||||
ОтключенныеСценарии =
|
||||
НастройкиСценариев = Соответствие
|
||||
ОтключениеПолнотекстовогоПоиска = Соответствие
|
||||
|
@ -14,7 +14,7 @@
|
||||
Сценарий: Получение версии продукта
|
||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
|
||||
Тогда Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "21.05"
|
||||
И Вывод команды "oscript" содержит "21.09"
|
||||
И Вывод команды "oscript" не содержит "precommit4onec v"
|
||||
И Код возврата команды "oscript" равен 0
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
|
||||
Тогда Вывод команды "oscript" содержит
|
||||
"""
|
||||
precommit4onec v21.05
|
||||
precommit4onec v21.09
|
||||
Возможные команды:
|
||||
help - Выводит справку по командам
|
||||
version - Выводит версию приложения
|
||||
@ -37,7 +37,7 @@
|
||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
|
||||
Тогда Вывод команды "oscript" содержит
|
||||
"""
|
||||
precommit4onec v21.05
|
||||
precommit4onec v21.09
|
||||
Возможные команды:
|
||||
help - Выводит справку по командам
|
||||
version - Выводит версию приложения
|
||||
|
@ -18,7 +18,7 @@
|
||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.05"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.09"
|
||||
И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||
|
||||
@ -28,14 +28,14 @@
|
||||
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.05"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.09"
|
||||
И Вывод команды "oscript" содержит "не является репозиторием git"
|
||||
|
||||
Сценарий: Установка precommit4onec во вложенные каталоги
|
||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.05"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.09"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
|
||||
|
||||
@ -51,6 +51,6 @@
|
||||
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.05"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v21.09"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
|
||||
|
@ -84,9 +84,15 @@
|
||||
|
||||
ИменаЗагружаемыхСценариев = Неопределено;
|
||||
ПараметрИменаЗагружаемыхСценариев = ПараметрыКоманды["-rules"];
|
||||
ЗатребованныеСценарии = Новый Массив;
|
||||
|
||||
Если ЗначениеЗаполнено(ПараметрИменаЗагружаемыхСценариев) Тогда
|
||||
ПараметрИменаЗагружаемыхСценариев = СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, " ", "");
|
||||
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаЗагружаемыхСценариев, ",", Ложь);
|
||||
|
||||
// Остаются только имена, чтобы сравнивать в сценариях по имени
|
||||
ЗатребованныеСценарии = СтрРазделить(СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, ".os", ""), ",", Ложь);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(АдресПоискаКонфигурационногоФайла);
|
||||
@ -124,7 +130,8 @@
|
||||
ПараметрыОбработки.Настройки = НастройкаОбработки.НастройкиСценариев.Получить("НастройкиСценариев");
|
||||
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = КаталогиИсходныхПоФайлам.Получить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
ПараметрыОбработки.ЗатребованныеСценарии = ЗатребованныеСценарии;
|
||||
|
||||
Для Каждого СценарийОбработки Из НастройкаОбработки.СценарииОбработки Цикл
|
||||
|
||||
Попытка
|
||||
|
@ -65,13 +65,14 @@
|
||||
ПараметрыОбработки.Лог = Лог;
|
||||
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = ТекущийКаталогИсходныхФайлов;
|
||||
|
||||
ФайлыКОбработке = Новый ТаблицаЗначений();
|
||||
ФайлыКОбработке.Колонки.Добавить("Файл");
|
||||
ФайлыКОбработке.Колонки.Добавить("ТипИзменения");
|
||||
|
||||
ФайлыКОбработке = Новый Массив();
|
||||
|
||||
|
||||
Для каждого Изменение Из ЖурналИзменений Цикл
|
||||
|
||||
ФайлыКОбработке.Добавить(Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла)));
|
||||
|
||||
ДобавитьКОбработке(ФайлыКОбработке, Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла)), Изменение.ТипИзменения);
|
||||
КонецЦикла;
|
||||
|
||||
ВыполнитьОбработкуФайлов(ФайлыКОбработке, НаборНастроек, ПараметрыОбработки);
|
||||
@ -90,6 +91,11 @@
|
||||
КонецФункции // ВыполнитьКоманду
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Процедура ДобавитьКОбработке(СпиоскФ, ДобавляемыйФ, ТипИзменения)
|
||||
Строка = СпиоскФ.Добавить();
|
||||
Строка.Файл = ДобавляемыйФ;
|
||||
Строка.ТипИзменения = ТипИзменения;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыполнитьОбработкуФайлов(Файлы, НаборНастроек, ПараметрыОбработки)
|
||||
|
||||
@ -97,7 +103,7 @@
|
||||
Ит = 0;
|
||||
Пока Ит < Файлы.Количество() Цикл
|
||||
|
||||
АнализируемыйФайл = Файлы[Ит];
|
||||
АнализируемыйФайл = Файлы[Ит].Файл;
|
||||
Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя);
|
||||
|
||||
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
|
||||
@ -118,6 +124,8 @@
|
||||
|
||||
ПараметрыОбработки.Настройки = НастройкиСценариев.Получить("НастройкиСценариев");
|
||||
|
||||
ПараметрыОбработки.ТипИзменения = Файлы[Ит].ТипИзменения;
|
||||
|
||||
Для Каждого СценарийОбработки Из СценарииОбработкиФайлов Цикл
|
||||
|
||||
ФайлОбработан = СценарийОбработки.ОбработатьФайл(АнализируемыйФайл,
|
||||
@ -130,7 +138,7 @@
|
||||
|
||||
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
|
||||
|
||||
Файлы.Добавить(ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки));
|
||||
ДобавитьКОбработке(Файлы, ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки), ВариантИзмененийФайловGit.Изменен);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
//
|
||||
Функция ВерсияПродукта() Экспорт
|
||||
|
||||
Возврат "21.05";
|
||||
Возврат "21.09";
|
||||
|
||||
КонецФункции // ВерсияПродукта
|
||||
|
||||
|
@ -22,4 +22,24 @@
|
||||
|
||||
Возврат Элементы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создать
|
||||
// Создает объект встроенного языка и возвращает его
|
||||
// Параметры:
|
||||
// ТекстВыражения - Строка - Текст выражения
|
||||
// ИгнорироватьРегистр - Булево - Если включено, регистр символов не важен для поиска
|
||||
// Многострочный - Булево - Если включено, ^ и $ соответствуют началу и концу строки
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// РегулярноеВыражение - Объект
|
||||
//
|
||||
Функция Создать(ТекстВыражения, ИгнорироватьРегистр = Истина, Многострочный = Истина) Экспорт
|
||||
|
||||
Выражение = Новый РегулярноеВыражение(ТекстВыражения);
|
||||
Выражение.ИгнорироватьРегистр = Истина;
|
||||
Выражение.Многострочный = Истина;
|
||||
|
||||
Возврат Выражение;
|
||||
|
||||
КонецФункции
|
@ -111,6 +111,8 @@
|
||||
ПараметрыОбработки.Вставить("КаталогРепозитория", Неопределено);
|
||||
ПараметрыОбработки.Вставить("ТекущийКаталогИсходныхФайлов", Неопределено);
|
||||
ПараметрыОбработки.Вставить("Настройки", Неопределено);
|
||||
ПараметрыОбработки.Вставить("ТипИзменения", ВариантИзмененийФайловGit.Изменен);
|
||||
ПараметрыОбработки.Вставить("ЗатребованныеСценарии", Новый Массив);
|
||||
|
||||
Возврат ПараметрыОбработки;
|
||||
|
||||
|
@ -174,10 +174,24 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0;
|
||||
Возврат ЭтоФайлОписанияФормыКонфигуратора(Файл) ИЛИ ЭтоФайлОписанияФормыEDT(Файл);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ЭтоФайлОписанияФормыEDT
|
||||
// Возвращает истину, если файл является файлом описания формы в формате конфигуратора
|
||||
// Параметры:
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
//
|
||||
Функция ЭтоФайлОписанияФормыКонфигуратора(Файл)
|
||||
|
||||
Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0;
|
||||
КонецФункции
|
||||
|
||||
|
||||
// ЭтоФайлОписанияФормыEDT
|
||||
// Возвращает истину, если файл является файлом описания формы в формате EDT
|
||||
// Параметры:
|
||||
|
129
src/СценарииОбработки/ОтключениеРазрешенияИзменятьФорму.os
Normal file
129
src/СценарииОбработки/ОтключениеРазрешенияИзменятьФорму.os
Normal file
@ -0,0 +1,129 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов <ОтключениеПолнотекстовогоПоиска>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ИмяСценария
|
||||
// Возвращает имя сценария обработки файлов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Имя текущего сценария обработки файлов
|
||||
//
|
||||
Функция ИмяСценария() Экспорт
|
||||
|
||||
Возврат "ОтключениеРазрешенияИзменятьФорму";
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
// Параметры:
|
||||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак выполненной обработки файла
|
||||
//
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
|
||||
Если НЕ АнализируемыйФайл.Существует() ИЛИ НЕ ТипыФайлов.ЭтоФайлОписанияФормы(АнализируемыйФайл) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ФайлДобавлен = ДополнительныеПараметры.Свойство("ТипИзменения") И
|
||||
ДополнительныеПараметры.ТипИзменения = ВариантИзмененийФайловGit.Добавлен;
|
||||
|
||||
// При передаче через параметр команды exec-rules т.к. поведение ТипИзменения лучше не переопределять,
|
||||
// ибо могут быть сайд эффекты
|
||||
ЯвныйЗапускСценария = ДополнительныеПараметры.Свойство("ЗатребованныеСценарии") И
|
||||
ДополнительныеПараметры.ЗатребованныеСценарии.Найти(ИмяСценария()) <> Неопределено;
|
||||
|
||||
Если ФайлДобавлен ИЛИ ЯвныйЗапускСценария Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ЭтоЕДТ = ТипыФайлов.ЭтоФайлОписанияФормыEDT(АнализируемыйФайл);
|
||||
|
||||
Если ОтключитьРазрешить(АнализируемыйФайл.ПолноеИмя, ЭтоЕДТ) Тогда
|
||||
|
||||
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Функция ОтключитьРазрешить(Знач ИмяФайла, ЭтоЕДТ)
|
||||
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
СодержимоеФайла = ТекстФайла;
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если ЭтоЕДТ Тогда
|
||||
|
||||
Регексп = РегулярныеВыражения.Создать("(<allowFormCustomize>)(true)(<\/allowFormCustomize>)");
|
||||
|
||||
Совпадения = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
Если Совпадения.Количество() = 0 Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1false$3");
|
||||
|
||||
Иначе
|
||||
// В случае выгрузки кофигуратора может быть 3 состояния тега Customizable
|
||||
// Тег отсутствует - значит по умолчанию включен и надо добавить его со значением false
|
||||
// Тег присутствует и имеет значение true. Надо изменить значение
|
||||
// Тег присутствует и имеет значение false. Ничего делать не надо
|
||||
|
||||
Регексп = РегулярныеВыражения.Создать("(<Customizable>)(true|false)(<\/Customizable>)");
|
||||
|
||||
Совпадения = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
Если Совпадения.Количество() = 0 Тогда // по умолчанию включено, следовательно надо добавить этот тег
|
||||
|
||||
Регексп = РегулярныеВыражения.Создать("(^(.*)<WindowOpeningMode>.+$)"); // цепляем к стабильному тегу сохраняя пробелы
|
||||
ШаблонЗамены = СтрШаблон("%1%2%3%4%5", "$1", Символы.ПС, "$2", "<Customizable>false</Customizable>", Символы.ПС);
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, ШаблонЗамены);
|
||||
|
||||
ИначеЕсли Совпадения[0].Группы[2].Значение = "true" Тогда // проверим тег и изменим его если надо
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1false$3");
|
||||
|
||||
Иначе // Тег уже false
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
@ -1,6 +1,6 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов <ПроверкаКорректностиОбластей>
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов <ПроверкаКорректностиИнструкцийПрепроцессора>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
//
|
||||
Функция ИмяСценария() Экспорт
|
||||
|
||||
Возврат "ПроверкаКорректностиДирективКомпиляции";
|
||||
Возврат "ПроверкаКорректностиИнструкцийПрепроцессора";
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
// Параметры:
|
||||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ПроверитьНаКорректностьДиректив(АнализируемыйФайл.ПолноеИмя);
|
||||
ПроверитьНаКорректностьИнструкций(АнализируемыйФайл.ПолноеИмя);
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
@ -51,89 +51,115 @@
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Процедура ПроверитьНаКорректностьДиректив(ПутьКФайлуМодуля)
|
||||
Процедура ПроверитьНаКорректностьИнструкций(ПутьКФайлуМодуля)
|
||||
|
||||
МассивКлючевыхСлов = ПолучитьМассивИнструкций();
|
||||
|
||||
МассивКлючевыхСлов = ПолучитьМассивДиректив();
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
|
||||
ТекстРазбора = Новый ТекстовыйДокумент;
|
||||
ТекстРазбора.УстановитьТекст(СодержимоеФайла);
|
||||
ВсегоСтрок = ТекстРазбора.КоличествоСтрок();
|
||||
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("^[\t ]*?#[\t ]*?(?:(?:Если+?)|(?:КонецЕсли))[\t ]*?");
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("^[\t ]*?#[\t ]*?(?:(?:Если+?)|(?:КонецЕсли)|)[\t\n ]+?");
|
||||
ШаблонПоиска.Многострочный = Истина;
|
||||
ШаблонПоиска.ИгнорироватьРегистр = Истина;
|
||||
|
||||
СовпаденияПоКолличеству = ШаблонПоиска.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("^\s?#Если([\W\w]+?)^\s?#КонецЕсли");
|
||||
СовпаденияПоСтруктуре = ШаблонПоиска.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
Если СовпаденияПоКолличеству.Количество() <> СовпаденияПоСтруктуре.Количество() * 2 Тогда
|
||||
|
||||
Совпадения = ШаблонПоиска.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
// Инструкций нет вообще
|
||||
Если Совпадения.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Уровень = 0;
|
||||
Для Каждого Совпадение Из Совпадения Цикл
|
||||
|
||||
ТекстОшибки = СтрШаблон("В файле '%1' ошибки в парности директив #Если и #КонецЕсли.", ПутьКФайлуМодуля);
|
||||
Инструкция = СтрЗаменить(Нрег(СокрЛП(Совпадение.Группы[0].Значение)), "#", "");
|
||||
|
||||
Если Инструкция = "если" Тогда
|
||||
Уровень = Уровень + 1;
|
||||
ИначеЕсли Инструкция = "конецесли" Тогда
|
||||
Уровень = Уровень - 1;
|
||||
КонецЕсли;
|
||||
|
||||
Если Уровень < 0 Тогда
|
||||
НомерСтроки = СтрЧислоСтрок(Лев(СодержимоеФайла, Совпадение.Индекс));
|
||||
ТекстОшибки = СтрШаблон("'%1' ошибки в порядке #Если и #КонецЕсли стр. '%2'", ПутьКФайлуМодуля, НомерСтроки);
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если Уровень <> 0 Тогда
|
||||
ТекстОшибки = СтрШаблон("'%1' ошибки в парности #Если и #КонецЕсли.", ПутьКФайлуМодуля);
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Для Ит = 1 По ВсегоСтрок Цикл
|
||||
|
||||
СтрокаМодуля = СокрЛ(ТекстРазбора.ПолучитьСтроку(Ит));
|
||||
|
||||
Если ПустаяСтрока(СтрокаМодуля) ИЛИ Не СтрНачинаетсяС(СтрокаМодуля, "#") ИЛИ СтрНачинаетсяС(СтрокаМодуля, "#Область") Тогда
|
||||
ЕстьИнструкция = СтрНачинаетсяС(СтрокаМодуля, "#") И НЕ СтрНачинаетсяС(СтрокаМодуля, "#Область");
|
||||
|
||||
Если НЕ ЕстьИнструкция Тогда
|
||||
|
||||
Продолжить;
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
СтрокаМодуля = Прав(СтрокаМодуля, СтрДлина(СтрокаМодуля) - 1);
|
||||
|
||||
|
||||
МассивПодстрок = СтрРазделить(СтрокаМодуля, " ()", Ложь);
|
||||
|
||||
Для Каждого Директива Из МассивПодстрок Цикл
|
||||
|
||||
Если МассивКлючевыхСлов.Найти(Директива) = Неопределено Тогда
|
||||
|
||||
ТекстОшибки = СтрШаблон("В файле '%1' ошибка в написании директивы '%2' в строке '%3'", ПутьКФайлуМодуля, Директива, Ит);
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
||||
|
||||
Для Каждого Инструкция Из МассивПодстрок Цикл
|
||||
|
||||
Инструкция = СокрЛП(Инструкция);
|
||||
|
||||
Если ПустаяСтрока(Инструкция) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если МассивКлючевыхСлов.Найти(НРег(Инструкция)) = Неопределено Тогда
|
||||
|
||||
ТекстОшибки = СтрШаблон("'%1' ошибка в написании инструкции '%2' стр. '%3'", ПутьКФайлуМодуля, Инструкция, Ит);
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьМассивДиректив()
|
||||
|
||||
Функция ПолучитьМассивИнструкций()
|
||||
|
||||
МассивКлючевыхСлов = Новый Массив();
|
||||
|
||||
МассивКлючевыхСлов.Добавить("Если");
|
||||
МассивКлючевыхСлов.Добавить("Тогда");
|
||||
МассивКлючевыхСлов.Добавить("ИначеЕсли");
|
||||
МассивКлючевыхСлов.Добавить("Иначе");
|
||||
МассивКлючевыхСлов.Добавить("КонецЕсли");
|
||||
МассивКлючевыхСлов.Добавить("НаКлиенте");
|
||||
МассивКлючевыхСлов.Добавить("НаСервере");
|
||||
МассивКлючевыхСлов.Добавить("Сервер");
|
||||
МассивКлючевыхСлов.Добавить("Клиент");
|
||||
МассивКлючевыхСлов.Добавить("МобильноеПриложениеКлиент");
|
||||
МассивКлючевыхСлов.Добавить("МобильноеПриложениеСервер");
|
||||
МассивКлючевыхСлов.Добавить("ТолстыйКлиентОбычноеПриложение");
|
||||
МассивКлючевыхСлов.Добавить("ТолстыйКлиентУправляемоеПриложение");
|
||||
МассивКлючевыхСлов.Добавить("ВнешнееСоединение");
|
||||
МассивКлючевыхСлов.Добавить("ТонкийКлиент");
|
||||
МассивКлючевыхСлов.Добавить("ВебКлиент");
|
||||
МассивКлючевыхСлов.Добавить("КонецОбласти");
|
||||
МассивКлючевыхСлов.Добавить("И");
|
||||
МассивКлючевыхСлов.Добавить("ИЛИ");
|
||||
МассивКлючевыхСлов.Добавить("НЕ");
|
||||
|
||||
|
||||
МассивКлючевыхСлов.Добавить("если");
|
||||
МассивКлючевыхСлов.Добавить("тогда");
|
||||
МассивКлючевыхСлов.Добавить("иначеесли");
|
||||
МассивКлючевыхСлов.Добавить("иначе");
|
||||
МассивКлючевыхСлов.Добавить("конецесли");
|
||||
МассивКлючевыхСлов.Добавить("наклиенте");
|
||||
МассивКлючевыхСлов.Добавить("насервере");
|
||||
МассивКлючевыхСлов.Добавить("сервер");
|
||||
МассивКлючевыхСлов.Добавить("клиент");
|
||||
МассивКлючевыхСлов.Добавить("мобильноеприложениеклиент");
|
||||
МассивКлючевыхСлов.Добавить("мобильноеприложениесервер");
|
||||
МассивКлючевыхСлов.Добавить("толстыйклиентобычноеприложение");
|
||||
МассивКлючевыхСлов.Добавить("толстыйклиентуправляемоеприложение");
|
||||
МассивКлючевыхСлов.Добавить("внешнеесоединение");
|
||||
МассивКлючевыхСлов.Добавить("тонкийклиент");
|
||||
МассивКлючевыхСлов.Добавить("вебклиент");
|
||||
МассивКлючевыхСлов.Добавить("конецобласти");
|
||||
МассивКлючевыхСлов.Добавить("и");
|
||||
МассивКлючевыхСлов.Добавить("или");
|
||||
МассивКлючевыхСлов.Добавить("не");
|
||||
|
||||
Возврат МассивКлючевыхСлов;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
@ -19,7 +19,7 @@
|
||||
#Иначе
|
||||
|
||||
#КонецЕсли
|
||||
|
||||
#КонецЕсли
|
||||
Процедура КнопкаВыполнитьНажатие(Кнопка)
|
||||
// Вставить содержимое обработчика.
|
||||
КонецПроцедуры
|
30
tests/fixtures/ПроверкаКорректностиИнструкцийПрепроцессора3.bsl
vendored
Normal file
30
tests/fixtures/ПроверкаКорректностиИнструкцийПрепроцессора3.bsl
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
&НаКлиенте
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
&НаКлиентеНаСервереБезКонтекст
|
||||
|
||||
#ИначеЕсли
|
||||
|
||||
#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
|
||||
#ИначеЕсли (ТолстыйКлиентУправляемоеПриложение И ТолстыйКлиентОбычноеПриложение) Тогда
|
||||
|
||||
#Если (МобильноеПриложениеКлиент ИЛИ МобильноеПриложениеСервер Тогда)
|
||||
#ИначеЕсли (ТолстыйКлиентОбычноеПриложение ИЛИ НЕ ТолстыйКлиентУправляемоеПриложение)
|
||||
#Иначе
|
||||
#КонецЕсли
|
||||
|
||||
#Если НаКлиенте ИЛИ НаСервере
|
||||
#КонецЕсли
|
||||
|
||||
|
||||
#Если Сервер ИЛИ НЕ Клиент
|
||||
#КонецЕсли
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
&ВнешнееСоединение
|
||||
&ТонкийКлиент
|
||||
&ВебКлиент
|
||||
#КонецОбласти
|
@ -84,7 +84,7 @@
|
||||
"КорректировкаXMLФорм.os",
|
||||
"ОтключениеПолнотекстовогоПоиска.os",
|
||||
"ПроверкаДублейПроцедурИФункций.os",
|
||||
"ПроверкаКорректностиДирективКомпиляции.os",
|
||||
"ПроверкаКорректностиИнструкцийПрепроцессора.os",
|
||||
"ПроверкаНецензурныхСлов.os",
|
||||
"РазборОбычныхФормНаИсходники.os",
|
||||
"РазборОтчетовОбработокРасширений.os",
|
||||
|
@ -31,6 +31,7 @@
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеОбрабатываетНегативныеКейсы");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы");
|
||||
|
||||
Возврат ВсеТесты;
|
||||
|
||||
@ -290,7 +291,7 @@
|
||||
ПараметрыМетода[1] = ПараметрыМетода[0].Путь;
|
||||
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение("не заполнен параметр 'ДополнительныеПараметры.КаталогРепозитория'");
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Проверка репозитория.
|
||||
КаталогРепозитория = МенеджерВременныхФайлов.СоздатьКаталог();
|
||||
КаталогКонфигурации = ОбъединитьПути(КаталогРепозитория, "configuration");
|
||||
@ -325,7 +326,7 @@
|
||||
Сообщение = "Обработался файл при отсутствии тестового расширения";
|
||||
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Проверка файла.
|
||||
КаталогТестов = ОбъединитьПути(КаталогРепозитория, "tests");
|
||||
КаталогИсходниковТестов = ОбъединитьПути(КаталогТестов, "src");
|
||||
@ -380,7 +381,7 @@
|
||||
Сообщение = СтрШаблон("Обработался файл неподходящего объекта метаданных '%1'", ФайлНеизвестногоОбъектаМетаданных.ПолноеИмя);
|
||||
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Контроль корректности проведенных проверок.
|
||||
Результат = ОбъектСценария.ОбработатьФайл(
|
||||
ПодходящийФайл,
|
||||
@ -389,7 +390,7 @@
|
||||
Сообщение = СтрШаблон("Не обработался подходящий файл '%1'", ПодходящийФайл.ПолноеИмя);
|
||||
Ожидаем.Что(Результат, Сообщение).ЭтоИстина();
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов() Экспорт
|
||||
@ -489,6 +490,97 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
#Область ОтключениеРазрешенияИзменятьФорму
|
||||
|
||||
Процедура ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы() Экспорт
|
||||
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("123", "test.os");
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ОтключениеРазрешенияИзменятьФорму.os");
|
||||
|
||||
Настройки = ПолучитьДополнительныеНастройки();
|
||||
Настройки.ТипИзменения = ВариантИзмененийФайловGit.Добавлен;
|
||||
|
||||
// сценарий не берет файлы с расширением .os
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, Ложь).ЭтоЛожь();
|
||||
|
||||
// файл обработан
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("123", "Form.form", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, "Ошибка обработки формы edt формата").ЭтоИстина();
|
||||
|
||||
|
||||
// файл обработан
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("123", "Form.xml", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина();
|
||||
|
||||
// файл не изменен
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("<allowFormCustomize>false</allowFormCustomize>", "Form.form", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
Ожидаем.Что(ТекстФайла, "Файл изменился, а не должен был").Равно("<allowFormCustomize>false</allowFormCustomize>");
|
||||
|
||||
// файл обработан
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("<allowFormCustomize>true</allowFormCustomize>", "Form.form", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, "Ошибка обработки формы формата edt").ЭтоИстина();
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("false");
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("<allowFormCustomize>false</allowFormCustomize>");
|
||||
|
||||
|
||||
|
||||
// файл обработан
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>", "Form.xml", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина();
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false");
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("<Customizable>false</Customizable>");
|
||||
|
||||
// файл обработан
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>
|
||||
|<Customizable>true</Customizable>", "Form.xml", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина();
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false");
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("<Customizable>false</Customizable>");
|
||||
|
||||
// файл обработан
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>
|
||||
|<Customizable>false</Customizable>", "Form.xml", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина();
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false");
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("<Customizable>false</Customizable>");
|
||||
|
||||
|
||||
|
||||
// файл обработан. При этом сценарий реагирует только на `добавленные` файлы, но был вызван явно через передачу параметра
|
||||
Настройки = ПолучитьДополнительныеНастройки();
|
||||
Настройки.ЗатребованныеСценарии = Новый Массив;
|
||||
Настройки.ЗатребованныеСценарии.Добавить(ОбъектСценария.ИмяСценария());
|
||||
Настройки.ТипИзменения = ВариантИзмененийФайловGit.Изменен;
|
||||
|
||||
Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("<allowFormCustomize>true</allowFormCustomize>", "Form.form", Истина);
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Ожидаем.Что(Результат, "Ошибка обработки формы формата edt").ЭтоИстина();
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("false");
|
||||
Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("<allowFormCustomize>false</allowFormCustomize>");
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Служебные
|
||||
@ -589,6 +681,25 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПодготовитьИзменяемыйТестовыйФайлИзТекста(Знач Текст, Знач Имя, СтрогоеСоответствие = Ложь)
|
||||
|
||||
Если СтрогоеСоответствие Тогда
|
||||
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьКаталог();
|
||||
ПутьКФайлу = ОбъединитьПути(ПутьКФайлу, Имя);
|
||||
Иначе
|
||||
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(Имя);
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу);
|
||||
ЗаписьТекста.Записать(Текст);
|
||||
ЗаписьТекста.Закрыть();
|
||||
|
||||
Возврат Файл;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ИспользоватьТестовуюНастройку(КаталогРепозитория, ИмяФайлаНастройки)
|
||||
|
||||
КопироватьФайл(
|
||||
@ -682,4 +793,4 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
#КонецОбласти
|
@ -15,7 +15,7 @@
|
||||
юТест = ЮнитТестирование;
|
||||
|
||||
ВсеТесты = Новый Массив;
|
||||
|
||||
|
||||
ВсеТесты.Добавить("Тест_ИспользованиеГлобальныхНастроек");
|
||||
ВсеТесты.Добавить("Тест_ИспользованиеЛокальныхНастроек");
|
||||
ВсеТесты.Добавить("Тест_ОтключенныеНастройки");
|
||||
@ -94,7 +94,8 @@
|
||||
ОжидаемыеСценарии.Добавить("ОбработкаЮнитТестов.os");
|
||||
ОжидаемыеСценарии.Добавить("ПроверкаНецензурныхСлов.os");
|
||||
ОжидаемыеСценарии.Добавить("ОтключениеПолнотекстовогоПоиска.os");
|
||||
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиДирективКомпиляции.os");
|
||||
ОжидаемыеСценарии.Добавить("ОтключениеРазрешенияИзменятьФорму.os");
|
||||
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиИнструкцийПрепроцессора.os");
|
||||
ОжидаемыеСценарии.Добавить("ПроверкаДублейПроцедурИФункций.os");
|
||||
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиОбластей.os");
|
||||
ОжидаемыеСценарии.Добавить("РазборОбычныхФормНаИсходники.os");
|
||||
@ -248,7 +249,7 @@
|
||||
|
||||
Ожидаем.Что(ГлобальныеСценарии, "Нет глобальных сценариев").Заполнено();
|
||||
|
||||
Ожидаем.Что(ГлобальныеСценарии.Количество(), "Не корректный список сценариев").Равно(ОжидаемыеСценарии.Количество());
|
||||
Ожидаем.Что(ГлобальныеСценарии.Количество(), "Некорректный список сценариев").Равно(ОжидаемыеСценарии.Количество());
|
||||
|
||||
Для каждого ИмяСценария Из ОжидаемыеСценарии Цикл
|
||||
|
||||
|
@ -10,8 +10,9 @@
|
||||
"КорректировкаXMLФорм.os",
|
||||
"ОбработкаЮнитТестов.os",
|
||||
"ОтключениеПолнотекстовогоПоиска.os",
|
||||
"ОтключениеРазрешенияИзменятьФорму.os",
|
||||
"ПроверкаДублейПроцедурИФункций.os",
|
||||
"ПроверкаКорректностиДирективКомпиляции.os",
|
||||
"ПроверкаКорректностиИнструкцийПрепроцессора.os",
|
||||
"ПроверкаКорректностиОбластей.os",
|
||||
"ПроверкаНецензурныхСлов.os",
|
||||
"РазборОбычныхФормНаИсходники.os",
|
||||
|
Loading…
x
Reference in New Issue
Block a user