You've already forked precommit4onec
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:
@@ -36,14 +36,15 @@
|
||||
- `РазборОтчетОбработокРасширений` - при выполнении данного сценария, файлы внешних отчетов, обработок и расширений средствами платформы будут разложены на исходные файлы и помещены в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям. Например внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1`
|
||||
- `РазборОбычныхФормНаИсходники` - при выполнении данного сценария, файлы обычных форм (`Form.bin`) раскладываются на исходные файлы с помощью инструмента `v8unpack`
|
||||
- `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублировавшихся индексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются
|
||||
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
||||
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутствующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
||||
- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце не пустой строки.
|
||||
- `СортировкаДереваМетаданных` - при выполнении данного сценария, выполняется упорядочивание объектов метаданных в дереве за исключением подсистем, они остаются в том порядке, который задал разработчик.
|
||||
- `СинхронизацияОбъектовМетаданныхИФайлов` - анализирует наличие файлов и объектов конфигурации.
|
||||
- `УдалениеДублейМетаданных` - удаляет задублированные объекты метаданных (результат кривого мерджа)
|
||||
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методоа `Перейти`
|
||||
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`
|
||||
- `УдалениеЛишнихПустыхСтрок` - выполняет очистку модуля от лишних пустых строк (лишними считаются 2 и более идущих подряд пустых строках)
|
||||
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
|
||||
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
|
||||
|
||||
## Изменение настроек
|
||||
|
||||
@@ -60,13 +61,13 @@ precommit4onec может читать настройки своей работ
|
||||
Конфигурирование дает возможности:
|
||||
|
||||
- Изменить список сценариев обработки файлов
|
||||
- Активизировать алгоритм подключния сценариев из каталогов репозитория
|
||||
- Активизировать алгоритм подключения сценариев из каталогов репозитория
|
||||
|
||||
Некоторые сценарии поддерживают возможность изменения своих настроек со значений по умолчанию на установленные в конфигурационном файле. На данный момент реализована возможность указывать необходимую версию платформы 1С:Предприятие в сценарии `РазборОтчетОбработокРасширений`.
|
||||
|
||||
## Расширение функциональности
|
||||
|
||||
Для создания нового сценария обработки файлов необходимо воспользваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.
|
||||
Для создания нового сценария обработки файлов необходимо воспользоваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.
|
||||
|
||||
### Установка сценария для всех репозиториев
|
||||
|
||||
|
@@ -3,6 +3,7 @@
|
||||
#Использовать gitrunner
|
||||
#Использовать tempfiles
|
||||
#Использовать asserts
|
||||
#Использовать "../../src"
|
||||
|
||||
Перем БДД;
|
||||
|
||||
@@ -18,6 +19,8 @@
|
||||
ВсеШаги.Добавить("ЯКопируюФайлВКаталогРепозитория");
|
||||
ВсеШаги.Добавить("ЯФиксируюИзмененияВРепозиторииСКомментарием");
|
||||
ВсеШаги.Добавить("ЯУстанавливаюКодировкуВыводаКоманды");
|
||||
ВсеШаги.Добавить("УФайлаЕстьМетка");
|
||||
ВсеШаги.Добавить("СодержимоеФайлаИФайлаРазное");
|
||||
|
||||
Возврат ВсеШаги;
|
||||
КонецФункции
|
||||
@@ -115,3 +118,29 @@
|
||||
Функция КлючКоманды(Знач ИмяКоманды)
|
||||
Возврат "Команда-" + ИмяКоманды;
|
||||
КонецФункции
|
||||
|
||||
// у файла <Файл> есть метка <Bom>
|
||||
Процедура УФайлаЕстьМетка(Файл, Метка) Экспорт
|
||||
|
||||
КаталогРепозитория = БДД.ПолучитьИзКонтекста("РабочийКаталог");
|
||||
КонечныйФайл = ОбъединитьПути(КаталогРепозитория, Файл);
|
||||
|
||||
Кодировка = ФайловыеОперации.ОпределитьКодировку(КонечныйФайл);
|
||||
ЕстьМетка = Кодировка = КодировкаТекста.UTF8;
|
||||
|
||||
Ожидаем.Что(ЕстьМетка).Равно(Булево(Метка));
|
||||
|
||||
КонецПроцедуры //ОпределитьКодировку
|
||||
|
||||
// Содержимое файла "ИсходныйФайл" и файла "КонечныйФайл" разное
|
||||
Процедура СодержимоеФайлаИФайлаРазное(ИсходныйФайл, КонечныйФайл) Экспорт
|
||||
|
||||
ИсходныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("КаталогПроекта"), ИсходныйФайл);
|
||||
КонечныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("РабочийКаталог"), КонечныйФайл);
|
||||
|
||||
СодержимоеКонечногоФайла = ФайловыеОперации.ПрочитатьТекстФайла(КонечныйФайл);
|
||||
СодержимоеИсходногоФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИсходныйФайл);
|
||||
|
||||
Ожидаем.Что(СодержимоеИсходногоФайла).Не_().Равно(СодержимоеКонечногоФайла);
|
||||
|
||||
КонецПроцедуры
|
@@ -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"
|
||||
|
27
features/ФайловыеОперации.feature
Normal file
27
features/ФайловыеОперации.feature
Normal 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 | Да |
|
@@ -14,4 +14,6 @@
|
||||
.ЗависитОт("v8unpack", "1.0.3")
|
||||
.ВключитьФайл("src")
|
||||
.ВключитьФайл("v8config.json")
|
||||
.ВключитьФайл("LICENSE")
|
||||
.ВключитьФайл("README.md")
|
||||
.ИсполняемыйФайл("src/main.os", ИмяПродукта);
|
||||
|
@@ -213,7 +213,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыГлобальныхСценариев, ИменаЗагружаемыхСценариев);
|
||||
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыЛокальныхСценариев);
|
||||
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыЛокальныхСценариев, , Истина);
|
||||
|
||||
Если СценарииОбработки.Количество() = 0 Тогда
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев, Знач ИменаЗагружаемыхСценариев = Неопределено)
|
||||
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев, Знач ИменаЗагружаемыхСценариев = Неопределено, ЗагрузитьВсе = Ложь)
|
||||
|
||||
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
|
||||
|
||||
@@ -239,7 +239,7 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено Тогда
|
||||
Если НЕ ЗагрузитьВсе И ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено Тогда
|
||||
|
||||
Продолжить;
|
||||
|
||||
|
83
src/Модули/ФайловыеОперации.os
Normal file
83
src/Модули/ФайловыеОперации.os
Normal 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);
|
||||
|
||||
КонецФункции //ОпределитьКодировку
|
@@ -57,10 +57,7 @@
|
||||
|
||||
Функция ВставитьНужныеПробелы(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
@@ -79,10 +76,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1 $2$3$4");
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@@ -53,11 +53,7 @@
|
||||
|
||||
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
|
||||
|
||||
ТекстМодуля = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
ТекстОшибки = "";
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?Перейти\s+?~[a-zA-ZА-Яа-я0-9_]+");
|
||||
|
@@ -68,10 +68,7 @@
|
||||
|
||||
Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Регексп = Новый РегулярноеВыражение("id=\""([0-9-]+)\""\/*>");
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
@@ -129,9 +126,7 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат ИСТИНА;
|
||||
|
||||
|
@@ -53,12 +53,8 @@
|
||||
|
||||
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
|
||||
|
||||
ТекстМодуля = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
ТекстОшибки = "";
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("^[\t ]*?#[\t ]*?(?:(?:Область[\t ]+?([a-zA-Zа-яА-Я0-9_]+?))|(?:КонецОбласти))[\t ]*?(?:\/\/.*)*$");
|
||||
ШаблонПоиска.Многострочный = Истина;
|
||||
|
@@ -56,11 +56,7 @@
|
||||
|
||||
Функция СинхронизироватьМетаданныеиФайлы(Знач ИмяФайла, УдаленныеФайлы)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
Регексп.Многострочный = ИСТИНА;
|
||||
|
@@ -72,10 +72,7 @@
|
||||
|
||||
Функция ОтсортироватьДеревоМетаданных(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, "utf-8");
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
@@ -137,11 +134,7 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
|
||||
ЗаписьТекста = Новый ЗаписьТекста;
|
||||
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@@ -72,10 +72,7 @@
|
||||
|
||||
Функция УдалитьДублиВМетаданных(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, "utf-8");
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
@@ -139,10 +136,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
|
||||
ЗаписьТекста = Новый ЗаписьТекста;
|
||||
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@@ -56,10 +56,7 @@
|
||||
|
||||
Функция ИсправитьКонцевыеПробелы(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
@@ -79,9 +76,7 @@
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1");
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@@ -55,11 +55,8 @@
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Функция УдалитьЛишниеПустыеСтроки(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
@@ -73,9 +70,7 @@
|
||||
НовоеСодержимоеФайла = РегекспОчистка.Заменить(СодержимоеФайла, Символы.ПС);
|
||||
Если СтрСравнить(СодержимоеФайла, НовоеСодержимоеФайла) <> 0 Тогда
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(НовоеСодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, НовоеСодержимоеФайла);
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
@@ -14,7 +14,7 @@
|
||||
|
||||
ВызватьИсключение "Имя сценария не установлено";
|
||||
Возврат "ИмяСценария";
|
||||
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ОбработатьФайл
|
||||
@@ -38,7 +38,31 @@
|
||||
ВызватьИсключение "Обработка файла не реализована";
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
Возврат ЛОЖЬ;
|
||||
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ШаблоннаяОбрабткаФайла(АнализируемыйФайл);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Процедура ШаблоннаяОбрабткаФайла(ИмяФайла);
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
КонецПроцедуры;
|
12
tests/fixtures/BOM.bsl
vendored
Normal file
12
tests/fixtures/BOM.bsl
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
Процедура Имя ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Имя1 ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
12
tests/fixtures/NoBom.bsl
vendored
Normal file
12
tests/fixtures/NoBom.bsl
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
Процедура Имя ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Имя1 ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
@@ -110,7 +110,7 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КаталогТестовыхФикстур()
|
||||
Возврат ОбъединитьПути(КаталогИсходников(), "fixtures");
|
||||
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогИсходников()
|
||||
|
77
tests/ТестФайловыеОперации.os
Normal file
77
tests/ТестФайловыеОперации.os
Normal file
@@ -0,0 +1,77 @@
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
#Использовать tempfiles
|
||||
#Использовать "../src"
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
Перем МенеджерВременныхФайлов;
|
||||
|
||||
// Основная точка входа
|
||||
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
|
||||
|
||||
юТест = ЮнитТестирование;
|
||||
|
||||
ВсеТесты = Новый Массив;
|
||||
|
||||
ВсеТесты.Добавить("ТестДолжен_ПрочитатьФайл");
|
||||
ВсеТесты.Добавить("ТестДолжен_ЗаписатьФайл");
|
||||
|
||||
Возврат ВсеТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПрочитатьФайл() Экспорт
|
||||
|
||||
ПутьКФайлу = ОбъединитьПути(КаталогТестовыхФикстур(), "NoBom.bsl");
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлу);
|
||||
|
||||
Утверждения.ПроверитьЗаполненность(СодержимоеФайла);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ЗаписатьФайл() Экспорт
|
||||
|
||||
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("bsl"));
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(Файл.ПолноеИмя, Файл.ПолноеИмя);
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
|
||||
Утверждения.ПроверитьРавенство(СодержимоеФайла, Файл.ПолноеИмя);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередЗапускомТеста() Экспорт
|
||||
|
||||
ВремТестер = Новый Тестер;
|
||||
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
|
||||
|
||||
ВключитьПоказОтладки();
|
||||
|
||||
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеЗапускаТеста() Экспорт
|
||||
|
||||
МенеджерВременныхФайлов.Удалить();
|
||||
МенеджерВременныхФайлов = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
Процедура ВключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Информация);
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КаталогТестовыхФикстур()
|
||||
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогИсходников()
|
||||
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
|
||||
КонецФункции
|
Reference in New Issue
Block a user