diff --git a/README.md b/README.md index a74a07b..ce15cb6 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ - `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`). - `ОбработкаЮнитТестов` - обновляет метод-загрузчик сценариев в общих модулях расширения с unit-тестами (по умолчанию отключен). - `ОтключениеПолнотекстовогоПоиска` - отключает полнотекстовый поиск в файлах описаний метаданных. [См. подробнее](/docs/ОтключениеПолнотекстовогоПоиска.md) +- `ОтключениеРазрешенияИзменятьФорму` - снимает флаг `РазрешеноИзменятьФорму` в описаниях форм. [См. подробнее](/docs/ОтключениеРазрешенияИзменятьФорму.md) - `ПроверкаДублейПроцедурИФункций` - проверяет уникальность названий процедур и функций в модулях. - `ПроверкаКорректностиИнструкцийПрепроцессора` - проверяет корректность написания инструкций препроцессора в модулях. - `ПроверкаКорректностиОбластей` - проверяет корректность "скобок" областей в модулях (парность и последовательность). diff --git a/docs/ОтключениеРазрешенияИзменятьФорму.md b/docs/ОтключениеРазрешенияИзменятьФорму.md new file mode 100644 index 0000000..49693fe --- /dev/null +++ b/docs/ОтключениеРазрешенияИзменятьФорму.md @@ -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 "ОтключениеРазрешенияИзменятьФорму,ПроверкаНецензурныхСлов" +``` \ No newline at end of file diff --git a/features/ИнтерактивнаяНастройка.feature b/features/ИнтерактивнаяНастройка.feature index 433e1c4..53a4b4c 100644 --- a/features/ИнтерактивнаяНастройка.feature +++ b/features/ИнтерактивнаяНастройка.feature @@ -40,6 +40,7 @@ y y y y +y local n """ @@ -58,6 +59,7 @@ n "КорректировкаXMLФорм.os", "ОбработкаЮнитТестов.os", "ОтключениеПолнотекстовогоПоиска.os", + "ОтключениеРазрешенияИзменятьФорму.os" "ПроверкаДублейПроцедурИФункций.os", "ПроверкаКорректностиИнструкцийПрепроцессора.os", "ПроверкаКорректностиОбластей.os", diff --git a/features/КомандаВыполнениеСценариев.feature b/features/КомандаВыполнениеСценариев.feature index f0f4cb0..4f4f0ee 100644 --- a/features/КомандаВыполнениеСценариев.feature +++ b/features/КомандаВыполнениеСценариев.feature @@ -68,7 +68,7 @@ Сценарий: Прекоммит вывел ошибку о некорректных инструкциях препроцессона Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиИнструкцийПрепроцессора2.bsl" в каталог репозитория "РабочийКаталог" И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ." - Тогда Вывод команды "oscript" содержит "ошибки в порядке #Если и #КонецЕсли." + Тогда Вывод команды "oscript" содержит "ошибки в порядке #Если и #КонецЕсли" Сценарий: Прекоммит корректно обрабатывает концевые и лидирующие пробелы у инструкций Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиИнструкцийПрепроцессора3.bsl" в каталог репозитория "РабочийКаталог" diff --git a/features/Конфигурирование.feature b/features/Конфигурирование.feature index 45c18ae..33ae4be 100644 --- a/features/Конфигурирование.feature +++ b/features/Конфигурирование.feature @@ -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 ОтключенныеСценарии = НастройкиСценариев = Соответствие ОтключениеПолнотекстовогоПоиска = Соответствие diff --git a/src/Классы/КомандаВыполнитьСценарии.os b/src/Классы/КомандаВыполнитьСценарии.os index d4c95b5..e5b17c0 100644 --- a/src/Классы/КомандаВыполнитьСценарии.os +++ b/src/Классы/КомандаВыполнитьСценарии.os @@ -84,9 +84,15 @@ ИменаЗагружаемыхСценариев = Неопределено; ПараметрИменаЗагружаемыхСценариев = ПараметрыКоманды["-rules"]; + ЗатребованныеСценарии = Новый Массив; + Если ЗначениеЗаполнено(ПараметрИменаЗагружаемыхСценариев) Тогда ПараметрИменаЗагружаемыхСценариев = СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, " ", ""); ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаЗагружаемыхСценариев, ",", Ложь); + + // Остаются только имена, чтобы сравнивать в сценариях по имени + ЗатребованныеСценарии = СтрРазделить(СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, ".os", ""), ",", Ложь); + КонецЕсли; УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(АдресПоискаКонфигурационногоФайла); @@ -124,7 +130,8 @@ ПараметрыОбработки.Настройки = НастройкаОбработки.НастройкиСценариев.Получить("НастройкиСценариев"); ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория; ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = КаталогиИсходныхПоФайлам.Получить(АнализируемыйФайл.ПолноеИмя); - + ПараметрыОбработки.ЗатребованныеСценарии = ЗатребованныеСценарии; + Для Каждого СценарийОбработки Из НастройкаОбработки.СценарииОбработки Цикл Попытка diff --git a/src/Классы/КомандаПрекоммит.os b/src/Классы/КомандаПрекоммит.os index 401e967..87722a3 100644 --- a/src/Классы/КомандаПрекоммит.os +++ b/src/Классы/КомандаПрекоммит.os @@ -65,13 +65,14 @@ ПараметрыОбработки.Лог = Лог; ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория; ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = ТекущийКаталогИсходныхФайлов; + + ФайлыКОбработке = Новый ТаблицаЗначений(); + ФайлыКОбработке.Колонки.Добавить("Файл"); + ФайлыКОбработке.Колонки.Добавить("ТипИзменения"); - ФайлыКОбработке = Новый Массив(); - + Для каждого Изменение Из ЖурналИзменений Цикл - - ФайлыКОбработке.Добавить(Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла))); - + ДобавитьКОбработке(ФайлыКОбработке, Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла)), Изменение.ТипИзменения); КонецЦикла; ВыполнитьОбработкуФайлов(ФайлыКОбработке, НаборНастроек, ПараметрыОбработки); @@ -90,6 +91,11 @@ КонецФункции // ВыполнитьКоманду /////////////////////////////////////////////////////////////////////////////// +Процедура ДобавитьКОбработке(СпиоскФ, ДобавляемыйФ, ТипИзменения) + Строка = СпиоскФ.Добавить(); + Строка.Файл = ДобавляемыйФ; + Строка.ТипИзменения = ТипИзменения; +КонецПроцедуры Процедура ВыполнитьОбработкуФайлов(Файлы, НаборНастроек, ПараметрыОбработки) @@ -97,7 +103,7 @@ Ит = 0; Пока Ит < Файлы.Количество() Цикл - АнализируемыйФайл = Файлы[Ит]; + АнализируемыйФайл = Файлы[Ит].Файл; Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя); ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, @@ -118,6 +124,8 @@ ПараметрыОбработки.Настройки = НастройкиСценариев.Получить("НастройкиСценариев"); + ПараметрыОбработки.ТипИзменения = Файлы[Ит].ТипИзменения; + Для Каждого СценарийОбработки Из СценарииОбработкиФайлов Цикл ФайлОбработан = СценарийОбработки.ОбработатьФайл(АнализируемыйФайл, @@ -130,7 +138,7 @@ Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл - Файлы.Добавить(ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки)); + ДобавитьКОбработке(Файлы, ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки), ВариантИзмененийФайловGit.Изменен); КонецЦикла; diff --git a/src/Модули/РегулярныеВыражения.os b/src/Модули/РегулярныеВыражения.os index 59be2a3..ee11bbf 100644 --- a/src/Модули/РегулярныеВыражения.os +++ b/src/Модули/РегулярныеВыражения.os @@ -22,4 +22,24 @@ Возврат Элементы; +КонецФункции + +// Создать +// Создает объект встроенного языка и возвращает его +// Параметры: +// ТекстВыражения - Строка - Текст выражения +// ИгнорироватьРегистр - Булево - Если включено, регистр символов не важен для поиска +// Многострочный - Булево - Если включено, ^ и $ соответствуют началу и концу строки +// +// Возвращаемое значение: +// РегулярноеВыражение - Объект +// +Функция Создать(ТекстВыражения, ИгнорироватьРегистр = Истина, Многострочный = Истина) Экспорт + + Выражение = Новый РегулярноеВыражение(ТекстВыражения); + Выражение.ИгнорироватьРегистр = Истина; + Выражение.Многострочный = Истина; + + Возврат Выражение; + КонецФункции \ No newline at end of file diff --git a/src/Модули/СценарииОбработки.os b/src/Модули/СценарииОбработки.os index c61aab5..e627f42 100644 --- a/src/Модули/СценарииОбработки.os +++ b/src/Модули/СценарииОбработки.os @@ -111,6 +111,8 @@ ПараметрыОбработки.Вставить("КаталогРепозитория", Неопределено); ПараметрыОбработки.Вставить("ТекущийКаталогИсходныхФайлов", Неопределено); ПараметрыОбработки.Вставить("Настройки", Неопределено); + ПараметрыОбработки.Вставить("ТипИзменения", ВариантИзмененийФайловGit.Изменен); + ПараметрыОбработки.Вставить("ЗатребованныеСценарии", Новый Массив); Возврат ПараметрыОбработки; diff --git a/src/Модули/ТипыФайлов.os b/src/Модули/ТипыФайлов.os index ac2bbdf..a0ad06b 100644 --- a/src/Модули/ТипыФайлов.os +++ b/src/Модули/ТипыФайлов.os @@ -174,10 +174,24 @@ КонецЕсли; - Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0; + Возврат ЭтоФайлОписанияФормыКонфигуратора(Файл) ИЛИ ЭтоФайлОписанияФормыEDT(Файл); КонецФункции +// ЭтоФайлОписанияФормыEDT +// Возвращает истину, если файл является файлом описания формы в формате конфигуратора +// Параметры: +// Файл - Файл - Полный путь к файлу +// +// Возвращаемое значение: +// Булево - Признак +// +Функция ЭтоФайлОписанияФормыКонфигуратора(Файл) + + Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0; +КонецФункции + + // ЭтоФайлОписанияФормыEDT // Возвращает истину, если файл является файлом описания формы в формате EDT // Параметры: diff --git a/src/СценарииОбработки/ОтключениеРазрешенияИзменятьФорму.os b/src/СценарииОбработки/ОтключениеРазрешенияИзменятьФорму.os new file mode 100644 index 0000000..0aff23c --- /dev/null +++ b/src/СценарииОбработки/ОтключениеРазрешенияИзменятьФорму.os @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Служебный модуль с реализацией сценариев обработки файлов <ОтключениеПолнотекстовогоПоиска> +// +/////////////////////////////////////////////////////////////////////////////// + +// ИмяСценария +// Возвращает имя сценария обработки файлов +// +// Возвращаемое значение: +// Строка - Имя текущего сценария обработки файлов +// +Функция ИмяСценария() Экспорт + + Возврат "ОтключениеРазрешенияИзменятьФорму"; + +КонецФункции // ИмяСценария() + +// ОбработатьФайл +// Выполняет обработку файла +// +// Параметры: +// АнализируемыйФайл - Файл - Файл из журнала git для анализа +// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория +// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать +// * Лог - Объект - Текущий лог +// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс +// * КаталогРепозитория - Строка - Адрес каталога репозитория +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария +// и которые необходимо дообработать +// +// Возвращаемое значение: +// Булево - Признак выполненной обработки файла +// +Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт + + Лог = ДополнительныеПараметры.Лог; + + Если НЕ АнализируемыйФайл.Существует() ИЛИ НЕ ТипыФайлов.ЭтоФайлОписанияФормы(АнализируемыйФайл) Тогда + Возврат Ложь; + КонецЕсли; + + + ФайлДобавлен = ДополнительныеПараметры.Свойство("ТипИзменения") И + ДополнительныеПараметры.ТипИзменения = ВариантИзмененийФайловGit.Добавлен; + + // При передаче через параметр команды exec-rules т.к. поведение ТипИзменения лучше не переопределять, + // ибо могут быть сайд эффекты + ЯвныйЗапускСценария = ДополнительныеПараметры.Свойство("ЗатребованныеСценарии") И + ДополнительныеПараметры.ЗатребованныеСценарии.Найти(ИмяСценария()) <> Неопределено; + + Если ФайлДобавлен ИЛИ ЯвныйЗапускСценария Тогда + + Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); + + ЭтоЕДТ = ТипыФайлов.ЭтоФайлОписанияФормыEDT(АнализируемыйФайл); + + Если ОтключитьРазрешить(АнализируемыйФайл.ПолноеИмя, ЭтоЕДТ) Тогда + + ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); + + КонецЕсли; + + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции // ОбработатьФайл() + +Функция ОтключитьРазрешить(Знач ИмяФайла, ЭтоЕДТ) + + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); + СодержимоеФайла = ТекстФайла; + + Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда + + Возврат Ложь; + + КонецЕсли; + + + Если ЭтоЕДТ Тогда + + Регексп = РегулярныеВыражения.Создать("()(true)(<\/allowFormCustomize>)"); + + Совпадения = Регексп.НайтиСовпадения(СодержимоеФайла); + + Если Совпадения.Количество() = 0 Тогда + + Возврат Ложь; + + КонецЕсли; + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1false$3"); + + Иначе + // В случае выгрузки кофигуратора может быть 3 состояния тега Customizable + // Тег отсутствует - значит по умолчанию включен и надо добавить его со значением false + // Тег присутствует и имеет значение true. Надо изменить значение + // Тег присутствует и имеет значение false. Ничего делать не надо + + Регексп = РегулярныеВыражения.Создать("()(true|false)(<\/Customizable>)"); + + Совпадения = Регексп.НайтиСовпадения(СодержимоеФайла); + + Если Совпадения.Количество() = 0 Тогда // по умолчанию включено, следовательно надо добавить этот тег + + Регексп = РегулярныеВыражения.Создать("(^(.*).+$)"); // цепляем к стабильному тегу сохраняя пробелы + ШаблонЗамены = СтрШаблон("%1%2%3%4%5", "$1", Символы.ПС, "$2", "false", Символы.ПС); + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, ШаблонЗамены); + + ИначеЕсли Совпадения[0].Группы[2].Значение = "true" Тогда // проверим тег и изменим его если надо + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1false$3"); + + Иначе // Тег уже false + Возврат Ложь; + КонецЕсли; + + КонецЕсли; + + ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); + + Возврат Истина; + +КонецФункции \ No newline at end of file diff --git a/tests/ПроверкаСценариевОбработки.os b/tests/ПроверкаСценариевОбработки.os index 8eb34d5..0669ac1 100644 --- a/tests/ПроверкаСценариевОбработки.os +++ b/tests/ПроверкаСценариевОбработки.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", Истина); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина(); + + // файл не изменен + Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("false", "Form.form", Истина); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); + Ожидаем.Что(ТекстФайла, "Файл изменился, а не должен был").Равно("false"); + + // файл обработан + Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("true", "Form.form", Истина); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + Ожидаем.Что(Результат, "Ошибка обработки формы формата edt").ЭтоИстина(); + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); + Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("false"); + Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("false"); + + + + // файл обработан + Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("LockOwnerWindow", "Form.xml", Истина); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина(); + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); + Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false"); + Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false"); + + // файл обработан + Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("LockOwnerWindow + |true", "Form.xml", Истина); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина(); + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); + Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false"); + Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false"); + + // файл обработан + Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("LockOwnerWindow + |false", "Form.xml", Истина); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + Ожидаем.Что(Результат, "Ошибка обработки формы формата конфигуратора").ЭтоИстина(); + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); + Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false"); + Ожидаем.Что(ТекстФайла, "Замена в теге конфигуратора не удалась").Содержит("false"); + + + + // файл обработан. При этом сценарий реагирует только на `добавленные` файлы, но был вызван явно через передачу параметра + Настройки = ПолучитьДополнительныеНастройки(); + Настройки.ЗатребованныеСценарии = Новый Массив; + Настройки.ЗатребованныеСценарии.Добавить(ОбъектСценария.ИмяСценария()); + Настройки.ТипИзменения = ВариантИзмененийФайловGit.Изменен; + + Файл = ПодготовитьИзменяемыйТестовыйФайлИзТекста("true", "Form.form", Истина); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + Ожидаем.Что(Результат, "Ошибка обработки формы формата edt").ЭтоИстина(); + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); + Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("false"); + Ожидаем.Что(ТекстФайла, "Замена в теге edt не удалась").Содержит("false"); + + + +КонецПроцедуры + +#КонецОбласти + + #КонецОбласти #Область Служебные @@ -589,6 +681,25 @@ КонецФункции +Функция ПодготовитьИзменяемыйТестовыйФайлИзТекста(Знач Текст, Знач Имя, СтрогоеСоответствие = Ложь) + + Если СтрогоеСоответствие Тогда + ПутьКФайлу = МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьКФайлу = ОбъединитьПути(ПутьКФайлу, Имя); + Иначе + ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(Имя); + КонецЕсли; + + + Файл = Новый Файл(ПутьКФайлу); + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу); + ЗаписьТекста.Записать(Текст); + ЗаписьТекста.Закрыть(); + + Возврат Файл; + +КонецФункции + Процедура ИспользоватьТестовуюНастройку(КаталогРепозитория, ИмяФайлаНастройки) КопироватьФайл( @@ -682,4 +793,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/tests/ТестНастройкиРепозитория.os b/tests/ТестНастройкиРепозитория.os index 94e4d4c..33b2f36 100644 --- a/tests/ТестНастройкиРепозитория.os +++ b/tests/ТестНастройкиРепозитория.os @@ -15,7 +15,7 @@ юТест = ЮнитТестирование; ВсеТесты = Новый Массив; - + ВсеТесты.Добавить("Тест_ИспользованиеГлобальныхНастроек"); ВсеТесты.Добавить("Тест_ИспользованиеЛокальныхНастроек"); ВсеТесты.Добавить("Тест_ОтключенныеНастройки"); @@ -94,6 +94,7 @@ ОжидаемыеСценарии.Добавить("ОбработкаЮнитТестов.os"); ОжидаемыеСценарии.Добавить("ПроверкаНецензурныхСлов.os"); ОжидаемыеСценарии.Добавить("ОтключениеПолнотекстовогоПоиска.os"); + ОжидаемыеСценарии.Добавить("ОтключениеРазрешенияИзменятьФорму.os"); ОжидаемыеСценарии.Добавить("ПроверкаКорректностиИнструкцийПрепроцессора.os"); ОжидаемыеСценарии.Добавить("ПроверкаДублейПроцедурИФункций.os"); ОжидаемыеСценарии.Добавить("ПроверкаКорректностиОбластей.os"); @@ -248,7 +249,7 @@ Ожидаем.Что(ГлобальныеСценарии, "Нет глобальных сценариев").Заполнено(); - Ожидаем.Что(ГлобальныеСценарии.Количество(), "Не корректный список сценариев").Равно(ОжидаемыеСценарии.Количество()); + Ожидаем.Что(ГлобальныеСценарии.Количество(), "Некорректный список сценариев").Равно(ОжидаемыеСценарии.Количество()); Для каждого ИмяСценария Из ОжидаемыеСценарии Цикл diff --git a/v8config.json b/v8config.json index 7dc1a0e..fb8a158 100644 --- a/v8config.json +++ b/v8config.json @@ -10,6 +10,7 @@ "КорректировкаXMLФорм.os", "ОбработкаЮнитТестов.os", "ОтключениеПолнотекстовогоПоиска.os", + "ОтключениеРазрешенияИзменятьФорму.os", "ПроверкаДублейПроцедурИФункций.os", "ПроверкаКорректностиИнструкцийПрепроцессора.os", "ПроверкаКорректностиОбластей.os",