#ONECICD-183

Поправил ошибки,
Добавил тесты
This commit is contained in:
Dmitriy Medvedev committed 2019-08-13 15:20:58 +03:00
1 parent c7eb6e7041
commit 11e6bf163f
4 files changed
+259 -55

No files matched your search

@@ -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 найдено ключевое слово '&наКлиентенаСервере' заменено на '&НаКлиентеНаСервере'
"""
@@ -4,6 +4,7 @@
// <ИсправлениеНеКаноническогоНаписания>
//
///////////////////////////////////////////////////////////////////////////////
Перем Лог;
// ИмяСценария
// Возвращает имя сценария обработки файлов
@@ -14,7 +15,7 @@
Функция ИмяСценария() Экспорт
Возврат "ИсправлениеНеКаноническогоНаписания";
КонецФункции // ИмяСценария()
// ОбработатьФайл
@@ -41,23 +42,23 @@
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ИсправитьНаКаноническоеНаписание(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли;
Возврат ЛОЖЬ;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
Функция ИсправитьНаКаноническоеНаписание(Знач ИмяФайла)
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
Возврат Ложь;
@@ -75,18 +76,21 @@
ТекстРазбора.УстановитьТекст(РазбираемоеСодержимоеФайла);
ВсегоСтрок = ТекстРазбора.КоличествоСтрок();
СтрокаОткрыта = Ложь;
// символы, которые будут использоваться для нормализации строки
ЗаменяемыеСимволы = "; = ( ) , " + Символы.Таб;
ЗаменяемыеСимволы = СтрРазделить(ЗаменяемыеСимволы, " ", Истина);
// Построчная проверка
Для Ит = 1 По ВсегоСтрок Цикл
СтрокаМодуля = ТекстРазбора.ПолучитьСтроку(Ит);
// оставим строки, которые обрабатывать не нужно
Если ПустаяСтрока(СтрокаМодуля)
ИЛИ СтрНачинаетсяС(СокрЛ(СтрокаМодуля), "//") Тогда
Если ПустаяСтрока(СтрокаМодуля)
ИЛИ СтрНачинаетсяС(СокрЛ(СтрокаМодуля), "//") Тогда
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
Продолжить;
КонецЕсли;
@@ -94,7 +98,7 @@
Если НЕ СтрокаОткрыта Тогда
НоваяСтрокаМодуля = УдалитьКомИКавИзСтроки(НоваяСтрокаМодуля);
КонецЕсли;
// Вырезаем часть строки в кавычках
@@ -104,17 +108,16 @@
НоваяСтрокаМодуля = ВырезатьТекстВКавычках(НоваяСтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта);
// ничего интересного не осталось
Если СтрокаОткрыта И ПозицияКавычек = 0
ИЛИ ПустаяСтрока(НоваяСтрокаМодуля) Тогда
Если СтрокаОткрыта И ПозицияКавычек = 0
ИЛИ ПустаяСтрока(НоваяСтрокаМодуля) Тогда
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
Продолжить;
КонецЕсли;
// Проверяем правильное использование каждого ключевого слова
ВРегНоваяСтрокаМодуля = " " + ВРег(НоваяСтрокаМодуля) + " ";
ВРегНоваяСтрокаМодуля = СтрЗаменить(ВРегНоваяСтрокаМодуля, ";", " ");
ВРегНоваяСтрокаМодуля = СтрЗаменить(ВРегНоваяСтрокаМодуля, Символы.Таб, " ");
ВРегНоваяСтрокаМодуля = НормализоватьСтроку(НоваяСтрокаМодуля, ЗаменяемыеСимволы);
ДлинаСтроки = СтрДлина(ВРегНоваяСтрокаМодуля);
Для Каждого ЭлементТаблицы Из КлючевыеСлова Цикл
@@ -122,7 +125,7 @@
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ");
Если НЕ ПозицияЭталона Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ДлинаЭталона = СтрДлина(Эталон);
@@ -130,54 +133,75 @@
Пока ПозицияЭталона > 0 Цикл
СтартоваяПозиция = ПозицияЭталона - 1;
Написание = СокрЛП(Сред(СтрокаМодуля, СтартоваяПозиция, ДлинаЭталона));
Написание = СокрЛП(Сред(СтрокаМодуля, ПозицияЭталона, ДлинаЭталона));
Если Эталоны.Найти(Написание) = Неопределено Тогда // Ключевое слово написано не канонически
СтрокаМодуля = Лев(СтрокаМодуля, СтартоваяПозиция)
+ ЭлементТаблицы.Значение
+ Сред(СтрокаМодуля, СтартоваяПозиция + ДлинаЭталона + 1);
СтрокаМодуля = Лев(СтрокаМодуля, СтартоваяПозиция)
+ ЭлементТаблицы.Значение
+ Сред(СтрокаМодуля, СтартоваяПозиция + ДлинаЭталона + 1);
СтрокаСообщения = СтрШаблон("В строке %1 найдено ключевое слово '%2' заменено на '%3'",
Ит, Написание, ЭлементТаблицы.Значение);
Лог.Информация(СтрокаСообщения);
КонецЕсли;
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ", , СтартоваяПозиция + ДлинаЭталона);
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ", , ПозицияЭталона + ДлинаЭталона);
КонецЦикла;
КонецЦикла;
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
КонецЦикла;
Если НовоеСодержимоеФайла.ПолучитьТекст() <> СодержимоеФайла Тогда
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, НовоеСодержимоеФайла.ПолучитьТекст());
Возврат Истина; // переиндексируем
КонецЕсли;
Возврат Истина;
Возврат Ложь;
КонецФункции
Процедура ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, Знач СтрокаМодуля)
Функция НормализоватьСтроку(Знач Строка, ЗаменяемыеСимволы)
Строка = " " + ВРег(Строка) + " ";
Для Каждого Символ Из ЗаменяемыеСимволы Цикл
Строка = СтрЗаменить(Строка, Символ, " ");
КонецЦикла;
Возврат Строка;
КонецФункции
Процедура ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, Знач СтрокаМодуля)
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ДВОЙНЫХ_КАВЫЧЕК***", """""");
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ЧАСТИ_URL***", "://");
НовоеСодержимоеФайла.ДобавитьСтроку(СтрокаМодуля);
КонецПроцедуры
Функция ВырезатьТекстВКавычках(Знач СтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта)
Пока ПозицияКавычек > 0 Цикл
Если СтрокаОткрыта Тогда
// кавычки закрывают строку, вырезаем часть в кавычках
СтрокаМодуляВКавычках = Сред(СтрокаМодуля, ПозицияКавычек + 1);
СтрокаМодуля = Лев(СтрокаМодуля, ПоследняяПозиция - 1)
+ ДополнитьСтроку("", ПозицияКавычек - ПоследняяПозиция + 1, " ")
+ СтрокаМодуляВКавычках;
СтрокаМодуля = Лев(СтрокаМодуля, ПоследняяПозиция - 1)
+ ДополнитьСтроку("", ПозицияКавычек - ПоследняяПозиция + 1, " ")
+ СтрокаМодуляВКавычках;
СтрокаОткрыта = Ложь;
ПоследняяПозиция = 0;
@@ -198,16 +222,16 @@
КонецФункции
Функция УдалитьКомИКавИзСтроки(Знач СтрокаМодуля)
Функция УдалитьКомИКавИзСтроки(Знач СтрокаМодуля)
ПозицияКомментария = СтрНайти(СтрокаМодуля, "//");
Если ПозицияКомментария > 0 Тогда // есть комментарий
ДлинаСтроки = СтрДлина(СтрокаМодуля);
ПозицияКавычек = СтрНайти(СтрокаМодуля, """");
Если ПозицияКавычек = 0 // нет кавычек, удаляем комментарий
ИЛИ ПозицияКавычек > ПозицияКомментария Тогда // кавычки после комментария, удаляем комментарий
Если ПозицияКавычек = 0 // нет кавычек, удаляем комментарий
ИЛИ ПозицияКавычек > ПозицияКомментария Тогда // кавычки после комментария, удаляем комментарий
СтрокаМодуля = ДополнитьСтроку(Лев(СтрокаМодуля, ПозицияКомментария - 1), ДлинаСтроки, " ", "Справа");
Иначе
@@ -222,28 +246,28 @@
КонецЕсли;
КонецЕсли;
Возврат СтрокаМодуля;
КонецФункции
Функция КлючевыеСлова(Эталоны)
Функция КлючевыеСлова(Эталоны)
КлючевыеСлова = Новый ТаблицаЗначений;
КлючевыеСлова.Колонки.Добавить("Наименование");
КлючевыеСлова.Колонки.Добавить("Значение");
Для Каждого Эталон Из Эталоны Цикл
Если КлючевыеСлова.НайтиСтроки(Новый Структура("Наименование", ВРег(Эталон))).Количество() = 0 Тогда
СтрокаТаблицы = КлючевыеСлова.Добавить();
СтрокаТаблицы.Наименование = ВРег(Эталон);
СтрокаТаблицы.Значение = Эталон;
КонецЕсли;
КонецЦикла;
Возврат КлючевыеСлова;
КонецФункции
@@ -251,7 +275,7 @@
Функция Эталоны()
Эталоны = Новый Массив;
Эталоны.Добавить("Если");
Эталоны.Добавить("#Если");
Эталоны.Добавить("Тогда");
@@ -280,7 +304,6 @@
Эталоны.Добавить("&НаКлиентеНаСервере");
Эталоны.Добавить("Для");
Эталоны.Добавить("Каждого");
Эталоны.Добавить("каждого");
Эталоны.Добавить("Цикл");
Эталоны.Добавить("КонецЦикла");
Эталоны.Добавить("Выполнить");
@@ -320,7 +343,7 @@
Эталоны.Добавить("Null");
Возврат Эталоны;
КонецФункции
// перенесено из строковых ф-ий ибо там ошибка
@@ -362,3 +385,4 @@
Возврат Строка;
КонецФункции
@@ -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 @@
Функция ПолучитьДополнительныеНастройки()
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками);
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками, ИзмененныеКаталоги",
Лог, УправлениеНастройками, Новый Массив);
Возврат ДополнительныеНастройки;
КонецФункции
Функция ПодготовитьИзменяемыйТестовыйФайл(Знач ИмяТестовогоФайла)
ПутьКТесту = ОбъединитьПути(КаталогТестовыхФикстур(), ИмяТестовогоФайла);
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(ИмяТестовогоФайла);
КопироватьФайл(ПутьКТесту, ПутьКФайлу);
Файл = Новый Файл(ПутьКФайлу);
Возврат Файл;
КонецФункции