1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-11-21 17:36:46 +02:00

#ONECICD-249

Доработка и рефакторинг.
This commit is contained in:
Максимов Валерий Валерьевич (000044217) 2021-05-14 08:34:33 +03:00
parent 438d76a122
commit 9d8a04c4ab
102 changed files with 2856 additions and 905 deletions

View File

@ -27,34 +27,31 @@
Перед использованием необходима установка precommit-hook'а в репозиторий:
- для выполнения установки в конкретный репозиторий необходимо выполнить команду `precommit4onec install repo_name`
- для выполнения установки во все репозитории каталога необходимо выполнить команду`precommit4onec install folder_reps -r`
- для выполнения установки во все репозитории каталога необходимо выполнить команду `precommit4onec install folder_reps -r`
- если каталог исходных файлов в репозитории отличается от стандартного "src" (например, когда исходные файлы в формате EDT), необходимо явно указать его с помощью дополнительного параметра `-source-dir "configuration"`
После этого, при каждом коммите будет выполняться обработка файлов.
В комплекте присутствуют следующие сценарии обработки файлов:
- `РазборОтчетОбработокРасширений` - при выполнении данного сценария, файлы внешних отчетов, обработок и расширений средствами платформы будут разложены на исходные файлы и помещены в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям. Например внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1`
- `РазборОбычныхФормНаИсходники` - при выполнении данного сценария, файлы обычных форм (`Form.bin`) раскладываются на исходные файлы с помощью инструмента `v8unpack`
- `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублировавшихся индексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутствующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце не пустой строки.
- `СортировкаДереваМетаданных` - при выполнении данного сценария, выполняется упорядочивание объектов метаданных в дереве за исключением подсистем, они остаются в том порядке, который задал разработчик.
- `СинхронизацияОбъектовМетаданныхИФайлов` - анализирует наличие файлов и объектов конфигурации.
- `УдалениеДублейМетаданных` - удаляет задублированные объекты метаданных (результат кривого мерджа)
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`
- `УдалениеЛишнихПустыхСтрок` - выполняет очистку модуля от лишних пустых строк (лишними считаются 2 и более идущих подряд пустых строках)
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле.
- `ИсправлениеНеКаноническогоНаписания` - Проверяет модули на каноничность написания ключевых слов и исправляет найденное
- `ОбработкаЮнитТестов` - Обрабатывает каталог расширения с unit тестами, обновляя метод-загручик (по умолчанию отключен)
- `ПроверкаНецензурныхСлов` - Проверяет модули на наличие "плохих" слов, которые перечислены в файле. Пример файла [НецензурныеСлова.txt](/НецензурныеСлова.txt). В v8config.json в секции `НастройкиСценариев` добавить секцию:
```JSON
"ПроверкаНецензурныхСлов": {
"ФайлСНецензурнымиСловами": "НецензурныеСлова.txt"
}
```
- `ПроверкаКорректностиДирективКомпиляции` - Проверяет модули на корректность написания директив компилятора.
- `ДобавлениеПробеловПередКлючевымиСловами` - добавляет отсутствующие пробелы перед ключевыми словами в файлах модулей. На данный момент обрабатывается только ключевое слово `Экспорт`.
- `ДобавлениеТестовВРасширение` - добавляет отсутствующие сценарии в расширение с unit-тестами для всех экспортных методов (обрабатываются общие модули, модули менеджеров, модули объектов, модули наборов записей). Поддерживаются только исходные файлы в формате EDT.
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`.
- `ИсправлениеНеКаноническогоНаписания` - исправляет неканоничное написание ключевых слов в модулях.
- `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`).
- `ОбработкаЮнитТестов` - обновляет метод-загрузчик сценариев в общих модулях расширения с unit-тестами (по умолчанию отключен).
- `ОтключениеПолнотекстовогоПоиска` - отключает полнотекстовый поиск в файлах описаний метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания объекта метаданных. Можно выключать из обработки отдельные реквизиты, для этого надо задать массив реквизитов в конфигурационном файле.
- `ПроверкаДублейПроцедурИФункций` - проверяет уникальность названий процедур и функций в модулях.
- `ПроверкаКорректностиДирективКомпиляции` - проверяет корректность написания директив компиляции в модулях.
- `ПроверкаКорректностиОбластей` - проверяет корректность "скобок" областей в модулях (парность и последовательность).
- `ПроверкаНецензурныхСлов` - проверяет наличие нецензурных слов в модулях. Файл-словарь указывается в настройках. Пример файла [НецензурныеСлова.txt](/НецензурныеСлова.txt).
- `РазборОбычныхФормНаИсходники` - раскладывает файлы обычных форм (`Form.bin`) на исходные файлы с помощью инструмента `v8unpack`.
- `РазборОтчетОбработокРасширений` - раскладывает средствами платформы файлы внешних отчетов, обработок и расширений на исходные файлы и помещает в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям этих файлов. Например, внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1`.
- `СинхронизацияОбъектовМетаданныхИФайлов` - анализирует наличие файлов и объектов конфигурации. Поддерживается только файл описания конфигурации в формате выгрузки конфигуратора (`Configuration.xml`).
- `СортировкаДереваМетаданных` - упорядочивает объекты метаданных верхнего уровня по алфавиту в файле описания конфигурации (кроме подсистем). Поддерживается как файл в формате выгрузки конфигуратора (`Configuration.xml`), так и в формате EDT (`Configuration.mdo`).
- `УдалениеДублейМетаданных` - удаляет дубли объектов метаданных в файле описания конфигурации (могут образоваться при объединениях). Поддерживается как файл в формате выгрузки конфигуратора (`Configuration.xml`), так и в формате EDT (`Configuration.mdo`)..
- `УдалениеЛишнихКонцевыхПробелов` - удаляет лишние пробелы и табы в конце не пустых строк в файлах модулей.
- `УдалениеЛишнихПустыхСтрок` - удаляет лишние пустые строки в модулях (лишними считаются 2 и более идущих подряд пустых строк).
## Изменение настроек
@ -69,7 +66,7 @@ precommit4onec может читать настройки своей работ
Предоставляется возможность в репозитории иметь свои, отличные от глобальных, настройки. Для этого необходимо вместо флага `-global` в указанных выше командах передавать параметр `-rep-path` с указанием пути к каталогу репозитория.
Также можно настроить различное поведение для различных каталогов репозитория, для работы с подкаталогами (проектами) используется ключ `-child-path`.
Настройки проектов полностью переопределяют базовые настройки. Например если в основной настройки указаны `ОтключенныеСценарии`,
Настройки проектов полностью переопределяют базовые настройки. Например если в основной настройке указаны `ОтключенныеСценарии`,
а для проекта `configuration\` они не заполнены, то для каталога `configuration` будут выполнены все сценарии.
Конфигурирование дает возможности:
@ -85,7 +82,8 @@ precommit4onec может читать настройки своей работ
{
"GLOBAL": { // необязательная секция
"ВерсияПлатформы": "8.3.10.2309", // используемая версия платформы например для разбора на исходники
"version": "2.0" // версия конфигурационного файла (необязательно)
"version": "2.0", // версия конфигурационного файла (необязательно)
"ФорматEDT": true, // признак использования исходных файлов в формате EDT
},
"Precommt4onecСценарии": {
"ИспользоватьСценарииРепозитория": false, // Признак, выполнения проверок из репозитория
@ -105,7 +103,6 @@ precommit4onec может читать настройки своей работ
}
```
## Расширение функциональности
Для создания нового сценария обработки файлов необходимо воспользоваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.

View File

@ -39,6 +39,7 @@ y
y
y
y
y
local
n
"""
@ -51,6 +52,7 @@ n
"КаталогЛокальныхСценариев": "local",
"ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ДобавлениеТестовВРасширение.os",
"ЗапретИспользованияПерейти.os",
"ИсправлениеНеКаноническогоНаписания.os",
"КорректировкаXMLФорм.os",

View File

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

View File

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

View File

@ -16,4 +16,5 @@
.ВключитьФайл("v8config.json")
.ВключитьФайл("LICENSE")
.ВключитьФайл("README.md")
.ВключитьФайл("НецензурныеСлова.txt")
.ИсполняемыйФайл("src/main.os", ИмяПродукта);

View File

@ -40,6 +40,7 @@
КаталогРепозитория = ПараметрыКоманды["КаталогРепозитория"];
ФайлКаталогРепозитория = Новый Файл(КаталогРепозитория);
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
Если НЕ ФайлКаталогРепозитория.Существует() ИЛИ ФайлКаталогРепозитория.ЭтоФайл() Тогда
Лог.Ошибка("Каталог репозитория '%1' не существует или это файл", КаталогРепозитория);
@ -47,65 +48,55 @@
КонецЕсли;
АдресПоискаКонфигурационногоФайла = КаталогРепозитория;
Если ЗначениеЗаполнено(ПараметрыКоманды["-cfg-file"]) Тогда
АдресПоискаКонфигурационногоФайла = ПараметрыКоманды["-cfg-file"];
АдресПоискаКонфигурационногоФайла = ПараметрыКоманды["-cfg-file"];
Если Не ЗначениеЗаполнено(АдресПоискаКонфигурационногоФайла) Тогда
АдресПоискаКонфигурационногоФайла = КаталогРепозитория;
КонецЕсли;
КаталогИсходныхФайлов = ПараметрыКоманды["-source-dir"];
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
КаталогиИсходныхФайлов = "src";
Иначе
КаталогиИсходныхФайлов = СтрЗаменить(ПараметрыКоманды["-source-dir"], " ", "");
ПараметрКаталогиИсходныхФайлов = ПараметрыКоманды["-source-dir"];
Если Не ЗначениеЗаполнено(ПараметрКаталогиИсходныхФайлов) Тогда
ПараметрКаталогиИсходныхФайлов = "src";
КонецЕсли;
МассивКаталоговИсходныхФайлов = СтрРазделить(КаталогиИсходныхФайлов, ",", Ложь);
КаталогиИсходныхФайлов = СтрРазделить(ПараметрКаталогиИсходныхФайлов, ",", Ложь);
ОбрабатываемыеФайлы = Новый Массив();
Для Каждого КаталогИсходныхФайлов Из МассивКаталоговИсходныхФайлов Цикл
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов);
КаталогиИсходныхПоФайлам = Новый Соответствие();
Для Каждого КаталогИсходныхФайлов Из КаталогиИсходныхФайлов Цикл
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, СокрЛП(КаталогИсходныхФайлов));
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
Если НЕ ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
Если Не ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
Лог.Ошибка("Каталога <%1> не существует", ТекущийКаталогИсходныхФайлов);
КонецЕсли;
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
ОбрабатываемыеФайлыКаталога = НайтиФайлы(ТекущийКаталогИсходныхФайлов, "*", Истина);
ОбрабатываемыеФайлыКаталога = НайтиФайлы(ТекущийКаталогИсходныхФайлов, ПолучитьМаскуВсеФайлы(), Истина);
Для Каждого ОбрабатываемыйФайлКаталога Из ОбрабатываемыеФайлыКаталога Цикл
ОбрабатываемыеФайлы.Добавить(ОбрабатываемыйФайлКаталога);
КаталогиИсходныхПоФайлам.Вставить(ОбрабатываемыйФайлКаталога.ПолноеИмя, ТекущийКаталогИсходныхФайлов);
КонецЦикла;
КонецЦикла;
ИменаЗагружаемыхСценариев = Неопределено;
Если ЗначениеЗаполнено(ПараметрыКоманды["-rules"]) Тогда
ПараметрИменаСценариев = СтрЗаменить(ПараметрыКоманды["-rules"], " ", "");
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаСценариев, ",", Ложь);
КонецЕсли;
Ит = 0;
КонецЦикла;
ИменаЗагружаемыхСценариев = Неопределено;
ПараметрИменаЗагружаемыхСценариев = ПараметрыКоманды["-rules"];
Если ЗначениеЗаполнено(ПараметрИменаЗагружаемыхСценариев) Тогда
ПараметрИменаЗагружаемыхСценариев = СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, " ", "");
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаЗагружаемыхСценариев, ",", Ложь);
КонецЕсли;
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(АдресПоискаКонфигурационногоФайла);
НаборНастроек = СценарииОбработки.ПолучитьСценарииСПараметрамиВыполнения(КаталогРепозитория, ИменаЗагружаемыхСценариев);
КритичныеОшибки = Новый Массив;
ПараметрыОбработки = СценарииОбработки.ПолучитьСтандартныеПараметрыОбработки();
ПараметрыОбработки.Лог = Лог;
Ит = 0;
Пока Ит < ОбрабатываемыеФайлы.Количество() Цикл
АнализируемыйФайл = ОбрабатываемыеФайлы[Ит];
@ -132,12 +123,13 @@
ПараметрыОбработки.Настройки = НастройкаОбработки.НастройкиСценариев.Получить("НастройкиСценариев");
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = КаталогиИсходныхПоФайлам.Получить(АнализируемыйФайл.ПолноеИмя);
Для Каждого СценарийОбработки Из НастройкаОбработки.СценарииОбработки Цикл
Попытка
ФайлОбработан = СценарийОбработки.ОбработатьФайл(АнализируемыйФайл,
ТекущийКаталогИсходныхФайлов,
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов,
ПараметрыОбработки);
Если НЕ ФайлОбработан Тогда
@ -146,7 +138,9 @@
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
ОбрабатываемыеФайлы.Добавить(ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки));
НовыйОбрабатываемыйФайл = ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки);
ОбрабатываемыеФайлы.Добавить(НовыйОбрабатываемыйФайл);
КаталогиИсходныхПоФайлам.Вставить(НовыйОбрабатываемыйФайл.ПолноеИмя, ПараметрыОбработки.ТекущийКаталогИсходныхФайлов);
КонецЦикла;
@ -183,4 +177,3 @@
Возврат Приложение.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду

View File

@ -23,7 +23,7 @@
КонецПроцедуры // НастроитьКоманду
// Выполняет логику команды
//
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
@ -38,9 +38,9 @@
Если НЕ ПроверитьПараметрыКоманды(КаталогРепозитория, Лог) Тогда
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
КаталогИсходныхФайлов = "src";
@ -56,28 +56,26 @@
СоздатьКаталог(ТекущийКаталогИсходныхФайлов);
КонецЕсли;
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(КаталогРепозитория);
НаборНастроек = СценарииОбработки.ПолучитьСценарииСПараметрамиВыполнения(КаталогРепозитория);
ЖурналИзменений = ПолучитьЖурналИзменений();
ПараметрыОбработки = Новый Структура("ФайлыДляПостОбработки, ИзмененныеКаталоги, КаталогРепозитория, ТекущийКаталогИсходныхФайлов, Настройки",
Новый Массив, Новый Массив, КаталогРепозитория, ТекущийКаталогИсходныхФайлов);
ПараметрыОбработки = СценарииОбработки.ПолучитьСтандартныеПараметрыОбработки();
ПараметрыОбработки.Лог = Лог;
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = ТекущийКаталогИсходныхФайлов;
ПараметрыОбработки.Вставить("Лог", Лог);
ФайлыКОбработке = Новый Массив();
Для каждого Изменение Из ЖурналИзменений Цикл
ФайлыКОбработке.Добавить(Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла)));
КонецЦикла;
ВыполнитьОбработкуФайлов(ФайлыКОбработке, НаборНастроек, ПараметрыОбработки);
// измененные каталоги необходимо добавить в индекс
Лог.Отладка("Добавление измененных каталогов в индекс git");
Для Каждого Каталог Из ПараметрыОбработки.ИзмененныеКаталоги Цикл
@ -94,7 +92,7 @@
///////////////////////////////////////////////////////////////////////////////
Процедура ВыполнитьОбработкуФайлов(Файлы, НаборНастроек, ПараметрыОбработки)
КаталогРепозитория = ПараметрыОбработки.КаталогРепозитория;
Ит = 0;
Пока Ит < Файлы.Количество() Цикл
@ -103,12 +101,12 @@
Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя);
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
СтрЗаменить(АнализируемыйФайл.ПолноеИмя, КаталогРепозитория, ""));
СтрЗаменить(АнализируемыйФайл.ПолноеИмя, КаталогРепозитория, ""));
ИмяПроекта = МенеджерНастроек.ИмяПроектаДляФайла(ИмяФайла);
НастройкаОбработки = НаборНастроек[ИмяПроекта];
Если НЕ ЗначениеЗаполнено(НастройкаОбработки) Тогда
ВызватьИсключение СтрШаблон("Не удалось получить настройки для %1", ИмяФайла);
@ -131,7 +129,7 @@
КонецЕсли;
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
Файлы.Добавить(ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки));
КонецЦикла;
@ -143,7 +141,7 @@
Ит = Ит + 1;
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
@ -169,7 +167,7 @@
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
@ -201,4 +199,4 @@
Возврат ЖурналИзменений;
КонецФункции
КонецФункции

View File

@ -17,17 +17,17 @@
ВызватьИсключение "Настройки не загружены";
КонецЕсли;
Если ИспользуютсяЛокальныеНастройки() Тогда
Возврат ЛокальныеНастройки;
Иначе
Возврат ГлобальныеНастройки;
КонецЕсли;
КонецФункции
Функция НастройкиРепозитория(ПутьКаталогаРепозитория, ВернутьГлобальныеЕслиНетЛокальных = Истина) Экспорт
@ -45,44 +45,44 @@
ЛокальныеНастройки = Новый НастройкиРепозитория(КаталогРепозитория);
ИспользуютсяЛокальныеНастройки = ЕстьНастройкиPrecommt4onec(ЛокальныеНастройки) ИЛИ НЕ ВернутьГлобальныеЕслиНетЛокальных;
Если ИспользуютсяЛокальныеНастройки Тогда
ВозвращаемаяНастройка = ЛокальныеНастройки;
Лог.Информация("Используем локальные настройки");
Иначе
ВозвращаемаяНастройка = ГлобальныеНастройки;
Лог.Информация("Используем глобальные настройки");
Если НЕ ЕстьНастройкиPrecommt4onec(ГлобальныеНастройки) Тогда
Лог.Предупреждение("Файл глобальных настроек '%1' не содержит настройки прекоммита", МенеджерПриложения.ПутьКРодительскомуКаталогу());
КонецЕсли;
КонецЕсли;
НастройкиИнициализированы = Истина;
ПроверитьНастройкуПроектов();
Возврат ВозвращаемаяНастройка;
КонецФункции
Функция ГлобальныеНастройки() Экспорт
Если ГлобальныеНастройки = Неопределено Тогда
Если ГлобальныеНастройки = Неопределено Тогда
Если НЕ ЗначениеЗаполнено(КаталогГлобальныхНастроек) Тогда
ГлобальныеНастройки = Новый НастройкиРепозитория(МенеджерПриложения.ПутьКРодительскомуКаталогу());
Иначе
ГлобальныеНастройки = Новый НастройкиРепозитория(КаталогГлобальныхНастроек);
КонецЕсли;
КонецЕсли;
НастройкиИнициализированы = Истина;
@ -96,11 +96,11 @@
Значение = ЗначениеНастроекПоКлючу(Настройки(), КлючНастройки(Подпроект, КлючНастройки));
Возврат ?(Значение = Неопределено, ЗначениеПоУмолчанию, Значение);
КонецФункции
Функция ИменаЗагружаемыхСценариев(Подпроект = "") Экспорт
ИменаИсключаемыхСценариев = ЗначениеНастройки("ОтключенныеСценарии", Подпроект);
ГлобальныеСценарии = ЗначениеНастройки("ГлобальныеСценарии", Подпроект);
@ -108,9 +108,9 @@
Если ГлобальныеСценарии = Неопределено Тогда
ГлобальныеСценарии = ПолучитьЗначениеНастройки(ГлобальныеНастройки(), "ГлобальныеСценарии");
КонецЕсли;
ИменаЗагружаемыхСценариев = Новый Массив;
Если ИменаИсключаемыхСценариев = Неопределено Тогда
@ -124,17 +124,17 @@
Если ИменаИсключаемыхСценариев.Найти(ИмяСценария) = Неопределено Тогда
ИменаЗагружаемыхСценариев.Добавить(ИмяСценария);
КонецЕсли;
КонецЦикла;
Возврат ИменаЗагружаемыхСценариев;
КонецФункции
Функция ПолучитьСписокИсполняемыхСценариев(Знач ГлобальныеСценарии, Знач ОтключенныеСценарии) Экспорт
ИменаЗагружаемыхСценариев = Новый Массив;
Если ОтключенныеСценарии = Неопределено Тогда
@ -148,27 +148,27 @@
Если ОтключенныеСценарии.Найти(ИмяСценария) = Неопределено Тогда
ИменаЗагружаемыхСценариев.Добавить(ИмяСценария);
КонецЕсли;
КонецЦикла;
Возврат ИменаЗагружаемыхСценариев;
КонецФункции
Функция ИспользуютсяЛокальныеНастройки() Экспорт
Возврат ИспользуютсяЛокальныеНастройки = Истина;
КонецФункции
#Область Проекты
Функция ПроектыКонфигурации() Экспорт
Проекты = Новый Массив;
БлокПроекты = ЗначениеНастройки(КлючПроекты());
Если ЗначениеЗаполнено(БлокПроекты) Тогда
@ -176,9 +176,9 @@
Для Каждого Элемент Из БлокПроекты Цикл
Проекты.Добавить(Элемент.Ключ);
КонецЦикла;
КонецЕсли;
Возврат Проекты;
@ -188,27 +188,27 @@
Функция НастройкиПроекта(Подпроект = "") Экспорт
Значение = ПолучитьНастройкиПроекта(Настройки(), Подпроект);
Возврат Значение;
КонецФункции
Функция НастройкаДляФайла(Знач ОтносительноеИмяФайла) Экспорт
Возврат НастройкиПроекта(ИмяПроектаДляФайла(ОтносительноеИмяФайла));
КонецФункции
Функция ИмяПроектаДляФайла(Знач ОтносительноеИмяФайла) Экспорт
Если СтрНачинаетсяС(ОтносительноеИмяФайла, "/") ИЛИ СтрНачинаетсяС(ОтносительноеИмяФайла, "\") Тогда
ОтносительноеИмяФайла = Сред(ОтносительноеИмяФайла, 2);
КонецЕсли;
ОтносительноеИмяФайла = НРег(ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, ОтносительноеИмяФайла));
Для Каждого ИмяПроекта Из ПроектыКонфигурации() Цикл
НормализованноеИмяПроекта = НРег(ИмяПроекта);
@ -216,7 +216,7 @@
Если СтрНачинаетсяС(ОтносительноеИмяФайла, НормализованноеИмяПроекта) Тогда
Возврат ИмяПроекта;
КонецЕсли;
КонецЦикла;
@ -226,56 +226,56 @@
КонецФункции
Процедура УдалитьПроекты() Экспорт
ЗначениеНастройки("").Удалить(КлючПроекты()); // Удаляем ветку "Проекты" из корня настроек прекоммит
ЗначениеНастройки("").Удалить(КлючПроекты()); // Удаляем ветку "Проекты" из корня настроек прекоммит
КонецПроцедуры
Процедура УдалитьПроект(Подпроект) Экспорт
ИмяПроекта = ИмяПроектаДляФайла(Подпроект);
Если НЕ ЗначениеЗаполнено(ИмяПроекта) ИЛИ СтрДлина(ИмяПроекта) <> СтрДлина(Подпроект) Тогда
МенеджерПриложения.ПолучитьЛог().Предупреждение("Не найден проект %1", Подпроект);
Возврат;
КонецЕсли;
ЗначениеНастройки(КлючПроекты()).Удалить(ИмяПроекта);
КонецПроцедуры
Функция НормализованноеИмяПроекта(ИмяПроекта) Экспорт
Если НЕ ЗначениеЗаполнено(ИмяПроекта) Тогда
Возврат ИмяПроекта;
КонецЕсли;
НормализованноеИмяПроекта = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, ИмяПроекта);
Возврат НормализованноеИмяПроекта;
КонецФункции
Функция ПроверитьНастройкуПроектов() Экспорт
Успешно = Истина;
Лог = МенеджерПриложения.ПолучитьЛог();
Для Каждого ИмяПроекта Из ПроектыКонфигурации() Цикл
Если НормализованноеИмяПроекта(ИмяПроекта) <> ИмяПроекта Тогда
Лог.Предупреждение("Имя проекта '%1' указано не корректно (должно быть %2), возможно приложение будет работать не корректно", ИмяПроекта, НормализованноеИмяПроекта(ИмяПроекта));
Успешно = Ложь;
КонецЕсли;
КонецЦикла;
Возврат Успешно;
КонецФункции
#КонецОбласти
@ -289,19 +289,19 @@
Процедура ЗаписатьНастройки() Экспорт
Настройки().ЗаписатьНастройкиПриложения(КлючНастройкиPrecommit(), ЗначениеНастройки(""));
КонецПроцедуры
Процедура УдалитьНастройки() Экспорт
Если НЕ ИспользуютсяЛокальныеНастройки() Тогда
ВызватьИсключение "Нельзя удалять глобальную настройку";
КонецЕсли;
Настройки().УдалитьНастройкиПриложения(КлючНастройкиPrecommit());
КонецПроцедуры
///////////////////////////////////////////////////////////////////
@ -343,24 +343,24 @@
Функция КлючНастройки(Знач Проект = Неопределено, КлючНастройки = Неопределено)
Ключ = Новый Массив();
Проект = НормализованноеИмяПроекта(Проект);
Если ЗначениеЗаполнено(Проект) И ЕстьПроект(Проект) Тогда
Ключ.Добавить(КлючПроекты());
Ключ.Добавить(Проект);
КонецЕсли;
Если ЗначениеЗаполнено(КлючНастройки) Тогда
Ключ.Добавить(КлючНастройки);
КонецЕсли;
Возврат Ключ;
КонецФункции
Функция ЕстьПроект(Проект)
@ -378,9 +378,9 @@
Значение = ЗначениеНастроекПоКлючу(Настройка, "");
КонецЕсли;
Возврат Значение;
КонецФункции
Функция ЗначениеНастроекПоКлючу(Настройка, КлючНастройки)
@ -408,7 +408,7 @@
Ключи = КлючЗначения;
КонецЕсли;
Для каждого Ключ Из Ключи Цикл
Значение = Значение.Получить(Ключ);
@ -418,43 +418,43 @@
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Значение;
КонецФункции
Функция ЕстьНастройкиPrecommt4onec(Настройка)
Возврат НЕ Настройка.ЭтоНовый() И ЗначениеНастроекПоКлючу(Настройка, "").Количество();
КонецФункции
Функция ПолучитьЗначениеНастройки(Настройка, КлючНастройки, Подпроект = Неопределено)
Значение = ЗначениеНастроекПоКлючу(Настройка, КлючНастройки(Подпроект, КлючНастройки));
Возврат Значение;
КонецФункции
Процедура УстановитьКаталогГлобальныхНастроек(Каталог) Экспорт
КаталогГлобальныхНастроек = Каталог;
КонецПроцедуры
Процедура СбросСостоянияМенеджера() Экспорт
ЛокальныеНастройки = Неопределено;
ГлобальныеНастройки = Неопределено;
ИспользуютсяЛокальныеНастройки = Ложь;
НастройкиИнициализированы = Ложь;
КаталогГлобальныхНастроек = Неопределено;
КаталогРепозитория = Неопределено;
КонецПроцедуры
СбросСостоянияМенеджера();
СбросСостоянияМенеджера();

View File

@ -16,15 +16,15 @@
Перем ПарсерКоманд;
Перем ИсполнителиКоманд;
Перем ОбъектНастроек;
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ОТКРЫТЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Инициализирует и настраивает приложение
//
//
// Параметры:
// Настройка - Модуль - Модуль, в котором определены настройки приложения
// МенеджерНастроек - Модуль - Модуль, в котором определены настройки приложения
//
// Возвращаемое значение:
// Модуль - Модуль менеджера приложения
@ -33,18 +33,18 @@
// Служебные переменные
ПарсерКоманд = Новый ПарсерАргументовКоманднойСтроки();
ИсполнителиКоманд = Новый Соответствие;
ИсполнителиКоманд = Новый Соответствие;
ОбъектНастроек = МенеджерНастроек;
// Логирование
Лог = Логирование.ПолучитьЛог(ОбъектНастроек.ИмяЛогаСистемы());
Лог.УстановитьРаскладку(ОбъектНастроек);
// Инициализация команд
ОбъектНастроек.НастроитьКомандыПриложения(ЭтотОбъект);
Возврат ЭтотОбъект;
КонецФункции
// Добавляет команду в приложение
@ -52,59 +52,57 @@
// Параметры:
// ИмяКоманды - Строка - Имя команды
// КлассРеализации - Строка - Имя файла класса, в котором реализована команда
// Описаниекоманды - Строка - краткое описание назначения команды
// ОписаниеКоманды - Строка - краткое описание назначения команды
//
Процедура ДобавитьКоманду(Знач ИмяКоманды, Знач КлассРеализации, Знач ОписаниеКоманды) Экспорт
Попытка
РеализацияКоманды = Новый(КлассРеализации);
Команда = ПарсерКоманд.ОписаниеКоманды(ИмяКоманды, ОписаниеКоманды);
ПарсерКоманд.ДобавитьКоманду(Команда);
РеализацияКоманды.НастроитьКоманду(Команда, ПарсерКоманд);
ИсполнителиКоманд.Вставить(ИмяКоманды, РеализацияКоманды);
Исключение
ЗавершитьРаботуПриложенияСОшибкой(СтрШаблон("Не удалось инициализировать команду '%1' для класса '%2' по причине:
|%3", ИмяКоманды, КлассРеализации, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
|%3", ИмяКоманды, КлассРеализации, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
КонецПроцедуры
// Аварийно завершает работу приложения с ошибкой
//
//
// Параметры:
// Сообщение - Строка - Сообщение, которое будет выведено пользователю перед завершением
// КодВозврата (не обязательный) - Число - Код возврата с которым будет закрыто приложение
// Значение по умолчанию: "ОшибкаВремениВыполнения" -- 1
// КодВозврата - Число - Код возврата, с которым будет закрыто приложение. По умолчанию: "ОшибкаВремениВыполнения" -- 1
//
Процедура ЗавершитьРаботуПриложенияСОшибкой(Знач Сообщение, Знач КодВозврата = Неопределено) Экспорт
Если КодВозврата = Неопределено Тогда
КодВозврата = РезультатыКоманд().ОшибкаВремениВыполнения;
КонецЕсли;
Лог.КритичнаяОшибка(Сообщение);
ЗавершитьРаботу(КодВозврата);
КонецПроцедуры
// Завершает работу приложения
//
//
// Параметры:
// КодВозврата (не обязательный) - Число - Код возврата с которым будет закрыто приложение
// Значение по умолчанию: "Успех" -- 0
// КодВозврата - Число - Код возврата, с которым будет закрыто приложение. По умолчанию: "Успех" -- 0.
//
Процедура ЗавершитьРаботуПриложения(Знач КодВозврата = Неопределено) Экспорт
Если КодВозврата = Неопределено Тогда
КодВозврата = РезультатыКоманд().Успех;
КонецЕсли;
ЗавершитьРаботу(КодВозврата);
КонецПроцедуры
// Осуществляет запуск приложения на выполнение
@ -118,35 +116,35 @@
ПараметрыЗапуска = ПарсерКоманд.Разобрать(АргументыКоманднойСтроки);
Исключение
Лог.Отладка(ОписаниеОшибки());
Лог.Ошибка("Не удалось определить требуемое действие.");
ВывестиСправкуПоКомандам();
Возврат РезультатыКоманд().НеверныеПараметры;
Конецпопытки;
КонецПопытки;
Команда = "";
ЗначенияПараметров = Неопределено;
Если ПараметрыЗапуска = Неопределено ИЛИ ПараметрыЗапуска.Количество() = 0 Тогда
ВывестиВерсию();
ВывестиСправкуПоКомандам();
Возврат РезультатыКоманд().НеверныеПараметры;
ИначеЕсли ТипЗнч(ПараметрыЗапуска) = Тип("Структура") Тогда
// это команда
Команда = ПараметрыЗапуска.Команда;
ЗначенияПараметров = ПараметрыЗапуска.ЗначенияПараметров;
Команда = ПараметрыЗапуска.Команда;
ЗначенияПараметров = ПараметрыЗапуска.ЗначенияПараметров;
Лог.Отладка("Выполняю команду продукта %1", Команда);
ИначеЕсли ЗначениеЗаполнено(ОбъектНастроек.ИмяКомандыПоУмолчанию()) Тогда
// это команда по-умолчанию
Команда = ОбъектНастроек.ИмяКомандыПоУмолчанию();
ЗначенияПараметров = ПараметрыЗапуска;
Команда = ОбъектНастроек.ИмяКомандыПоУмолчанию();
ЗначенияПараметров = ПараметрыЗапуска;
Лог.Отладка("Выполняю команду продукта по умолчанию %1", Команда);
Иначе
@ -156,9 +154,9 @@
КонецЕсли;
Если Команда <> ОбъектНастроек.ИмяКомандыВерсия() Тогда
ВывестиВерсию();
КонецЕсли;
Возврат ВыполнитьКоманду(Команда, ЗначенияПараметров);
@ -175,13 +173,13 @@
Команда = ПолучитьКоманду(ИмяКоманды);
КодВозврата = Команда.ВыполнитьКоманду(ПараметрыКоманды, ЭтотОбъект);
Если КодВозврата = Неопределено Тогда
КодВозврата = РезультатыКоманд().Успех;
КонецЕсли;
Возврат КодВозврата;
КонецФункции // ВыполнитьКоманду
///////////////////////////////////////////////////////////////////////////////
@ -190,9 +188,9 @@
// Возвращает лог приложения
Функция ПолучитьЛог() Экспорт
Возврат Лог;
КонецФункции // ПолучитьЛог
// Возвращает версию продукта
@ -232,16 +230,16 @@
// Выводит справку по всем командам приложения
Процедура ВывестиСправкуПоКомандам() Экспорт
ПарсерКоманд.ВывестиСправкуПоКомандам();
КонецПроцедуры // ВывестиСправкуПоКомандам
// Выводит справку по указанной команде приложения.
Процедура ВывестиСправкуПоКоманде(Знач ИмяКоманды) Экспорт
ПарсерКоманд.ВывестиСправкуПоКоманде(ИмяКоманды);
КонецПроцедуры // ВывестиСправкуПоКоманде
///////////////////////////////////////////////////////////////////////////////
@ -250,14 +248,14 @@
// Возвращает стандартные коды возврата приложения
Функция РезультатыКоманд() Экспорт
РезультатыКоманд = Новый Структура;
РезультатыКоманд.Вставить("Успех", 0);
РезультатыКоманд.Вставить("НеверныеПараметры", 5);
РезультатыКоманд.Вставить("ОшибкаВремениВыполнения", 1);
Возврат РезультатыКоманд;
КонецФункции // РезультатыКоманд
///////////////////////////////////////////////////////////////////////////////
@ -269,9 +267,9 @@
КлассРеализации = ИсполнителиКоманд[ИмяКоманды];
Если КлассРеализации = Неопределено Тогда
ВызватьИсключение СтрШаблон("Неверная операция. Команда '%1' не предусмотрена.", ИмяКоманды);
КонецЕсли;
Возврат КлассРеализации;
@ -290,7 +288,7 @@
Лог.Ошибка("Некорректные аргументы командной строки");
ВывестиСправкуПоКомандам();
Возврат РезультатыКоманд().НеверныеПараметры;
КонецФункции // НекорректныеПараметры()

View File

@ -0,0 +1,99 @@
Перем КаталогиТиповМетаданных;
Перем КаталогиТиповМетаданныхДляТестов;
// КаталогиТиповМетаданных
// Возвращает список имен каталогов и типов метаданных в них.
// Возвращаемое значение:
// СписокЗначений - Список каталогов
// * Значение - Строка - Имя каталога
// * Представление - Срока - Имя типа метаданных
Функция КаталогиТиповМетаданных() Экспорт
Если КаталогиТиповМетаданных = Неопределено Тогда
КаталогиТиповМетаданных = Новый СписокЗначений();
КаталогиТиповМетаданных.Добавить("AccountingRegisters", "AccountingRegister");
КаталогиТиповМетаданных.Добавить("AccumulationRegisters", "AccumulationRegister");
КаталогиТиповМетаданных.Добавить("Bots", "Bot");
КаталогиТиповМетаданных.Добавить("BusinessProcesses", "BusinessProcess");
КаталогиТиповМетаданных.Добавить("Catalogs", "Catalog");
КаталогиТиповМетаданных.Добавить("ChartsOfAccounts", "ChartOfAccounts");
КаталогиТиповМетаданных.Добавить("ChartsOfCalculationTypes", "ChartOfCalculationTypes");
КаталогиТиповМетаданных.Добавить("ChartsOfCharacteristicTypes", "ChartOfCharacteristicTypes");
КаталогиТиповМетаданных.Добавить("CalculationRegisters", "CalculationRegister");
КаталогиТиповМетаданных.Добавить("CommandGroups", "CommandGroup");
КаталогиТиповМетаданных.Добавить("CommonAttributes", "CommonAttribute");
КаталогиТиповМетаданных.Добавить("CommonCommands", "CommonCommand");
КаталогиТиповМетаданных.Добавить("CommonForms", "CommonForm");
КаталогиТиповМетаданных.Добавить("CommonModules", "CommonModule");
КаталогиТиповМетаданных.Добавить("CommonPictures", "CommonPicture");
КаталогиТиповМетаданных.Добавить("CommonTemplates", "CommonTemplate");
КаталогиТиповМетаданных.Добавить("Constants", "Constant");
КаталогиТиповМетаданных.Добавить("DataProcessors", "DataProcessor");
КаталогиТиповМетаданных.Добавить("DefinedTypes", "DefinedType");
КаталогиТиповМетаданных.Добавить("DocumentJournals", "DocumentJournal");
КаталогиТиповМетаданных.Добавить("DocumentNumerators", "DocumentNumerator");
КаталогиТиповМетаданных.Добавить("Documents", "Document");
КаталогиТиповМетаданных.Добавить("Enums", "Enum");
КаталогиТиповМетаданных.Добавить("EventSubscriptions", "EventSubscription");
КаталогиТиповМетаданных.Добавить("ExchangePlans", "ExchangePlan");
КаталогиТиповМетаданных.Добавить("ExternalDataSources", "ExternalDataSource");
КаталогиТиповМетаданных.Добавить("FilterCriteria", "FilterCriterion");
КаталогиТиповМетаданных.Добавить("FunctionalOptions", "FunctionalOption");
КаталогиТиповМетаданных.Добавить("FunctionalOptionsParameters", "FunctionalOptionsParameter");
КаталогиТиповМетаданных.Добавить("HTTPServices", "HTTPService");
КаталогиТиповМетаданных.Добавить("InformationRegisters", "InformationRegister");
КаталогиТиповМетаданных.Добавить("Languages", "Language");
КаталогиТиповМетаданных.Добавить("Reports", "Report");
КаталогиТиповМетаданных.Добавить("Roles", "Role");
КаталогиТиповМетаданных.Добавить("ScheduledJobs", "ScheduledJob");
КаталогиТиповМетаданных.Добавить("SessionParameters", "SessionParameter");
КаталогиТиповМетаданных.Добавить("SettingsStorages", "SettingsStorage");
КаталогиТиповМетаданных.Добавить("StyleItems", "StyleItem");
КаталогиТиповМетаданных.Добавить("Sequences", "Sequence");
КаталогиТиповМетаданных.Добавить("Styles", "Style");
КаталогиТиповМетаданных.Добавить("Subsystems", "Subsystem");
КаталогиТиповМетаданных.Добавить("Tasks", "Task");
КаталогиТиповМетаданных.Добавить("WebServices", "WebService");
КаталогиТиповМетаданных.Добавить("WSReferences", "WSReference");
КаталогиТиповМетаданных.Добавить("XDTOPackages", "XDTOPackage");
КонецЕсли;
Возврат КаталогиТиповМетаданных;
КонецФункции
// КаталогиТиповМетаданныхДляТестов
// Возвращает список имен каталогов типов метаданных, для которых генерируются тесты, и их краткие представления.
// Возвращаемое значение:
// СписокЗначений - Список каталогов
// * Значение - Строка - Имя каталога
// * Представление - Срока - Краткое представление
Функция КаталогиТиповМетаданныхДляТестов() Экспорт
Если КаталогиТиповМетаданныхДляТестов = Неопределено Тогда
КаталогиТиповМетаданныхДляТестов = Новый СписокЗначений();
КаталогиТиповМетаданныхДляТестов.Добавить("AccountingRegisters", "РБ");
КаталогиТиповМетаданныхДляТестов.Добавить("AccumulationRegisters", "РН");
КаталогиТиповМетаданныхДляТестов.Добавить("BusinessProcesses", "БП");
КаталогиТиповМетаданныхДляТестов.Добавить("CalculationRegisters", "РР");
КаталогиТиповМетаданныхДляТестов.Добавить("Catalogs", "Спр");
КаталогиТиповМетаданныхДляТестов.Добавить("ChartsOfAccounts", "ПС");
КаталогиТиповМетаданныхДляТестов.Добавить("ChartsOfCalculationTypes", "ПВР");
КаталогиТиповМетаданныхДляТестов.Добавить("ChartsOfCharacteristicTypes", "ПВХ");
КаталогиТиповМетаданныхДляТестов.Добавить("CommonModules", "ОМ");
КаталогиТиповМетаданныхДляТестов.Добавить("DataProcessors", "Обр");
КаталогиТиповМетаданныхДляТестов.Добавить("Documents", "Док");
КаталогиТиповМетаданныхДляТестов.Добавить("Enums", "Пер");
КаталогиТиповМетаданныхДляТестов.Добавить("ExchangePlans", "ПО");
КаталогиТиповМетаданныхДляТестов.Добавить("InformationRegisters", "РС");
КаталогиТиповМетаданныхДляТестов.Добавить("Reports", "Отч");
КаталогиТиповМетаданныхДляТестов.Добавить("Tasks", "Зад");
КонецЕсли;
Возврат КаталогиТиповМетаданныхДляТестов;
КонецФункции

View File

@ -2,7 +2,7 @@
//
// Служебный модуль с набором служебных параметров приложения
//
// При создании нового приложения обязательно внести изменение
// При создании нового приложения обязательно внести изменение
// в ф-ии ИмяПродукта, указав имя вашего приложения.
//
// При выпуске новой версии обязательно изменить ее значение
@ -83,11 +83,11 @@
// См. описание метода "УстановитьРаскладку" библиотеки logos
//
Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт
Возврат СтрШаблон("%1: %2 - %3", ТекущаяДата(), УровниЛога.НаименованиеУровня(Уровень), Сообщение);
КонецФункции
Возврат СтрШаблон("%1: %2 - %3", ТекущаяДата(), УровниЛога.НаименованиеУровня(Уровень), Сообщение);
КонецФункции
// ИмяЛогаСистемы
// Возвращает идентификатор лога приложения
//
@ -112,7 +112,7 @@
Функция ИмяКомандыВерсия() Экспорт
Возврат "version";
КонецФункции // ИмяКомандыВерсия
// Возвращает имя команды "help" (ключ командной строки)
@ -121,7 +121,7 @@
// Строка - имя команды
//
Функция ИмяКомандыПомощь() Экспорт
Возврат "help";
КонецФункции // ИмяКомандыПомощь()
@ -129,7 +129,7 @@
// ИмяКомандыПоУмолчанию
// Одна из команд может вызываться неявно, без указания команды.
// Иными словами, здесь указывается какой обработчик надо вызывать, если приложение запущено без какой-либо команды
// myapp /home/user/somefile.txt будет аналогично myapp default-action /home/user/somefile.txt
// myapp /home/user/somefile.txt будет аналогично myapp default-action /home/user/somefile.txt
//
// Возвращаемое значение:
// Строка - имя команды по умолчанию
@ -140,19 +140,19 @@
КонецФункции // ИмяКомандыПоУмолчанию
// НастроитьКомандыПриложения
// Регистрирует классы обрабатывающие команды прилоложения
//
// Регистрирует классы обрабатывающие команды приложения
//
// Параметры:
// Приложение - Модуль - Модуль менеджера приложения
Процедура НастроитьКомандыПриложения(Знач Приложение) Экспорт
Приложение.ДобавитьКоманду(ИмяКомандыПомощь(), "КомандаСправкаПоПараметрам", "Выводит справку по командам");
Приложение.ДобавитьКоманду(ИмяКомандыВерсия(), "КомандаVersion", "Выводит версию приложения");
Приложение.ДобавитьКоманду("precommit", "КомандаПрекоммит", "Выполняет сценарии precommit");
Приложение.ДобавитьКоманду("install", "КомандаИнсталл",
"Выполняет подключение (установку) precommit hook'а в репозиторий");
Приложение.ДобавитьКоманду("configure", "КомандаКонфигуратион", "Выполняет настройку репозитория");
Приложение.ДобавитьКоманду("exec-rules", "КомандаВыполнитьСценарии",
"Выполняет указанные сценарии в каталоге репозитория принудительно, без обращения к git");
Приложение.ДобавитьКоманду(ИмяКомандыПомощь(), "КомандаСправкаПоПараметрам", "Выводит справку по командам");
Приложение.ДобавитьКоманду(ИмяКомандыВерсия(), "КомандаVersion", "Выводит версию приложения");
Приложение.ДобавитьКоманду("precommit", "КомандаПрекоммит", "Выполняет сценарии precommit");
Приложение.ДобавитьКоманду("install", "КомандаИнсталл",
"Выполняет подключение (установку) precommit hook'а в репозиторий");
Приложение.ДобавитьКоманду("configure", "КомандаКонфигуратион", "Выполняет настройку репозитория");
Приложение.ДобавитьКоманду("exec-rules", "КомандаВыполнитьСценарии",
"Выполняет указанные сценарии в каталоге репозитория принудительно, без обращения к git");
КонецПроцедуры // ПриРегистрацииКомандПриложения

View File

@ -101,12 +101,15 @@
КонецПроцедуры
Функция ПолучитьСтандартныеПараметрыОбработки() Экспорт
Лог = МенеджерПриложения.ПолучитьЛог();
ПараметрыОбработки = Новый Структура();
ПараметрыОбработки.Вставить("Лог", Лог);
ПараметрыОбработки.Вставить("ФайлыДляПостОбработки", Новый Массив);
ПараметрыОбработки.Вставить("ИзмененныеКаталоги", Новый Массив);
ПараметрыОбработки.Вставить("Лог", Лог);
ПараметрыОбработки.Вставить("КаталогРепозитория", Неопределено);
ПараметрыОбработки.Вставить("ТекущийКаталогИсходныхФайлов", Неопределено);
ПараметрыОбработки.Вставить("Настройки", Неопределено);
Возврат ПараметрыОбработки;
@ -118,7 +121,7 @@
// Параметры:
// КаталогРепозитория - <Строка> - <Адрес каталога репозитория>
// ИменаЗагружаемыхСценариев - <Массив.Строка> - <Предназначен для переопределения сценариев,
// Если задан загрузятся только они >
// Если задан загрузятся только они >
//
// Возвращаемое значение:
// <Соответствие> - <ключ - Ключ структуры настроек прекоммит или
@ -127,8 +130,6 @@
//
Функция ПолучитьСценарииСПараметрамиВыполнения(КаталогРепозитория, ИменаЗагружаемыхСценариев = Неопределено) Экспорт
ПараметрыОбработки = СценарииОбработки.ПолучитьСтандартныеПараметрыОбработки();
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
НастройкиПроектов = МенеджерНастроек.ПроектыКонфигурации();
НаборНастроек = Новый Соответствие;
@ -149,9 +150,9 @@
Настройка = Новый Структура("СценарииОбработки, НастройкиСценариев");
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев(ИмяПроекта)
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев(ИмяПроекта);
КонецЕсли;
Настройка.СценарииОбработки = СценарииОбработки.Загрузить(КаталогРепозитория,
ИмяПроекта,
ИменаЗагружаемыхСценариев);
@ -202,9 +203,9 @@
Функция НастройкиСценариев(ИменаСценариев, Знач КаталогСценариев = Неопределено) Экспорт
Если КаталогСценариев = Неопределено Тогда
КаталогСценариев = МенеджерПриложения.КаталогСценариев();
КонецЕсли;
НастройкиСценариев = Новый Соответствие;
@ -225,4 +226,4 @@
Возврат НастройкиСценариев;
КонецФункции
КонецФункции

View File

@ -7,7 +7,7 @@
///////////////////////////////////////////////////////////////////////////////
// ЭтоФайлИсходников
// Возвращает истину, если файл является файлом исходных кодов
// Возвращает истину, если файл является файлом исходных кодов
// Параметры:
// Файл - Файл - Полный путь к файлу
//
@ -196,4 +196,130 @@
Возврат СтрСравнить(Файл.Имя, "Form.form") = 0;
КонецФункции
КонецФункции
// ЭтоФайлЧастьТеста
// Возвращает истину, если файл относится к тестовому расширению
// Параметры:
// Файл - Файл - Полный путь к файлу
// КаталогРепозитория - Строка - Путь к репозиторию, для более точного определения принадлежности, необязательный
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлЧастьТеста(Файл, КаталогРепозитория = Неопределено) Экспорт
ПутьКФайлу = НРег(ПолучитьОтносительныйПуть(Файл.Путь, КаталогРепозитория));
Возврат СтрНайти(ПутьКФайлу, СтрШаблон("%1tests%1", ПолучитьРазделительПути())) <> 0;
КонецФункции
// ЭтоОбщийМодуль
// Возвращает истину, если файл является общим модулем
// Параметры:
// Файл - Файл - Полный путь к файлу
// КаталогИсходныхФайлов - Строка - Путь к исходникам, для более точного определения принадлежности, необязательный
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоОбщийМодуль(Файл, КаталогИсходныхФайлов = Неопределено) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
ПутьКФайлу = НРег(ПолучитьОтносительныйПуть(Файл.Путь, КаталогИсходныхФайлов));
Возврат СтрСравнить(Файл.Имя, "Module.bsl") = 0
И СтрНайти(ПутьКФайлу, СтрШаблон("%1commonmodules%1", ПолучитьРазделительПути())) <> 0;
КонецФункции
// ЭтоМодульМенеджера
// Возвращает истину, если файл является модулем менеджера
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоМодульМенеджера(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "ManagerModule.bsl") = 0;
КонецФункции
// ЭтоМодульОбъекта
// Возвращает истину, если файл является модулем объекта
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоМодульОбъекта(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "ObjectModule.bsl") = 0;
КонецФункции
// ЭтоМодульНабораЗаписей
// Возвращает истину, если файл является модулем набора записей
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоМодульНабораЗаписей(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "RecordSetModule.bsl") = 0;
КонецФункции
Функция ПолучитьОтносительныйПуть(Путь, Надкаталог)
Результат = Путь;
Если Не ЗначениеЗаполнено(Надкаталог) Тогда
Возврат Результат;
КонецЕсли;
ДлинаПутиНадкаталога = СтрДлина(Надкаталог);
Если СтрСравнить(Надкаталог, Лев(Путь, ДлинаПутиНадкаталога)) = 0 Тогда
Результат = Сред(Путь, ДлинаПутиНадкаталога + 1);
Если Не СтрНачинаетсяС(Результат, ПолучитьРазделительПути()) Тогда
Результат = ПолучитьРазделительПути() + Результат;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции

View File

@ -0,0 +1,460 @@
Перем Лог;
Перем ЗаголовокЛога;
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ДобавлениеТестовВРасширение";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги / файлы, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
ЗаголовокЛога = СтрШаблон("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
ВызватьИсключение ЗаголовокЛога + ": не заполнен параметр 'КаталогИсходныхФайлов'";
КонецЕсли;
Если Не ЗначениеЗаполнено(ДополнительныеПараметры.КаталогРепозитория) Тогда
ВызватьИсключение ЗаголовокЛога + ": не заполнен параметр 'ДополнительныеПараметры.КаталогРепозитория'";
КонецЕсли;
Если Не ИспользуетсяФорматEDT(КаталогИсходныхФайлов) Тогда
Лог.Отладка(ЗаголовокЛога + ": это не формат EDT в каталоге исходных файлов '%1'", КаталогИсходныхФайлов);
Возврат Ложь;
КонецЕсли;
Если Не ИспользуетсяРасширениеСТестами(ДополнительныеПараметры.КаталогРепозитория) Тогда
Лог.Отладка(ЗаголовокЛога + ": нет расширения с тестами в каталоге репозитория 'tests'");
Возврат Ложь;
КонецЕсли;
Если Не АнализируемыйФайл.Существует()
Или Не ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл)
Или ТипыФайлов.ЭтоФайлЧастьТеста(АнализируемыйФайл, ДополнительныеПараметры.КаталогРепозитория) Тогда
Лог.Отладка(ЗаголовокЛога + ": это не файл исходников проекта");
Возврат Ложь;
КонецЕсли;
МетодыМодуля = МетодыМодуля(
АнализируемыйФайл.ПолноеИмя,
"^\s*?(?:Процедура|Функция|Procedure|Function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\([^\)]*?\)\s*?(?:Экспорт|Export)");
Если МетодыМодуля.Количество() = 0 Тогда
Лог.Отладка(ЗаголовокЛога + ": нет экспортных методов в файле исходников");
Возврат Ложь;
КонецЕсли;
МетаИнформацияФайла = МетаинформацияФайла(КаталогИсходныхФайлов, АнализируемыйФайл);
Если МетаИнформацияФайла = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Лог.Информация(ЗаголовокЛога);
Возврат ТестыОбновлены(ДополнительныеПараметры, МетаИнформацияФайла, МетодыМодуля);
КонецФункции
Функция ИспользуетсяФорматEDT(КаталогИсходныхФайлов)
ФайлОписанияКонфигурации = Новый Файл(ОбъединитьПути(КаталогИсходныхФайлов, ОтносительныйПутьФайлаОписанияКонфигурацииEDT()));
Возврат ФайлОписанияКонфигурации.Существует();
КонецФункции
Функция ИспользуетсяРасширениеСТестами(КаталогРепозитория)
ФайлОписанияКонфигурации = Новый Файл(ОбъединитьПути(КаталогРепозитория, "tests", ОтносительныйПутьФайлаОписанияКонфигурацииEDT()));
Возврат ФайлОписанияКонфигурации.Существует();
КонецФункции
Функция ОтносительныйПутьФайлаОписанияКонфигурацииEDT()
Возврат ОбъединитьПути("src", "Configuration", "Configuration.mdo");
КонецФункции
Функция МетодыМодуля(ИмяФайла, Паттерн)
Методы = Новый Массив();
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если ПустаяСтрока(ТекстМодуля) Тогда
Возврат Методы;
КонецЕсли;
ШаблонПоиска = Новый РегулярноеВыражение(Паттерн);
ШаблонПоиска.Многострочный = Истина;
ШаблонПоиска.ИгнорироватьРегистр = Истина;
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
Для Каждого Совпадение Из Совпадения Цикл
Методы.Добавить(Совпадение.Группы[1].Значение);
КонецЦикла;
Возврат Методы;
КонецФункции
Функция МетаинформацияФайла(КаталогИсходныхФайлов, АнализируемыйФайл)
ФайлКаталогИсходников = Новый Файл(КаталогИсходныхФайлов);
КраткийПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ФайлКаталогИсходников.ПолноеИмя, "");
Если СтрНачинаетсяС(КраткийПуть, ПолучитьРазделительПути()) Тогда
КраткийПуть = Сред(КраткийПуть, 2);
КонецЕсли;
СоставКраткогоПутиКФайлу = СтрРазделить(КраткийПуть, ПолучитьРазделительПути());
ОжидаемоеКоличествоУровней = 4; // src\<КаталогТипаМетаданных>\<ИмяОбъектаМетаданных>\<ФайлИсходников>
Если СоставКраткогоПутиКФайлу.Количество() < ОжидаемоеКоличествоУровней Тогда
Лог.Отладка(ЗаголовокЛога + ": неизвестное расположение в каталоге исходных файлов");
Возврат Неопределено;
КонецЕсли;
КаталогТипаМетаданных = СоставКраткогоПутиКФайлу[1];
ЭлементСписка = МетаданныеКонфигурации.КаталогиТиповМетаданных().НайтиПоЗначению(КаталогТипаМетаданных);
Если ЭлементСписка = Неопределено Тогда
Лог.Отладка(ЗаголовокЛога + ": не удалось определить тип объекта метаданных '%1'", КаталогТипаМетаданных);
Возврат Неопределено;
КонецЕсли;
ТипМетаданных = ЭлементСписка.Представление;
ЭлементСписка = МетаданныеКонфигурации.КаталогиТиповМетаданныхДляТестов().НайтиПоЗначению(КаталогТипаМетаданных);
Если ЭлементСписка = Неопределено Тогда
Лог.Отладка(ЗаголовокЛога + ": тесты не генерируются для типа метаданных '%1' ", КаталогТипаМетаданных);
Возврат Неопределено;
КонецЕсли;
КраткоеПредставлениеТипаМетаданных = ЭлементСписка.Представление;
ИмяОбъектаМетаданных = СоставКраткогоПутиКФайлу[2];
ИмяТестовогоМодуля = СтрШаблон("%1_%2", КраткоеПредставлениеТипаМетаданных, ИмяОбъектаМетаданных);
Метаинформация = Новый Структура();
Метаинформация.Вставить("ТипМетаданных", ТипМетаданных);
Метаинформация.Вставить("КраткоеПредставление", КраткоеПредставлениеТипаМетаданных);
Метаинформация.Вставить("ИмяТестовогоМодуля", ИмяТестовогоМодуля);
Метаинформация.Вставить("Глобальный", Ложь);
Метаинформация.Вставить("Клиент", Ложь);
Метаинформация.Вставить("Сервер", Ложь);
Если ТипыФайлов.ЭтоОбщийМодуль(АнализируемыйФайл, КаталогИсходныхФайлов) Тогда
// src\CommonModules\ОбщийМодуль\Module.bsl
ФайлОписания = Новый Файл(ОбъединитьПути(АнализируемыйФайл.Путь, ИмяОбъектаМетаданных + ".mdo"));
Если ФайлОписания.Существует() Тогда
ТекстОписания = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписания.ПолноеИмя);
Метаинформация.Глобальный = СтрНайти(ТекстОписания, "<global>true</global>") <> 0;
Метаинформация.Клиент = СтрНайти(ТекстОписания, "<clientManagedApplication>true</clientManagedApplication>") <> 0;
Метаинформация.Сервер = СтрНайти(ТекстОписания, "<server>true</server>") <> 0;
Иначе
ВызватьИсключение СтрШаблон(ЗаголовокЛога + ": не найден файл описания общего модуля");
КонецЕсли;
ИначеЕсли ТипыФайлов.ЭтоМодульМенеджера(АнализируемыйФайл) Тогда
// src\Catalogs\Справочник\ManagerModule.bsl
Метаинформация.Сервер = Истина;
Метаинформация.ИмяТестовогоМодуля = СтрШаблон("%1_%2", Метаинформация.ИмяТестовогоМодуля, "ММ");
ИначеЕсли ТипыФайлов.ЭтоМодульОбъекта(АнализируемыйФайл) Тогда
// src\Catalogs\Справочник\ObjectModule.bsl
Метаинформация.Сервер = Истина;
Метаинформация.ИмяТестовогоМодуля = СтрШаблон("%1_%2", Метаинформация.ИмяТестовогоМодуля, "МО");
ИначеЕсли ТипыФайлов.ЭтоМодульНабораЗаписей(АнализируемыйФайл) Тогда
// src\InformationRegisters\Регистр\RecordSetModule.bsl
Метаинформация.Сервер = Истина;
Метаинформация.ИмяТестовогоМодуля = СтрШаблон("%1_%2", Метаинформация.ИмяТестовогоМодуля, "МНЗ");
Иначе
Лог.Отладка(ЗаголовокЛога + ": неподходящий тип исходного файла");
Возврат Неопределено;
КонецЕсли;
Возврат Метаинформация;
КонецФункции
Функция ТестыОбновлены(ДополнительныеПараметры, МетаИнформацияФайла, Методы)
ИзмененныеФайлы = Новый Массив();
КаталогТестов = ОбъединитьПути(ДополнительныеПараметры.КаталогРепозитория, "tests");
КаталогМодулей = ОбъединитьПути(КаталогТестов, "src", "CommonModules");
ПутьФайлаМодуляТеста = ОбъединитьПути(КаталогМодулей, МетаИнформацияФайла.ИмяТестовогоМодуля, "Module.bsl");
ФайлМодуляТеста = Новый Файл(ПутьФайлаМодуляТеста);
Если Не ФайлМодуляТеста.Существует() Тогда
// Добавление общего модуля в расширение.
ФайлКаталогаМодуляТеста = Новый Файл(ФайлМодуляТеста.Путь);
Если Не ФайлКаталогаМодуляТеста.Существует() Тогда
СоздатьКаталог(ФайлКаталогаМодуляТеста.ПолноеИмя);
КонецЕсли;
// Описание модуля.
ПутьФайлаОписанияТеста = ОбъединитьПути(
КаталогМодулей,
МетаИнформацияФайла.ИмяТестовогоМодуля,
МетаИнформацияФайла.ИмяТестовогоМодуля + ".mdo");
ОписаниеМодуля = СтрШаблон(
ШаблонОписанияТеста(),
Строка(Новый УникальныйИдентификатор()),
МетаИнформацияФайла.ИмяТестовогоМодуля,
XMLСтрока(МетаИнформацияФайла.Клиент),
XMLСтрока(МетаИнформацияФайла.Сервер));
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.УстановитьТекст(ОписаниеМодуля);
ТекстовыйДокумент.Записать(ПутьФайлаОписанияТеста, КодировкаТекста.UTF8);
// Текст модуля.
ТекстыТеста = ТекстыТеста(Методы, МетаИнформацияФайла);
ТекстМодуля = СтрШаблон(
ШаблонТестовогоМодуля(),
СтрСоединить(ТекстыТеста.ИсполняемыеСценарии, Символы.ПС),
СтрСоединить(ТекстыТеста.ТестовыеМетоды, Символы.ПС + Символы.ПС));
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.УстановитьТекст(ТекстМодуля);
ТекстовыйДокумент.Записать(ПутьФайлаМодуляТеста, КодировкаТекста.UTF8);
// Описание конфигурации тестов.
ПутьФайлаОписанияРасширенияТестов = ОбъединитьПути(КаталогТестов, "src", "Configuration", "Configuration.mdo");
ТекстОписанияРасширенияТестов = ФайловыеОперации.ПрочитатьТекстФайла(ПутьФайлаОписанияРасширенияТестов);
ТекстОписанияРасширенияТестов = СтрЗаменить(
ТекстОписанияРасширенияТестов,
"</mdclass:Configuration>",
СтрШаблон(
" <commonModules>CommonModule.%1</commonModules>
|</mdclass:Configuration>",
МетаИнформацияФайла.ИмяТестовогоМодуля));
ФайловыеОперации.ЗаписатьТекстФайла(ПутьФайлаОписанияРасширенияТестов, ТекстОписанияРасширенияТестов);
ИзмененныеФайлы.Добавить(ПутьФайлаОписанияТеста);
ИзмененныеФайлы.Добавить(ПутьФайлаМодуляТеста);
ИзмененныеФайлы.Добавить(ПутьФайлаОписанияРасширенияТестов);
Лог.Информация("Добавлен модуль тестов '%1'", ПутьФайлаМодуляТеста);
Иначе
// Добавление отсутствующих сценариев в тестовый модуль.
НовыеМетоды = НовыйМетодыМодуляТестов(ПутьФайлаМодуляТеста, МетаИнформацияФайла, Методы);
Если НовыеМетоды.Количество() = 0 Тогда
Лог.Отладка(ЗаголовокЛога + ": все экспортные методы тестов уже есть в модуле '%1'", ПутьФайлаМодуляТеста);
Возврат Ложь;
КонецЕсли;
ДанныеТеста = ТекстыТеста(НовыеМетоды, МетаИнформацияФайла);
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьФайлаМодуляТеста);
ТекстМодуля = СтрЗаменить(
ТекстМодуля,
" Возврат ИсполняемыеСценарии;",
СтрШаблон(
"%1
| Возврат ИсполняемыеСценарии;", СтрСоединить(ДанныеТеста.ИсполняемыеСценарии, Символы.ПС)));
ТекстМодуля = СтрЗаменить(
ТекстМодуля,
"#Область Тесты
|",
СтрШаблон(
"#Область Тесты
|
|%1
|",
СтрСоединить(ДанныеТеста.ТестовыеМетоды, Символы.ПС + Символы.ПС)));
ФайловыеОперации.ЗаписатьТекстФайла(ПутьФайлаМодуляТеста, ТекстМодуля);
ИзмененныеФайлы.Добавить(ПутьФайлаМодуляТеста);
Лог.Информация("Обновлен модуль тестов '%1'", ПутьФайлаМодуляТеста);
КонецЕсли;
Для Каждого ИмяФайла Из ИзмененныеФайлы Цикл
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(ИмяФайла);
ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(ИмяФайла);
КонецЦикла;
Возврат Истина;
КонецФункции
Функция ШаблонОписанияТеста()
Возврат
"<?xml version=""1.0"" encoding=""UTF-8""?>
|<mdclass:CommonModule xmlns:mdclass=""http://g5.1c.ru/v8/dt/metadata/mdclass"" uuid=""%1"">
| <name>%2</name>
| <synonym>
| <key>ru</key>
| <value>%2</value>
| </synonym>
| <clientManagedApplication>%3</clientManagedApplication>
| <server>%4</server>
|</mdclass:CommonModule>";
КонецФункции
Функция ШаблонТестовогоМодуля()
Возврат
"/////////////////////////////////////////////////////////////////////////////////
|// Экспортные процедуры-тесты
|/////////////////////////////////////////////////////////////////////////////////
|
|#Область ТестыAPI
|
|// ИсполняемыеСценарии
|// Сервисный метод для получения списка тестовых методов
|// Параметры:
|// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|// Возвращаемое значение:
|// Массив - Имена методов тестов
|Функция ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
| ИсполняемыеСценарии = Новый Массив;
|%1
| Возврат ИсполняемыеСценарии;
|
|КонецФункции
|
|#КонецОбласти
|
|#Область Тесты
|
|%2
|
|#КонецОбласти
|
|/////////////////////////////////////////////////////////////////////////////////
|// Процедуры и функции, составляющие внутреннюю реализацию модуля
|/////////////////////////////////////////////////////////////////////////////////
|
|#Область СлужебныеПроцедурыИФункции
|#КонецОбласти
|";
КонецФункции
Функция ШаблонМетодаТеста()
Возврат
"// @unit-test:%1
|Процедура %3(Фреймворк, ВыполнитьВТранзакцииСОтменой = Истина) Экспорт
|
|#Если Сервер Тогда
| Если ВыполнитьВТранзакцииСОтменой Тогда
|
| TestsWrapper.ВыполнитьТестВТранзакции(
| Метаданные.ОбщиеМодули.%2,
| ""%3"",
| Фреймворк);
|
| Возврат;
|
| КонецЕсли;
|#КонецЕсли
|
| ВызватьИсключение ""Тест '%2.%3' не реализован"";
|
|КонецПроцедуры";
КонецФункции
Функция НовыйМетодыМодуляТестов(ПутьФайлаМодуляТеста, МетаИнформацияФайла, МетодыМодуляИсходников)
МетодыМодуляТестов = МетодыМодуля(
ПутьФайлаМодуляТеста,
"^\/\/\s*?\@unit-test\:.*?\n(?:Процедура|Procedure)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\([^\)]*?\)\s*?(?:Экспорт|Export)");
Если МетодыМодуляТестов.Количество() = 0 Тогда
ВызватьИсключение СтрШаблон(ЗаголовокЛога + ": нет экспортных методов в модуле '%1'", ПутьФайлаМодуляТеста);
КонецЕсли;
НовыеМетоды = Новый Массив();
Для каждого Метод Из МетодыМодуляИсходников Цикл
ТестовыйМетод = ?(МетаИнформацияФайла.Глобальный, "Глобальный", "") + Метод;
Если МетодыМодуляТестов.Найти(ТестовыйМетод) = Неопределено Тогда
НовыеМетоды.Добавить(Метод);
КонецЕсли;
КонецЦикла;
Возврат НовыеМетоды;
КонецФункции
Функция ТекстыТеста(Методы, МетаИнформацияФайла)
ТекстыТеста = Новый Структура();
ТекстыТеста.Вставить("ИсполняемыеСценарии", Новый Массив());
ТекстыТеста.Вставить("ТестовыеМетоды", Новый Массив());
Для каждого Метод Из Методы Цикл
ИмяМетода = ?(МетаИнформацияФайла.Глобальный, "Глобальный", "") + Метод;
ТекстыТеста.ИсполняемыеСценарии.Добавить(СтрШаблон(" ИсполняемыеСценарии.Добавить(""%1"");", ИмяМетода));
ТекстыТеста.ТестовыеМетоды.Добавить(
СтрШаблон(ШаблонМетодаТеста(),
МетаИнформацияФайла.ТипМетаданных,
МетаИнформацияФайла.ИмяТестовогоМодуля,
ИмяМетода));
КонецЦикла;
Возврат ТекстыТеста;
КонецФункции

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
//
//
// Служебный модуль с реализацией сценариев обработки файлов <ОбработкаЮнитТестов>
//
///////////////////////////////////////////////////////////////////////////////
@ -22,7 +22,7 @@
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
@ -39,17 +39,17 @@
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
// анализ файла без изменения его содержимого
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл)
И СтрНайти(АнализируемыйФайл.ПолноеИмя, "/tests/") Тогда
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл)
И ТипыФайлов.ЭтоФайлЧастьТеста(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ОбработкаФайла(АнализируемыйФайл) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли;
@ -59,7 +59,7 @@
КонецФункции // ОбработатьФайл()
Функция ОбработкаФайла(Файл)
РегулярноеВыражениеМетоды = Новый РегулярноеВыражение("\/\/\s*?\@unit-test\:.*?\nПроцедура\s+?(.+)\s*?\(.*\s*Экспорт");
РегулярноеВыражениеМетоды.ИгнорироватьРегистр = Истина;
РегулярноеВыражениеМетоды.Многострочный = Истина;
@ -67,68 +67,72 @@
РегулярноеВыражениеAPI = Новый РегулярноеВыражение("(#Область ТестыAPI\s*?[.\w\W]+?#КонецОбласти\s*?$)");
РегулярноеВыражениеAPI.ИгнорироватьРегистр = Истина;
РегулярноеВыражениеAPI.Многострочный = Истина;
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
Текст = ТекстовыйДокумент.ПолучитьТекст();
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
Текст = ТекстовыйДокумент.ПолучитьТекст();
Если Не ЗначениеЗаполнено(Текст) Тогда
Возврат Ложь;
КонецЕсли;
Совпадения = РегулярноеВыражениеМетоды.НайтиСовпадения(Текст);
ТекстМетода = "";
Если Совпадения.Количество() Тогда
Для Каждого Совпадение Из Совпадения Цикл
ТекстМетода = ТекстМетода + Символы.ПС
+ " ИсполняемыеСценарии.Добавить(""" + Совпадение.Группы[1].Значение + """);";
ТекстМетода = ТекстМетода + Символы.ПС
+ " ИсполняемыеСценарии.Добавить(""" + Совпадение.Группы[1].Значение + """);";
КонецЦикла;
КонецЕсли;
Если Не ПустаяСтрока(ТекстМетода) Тогда
ТекстМетода = "#Область ТестыAPI
|
|// ИсполняемыеСценарии
|// Сервисный метод для получения списка тестовых методов
|// Параметры:
|// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|// Возвращаемое значение:
|// Массив - Имена методов тестов
|Функция ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
| ИсполняемыеСценарии = Новый Массив; " + ТекстМетода + "
|
| Возврат ИсполняемыеСценарии;
|
|КонецФункции
|
|#КонецОбласти";
|
|// ИсполняемыеСценарии
|// Сервисный метод для получения списка тестовых методов
|// Параметры:
|// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|// Возвращаемое значение:
|// Массив - Имена методов тестов
|Функция ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
| ИсполняемыеСценарии = Новый Массив; " + ТекстМетода + "
|
| Возврат ИсполняемыеСценарии;
|
|КонецФункции
|
|#КонецОбласти";
Совпадения = РегулярноеВыражениеAPI.НайтиСовпадения(Текст);
НовыйТекстМодуля = Текст;
Если Совпадения.Количество() Тогда
НовыйТекстМодуля = РегулярноеВыражениеAPI.Заменить(Текст, ТекстМетода);
Иначе
Поз = СтрНайти(Текст, "#Область Тесты");
Если Поз > 0 Тогда
НовыйТекстМодуля = Лев(Текст, Поз - 1) + ТекстМетода + Символы.ПС + Символы.ПС + Сред(Текст, Поз);
Иначе
НовыйТекстМодуля = ТекстМетода + Символы.ПС + Символы.ПС + Текст;
КонецЕсли;
КонецЕсли;
Если НовыйТекстМодуля <> Текст Тогда
ТекстовыйДокумент.УстановитьТекст(НовыйТекстМодуля);
ТекстовыйДокумент.Записать(Файл.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
Сообщить("Обновлен файл " + Файл.ПолноеИмя);
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
КонецФункции

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
//
//
// Служебный модуль с реализацией сценариев обработки файлов <СинхронизацияОбъектовМетаданныхИФайлов>
//
///////////////////////////////////////////////////////////////////////////////
@ -24,7 +24,7 @@
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
@ -68,8 +68,8 @@
// Это те объекты, которые есть в описании конфигурации
ОбъектыМетаданных = ПолучитьОбъектыМетаданных(ДочерниеЭлементы.Совпадения);
// Список базовых типов метаданных
СписокКаталогов = СписокКаталоговТиповМетаданных();
// Список базовых типов метаданных
СписокКаталогов = МетаданныеКонфигурации.КаталогиТиповМетаданных();
КорневойПуть = Новый Файл(ИмяФайла).Путь;
СписокДляУдаления = Новый Массив;
@ -132,7 +132,8 @@
// Ситуация редкая, проверим в самом конце на регистр
Строки = НадоПропустить.НайтиСтроки(Новый Структура("НормализованноеИмя", Нормализовать(ФайлОбъектаТипа.ИмяБезРасширения)));
Если Строки.Количество() Тогда
ОшибкаСтр = СтрШаблон("Имя каталога %2 отличается от метаданного %1. Надо переименовать папку %3", Строки[0].Имя, ФайлОбъектаТипа.ИмяБезРасширения, ФайлОбъектаТипа.ПолноеИмя);
ОшибкаСтр = СтрШаблон("Имя каталога %1 отличается от метаданного %2. Надо переименовать папку %3",
ФайлОбъектаТипа.ИмяБезРасширения, Строки[0].Имя, ФайлОбъектаТипа.ПолноеИмя);
ТекстОшибок.Добавить(ОшибкаСтр);
Продолжить;
КонецЕсли;
@ -146,7 +147,7 @@
ПеренестиМетаданныеВОшибку(ОбъектыМетаданных, ТекстОшибок);
// Разбор файлов для удаления в строку с ошибкой
// Разбор файлов для удаления в строку с ошибкой
Если СписокДляУдаления.Количество() Тогда
СтрокаОшибки = "Необходимо удалить файлы ";
@ -176,59 +177,7 @@
КонецФункции
Функция СписокКаталоговТиповМетаданных()
Список = Новый СписокЗначений();
Список.Добавить("AccumulationRegisters", "AccumulationRegister");
Список.Добавить("BusinessProcesses", "BusinessProcess");
Список.Добавить("Catalogs", "Catalog");
Список.Добавить("ChartsOfCalculationTypes", "ChartOfCalculationTypes");
Список.Добавить("ChartsOfCharacteristicTypes", "ChartOfCharacteristicTypes");
Список.Добавить("CalculationRegisters", "CalculationRegister");
Список.Добавить("CommandGroups", "CommandGroup");
Список.Добавить("CommonAttributes", "CommonAttribute");
Список.Добавить("CommonCommands", "CommonCommand");
Список.Добавить("CommonForms", "CommonForm");
Список.Добавить("CommonModules", "CommonModule");
Список.Добавить("CommonPictures", "CommonPicture");
Список.Добавить("CommonTemplates", "CommonTemplate");
Список.Добавить("Constants", "Constant");
Список.Добавить("DataProcessors", "DataProcessor");
Список.Добавить("DefinedTypes", "DefinedType");
Список.Добавить("DocumentJournals", "DocumentJournal");
Список.Добавить("DocumentNumerators", "DocumentNumerator");
Список.Добавить("Documents", "Document");
Список.Добавить("Enums", "Enum");
Список.Добавить("EventSubscriptions", "EventSubscription");
Список.Добавить("ExchangePlans", "ExchangePlan");
Список.Добавить("FilterCriteria", "FilterCriterion");
Список.Добавить("FunctionalOptions", "FunctionalOption");
Список.Добавить("FunctionalOptionsParameters", "FunctionalOptionsParameter");
Список.Добавить("HTTPServices", "HTTPService");
Список.Добавить("InformationRegisters", "InformationRegister");
Список.Добавить("Languages", "Language");
Список.Добавить("Reports", "Report");
Список.Добавить("Roles", "Role");
Список.Добавить("ScheduledJobs", "ScheduledJob");
Список.Добавить("SessionParameters", "SessionParameter");
Список.Добавить("SettingsStorages", "SettingsStorage");
Список.Добавить("StyleItems", "StyleItem");
Список.Добавить("Sequences", "Sequence");
Список.Добавить("Styles", "Style");
Список.Добавить("Subsystems", "Subsystem");
Список.Добавить("Tasks", "Task");
Список.Добавить("WebServices", "WebService");
Список.Добавить("WSReferences", "WSReference");
Список.Добавить("XDTOPackages", "XDTOPackage");
Список.Добавить("ExternalDataSources", "ExternalDataSource");
Список.Добавить("ChartsOfAccounts", "ChartOfAccounts");
Список.Добавить("AccountingRegisters", "AccountingRegister");
Список.Добавить("Bots", "Bot");
Возврат Список;
КонецФункции
// В данном случае для нормализации используются символы с которых не может начинаться имя метаданного в 1С для того,
// В данном случае для нормализации используются символы с которых не может начинаться имя метаданного в 1С для того,
// чтобы не вызвать пересечение при приведении к регистру
Функция Нормализовать(ИмяМетаданного)
Возврат ВРег("%" + ИмяМетаданного);
@ -236,7 +185,6 @@
Функция ПолучитьОбъектыМетаданных(КоллекцияСовпадений)
ОбъектыМетаданных = Новый ТаблицаЗначений;
ОбъектыМетаданных.Колонки.Добавить("ТипМетаданных");
ОбъектыМетаданных.Колонки.Добавить("ИмяМетаданных");
@ -269,6 +217,7 @@
// каталога нет, а должен быть
ТекстОшибок.Добавить(СтрШаблон("Отсутствует каталог %1", КаталогСписка.Значение));
КонецЕсли;
ОстановитьПроверкуКаталога = Истина;

View File

@ -5,21 +5,21 @@
Функция ПрогнатьТесты()
Тестер = Новый Тестер;
ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests");
ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..");
КаталогТестов = Новый Файл(ПутьКТестам);
Если Не КаталогТестов.Существует() Тогда
Сообщить(СтрШаблон("Не найден каталог тестов %1", ПутьКТестам));
Возврат Истина;
КонецЕсли;
РезультатТестирования = Тестер.ТестироватьКаталог(
КаталогТестов,
Новый Файл(ПутьКОтчетуJUnit)
);
КаталогТестов,
Новый Файл(ПутьКОтчетуJUnit)
);
Успешно = РезультатТестирования = 0;
Возврат Успешно;
@ -28,42 +28,41 @@
Функция ПрогнатьФичи()
ПутьОтчетаJUnit = "./bdd-log.xml";
КаталогФич = ОбъединитьПути(".", "features");
Файл_КаталогФич = Новый Файл(КаталогФич);
Если Не Файл_КаталогФич.Существует() Тогда
Сообщить(СтрШаблон("Не найден каталог фич %1", КаталогФич));
Возврат Истина;
КонецЕсли;
ИсполнительБДД = Новый ИсполнительБДД;
РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич);
ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся;
Если РезультатыВыполнения.Строки.Количество() > 0 Тогда
СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
КонецЕсли;
ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit);
Сообщить(СтрШаблон("Результат прогона фич <%1>
|", ИтоговыйРезультатВыполнения));
|", ИтоговыйРезультатВыполнения));
Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался;
КонецФункции // ПрогнатьФичи()
Попытка
ТестыПрошли = ПрогнатьТесты();
Исключение
ТестыПрошли = Ложь;
Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
Попытка
@ -71,12 +70,12 @@
Исключение
ФичиПрошли = Ложь;
Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
Если Не ТестыПрошли Или Не ФичиПрошли Тогда
ВызватьИсключение "Тестирование завершилось неудачно!";
Иначе
Сообщить(СтрШаблон("Результат прогона тестов <%1>
|", ТестыПрошли));
|", ТестыПрошли));
КонецЕсли;

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.4">
<ConfigVersions>
<Metadata name="BusinessProcess.БизнесПроцесс1" id="eee45611-49ab-4d28-9173-a42ad7d8f97a" configVersion="33cb951400fa2f438a9c33030f7d4d9f00000000"/>
<Metadata name="BusinessProcess.БизнесПроцесс1.Form.ФормаБизнесПроцесса" id="1af1ae03-f52b-4650-986d-bc63aa0c9926" configVersion="fcdc411fefc1c04893c18f9d0d3b48ae00000000"/>
<Metadata name="BusinessProcess.БизнесПроцесс1.Form.ФормаБизнесПроцесса.Form" id="1af1ae03-f52b-4650-986d-bc63aa0c9926.0" configVersion="3202cd0e24679a46baf5fb00c2a0efb300000000"/>
<Metadata name="BusinessProcess.БизнесПроцесс1.Form.ФормаСписка" id="0dbad928-1ecb-478f-831b-d310cfab3ca8" configVersion="d04da7f7a6b6c841be8dd2939d57737200000000"/>
<Metadata name="BusinessProcess.БизнесПроцесс1.Form.ФормаСписка.Form" id="0dbad928-1ecb-478f-831b-d310cfab3ca8.0" configVersion="d629367128615241823ef7c7c45af07000000000"/>
<Metadata name="Catalog.Справочник1" id="60ae4ab9-a09f-420a-8f0e-fe632bb8898f" configVersion="9caa23001cbf0a4695a169b4f21c0c1000000000"/>
<Metadata name="Catalog.Справочник1.Form.ФормаЭлемента" id="f03d55a5-c016-4d07-bbae-d371cfb729f0" configVersion="d3cea967ed290f4e8c0c079743d44c1700000000"/>
<Metadata name="Catalog.Справочник1.Form.ФормаЭлемента.Form" id="f03d55a5-c016-4d07-bbae-d371cfb729f0.0" configVersion="512fd351277c9b4a96cff0e3a666336b00000000"/>
<Metadata name="Configuration.Конфигурация" id="b4bb993c-0276-4fc3-bc8f-e6a83c495c2d" configVersion="a10ff840f5f4ee4eb197bf663e8e857c00000000"/>
<Metadata name="Language.Русский" id="11decc79-5e16-4e21-807b-3de57f51ba5b" configVersion="4ba8c3bff189a8438a8ad74fbe34e6e500000000"/>
<Metadata name="Task.Задача1" id="1d1bd021-ed61-4677-9430-c4ffce40dc5b" configVersion="7e1e44fcdab78745a1e554a6c0c11c1300000000"/>
</ConfigVersions>
</ConfigDumpInfo>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>pc_test_conf</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,2 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.10

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:AccountingRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="de9dd4a0-f125-434f-8ae5-65fae3d3fcc5">
<producedTypes>
<selectionType typeId="6a18e8b8-2590-4360-91fe-bac761e17174" valueTypeId="185705e9-2245-4bc6-be51-a225c3bf6077"/>
<listType typeId="6c064f1e-6c7e-47c4-9194-ce1970529314" valueTypeId="2168be2a-e762-438c-bde1-fd6b721b42cc"/>
<managerType typeId="2f19f72f-996c-455b-be40-dba8e3c6ce4a" valueTypeId="07d0bd3c-4fdf-4789-80c1-a0076f3e341c"/>
<recordSetType typeId="f2aed945-8a80-475e-8804-c9827bf9f74f" valueTypeId="2fe955f2-5b56-41a2-8ce3-2fd3941a78bb"/>
<recordKeyType typeId="bd9fbe9b-5d1a-40d5-b398-10368499c35a" valueTypeId="2dc2db79-4f35-495c-a495-eaef4dd8b13d"/>
<recordType typeId="ae9f817a-2a3d-47b3-8cfd-e123e54725f4" valueTypeId="90809172-87d3-40ca-8c12-a0f29ba0c484"/>
<extDimensionsType typeId="1d590454-783c-49f4-b27c-40c37da74821" valueTypeId="d96cd78e-3987-43c2-bb21-f56b9b04e521"/>
</producedTypes>
<name>РегистрБухгалтерии1</name>
<synonym>
<key>ru</key>
<value>Регистр бухгалтерии1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<chartOfAccounts>ChartOfAccounts.ПланСчетов1</chartOfAccounts>
<dataLockControlMode>Managed</dataLockControlMode>
<enableTotalsSplitting>true</enableTotalsSplitting>
<dimensions uuid="51c20b93-b53a-46b8-9d9d-6e2204a278ce">
<name>Измерение1</name>
<synonym>
<key>ru</key>
<value>Измерение1</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<balance>true</balance>
</dimensions>
<resources uuid="646d04ae-878d-4883-b207-059288b033f0">
<name>Ресурс1</name>
<synonym>
<key>ru</key>
<value>Ресурс1</value>
</synonym>
<type>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<balance>true</balance>
</resources>
</mdclass:AccountingRegister>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:AccumulationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="21cc8419-47fe-4f5e-a33d-5a6014a64cba">
<producedTypes>
<selectionType typeId="b279039c-1ec6-420e-9fd7-1e484d0f2507" valueTypeId="fecf54e4-19fb-40ea-af80-9e9d086db145"/>
<listType typeId="80ae834b-d9ea-4e74-8e14-b2f1721ab124" valueTypeId="febcb43a-e101-472c-8cca-4afd7601cd12"/>
<managerType typeId="0bf00b0c-cbd0-45d6-9094-5910888f2f2d" valueTypeId="53f67b43-81e1-412e-9639-0ae59b3fc268"/>
<recordSetType typeId="a156ac99-b3be-474d-a764-963063e2d8fb" valueTypeId="b8327a0d-94f3-470a-874d-8dc0179b8182"/>
<recordKeyType typeId="93e79b72-393d-424c-9e6e-4827f95a35f2" valueTypeId="08cf3881-7e83-4726-a36b-ee6b069bb703"/>
<recordType typeId="4a2db4d6-ed69-4148-a48d-de6aa08cef8f" valueTypeId="c89df3a1-f503-47b4-b1db-2679bce35af4"/>
</producedTypes>
<name>РегистрНакопления1</name>
<synonym>
<key>ru</key>
<value>Регистр накопления1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<dataLockControlMode>Managed</dataLockControlMode>
<enableTotalsSplitting>true</enableTotalsSplitting>
<resources uuid="3e1cb421-7cc2-4504-a36a-fd186b33c79c">
<name>Ресурс1</name>
<synonym>
<key>ru</key>
<value>Ресурс1</value>
</synonym>
<type>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
</resources>
<dimensions uuid="b053736d-515c-41ca-ba1e-e2edd9f79c5b">
<name>Измерение1</name>
<synonym>
<key>ru</key>
<value>Измерение1</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<useInTotals>true</useInTotals>
</dimensions>
</mdclass:AccumulationRegister>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:BusinessProcess xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1d79a6ca-ec87-4b76-afdc-204f3301273c">
<producedTypes>
<objectType typeId="78b123df-ae08-4465-8c72-ef34411fd8a8" valueTypeId="b83a3cde-10da-452f-b7f1-d82fd2c6977a"/>
<refType typeId="7e162673-0ac1-42f2-944b-a2d3251b5ee7" valueTypeId="460ab3bc-c81f-497c-8b81-098e47919959"/>
<selectionType typeId="018aaa02-f2b8-4f7a-8d03-3ddda4159915" valueTypeId="28f57b79-fe1e-4f6c-af36-9587f70c3c88"/>
<listType typeId="a47296c7-9ffc-4fa6-b8a5-a405ac03fbc0" valueTypeId="b76f6bd3-1de4-42da-8d8a-20f811245b62"/>
<managerType typeId="9163bfc2-2323-4517-8095-6c32bca3c362" valueTypeId="ce156500-4e44-47d0-91ad-ee424e4dac37"/>
<routePointRef typeId="aa095897-1fb6-4c46-8650-261064fea2b9" valueTypeId="768b142e-4a38-41a9-85da-05ea9ae32096"/>
</producedTypes>
<name>БизнесПроцесс1</name>
<synonym>
<key>ru</key>
<value>Бизнес процесс1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>BusinessProcess.БизнесПроцесс1.StandardAttribute.Number</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>DontUse</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<editType>InDialog</editType>
<numberType>String</numberType>
<numberLength>9</numberLength>
<numberAllowedLength>Variable</numberAllowedLength>
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<createTaskInPrivilegedMode>true</createTaskInPrivilegedMode>
</mdclass:BusinessProcess>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CalculationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1852094c-1036-4005-b9fe-6b1f983b5943">
<producedTypes>
<selectionType typeId="8b9ec309-9683-462c-9d24-6be0fd29684e" valueTypeId="40feb075-0c61-4c22-ab12-0c9fd9d1f7fa"/>
<listType typeId="f1890515-b178-43bb-8d47-265fedba5b12" valueTypeId="b19a0fd7-2f62-46ce-a8f1-8824f7e92e85"/>
<managerType typeId="a9eef7bd-bd5f-4e46-b977-64686c25e42d" valueTypeId="ff409435-a819-4501-a750-9490143c2a20"/>
<recordSetType typeId="374cb276-e87d-4eb4-b379-2cf6f5d798af" valueTypeId="fec3ccba-0d98-48b9-9a86-fe2fedbfeff9"/>
<recordKeyType typeId="e5b28f91-6ffb-4b61-952d-fdb2e7751dba" valueTypeId="2d1d9bea-ea76-4def-ad9c-b585f628917c"/>
<recordType typeId="fa02720c-2377-497b-b204-cdc0df945cc3" valueTypeId="9f659707-8305-4538-a1a6-e719d7a9f29d"/>
<recalcsType typeId="441e31b8-4edc-48b0-92d7-36ceca15eba5" valueTypeId="eb339a5a-402a-4f40-bcc5-d2bb1fe1c92b"/>
</producedTypes>
<name>РегистрРасчета1</name>
<synonym>
<key>ru</key>
<value>Регистр расчета1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<periodicity>Month</periodicity>
<chartOfCalculationTypes>ChartOfCalculationTypes.ПланВидовРасчета1</chartOfCalculationTypes>
<dataLockControlMode>Managed</dataLockControlMode>
<resources uuid="eab52d81-1dd7-4256-aeb0-d7e951667199">
<name>Ресурс1</name>
<synonym>
<key>ru</key>
<value>Ресурс1</value>
</synonym>
<type>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
</resources>
<dimensions uuid="ebd0edc6-a53b-462b-af7f-06f2b5eca2ac">
<name>Измерение1</name>
<synonym>
<key>ru</key>
<value>Измерение1</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
</dimensions>
</mdclass:CalculationRegister>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2aab34ab-5b42-4b64-855c-efe39405d625">
<producedTypes>
<objectType typeId="ae994dbc-1dc7-4405-8567-fac28199c137" valueTypeId="f59726a7-4c2b-4af8-b308-4f09a3fdc26e"/>
<refType typeId="3dce89e8-a416-4e26-a700-c98503a304c4" valueTypeId="4343c293-40ce-4890-b072-39bf9eb5e6e9"/>
<selectionType typeId="320de1c9-4ff5-4a18-8f7e-e1bcebed7dcc" valueTypeId="bbab11fe-f5d1-48ef-bae7-139e36288a50"/>
<listType typeId="adf715c2-b41e-4dc1-b65d-573eba53aee7" valueTypeId="ead6bddc-1791-47c5-b433-73e25dd62a5f"/>
<managerType typeId="e998eebc-0bf7-43a1-ba7e-45a84eda2013" valueTypeId="722edafb-20af-4579-804b-bc452e5eff77"/>
</producedTypes>
<name>Справочник1</name>
<synonym>
<key>ru</key>
<value>Справочник1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Catalog.Справочник1.StandardAttribute.Code</inputByString>
<inputByString>Catalog.Справочник1.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>Use</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<levelCount>2</levelCount>
<foldersOnTop>true</foldersOnTop>
<codeLength>9</codeLength>
<descriptionLength>25</descriptionLength>
<codeType>String</codeType>
<codeAllowedLength>Variable</codeAllowedLength>
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
</mdclass:Catalog>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ChartOfAccounts xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cddef5bf-b11a-4a4d-8357-5f24fb201d4b">
<producedTypes>
<objectType typeId="fad36b46-bbb2-4d53-a586-4d3f6f975071" valueTypeId="fe2e4432-2de0-40a1-83e3-9eb0989177b8"/>
<refType typeId="f266e72d-f5ed-48b8-8839-051efd9ceca4" valueTypeId="611c8c8d-649b-4d37-98cd-334ee0dcaf3f"/>
<selectionType typeId="e79356c1-c736-480d-b379-dec8eb9b61e5" valueTypeId="91476a1e-f4de-4ad4-94db-48ce63572037"/>
<listType typeId="a751221c-bbbe-41b7-8d8a-d9192c352e13" valueTypeId="6afb2ecc-7b5e-45a3-b68c-08aef2e6a2d0"/>
<managerType typeId="d0e4baf4-3a48-4950-b084-5bad775fbb81" valueTypeId="080bbd6e-bb13-47d4-83d4-f1db7a0f0d15"/>
<extDimensionTypes typeId="d3731e23-a38c-42ed-805c-8389761fb4d7" valueTypeId="eac3fd84-cbad-4de4-84f0-c483f999a24e"/>
<extDimensionTypesRow typeId="a431e915-1ce4-4c18-bf66-ba40e943179e" valueTypeId="f63f9d1f-14d4-450f-9508-fa3a2e782981"/>
</producedTypes>
<name>ПланСчетов1</name>
<synonym>
<key>ru</key>
<value>План счетов1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>ChartOfAccounts.ПланСчетов1.StandardAttribute.Code</inputByString>
<inputByString>ChartOfAccounts.ПланСчетов1.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>DontUse</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<codeLength>9</codeLength>
<descriptionLength>25</descriptionLength>
<checkUnique>true</checkUnique>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
</mdclass:ChartOfAccounts>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ChartOfCalculationTypes xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1c44e5e4-1ffb-47b8-9938-3125b2ce24ce">
<producedTypes>
<objectType typeId="f15b0c9a-2a3e-4cb0-b4d1-ac486b5859a2" valueTypeId="b34fe2a2-8fa4-4be8-9fa5-6934f4264897"/>
<refType typeId="72091991-d120-4e1a-ab04-c96d93f231ae" valueTypeId="df48e71b-90a6-4897-ac7b-9308cbfc4f2c"/>
<selectionType typeId="fea2be88-0b5f-48ac-a4b5-aae6bad009eb" valueTypeId="7cd06533-9a94-4b71-b9dd-f549d7605ea4"/>
<listType typeId="28304ac4-932a-42a4-b511-009754cbc332" valueTypeId="fa716c8c-2169-46c0-9e17-d059356f5feb"/>
<managerType typeId="e9b5a8dd-e76f-4108-836c-c01a1b6b1e38" valueTypeId="df5a6e0f-55dd-49d9-9eb3-aaf4bb6b33bc"/>
<displacingCalculationTypesType typeId="77890963-5069-4769-b049-4ccf6681f668" valueTypeId="230c6df4-e31b-4348-8fce-d379f45f9e19"/>
<displacingCalculationTypesRowType typeId="3922060f-c292-4c7e-8842-f1debd96a5ad" valueTypeId="3ec5d3ca-bffd-4111-90e9-9dbe84dbcafe"/>
<baseCalculationTypesType typeId="340e12b1-a370-4752-9b9b-7086f6f738f4" valueTypeId="ed2bbdd0-b8f9-4c44-a7a1-92a59d623135"/>
<baseCalculationTypesRowType typeId="b11d6bbb-2489-4f3e-abf2-d957b88cf0e5" valueTypeId="c0d58d76-244f-4c0f-8b98-2ae424e12746"/>
<leadingCalculationTypesType typeId="96ea5d49-b3af-4db6-8fd0-3d9c5adc0e4a" valueTypeId="508fe1d1-c17c-4b00-bb44-cd43e206b20b"/>
<leadingCalculationTypesRowType typeId="7df1bf1d-3a7e-4ed6-a21d-358b5bb5b948" valueTypeId="7968d7c2-f46b-48ea-a7fc-6fa68003e43a"/>
</producedTypes>
<name>ПланВидовРасчета1</name>
<synonym>
<key>ru</key>
<value>План видов расчета1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>ChartOfCalculationTypes.ПланВидовРасчета1.StandardAttribute.Code</inputByString>
<inputByString>ChartOfCalculationTypes.ПланВидовРасчета1.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>DontUse</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<codeLength>9</codeLength>
<descriptionLength>40</descriptionLength>
<codeType>String</codeType>
<codeAllowedLength>Variable</codeAllowedLength>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
</mdclass:ChartOfCalculationTypes>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ChartOfCharacteristicTypes xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="be6ccc44-5c58-42b6-b717-38e51c37b9c3">
<producedTypes>
<objectType typeId="11121a5f-4e4b-4d53-a2a1-7bb5fa2b3e9d" valueTypeId="b84e720d-8333-48a3-9c74-7922845cc484"/>
<refType typeId="fae32516-870d-4442-ab9c-25e7a2ddd7e5" valueTypeId="42d0ba17-b864-423c-8a74-70e84e1662cb"/>
<selectionType typeId="aaeab3db-be47-4aca-b945-8d0f5d19af2e" valueTypeId="f3501eac-98c3-433f-9d31-baa02c0825d5"/>
<listType typeId="b09a4a93-4d70-43fe-9b42-94123237f720" valueTypeId="65c9f7b7-6ff5-4210-a2b9-442e89902236"/>
<managerType typeId="23d5ae7d-84a4-4c63-b6f0-9b9c446a84ea" valueTypeId="0a1d496d-9b98-4ed4-8d0c-2b54c581ca0b"/>
<containerType typeId="fc3e8e5e-6f4e-4e75-90f3-0cd1bff110e5" valueTypeId="82ea8430-8a9c-48ff-8232-2e4168079bec"/>
</producedTypes>
<name>ПланВидовХарактеристик1</name>
<synonym>
<key>ru</key>
<value>План видов характеристик1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>ChartOfCharacteristicTypes.ПланВидовХарактеристик1.StandardAttribute.Code</inputByString>
<inputByString>ChartOfCharacteristicTypes.ПланВидовХарактеристик1.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>DontUse</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<foldersOnTop>true</foldersOnTop>
<codeLength>9</codeLength>
<codeAllowedLength>Variable</codeAllowedLength>
<descriptionLength>25</descriptionLength>
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
</mdclass:ChartOfCharacteristicTypes>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form">
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
</form:Form>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonForm xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8895e6a2-c133-438d-92c1-1b9ef817bedc">
<name>ОбщаяФорма1</name>
<synonym>
<key>ru</key>
<value>Общая форма1</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</mdclass:CommonForm>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураНеЭкспортнаяБезПараметров()
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="91e73716-df1c-4309-9ff7-9233a14410ca">
<name>ОбщийМодульБезЭкспортных</name>
<synonym>
<key>ru</key>
<value>Общий модуль без экспортных</value>
</synonym>
<server>true</server>
</mdclass:CommonModule>

View File

@ -0,0 +1,19 @@
Процедура глПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры
Процедура глПроцедураЭкспортнаяСПараметрами(
Параметр1,
Параметр2, Параметр3 = Неопределено) Экспорт
Возврат;
КонецПроцедуры
Функция глФункцияЭкспортнаяБезПараметров() Экспорт
Возврат Неопределено;
КонецФункции
Функция глФункцияЭкспортнаяСПараметрами(
Параметр1,
Параметр2, Параметр3 = Неопределено) Экспорт
Возврат Неопределено;
КонецФункции

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="73ebec52-c754-4d88-9e56-6c1243e15c87">
<name>ОбщийМодульКлиентСерверГлобальный</name>
<synonym>
<key>ru</key>
<value>Общий модуль клиент сервер глобальный</value>
</synonym>
<global>true</global>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
</mdclass:CommonModule>

View File

@ -0,0 +1,7 @@
Процедура ПокрытаяПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры
Функция НепокрытаяФункцияЭкспортнаяБезПараметров() Экспорт
Возврат Неопределено;
КонецФункции

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f6d30a94-b219-4cbd-a309-8d4ec58fb3b0">
<name>ОбщийМодульКлиентЧастичноПокрытый</name>
<synonym>
<key>ru</key>
<value>Общий модуль клиент частично покрытый</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
</mdclass:CommonModule>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="943a1c8a-7553-4eb2-a325-310deb30efc8">
<name>ОбщийМодульСервер</name>
<synonym>
<key>ru</key>
<value>Общий модуль сервер</value>
</synonym>
<server>true</server>
</mdclass:CommonModule>

View File

@ -0,0 +1,7 @@
Процедура глНепокрытаяПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры
Функция глПокрытаяФункцияЭкспортнаяБезПараметров() Экспорт
Возврат Неопределено;
КонецФункции

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="07dfa8a3-a36f-4ca6-aef3-71ade0e0fef0">
<name>ОбщийМодульСерверГлобальныйЧастичноПокрытый</name>
<synonym>
<key>ru</key>
<value>Общий модуль сервер глобальный частично покрытый</value>
</synonym>
<global>true</global>
<server>true</server>
</mdclass:CommonModule>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6d7c2f33-03f3-4850-a827-d35ab72d82f4">
<name>pc_test_conf</name>
<synonym>
<key>ru</key>
<value>pc_test_conf</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="eff42064-2bd7-4434-b9f0-dbb1ee25747c"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="c33046d0-0482-438d-b7a0-53dd9569faa7"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="471cf809-ed15-4827-80d5-7567f93a3a41"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="8305eb14-322a-459a-984a-2fbeef2fef4a"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="3fe61283-744e-46f8-b1b0-ed6a02eb17ad"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="68ca030d-281a-4dcd-92cf-4ea660499b6a"/>
<configurationExtensionCompatibilityMode>8.3.10</configurationExtensionCompatibilityMode>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
<defaultLanguage>Language.Русский</defaultLanguage>
<dataLockControlMode>Managed</dataLockControlMode>
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
<modalityUseMode>DontUse</modalityUseMode>
<synchronousPlatformExtensionAndAddInCallUseMode>DontUse</synchronousPlatformExtensionAndAddInCallUseMode>
<compatibilityMode>8.3.10</compatibilityMode>
<languages uuid="82eb3150-6f4a-45c9-b65c-f1d3d60d8d2e">
<name>Русский</name>
<synonym>
<key>ru</key>
<value>Русский</value>
</synonym>
<languageCode>ru</languageCode>
</languages>
<commonModules>CommonModule.ОбщийМодульБезЭкспортных</commonModules>
<commonModules>CommonModule.ОбщийМодульКлиентЧастичноПокрытый</commonModules>
<commonModules>CommonModule.ОбщийМодульСерверГлобальныйЧастичноПокрытый</commonModules>
<commonModules>CommonModule.ОбщийМодульКлиентСерверГлобальный</commonModules>
<commonModules>CommonModule.ОбщийМодульСервер</commonModules>
<exchangePlans>ExchangePlan.ПланОбмена1</exchangePlans>
<commonForms>CommonForm.ОбщаяФорма1</commonForms>
<catalogs>Catalog.Справочник1</catalogs>
<documents>Document.Документ1</documents>
<enums>Enum.Перечисление1</enums>
<reports>Report.Отчет1</reports>
<dataProcessors>DataProcessor.Обработка1</dataProcessors>
<informationRegisters>InformationRegister.РегистрСведений1</informationRegisters>
<accumulationRegisters>AccumulationRegister.РегистрНакопления1</accumulationRegisters>
<chartsOfCharacteristicTypes>ChartOfCharacteristicTypes.ПланВидовХарактеристик1</chartsOfCharacteristicTypes>
<chartsOfAccounts>ChartOfAccounts.ПланСчетов1</chartsOfAccounts>
<accountingRegisters>AccountingRegister.РегистрБухгалтерии1</accountingRegisters>
<chartsOfCalculationTypes>ChartOfCalculationTypes.ПланВидовРасчета1</chartsOfCalculationTypes>
<calculationRegisters>CalculationRegister.РегистрРасчета1</calculationRegisters>
<businessProcesses>BusinessProcess.БизнесПроцесс1</businessProcesses>
<tasks>Task.Задача1</tasks>
</mdclass:Configuration>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bfa3d382-ced9-4b59-b426-8d421885e22d">
<producedTypes>
<objectType typeId="9b2b1280-0ace-4361-8cbc-62ce497cc394" valueTypeId="c073ef86-4b16-4a31-bbe0-4b49f5baeb2a"/>
<managerType typeId="f2e9a022-40ed-4a52-8a95-b63d1f2e2e80" valueTypeId="c07130ef-61ae-465b-9138-c0e1576aadce"/>
</producedTypes>
<name>Обработка1</name>
<synonym>
<key>ru</key>
<value>Обработка1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
</mdclass:DataProcessor>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Document xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fbe1fa70-a93e-40a5-9faf-a550caa38d7f">
<producedTypes>
<objectType typeId="2cb99e80-5333-4ebd-af20-15225b49e184" valueTypeId="f38fbeed-07e0-4828-9904-e24fa4ca939a"/>
<refType typeId="f47388ee-d47d-4b80-bce9-c452e4ea52d6" valueTypeId="11f1db14-d792-4619-9307-64668c75cb3b"/>
<selectionType typeId="9aa06c73-d8d5-4b28-893c-0b87c537cbf4" valueTypeId="095c424d-774f-4edd-b477-340a3edd3ce8"/>
<listType typeId="770ce938-1606-400f-9201-40113472eaaa" valueTypeId="8101327d-980c-4726-b401-7b905c73e1d9"/>
<managerType typeId="bc863470-7418-473c-a139-07051a3f091c" valueTypeId="4f820ad3-07d1-4264-a944-a357d6f7750e"/>
</producedTypes>
<name>Документ1</name>
<synonym>
<key>ru</key>
<value>Документ1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Document.Документ1.StandardAttribute.Number</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>Use</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<numberType>String</numberType>
<numberLength>9</numberLength>
<numberAllowedLength>Variable</numberAllowedLength>
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<registerRecords>AccountingRegister.РегистрБухгалтерии1</registerRecords>
<registerRecords>AccumulationRegister.РегистрНакопления1</registerRecords>
<registerRecords>CalculationRegister.РегистрРасчета1</registerRecords>
<postInPrivilegedMode>true</postInPrivilegedMode>
<unpostInPrivilegedMode>true</unpostInPrivilegedMode>
</mdclass:Document>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Enum xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b69f31fd-ee45-4972-8215-06e2add2dff5">
<producedTypes>
<refType typeId="8103ee59-df9f-4ac0-85ec-606747114f2f" valueTypeId="f2f71713-7c29-47db-8bd0-73ed7d64621e"/>
<listType typeId="48255205-730d-46c4-a78e-f9ddbfefb781" valueTypeId="f147141a-04be-4ec7-97b6-2ec6f1e82f9a"/>
<managerType typeId="e9b1a785-2c5b-48f0-9393-74fcbe00747b" valueTypeId="65050442-1626-4d4a-aa48-b13b4c7f7158"/>
</producedTypes>
<name>Перечисление1</name>
<synonym>
<key>ru</key>
<value>Перечисление1</value>
</synonym>
<quickChoice>true</quickChoice>
<choiceMode>BothWays</choiceMode>
<enumValues uuid="9a0d7a81-7219-4477-bcec-7ebf0fa7693a">
<name>ЗначениеПеречисления1</name>
<synonym>
<key>ru</key>
<value>Значение перечисления1</value>
</synonym>
</enumValues>
</mdclass:Enum>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ExchangePlan xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="26c74462-8d1d-4a9b-9ad4-ae0a4f67fe1d" thisNode="51006411-2066-4930-ac2a-f884559b951c">
<producedTypes>
<objectType typeId="ece6bec6-8783-4ca1-a5f0-012129bc8355" valueTypeId="de38feff-bcdd-4278-bbcf-9edf002b30d0"/>
<refType typeId="3b601af9-cf2d-4fb1-ab36-9a1c00e3d555" valueTypeId="c3cfab51-4448-4bd4-8ba6-25f3161da002"/>
<selectionType typeId="b56a5542-dc3d-4956-8e07-4b735f47ea25" valueTypeId="8a16606d-5a29-4db1-ae0f-f455a14ee941"/>
<listType typeId="49818f18-803b-428a-af28-0907f457fbab" valueTypeId="0d63c2b3-cd0a-421e-abf3-18ae6b1c28b9"/>
<managerType typeId="b9dc4f39-606b-479e-9756-eed0c9d9a0c7" valueTypeId="5d4ba846-49af-4c20-b66d-bb2ec781429f"/>
</producedTypes>
<name>ПланОбмена1</name>
<synonym>
<key>ru</key>
<value>План обмена1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>ExchangePlan.ПланОбмена1.StandardAttribute.Code</inputByString>
<inputByString>ExchangePlan.ПланОбмена1.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>DontUse</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<codeLength>9</codeLength>
<codeAllowedLength>Variable</codeAllowedLength>
<descriptionLength>25</descriptionLength>
<content>
<mdObject>Document.Документ1</mdObject>
<autoRecord>Allow</autoRecord>
</content>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
</mdclass:ExchangePlan>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="7ae62d7b-4af0-4e12-bbfe-b090e39f5449">
<producedTypes>
<selectionType typeId="21e7aac3-c837-4c47-81fa-81d5e1f9d7b6" valueTypeId="17ed2ded-fd25-4109-b61b-ddb34806e5f5"/>
<listType typeId="50502ab3-48bc-4ec5-b55f-1f19e5d3680e" valueTypeId="58a9e899-4764-4749-9c9c-1d3ccc1e1bb7"/>
<managerType typeId="c34d007e-cfb1-4b80-8489-5cfbfb5091ac" valueTypeId="9c99d461-13da-4780-91c4-4f5340664b5f"/>
<recordSetType typeId="85db3d61-363d-4caa-aaba-aa91ebe8a60a" valueTypeId="88240d5f-b5a0-4059-b457-5ccfd1cdbcf8"/>
<recordKeyType typeId="bc29afdf-0cdd-4177-a7d7-c3a54ed3e617" valueTypeId="f11487c8-84c7-45b0-a6fb-f57e31a5e102"/>
<recordType typeId="6102f267-ecb8-466f-a772-9216435e52cc" valueTypeId="3674fe8a-3b63-4f37-b369-b9e670ef26e9"/>
<recordManagerType typeId="40895af3-50a6-4740-9642-cbe305806135" valueTypeId="a75477d0-f786-4626-98d5-15017522d8ab"/>
</producedTypes>
<name>РегистрСведений1</name>
<synonym>
<key>ru</key>
<value>Регистр сведений1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<editType>InDialog</editType>
<dataLockControlMode>Managed</dataLockControlMode>
<dimensions uuid="90c4a005-ded5-4801-a975-b0334f485a53">
<name>Измерение1</name>
<synonym>
<key>ru</key>
<value>Измерение1</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fillValue xsi:type="core:UndefinedValue"/>
<mainFilter>true</mainFilter>
</dimensions>
</mdclass:InformationRegister>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Report xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="73cdde55-11eb-4632-a745-3ec8810ed6c8">
<producedTypes>
<objectType typeId="749c1355-8fcd-46d4-a58f-95335727e2e2" valueTypeId="a2c4585d-829d-4b92-92b0-780af14fcb56"/>
<managerType typeId="74d90084-8786-4d79-836b-32bbd5a38167" valueTypeId="46807a19-534c-403d-9241-fdeb000a6d19"/>
</producedTypes>
<name>Отчет1</name>
<synonym>
<key>ru</key>
<value>Отчет1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
</mdclass:Report>

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,3 @@
Процедура ПроцедураЭкспортнаяБезПараметров() Экспорт
Возврат;
КонецПроцедуры

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Task xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a03e7bee-8831-4422-a955-10d36432be58">
<producedTypes>
<objectType typeId="6cec2c26-d314-4fef-a1e5-83422bef04a3" valueTypeId="690a50e8-075f-42c2-bbb9-e6013de42048"/>
<refType typeId="26392add-b784-409a-aeec-2ab71b545c01" valueTypeId="76068777-11be-4419-95f1-089230b94849"/>
<selectionType typeId="e8d93d60-fcfa-4dec-a1d7-3ee7bbb16565" valueTypeId="cb9d4a8d-cf9d-4810-b846-67ec8f3b7ead"/>
<listType typeId="d05df92b-d261-41ba-8983-cfee52b500a6" valueTypeId="16a61aa8-78d7-4a08-81dd-feb1b163cb9a"/>
<managerType typeId="12ff7843-514f-48fc-85f8-6f86d369944c" valueTypeId="0672e7ba-5488-4389-8c43-d2e7d7e0940c"/>
</producedTypes>
<name>Задача1</name>
<synonym>
<key>ru</key>
<value>Задача1</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Task.Задача1.StandardAttribute.Number</inputByString>
<inputByString>Task.Задача1.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>DontUse</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<numberType>String</numberType>
<numberLength>9</numberLength>
<numberAllowedLength>Variable</numberAllowedLength>
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<taskNumberAutoPrefix>DontUse</taskNumberAutoPrefix>
<descriptionLength>25</descriptionLength>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
</mdclass:Task>

18
tests/fixtures/cf-edt/tests/.project vendored Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>pc_test_ext</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.10
Base-Project: pc_test_conf

View File

@ -0,0 +1,52 @@
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры-тесты
/////////////////////////////////////////////////////////////////////////////////
#Область ТестыAPI
// ИсполняемыеСценарии
// Сервисный метод для получения списка тестовых методов
// Параметры:
// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
// Возвращаемое значение:
// Массив - Имена методов тестов
Функция ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
ИсполняемыеСценарии = Новый Массив;
ИсполняемыеСценарии.Добавить("ПокрытаяПроцедураЭкспортнаяБезПараметров");
Возврат ИсполняемыеСценарии;
КонецФункции
#КонецОбласти
#Область Тесты
// @unit-test:CommonModule
Процедура ПокрытаяПроцедураЭкспортнаяБезПараметров(Фреймворк, ВыполнитьВТранзакцииСОтменой = Истина) Экспорт
#Если Сервер Тогда
Если ВыполнитьВТранзакцииСОтменой Тогда
TestsWrapper.ВыполнитьТестВТранзакции(
Метаданные.ОбщиеМодули.ОМ_ОбщийМодуль0,
"ПокрытаяПроцедураЭкспортнаяБезПараметров",
Фреймворк);
Возврат;
КонецЕсли;
#КонецЕсли
ВызватьИсключение "Тест 'ОМ_ОбщийМодуль0.ПокрытаяПроцедураЭкспортнаяБезПараметров' не реализован";
КонецПроцедуры
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции, составляющие внутреннюю реализацию модуля
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c478f257-724e-4109-a4ce-122f48af86c6">
<name>ОМ_ОбщийМодульКлиентЧастичноПокрытый</name>
<synonym>
<key>ru</key>
<value>ОМ общий модуль клиент частично покрытый</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
</mdclass:CommonModule>

View File

@ -0,0 +1,52 @@
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры-тесты
/////////////////////////////////////////////////////////////////////////////////
#Область ТестыAPI
// ИсполняемыеСценарии
// Сервисный метод для получения списка тестовых методов
// Параметры:
// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
// Возвращаемое значение:
// Массив - Имена методов тестов
Функция ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
ИсполняемыеСценарии = Новый Массив;
ИсполняемыеСценарии.Добавить("ГлобальныйглПокрытаяФункцияЭкспортнаяБезПараметров");
Возврат ИсполняемыеСценарии;
КонецФункции
#КонецОбласти
#Область Тесты
// @unit-test:CommonModule
Процедура ГлобальныйглПокрытаяФункцияЭкспортнаяБезПараметров(Фреймворк, ВыполнитьВТранзакцииСОтменой = Истина) Экспорт
#Если Сервер Тогда
Если ВыполнитьВТранзакцииСОтменой Тогда
TestsWrapper.ВыполнитьТестВТранзакции(
Метаданные.ОбщиеМодули.ОМ_ОбщийМодульКлиентЧастичноПокрытый,
"ГлобальныйглПокрытаяФункцияЭкспортнаяБезПараметров",
Фреймворк);
Возврат;
КонецЕсли;
#КонецЕсли
ВызватьИсключение "Тест 'ОМ_ОбщийМодуль0.ГлобальныйглПокрытаяФункцияЭкспортнаяБезПараметров' не реализован";
КонецПроцедуры
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции, составляющие внутреннюю реализацию модуля
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e3043564-091e-44c1-94f2-b37a4216ee22">
<name>ОМ_ОбщийМодульСерверГлобальныйЧастичноПокрытый</name>
<synonym>
<key>ru</key>
<value>ОМ общий модуль сервер глобальный частично покрытый</value>
</synonym>
<server>true</server>
</mdclass:CommonModule>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="e329b97f-6229-4216-b047-ca0ffe03cb04">
<name>pc_test_ext</name>
<synonym>
<key>ru</key>
<value>pc_test_ext</value>
</synonym>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:ConfigurationExtension">
<defaultRunMode>Checked</defaultRunMode>
<usePurposes>Checked</usePurposes>
<commandInterface>Extended</commandInterface>
<mainSectionCommandInterface>Extended</mainSectionCommandInterface>
<defaultLanguage>Checked</defaultLanguage>
<modalityUseMode>Checked</modalityUseMode>
<interfaceCompatibilityMode>Checked</interfaceCompatibilityMode>
<compatibilityMode>Checked</compatibilityMode>
</extension>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="597b4e0d-618a-4f16-9c81-b4e4066e3d82"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="2ee241af-d177-4c5a-bdd0-ad37a325e9f9"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="e58a236a-d2d2-4712-986d-09adc84aaa18"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="f767d5bc-4052-47c6-b2da-49f0357b4bcf"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="bbb720ac-fe1b-47ff-944f-4e57bb77bd87"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="360cbe06-d304-4b9e-bc3c-e34841ec4c6d"/>
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
<namePrefix>pc_test_ext_</namePrefix>
<configurationExtensionCompatibilityMode>8.3.10</configurationExtensionCompatibilityMode>
<configurationExtensionPurpose>Customization</configurationExtensionPurpose>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
<defaultLanguage>Language.Русский</defaultLanguage>
<modalityUseMode>DontUse</modalityUseMode>
<compatibilityMode>8.3.10</compatibilityMode>
<languages uuid="fbfe6f58-fb80-4d94-aebe-5a7dced0a590">
<name>Русский</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:LanguageExtension">
<languageCode>Checked</languageCode>
</extension>
<languageCode>ru</languageCode>
</languages>
<commonModules>CommonModule.ОМ_ОбщийМодульКлиентЧастичноПокрытый</commonModules>
<commonModules>CommonModule.ОМ_ОбщийМодульСерверГлобальныйЧастичноПокрытый</commonModules>
</mdclass:Configuration>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,7 @@
{
"GLOBAL": {
"ВерсияПлатформы": "8.3.10.2309",
"version": "2.0",
"ФорматEDT": true
}
}

View File

@ -0,0 +1,7 @@
{
"GLOBAL": {
"ВерсияПлатформы": "8.3.10.2309",
"version": "2.0",
"ФорматEDT": false
}
}

View File

@ -0,0 +1,7 @@
{
"GLOBAL": {
"ВерсияПлатформы": "8.3.10.2309",
"version": "2.0",
"ФорматEDT": "да"
}
}

View File

@ -0,0 +1,6 @@
{
"GLOBAL": {
"ВерсияПлатформы": "8.3.10.2309",
"version": "2.0"
}
}

View File

@ -1,11 +1,11 @@
Процедура Дурак (парам1)
КонецПроцедуры;
Функция РадномныеСасайВычисления() Экспорт
Функция РадномныеДуракВычисления() Экспорт
КонецФункции
Процедура Изменить(Парам1, Парам2)
Перем = БабайСасай ;
Перем = Дурак ;
КонецПроцедуры
Процедура Изм(Парам 1 = Неопределено)

View File

@ -0,0 +1,685 @@
// BSLLS:LineLength-off
#Использовать asserts
#Использовать logos
#Использовать tempfiles
#Использовать fs
Перем юТест;
Перем Лог;
Перем МенеджерВременныхФайлов;
#Область ПрограммныйИнтерфейс
// Основная точка входа
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетТолькоНаписание");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеОбрабатываетНегативныеКейсы");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов");
Возврат ВсеТесты;
КонецФункции
Процедура ПередЗапускомТеста() Экспорт
МенеджерПриложения.Инициализировать(ПараметрыПриложения);
ВремТестер = Новый Тестер;
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
ВключитьПоказОтладки();
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
МенеджерВременныхФайлов.Удалить();
МенеджерВременныхФайлов = Неопределено;
КонецПроцедуры
#Область ИсправлениеНеКаноническогоНаписания
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетТолькоНаписание() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
ТекстФайлаДо = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
ТекстФайлаПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
// текст изменен
Ожидаем.Что(ТекстФайлаДо, Истина).Не_().Равно(ТекстФайлаПосле);
// текст тождественен
Ожидаем.Что(ВРег(ТекстФайлаДо), Истина).Равно(ВРег(ТекстФайлаПосле));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
ДопНастройки = ПолучитьДополнительныеНастройки();
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ДопНастройки);
Ожидаем.Что(ДопНастройки.ИзмененныеКаталоги.Количество(), Истина).Равно(0);
КонецПроцедуры
#КонецОбласти
#Область ОтключениеПолнотекстовогоПоиска
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки() Экспорт
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
СценарийВозвращаетНастройки(ОбъектСценария, "ОтключениеПолнотекстовогоПоиска");
КонецПроцедуры
#КонецОбласти
#Область РазборОтчетовОбработокРасширений
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек() Экспорт
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки() Экспорт
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
СценарийВозвращаетНастройки(ОбъектСценария, "РазборОтчетовОбработокРасширений");
КонецПроцедуры
#КонецОбласти
#Область ПроверкаДублейПроцедурИФункций
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение() Экспорт
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурНегативныйТест.bsl"));
СПараметрами = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурСПараметрами.bsl"));
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов");
ВызываетсяИсключениеСТекстом(ОбъектСценария, СПараметрами, "обнаружены неуникальные имена методов");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл() Экспорт
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурПоложительныйТест.bsl"));
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл() Экспорт
Файл = Новый Файл(ПолучитьИмяВременногоФайла("bsl"));
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник() Экспорт
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("xml"));
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени() Экспорт
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("bsl"));
Имена = Новый Массив;
Имена.Добавить("ПроверкаДублейПроцедурИФункций");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "Сценарий не получен").Равно(1);
Имена.Добавить("ПроверкаДублейПроцедурИФункций");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "Добавлен один и тот же сценарий").Равно(1);
Имена.Добавить("ПроверкаДублейПроцедурИФункций.os");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "Добавлен один и тот же сценарий").Равно(1);
Имена.Добавить("РазборОтчетовОбработокРасширений.os");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "С массивом загружаемых сценариев что-то пошло не так").Равно(2);
КонецПроцедуры
#КонецОбласти
#Область СинхронизацияОбъектовМетаданныхИФайлов
Процедура ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение() Экспорт
ОбъектСценария = ПолучитьСценарий("СинхронизацияОбъектовМетаданныхИФайлов.os");
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "СинхронизацияОбъектовМетаданныхИФайлов\Configuration.xml"));
// Переименование типа без переименования каталога
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Имя каталога Ancillary отличается от метаданного ancillary");
// удаление типа без удаления файлов
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Необходимо удалить файлы");
// базовые элементы
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог ChartsOfCharacteristicTypes");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Catalogs");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommandGroups");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonAttributes");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonCommands");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonForms");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonModules");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonPictures");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonTemplates");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Constants");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог DataProcessors");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог DefinedTypes");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Documents");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Enums");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог EventSubscriptions");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог FunctionalOptions");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог InformationRegisters");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Languages");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Reports");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Roles");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог ScheduledJobs");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог SessionParameters");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Subsystems");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог XDTOPackages");
// элементы метаданных
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Language.Русский");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Subsystem.ПодсистемыБСП");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonPicture.GUID");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Role.АвтоТестированиеАдминистратор");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для SessionParameter.автоТестирование");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonTemplate.HiddenStart");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonModule.sFTPКлиентСервер");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonAttribute.UID");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для XDTOPackage.bsp_ancillary");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для EventSubscription.ВерсионированиеПриЗаписи");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для ScheduledJob.РоботАвтоматическаяОбработкаИзмененийАдресногоКлассификатора");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для FunctionalOption.ВестиЖурналДействийПользователя");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для DefinedType.ТипUIDСтрока");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonCommand.АудиторскийСлед");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommandGroup.Печать");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Constant.АдресатыПолученияУведомленийОбИзмененияхВАлгоритмах");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonForm.АвторизацияПользователя");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Catalog.АдресаЭлектроннойПочты");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Document.АттестацияРазработчика");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Enum.ВариантХраненияФайлов");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Report.анализЖурналаРегистрации");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для DataProcessor.активныеПользователи");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для InformationRegister.администраторыБаз");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для ChartOfCharacteristicTypes.РасширенныеХарактеристикиОбъектов");
КонецПроцедуры
#КонецОбласти
#Область ДобавлениеТестовВРасширение
Процедура ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеОбрабатываетНегативныеКейсы() Экспорт
ОбъектСценария = ПолучитьСценарий("ДобавлениеТестовВРасширение.os");
// Проверка параметров сценария.
ДополнительныеПараметры = Новый Структура("Лог, КаталогРепозитория, ТекущийКаталогИсходныхФайлов", Лог);
ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(Новый Файл(ПолучитьИмяВременногоФайла()));
ПараметрыМетода.Добавить("");
ПараметрыМетода.Добавить(ДополнительныеПараметры);
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение("не заполнен параметр 'КаталогИсходныхФайлов'");
ПараметрыМетода[1] = ПараметрыМетода[0].Путь;
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение("не заполнен параметр 'ДополнительныеПараметры.КаталогРепозитория'");
////////////////////////////////////////////////////////////////////////////////
// Проверка репозитория.
КаталогРепозитория = МенеджерВременныхФайлов.СоздатьКаталог();
КаталогКонфигурации = ОбъединитьПути(КаталогРепозитория, "configuration");
КаталогИсходников = ОбъединитьПути(КаталогКонфигурации, "src");
СоздатьКаталог(КаталогКонфигурации);
ФС.КопироватьСодержимоеКаталога(ОбъединитьПути(КаталогТестовыхФикстур(), "cf-edt", "configuration"), КаталогКонфигурации);
ПодходящийФайл = Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonModules", "ОбщийМодульКлиентЧастичноПокрытый", "Module.bsl"));
Ожидаем.Что(ПодходящийФайл.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ПодходящийФайл.ПолноеИмя)).ЭтоИстина();
ДополнительныеПараметры = ПолучитьДополнительныеНастройки(КаталогРепозитория, КаталогКонфигурации);
////////////////////////////////////////////////////////////////////////////////
НастройкиНеEDT = Новый Массив();
НастройкиНеEDT.Добавить("v8configФорматКонфигуратора.json");
НастройкиНеEDT.Добавить("v8configФорматНеправильный.json");
НастройкиНеEDT.Добавить("v8configФорматПоУмолчанию.json");
Для каждого НастройкаНеEDT Из НастройкиНеEDT Цикл
ИспользоватьТестовуюНастройку(КаталогРепозитория, НастройкаНеEDT);
Результат = ОбъектСценария.ОбработатьФайл(
ПодходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался файл, вопреки настройке '%1'", НастройкаНеEDT);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
КонецЦикла;
////////////////////////////////////////////////////////////////////////////////
ИспользоватьТестовуюНастройку(КаталогРепозитория, "v8configФорматEDT.json");
Результат = ОбъектСценария.ОбработатьФайл(
ПодходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = "Обработался файл при отсутствии тестового расширения";
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
// Проверка файла.
КаталогТестов = ОбъединитьПути(КаталогРепозитория, "tests");
КаталогИсходниковТестов = ОбъединитьПути(КаталогТестов, "src");
ФС.КопироватьСодержимоеКаталога(ОбъединитьПути(КаталогТестовыхФикстур(), "cf-edt", "tests"), КаталогТестов);
НеподходящиеФайлы = Новый Массив();
НеподходящиеФайлы.Добавить(Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonModules", "ОбщийМодульКлиентЧастичноПокрытый", "ОбщийМодульКлиентЧастичноПокрытый.mdo")));
НеподходящиеФайлы.Добавить(Новый Файл(ОбъединитьПути(КаталогИсходниковТестов, "CommonModules", "ОМ_ОбщийМодульКлиентЧастичноПокрытый", "Module.bsl")));
НеподходящиеФайлы.Добавить(Новый Файл(ПолучитьИмяВременногоФайла("bsl")));
Ожидаем.Что(НеподходящиеФайлы[0].Существует(), СтрШаблон("Отсутствует файл-пример '%1'", НеподходящиеФайлы[0].ПолноеИмя)).ЭтоИстина();
Ожидаем.Что(НеподходящиеФайлы[1].Существует(), СтрШаблон("Отсутствует файл-пример '%1'", НеподходящиеФайлы[1].ПолноеИмя)).ЭтоИстина();
Для каждого НеподходящийФайл Из НеподходящиеФайлы Цикл
Результат = ОбъектСценария.ОбработатьФайл(
НеподходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался неподходящий файл '%1'", НастройкаНеEDT);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
КонецЦикла;
////////////////////////////////////////////////////////////////////////////////
ФайлБезЭкспортныхМетодов = Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonModules", "ОбщийМодульБезЭкспортных", "Module.bsl"));
Ожидаем.Что(ФайлБезЭкспортныхМетодов.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ФайлБезЭкспортныхМетодов.ПолноеИмя)).ЭтоИстина();
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Записать(ФайлБезЭкспортныхМетодов.ПолноеИмя, КодировкаТекста.UTF8);
Результат = ОбъектСценария.ОбработатьФайл(
ФайлБезЭкспортныхМетодов,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался модуль без экспортных методов '%1'", ФайлБезЭкспортныхМетодов.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
Ожидаем.Что(ПодходящийФайл.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ПодходящийФайл.ПолноеИмя)).ЭтоИстина();
КаталогНеизвестногоОбъектаМетаданных = ОбъединитьПути(КаталогИсходников, "НеизвестныйТипМетаданных", "ИмяОбъекта");
СоздатьКаталог(КаталогНеизвестногоОбъектаМетаданных);
ПутьФайлаНеизвестногоОбъектаМетаданных = ОбъединитьПути(КаталогНеизвестногоОбъектаМетаданных, "Module.bsl");
КопироватьФайл(ПодходящийФайл.ПолноеИмя, ПутьФайлаНеизвестногоОбъектаМетаданных);
ФайлНеизвестногоОбъектаМетаданных = Новый Файл(ПутьФайлаНеизвестногоОбъектаМетаданных);
Результат = ОбъектСценария.ОбработатьФайл(
ФайлНеизвестногоОбъектаМетаданных,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался файл неизвестного объекта метаданных '%1'", ФайлНеизвестногоОбъектаМетаданных.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
ФайлНеподходящегоТипаМетаданных = Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonForms", "ОбщаяФорма1", "Module.bsl"));
Ожидаем.Что(ФайлНеподходящегоТипаМетаданных.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ФайлНеподходящегоТипаМетаданных.ПолноеИмя)).ЭтоИстина();
Результат = ОбъектСценария.ОбработатьФайл(
ФайлНеподходящегоТипаМетаданных,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался файл неподходящего объекта метаданных '%1'", ФайлНеизвестногоОбъектаМетаданных.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
// Контроль корректности проведенных проверок.
Результат = ОбъектСценария.ОбработатьФайл(
ПодходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Не обработался подходящий файл '%1'", ПодходящийФайл.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоИстина();
////////////////////////////////////////////////////////////////////////////////
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов() Экспорт
// Подготовка "репозитория".
КаталогРепозитория = МенеджерВременныхФайлов.СоздатьКаталог();
ИспользоватьТестовуюНастройку(КаталогРепозитория, "v8configФорматEDT.json");
ФС.КопироватьСодержимоеКаталога(ОбъединитьПути(КаталогТестовыхФикстур(), "cf-edt"), КаталогРепозитория);
КаталогКонфигурации = ОбъединитьПути(КаталогРепозитория, "configuration");
КаталогИсходников = ОбъединитьПути(КаталогКонфигурации, "src");
КаталогТестов = ОбъединитьПути(КаталогРепозитория, "tests");
// Прогон сценария по всем файлам исходников.
ОбъектСценария = ПолучитьСценарий("ДобавлениеТестовВРасширение.os");
ДополнительныеПараметры = ПолучитьДополнительныеНастройки(КаталогРепозитория, КаталогКонфигурации);
ФайлыПроекта = НайтиФайлы(ОбъединитьПути(КаталогКонфигурации, "src"), ПолучитьМаскуВсеФайлы(), Истина);
Для каждого ФайлПроекта Из ФайлыПроекта Цикл
Если ФайлПроекта.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
Результат = ОбъектСценария.ОбработатьФайл(ФайлПроекта, ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов, ДополнительныеПараметры);
КонецЦикла;
// Проверка модулей тестов.
ФайлОписанияКонфигурацииТестов = Новый Файл(ОбъединитьПути(КаталогТестов, "src", "Configuration", "Configuration.mdo"));
ОписаниеКонфигурацииТестов = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписанияКонфигурацииТестов.ПолноеИмя);
КаталогОбщихМодулейТестов = ОбъединитьПути(КаталогТестов, "src", "CommonModules");
Для каждого Кейс Из КейсыПроверкиДобавленияМодулейТестов() Цикл
// Наличие модуля в исходниках.
ФайлИсходников = Новый Файл(ОбъединитьПути(КаталогИсходников, Кейс.КаталогТипаМетаданных, Кейс.ИмяМетаданных, Кейс.ИмяМодуляМетаданных));
Сообщение = СтрШаблон("Не найден файл исходников '%1'", ФайлИсходников.ПолноеИмя);
Ожидаем.Что(ФайлИсходников.Существует(), Сообщение).ЭтоИстина();
// Описание конфигурации.
СтрокаПоиска = СтрШаблон("<commonModules>CommonModule.%1</commonModules>", Кейс.ИмяТестовогоМодуля);
ЧислоВхождений = СтрЧислоВхождений(ОписаниеКонфигурацииТестов, СтрокаПоиска);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний модуля '%1' в описании конфигурации:
|%2",
Кейс.ИмяТестовогоМодуля, ОписаниеКонфигурацииТестов);
Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1);
// Описание модуля тестов.
ФайлОписанияТеста = Новый Файл(ОбъединитьПути(КаталогОбщихМодулейТестов, Кейс.ИмяТестовогоМодуля, Кейс.ИмяТестовогоМодуля + ".mdo"));
Сообщение = СтрШаблон("Не создано описание модуля тестов '%1'", ФайлОписанияТеста.ПолноеИмя);
Ожидаем.Что(ФайлОписанияТеста.Существует(), Сообщение).ЭтоИстина();
ОписаниеТеста = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписанияТеста.ПолноеИмя);
// Клиент.
СтрокаПоиска = СтрШаблон("<clientManagedApplication>%1</clientManagedApplication>", XMLСтрока(Кейс.Клиент));
ЧислоВхождений = СтрЧислоВхождений(ОписаниеТеста, СтрокаПоиска);
ЧислоВхожденийПравильное = ?(Кейс.Клиент, ЧислоВхождений = 1, ЧислоВхождений <= 1);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний контекста 'Клиент = %1' в описании модуля тестов '%2':
|%3",
Кейс.Клиент, ФайлОписанияТеста.ПолноеИмя, ОписаниеТеста);
Ожидаем.Что(ЧислоВхожденийПравильное, Сообщение).ЭтоИстина();
// Сервер.
СтрокаПоиска = СтрШаблон("<server>%1</server>", XMLСтрока(Кейс.Сервер));
ЧислоВхождений = СтрЧислоВхождений(ОписаниеТеста, СтрокаПоиска);
ЧислоВхожденийПравильное = ?(Кейс.Сервер, ЧислоВхождений = 1, ЧислоВхождений <= 1);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний контекста 'Сервер = %1' в описании модуля тестов '%2':
|%3",
Кейс.Сервер, ФайлОписанияТеста.ПолноеИмя, ОписаниеТеста);
Ожидаем.Что(ЧислоВхожденийПравильное, Сообщение).ЭтоИстина();
// Модуль тестов.
ФайлТеста = Новый Файл(ОбъединитьПути(КаталогОбщихМодулейТестов, Кейс.ИмяТестовогоМодуля, "Module.bsl"));
Сообщение = СтрШаблон("Не создан модуль тестов '%1'", ФайлТеста.ПолноеИмя);
Ожидаем.Что(ФайлТеста.Существует(), Сообщение).ЭтоИстина();
ТекстТеста = ФайловыеОперации.ПрочитатьТекстФайла(ФайлТеста.ПолноеИмя);
// Наличие исполняемого сценария.
ИмяМетодаМодуля = ?(Кейс.Глобальный, "Глобальный", "") + Кейс.ИмяМетодаМодуля;
СтрокаПоиска = СтрШаблон("ИсполняемыеСценарии.Добавить(""%1"");", ИмяМетодаМодуля);
ЧислоВхождений = СтрЧислоВхождений(ТекстТеста, СтрокаПоиска);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний исполняемого сценария '%1' в модуле тестов '%2':
|%3",
ИмяМетодаМодуля, ФайлТеста.ПолноеИмя, ТекстТеста);
Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1);
// Наличие метода.
СтрокаПоиска = СтрШаблон("Процедура %1(", ИмяМетодаМодуля);
ЧислоВхождений = СтрЧислоВхождений(ТекстТеста, СтрокаПоиска);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний метода '%1' в модуле тестов '%2':
|%3",
ИмяМетодаМодуля, ФайлТеста.ПолноеИмя, ТекстТеста);
Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область Служебные
Процедура ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, ТекстИсключения)
ДополнительныеНастройки = ПолучитьДополнительныеНастройки();
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(Файл);
ПараметрыМетода.Добавить(Файл.Путь);
ПараметрыМетода.Добавить(ДополнительныеНастройки);
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения);
КонецПроцедуры
Процедура СценарийИмеетМетод(ОбъектСценария, ИмяМетода)
Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(ОбъектСценария, ИмяМетода);
Ожидаем.Что(ЕстьМетод, Истина).ЭтоИстина();
КонецПроцедуры
Функция ПолучитьСценарий(ИмяСценария)
Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", ИмяСценария);
ОбъектСценария = ЗагрузитьСценарий(Сценарий);
Возврат ОбъектСценария;
КонецФункции
Процедура СценарийВозвращаетНастройки(ОбъектСценария, ИмяНастройки)
Рефлектор = Новый Рефлектор;
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, НазваниеМетодаНастроек());
Утверждения.ПроверитьРавенство(СтруктураНастроек.ИмяСценария, ИмяНастройки);
Утверждения.ПроверитьРавенство(ТипЗнч(СтруктураНастроек.Настройка), Тип("Соответствие"));
КонецПроцедуры
Процедура ВключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Отладка);
КонецПроцедуры
Процедура ВыключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Информация);
КонецПроцедуры
Функция КаталогТестовыхФикстур()
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
КонецФункции
Функция Фикстура(ПутьВКаталогеФикстур)
Возврат ОбъединитьПути(КаталогТестовыхФикстур(), ПутьВКаталогеФикстур);
КонецФункции
Функция КаталогИсходников()
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
КонецФункции
Функция НазваниеМетодаНастроек()
Возврат "ПолучитьСтандартныеНастройкиСценария";
КонецФункции
Функция ПолучитьДополнительныеНастройки(Знач КаталогРепозитория = Неопределено, Знач ТекущийКаталогИсходныхФайлов = Неопределено)
Если КаталогРепозитория = Неопределено Тогда
КаталогРепозитория = ТекущийКаталог();
КонецЕсли;
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(КаталогРепозитория, Ложь);
Настройка = МенеджерНастроек.НастройкиПроекта().Получить("НастройкиСценариев");
ДополнительныеНастройки = СценарииОбработки.ПолучитьСтандартныеПараметрыОбработки();
ДополнительныеНастройки.Лог = Лог;
ДополнительныеНастройки.КаталогРепозитория = КаталогРепозитория;
ДополнительныеНастройки.ТекущийКаталогИсходныхФайлов = ТекущийКаталогИсходныхФайлов;
ДополнительныеНастройки.Настройки = Настройка;
Возврат ДополнительныеНастройки;
КонецФункции
Функция ПодготовитьИзменяемыйТестовыйФайл(Знач ИмяТестовогоФайла)
ПутьКТесту = ОбъединитьПути(КаталогТестовыхФикстур(), ИмяТестовогоФайла);
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(ИмяТестовогоФайла);
КопироватьФайл(ПутьКТесту, ПутьКФайлу);
Файл = Новый Файл(ПутьКФайлу);
Возврат Файл;
КонецФункции
Процедура ИспользоватьТестовуюНастройку(КаталогРепозитория, ИмяФайлаНастройки)
КопироватьФайл(
ОбъединитьПути(КаталогТестовыхФикстур(), "Настройки", ИмяФайлаНастройки),
ОбъединитьПути(КаталогРепозитория, "v8config.json"));
КонецПроцедуры
Функция КейсыПроверкиДобавленияМодулейТестов()
Кейсы = Новый ТаблицаЗначений();
Кейсы.Колонки.Добавить("КаталогТипаМетаданных");
Кейсы.Колонки.Добавить("ИмяМетаданных");
Кейсы.Колонки.Добавить("ИмяМодуляМетаданных");
Кейсы.Колонки.Добавить("ИмяМетодаМодуля");
Кейсы.Колонки.Добавить("ИмяТестовогоМодуля");
Кейсы.Колонки.Добавить("Клиент");
Кейсы.Колонки.Добавить("Сервер");
Кейсы.Колонки.Добавить("Глобальный");
ДобавитьКейсПроверкиТестов(Кейсы, "AccountingRegisters", "РегистрБухгалтерии1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РБ_РегистрБухгалтерии1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "AccountingRegisters", "РегистрБухгалтерии1", "RecordSetModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РБ_РегистрБухгалтерии1_МНЗ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "AccumulationRegisters", "РегистрНакопления1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РН_РегистрНакопления1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "AccumulationRegisters", "РегистрНакопления1", "RecordSetModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РН_РегистрНакопления1_МНЗ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "BusinessProcesses", "БизнесПроцесс1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "БП_БизнесПроцесс1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "BusinessProcesses", "БизнесПроцесс1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "БП_БизнесПроцесс1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CalculationRegisters", "РегистрРасчета1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РР_РегистрРасчета1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CalculationRegisters", "РегистрРасчета1", "RecordSetModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РР_РегистрРасчета1_МНЗ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Catalogs", "Справочник1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Спр_Справочник1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Catalogs", "Справочник1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Спр_Справочник1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ChartsOfAccounts", "ПланСчетов1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПС_ПланСчетов1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ChartsOfAccounts", "ПланСчетов1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПС_ПланСчетов1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ChartsOfCalculationTypes", "ПланВидовРасчета1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПВР_ПланВидовРасчета1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ChartsOfCalculationTypes", "ПланВидовРасчета1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПВР_ПланВидовРасчета1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ChartsOfCharacteristicTypes", "ПланВидовХарактеристик1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПВХ_ПланВидовХарактеристик1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ChartsOfCharacteristicTypes", "ПланВидовХарактеристик1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПВХ_ПланВидовХарактеристик1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульКлиентЧастичноПокрытый", "Module.bsl", "ПокрытаяПроцедураЭкспортнаяБезПараметров", "ОМ_ОбщийМодульКлиентЧастичноПокрытый", Истина, Ложь); // Уже есть.
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульКлиентЧастичноПокрытый", "Module.bsl", "НепокрытаяФункцияЭкспортнаяБезПараметров", "ОМ_ОбщийМодульКлиентЧастичноПокрытый", Истина, Ложь);
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульСерверГлобальныйЧастичноПокрытый", "Module.bsl", "глНепокрытаяПроцедураЭкспортнаяБезПараметров", "ОМ_ОбщийМодульСерверГлобальныйЧастичноПокрытый", Ложь, Истина, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульСерверГлобальныйЧастичноПокрытый", "Module.bsl", "глПокрытаяФункцияЭкспортнаяБезПараметров", "ОМ_ОбщийМодульСерверГлобальныйЧастичноПокрытый", Ложь, Истина, Истина); // Уже есть.
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульКлиентСерверГлобальный", "Module.bsl", "глПроцедураЭкспортнаяБезПараметров", "ОМ_ОбщийМодульКлиентСерверГлобальный", Истина, Истина, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульКлиентСерверГлобальный", "Module.bsl", "глПроцедураЭкспортнаяСПараметрами", "ОМ_ОбщийМодульКлиентСерверГлобальный", Истина, Истина, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульКлиентСерверГлобальный", "Module.bsl", "глФункцияЭкспортнаяБезПараметров", "ОМ_ОбщийМодульКлиентСерверГлобальный", Истина, Истина, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульКлиентСерверГлобальный", "Module.bsl", "глФункцияЭкспортнаяСПараметрами", "ОМ_ОбщийМодульКлиентСерверГлобальный", Истина, Истина, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "CommonModules", "ОбщийМодульСервер", "Module.bsl", "ПроцедураЭкспортнаяБезПараметров", "ОМ_ОбщийМодульСервер", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "DataProcessors", "Обработка1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Обр_Обработка1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "DataProcessors", "Обработка1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Обр_Обработка1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Documents", "Документ1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Док_Документ1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Documents", "Документ1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Док_Документ1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Enums", "Перечисление1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Пер_Перечисление1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ExchangePlans", "ПланОбмена1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПО_ПланОбмена1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "ExchangePlans", "ПланОбмена1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "ПО_ПланОбмена1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "InformationRegisters", "РегистрСведений1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РС_РегистрСведений1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "InformationRegisters", "РегистрСведений1", "RecordSetModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "РС_РегистрСведений1_МНЗ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Reports", "Отчет1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Отч_Отчет1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Reports", "Отчет1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Отч_Отчет1_МО", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Tasks", "Задача1", "ManagerModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Зад_Задача1_ММ", Ложь, Истина);
ДобавитьКейсПроверкиТестов(Кейсы, "Tasks", "Задача1", "ObjectModule.bsl", "ПроцедураЭкспортнаяБезПараметров", "Зад_Задача1_МО", Ложь, Истина);
Возврат Кейсы;
КонецФункции
Процедура ДобавитьКейсПроверкиТестов(Кейсы, КаталогТипаМетаданных, ИмяМетаданных, ИмяМодуляМетаданных, ИмяМетодаМодуля, ИмяТестовогоМодуля, Клиент, Сервер, Глобальный = Ложь)
Кейс = Кейсы.Добавить();
Кейс.КаталогТипаМетаданных = КаталогТипаМетаданных;
Кейс.ИмяМетаданных = ИмяМетаданных;
Кейс.ИмяМодуляМетаданных = ИмяМодуляМетаданных;
Кейс.ИмяМетодаМодуля = ИмяМетодаМодуля;
Кейс.ИмяТестовогоМодуля = ИмяТестовогоМодуля;
Кейс.Клиент = Клиент;
Кейс.Сервер = Сервер;
Кейс.Глобальный = Глобальный;
КонецПроцедуры
#КонецОбласти

View File

@ -1,363 +0,0 @@
#Использовать asserts
#Использовать logos
#Использовать tempfiles
Перем юТест;
Перем Лог;
Перем МенеджерВременныхФайлов;
#Область ПрограммныйИнтерфейс
// Основная точка входа
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетТолькоНаписание");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени");
Возврат ВсеТесты;
КонецФункции
Процедура ПередЗапускомТеста() Экспорт
ВремТестер = Новый Тестер;
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
ВключитьПоказОтладки();
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
МенеджерВременныхФайлов.Удалить();
МенеджерВременныхФайлов = Неопределено;
КонецПроцедуры
#Область ИсправлениеНеКаноническогоНаписания
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетТолькоНаписание() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
ТекстФайлаДо = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
ТекстФайлаПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
// текст изменен
Ожидаем.Что(ТекстФайлаДо, Истина).Не_().Равно(ТекстФайлаПосле);
// текст тождественен
Ожидаем.Что(Врег(ТекстФайлаДо), Истина).Равно(Врег(ТекстФайлаПосле));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
ДопНастройки = ПолучитьДополнительныеНастройки();
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ДопНастройки);
Ожидаем.Что(ДопНастройки.ИзмененныеКаталоги.Количество(), Истина).Равно(0);
КонецПроцедуры
#КонецОбласти
#Область ОтключениеПолнотекстовогоПоиска
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки() Экспорт
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
СценарийВозвращаетНастройки(ОбъектСценария, "ОтключениеПолнотекстовогоПоиска");
КонецПроцедуры
#КонецОбласти
#Область РазборОтчетовОбработокРасширений
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек() Экспорт
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки() Экспорт
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
СценарийВозвращаетНастройки(ОбъектСценария, "РазборОтчетовОбработокРасширений");
КонецПроцедуры
#КонецОбласти
#Область ПроверкаДублейПроцедурИФункций
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение() Экспорт
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурНегативныйТест.bsl"));
СПараметрами = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурСПараметрами.bsl"));
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов");
ВызываетсяИсключениеСТекстом(ОбъектСценария, СПараметрами, "обнаружены неуникальные имена методов");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл() Экспорт
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурПоложительныйТест.bsl"));
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл() Экспорт
Файл = Новый Файл(ПолучитьИмяВременногоФайла("bsl"));
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник() Экспорт
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("xml"));
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени() Экспорт
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("bsl"));
Имена = Новый Массив;
Имена.Добавить("ПроверкаДублейПроцедурИФункций");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "Сценарий не получен").Равно(1);
Имена.Добавить("ПроверкаДублейПроцедурИФункций");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "Добавлен один и тот же сценарий").Равно(1);
Имена.Добавить("ПроверкаДублейПроцедурИФункций.os");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "Добавлен один и тот же сценарий").Равно(1);
Имена.Добавить("РазборОтчетовОбработокРасширений.os");
Сценарии = СценарииОбработки.Загрузить(Файл.Путь, "", Имена);
Ожидаем.Что(Сценарии.Количество(), "С массивом загружаемых сценариев что-то пошло не так").Равно(2);
КонецПроцедуры
#КонецОбласти
#Область СинхронизацияОбъектовМетаданныхИФайлов
Процедура ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение() Экспорт
ОбъектСценария = ПолучитьСценарий("СинхронизацияОбъектовМетаданныхИФайлов.os");
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "СинхронизацияОбъектовМетаданныхИФайлов\Configuration.xml"));
// Переименование типа без переименования каталога
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Имя каталога Ancillary отличается от метаданного ancillary");
// удаление типа без удаления файлов
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Необходимо удалить файлы");
// базовые элементы
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог ChartsOfCharacteristicTypes");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Catalogs");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommandGroups");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonAttributes");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonCommands");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonForms");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonModules");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonPictures");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог CommonTemplates");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Constants");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог DataProcessors");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог DefinedTypes");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Documents");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Enums");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог EventSubscriptions");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог FunctionalOptions");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог InformationRegisters");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Languages");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Reports");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Roles");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог ScheduledJobs");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог SessionParameters");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог Subsystems");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствует каталог XDTOPackages");
// элементы метаданых
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Language.Русский");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Subsystem.ПодсистемыБСП");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonPicture.GUID");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Role.АвтоТестированиеАдминистратор");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для SessionParameter.автоТестирование");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonTemplate.HiddenStart");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonModule.sFTPКлиентСервер");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonAttribute.UID");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для XDTOPackage.bsp_ancillary");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для EventSubscription.ВерсионированиеПриЗаписи");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для ScheduledJob.РоботАвтоматическаяОбработкаИзмененийАдресногоКлассификатора");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для FunctionalOption.ВестиЖурналДействийПользователя");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для DefinedType.ТипUIDСтрока");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonCommand.АудиторскийСлед");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommandGroup.Печать");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Constant.АдресатыПолученияУведомленийОбИзмененияхВАлгоритмах");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для CommonForm.АвторизацияПользователя");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Catalog.АдресаЭлектроннойПочты");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Document.АттестацияРазработчика");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Enum.ВариантХраненияФайлов");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для Report.анализЖурналаРегистрации");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для DataProcessor.активныеПользователи");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для InformationRegister.администраторыБаз");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "Отсутствуют файлы для ChartOfCharacteristicTypes.РасширенныеХарактеристикиОбъектов");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, ТекстИсключения)
ДополнительныеНастройки = ПолучитьДополнительныеНастройки();
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(Файл);
ПараметрыМетода.Добавить(Файл.Путь);
ПараметрыМетода.Добавить(ДополнительныеНастройки);
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения);
КонецПроцедуры
Процедура СценарийИмеетМетод(ОбъектСценария, ИмяМетода)
Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(ОбъектСценария, ИмяМетода);
Ожидаем.Что(ЕстьМетод, Истина).ЭтоИстина();
КонецПроцедуры
Функция ПолучитьСценарий(ИмяСценария)
Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", ИмяСценария);
ОбъектСценария = ЗагрузитьСценарий(Сценарий);
Возврат ОбъектСценария;
КонецФункции
Процедура СценарийВозвращаетНастройки(ОбъектСценария, ИмяНастройки)
Рефлектор = Новый Рефлектор;
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, НазваниеМетодаНастроек());
Утверждения.ПроверитьРавенство(СтруктураНастроек.ИмяСценария, ИмяНастройки);
Утверждения.ПроверитьРавенство(ТипЗнч(СтруктураНастроек.Настройка), Тип("Соответствие"));
КонецПроцедуры
Процедура ВключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Отладка);
КонецПроцедуры
Процедура ВыключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Информация);
КонецПроцедуры
Функция КаталогТестовыхФикстур()
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
КонецФункции
Функция Фикстура(ПутьВКаталогеФикстур)
Возврат ОбъединитьПути(КаталогТестовыхФикстур(), ПутьВКаталогеФикстур)
КонецФункции
Функция КаталогИсходников()
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
КонецФункции
Функция НазваниеМетодаНастроек()
Возврат "ПолучитьСтандартныеНастройкиСценария";
КонецФункции
Функция ПолучитьДополнительныеНастройки()
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(ТекущийКаталог(), Ложь);
Настройка = МенеджерНастроек.НастройкиПроекта().Получить("НастройкиСценариев");
ДополнительныеНастройки = Новый Структура("Лог, Настройки, ИзмененныеКаталоги", Лог, Настройка, Новый Массив());
Возврат ДополнительныеНастройки;
КонецФункции
Функция ПодготовитьИзменяемыйТестовыйФайл(Знач ИмяТестовогоФайла)
ПутьКТесту = ОбъединитьПути(КаталогТестовыхФикстур(), ИмяТестовогоФайла);
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(ИмяТестовогоФайла);
КопироватьФайл(ПутьКТесту, ПутьКФайлу);
Файл = Новый Файл(ПутьКФайлу);
Возврат Файл;
КонецФункции
#КонецОбласти

View File

@ -11,7 +11,7 @@
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
ПередЗапускомТестов();
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
@ -20,7 +20,7 @@
ВсеТесты.Добавить("Тест_ИспользованиеЛокальныхНастроек");
ВсеТесты.Добавить("Тест_ОтключенныеНастройки");
ВсеТесты.Добавить("Тест_ОтключенныеНастройкиИПереопределенныеГлобальныеСценарии");
ВсеТесты.Добавить("Тест_НастройкиПроектов");
ВсеТесты.Добавить("Тест_НастройкиСценариев");
@ -29,16 +29,16 @@
КонецФункции
Процедура ПередЗапускомТестов()
МенеджерПриложения.Инициализировать(ПараметрыПриложения);
Попытка
ВремТестер = Новый Тестер;
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
Исключение
Лог = Логирование.ПолучитьЛог("Test");
КонецПопытки;
КонецПроцедуры
Процедура ПередЗапускомТеста() Экспорт
@ -65,7 +65,7 @@
КонецПроцедуры
Процедура Тест_ИспользованиеЛокальныхНастроек() Экспорт
НастройкиПрекоммит = ЗагрузитьНастройкиИзФикстуры("v8config.json");
Ожидаем.Что(НастройкиПрекоммит, "Не удалось загрузить настройки").Заполнено();
@ -76,129 +76,130 @@
ОжидаемыеСценарии.Добавить("УдалениеЛишнихПустыхСтрок.os");
ПроверитьОжидаемыеСценарии(НастройкиПрекоммит["ГлобальныеСценарии"], ОжидаемыеСценарии);
КонецПроцедуры
Процедура Тест_ОтключенныеНастройки() Экспорт
НастройкиПрекоммит = ЗагрузитьНастройкиИзФикстуры("v8configОтключенныеСценарии.json");
Ожидаем.Что(НастройкиПрекоммит, "Не удалось загрузить настройки").Заполнено();
ОжидаемыеСценарии = Новый Массив();
ОжидаемыеСценарии.Добавить("ДобавлениеПробеловПередКлючевымиСловами.os");
ОжидаемыеСценарии.Добавить("ЗапретИспользованияПерейти.os");
ОжидаемыеСценарии.Добавить("ИсправлениеНеКаноническогоНаписания.os");
ОжидаемыеСценарии.Добавить("КорректировкаXMLФорм.os");
ОжидаемыеСценарии.Добавить("ДобавлениеПробеловПередКлючевымиСловами.os");
ОжидаемыеСценарии.Добавить("ДобавлениеТестовВРасширение.os");
ОжидаемыеСценарии.Добавить("ЗапретИспользованияПерейти.os");
ОжидаемыеСценарии.Добавить("ИсправлениеНеКаноническогоНаписания.os");
ОжидаемыеСценарии.Добавить("КорректировкаXMLФорм.os");
ОжидаемыеСценарии.Добавить("ОбработкаЮнитТестов.os");
ОжидаемыеСценарии.Добавить("ПроверкаНецензурныхСлов.os");
ОжидаемыеСценарии.Добавить("ОтключениеПолнотекстовогоПоиска.os");
ОжидаемыеСценарии.Добавить("ОтключениеПолнотекстовогоПоиска.os");
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиДирективКомпиляции.os");
ОжидаемыеСценарии.Добавить("ПроверкаДублейПроцедурИФункций.os");
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиОбластей.os");
ОжидаемыеСценарии.Добавить("РазборОбычныхФормНаИсходники.os");
ОжидаемыеСценарии.Добавить("РазборОтчетовОбработокРасширений.os");
ОжидаемыеСценарии.Добавить("СинхронизацияОбъектовМетаданныхИФайлов.os");
ОжидаемыеСценарии.Добавить("ПроверкаДублейПроцедурИФункций.os");
ОжидаемыеСценарии.Добавить("ПроверкаКорректностиОбластей.os");
ОжидаемыеСценарии.Добавить("РазборОбычныхФормНаИсходники.os");
ОжидаемыеСценарии.Добавить("РазборОтчетовОбработокРасширений.os");
ОжидаемыеСценарии.Добавить("СинхронизацияОбъектовМетаданныхИФайлов.os");
ОжидаемыеСценарии.Добавить("СортировкаДереваМетаданных.os");
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев();
ПроверитьОжидаемыеСценарии(ИменаЗагружаемыхСценариев, ОжидаемыеСценарии);
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев("Несуществующий проект");
ПроверитьОжидаемыеСценарии(ИменаЗагружаемыхСценариев, ОжидаемыеСценарии);
КонецПроцедуры
Процедура Тест_ОтключенныеНастройкиИПереопределенныеГлобальныеСценарии() Экспорт
НастройкиПрекоммит = ЗагрузитьНастройкиИзФикстуры("v8configОтключенныеСценарииПереопреденыГлобальные.json");
Ожидаем.Что(НастройкиПрекоммит, "Не удалось загрузить настройки").Заполнено();
ОжидаемыеСценарии = Новый Массив();
ОжидаемыеСценарии.Добавить("РазборОбычныхФормНаИсходники.os");
ОжидаемыеСценарии.Добавить("РазборОтчетовОбработокРасширений.os");
ОжидаемыеСценарии.Добавить("СинхронизацияОбъектовМетаданныхИФайлов.os");
ОжидаемыеСценарии.Добавить("РазборОбычныхФормНаИсходники.os");
ОжидаемыеСценарии.Добавить("РазборОтчетовОбработокРасширений.os");
ОжидаемыеСценарии.Добавить("СинхронизацияОбъектовМетаданныхИФайлов.os");
ОжидаемыеСценарии.Добавить("СортировкаДереваМетаданных.os");
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев();
ПроверитьОжидаемыеСценарии(ИменаЗагружаемыхСценариев, ОжидаемыеСценарии);
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев("Несуществующий проект");
ПроверитьОжидаемыеСценарии(ИменаЗагружаемыхСценариев, ОжидаемыеСценарии);
КонецПроцедуры
Процедура Тест_НастройкиПроектов() Экспорт
ВсеСценарии = МенеджерНастроек.ПолучитьИменаСценариевКаталога(МенеджерПриложения.КаталогСценариев());
Каталог = СоздатьТестовыйКаталог("v8configПроекты.json");
Настройки = МенеджерНастроек.НастройкиРепозитория(Каталог);
НастройкиПрекоммит = Настройки.НастройкиПриложения(МенеджерНастроек.КлючНастройкиPrecommit());
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект настроек").Содержит("configuration\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект настроек").Содержит("ext\extension1\");
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "configuration\", Ложь);
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "ext\extension1\", Истина);
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "ext\extension2\", Истина, "Несуществующий проект");
ПроверитьЗначение("КаталогЛокальныхСценариев", "ext\extension1\", "localscenario");
ПроверитьЗначение("КаталогЛокальныхСценариев", "ext\extension2\", "", "Несуществующий проект");
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("configuration\");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'configuration'").Равно(0);
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("ext\extension1\");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'ext\extension1'").Равно(ВсеСценарии.Количество());
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("ext\extension2\");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'ext\extension2' несуществующий проект").Равно(ВсеСценарии.Количество() - 1);
НастройкаConfiguration = МенеджерНастроек.НастройкиПроекта("configuration\");
Ожидаем.Что(НастройкаConfiguration,
"Не корректные настройки проекта")
.Не_().Равно(НастройкиПрекоммит);
.Не_().Равно(НастройкиПрекоммит);
НастройкаExtension1 = МенеджерНастроек.НастройкиПроекта("ext\extension1\");
Ожидаем.Что(НастройкаExtension1,
"Не корректные настройки проекта")
.Не_().Равно(НастройкиПрекоммит);
Ожидаем.Что(МенеджерНастроек.НастройкиПроекта("configuration2"),
"Не корректные настройки проекта")
.Не_().Равно(НастройкиПрекоммит);
Ожидаем.Что(МенеджерНастроек.НастройкиПроекта("configuration2"),
"Не корректные настройки проекта. Для отсутствующего проекта должны возвращаться общие настройки")
.Равно(НастройкиПрекоммит);
.Равно(НастройкиПрекоммит);
ВариантыПроверки = Новый ТаблицаЗначений();
ВариантыПроверки.Колонки.Добавить("ИмяФайла");
ВариантыПроверки.Колонки.Добавить("Настройка");
ДобавитьВариантНастройки(ВариантыПроверки, "configuration\module.bsl", НастройкаConfiguration);
ДобавитьВариантНастройки(ВариантыПроверки, "configuration\module.bsl", НастройкаConfiguration);
ДобавитьВариантНастройки(ВариантыПроверки, "ext\extension1\module.bsl", НастройкаExtension1);
ДобавитьВариантНастройки(ВариантыПроверки, "\confiGuration\module.bsl", НастройкаConfiguration);
ДобавитьВариантНастройки(ВариантыПроверки, "test\module.bsl", НастройкиПрекоммит);
ДобавитьВариантНастройки(ВариантыПроверки, "module.bsl", НастройкиПрекоммит);
ДобавитьВариантНастройки(ВариантыПроверки, "", НастройкиПрекоммит);
ДобавитьВариантНастройки(ВариантыПроверки, "test\module.bsl", НастройкиПрекоммит);
ДобавитьВариантНастройки(ВариантыПроверки, "module.bsl", НастройкиПрекоммит);
ДобавитьВариантНастройки(ВариантыПроверки, "", НастройкиПрекоммит);
Для каждого Вариант Из ВариантыПроверки Цикл
Ожидаем.Что(МенеджерНастроек.НастройкаДляФайла(Вариант.ИмяФайла),
СтрШаблон("Не верно определена настройка для файла '%1'", Вариант.ИмяФайла))
.Равно(Вариант.Настройка);
.Равно(Вариант.Настройка);
КонецЦикла;
КонецПроцедуры
Процедура Тест_НастройкиСценариев() Экспорт
НастройкиПрекоммит = ЗагрузитьНастройкиИзФикстуры("v8configПроекты.json");
ВариантыПроверки = Новый ТаблицаЗначений();
ВариантыПроверки.Колонки.Добавить("ИмяФайла");
ВариантыПроверки.Колонки.Добавить("ИмяСценария");
@ -206,13 +207,13 @@
ВариантыПроверки.Колонки.Добавить("ЗначениеНастройки");
ДобавитьВариантНастройки(ВариантыПроверки, "ext\extension1\module.bsl", "ОтключениеПолнотекстовогоПоиска", "МетаданныеДляИсключения", "src\Документ2.mdo");
ДобавитьВариантНастройки(ВариантыПроверки, "configuration\module.bsl", "ОтключениеПолнотекстовогоПоиска", "МетаданныеДляИсключения", Неопределено);
ДобавитьВариантНастройки(ВариантыПроверки, "tests\module.bsl", "ОтключениеПолнотекстовогоПоиска", "МетаданныеДляИсключения", "src\Документ1.mdo");
ДобавитьВариантНастройки(ВариантыПроверки, "configuration\module.bsl", "ОтключениеПолнотекстовогоПоиска", "МетаданныеДляИсключения", Неопределено);
ДобавитьВариантНастройки(ВариантыПроверки, "tests\module.bsl", "ОтключениеПолнотекстовогоПоиска", "МетаданныеДляИсключения", "src\Документ1.mdo");
Для Каждого Вариант Из ВариантыПроверки Цикл
Настройка = МенеджерНастроек.НастройкаДляФайла(Вариант.ИмяФайла);
КлючНастройки = СтрШаблон("НастройкиСценариев.%1.%2", Вариант.ИмяСценария, Вариант.ИмяНастройки);
ЗначениеНастройки = МенеджерНастроек.ЗначениеПоКлючу(Настройка, КлючНастройки);
@ -220,41 +221,41 @@
Ожидаем.Что(ЗначениеНастройки,
СтрШаблон("Не верно определена настройка сценария '%2' для файла '%1'", Вариант.ИмяФайла, Вариант.ИмяСценария))
.Равно(Неопределено);
.Равно(Неопределено);
Иначе
Ожидаем.Что(ЗначениеНастройки[Вариант.ЗначениеНастройки],
Ожидаем.Что(ЗначениеНастройки[Вариант.ЗначениеНастройки],
СтрШаблон("Не верно определена настройка сценария '%2' для файла '%1'", Вариант.ИмяФайла, Вариант.ИмяСценария))
.НЕ_().Равно(Неопределено);
КонецЕсли;
.НЕ_().Равно(Неопределено);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗначение(Ключ, Проект, ОжидаемоеЗначение, Дополнение = "")
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Ключ, Проект),
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Ключ, Проект),
СтрШаблон("Не верное значение настройки '%1.%2' %3", Проект, Ключ, Дополнение))
.Равно(ОжидаемоеЗначение);
.Равно(ОжидаемоеЗначение);
КонецПроцедуры
#Область Служебные
Процедура ПроверитьОжидаемыеСценарии(ГлобальныеСценарии, ОжидаемыеСценарии)
Ожидаем.Что(ГлобальныеСценарии, "Нет глобальных сценариев").Заполнено();
Ожидаем.Что(ГлобальныеСценарии.Количество(), "Не корректный список сценариев").Равно(ОжидаемыеСценарии.Количество());
Для каждого ИмяСценария Из ОжидаемыеСценарии Цикл
Ожидаем.Что(ГлобальныеСценарии, "Не содержит нужные сценарии").Содержит(ИмяСценария)
Ожидаем.Что(ГлобальныеСценарии, "Не содержит нужные сценарии").Содержит(ИмяСценария);
КонецЦикла;
КонецПроцедуры
Процедура ВключитьПоказОтладки()
@ -266,13 +267,13 @@
КонецПроцедуры
Функция ЗагрузитьНастройкиИзФикстуры(ИмяФикстуры)
КаталогРепозитория = СоздатьТестовыйКаталог(ИмяФикстуры);
Настройки = МенеджерНастроек.НастройкиРепозитория(КаталогРепозитория);
Возврат Настройки.НастройкиПриложения(МенеджерНастроек.КлючНастройкиPrecommit());
КонецФункции
Функция СоздатьТестовыйКаталог(ИмяФикстуры)
@ -288,9 +289,9 @@
СоздатьКаталог(ОбъединитьПути(Каталог, "ext"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension1"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension2"));
Возврат Каталог;
КонецФункции
Процедура ДобавитьВариантНастройки(Варианты, Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено, Значение4 = Неопределено)
@ -300,7 +301,7 @@
Для Инд = 1 По 4 Цикл
Значение = Вычислить(СтрШаблон("Значение%1", Инд));
Если Значение <> Неопределено Тогда
Строка[Инд - 1] = Значение;
КонецЕсли;
@ -308,4 +309,4 @@
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -11,7 +11,7 @@
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
ПередЗапускомТестов();
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
@ -20,7 +20,7 @@
ВсеТесты.Добавить("Тест_СброситьГлобальныеНастройки");
ВсеТесты.Добавить("Тест_ПолучитьСтандартнуюСтруктуруНастроек");
ВсеТесты.Добавить("Тест_ОбновитьНастройки");
Возврат ВсеТесты;
КонецФункции
@ -28,16 +28,16 @@
#Область ПередПослеТеста
Процедура ПередЗапускомТестов()
МенеджерПриложения.Инициализировать(ПараметрыПриложения);
Попытка
ВремТестер = Новый Тестер;
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
Исключение
Лог = Логирование.ПолучитьЛог("Test");
КонецПопытки;
КонецПроцедуры
Процедура ПередЗапускомТеста() Экспорт
@ -46,7 +46,7 @@
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
МенеджерНастроек.СбросСостоянияМенеджера();
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
@ -61,52 +61,52 @@
#Область Тесты
Процедура Тест_СброситьНастройкиРепозитория() Экспорт
Каталог = СоздатьТестовыйКаталог("v8configПроекты.json");
// Сброс по проектно
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("configuration\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("ext\extension1\");
РедакторНастроек.СброситьНастройкиРепозитория(Истина, "ext\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Проект не удален").НЕ_().Содержит("ext\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("configuration\");
РедакторНастроек.СброситьНастройкиРепозитория(Истина, "configuration\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Удален лишний репозиторий").Содержит("configuration\");
// Перезагрузим настройки
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки не сохранены").НЕ_().Содержит("ext\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки сохранены не корректно").Содержит("configuration\");
// Сброс всех подпроектов
Каталог = СоздатьТестовыйКаталог("v8configПроекты.json");
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
РедакторНастроек.СброситьНастройкиРепозитория(Истина);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не выполнен сброс настроек подпроектов").ИмеетДлину(0);
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки("ОтключенныеСценарии"), "Не корректны настройки").ИмеетДлину(1);
// Перезагрузим настройки
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки не сохранены").ИмеетДлину(0);
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки("ОтключенныеСценарии"), "Не корректны настройки после загрузки").ИмеетДлину(1);
// Полный сброс настроек прекоммит
Каталог = СоздатьТестовыйКаталог("v8configПроекты.json");
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
РедакторНастроек.СброситьНастройкиРепозитория();
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не выполнен сброс настроек").ИмеетДлину(0);
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки("ОтключенныеСценарии"), "Не корректны настройки").НЕ_().Заполнено();
// Перезагрузим настройки
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки не сохранены").ИмеетДлину(0);
@ -115,35 +115,35 @@
КонецПроцедуры
Процедура Тест_СброситьГлобальныеНастройки() Экспорт
Каталог = СоздатьТестовыйКаталог("v8configПроекты.json");
МенеджерНастроек.УстановитьКаталогГлобальныхНастроек(Каталог);
МенеджерНастроек.ГлобальныеНастройки();
РедакторНастроек.СброситьГлобальныеНастройки();
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не удалены подпроекты").НЕ_().Заполнено();
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки("ОтключенныеСценарии"), "Не сброшены ОтключенныеСценарии").НЕ_().Заполнено();
Для Каждого ИмяСценария Из СценарииОбработки.ГлобальныеСценарии() Цикл
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки("ГлобальныеСценарии"), "Не сброшены ГлобальныеСценарии").Содержит(ИмяСценария);
КонецЦикла;
КонецПроцедуры
Процедура Тест_ПолучитьСтандартнуюСтруктуруНастроек() Экспорт
СтандартныеНастройки = РедакторНастроек.ПолучитьСтандартнуюСтруктуруНастроек();
Ожидаем.Что(СтандартныеНастройки)
.ИмеетТип("Соответствие")
.ИмеетДлину(5);
Эталон = Новый Соответствие();
Эталон.Вставить("ИспользоватьСценарииРепозитория", "Булево");
@ -151,86 +151,86 @@
Эталон.Вставить("ГлобальныеСценарии", "Массив");
Эталон.Вставить("ОтключенныеСценарии", "Массив");
Эталон.Вставить("НастройкиСценариев", "Соответствие");
Для Каждого Элемент Из Эталон Цикл
Для Каждого Элемент Из Эталон Цикл
Ожидаем.Что(СтандартныеНастройки[Элемент.Ключ], "Не верное свойство " + Элемент.Ключ).ИмеетТип(Элемент.Значение);
КонецЦикла;
КонецПроцедуры
Процедура Тест_ОбновитьНастройки() Экспорт
Варианты = Новый ТаблицаЗначений();
Варианты.Колонки.Добавить("Описание");
Варианты.Колонки.Добавить("ИмяФикстуры");
Варианты.Колонки.Добавить("НовыеНастройки");
Варианты.Колонки.Добавить("НовыеПроекты");
Варианты.Колонки.Добавить("ОжидаемыеПроекты");
БазовыеНастройки = РедакторНастроек.ПолучитьСтандартнуюСтруктуруНастроек();
НастройкиПроектов = Новый Соответствие();
НастройкиПроектов.Вставить("configuration\", РедакторНастроек.ПолучитьСтандартнуюСтруктуруНастроек());
ДобавитьВариантНастройки(Варианты, "Только базовые настройки", "v8config.json", БазовыеНастройки, , "");
ДобавитьВариантНастройки(Варианты, "К базовым настройкам добавляем проекты", "v8config.json", БазовыеНастройки, НастройкиПроектов, "configuration\");
ДобавитьВариантНастройки(Варианты, "Настройки с проектами, обновляем только базовые настройки", "v8configПроекты.json", БазовыеНастройки, , "configuration\,ext\extension1");
ДобавитьВариантНастройки(Варианты, "Обновление настройки подпроекта", "v8configПроекты.json", БазовыеНастройки, НастройкиПроектов, "configuration\,ext\extension1\");
НастройкиПроектов = Новый Соответствие();
НастройкиПроектов.Вставить("configuration2\", РедакторНастроек.ПолучитьСтандартнуюСтруктуруНастроек());
ДобавитьВариантНастройки(Варианты, "Добавление настройки подпроекта", "v8configПроекты.json", БазовыеНастройки, НастройкиПроектов, "configuration\,configuration2\,ext\extension1\");
Для Каждого Вариант Из Варианты Цикл
Лог.Отладка("Обработка файла %1", Вариант.ИмяФикстуры);
МенеджерНастроек.СбросСостоянияМенеджера();
Каталог = СоздатьТестовыйКаталог(Вариант.ИмяФикстуры);
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
РедакторНастроек.ОбновитьНастройки(Вариант.НовыеНастройки, Вариант.НовыеПроекты);
МенеджерНастроек.СбросСостоянияМенеджера();
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Префикс = СтрШаблон("Вариант ""%1""", Вариант.Описание);
Для Каждого Элемент Из Вариант.НовыеНастройки Цикл
Сообщение = СтрШаблон("%1. Не верное значение поля '%2'", Префикс, Элемент.Ключ);
ОжидаемоеЗначение = Элемент.Значение;
Если ТипЗнч(ОжидаемоеЗначение) = Тип("Массив") Тогда
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Элемент.Ключ), Сообщение).ИмеетТип("Массив").ИмеетДлину(ОжидаемоеЗначение.Количество());
ИначеЕсли ТипЗнч(ОжидаемоеЗначение) = Тип("Соответствие") Тогда
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Элемент.Ключ), Сообщение).ИмеетТип("Соответствие").ИмеетДлину(ОжидаемоеЗначение.Количество());
Иначе
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Элемент.Ключ), Сообщение).Равно(ОжидаемоеЗначение);
КонецЕсли;
КонецЦикла;
ИменаПроектов = СтрРазделить(Вариант.ОжидаемыеПроекты, ",");
Для Каждого ИмяПроекта Из ИменаПроектов Цикл
Сообщение = СтрШаблон("%1. Нет настроек для проекта '%2'", Префикс, ИмяПроекта);
Ожидаем.Что(МенеджерНастроек.НастройкиПроекта(ИмяПроекта), Сообщение).Заполнено();
КонецЦикла;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
@ -259,9 +259,9 @@
СоздатьКаталог(ОбъединитьПути(Каталог, "ext"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension1"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension2"));
Возврат Каталог;
КонецФункции
Процедура ДобавитьВариантНастройки(Варианты, Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено, Значение4 = Неопределено, Значение5 = Неопределено)
@ -271,7 +271,7 @@
Для Инд = 1 По 5 Цикл
Значение = Вычислить(СтрШаблон("Значение%1", Инд));
Если Значение <> Неопределено Тогда
Строка[Инд - 1] = Значение;
КонецЕсли;
@ -279,4 +279,4 @@
КонецПроцедуры
#КонецОбласти
#КонецОбласти

Some files were not shown because too many files have changed in this diff Show More