1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-09-16 09:26:57 +02:00

Merge branch 'feature/ONECICD-59' into 'develop'

Feature/onecicd 59

See merge request orais/precommit1C-fork-bia!2
This commit is contained in:
Maximov Valery
2019-03-25 10:02:35 +03:00
26 changed files with 300 additions and 79 deletions

View File

@@ -36,14 +36,15 @@
- `РазборОтчетОбработокРасширений` - при выполнении данного сценария, файлы внешних отчетов, обработок и расширений средствами платформы будут разложены на исходные файлы и помещены в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям. Например внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1`
- `РазборОбычныхФормНаИсходники` - при выполнении данного сценария, файлы обычных форм (`Form.bin`) раскладываются на исходные файлы с помощью инструмента `v8unpack`
- `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублировавшихся индексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутствующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце не пустой строки.
- `СортировкаДереваМетаданных` - при выполнении данного сценария, выполняется упорядочивание объектов метаданных в дереве за исключением подсистем, они остаются в том порядке, который задал разработчик.
- `СинхронизацияОбъектовМетаданныхИФайлов` - анализирует наличие файлов и объектов конфигурации.
- `УдалениеДублейМетаданных` - удаляет задублированные объекты метаданных (результат кривого мерджа)
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методоа `Перейти`
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`
- `УдалениеЛишнихПустыхСтрок` - выполняет очистку модуля от лишних пустых строк (лишними считаются 2 и более идущих подряд пустых строках)
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
## Изменение настроек
@@ -60,13 +61,13 @@ precommit4onec может читать настройки своей работ
Конфигурирование дает возможности:
- Изменить список сценариев обработки файлов
- Активизировать алгоритм подключния сценариев из каталогов репозитория
- Активизировать алгоритм подключения сценариев из каталогов репозитория
Некоторые сценарии поддерживают возможность изменения своих настроек со значений по умолчанию на установленные в конфигурационном файле. На данный момент реализована возможность указывать необходимую версию платформы 1С:Предприятие в сценарии `РазборОтчетОбработокРасширений`.
## Расширение функциональности
Для создания нового сценария обработки файлов необходимо воспользваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.
Для создания нового сценария обработки файлов необходимо воспользоваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.
### Установка сценария для всех репозиториев

View File

@@ -3,6 +3,7 @@
#Использовать gitrunner
#Использовать tempfiles
#Использовать asserts
#Использовать "../../src"
Перем БДД;
@@ -18,6 +19,8 @@
ВсеШаги.Добавить("ЯКопируюФайлВКаталогРепозитория");
ВсеШаги.Добавить("ЯФиксируюИзмененияВРепозиторииСКомментарием");
ВсеШаги.Добавить("ЯУстанавливаюКодировкуВыводаКоманды");
ВсеШаги.Добавить("УФайлаЕстьМетка");
ВсеШаги.Добавить("СодержимоеФайлаИФайлаРазное");
Возврат ВсеШаги;
КонецФункции
@@ -115,3 +118,29 @@
Функция КлючКоманды(Знач ИмяКоманды)
Возврат "Команда-" + ИмяКоманды;
КонецФункции
// у файла <Файл> есть метка <Bom>
Процедура УФайлаЕстьМетка(Файл, Метка) Экспорт
КаталогРепозитория = БДД.ПолучитьИзКонтекста("РабочийКаталог");
КонечныйФайл = ОбъединитьПути(КаталогРепозитория, Файл);
Кодировка = ФайловыеОперации.ОпределитьКодировку(КонечныйФайл);
ЕстьМетка = Кодировка = КодировкаТекста.UTF8;
Ожидаем.Что(ЕстьМетка).Равно(Булево(Метка));
КонецПроцедуры //ОпределитьКодировку
// Содержимое файла "ИсходныйФайл" и файла "КонечныйФайл" разное
Процедура СодержимоеФайлаИФайлаРазное(ИсходныйФайл, КонечныйФайл) Экспорт
ИсходныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("КаталогПроекта"), ИсходныйФайл);
КонечныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("РабочийКаталог"), КонечныйФайл);
СодержимоеКонечногоФайла = ФайловыеОперации.ПрочитатьТекстФайла(КонечныйФайл);
СодержимоеИсходногоФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИсходныйФайл);
Ожидаем.Что(СодержимоеИсходногоФайла).Не_().Равно(СодержимоеКонечногоФайла);
КонецПроцедуры

View File

@@ -14,9 +14,9 @@
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
Сценарий: Разбор отчетов, обработок, конфигурации на исходники.
Когда Я копирую файл "fixtures/demo/DemoОбработка.epf" в каталог репозитория "РабочийКаталог"
И я копирую файл "fixtures/demo/DemoОтчет.erf" в каталог репозитория "РабочийКаталог"
И я копирую файл "fixtures/demo/DemoРасширение.cfe" в каталог репозитория "РабочийКаталог"
Когда Я копирую файл "tests/fixtures/demo/DemoОбработка.epf" в каталог репозитория "РабочийКаталог"
И я копирую файл "tests/fixtures/demo/DemoОтчет.erf" в каталог репозитория "РабочийКаталог"
И я копирую файл "tests/fixtures/demo/DemoРасширение.cfe" в каталог репозитория "РабочийКаталог"
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
Тогда В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\form"
@@ -42,7 +42,7 @@
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\Languages\Русский.xml"
Сценарий: Успешный коммит в репозиторий
Когда Я копирую файл "fixtures\ПроверкаДублейПроцедурПоложительныйТест.bsl" в каталог репозитория "РабочийКаталог"
Когда Я копирую файл "tests\fixtures\ПроверкаДублейПроцедурПоложительныйТест.bsl" в каталог репозитория "РабочийКаталог"
И Я очищаю параметры команды "git" в контексте
И Я установил рабочий каталог как текущий каталог
И Я устанавливаю кодировку вывода "utf-8" команды "git"
@@ -51,7 +51,7 @@
Тогда Вывод команды "git" не содержит "обнаружены неуникальные имена методов"
Сценарий: Прекоммит заблокировал коммит в репозиторий
Когда Я копирую файл "fixtures\ПроверкаДублейПроцедурНегативныйТест.bsl" в каталог репозитория "РабочийКаталог"
Когда Я копирую файл "tests\fixtures\ПроверкаДублейПроцедурНегативныйТест.bsl" в каталог репозитория "РабочийКаталог"
И Я очищаю параметры команды "git" в контексте
И Я установил рабочий каталог как текущий каталог
И Я устанавливаю кодировку вывода "utf-8" команды "git"

View File

@@ -0,0 +1,27 @@
# language: ru
Функциональность: Работа с файлами в прекоммите
Как разработчик
Я хочу иметь возможность коммитить свой код и при выполнении прекоммита кодировка
файла с исходником не должна измениться
Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я включаю отладку лога с именем "oscript.app.precommit4onec"
И я создаю временный каталог и запоминаю его как "КаталогРепозиториев"
И я переключаюсь во временный каталог "КаталогРепозиториев"
И я создаю новый репозиторий "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "РабочийКаталог"
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
И Я установил рабочий каталог как текущий каталог
Структура сценария: Кодировка файла после коммита остается прежней
Когда Я копирую файл <Исходный файл> в каталог репозитория "РабочийКаталог"
И У файла <Конечный файл> есть метка <Bom>
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "Добавил файл процедур"
Тогда У файла <Конечный файл> есть метка <Bom>
И Содержимое файла <Исходный файл> и файла <Конечный файл> разное
Примеры:
| Исходный файл | Конечный файл | Bom |
| tests\fixtures\NoBom.bsl| NoBom.bsl | Нет |
| tests\fixtures\Bom.bsl | Bom.bsl | Да |

View File

@@ -14,4 +14,6 @@
.ЗависитОт("v8unpack", "1.0.3")
.ВключитьФайл("src")
.ВключитьФайл("v8config.json")
.ВключитьФайл("LICENSE")
.ВключитьФайл("README.md")
.ИсполняемыйФайл("src/main.os", ИмяПродукта);

View File

@@ -213,7 +213,7 @@
КонецЕсли;
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыГлобальныхСценариев, ИменаЗагружаемыхСценариев);
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыЛокальныхСценариев);
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыЛокальныхСценариев, , Истина);
Если СценарииОбработки.Количество() = 0 Тогда
@@ -223,7 +223,7 @@
КонецПроцедуры
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев, Знач ИменаЗагружаемыхСценариев = Неопределено)
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев, Знач ИменаЗагружаемыхСценариев = Неопределено, ЗагрузитьВсе = Ложь)
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
@@ -239,7 +239,7 @@
КонецЕсли;
Если ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено Тогда
Если НЕ ЗагрузитьВсе И ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено Тогда
Продолжить;

View File

@@ -0,0 +1,83 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с набором методов для работы с файлами
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////
// ПрочитатьТекстФайла
// Возвращает содержимое файла, читая его в правильной кодировке
// Параметры:
// ПутьКФайлу - Строка - Полный путь к файлу
//
// Возвращаемое значение:
// Строка - Содержимое файла
//
Функция ПрочитатьТекстФайла(ПутьКФайлу) Экспорт
Кодировка = ОпределитьКодировку(ПутьКФайлу);
Текст = Новый ЧтениеТекста();
Текст.Открыть(ПутьКФайлу, Кодировка);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
Возврат СодержимоеФайла;
КонецФункции // ПрочитатьТекстФайла
// ЗаписатьТекстФайла
// Определяет кодировку файла и записывает содержимое в файл
//
// Параметры:
// ПутьКФайлу - Строка - Полный путь к файлу
// СодержимоеФайла - Строка - Текст для записи
Процедура ЗаписатьТекстФайла(ПутьКФайлу, СодержимоеФайла) Экспорт
Кодировка = ОпределитьКодировку(ПутьКФайлу);
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, Кодировка, , , Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
КонецПроцедуры // ЗаписатьТекстФайла
// ОпределитьКодировку
// Читает первые 3 байта файла и ищет маркер BOM кодировки UTF-8
// Параметры:
// ПутьКФайлу - Строка - Полный путь к файлу
//
// Возвращаемое значение:
// Перечисление - Кодировка файла
//
Функция ОпределитьКодировку(ПутьКФайлу) Экспорт
МаркерUTFBOM = СтрРазделить("239 187 191", " ");
ЧтениеДанных = Новый ЧтениеДанных(ПутьКФайлу);
Буфер = Новый БуферДвоичныхДанных(МаркерUTFBOM.Количество());
ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(Буфер, , МаркерUTFBOM.Количество());
Cч = 0;
ЕстьBOM = Истина;
Для Каждого Байт ИЗ Буфер Цикл
Если МаркерUTFBOM[Cч] <> Строка(Байт) Тогда
ЕстьBOM = Ложь;
Прервать;
КонецЕсли;
Cч = Cч + 1;
КонецЦикла;
ЧтениеДанных.Закрыть();
Возврат ?(ЕстьBOM, КодировкаТекста.UTF8, КодировкаТекста.UTF8NoBOM);
КонецФункции //ОпределитьКодировку

View File

@@ -57,10 +57,7 @@
Функция ВставитьНужныеПробелы(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
@@ -79,10 +76,7 @@
КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1 $2$3$4");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина;

View File

@@ -53,11 +53,7 @@
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
ТекстМодуля = Текст.Прочитать();
Текст.Закрыть();
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
ТекстОшибки = "";
ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?Перейти\s+?~[a-zA-ZА-Яа-я0-9_]+");

View File

@@ -68,10 +68,7 @@
Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Регексп = Новый РегулярноеВыражение("id=\""([0-9-]+)\""\/*>");
Регексп.ИгнорироватьРегистр = ИСТИНА;
@@ -129,9 +126,7 @@
КонецЦикла;
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат ИСТИНА;

View File

@@ -53,12 +53,8 @@
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
ТекстМодуля = Текст.Прочитать();
Текст.Закрыть();
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
ТекстОшибки = "";
ШаблонПоиска = Новый РегулярноеВыражение("^[\t ]*?#[\t ]*?(?:(?:Область[\t ]+?([a-zA-Zа-яА-Я0-9_]+?))|(?:КонецОбласти))[\t ]*?(?:\/\/.*)*$");
ШаблонПоиска.Многострочный = Истина;

View File

@@ -56,11 +56,7 @@
Функция СинхронизироватьМетаданныеиФайлы(Знач ИмяФайла, УдаленныеФайлы)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
Регексп.ИгнорироватьРегистр = ИСТИНА;
Регексп.Многострочный = ИСТИНА;

View File

@@ -72,10 +72,7 @@
Функция ОтсортироватьДеревоМетаданных(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8");
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
Регексп.ИгнорироватьРегистр = ИСТИНА;
@@ -137,11 +134,7 @@
КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
ЗаписьТекста = Новый ЗаписьТекста;
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина;

View File

@@ -72,10 +72,7 @@
Функция УдалитьДублиВМетаданных(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8");
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
Регексп.ИгнорироватьРегистр = ИСТИНА;
@@ -139,10 +136,7 @@
КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
ЗаписьТекста = Новый ЗаписьТекста;
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина;

View File

@@ -56,10 +56,7 @@
Функция ИсправитьКонцевыеПробелы(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
@@ -79,9 +76,7 @@
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина;

View File

@@ -55,11 +55,8 @@
КонецФункции // ОбработатьФайл()
Функция УдалитьЛишниеПустыеСтроки(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
@@ -73,9 +70,7 @@
НовоеСодержимоеФайла = РегекспОчистка.Заменить(СодержимоеФайла, Символы.ПС);
Если СтрСравнить(СодержимоеФайла, НовоеСодержимоеФайла) <> 0 Тогда
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(НовоеСодержимоеФайла);
ЗаписьТекста.Закрыть();
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, НовоеСодержимоеФайла);
Возврат Истина;
КонецЕсли;

View File

@@ -14,7 +14,7 @@
ВызватьИсключение "Имя сценария не установлено";
Возврат "ИмяСценария";
КонецФункции // ИмяСценария()
// ОбработатьФайл
@@ -38,7 +38,31 @@
ВызватьИсключение "Обработка файла не реализована";
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Возврат ЛОЖЬ;
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ШаблоннаяОбрабткаФайла(АнализируемыйФайл);
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
Процедура ШаблоннаяОбрабткаФайла(ИмяФайла);
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
Возврат;
КонецЕсли;
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
КонецПроцедуры;

12
tests/fixtures/BOM.bsl vendored Normal file
View File

@@ -0,0 +1,12 @@
Процедура Имя ()
КонецПроцедуры
Процедура Имя1 ()
КонецПроцедуры

12
tests/fixtures/NoBom.bsl vendored Normal file
View File

@@ -0,0 +1,12 @@
Процедура Имя ()
КонецПроцедуры
Процедура Имя1 ()
КонецПроцедуры

View File

@@ -110,7 +110,7 @@
КонецПроцедуры
Функция КаталогТестовыхФикстур()
Возврат ОбъединитьПути(КаталогИсходников(), "fixtures");
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
КонецФункции
Функция КаталогИсходников()

View File

@@ -0,0 +1,77 @@
#Использовать asserts
#Использовать logos
#Использовать tempfiles
#Использовать "../src"
Перем юТест;
Перем Лог;
Перем МенеджерВременныхФайлов;
// Основная точка входа
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПрочитатьФайл");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьФайл");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ПрочитатьФайл() Экспорт
ПутьКФайлу = ОбъединитьПути(КаталогТестовыхФикстур(), "NoBom.bsl");
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлу);
Утверждения.ПроверитьЗаполненность(СодержимоеФайла);
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьФайл() Экспорт
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("bsl"));
ФайловыеОперации.ЗаписатьТекстФайла(Файл.ПолноеИмя, Файл.ПолноеИмя);
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
Утверждения.ПроверитьРавенство(СодержимоеФайла, Файл.ПолноеИмя);
КонецПроцедуры
Процедура ПередЗапускомТеста() Экспорт
ВремТестер = Новый Тестер;
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
ВключитьПоказОтладки();
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
МенеджерВременныхФайлов.Удалить();
МенеджерВременныхФайлов = Неопределено;
КонецПроцедуры
Процедура ВключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Отладка);
КонецПроцедуры
Процедура ВыключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Информация);
КонецПроцедуры
Функция КаталогТестовыхФикстур()
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
КонецФункции
Функция КаталогИсходников()
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
КонецФункции