1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-11-28 08:48:45 +02:00

ONECICD-498 / Отключение флага "Разрешить изменять форму" для новых форм.

This commit is contained in:
Медведев Дмитрий Александрович (000095681) 2021-09-27 08:27:25 +03:00 committed by Максимов Валерий Валерьевич (000044217)
parent 98a07309af
commit 898a6a0b01
14 changed files with 326 additions and 18 deletions

View File

@ -41,6 +41,7 @@
- `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`).
- `ОбработкаЮнитТестов` - обновляет метод-загрузчик сценариев в общих модулях расширения с unit-тестами (по умолчанию отключен).
- `ОтключениеПолнотекстовогоПоиска` - отключает полнотекстовый поиск в файлах описаний метаданных. [См. подробнее](/docs/ОтключениеПолнотекстовогоПоиска.md)
- `ОтключениеРазрешенияИзменятьФорму` - снимает флаг `РазрешеноИзменятьФорму` в описаниях форм. [См. подробнее](/docs/ОтключениеРазрешенияИзменятьФорму.md)
- `ПроверкаДублейПроцедурИФункций` - проверяет уникальность названий процедур и функций в модулях.
- `ПроверкаКорректностиИнструкцийПрепроцессора` - проверяет корректность написания инструкций препроцессора в модулях.
- `ПроверкаКорректностиОбластей` - проверяет корректность "скобок" областей в модулях (парность и последовательность).

View 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 "ОтключениеРазрешенияИзменятьФорму,ПроверкаНецензурныхСлов"
```

View File

@ -40,6 +40,7 @@ y
y
y
y
y
local
n
"""
@ -58,6 +59,7 @@ n
"КорректировкаXMLФорм.os",
"ОбработкаЮнитТестов.os",
"ОтключениеПолнотекстовогоПоиска.os",
"ОтключениеРазрешенияИзменятьФорму.os"
"ПроверкаДублейПроцедурИФункций.os",
"ПроверкаКорректностиИнструкцийПрепроцессора.os",
"ПроверкаКорректностиОбластей.os",

View File

@ -68,7 +68,7 @@
Сценарий: Прекоммит вывел ошибку о некорректных инструкциях препроцессона
Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиИнструкцийПрепроцессора2.bsl" в каталог репозитория "РабочийКаталог"
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ."
Тогда Вывод команды "oscript" содержит "ошибки в порядке #Если и #КонецЕсли."
Тогда Вывод команды "oscript" содержит "ошибки в порядке #Если и #КонецЕсли"
Сценарий: Прекоммит корректно обрабатывает концевые и лидирующие пробелы у инструкций
Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиИнструкцийПрепроцессора3.bsl" в каталог репозитория "РабочийКаталог"

View File

@ -40,7 +40,7 @@
Установленные настройки: Базовые настройки
ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев =
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.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
ОтключенныеСценарии =
НастройкиСценариев = Соответствие
ОтключениеПолнотекстовогоПоиска = Соответствие

View File

@ -84,9 +84,15 @@
ИменаЗагружаемыхСценариев = Неопределено;
ПараметрИменаЗагружаемыхСценариев = ПараметрыКоманды["-rules"];
ЗатребованныеСценарии = Новый Массив;
Если ЗначениеЗаполнено(ПараметрИменаЗагружаемыхСценариев) Тогда
ПараметрИменаЗагружаемыхСценариев = СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, " ", "");
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаЗагружаемыхСценариев, ",", Ложь);
// Остаются только имена, чтобы сравнивать в сценариях по имени
ЗатребованныеСценарии = СтрРазделить(СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, ".os", ""), ",", Ложь);
КонецЕсли;
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(АдресПоискаКонфигурационногоФайла);
@ -124,7 +130,8 @@
ПараметрыОбработки.Настройки = НастройкаОбработки.НастройкиСценариев.Получить("НастройкиСценариев");
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = КаталогиИсходныхПоФайлам.Получить(АнализируемыйФайл.ПолноеИмя);
ПараметрыОбработки.ЗатребованныеСценарии = ЗатребованныеСценарии;
Для Каждого СценарийОбработки Из НастройкаОбработки.СценарииОбработки Цикл
Попытка

View File

@ -65,13 +65,14 @@
ПараметрыОбработки.Лог = Лог;
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = ТекущийКаталогИсходныхФайлов;
ФайлыКОбработке = Новый ТаблицаЗначений();
ФайлыКОбработке.Колонки.Добавить("Файл");
ФайлыКОбработке.Колонки.Добавить("ТипИзменения");
ФайлыКОбработке = Новый Массив();
Для каждого Изменение Из ЖурналИзменений Цикл
ФайлыКОбработке.Добавить(Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла)));
ДобавитьКОбработке(ФайлыКОбработке, Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла)), Изменение.ТипИзменения);
КонецЦикла;
ВыполнитьОбработкуФайлов(ФайлыКОбработке, НаборНастроек, ПараметрыОбработки);
@ -90,6 +91,11 @@
КонецФункции // ВыполнитьКоманду
///////////////////////////////////////////////////////////////////////////////
Процедура ДобавитьКОбработке(СпиоскФ, ДобавляемыйФ, ТипИзменения)
Строка = СпиоскФ.Добавить();
Строка.Файл = ДобавляемыйФ;
Строка.ТипИзменения = ТипИзменения;
КонецПроцедуры
Процедура ВыполнитьОбработкуФайлов(Файлы, НаборНастроек, ПараметрыОбработки)
@ -97,7 +103,7 @@
Ит = 0;
Пока Ит < Файлы.Количество() Цикл
АнализируемыйФайл = Файлы[Ит];
АнализируемыйФайл = Файлы[Ит].Файл;
Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя);
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
@ -118,6 +124,8 @@
ПараметрыОбработки.Настройки = НастройкиСценариев.Получить("НастройкиСценариев");
ПараметрыОбработки.ТипИзменения = Файлы[Ит].ТипИзменения;
Для Каждого СценарийОбработки Из СценарииОбработкиФайлов Цикл
ФайлОбработан = СценарийОбработки.ОбработатьФайл(АнализируемыйФайл,
@ -130,7 +138,7 @@
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
Файлы.Добавить(ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки));
ДобавитьКОбработке(Файлы, ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки), ВариантИзмененийФайловGit.Изменен);
КонецЦикла;

View File

@ -22,4 +22,24 @@
Возврат Элементы;
КонецФункции
// Создать
// Создает объект встроенного языка и возвращает его
// Параметры:
// ТекстВыражения - Строка - Текст выражения
// ИгнорироватьРегистр - Булево - Если включено, регистр символов не важен для поиска
// Многострочный - Булево - Если включено, ^ и $ соответствуют началу и концу строки
//
// Возвращаемое значение:
// РегулярноеВыражение - Объект
//
Функция Создать(ТекстВыражения, ИгнорироватьРегистр = Истина, Многострочный = Истина) Экспорт
Выражение = Новый РегулярноеВыражение(ТекстВыражения);
Выражение.ИгнорироватьРегистр = Истина;
Выражение.Многострочный = Истина;
Возврат Выражение;
КонецФункции

View File

@ -111,6 +111,8 @@
ПараметрыОбработки.Вставить("КаталогРепозитория", Неопределено);
ПараметрыОбработки.Вставить("ТекущийКаталогИсходныхФайлов", Неопределено);
ПараметрыОбработки.Вставить("Настройки", Неопределено);
ПараметрыОбработки.Вставить("ТипИзменения", ВариантИзмененийФайловGit.Изменен);
ПараметрыОбработки.Вставить("ЗатребованныеСценарии", Новый Массив);
Возврат ПараметрыОбработки;

View File

@ -174,10 +174,24 @@
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0;
Возврат ЭтоФайлОписанияФормыКонфигуратора(Файл) ИЛИ ЭтоФайлОписанияФормыEDT(Файл);
КонецФункции
// ЭтоФайлОписанияФормыEDT
// Возвращает истину, если файл является файлом описания формы в формате конфигуратора
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияФормыКонфигуратора(Файл)
Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0;
КонецФункции
// ЭтоФайлОписанияФормыEDT
// Возвращает истину, если файл является файлом описания формы в формате EDT
// Параметры:

View 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
Возврат Ложь;
КонецЕсли;
КонецЕсли;
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина;
КонецФункции

View File

@ -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 @@
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -15,7 +15,7 @@
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("Тест_ИспользованиеГлобальныхНастроек");
ВсеТесты.Добавить("Тест_ИспользованиеЛокальныхНастроек");
ВсеТесты.Добавить("Тест_ОтключенныеНастройки");
@ -94,6 +94,7 @@
ОжидаемыеСценарии.Добавить("ОбработкаЮнитТестов.os");
ОжидаемыеСценарии.Добавить("ПроверкаНецензурныхСлов.os");
ОжидаемыеСценарии.Добавить("ОтключениеПолнотекстовогоПоиска.os");
ОжидаемыеСценарии.Добавить("ОтключениеРазрешенияИзменятьФорму.os");
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиИнструкцийПрепроцессора.os");
ОжидаемыеСценарии.Добавить("ПроверкаДублейПроцедурИФункций.os");
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиОбластей.os");
@ -248,7 +249,7 @@
Ожидаем.Что(ГлобальныеСценарии, "Нет глобальных сценариев").Заполнено();
Ожидаем.Что(ГлобальныеСценарии.Количество(), "Не корректный список сценариев").Равно(ОжидаемыеСценарии.Количество());
Ожидаем.Что(ГлобальныеСценарии.Количество(), "Некорректный список сценариев").Равно(ОжидаемыеСценарии.Количество());
Для каждого ИмяСценария Из ОжидаемыеСценарии Цикл

View File

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