diff --git a/.gitignore b/.gitignore index 1aa2856..af69900 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -src/ConfigDumpInfo.xml -src/dumplist.txt +ConfigDumpInfo.xml +dumplist.txt .vscode /.metadata/ -/.scannerwork/ \ No newline at end of file +/.scannerwork/ diff --git a/README.md b/README.md index 8f1e192..4459e14 100644 --- a/README.md +++ b/README.md @@ -32,5 +32,11 @@ ## Информация для контрибьюторов +### Версия платформы и режим совместимости + > Разработка ведется на версии 8.3.23 > Режим совместимости 8.3.18 + +### Руководство контрибьютора + +1. [Руководство по написанию юнит-тестов YaXUnit](docs/РуководствоПоНаписаниюТестовYAxUnit.md) diff --git a/docs/РуководствоПоНаписаниюТестовYAxUnit.md b/docs/РуководствоПоНаписаниюТестовYAxUnit.md new file mode 100644 index 0000000..ca2ad49 --- /dev/null +++ b/docs/РуководствоПоНаписаниюТестовYAxUnit.md @@ -0,0 +1,86 @@ +# Руководство по написанию тестов YAxUnit + +## Шаг 1: Клонирование репозитория + +Для начала работы вам необходимо клонировать репозиторий с GitHub. Вы можете сделать это, выполнив следующую команду в Git: + +```bash +git clone https://github.com/firstBitSportivnaya/PSSL.git +``` + +## Шаг 2: Загрузка конфигурации +После клонирования репозитория загрузите конфигурацию в информационную базу из каталога: +```bash +PSSL/src/cf/ +``` +## Шаг 3: Добавление расширения конфигурации +Далее необходимо добавить расширение конфигурации YAxUnit, используйте файлы из следующего каталога: +```bash +PSSL/src/cfe/YAXUnit +``` +После добавления расширения в режиме 1С:Предприятие должна появиться панель управления YAxUnit, которая отображается в виде подсистемы. + +## Шаг 4: Создание тестов +### Определение тестируемой функции +Допустим в вашей конфигурации есть общий модуль **__ОбщегоНазначенияВспомогательныеФункции** в котором есть функция определения четности числа: + +```1C +Функция ЧетноеЧисло(Число) Экспорт + Возврат Число % 2 = 0; +КонецФункции +``` +В данном примере рассмотрим написание тестов для этой функции. + +### Составление тестового набора +Для начала необходимо составить тестовый набор для проверки функции, стараясь покрыть пограничные случаи: +| Число | Результат | +|-------|-------------| +| 2 | Четное | +| 1 | Нечетное | +| 0 | Четное | +| -1 | Нечетное | +| -2 | Четное | +| 100 | Четное | +| 99 | Нечетное | + +### Создание модуля для тестов +Создайте новый модуль в расширении YAxUnit, который принято называть по названию объекта, в котором находится тестируемая функция. Для нашего случая это будет модуль **ОМ__ОбщегоНазначенияВспомогательныеФункции**. + +### Написание теста +Теперь напишем сам тест, для этого внутри **ОМ__ОбщегоНазначенияВспомогательныеФункции** создаем процедуру **ИсполняемыеСценарии()**: +```1C +Процедура ИсполняемыеСценарии() Экспорт + // Создание группы тестов + ЮТТесты.ДобавитьТестовыйНабор("Проверка функции ЧетноеЧисло") + // Добавление конкретного теста в группу + .ДобавитьТест("ТестЧетноеЧисло") + // Передача параметров в тест + .СПараметрами(Новый Структура("Число, ОжидаемыйРезультат", 2, Истина)) + .СПараметрами(Новый Структура("Число, ОжидаемыйРезультат", 1, Ложь)) + .СПараметрами(Новый Структура("Число, ОжидаемыйРезультат", 0, Истина)) + .СПараметрами(Новый Структура("Число, ОжидаемыйРезультат", -1, Ложь)) + .СПараметрами(Новый Структура("Число, ОжидаемыйРезультат", -2, Истина)) + .СПараметрами(Новый Структура("Число, ОжидаемыйРезультат", 100, Истина)) + .СПараметрами(Новый Структура("Число, ОжидаемыйРезультат", 99, Ложь)); +КонецПроцедуры +``` +#### Структура процедуры ИсполняемыеСценарии() +Процедура обычно содержит вызовы методов для добавления тестов. Основной метод — **ДобавитьТестовыйНабор()**, который создает группу тестов. В каждую группу затем добавляются конкретные тесты с помощью метода **ДобавитьТест()**. Эти тесты могут иметь параметры, задаваемые через метод **СПараметрами()**. + +#### Написание самого теста +Сам тест реализуется в отдельной процедуре, которая вызывается из **ИсполняемыеСценарии()** через **ДобавитьТест()**. В этой процедуре вы описываете логику тестирования. + +Пример процедуры теста: +```1C +Процедура ТестЧетноеЧисло(Параметры) Экспорт + // Вызов тестируемой функции + Результат = __ОбщегоНазначенияВспомогательныеФункции.ЧетноеЧисло(Параметры.Число); + + // Проверка результата + ЮТест.ОжидаетЧто(Результат).Равно(Параметры.ОжидаемыйРезультат); +КонецПроцедуры +``` + Теперь при запуске конфигурации в режиме 1С:Предприятие, в подсистеме YAxUnit должен отобразиться наш тест. + Запускаем тест и видим результат его работы. + +Полную и исчерпывающую информацию по работе с расширением можно найти в документации [YAXUnit](https://bia-technologies.github.io/yaxunit/). diff --git a/features/Проверка пометки на удаление.feature b/features/Проверка пометки на удаление.feature new file mode 100644 index 0000000..e2925a3 --- /dev/null +++ b/features/Проверка пометки на удаление.feature @@ -0,0 +1,29 @@ +#language: ru + +@tree + +Функционал: проверка установки пометки удаления + +Контекст: + Дано Я запускаю сценарий открытия TestClient или подключаю уже существующий + +Сценарий: Проверка установки пометки удаления для элементов справочника Тип соответствия объектов ИБ +* Создание элемента + И В командном интерфейсе я выбираю 'Соответствие объектов ИБ' 'Тип соответствия объектов ИБ' + Тогда открылось окно 'Тип соответствия объектов ИБ' + И я нажимаю на кнопку с именем 'ФормаСоздать' + Тогда открылось окно 'Тип соответствия объектов ИБ (создание)' + И в поле с именем 'Наименование' я ввожу текст 'ВА_Тест' + И я нажимаю на кнопку с именем 'ФормаЗаписатьИЗакрыть' +* Установка пометки + И в таблице 'Список' я выделяю все строки + И я выбираю пункт контекстного меню с именем 'СписокКонтекстноеМенюУстановитьПометкуУдаления' на элементе формы с именем "Список" + Тогда открылось окно '1С:Предприятие' + И я нажимаю на кнопку с именем 'Button0' +* Снятие пометки + Когда открылось окно 'Тип соответствия объектов ИБ' + И в таблице 'Список' я выделяю все строки + И я выбираю пункт контекстного меню с именем 'СписокКонтекстноеМенюУстановитьПометкуУдаления' на элементе формы с именем "Список" + Тогда открылось окно '1С:Предприятие' + И я нажимаю на кнопку с именем 'Button0' + \ No newline at end of file diff --git a/features/Создание элемента справочника.feature b/features/Создание элемента справочника.feature new file mode 100644 index 0000000..37eb3b4 --- /dev/null +++ b/features/Создание элемента справочника.feature @@ -0,0 +1,30 @@ +#language: ru + +@tree + +Функционал: ввод данных + +Контекст: + Дано Я запускаю сценарий открытия TestClient или подключаю уже существующий + +Сценарий: Создание элемента справочника Тип соответствия объектов ИБ +* Создание элемента + И В командном интерфейсе я выбираю 'Соответствие объектов ИБ' 'Тип соответствия объектов ИБ' + Тогда открылось окно 'Тип соответствия объектов ИБ' + И я нажимаю на кнопку с именем 'ФормаСоздать' + Тогда открылось окно 'Тип соответствия объектов ИБ (создание)' + И в поле с именем 'Наименование' я ввожу текст 'ВА - Тест' + И в поле с именем 'ИдентификаторНастройки' я ввожу текст 'ВА - Тест' + И я нажимаю на кнопку с именем 'ФормаЗаписатьИЗакрыть' + И я жду закрытия окна 'Тип соответствия объектов ИБ (создание) *' в течение 20 секунд +* Проверка создания + Когда открылось окно 'Тип соответствия объектов ИБ' + И я нажимаю на кнопку с именем 'ФормаНайти' + Тогда открылось окно 'Найти' + И я меняю значение переключателя с именем 'CompareType' на 'По точному совпадению' + И я нажимаю на кнопку с именем 'Find' + Тогда открылось окно 'Тип соответствия объектов ИБ' + И в таблице "Список" я выбираю текущую строку + Тогда открылось окно 'ВА - Тест (Тип соответствия объектов ИБ)' + И Я закрываю окно 'ВА - Тест (Тип соответствия объектов ИБ)' + \ No newline at end of file diff --git a/jobConfiguration.json b/jobConfiguration.json index 2010f91..e628070 100644 --- a/jobConfiguration.json +++ b/jobConfiguration.json @@ -1,35 +1,33 @@ { - "$schema": "https://raw.githubusercontent.com/firstBitMarksistskaya/jenkins-lib/feature-telegram/resources/schema.json", + "$schema": "https://raw.githubusercontent.com/firstBitMarksistskaya/jenkins-lib/develop/resources/schema.json", "stages": { "initSteps": true, "syntaxCheck": true, "smoke": true, - "sonarqube": true, - "telegram": true - }, - "timeout": { - "smoke": 300, - "bdd": 180, - "createInfoBase": 120, - "designerToEdtFormatTransformation": 120, - "edtToDesignerFormatTransformation": 120, - "edtValidate": 300, - "initInfoBase": 120, - "resultTransformation": 60, - "sonarqube": 150, - "syntaxCheck": 300, - "zipInfoBase": 120 + "yaxunit": true, + "telegram": true, + "bdd": true }, "sourceFormat": "designer", - "srcDir": "src", - "resultsTransform": { - "removeSupport": false - }, - "sonarqube": { - "waitForQualityGate": true - }, + "srcDir": "src/cf", "initInfobase": { - "initMethod": "fromSource" + "initMethod": "fromSource", + "extensions": [ + { + "name": "YAXUnit", + "initMethod": "fromSource", + "path": "src/cfe/YAXUnit", + "stages": ["yaxunit"] + } + ] + }, + "smoke": { + "publishToAllureReport": false, + "publishToJUnitReport": true + }, + "yaxunit": { + "publishToAllureReport": false, + "publishToJUnitReport": true }, "notifications": { "telegram": { diff --git a/sonar-project.properties b/sonar-project.properties index 38db2fa..b37c267 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -11,7 +11,7 @@ sonar.projectName=1C: Project SubSystems Library sonar.projectVersion=1.0 # относительный или абсолютный путь к каталогу с исходными кодом -sonar.sources=src +sonar.sources=src/cf # кодировка sonar.sourceEncoding=UTF-8 @@ -27,4 +27,4 @@ sonar.scm.exclusions.disabled=true # для Git sonar.scm.enabled=true -sonar.scm.provider=git +sonar.scm.provider=git \ No newline at end of file diff --git a/src/Catalogs/__ИнтегрируемыеСистемы.xml b/src/cf/Catalogs/__ИнтегрируемыеСистемы.xml similarity index 100% rename from src/Catalogs/__ИнтегрируемыеСистемы.xml rename to src/cf/Catalogs/__ИнтегрируемыеСистемы.xml diff --git a/src/Catalogs/__ИнтегрируемыеСистемы/Ext/ManagerModule.bsl b/src/cf/Catalogs/__ИнтегрируемыеСистемы/Ext/ManagerModule.bsl similarity index 100% rename from src/Catalogs/__ИнтегрируемыеСистемы/Ext/ManagerModule.bsl rename to src/cf/Catalogs/__ИнтегрируемыеСистемы/Ext/ManagerModule.bsl diff --git a/src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка.xml b/src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка.xml similarity index 100% rename from src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка.xml rename to src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка.xml diff --git a/src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form.xml b/src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента.xml b/src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента.xml similarity index 100% rename from src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента.xml rename to src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента.xml diff --git a/src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента/Ext/Form.xml b/src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента/Ext/Form.xml rename to src/cf/Catalogs/__ИнтегрируемыеСистемы/Forms/ФормаЭлемента/Ext/Form.xml diff --git a/src/Catalogs/__ИсторияИнтеграции.xml b/src/cf/Catalogs/__ИсторияИнтеграции.xml similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции.xml rename to src/cf/Catalogs/__ИсторияИнтеграции.xml diff --git a/src/Catalogs/__ИсторияИнтеграции/Ext/ManagerModule.bsl b/src/cf/Catalogs/__ИсторияИнтеграции/Ext/ManagerModule.bsl similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Ext/ManagerModule.bsl rename to src/cf/Catalogs/__ИсторияИнтеграции/Ext/ManagerModule.bsl diff --git a/src/Catalogs/__ИсторияИнтеграции/Ext/ObjectModule.bsl b/src/cf/Catalogs/__ИсторияИнтеграции/Ext/ObjectModule.bsl similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Ext/ObjectModule.bsl rename to src/cf/Catalogs/__ИсторияИнтеграции/Ext/ObjectModule.bsl diff --git a/src/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка.xml b/src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка.xml similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка.xml rename to src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка.xml diff --git a/src/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form.xml b/src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента.xml b/src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента.xml similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента.xml rename to src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента.xml diff --git a/src/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml b/src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml rename to src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml diff --git a/src/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl diff --git a/src/Catalogs/__МетодыИнтеграции.xml b/src/cf/Catalogs/__МетодыИнтеграции.xml similarity index 100% rename from src/Catalogs/__МетодыИнтеграции.xml rename to src/cf/Catalogs/__МетодыИнтеграции.xml diff --git a/src/Catalogs/__МетодыИнтеграции/Ext/ManagerModule.bsl b/src/cf/Catalogs/__МетодыИнтеграции/Ext/ManagerModule.bsl similarity index 100% rename from src/Catalogs/__МетодыИнтеграции/Ext/ManagerModule.bsl rename to src/cf/Catalogs/__МетодыИнтеграции/Ext/ManagerModule.bsl diff --git a/src/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка.xml b/src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка.xml similarity index 100% rename from src/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка.xml rename to src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка.xml diff --git a/src/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form.xml b/src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента.xml b/src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента.xml similarity index 100% rename from src/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента.xml rename to src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента.xml diff --git a/src/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml b/src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml similarity index 100% rename from src/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml rename to src/cf/Catalogs/__МетодыИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml diff --git a/src/Catalogs/__НастройкиИнтеграции.xml b/src/cf/Catalogs/__НастройкиИнтеграции.xml similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции.xml rename to src/cf/Catalogs/__НастройкиИнтеграции.xml diff --git a/src/Catalogs/__НастройкиИнтеграции/Ext/ManagerModule.bsl b/src/cf/Catalogs/__НастройкиИнтеграции/Ext/ManagerModule.bsl similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции/Ext/ManagerModule.bsl rename to src/cf/Catalogs/__НастройкиИнтеграции/Ext/ManagerModule.bsl diff --git a/src/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка.xml b/src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка.xml similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка.xml rename to src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка.xml diff --git a/src/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form.xml b/src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента.xml b/src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента.xml similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента.xml rename to src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента.xml diff --git a/src/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml b/src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml rename to src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml diff --git a/src/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl rename to src/cf/Catalogs/__НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl diff --git a/src/Catalogs/__НастройкиОтбораОбъектов.xml b/src/cf/Catalogs/__НастройкиОтбораОбъектов.xml similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов.xml rename to src/cf/Catalogs/__НастройкиОтбораОбъектов.xml diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Ext/ManagerModule.bsl b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Ext/ManagerModule.bsl similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Ext/ManagerModule.bsl rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Ext/ManagerModule.bsl diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных.xml b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных.xml similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных.xml rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных.xml diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form.xml b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form.xml similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form.xml rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form.xml diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Items/Дерево/RowsPicture.bmp b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Items/Дерево/RowsPicture.bmp similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Items/Дерево/RowsPicture.bmp rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Items/Дерево/RowsPicture.bmp diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Module.bsl b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Module.bsl rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаВыбораОбъектаМетаданных/Ext/Form/Module.bsl diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента.xml b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента.xml similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента.xml rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента.xml diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form.xml b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form.xml similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form.xml rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form.xml diff --git a/src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form/Module.bsl rename to src/cf/Catalogs/__НастройкиОтбораОбъектов/Forms/ФормаЭлемента/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции.xml b/src/cf/Catalogs/__ПользовательскиеФункции.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции.xml rename to src/cf/Catalogs/__ПользовательскиеФункции.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Ext/Help.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Ext/Help.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Ext/Help.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Ext/Help.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Ext/Help/ru.html b/src/cf/Catalogs/__ПользовательскиеФункции/Ext/Help/ru.html similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Ext/Help/ru.html rename to src/cf/Catalogs/__ПользовательскиеФункции/Ext/Help/ru.html diff --git a/src/Catalogs/__ПользовательскиеФункции/Ext/ManagerModule.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Ext/ManagerModule.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Ext/ManagerModule.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Ext/ManagerModule.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Ext/ObjectModule.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Ext/ObjectModule.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Ext/ObjectModule.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Ext/ObjectModule.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/УсловныйОператор/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаВыбора/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаГруппы/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаМассива/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаСтруктуры/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаТаблицыЗначений/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ПользовательскиеФункции/Forms/ФормаЭлемента/Ext/Form/Module.bsl diff --git a/src/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию.xml b/src/cf/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию.xml similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию.xml rename to src/cf/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию.xml diff --git a/src/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию/Ext/Template.txt b/src/cf/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию/Ext/Template.txt similarity index 100% rename from src/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию/Ext/Template.txt rename to src/cf/Catalogs/__ПользовательскиеФункции/Templates/НастройкиПоУмолчанию/Ext/Template.txt diff --git a/src/Catalogs/__ТипСоответствияОбъектовИБ.xml b/src/cf/Catalogs/__ТипСоответствияОбъектовИБ.xml similarity index 100% rename from src/Catalogs/__ТипСоответствияОбъектовИБ.xml rename to src/cf/Catalogs/__ТипСоответствияОбъектовИБ.xml diff --git a/src/Catalogs/__ТипСоответствияОбъектовИБ/Ext/ManagerModule.bsl b/src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Ext/ManagerModule.bsl similarity index 100% rename from src/Catalogs/__ТипСоответствияОбъектовИБ/Ext/ManagerModule.bsl rename to src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Ext/ManagerModule.bsl diff --git a/src/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка.xml b/src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка.xml similarity index 100% rename from src/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка.xml rename to src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка.xml diff --git a/src/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml b/src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/Catalogs/__ТипСоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения.xml b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения.xml similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения.xml rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения.xml diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ManagerModule.bsl b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ManagerModule.bsl similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ManagerModule.bsl rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ManagerModule.bsl diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ObjectModule.bsl b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ObjectModule.bsl similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ObjectModule.bsl rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Ext/ObjectModule.bsl diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы.xml b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы.xml similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы.xml rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы.xml diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form.xml b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form.xml similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form.xml rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form.xml diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form/Module.bsl b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form/Module.bsl similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form/Module.bsl rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаГруппы/Ext/Form/Module.bsl diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка.xml b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка.xml similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка.xml rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка.xml diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form.xml b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента.xml b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента.xml similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента.xml rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента.xml diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form.xml b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form.xml similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form.xml rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form.xml diff --git a/src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form/Module.bsl similarity index 100% rename from src/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form/Module.bsl rename to src/cf/ChartsOfCharacteristicTypes/__ПредопределенныеЗначения/Forms/ФормаЭлемента/Ext/Form/Module.bsl diff --git a/src/CommonForms/__ФормаВыбораПоля.xml b/src/cf/CommonForms/__ФормаВыбораПоля.xml similarity index 100% rename from src/CommonForms/__ФормаВыбораПоля.xml rename to src/cf/CommonForms/__ФормаВыбораПоля.xml diff --git a/src/CommonForms/__ФормаВыбораПоля/Ext/Form.xml b/src/cf/CommonForms/__ФормаВыбораПоля/Ext/Form.xml similarity index 100% rename from src/CommonForms/__ФормаВыбораПоля/Ext/Form.xml rename to src/cf/CommonForms/__ФормаВыбораПоля/Ext/Form.xml diff --git a/src/CommonForms/__ФормаВыбораПоля/Ext/Form/Module.bsl b/src/cf/CommonForms/__ФормаВыбораПоля/Ext/Form/Module.bsl similarity index 100% rename from src/CommonForms/__ФормаВыбораПоля/Ext/Form/Module.bsl rename to src/cf/CommonForms/__ФормаВыбораПоля/Ext/Form/Module.bsl diff --git a/src/CommonForms/__ФормаВыбораПоля/Ext/Help.xml b/src/cf/CommonForms/__ФормаВыбораПоля/Ext/Help.xml similarity index 100% rename from src/CommonForms/__ФормаВыбораПоля/Ext/Help.xml rename to src/cf/CommonForms/__ФормаВыбораПоля/Ext/Help.xml diff --git a/src/CommonForms/__ФормаВыбораПоля/Ext/Help/ru.html b/src/cf/CommonForms/__ФормаВыбораПоля/Ext/Help/ru.html similarity index 100% rename from src/CommonForms/__ФормаВыбораПоля/Ext/Help/ru.html rename to src/cf/CommonForms/__ФормаВыбораПоля/Ext/Help/ru.html diff --git a/src/CommonModules/__ДокументыОбработкаЗаполнения.xml b/src/cf/CommonModules/__ДокументыОбработкаЗаполнения.xml similarity index 100% rename from src/CommonModules/__ДокументыОбработкаЗаполнения.xml rename to src/cf/CommonModules/__ДокументыОбработкаЗаполнения.xml diff --git a/src/CommonModules/__ДокументыОбработкаЗаполнения/Ext/Module.bsl b/src/cf/CommonModules/__ДокументыОбработкаЗаполнения/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ДокументыОбработкаЗаполнения/Ext/Module.bsl rename to src/cf/CommonModules/__ДокументыОбработкаЗаполнения/Ext/Module.bsl diff --git a/src/CommonModules/__ДокументыОбработкаПроведения.xml b/src/cf/CommonModules/__ДокументыОбработкаПроведения.xml similarity index 100% rename from src/CommonModules/__ДокументыОбработкаПроведения.xml rename to src/cf/CommonModules/__ДокументыОбработкаПроведения.xml diff --git a/src/CommonModules/__ДокументыОбработкаПроведения/Ext/Module.bsl b/src/cf/CommonModules/__ДокументыОбработкаПроведения/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ДокументыОбработкаПроведения/Ext/Module.bsl rename to src/cf/CommonModules/__ДокументыОбработкаПроведения/Ext/Module.bsl diff --git a/src/CommonModules/__ДокументыПередЗаписью.xml b/src/cf/CommonModules/__ДокументыПередЗаписью.xml similarity index 100% rename from src/CommonModules/__ДокументыПередЗаписью.xml rename to src/cf/CommonModules/__ДокументыПередЗаписью.xml diff --git a/src/CommonModules/__ДокументыПередЗаписью/Ext/Module.bsl b/src/cf/CommonModules/__ДокументыПередЗаписью/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ДокументыПередЗаписью/Ext/Module.bsl rename to src/cf/CommonModules/__ДокументыПередЗаписью/Ext/Module.bsl diff --git a/src/CommonModules/__ДокументыПриЗаписи.xml b/src/cf/CommonModules/__ДокументыПриЗаписи.xml similarity index 100% rename from src/CommonModules/__ДокументыПриЗаписи.xml rename to src/cf/CommonModules/__ДокументыПриЗаписи.xml diff --git a/src/CommonModules/__ДокументыПриЗаписи/Ext/Module.bsl b/src/cf/CommonModules/__ДокументыПриЗаписи/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ДокументыПриЗаписи/Ext/Module.bsl rename to src/cf/CommonModules/__ДокументыПриЗаписи/Ext/Module.bsl diff --git a/src/CommonModules/__ДокументыПриКопировании.xml b/src/cf/CommonModules/__ДокументыПриКопировании.xml similarity index 100% rename from src/CommonModules/__ДокументыПриКопировании.xml rename to src/cf/CommonModules/__ДокументыПриКопировании.xml diff --git a/src/CommonModules/__ДокументыПриКопировании/Ext/Module.bsl b/src/cf/CommonModules/__ДокументыПриКопировании/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ДокументыПриКопировании/Ext/Module.bsl rename to src/cf/CommonModules/__ДокументыПриКопировании/Ext/Module.bsl diff --git a/src/CommonModules/__ЖурналРегистрации.xml b/src/cf/CommonModules/__ЖурналРегистрации.xml similarity index 100% rename from src/CommonModules/__ЖурналРегистрации.xml rename to src/cf/CommonModules/__ЖурналРегистрации.xml diff --git a/src/CommonModules/__ЖурналРегистрации/Ext/Module.bsl b/src/cf/CommonModules/__ЖурналРегистрации/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ЖурналРегистрации/Ext/Module.bsl rename to src/cf/CommonModules/__ЖурналРегистрации/Ext/Module.bsl diff --git a/src/CommonModules/__ЖурналРегистрацииСлужебный.xml b/src/cf/CommonModules/__ЖурналРегистрацииСлужебный.xml similarity index 100% rename from src/CommonModules/__ЖурналРегистрацииСлужебный.xml rename to src/cf/CommonModules/__ЖурналРегистрацииСлужебный.xml diff --git a/src/CommonModules/__ЖурналРегистрацииСлужебный/Ext/Module.bsl b/src/cf/CommonModules/__ЖурналРегистрацииСлужебный/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ЖурналРегистрацииСлужебный/Ext/Module.bsl rename to src/cf/CommonModules/__ЖурналРегистрацииСлужебный/Ext/Module.bsl diff --git a/src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.xml b/src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.xml similarity index 100% rename from src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.xml rename to src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.xml diff --git a/src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl b/src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl rename to src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl diff --git a/src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент.xml b/src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент.xml similarity index 100% rename from src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент.xml rename to src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент.xml diff --git a/src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl b/src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl rename to src/cf/CommonModules/__ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl diff --git a/src/CommonModules/__ИнтеграцииПереопределяемый.xml b/src/cf/CommonModules/__ИнтеграцииПереопределяемый.xml similarity index 100% rename from src/CommonModules/__ИнтеграцииПереопределяемый.xml rename to src/cf/CommonModules/__ИнтеграцииПереопределяемый.xml diff --git a/src/CommonModules/__ИнтеграцииПереопределяемый/Ext/Module.bsl b/src/cf/CommonModules/__ИнтеграцииПереопределяемый/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ИнтеграцииПереопределяемый/Ext/Module.bsl rename to src/cf/CommonModules/__ИнтеграцииПереопределяемый/Ext/Module.bsl diff --git a/src/CommonModules/__ИнтеграцииСервер.xml b/src/cf/CommonModules/__ИнтеграцииСервер.xml similarity index 100% rename from src/CommonModules/__ИнтеграцииСервер.xml rename to src/cf/CommonModules/__ИнтеграцииСервер.xml diff --git a/src/CommonModules/__ИнтеграцииСервер/Ext/Module.bsl b/src/cf/CommonModules/__ИнтеграцииСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ИнтеграцииСервер/Ext/Module.bsl rename to src/cf/CommonModules/__ИнтеграцииСервер/Ext/Module.bsl diff --git a/src/CommonModules/__КоннекторHTTP.xml b/src/cf/CommonModules/__КоннекторHTTP.xml similarity index 100% rename from src/CommonModules/__КоннекторHTTP.xml rename to src/cf/CommonModules/__КоннекторHTTP.xml diff --git a/src/CommonModules/__КоннекторHTTP/Ext/Module.bsl b/src/cf/CommonModules/__КоннекторHTTP/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__КоннекторHTTP/Ext/Module.bsl rename to src/cf/CommonModules/__КоннекторHTTP/Ext/Module.bsl diff --git a/src/CommonModules/__МетодыРегламентныхЗаданийСервер.xml b/src/cf/CommonModules/__МетодыРегламентныхЗаданийСервер.xml similarity index 100% rename from src/CommonModules/__МетодыРегламентныхЗаданийСервер.xml rename to src/cf/CommonModules/__МетодыРегламентныхЗаданийСервер.xml diff --git a/src/CommonModules/__МетодыРегламентныхЗаданийСервер/Ext/Module.bsl b/src/cf/CommonModules/__МетодыРегламентныхЗаданийСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__МетодыРегламентныхЗаданийСервер/Ext/Module.bsl rename to src/cf/CommonModules/__МетодыРегламентныхЗаданийСервер/Ext/Module.bsl diff --git a/src/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый.xml b/src/cf/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый.xml similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый.xml rename to src/cf/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый.xml diff --git a/src/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый/Ext/Module.bsl b/src/cf/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый/Ext/Module.bsl rename to src/cf/CommonModules/__МодификацияКонфигурацииКлиентПереопределяемый/Ext/Module.bsl diff --git a/src/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый.xml b/src/cf/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый.xml similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый.xml rename to src/cf/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый.xml diff --git a/src/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый/Ext/Module.bsl b/src/cf/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый/Ext/Module.bsl rename to src/cf/CommonModules/__МодификацияКонфигурацииКлиентСерверПереопределяемый/Ext/Module.bsl diff --git a/src/CommonModules/__МодификацияКонфигурацииПереопределяемый.xml b/src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемый.xml similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииПереопределяемый.xml rename to src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемый.xml diff --git a/src/CommonModules/__МодификацияКонфигурацииПереопределяемый/Ext/Module.bsl b/src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемый/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииПереопределяемый/Ext/Module.bsl rename to src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемый/Ext/Module.bsl diff --git a/src/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент.xml b/src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент.xml similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент.xml rename to src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент.xml diff --git a/src/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент/Ext/Module.bsl b/src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент/Ext/Module.bsl rename to src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйДокумент/Ext/Module.bsl diff --git a/src/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик.xml b/src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик.xml similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик.xml rename to src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик.xml diff --git a/src/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик/Ext/Module.bsl b/src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик/Ext/Module.bsl rename to src/cf/CommonModules/__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик/Ext/Module.bsl diff --git a/src/CommonModules/__ОбновлениеИнформационнойБазыПБП.xml b/src/cf/CommonModules/__ОбновлениеИнформационнойБазыПБП.xml similarity index 100% rename from src/CommonModules/__ОбновлениеИнформационнойБазыПБП.xml rename to src/cf/CommonModules/__ОбновлениеИнформационнойБазыПБП.xml diff --git a/src/CommonModules/__ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl b/src/cf/CommonModules/__ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl rename to src/cf/CommonModules/__ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияВызовСервера.xml b/src/cf/CommonModules/__ОбщегоНазначенияВызовСервера.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияВызовСервера.xml rename to src/cf/CommonModules/__ОбщегоНазначенияВызовСервера.xml diff --git a/src/CommonModules/__ОбщегоНазначенияВызовСервера/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияВызовСервера/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияВызовСервера/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияВызовСервера/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияКлиент.xml b/src/cf/CommonModules/__ОбщегоНазначенияКлиент.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияКлиент.xml rename to src/cf/CommonModules/__ОбщегоНазначенияКлиент.xml diff --git a/src/CommonModules/__ОбщегоНазначенияКлиент/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияКлиент/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияКлиент/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияКлиент/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияКлиентСервер.xml b/src/cf/CommonModules/__ОбщегоНазначенияКлиентСервер.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияКлиентСервер.xml rename to src/cf/CommonModules/__ОбщегоНазначенияКлиентСервер.xml diff --git a/src/CommonModules/__ОбщегоНазначенияКлиентСервер/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияКлиентСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияКлиентСервер/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияКлиентСервер/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияПовтИсп.xml b/src/cf/CommonModules/__ОбщегоНазначенияПовтИсп.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияПовтИсп.xml rename to src/cf/CommonModules/__ОбщегоНазначенияПовтИсп.xml diff --git a/src/CommonModules/__ОбщегоНазначенияПовтИсп/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияПовтИсп/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияПовтИсп/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияПовтИсп/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияПолныеПрава.xml b/src/cf/CommonModules/__ОбщегоНазначенияПолныеПрава.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияПолныеПрава.xml rename to src/cf/CommonModules/__ОбщегоНазначенияПолныеПрава.xml diff --git a/src/CommonModules/__ОбщегоНазначенияПолныеПрава/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияПолныеПрава/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияПолныеПрава/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияПолныеПрава/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияСервер.xml b/src/cf/CommonModules/__ОбщегоНазначенияСервер.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСервер.xml rename to src/cf/CommonModules/__ОбщегоНазначенияСервер.xml diff --git a/src/CommonModules/__ОбщегоНазначенияСервер/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСервер/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияСервер/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияСлужебный.xml b/src/cf/CommonModules/__ОбщегоНазначенияСлужебный.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСлужебный.xml rename to src/cf/CommonModules/__ОбщегоНазначенияСлужебный.xml diff --git a/src/CommonModules/__ОбщегоНазначенияСлужебный/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияСлужебный/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСлужебный/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияСлужебный/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияСлужебныйКлиент.xml b/src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиент.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСлужебныйКлиент.xml rename to src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиент.xml diff --git a/src/CommonModules/__ОбщегоНазначенияСлужебныйКлиент/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиент/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСлужебныйКлиент/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиент/Ext/Module.bsl diff --git a/src/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер.xml b/src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер.xml similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер.xml rename to src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер.xml diff --git a/src/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl b/src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl rename to src/cf/CommonModules/__ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl diff --git a/src/CommonModules/__ПолучениеФайловИзИнтернета.xml b/src/cf/CommonModules/__ПолучениеФайловИзИнтернета.xml similarity index 100% rename from src/CommonModules/__ПолучениеФайловИзИнтернета.xml rename to src/cf/CommonModules/__ПолучениеФайловИзИнтернета.xml diff --git a/src/CommonModules/__ПолучениеФайловИзИнтернета/Ext/Module.bsl b/src/cf/CommonModules/__ПолучениеФайловИзИнтернета/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ПолучениеФайловИзИнтернета/Ext/Module.bsl rename to src/cf/CommonModules/__ПолучениеФайловИзИнтернета/Ext/Module.bsl diff --git a/src/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный.xml b/src/cf/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный.xml similarity index 100% rename from src/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный.xml rename to src/cf/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный.xml diff --git a/src/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный/Ext/Module.bsl b/src/cf/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный/Ext/Module.bsl rename to src/cf/CommonModules/__ПолучениеФайловИзИнтернетаСлужебный/Ext/Module.bsl diff --git a/src/CommonModules/__Пользователи.xml b/src/cf/CommonModules/__Пользователи.xml similarity index 100% rename from src/CommonModules/__Пользователи.xml rename to src/cf/CommonModules/__Пользователи.xml diff --git a/src/CommonModules/__Пользователи/Ext/Module.bsl b/src/cf/CommonModules/__Пользователи/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__Пользователи/Ext/Module.bsl rename to src/cf/CommonModules/__Пользователи/Ext/Module.bsl diff --git a/src/CommonModules/__ПользователиКлиентСервер.xml b/src/cf/CommonModules/__ПользователиКлиентСервер.xml similarity index 100% rename from src/CommonModules/__ПользователиКлиентСервер.xml rename to src/cf/CommonModules/__ПользователиКлиентСервер.xml diff --git a/src/CommonModules/__ПользователиКлиентСервер/Ext/Module.bsl b/src/cf/CommonModules/__ПользователиКлиентСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ПользователиКлиентСервер/Ext/Module.bsl rename to src/cf/CommonModules/__ПользователиКлиентСервер/Ext/Module.bsl diff --git a/src/CommonModules/__ПользователиСлужебный.xml b/src/cf/CommonModules/__ПользователиСлужебный.xml similarity index 100% rename from src/CommonModules/__ПользователиСлужебный.xml rename to src/cf/CommonModules/__ПользователиСлужебный.xml diff --git a/src/CommonModules/__ПользователиСлужебный/Ext/Module.bsl b/src/cf/CommonModules/__ПользователиСлужебный/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ПользователиСлужебный/Ext/Module.bsl rename to src/cf/CommonModules/__ПользователиСлужебный/Ext/Module.bsl diff --git a/src/CommonModules/__ПредопределенныеЗначения.xml b/src/cf/CommonModules/__ПредопределенныеЗначения.xml similarity index 100% rename from src/CommonModules/__ПредопределенныеЗначения.xml rename to src/cf/CommonModules/__ПредопределенныеЗначения.xml diff --git a/src/CommonModules/__ПредопределенныеЗначения/Ext/Module.bsl b/src/cf/CommonModules/__ПредопределенныеЗначения/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ПредопределенныеЗначения/Ext/Module.bsl rename to src/cf/CommonModules/__ПредопределенныеЗначения/Ext/Module.bsl diff --git a/src/CommonModules/__ПредопределенныеЗначенияПереопределяемый.xml b/src/cf/CommonModules/__ПредопределенныеЗначенияПереопределяемый.xml similarity index 100% rename from src/CommonModules/__ПредопределенныеЗначенияПереопределяемый.xml rename to src/cf/CommonModules/__ПредопределенныеЗначенияПереопределяемый.xml diff --git a/src/CommonModules/__ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl b/src/cf/CommonModules/__ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl rename to src/cf/CommonModules/__ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl diff --git a/src/CommonModules/__РаботаСДиалогамиКлиент.xml b/src/cf/CommonModules/__РаботаСДиалогамиКлиент.xml similarity index 100% rename from src/CommonModules/__РаботаСДиалогамиКлиент.xml rename to src/cf/CommonModules/__РаботаСДиалогамиКлиент.xml diff --git a/src/CommonModules/__РаботаСДиалогамиКлиент/Ext/Module.bsl b/src/cf/CommonModules/__РаботаСДиалогамиКлиент/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__РаботаСДиалогамиКлиент/Ext/Module.bsl rename to src/cf/CommonModules/__РаботаСДиалогамиКлиент/Ext/Module.bsl diff --git a/src/CommonModules/__РаботаСДиалогамиСервер.xml b/src/cf/CommonModules/__РаботаСДиалогамиСервер.xml similarity index 100% rename from src/CommonModules/__РаботаСДиалогамиСервер.xml rename to src/cf/CommonModules/__РаботаСДиалогамиСервер.xml diff --git a/src/CommonModules/__РаботаСДиалогамиСервер/Ext/Module.bsl b/src/cf/CommonModules/__РаботаСДиалогамиСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__РаботаСДиалогамиСервер/Ext/Module.bsl rename to src/cf/CommonModules/__РаботаСДиалогамиСервер/Ext/Module.bsl diff --git a/src/CommonModules/__РаботаСКоллекциямиКлиентСервер.xml b/src/cf/CommonModules/__РаботаСКоллекциямиКлиентСервер.xml similarity index 100% rename from src/CommonModules/__РаботаСКоллекциямиКлиентСервер.xml rename to src/cf/CommonModules/__РаботаСКоллекциямиКлиентСервер.xml diff --git a/src/CommonModules/__РаботаСКоллекциямиКлиентСервер/Ext/Module.bsl b/src/cf/CommonModules/__РаботаСКоллекциямиКлиентСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__РаботаСКоллекциямиКлиентСервер/Ext/Module.bsl rename to src/cf/CommonModules/__РаботаСКоллекциямиКлиентСервер/Ext/Module.bsl diff --git a/src/CommonModules/__РаботаСФормами.xml b/src/cf/CommonModules/__РаботаСФормами.xml similarity index 100% rename from src/CommonModules/__РаботаСФормами.xml rename to src/cf/CommonModules/__РаботаСФормами.xml diff --git a/src/CommonModules/__РаботаСФормами/Ext/Module.bsl b/src/cf/CommonModules/__РаботаСФормами/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__РаботаСФормами/Ext/Module.bsl rename to src/cf/CommonModules/__РаботаСФормами/Ext/Module.bsl diff --git a/src/CommonModules/__РегламентныеЗаданияСервер.xml b/src/cf/CommonModules/__РегламентныеЗаданияСервер.xml similarity index 100% rename from src/CommonModules/__РегламентныеЗаданияСервер.xml rename to src/cf/CommonModules/__РегламентныеЗаданияСервер.xml diff --git a/src/CommonModules/__РегламентныеЗаданияСервер/Ext/Module.bsl b/src/cf/CommonModules/__РегламентныеЗаданияСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__РегламентныеЗаданияСервер/Ext/Module.bsl rename to src/cf/CommonModules/__РегламентныеЗаданияСервер/Ext/Module.bsl diff --git a/src/CommonModules/__РегламентныеЗаданияСлужебныйСервер.xml b/src/cf/CommonModules/__РегламентныеЗаданияСлужебныйСервер.xml similarity index 100% rename from src/CommonModules/__РегламентныеЗаданияСлужебныйСервер.xml rename to src/cf/CommonModules/__РегламентныеЗаданияСлужебныйСервер.xml diff --git a/src/CommonModules/__РегламентныеЗаданияСлужебныйСервер/Ext/Module.bsl b/src/cf/CommonModules/__РегламентныеЗаданияСлужебныйСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__РегламентныеЗаданияСлужебныйСервер/Ext/Module.bsl rename to src/cf/CommonModules/__РегламентныеЗаданияСлужебныйСервер/Ext/Module.bsl diff --git a/src/CommonModules/__СправочникиОбработкаЗаполнения.xml b/src/cf/CommonModules/__СправочникиОбработкаЗаполнения.xml similarity index 100% rename from src/CommonModules/__СправочникиОбработкаЗаполнения.xml rename to src/cf/CommonModules/__СправочникиОбработкаЗаполнения.xml diff --git a/src/CommonModules/__СправочникиОбработкаЗаполнения/Ext/Module.bsl b/src/cf/CommonModules/__СправочникиОбработкаЗаполнения/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СправочникиОбработкаЗаполнения/Ext/Module.bsl rename to src/cf/CommonModules/__СправочникиОбработкаЗаполнения/Ext/Module.bsl diff --git a/src/CommonModules/__СправочникиПередЗаписью.xml b/src/cf/CommonModules/__СправочникиПередЗаписью.xml similarity index 100% rename from src/CommonModules/__СправочникиПередЗаписью.xml rename to src/cf/CommonModules/__СправочникиПередЗаписью.xml diff --git a/src/CommonModules/__СправочникиПередЗаписью/Ext/Module.bsl b/src/cf/CommonModules/__СправочникиПередЗаписью/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СправочникиПередЗаписью/Ext/Module.bsl rename to src/cf/CommonModules/__СправочникиПередЗаписью/Ext/Module.bsl diff --git a/src/CommonModules/__СправочникиПриЗаписи.xml b/src/cf/CommonModules/__СправочникиПриЗаписи.xml similarity index 100% rename from src/CommonModules/__СправочникиПриЗаписи.xml rename to src/cf/CommonModules/__СправочникиПриЗаписи.xml diff --git a/src/CommonModules/__СправочникиПриЗаписи/Ext/Module.bsl b/src/cf/CommonModules/__СправочникиПриЗаписи/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СправочникиПриЗаписи/Ext/Module.bsl rename to src/cf/CommonModules/__СправочникиПриЗаписи/Ext/Module.bsl diff --git a/src/CommonModules/__СправочникиПриКопировании.xml b/src/cf/CommonModules/__СправочникиПриКопировании.xml similarity index 100% rename from src/CommonModules/__СправочникиПриКопировании.xml rename to src/cf/CommonModules/__СправочникиПриКопировании.xml diff --git a/src/CommonModules/__СправочникиПриКопировании/Ext/Module.bsl b/src/cf/CommonModules/__СправочникиПриКопировании/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СправочникиПриКопировании/Ext/Module.bsl rename to src/cf/CommonModules/__СправочникиПриКопировании/Ext/Module.bsl diff --git a/src/CommonModules/__СтандартныеПодсистемыПовтИсп.xml b/src/cf/CommonModules/__СтандартныеПодсистемыПовтИсп.xml similarity index 100% rename from src/CommonModules/__СтандартныеПодсистемыПовтИсп.xml rename to src/cf/CommonModules/__СтандартныеПодсистемыПовтИсп.xml diff --git a/src/CommonModules/__СтандартныеПодсистемыПовтИсп/Ext/Module.bsl b/src/cf/CommonModules/__СтандартныеПодсистемыПовтИсп/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СтандартныеПодсистемыПовтИсп/Ext/Module.bsl rename to src/cf/CommonModules/__СтандартныеПодсистемыПовтИсп/Ext/Module.bsl diff --git a/src/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп.xml b/src/cf/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп.xml similarity index 100% rename from src/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп.xml rename to src/cf/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп.xml diff --git a/src/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl b/src/cf/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl rename to src/cf/CommonModules/__СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl diff --git a/src/CommonModules/__СтроковыеФункцииКлиентСервер.xml b/src/cf/CommonModules/__СтроковыеФункцииКлиентСервер.xml similarity index 100% rename from src/CommonModules/__СтроковыеФункцииКлиентСервер.xml rename to src/cf/CommonModules/__СтроковыеФункцииКлиентСервер.xml diff --git a/src/CommonModules/__СтроковыеФункцииКлиентСервер/Ext/Module.bsl b/src/cf/CommonModules/__СтроковыеФункцииКлиентСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СтроковыеФункцииКлиентСервер/Ext/Module.bsl rename to src/cf/CommonModules/__СтроковыеФункцииКлиентСервер/Ext/Module.bsl diff --git a/src/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер.xml b/src/cf/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер.xml similarity index 100% rename from src/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер.xml rename to src/cf/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер.xml diff --git a/src/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер/Ext/Module.bsl b/src/cf/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер/Ext/Module.bsl rename to src/cf/CommonModules/__СтроковыеФункцииСлужебныйКлиентСервер/Ext/Module.bsl diff --git a/src/CommonModules/__СхемыЗапросов.xml b/src/cf/CommonModules/__СхемыЗапросов.xml similarity index 100% rename from src/CommonModules/__СхемыЗапросов.xml rename to src/cf/CommonModules/__СхемыЗапросов.xml diff --git a/src/CommonModules/__СхемыЗапросов/Ext/Module.bsl b/src/cf/CommonModules/__СхемыЗапросов/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__СхемыЗапросов/Ext/Module.bsl rename to src/cf/CommonModules/__СхемыЗапросов/Ext/Module.bsl diff --git a/src/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый.xml b/src/cf/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый.xml similarity index 100% rename from src/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый.xml rename to src/cf/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый.xml diff --git a/src/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый/Ext/Module.bsl b/src/cf/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый/Ext/Module.bsl similarity index 100% rename from src/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый/Ext/Module.bsl rename to src/cf/CommonModules/__ТипСоответствияОбъектовИБПереопределяемый/Ext/Module.bsl diff --git a/src/CommonPictures/__ПодсистемаУправлениеИнтеграциями.xml b/src/cf/CommonPictures/__ПодсистемаУправлениеИнтеграциями.xml similarity index 100% rename from src/CommonPictures/__ПодсистемаУправлениеИнтеграциями.xml rename to src/cf/CommonPictures/__ПодсистемаУправлениеИнтеграциями.xml diff --git a/src/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture.xml b/src/cf/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture.xml similarity index 100% rename from src/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture.xml rename to src/cf/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture.xml diff --git a/src/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture/Picture.png b/src/cf/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture/Picture.png similarity index 100% rename from src/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture/Picture.png rename to src/cf/CommonPictures/__ПодсистемаУправлениеИнтеграциями/Ext/Picture/Picture.png diff --git a/src/CommonPictures/__Реквизит.xml b/src/cf/CommonPictures/__Реквизит.xml similarity index 100% rename from src/CommonPictures/__Реквизит.xml rename to src/cf/CommonPictures/__Реквизит.xml diff --git a/src/CommonPictures/__Реквизит/Ext/Picture.xml b/src/cf/CommonPictures/__Реквизит/Ext/Picture.xml similarity index 100% rename from src/CommonPictures/__Реквизит/Ext/Picture.xml rename to src/cf/CommonPictures/__Реквизит/Ext/Picture.xml diff --git a/src/CommonPictures/__Реквизит/Ext/Picture/Picture.bmp b/src/cf/CommonPictures/__Реквизит/Ext/Picture/Picture.bmp similarity index 100% rename from src/CommonPictures/__Реквизит/Ext/Picture/Picture.bmp rename to src/cf/CommonPictures/__Реквизит/Ext/Picture/Picture.bmp diff --git a/src/CommonPictures/__Реквизиты.xml b/src/cf/CommonPictures/__Реквизиты.xml similarity index 100% rename from src/CommonPictures/__Реквизиты.xml rename to src/cf/CommonPictures/__Реквизиты.xml diff --git a/src/CommonPictures/__Реквизиты/Ext/Picture.xml b/src/cf/CommonPictures/__Реквизиты/Ext/Picture.xml similarity index 100% rename from src/CommonPictures/__Реквизиты/Ext/Picture.xml rename to src/cf/CommonPictures/__Реквизиты/Ext/Picture.xml diff --git a/src/CommonPictures/__Реквизиты/Ext/Picture/Picture.bmp b/src/cf/CommonPictures/__Реквизиты/Ext/Picture/Picture.bmp similarity index 100% rename from src/CommonPictures/__Реквизиты/Ext/Picture/Picture.bmp rename to src/cf/CommonPictures/__Реквизиты/Ext/Picture/Picture.bmp diff --git a/src/CommonTemplates/__BSLEditor.xml b/src/cf/CommonTemplates/__BSLEditor.xml similarity index 100% rename from src/CommonTemplates/__BSLEditor.xml rename to src/cf/CommonTemplates/__BSLEditor.xml diff --git a/src/CommonTemplates/__BSLEditor/Ext/Template.bin b/src/cf/CommonTemplates/__BSLEditor/Ext/Template.bin similarity index 100% rename from src/CommonTemplates/__BSLEditor/Ext/Template.bin rename to src/cf/CommonTemplates/__BSLEditor/Ext/Template.bin diff --git a/src/CommonTemplates/__JSONEditor.xml b/src/cf/CommonTemplates/__JSONEditor.xml similarity index 100% rename from src/CommonTemplates/__JSONEditor.xml rename to src/cf/CommonTemplates/__JSONEditor.xml diff --git a/src/CommonTemplates/__JSONEditor/Ext/Template.bin b/src/cf/CommonTemplates/__JSONEditor/Ext/Template.bin similarity index 100% rename from src/CommonTemplates/__JSONEditor/Ext/Template.bin rename to src/cf/CommonTemplates/__JSONEditor/Ext/Template.bin diff --git a/src/CommonTemplates/__XMLEditor.xml b/src/cf/CommonTemplates/__XMLEditor.xml similarity index 100% rename from src/CommonTemplates/__XMLEditor.xml rename to src/cf/CommonTemplates/__XMLEditor.xml diff --git a/src/CommonTemplates/__XMLEditor/Ext/Template.bin b/src/cf/CommonTemplates/__XMLEditor/Ext/Template.bin similarity index 100% rename from src/CommonTemplates/__XMLEditor/Ext/Template.bin rename to src/cf/CommonTemplates/__XMLEditor/Ext/Template.bin diff --git a/src/Configuration.xml b/src/cf/Configuration.xml similarity index 100% rename from src/Configuration.xml rename to src/cf/Configuration.xml diff --git a/src/DefinedTypes/ТипыОбъектовСоответствийИБ.xml b/src/cf/DefinedTypes/ТипыОбъектовСоответствийИБ.xml similarity index 100% rename from src/DefinedTypes/ТипыОбъектовСоответствийИБ.xml rename to src/cf/DefinedTypes/ТипыОбъектовСоответствийИБ.xml diff --git a/src/Documents/ДемоРаботаСФормами.xml b/src/cf/Documents/ДемоРаботаСФормами.xml similarity index 100% rename from src/Documents/ДемоРаботаСФормами.xml rename to src/cf/Documents/ДемоРаботаСФормами.xml diff --git a/src/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента.xml b/src/cf/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента.xml similarity index 100% rename from src/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента.xml rename to src/cf/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента.xml diff --git a/src/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form.xml b/src/cf/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form.xml similarity index 100% rename from src/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form.xml rename to src/cf/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form.xml diff --git a/src/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form/Module.bsl b/src/cf/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form/Module.bsl similarity index 100% rename from src/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form/Module.bsl rename to src/cf/Documents/ДемоРаботаСФормами/Forms/ФормаДокумента/Ext/Form/Module.bsl diff --git a/src/Enums/__КонтекстыВыполненияПользовательскихФункций.xml b/src/cf/Enums/__КонтекстыВыполненияПользовательскихФункций.xml similarity index 100% rename from src/Enums/__КонтекстыВыполненияПользовательскихФункций.xml rename to src/cf/Enums/__КонтекстыВыполненияПользовательскихФункций.xml diff --git a/src/Enums/__СозданОбновлен.xml b/src/cf/Enums/__СозданОбновлен.xml similarity index 100% rename from src/Enums/__СозданОбновлен.xml rename to src/cf/Enums/__СозданОбновлен.xml diff --git a/src/Enums/__СтатусыИнтеграции.xml b/src/cf/Enums/__СтатусыИнтеграции.xml similarity index 100% rename from src/Enums/__СтатусыИнтеграции.xml rename to src/cf/Enums/__СтатусыИнтеграции.xml diff --git a/src/Enums/__ТипыJSON.xml b/src/cf/Enums/__ТипыJSON.xml similarity index 100% rename from src/Enums/__ТипыJSON.xml rename to src/cf/Enums/__ТипыJSON.xml diff --git a/src/Enums/__ФорматыЗапросовИнтеграции.xml b/src/cf/Enums/__ФорматыЗапросовИнтеграции.xml similarity index 100% rename from src/Enums/__ФорматыЗапросовИнтеграции.xml rename to src/cf/Enums/__ФорматыЗапросовИнтеграции.xml diff --git a/src/EventSubscriptions/__ДокументыОбработкаЗаполнения.xml b/src/cf/EventSubscriptions/__ДокументыОбработкаЗаполнения.xml similarity index 100% rename from src/EventSubscriptions/__ДокументыОбработкаЗаполнения.xml rename to src/cf/EventSubscriptions/__ДокументыОбработкаЗаполнения.xml diff --git a/src/EventSubscriptions/__ДокументыОбработкаПроведения.xml b/src/cf/EventSubscriptions/__ДокументыОбработкаПроведения.xml similarity index 100% rename from src/EventSubscriptions/__ДокументыОбработкаПроведения.xml rename to src/cf/EventSubscriptions/__ДокументыОбработкаПроведения.xml diff --git a/src/EventSubscriptions/__ДокументыПередЗаписью.xml b/src/cf/EventSubscriptions/__ДокументыПередЗаписью.xml similarity index 100% rename from src/EventSubscriptions/__ДокументыПередЗаписью.xml rename to src/cf/EventSubscriptions/__ДокументыПередЗаписью.xml diff --git a/src/EventSubscriptions/__ДокументыПриЗаписи.xml b/src/cf/EventSubscriptions/__ДокументыПриЗаписи.xml similarity index 100% rename from src/EventSubscriptions/__ДокументыПриЗаписи.xml rename to src/cf/EventSubscriptions/__ДокументыПриЗаписи.xml diff --git a/src/EventSubscriptions/__ДокументыПриКопировании.xml b/src/cf/EventSubscriptions/__ДокументыПриКопировании.xml similarity index 100% rename from src/EventSubscriptions/__ДокументыПриКопировании.xml rename to src/cf/EventSubscriptions/__ДокументыПриКопировании.xml diff --git a/src/EventSubscriptions/__СправочникиОбработкаЗаполнения.xml b/src/cf/EventSubscriptions/__СправочникиОбработкаЗаполнения.xml similarity index 100% rename from src/EventSubscriptions/__СправочникиОбработкаЗаполнения.xml rename to src/cf/EventSubscriptions/__СправочникиОбработкаЗаполнения.xml diff --git a/src/EventSubscriptions/__СправочникиПередЗаписью.xml b/src/cf/EventSubscriptions/__СправочникиПередЗаписью.xml similarity index 100% rename from src/EventSubscriptions/__СправочникиПередЗаписью.xml rename to src/cf/EventSubscriptions/__СправочникиПередЗаписью.xml diff --git a/src/EventSubscriptions/__СправочникиПриЗаписи.xml b/src/cf/EventSubscriptions/__СправочникиПриЗаписи.xml similarity index 100% rename from src/EventSubscriptions/__СправочникиПриЗаписи.xml rename to src/cf/EventSubscriptions/__СправочникиПриЗаписи.xml diff --git a/src/EventSubscriptions/__СправочникиПриКопировании.xml b/src/cf/EventSubscriptions/__СправочникиПриКопировании.xml similarity index 100% rename from src/EventSubscriptions/__СправочникиПриКопировании.xml rename to src/cf/EventSubscriptions/__СправочникиПриКопировании.xml diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ.xml b/src/cf/InformationRegisters/__СоответствияОбъектовИБ.xml similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ.xml rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ.xml diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ/Ext/ManagerModule.bsl b/src/cf/InformationRegisters/__СоответствияОбъектовИБ/Ext/ManagerModule.bsl similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ/Ext/ManagerModule.bsl rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ/Ext/ManagerModule.bsl diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи.xml b/src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи.xml similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи.xml rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи.xml diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form.xml b/src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form.xml similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form.xml rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form.xml diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form/Module.bsl b/src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form/Module.bsl similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form/Module.bsl rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаЗаписи/Ext/Form/Module.bsl diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка.xml b/src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка.xml similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка.xml rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка.xml diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml b/src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form.xml diff --git a/src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl similarity index 100% rename from src/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl rename to src/cf/InformationRegisters/__СоответствияОбъектовИБ/Forms/ФормаСписка/Ext/Form/Module.bsl diff --git a/src/Languages/English.xml b/src/cf/Languages/English.xml similarity index 100% rename from src/Languages/English.xml rename to src/cf/Languages/English.xml diff --git a/src/Languages/Русский.xml b/src/cf/Languages/Русский.xml similarity index 100% rename from src/Languages/Русский.xml rename to src/cf/Languages/Русский.xml diff --git a/src/Roles/__РедактированиеДокументаДемоКаркас.xml b/src/cf/Roles/__РедактированиеДокументаДемоКаркас.xml similarity index 100% rename from src/Roles/__РедактированиеДокументаДемоКаркас.xml rename to src/cf/Roles/__РедактированиеДокументаДемоКаркас.xml diff --git a/src/Roles/__РедактированиеДокументаДемоКаркас/Ext/Rights.xml b/src/cf/Roles/__РедактированиеДокументаДемоКаркас/Ext/Rights.xml similarity index 100% rename from src/Roles/__РедактированиеДокументаДемоКаркас/Ext/Rights.xml rename to src/cf/Roles/__РедактированиеДокументаДемоКаркас/Ext/Rights.xml diff --git a/src/Roles/__РедактированиеНастроекИнтеграции.xml b/src/cf/Roles/__РедактированиеНастроекИнтеграции.xml similarity index 100% rename from src/Roles/__РедактированиеНастроекИнтеграции.xml rename to src/cf/Roles/__РедактированиеНастроекИнтеграции.xml diff --git a/src/Roles/__РедактированиеНастроекИнтеграции/Ext/Rights.xml b/src/cf/Roles/__РедактированиеНастроекИнтеграции/Ext/Rights.xml similarity index 100% rename from src/Roles/__РедактированиеНастроекИнтеграции/Ext/Rights.xml rename to src/cf/Roles/__РедактированиеНастроекИнтеграции/Ext/Rights.xml diff --git a/src/Roles/__РедактированиеНастроекОтбораОбъектов.xml b/src/cf/Roles/__РедактированиеНастроекОтбораОбъектов.xml similarity index 100% rename from src/Roles/__РедактированиеНастроекОтбораОбъектов.xml rename to src/cf/Roles/__РедактированиеНастроекОтбораОбъектов.xml diff --git a/src/Roles/__РедактированиеНастроекОтбораОбъектов/Ext/Rights.xml b/src/cf/Roles/__РедактированиеНастроекОтбораОбъектов/Ext/Rights.xml similarity index 100% rename from src/Roles/__РедактированиеНастроекОтбораОбъектов/Ext/Rights.xml rename to src/cf/Roles/__РедактированиеНастроекОтбораОбъектов/Ext/Rights.xml diff --git a/src/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения.xml b/src/cf/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения.xml similarity index 100% rename from src/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения.xml rename to src/cf/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения.xml diff --git a/src/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml b/src/cf/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml similarity index 100% rename from src/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml rename to src/cf/Roles/__РедактированиеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml diff --git a/src/Roles/__РедактированиеПользовательскихФункций.xml b/src/cf/Roles/__РедактированиеПользовательскихФункций.xml similarity index 100% rename from src/Roles/__РедактированиеПользовательскихФункций.xml rename to src/cf/Roles/__РедактированиеПользовательскихФункций.xml diff --git a/src/Roles/__РедактированиеПользовательскихФункций/Ext/Rights.xml b/src/cf/Roles/__РедактированиеПользовательскихФункций/Ext/Rights.xml similarity index 100% rename from src/Roles/__РедактированиеПользовательскихФункций/Ext/Rights.xml rename to src/cf/Roles/__РедактированиеПользовательскихФункций/Ext/Rights.xml diff --git a/src/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ.xml b/src/cf/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ.xml similarity index 100% rename from src/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ.xml rename to src/cf/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ.xml diff --git a/src/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml b/src/cf/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml similarity index 100% rename from src/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml rename to src/cf/Roles/__РедактированиеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml diff --git a/src/Roles/__РедактированиеТиповСоответствияОбъектовИБ.xml b/src/cf/Roles/__РедактированиеТиповСоответствияОбъектовИБ.xml similarity index 100% rename from src/Roles/__РедактированиеТиповСоответствияОбъектовИБ.xml rename to src/cf/Roles/__РедактированиеТиповСоответствияОбъектовИБ.xml diff --git a/src/Roles/__РедактированиеТиповСоответствияОбъектовИБ/Ext/Rights.xml b/src/cf/Roles/__РедактированиеТиповСоответствияОбъектовИБ/Ext/Rights.xml similarity index 100% rename from src/Roles/__РедактированиеТиповСоответствияОбъектовИБ/Ext/Rights.xml rename to src/cf/Roles/__РедактированиеТиповСоответствияОбъектовИБ/Ext/Rights.xml diff --git a/src/Roles/__ЧтениеНастроекОтборовОбъектов.xml b/src/cf/Roles/__ЧтениеНастроекОтборовОбъектов.xml similarity index 100% rename from src/Roles/__ЧтениеНастроекОтборовОбъектов.xml rename to src/cf/Roles/__ЧтениеНастроекОтборовОбъектов.xml diff --git a/src/Roles/__ЧтениеНастроекОтборовОбъектов/Ext/Rights.xml b/src/cf/Roles/__ЧтениеНастроекОтборовОбъектов/Ext/Rights.xml similarity index 100% rename from src/Roles/__ЧтениеНастроекОтборовОбъектов/Ext/Rights.xml rename to src/cf/Roles/__ЧтениеНастроекОтборовОбъектов/Ext/Rights.xml diff --git a/src/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения.xml b/src/cf/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения.xml similarity index 100% rename from src/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения.xml rename to src/cf/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения.xml diff --git a/src/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml b/src/cf/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml similarity index 100% rename from src/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml rename to src/cf/Roles/__ЧтениеПланаВидовХарактеристикПредопределенныеЗначения/Ext/Rights.xml diff --git a/src/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ.xml b/src/cf/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ.xml similarity index 100% rename from src/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ.xml rename to src/cf/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ.xml diff --git a/src/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml b/src/cf/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml similarity index 100% rename from src/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml rename to src/cf/Roles/__ЧтениеРегистраСведенийСоответствияОбъектовИБ/Ext/Rights.xml diff --git a/src/Roles/__ЧтениеТиповСоответствияОбъектовИБ.xml b/src/cf/Roles/__ЧтениеТиповСоответствияОбъектовИБ.xml similarity index 100% rename from src/Roles/__ЧтениеТиповСоответствияОбъектовИБ.xml rename to src/cf/Roles/__ЧтениеТиповСоответствияОбъектовИБ.xml diff --git a/src/Roles/__ЧтениеТиповСоответствияОбъектовИБ/Ext/Rights.xml b/src/cf/Roles/__ЧтениеТиповСоответствияОбъектовИБ/Ext/Rights.xml similarity index 100% rename from src/Roles/__ЧтениеТиповСоответствияОбъектовИБ/Ext/Rights.xml rename to src/cf/Roles/__ЧтениеТиповСоответствияОбъектовИБ/Ext/Rights.xml diff --git a/src/Roles/АдминистраторСистемы.xml b/src/cf/Roles/АдминистраторСистемы.xml similarity index 100% rename from src/Roles/АдминистраторСистемы.xml rename to src/cf/Roles/АдминистраторСистемы.xml diff --git a/src/Roles/АдминистраторСистемы/Ext/Rights.xml b/src/cf/Roles/АдминистраторСистемы/Ext/Rights.xml similarity index 100% rename from src/Roles/АдминистраторСистемы/Ext/Rights.xml rename to src/cf/Roles/АдминистраторСистемы/Ext/Rights.xml diff --git a/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.xml b/src/cf/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.xml similarity index 100% rename from src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.xml rename to src/cf/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.xml diff --git a/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Ext/Rights.xml b/src/cf/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Ext/Rights.xml similarity index 100% rename from src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Ext/Rights.xml rename to src/cf/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Ext/Rights.xml diff --git a/src/Roles/ПолныеПрава.xml b/src/cf/Roles/ПолныеПрава.xml similarity index 100% rename from src/Roles/ПолныеПрава.xml rename to src/cf/Roles/ПолныеПрава.xml diff --git a/src/Roles/ПолныеПрава/Ext/Rights.xml b/src/cf/Roles/ПолныеПрава/Ext/Rights.xml similarity index 100% rename from src/Roles/ПолныеПрава/Ext/Rights.xml rename to src/cf/Roles/ПолныеПрава/Ext/Rights.xml diff --git a/src/ScheduledJobs/__ОчисткаИсторииИнтеграции.xml b/src/cf/ScheduledJobs/__ОчисткаИсторииИнтеграции.xml similarity index 100% rename from src/ScheduledJobs/__ОчисткаИсторииИнтеграции.xml rename to src/cf/ScheduledJobs/__ОчисткаИсторииИнтеграции.xml diff --git a/src/ScheduledJobs/__ОчисткаИсторииИнтеграции/Ext/Schedule.xml b/src/cf/ScheduledJobs/__ОчисткаИсторииИнтеграции/Ext/Schedule.xml similarity index 100% rename from src/ScheduledJobs/__ОчисткаИсторииИнтеграции/Ext/Schedule.xml rename to src/cf/ScheduledJobs/__ОчисткаИсторииИнтеграции/Ext/Schedule.xml diff --git a/src/Subsystems/__ЗагрузкаИзТабличногоДокумента.xml b/src/cf/Subsystems/__ЗагрузкаИзТабличногоДокумента.xml similarity index 100% rename from src/Subsystems/__ЗагрузкаИзТабличногоДокумента.xml rename to src/cf/Subsystems/__ЗагрузкаИзТабличногоДокумента.xml diff --git a/src/Subsystems/__МодификацияФорм.xml b/src/cf/Subsystems/__МодификацияФорм.xml similarity index 100% rename from src/Subsystems/__МодификацияФорм.xml rename to src/cf/Subsystems/__МодификацияФорм.xml diff --git a/src/Subsystems/__ОбщегоНазначения.xml b/src/cf/Subsystems/__ОбщегоНазначения.xml similarity index 100% rename from src/Subsystems/__ОбщегоНазначения.xml rename to src/cf/Subsystems/__ОбщегоНазначения.xml diff --git a/src/Subsystems/__ПодпискиНаСобытия.xml b/src/cf/Subsystems/__ПодпискиНаСобытия.xml similarity index 100% rename from src/Subsystems/__ПодпискиНаСобытия.xml rename to src/cf/Subsystems/__ПодпискиНаСобытия.xml diff --git a/src/Subsystems/__ПользовательскиеФункции.xml b/src/cf/Subsystems/__ПользовательскиеФункции.xml similarity index 100% rename from src/Subsystems/__ПользовательскиеФункции.xml rename to src/cf/Subsystems/__ПользовательскиеФункции.xml diff --git a/src/Subsystems/__ПредопределенныеЗначения.xml b/src/cf/Subsystems/__ПредопределенныеЗначения.xml similarity index 100% rename from src/Subsystems/__ПредопределенныеЗначения.xml rename to src/cf/Subsystems/__ПредопределенныеЗначения.xml diff --git a/src/Subsystems/__СоответствиеОбъектовИБ.xml b/src/cf/Subsystems/__СоответствиеОбъектовИБ.xml similarity index 100% rename from src/Subsystems/__СоответствиеОбъектовИБ.xml rename to src/cf/Subsystems/__СоответствиеОбъектовИБ.xml diff --git a/src/Subsystems/__УправлениеИнтеграциями.xml b/src/cf/Subsystems/__УправлениеИнтеграциями.xml similarity index 100% rename from src/Subsystems/__УправлениеИнтеграциями.xml rename to src/cf/Subsystems/__УправлениеИнтеграциями.xml diff --git a/src/cfe/YAXUnit/CommonModules/Мокито.xml b/src/cfe/YAXUnit/CommonModules/Мокито.xml new file mode 100644 index 0000000..ce6dae5 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/Мокито.xml @@ -0,0 +1,23 @@ + + + + + Мокито + + + ru + Мокито + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/Мокито/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/Мокито/Ext/Module.bsl new file mode 100644 index 0000000..25fbf50 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/Мокито/Ext/Module.bsl @@ -0,0 +1,263 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +// BSLLS:CommentedCode-off + +/////////////////////////////////////////////////////////////////// +// Расширяет возможности тестирования, позволяет легко менять логику работы системы: +// +// * подменять результаты работы функций; +// * отключать алгоритмы и проверки; +// * выбрасывать исключения при необходимости; +// * собирать статистику по вызовам методов. +// +// Для работы Мокито необходимо добавить обрабатываемые методы в расширение по следующей схеме: +// +// ```bsl +// &Вместо("ВыполнитьЗапрос") +// Функция ЮТВыполнитьЗапрос(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки) Экспорт +// +// ПараметрыМетода = Мокито.МассивПараметров(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки); +// +// ПрерватьВыполнение = Ложь; +// Результат = МокитоПерехват.АнализВызова(РаботаСHTTP, "ВыполнитьЗапрос", ПараметрыМетода, ПрерватьВыполнение); +// +// Если НЕ ПрерватьВыполнение Тогда +// Возврат ПродолжитьВызов(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки); +// Иначе +// Возврат Результат; +// КонецЕсли; +// +// КонецФункции +// ``` +/////////////////////////////////////////////////////////////////// + +// BSLLS:CommentedCode-on + +#Область ПрограммныйИнтерфейс + +// Начинает обучение (настройку) Мокито. +// После вызова этого метода следует набор правил для подмены логики работы системы. +// +// Параметры: +// Объект - Произвольный - Объект, методы которого хотим подменить. +// СброситьСтарыеНастройки - Булево - Необходимо удалить старые настройки по объекту. +// + `Истина` - все предыдущие настройки мокирования объекта будут забыты. +// + `Ложь` - будет выполнено дообучение объекта. +// +// Возвращаемое значение: +// ОбщийМодуль - см. МокитоОбучение +Функция Обучение(Объект, СброситьСтарыеНастройки = Истина) Экспорт + + Режимы = МокитоСлужебный.РежимыРаботы(); + МокитоСлужебный.УстановитьРежим(Режимы.Обучение); + + Возврат МокитоОбучение.Обучение(Объект, СброситьСтарыеНастройки); + +КонецФункции + +// Переводит мокито в режим прогона тестов. +// +// Важно! Вызов этого метода обязателен перед выполнением тестового прогона метода. +// +// Параметры: +// СброситьСтатистику - Булево - Сбросить статистику прошлых прогонов +Процедура Прогон(СброситьСтатистику = Истина) Экспорт + + Режимы = МокитоСлужебный.РежимыРаботы(); + МокитоСлужебный.УстановитьРежим(Режимы.Тестирование); + + Если СброситьСтатистику Тогда + МокитоСлужебный.ОчиститьСтатистику(); + КонецЕсли; + +КонецПроцедуры + +// Переводит мокито в режим проверки собранной за прогон статистики вызовов. +// +// Параметры: +// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять. +// Описание - Строка - Описание проверки, которое будет выведено при возникновении ошибки +// Возвращаемое значение: +// ОбщийМодуль - см. МокитоПроверки +Функция Проверить(Объект, Описание = Неопределено) Экспорт + + Режимы = МокитоСлужебный.РежимыРаботы(); + МокитоСлужебный.УстановитьРежим(Режимы.Проверка); + + Возврат МокитоПроверки.Проверить(Объект, Описание); + +КонецФункции + +// Сбрасывает настройки и повторно инициализирует мокито. +Процедура Сбросить() Экспорт + + МокитоСлужебный.СброситьПараметры(); + +КонецПроцедуры + +#Область КонструкторыПараметров + +// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода. +// +// Указывает, что в метод может передаваться любой параметр. +// Возвращаемое значение: +// см. МокитоСлужебный.ОписаниеМаскиПараметра +Функция ЛюбойПараметр() Экспорт + + МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Любой, 0); + Возврат МаскаПараметра; + +КонецФункции + +// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода. +// +// Указывает, что в метод может передаваться числовой параметр. +// Возвращаемое значение: +// см. Мокито.ТипизированныйПараметр +Функция ЧисловойПараметр() Экспорт + + Возврат ТипизированныйПараметр(Тип("Число")); + +КонецФункции + +// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода. +// +// Указывает, что в метод может передаваться строковый параметр +// Возвращаемое значение: +// см. Мокито.ТипизированныйПараметр +Функция СтроковыйПараметр() Экспорт + + Возврат ТипизированныйПараметр(Тип("Строка")); + +КонецФункции + +// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода. +// +// Указывает, что в метод может передаваться параметр указанного типа. +// +// Параметры: +// Тип - Тип - Ограничение типа параметра. +// +// Возвращаемое значение: +// Структура - Описание маски параметра: +// * Режим - Строка - Тип маски (значение: `Тип`) +// * Приоритет - Число - Приоритет маски, используется если значение подпадает под несколько масок (значение: `10`) +// * Тип - Тип - Тип, которому должен соответствовать параметр +Функция ТипизированныйПараметр(Тип) Экспорт + + МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 10); + МаскаПараметра.Вставить("Тип", Тип); + + Возврат МаскаПараметра; + +КонецФункции + +// Формирует массив параметров. Применяется при обучении (настройке) мокито. +// +// Параметры: +// Параметр1 - Произвольный +// Параметр2 - Произвольный +// Параметр3 - Произвольный +// Параметр4 - Произвольный +// Параметр5 - Произвольный +// Параметр6 - Произвольный +// Параметр7 - Произвольный +// Параметр8 - Произвольный +// Параметр9 - Произвольный +// Параметр10 - Произвольный +// +// Возвращаемое значение: +// Массив из Произвольный - Массив параметров +//@skip-check method-too-many-params +// BSLLS:NumberOfOptionalParams-off +// BSLLS:NumberOfParams-off +Функция МассивПараметров(Параметр1 = "_!%*", + Параметр2 = "_!%*", + Параметр3 = "_!%*", + Параметр4 = "_!%*", + Параметр5 = "_!%*", + Параметр6 = "_!%*", + Параметр7 = "_!%*", + Параметр8 = "_!%*", + Параметр9 = "_!%*", + Параметр10 = "_!%*") Экспорт + + Возврат ЮТКоллекции.ЗначениеВМассиве(Параметр1, + Параметр2, + Параметр3, + Параметр4, + Параметр5, + Параметр6, + Параметр7, + Параметр8, + Параметр9, + Параметр10); + +КонецФункции + +// BSLLS:NumberOfParams-on +// BSLLS:NumberOfOptionalParams-on + +// Возврщает идентификатор значения входного параметра по умолчанию. +// +// Возвращаемое значение: +// Строка +// +// Примеры: +// +// ЮТТесты.ДобавитьТест("Тест1") +// .СПараметрами( +// Мокито.ПараметрПоУмолчанию(), +// 2); // Будет зарегистрирован один тест с параметрами <значение по умолчанию>, 2 +// +Функция ПараметрПоУмолчанию() Экспорт + + Возврат "<[ЗначениеВходногоПараметраПоУмолчанию]>"; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Анализ вызова. +// +// Параметры: +// Объект - Произвольный +// ИмяМетода - Произвольный +// ПараметрыМетода - Произвольный +// ПрерватьВыполнение - Произвольный +// +// Возвращаемое значение: +// Произвольный - Подменный результат работы метода +Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("Мокито.АнализВызова", "МокитоПерехват.АнализВызова", "24.03"); + + Возврат МокитоСлужебный.АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение); + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/МокитоОбучение.xml b/src/cfe/YAXUnit/CommonModules/МокитоОбучение.xml new file mode 100644 index 0000000..296673c --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоОбучение.xml @@ -0,0 +1,23 @@ + + + + + МокитоОбучение + + + ru + Мокито обучение + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/МокитоОбучение/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/МокитоОбучение/Ext/Module.bsl new file mode 100644 index 0000000..79752e9 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоОбучение/Ext/Module.bsl @@ -0,0 +1,271 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +/////////////////////////////////////////////////////////////////// +// Содержит методы для обучения (настройки) Мокито. +// Вы можете настроить какие методы и как подменять, а за которыми просто наблюдать +/////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Начинает обучение мокито для регистрации правил подмены вызовов методов. +// +// Параметры: +// Объект - Произвольный - Обучаемый объект, с методами которого хотим работать. +// СброситьСтарыеНастройки - Булево - Необходимо удалить старые настройки по объекту. +// + `Истина` - все предыдущие настройки мокирования объекта будут забыты. +// + `Ложь` - будет выполнено дообучение объекта. +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Обучение(Объект, СброситьСтарыеНастройки = Истина) Экспорт + + УстановитьПараметрыОбучения(Объект); + МокитоСлужебный.ДобавитьНастройкуПерехватаВызововОбъекта(Объект, СброситьСтарыеНастройки); + + Возврат МокитоОбучение; + +КонецФункции + +// Включает наблюдение за вызовами метода, при необходимости можно настроить фильтр по параметрам вызова. +// +// Параметры: +// ИмяМетода - Строка - Имя метода обучаемого объекта, см. Обучение. +// - Произвольный - Вызов метода обучаемого объекта. +// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода обучаемого объекта. +// Варианты вызова: +// Мокито.Обучение(Произвольный).Когда(Строка, Массив); // Вызов через указание имени метода и параметров +// Мокито.Обучение(Произвольный).Когда(Произвольный); // Вызов через явное выполнение наблюдаемого метода +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +// Примеры: +// Мокито.Обучение(ОбщегоНазначения).Наблюдать("ЭтоДопустимоеИмяПеременной", Мокито.МассивПараметров("")); +// Мокито.Обучение(ОбщегоНазначения).Наблюдать(ОбщегоНазначения.ЭтоДопустимоеИмяПеременной("")); +Функция Наблюдать(ИмяМетода, ПараметрыВызова = Неопределено) Экспорт + + ЗарегистрироватьПерехватВыражения(ИмяМетода, ПараметрыВызова); + + Возврат МокитоОбучение; + +КонецФункции + +// Задает условие "подмены" поведения метода. +// +// Параметры: +// ИмяМетода - Строка - Имя метода обучаемого объекта. +// - Произвольный - Вызов метода обучаемого объекта. +// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода обучаемого объекта. +// Варианты вызова: +// Мокито.Обучение(Произвольный).Когда(Строка, Массив); // Вызов через указание имени метода и параметров +// Мокито.Обучение(Произвольный).Когда(Произвольный); // Вызов через явное выполнение наблюдаемого метода +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания. +// Примеры: +// Мокито.Обучение(ОбщегоНазначения).Когда("ЭтоДопустимоеИмяПеременной", Мокито.МассивПараметров("")); +// Мокито.Обучение(ОбщегоНазначения).Когда(ОбщегоНазначения.ЭтоДопустимоеИмяПеременной("")); +Функция Когда(ИмяМетода, ПараметрыВызова = Неопределено) Экспорт + + Возврат Наблюдать(ИмяМетода, ПараметрыВызова); + +КонецФункции + +// Указывает, что при соблюдении условий (см. Когда) метод должен вернуть указанный результат. +// +// При этом сам метод не исполняется. +// +// Параметры: +// Результат - Произвольный - Результат, который должен вернуть метод. +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Вернуть(Результат) Экспорт + + ЗарегистрироватьРеакцию(Новый Структура("ТипДействия, Результат", МокитоСлужебный.ТипыДействийРеакций().ВернутьРезультат, Результат)); + + Возврат МокитоОбучение; + +КонецФункции + +// Указывает, что при соблюдении условий (см. Когда) метод должен выбросить исключение. +// +// При этом сам метод не исполняется. +// +// Параметры: +// ТекстИсключения - Строка +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция ВыброситьИсключение(ТекстИсключения) Экспорт + + ЗарегистрироватьРеакцию(Новый Структура("ТипДействия, Ошибка", МокитоСлужебный.ТипыДействийРеакций().ВыброситьИсключение, ТекстИсключения)); + + Возврат МокитоОбучение; + +КонецФункции + +// Указывает, что при соблюдении условий (см. Когда) метод не должен выполняться, его вызов пропускается. +// +// Если это функция, то будет возвращено `Неопределено`. +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Пропустить() Экспорт + + ЗарегистрироватьРеакцию(Новый Структура("ТипДействия", МокитоСлужебный.ТипыДействийРеакций().Пропустить)); + + Возврат МокитоОбучение; + +КонецФункции + +// Указывает, что при соблюдении условий (см. Когда) метод должен выполняться. +// Используется для случаев, когда необходимо задать исключения для другого правила на этом методе. +// +// TODO: Нужны примеры +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция ВыполнитьМетод() Экспорт + + ЗарегистрироватьРеакцию(Новый Структура("ТипДействия", МокитоСлужебный.ТипыДействийРеакций().ВызватьОсновнойМетод)); + + Возврат МокитоОбучение; + +КонецФункции + +// Переводит мокито в режим прогона тестов. +// +// Вызов этого метода обязателен перед выполнением тестового прогона метода. +Процедура Прогон() Экспорт + + Мокито.Прогон(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗарегистрироватьПерехватВыражения(ИмяМетода, ПараметрыВызова) + + ПереданаСтруктураВызоваМетода = МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода); + + Если ПереданаСтруктураВызоваМетода Тогда + Объект = ИмяМетода.Объект; + Иначе + Объект = ОбучаемыйОбъект(); + КонецЕсли; + + ДанныеПерехвата = МокитоСлужебный.НастройкиПерехватаОбъекта(Объект); + + Если ДанныеПерехвата = Неопределено Тогда + Сообщение = СтрШаблон("Не найдены настройки перехвата для %1. Необходимо предварительно вызвать метод Мокито.Обучение(Объект)", Объект); + ВызватьИсключение Сообщение; + КонецЕсли; + + Если ПереданаСтруктураВызоваМетода Тогда + СтруктураВызоваМетода = ИмяМетода; + Иначе + СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыВызова); + КонецЕсли; + + Методы = ДанныеПерехвата.Методы; + + Если НЕ Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда + Методы.Вставить(СтруктураВызоваМетода.ИмяМетода, ОписаниеПараметровПерехватаМетода()); + КонецЕсли; + + Реакция = СоздатьОписаниеУсловнойРеакции(СтруктураВызоваМетода); + + РеакцииМетода = Методы[СтруктураВызоваМетода.ИмяМетода].Реакции; + РеакцииМетода.Добавить(Реакция); + + ПараметрыОбучения = ПараметрыОбучения(); + ПараметрыОбучения.РеакцияТекущегоВыражения = Реакция; + ПараметрыОбучения.Реакции = РеакцииМетода; + +КонецПроцедуры + +Функция ОписаниеПараметровПерехватаМетода() + + Возврат Новый Структура("Реакции", Новый Массив); + +КонецФункции + +#Область Реакции + +Функция ОписаниеУсловнойРеакции() + + Возврат Новый Структура("УсловиеРеакции, Действие"); + +КонецФункции + +Функция СоздатьОписаниеУсловнойРеакции(СтруктураВызоваМетода) + + Условия = МокитоСлужебный.УсловиеИзПараметров(СтруктураВызоваМетода.Параметры); + ОписаниеУсловнойРеакции = ОписаниеУсловнойРеакции(); + ОписаниеУсловнойРеакции.УсловиеРеакции = Условия; + Возврат ОписаниеУсловнойРеакции; + +КонецФункции + +#КонецОбласти + +#Область Параметры + +Функция ОбучаемыйОбъект() + + Возврат ПараметрыОбучения().ОбучаемыйОбъект; + +КонецФункции + +Функция ПараметрыОбучения() + + Возврат МокитоСлужебный.Настройки().ПараметрыОбучения; + +КонецФункции + +Процедура УстановитьПараметрыОбучения(Объект) + + ПараметрыОбучения = Новый Структура("ОбучаемыйОбъект, РеакцияТекущегоВыражения, Реакции", Объект, Неопределено); + МокитоСлужебный.Настройки().ПараметрыОбучения = ПараметрыОбучения; + +КонецПроцедуры + +Процедура ЗарегистрироватьРеакцию(Действие) + + Параметры = ПараметрыОбучения(); + + Действие.Вставить("Обработано", Ложь); + + Если Параметры.РеакцияТекущегоВыражения.Действие = Неопределено Тогда + Параметры.РеакцияТекущегоВыражения.Действие = Действие; + Иначе + НоваяРеакция = ОписаниеУсловнойРеакции(); + ЗаполнитьЗначенияСвойств(НоваяРеакция, Параметры.РеакцияТекущегоВыражения); + НоваяРеакция.Действие = Действие; + Параметры.РеакцияТекущегоВыражения = НоваяРеакция; + Параметры.Реакции.Добавить(НоваяРеакция); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/МокитоПерехват.xml b/src/cfe/YAXUnit/CommonModules/МокитоПерехват.xml new file mode 100644 index 0000000..bfddef5 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоПерехват.xml @@ -0,0 +1,23 @@ + + + + + МокитоПерехват + + + ru + Мокито перехват + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/МокитоПерехват/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/МокитоПерехват/Ext/Module.bsl new file mode 100644 index 0000000..b5a5c6d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоПерехват/Ext/Module.bsl @@ -0,0 +1,37 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Анализ вызова. +// +// Параметры: +// Объект - Произвольный +// ИмяМетода - Произвольный +// ПараметрыМетода - Произвольный +// ПрерватьВыполнение - Произвольный +// +// Возвращаемое значение: +// Произвольный - Подменный результат работы метода +Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт + + Возврат МокитоСлужебный.АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/МокитоПроверки.xml b/src/cfe/YAXUnit/CommonModules/МокитоПроверки.xml new file mode 100644 index 0000000..a621892 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоПроверки.xml @@ -0,0 +1,23 @@ + + + + + МокитоПроверки + + + ru + Мокито проверки + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/МокитоПроверки/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/МокитоПроверки/Ext/Module.bsl new file mode 100644 index 0000000..be7fe14 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоПроверки/Ext/Module.bsl @@ -0,0 +1,271 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// см. Мокито.Проверить +Функция Проверить(Объект, Описание = Неопределено) Экспорт + + УстановитьПараметрыПроверки(Объект, Описание); + Возврат МокитоПроверки; + +КонецФункции + +// Начинает утверждение для проверки количества вызовов метода. +// +// Устанавливает параметры поиска вызовов. +// Параметры: +// ИмяМетода - Строка - Имя метода проверяемого объекта +// - Произвольный - Вызов метода проверяемого объекта +// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт + + СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова); + + Возврат МокитоПроверки; + +КонецФункции + +// Возвращает информацию о вызовах метода. +// +// Параметры: +// ИмяМетода - Строка - Имя метода проверяемого объекта +// - Произвольный - Вызов метода проверяемого объекта +// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода +// Возвращаемое значение: +// Массив из см. МокитоСлужебный.СтруктураВызоваМетода - Вызовы метода +Функция Вызовы(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт + + СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова); + + Возврат СтатистикаВызовов(); + +КонецФункции + +// Проверяет вызовы метода (см. КоличествоВызовов). +// Их количество должно быть равно переданному значение, иначе будет выброшено исключение. +// +// Параметры: +// Количество - Число - Ожидаемое количество вызовов +// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Равно(Количество, Знач Описание = Неопределено) Экспорт + + Настройки = ПараметрыПроверки(); + + Статистика = СтатистикаВызовов(); + ЮТУтверждения + .Что(Статистика, Настройки.Описание) + .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта()) + .ИмеетДлину(Количество, Описание); + + Возврат МокитоПроверки; + +КонецФункции + +// Проверяет вызовы метода (см. КоличествоВызовов). +// Их количество должно быть больше переданного значения,, иначе будет выброшено исключение. +// Параметры: +// Количество - Число +// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Больше(Количество, Знач Описание = Неопределено) Экспорт + + Статистика = СтатистикаВызовов(); + ЮТУтверждения + .Что(Статистика, Описание) + .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта()) + .ИмеетДлинуБольше(Количество); + + Возврат МокитоПроверки; + +КонецФункции + +// Проверяет вызовы метода (см. КоличествоВызовов). +// Их количество должно быть меньше переданного значения, иначе будет выброшено исключение. +// Параметры: +// Количество - Число +// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Меньше(Количество, Знач Описание = Неопределено) Экспорт + + Статистика = СтатистикаВызовов(); + ЮТУтверждения + .Что(Статистика, Описание) + .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта()) + .ИмеетДлинуМеньше(Количество); + + Возврат МокитоПроверки; + +КонецФункции + +// Проверяет, что есть вызовы метода (см. КоличествоВызовов), соответствующие условию. +// Параметры: +// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Заполнено(Знач Описание = Неопределено) Экспорт + + Статистика = СтатистикаВызовов(Истина); + ЮТУтверждения + .Что(Статистика, Описание) + .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта()) + .Заполнено(); + + Возврат МокитоПроверки; + +КонецФункции + +// Проверяет, что нет вызовов метода (см. КоличествоВызовов), соответствующих условию. +// Параметры: +// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Пусто(Знач Описание = Неопределено) Экспорт + + Статистика = СтатистикаВызовов(Истина); + ЮТУтверждения + .Что(Статистика, Описание) + .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта()) + .НеЗаполнено(); + + Возврат МокитоПроверки; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Параметры + +// Параметры проверки. +// +// Возвращаемое значение: +// Структура: +// * ПроверяемыйОбъект - Произвольный +// * СтруктураВызоваМетода - см. МокитоСлужебный.СтруктураВызоваМетода +// * Описание - Строка +Функция ПараметрыПроверки() + + //@skip-check constructor-function-return-section + Возврат МокитоСлужебный.Настройки().ПараметрыПроверки; + +КонецФункции + +Процедура УстановитьПараметрыПроверки(Объект, Описание) + + ПараметрыПроверки = Новый Структура("ПроверяемыйОбъект, Описание, СтруктураВызоваМетода", Объект, Описание); + МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыПроверки; + +КонецПроцедуры + +#КонецОбласти + +Функция СтатистикаВызовов(Первый = Ложь) + + Параметры = ПараметрыПроверки(); + СтруктураВызоваМетода = Параметры.СтруктураВызоваМетода; + + ВызовыМетода = МокитоСлужебный.СтатистикаВызовов(СтруктураВызоваМетода.Объект, СтруктураВызоваМетода.ИмяМетода); + + Если ВызовыМетода = Неопределено Тогда + Возврат Новый Массив(); + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтруктураВызоваМетода.Параметры) Тогда + Возврат ВызовыМетода; + КонецЕсли; + + УсловияПроверки = МокитоСлужебный.УсловиеИзПараметров(СтруктураВызоваМетода.Параметры); + Результат = Новый Массив(); + + Для Каждого ВызовМетода Из ВызовыМетода Цикл + + Если ВызовМетода.Параметры.Количество() < СтруктураВызоваМетода.Параметры.Количество() Тогда + ВызватьИсключение "Сигнатура метода содержит меньше параметров"; + КонецЕсли; + + КоличествоУсловий = УсловияПроверки.Количество(); + Успешно = Истина; + + Для Инд = 0 По КоличествоУсловий - 1 Цикл + + Параметр = ВызовМетода.Параметры[Инд]; + Условие = УсловияПроверки[Инд]; + + Успешно = МокитоСлужебный.ПроверитьПараметр(Параметр, Условие); + + Если НЕ Успешно Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если Успешно Тогда + Результат.Добавить(ВызовМетода); + Если Первый Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ОписаниеПроверяемогоОбъекта() + + СтруктураВызоваМетода = ПараметрыПроверки().СтруктураВызоваМетода; + Объект = СтруктураВызоваМетода.Объект; + ПредставлениеТипа = ЮТТипыДанныхСлужебный.ПредставлениеТипа(ТипЗнч(Объект)); + Возврат СтрШаблон(" - вызовы метода `%1(%2).%3`,", Объект, ПредставлениеТипа, СтруктураВызоваМетода.ИмяМетода); + +КонецФункции + +Процедура СпозиционироватьсяНаМетоде(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) + + Параметры = ПараметрыПроверки(); + + Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда + СтруктураВызоваМетода = ИмяМетода; + Иначе + Условия = МокитоСлужебный.УсловиеИзПараметров(ПараметрыВызова); + СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, Условия); + КонецЕсли; + + Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда + ВызватьИсключение "Установлен другой проверяемый объект"; + КонецЕсли; + + Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/МокитоСлужебный.xml b/src/cfe/YAXUnit/CommonModules/МокитоСлужебный.xml new file mode 100644 index 0000000..16cc629 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоСлужебный.xml @@ -0,0 +1,23 @@ + + + + + МокитоСлужебный + + + ru + Мокито (служебный) + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/МокитоСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/МокитоСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..f9bc1f4 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/МокитоСлужебный/Ext/Module.bsl @@ -0,0 +1,714 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция Включен() Экспорт + + ДанныеКонтекста = ЮТКонтекстСлужебный.ДанныеКонтекста(); + Настройки = Неопределено; + Возврат ДанныеКонтекста <> Неопределено И ДанныеКонтекста.Свойство(КлючНастроек(), Настройки) И Настройки <> Неопределено; + +КонецФункции + +Процедура УстановитьРежим(Режим) Экспорт + + Контекст = Настройки(); + Контекст.Режим = Режим; + ОчиститьСлужебныеПараметры(); + +КонецПроцедуры + +// Настройки. +// +// Возвращаемое значение: +// см. НовыеНастройки +Функция Настройки() Экспорт + + Настройки = ЮТКонтекстСлужебный.ЗначениеКонтекста(КлючНастроек()); + + Если Настройки = Неопределено Тогда + ВызватьИсключение "Что-то пошло не так, настройки Мокито не инициализированы"; + КонецЕсли; + + //@skip-check constructor-function-return-section + Возврат Настройки; + +КонецФункции + +#Область СтруктурыДанных + +Функция РежимыРаботы() Экспорт + + Режимы = Новый Структура(); + Режимы.Вставить("Обучение", "Обучение"); + Режимы.Вставить("Тестирование", "Тестирование"); + Режимы.Вставить("Проверка", "Проверка"); + + Возврат Новый ФиксированнаяСтруктура(Режимы); + +КонецФункции + +Функция ТипыДействийРеакций() Экспорт + + ТипыРеакций = Новый Структура(); + ТипыРеакций.Вставить("ВернутьРезультат", "ВернутьРезультат"); + ТипыРеакций.Вставить("ВыброситьИсключение", "ВыброситьИсключение"); + ТипыРеакций.Вставить("Пропустить", "Пропустить"); + ТипыРеакций.Вставить("ВызватьОсновнойМетод", "ВызватьОсновнойМетод"); + + Возврат Новый ФиксированнаяСтруктура(ТипыРеакций); + +КонецФункции + +#КонецОбласти + +Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт + + ПрерватьВыполнение = Ложь; + + Если НЕ Включен() Тогда + Возврат Неопределено; + КонецЕсли; + + Настройки = Настройки(); + + Если НЕ ЗначениеЗаполнено(Настройки.Перехват) Или Настройки.ТипыПерехватываемыхОбъектов[ТипЗнч(Объект)] = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ПараметрыПерехвата = ДанныеПерехвата(Объект, Настройки); + + Если ПараметрыПерехвата = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + РежимыРаботы = РежимыРаботы(); + + СтруктураВызоваМетода = СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыМетода); + + Если Настройки.Режим = РежимыРаботы.Обучение ИЛИ Настройки.Режим = РежимыРаботы.Проверка Тогда + + ПрерватьВыполнение = Истина; + Возврат СтруктураВызоваМетода; + + ИначеЕсли Настройки.Режим = РежимыРаботы.Тестирование Тогда + + ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода); + Возврат ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение); + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Структура вызова метода. +// +// Параметры: +// Объект - Произвольный - Объект, которому принадлежит метод +// - Структура - см. СтруктураВызоваМетода +// ИмяМетода - Строка - Имя вызванного метода +// ПараметрыМетода - Массив из Произвольный - Набор параметров, с которыми был вызван метод +// +// Возвращаемое значение: +// Структура - Информация о вызове метода: +// * Объект - Произвольный - Объект, которому принадлежит метод +// * ИмяМетода - Строка - Имя вызванного метода +// * Параметры - Массив из Произвольный - Набор параметров, с которыми был вызван метод +// * Контекст - Строка - Контекст вызова метода +Функция СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыМетода) Экспорт + + Если ЭтоСтруктураВызоваМетода(Объект) Тогда + Возврат Объект; + КонецЕсли; + + СтруктураВызоваМетода = Новый Структура("Объект, ИмяМетода, Параметры", Объект, ИмяМетода, ПараметрыМетода); + СтруктураВызоваМетода.Вставить("Контекст"); + + //@skip-check constructor-function-return-section + Возврат СтруктураВызоваМетода; + +КонецФункции + +Функция ЭтоСтруктураВызоваМетода(Объект) Экспорт + + Возврат ТипЗнч(Объект) = Тип("Структура"); + +КонецФункции + +#Область Предикаты + +Функция ТипыУсловийПараметров() Экспорт + + Типы = Новый Структура; + Типы.Вставить("Любой", "Любой"); + Типы.Вставить("Значение", "Значение"); + Типы.Вставить("Тип", "Тип"); + Типы.Вставить("ОписаниеТипа", "ОписаниеТипа"); + Типы.Вставить("Предикат", "Предикат"); + + Возврат Новый ФиксированнаяСтруктура(Типы); + +КонецФункции + +// Описание маски параметра. +// +// Параметры: +// ТипУсловия - Строка - см. ТипыУсловийПараметров +// Приоритет - Число - Приоритет маски +// +// Возвращаемое значение: +// Структура - Описание маски параметра: +// * Режим - Строка - см. ТипыУсловийПараметров +// * Приоритет - Число - Приоритет маски, используется если значение подпадает под несколько масок, чем выше приоритет, тем лучше +Функция ОписаниеМаскиПараметра(ТипУсловия, Приоритет) Экспорт + + МаскаПараметра = Новый Структура; + ЮТОбщий.УказатьТипСтруктуры(МаскаПараметра, "МаскаПараметра"); + + МаскаПараметра.Вставить("Режим", ТипУсловия); + МаскаПараметра.Вставить("Приоритет", Приоритет); + + Возврат МаскаПараметра; + +КонецФункции + +Функция ЭтоМаскаПарамера(Параметр) Экспорт + + Возврат ТипЗнч(Параметр) = Тип("Структура") И ЮТОбщий.ТипСтруктуры(Параметр) = "МаскаПараметра"; + +КонецФункции + +Функция ПроверитьПараметр(Параметр, Условие) Экспорт + + ТипыУсловий = ТипыУсловийПараметров(); + Совпадает = Ложь; + + Если Условие.Режим = ТипыУсловий.Любой Тогда + + Совпадает = Истина; + + ИначеЕсли Условие.Режим = ТипыУсловий.Значение Тогда + + Совпадает = ЮТСравнениеСлужебныйКлиентСервер.ЗначенияРавны(Условие.Значение, Параметр); + + ИначеЕсли Условие.Режим = ТипыУсловий.Тип Тогда + + Совпадает = Условие.Тип = ТипЗнч(Параметр); + + ИначеЕсли Условие.Режим = ТипыУсловий.ОписаниеТипа Тогда + + Совпадает = Условие.Тип.СодержитТип(ТипЗнч(Параметр)); + + ИначеЕсли Условие.Режим = ТипыУсловий.Предикат Тогда + + Результат = ЮТПредикатыСлужебныйКлиентСервер.ПроверитьПредикаты(Параметр, Условие.Предикат); + Совпадает = Результат.Успешно; + + КонецЕсли; + + Возврат Совпадает; + +КонецФункции + +#КонецОбласти + +#Область Перехват + +Функция ПараметрыПерехвата() Экспорт + + Возврат Настройки().Перехват; + +КонецФункции + +Функция НастройкиПерехватаОбъекта(Объект) Экспорт + + ПараметрыПерехвата = ПараметрыПерехвата(); + Возврат ПараметрыПерехвата[Объект]; + +КонецФункции + +// Данные перехвата. +// +// Параметры: +// Объект - Произвольный +// Настройки - см. НовыеНастройки +// +// Возвращаемое значение: +// см. ОписаниеПараметровПерехватаОбъекта +Функция ДанныеПерехвата(Объект, Настройки = Неопределено) Экспорт + + Если Настройки = Неопределено Тогда + ПараметрыПерехвата = ПараметрыПерехвата(); + Иначе + ПараметрыПерехвата = Настройки.Перехват; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ПараметрыПерехвата) Тогда + Возврат Неопределено; + КонецЕсли; + + Если ТипЗнч(Объект) = Тип("Структура") Тогда + Ключ = Объект.Объект; + Иначе + Ключ = Объект; + КонецЕсли; + + ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Ключ]; + ТипЗначения = ТипЗнч(Ключ); + + Если ПараметрыПерехватаОбъекта = Неопределено Тогда + + Если ЮТТипыДанныхСлужебный.ЭтоТипОбъектаОбработкиОтчета(ТипЗначения) Или ЮТТипыДанныхСлужебный.ЭтоТипНабораЗаписей(ТипЗначения) Тогда + + Менеджер = ЮТОбщий.Менеджер(ТипЗначения); + ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Менеджер]; + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда + + ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Ключ.Ссылка]; + + Если ПараметрыПерехватаОбъекта = Неопределено Тогда + + Менеджер = ЮТОбщий.Менеджер(ТипЗначения); + ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Менеджер]; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + //@skip-check constructor-function-return-section + Возврат ПараметрыПерехватаОбъекта; + +КонецФункции + +Процедура ДобавитьНастройкуПерехватаВызововОбъекта(Знач Объект, СброситьСтарыеНастройки = Истина) Экспорт + + Настройки = Настройки(); + + Если СброситьСтарыеНастройки ИЛИ Настройки.Перехват[Объект] = Неопределено Тогда + Настройки.Перехват.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект)); + КонецЕсли; + + ТипОбъекта = ТипЗнч(Объект); + + Настройки.ТипыПерехватываемыхОбъектов.Вставить(ТипОбъекта, Истина); + + Если ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипОбъекта) Тогда + ТипОбъекта = ЮТТипыДанныхСлужебный.ТипОбъектаСсылки(ТипОбъекта); + Настройки.ТипыПерехватываемыхОбъектов.Вставить(ТипОбъекта, Истина); + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипМенеджера(ТипОбъекта) Тогда +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипОбъекта); + + Если Описание <> Неопределено Тогда + + Если Описание.ОписаниеТипа.Ссылочный Или Описание.ОписаниеТипа.ОбработкаОтчет Тогда + ТипОбъекта = Тип(СтрШаблон("%1Объект.%2", Описание.ОписаниеТипа.Имя, Описание.Имя)); + ИначеЕсли Описание.ОписаниеТипа.Регистр Тогда + ТипОбъекта = Тип(СтрШаблон("%1НаборЗаписей.%2", Описание.ОписаниеТипа.Имя, Описание.Имя)); + КонецЕсли; + + Настройки.ТипыПерехватываемыхОбъектов.Вставить(ТипОбъекта, Истина); + + КонецЕсли; +#КонецЕсли + КонецЕсли; + +КонецПроцедуры + +// Описание параметров перехвата объекта. +// +// Параметры: +// Объект - Произвольный - Объект +// +// Возвращаемое значение: +// Структура - Описание параметров перехвата объекта: +// * Объект - Произвольный +// * Методы - Структура +Функция ОписаниеПараметровПерехватаОбъекта(Объект) Экспорт + + Возврат Новый Структура("Объект, Методы", Объект, Новый Структура); + +КонецФункции + +#КонецОбласти + +#Область Статистика + +Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт + + Вызовы = Настройки().Статистика.Вызовы; + + СтатистикаВызововМетода = Новый Массив(); + Статистика = Вызовы[Объект]; + ТипОбъекта = ТипЗнч(Объект); + + Если Статистика <> Неопределено И Статистика.Свойство(ИмяМетода) Тогда + СтатистикаВызововМетода = Статистика[ИмяМетода]; + ИначеЕсли Статистика = Неопределено И ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипОбъекта) Тогда + СтатистикаВызововМетода = СтатистикаВызововПоСсылке(Вызовы, Объект, ИмяМетода); + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипМенеджера(ТипОбъекта) Тогда +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + СтатистикаВызововМетода = СтатистикаВызововПоМенеджеру(Вызовы, Объект, ИмяМетода); +#КонецЕсли + КонецЕсли; + + Возврат СтатистикаВызововМетода; + +КонецФункции + +Процедура ОчиститьСтатистику() Экспорт + + Настройки = Настройки(); + Настройки.Статистика.Вызовы.Очистить(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт + + ИнициализироватьНастройки(); + +КонецПроцедуры + +Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт + + ОчиститьНастройки(); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОбработкаВызовов + +Функция ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение) + + Если НЕ ПараметрыПерехвата.Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда + Возврат Неопределено; + КонецЕсли; + + ПараметрыПерехватаМетода = ПараметрыПерехвата.Методы[СтруктураВызоваМетода.ИмяМетода]; + + Реакция = НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода); + + Если Реакция = Неопределено ИЛИ Реакция.Действие = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ПрерватьВыполнение = Истина; + + ТипыДействий = ТипыДействийРеакций(); + + Если Реакция.Действие.ТипДействия = ТипыДействий.ВернутьРезультат Тогда + + Реакция.Действие.Обработано = Истина; + Возврат Реакция.Действие.Результат; + + ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВыброситьИсключение Тогда + + Реакция.Действие.Обработано = Истина; + ВызватьИсключение Реакция.Действие.Ошибка; + + ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.Пропустить Тогда + + Реакция.Действие.Обработано = Истина; + Возврат Неопределено; + + ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВызватьОсновнойМетод Тогда + + Реакция.Действие.Обработано = Истина; + ПрерватьВыполнение = Ложь; + + Иначе + + ВызватьИсключение "Неизвестный тип действия реакции"; + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +#КонецОбласти + +Функция НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода) + + ПараметрыВызова = СтруктураВызоваМетода.Параметры; + + ПриоритетыРеакций = Новый Массив(); + ЛучшийПриоритет = 0; + + Для Каждого Реакция Из ПараметрыПерехватаМетода.Реакции Цикл + + ПриоритетРеакции = ПроверитьРеакцию(Реакция, ПараметрыВызова); + + Если ПриоритетРеакции < 0 Тогда + Продолжить; + КонецЕсли; + + ПриоритетыРеакций.Добавить(Новый Структура("Приоритет, Реакция", ПриоритетРеакции, Реакция)); + + Если ЛучшийПриоритет < ПриоритетРеакции Тогда + ЛучшийПриоритет = ПриоритетРеакции; + КонецЕсли; + + КонецЦикла; + + Если ЛучшийПриоритет <= 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Реакция = Неопределено; + + Для Каждого ПриоритетРеакции Из ПриоритетыРеакций Цикл + + Если ПриоритетРеакции.Приоритет = ЛучшийПриоритет Тогда + Реакция = ПриоритетРеакции.Реакция; + Иначе + Продолжить; + КонецЕсли; + + Если Реакция.Действие <> Неопределено И НЕ Реакция.Действие.Обработано Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Реакция; + +КонецФункции + +Функция ПроверитьРеакцию(Реакция, ПараметрыМетода) + + Приоритет = 1; + + Если Реакция.УсловиеРеакции = Неопределено Тогда + Возврат Приоритет; + КонецЕсли; + + Для Инд = 0 По Реакция.УсловиеРеакции.ВГраница() Цикл + + Если НЕ ПроверитьПараметр(ПараметрыМетода[Инд], Реакция.УсловиеРеакции[Инд]) Тогда + + Возврат -1; + + КонецЕсли; + + Приоритет = Приоритет + Реакция.УсловиеРеакции[Инд].Приоритет; + + КонецЦикла; + + Возврат Приоритет; + +КонецФункции + +#Область Настройки + +Процедура ИнициализироватьНастройки() Экспорт + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(КлючНастроек(), НовыеНастройки(), Истина); + +КонецПроцедуры + +// Новые настройки. +// +// Возвращаемое значение: +// Структура - Настройки: +// * Метод - Строка +// * Реакция - Строка +// * Перехват - Соответствие Из Произвольный +// * ТипыПерехватываемыхОбъектов - Соответствие Из Тип +// * Режим - Строка - см. РежимыРаботы +// * Статистика - Структура - Статистика вызовов: +// * Вызовы - Соответствие из Структура +// * ПараметрыОбучения - Структура +// * ПараметрыПроверки - Структура +Функция НовыеНастройки() + + Настройки = Новый Структура; + Настройки.Вставить("Метод"); + Настройки.Вставить("Реакция"); + Настройки.Вставить("Перехват", Новый Соответствие); + Настройки.Вставить("ТипыПерехватываемыхОбъектов", Новый Соответствие); + Настройки.Вставить("Режим", "НеУстановлен"); + Настройки.Вставить("Статистика", Новый Структура("Вызовы", Новый Соответствие)); + + Настройки.Вставить("ПараметрыОбучения", Неопределено); + Настройки.Вставить("ПараметрыПроверки", Неопределено); + + //@skip-check constructor-function-return-section + Возврат Настройки; + +КонецФункции + +Процедура ОчиститьНастройки() Экспорт + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(КлючНастроек(), Неопределено); + +КонецПроцедуры + +Процедура СброситьПараметры() Экспорт + + ИнициализироватьНастройки(); + +КонецПроцедуры + +Функция КлючНастроек() + + Возврат "Mockito"; + +КонецФункции + +Процедура ОчиститьСлужебныеПараметры() + + Настройки = Настройки(); + + Настройки.ПараметрыОбучения = Неопределено; + Настройки.ПараметрыПроверки = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +Функция УсловиеИзПараметров(Параметры) Экспорт + + Если Параметры = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Условия = Новый Массив; + + ТипыУсловий = ТипыУсловийПараметров(); + + Для Каждого Параметр Из Параметры Цикл + + Если ЭтоМаскаПарамера(Параметр) Тогда + + Условия.Добавить(Параметр); + + ИначеЕсли ЮТПредикатыСлужебныйКлиентСервер.ЭтоПредикат(Параметр) Тогда + + Маска = ОписаниеМаскиПараметра(ТипыУсловий.Предикат, 90); + Маска.Вставить("Предикат", ЮТПредикатыСлужебныйКлиентСервер.НаборПредикатов(Параметр)); + Условия.Добавить(Маска); + + Иначе + + Маска = ОписаниеМаскиПараметра(ТипыУсловий.Значение, 100); + Маска.Вставить("Значение", Параметр); + Условия.Добавить(Маска); + + КонецЕсли; + + КонецЦикла; + + Возврат Условия; + +КонецФункции + +#Область Статистика + +// Зарегистрировать вызов метода. +// +// Параметры: +// Настройки - см. ИнициализироватьНастройки +// ПараметрыПерехвата - см. ДанныеПерехвата +// СтруктураВызоваМетода - см. СтруктураВызоваМетода +Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода) + + Объект = СтруктураВызоваМетода.Объект; + ИмяМетода = СтруктураВызоваМетода.ИмяМетода; + Статистика = Настройки.Статистика.Вызовы[Объект]; + + Если Статистика = Неопределено Тогда + + Статистика = Новый Структура; + Настройки.Статистика.Вызовы.Вставить(Объект, Статистика); + + КонецЕсли; + + Если НЕ Статистика.Свойство(ИмяМетода) Тогда + + Статистика.Вставить(ИмяМетода, Новый Массив); + + КонецЕсли; + + Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода); + +КонецПроцедуры + +Функция СтатистикаВызововПоСсылке(Вызовы, Ссылка, ИмяМетода) + + СтатистикаВызововМетода = Новый Массив(); + ТипОбъекта = ЮТТипыДанныхСлужебный.ТипОбъектаСсылки(ТипЗнч(Ссылка)); + + Для Каждого Элемент Из Вызовы Цикл + ПодходящийЭлемент = ТипЗнч(Элемент.Ключ) = ТипОбъекта + И Элемент.Ключ.Ссылка = Ссылка + И Элемент.Значение.Свойство(ИмяМетода); + Если ПодходящийЭлемент Тогда + ЮТКоллекции.ДополнитьМассив(СтатистикаВызововМетода, Элемент.Значение[ИмяМетода]); + КонецЕсли; + КонецЦикла; + + Возврат СтатистикаВызововМетода; + +КонецФункции + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда +Функция СтатистикаВызововПоМенеджеру(Вызовы, Менеджер, ИмяМетода) + + СтатистикаВызововМетода = Новый Массив(); + Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер); + + Если Описание = Неопределено Тогда + Возврат СтатистикаВызововМетода; + КонецЕсли; + + Если Описание.ОписаниеТипа.Ссылочный Или Описание.ОписаниеТипа.ОбработкаОтчет Тогда + ТипОбъекта = Тип(СтрШаблон("%1Объект.%2", Описание.ОписаниеТипа.Имя, Описание.Имя)); + ИначеЕсли Описание.ОписаниеТипа.Регистр Тогда + ТипОбъекта = Тип(СтрШаблон("%1НаборЗаписей.%2", Описание.ОписаниеТипа.Имя, Описание.Имя)); + КонецЕсли; + + Для Каждого Элемент Из Вызовы Цикл + ПодходящийЭлемент = ТипЗнч(Элемент.Ключ) = ТипОбъекта + И Элемент.Значение.Свойство(ИмяМетода); + Если ПодходящийЭлемент Тогда + ЮТКоллекции.ДополнитьМассив(СтатистикаВызововМетода, Элемент.Значение[ИмяМетода]); + КонецЕсли; + КонецЦикла; + + Возврат СтатистикаВызововМетода; + +КонецФункции +#КонецЕсли + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ОМ_КоннекторHTTP.xml b/src/cfe/YAXUnit/CommonModules/ОМ_КоннекторHTTP.xml new file mode 100644 index 0000000..ecac04a --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ОМ_КоннекторHTTP.xml @@ -0,0 +1,23 @@ + + + + + ОМ_КоннекторHTTP + + + ru + О м коннектор HTTP + + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ОМ_КоннекторHTTP/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ОМ_КоннекторHTTP/Ext/Module.bsl new file mode 100644 index 0000000..13e805e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ОМ_КоннекторHTTP/Ext/Module.bsl @@ -0,0 +1,24 @@ +#Область СлужебныйПрограммныйИнтерфейс + +//Используем мок ЮТест.Данные().HTTPСервисЗапрос + +// Регистрация теста в тестовой системе +Процедура ИсполняемыеСценарии() Экспорт + + // Добавляем тест 'ПроверкаМетодаЗапроса' в набор тестов + ЮТТесты.ДобавитьТест("ПроверкаМетодаЗапроса"); + +КонецПроцедуры + +// Процедура тестирования метода HTTP-запроса +Процедура ПроверкаМетодаЗапроса() Экспорт + + // Создание объекта HTTP-запроса с указанием метода GET + Запрос = ЮТест.Данные().HTTPСервисЗапрос().Метод("GET"); + + // Проверка, что метод запроса установлен корректно + ЮТест.ОжидаетЧто(Запрос.HTTPМетод).Равно("GET"); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ОМ_ОбщегоНазаначенияСервер.xml b/src/cfe/YAXUnit/CommonModules/ОМ_ОбщегоНазаначенияСервер.xml new file mode 100644 index 0000000..156e6a6 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ОМ_ОбщегоНазаначенияСервер.xml @@ -0,0 +1,23 @@ + + + + + ОМ_ОбщегоНазаначенияСервер + + + ru + О м общего назаначения сервер + + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ОМ_ОбщегоНазаначенияСервер/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ОМ_ОбщегоНазаначенияСервер/Ext/Module.bsl new file mode 100644 index 0000000..9a104e5 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ОМ_ОбщегоНазаначенияСервер/Ext/Module.bsl @@ -0,0 +1,83 @@ +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ИсполняемыеСценарии() Экспорт + + ЮТТесты + .ДобавитьТестовыйНабор("Тесты функции ОписаниеТипаЧисло") + .ДобавитьТест("ТестДолженСоздатьТипЧисло") + .ДобавитьТест("ТестДолженВернутьОписаниеЧислаСКорректнымЗнаком") + .ДобавитьТест("ТестДолженУстановитьЗнакЛюбойПриОтсутствииЯвнойУказки"); + + ЮТТесты.ДобавитьТест("ТестПолученияТаблицыДатЗаПериод"); + + +КонецПроцедуры + +#КонецОбласти + + +#Область Тесты + +Процедура ТестДолженСоздатьТипЧисло() Экспорт + + Описание = __ОбщегоНазначенияСервер.ОписаниеТипаЧисло(10, 2, ДопустимыйЗнак.Неотрицательный); + ЮТест.ОжидаетЧто(Тип(Описание)).Равно(Тип("Число")); + +КонецПроцедуры + +Процедура ТестДолженВернутьОписаниеЧислаСКорректнымЗнаком() Экспорт + + Описание = __ОбщегоНазначенияСервер.ОписаниеТипаЧисло(10, 2, ДопустимыйЗнак.Неотрицательный); + Проверка = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный)); + + ЮТест.ОжидаетЧто(Проверка).Равно(Проверка); + +КонецПроцедуры + +Процедура ТестДолженУстановитьЗнакЛюбойПриОтсутствииЯвнойУказки() Экспорт + + Описание = __ОбщегоНазначенияСервер.ОписаниеТипаЧисло(10, 2); + Проверка = __ОбщегоНазначенияСервер.ОписаниеТипаЧисло(10, 2, ДопустимыйЗнак.Любой); + + ЮТест.ОжидаетЧто(Описание).Равно(Проверка); + +КонецПроцедуры + +Процедура ТестПолученияТаблицыДатЗаПериод() Экспорт + + НачалоПериода = '20200101'; + ОкончаниеПериода = '20200110'; + Интервал = "День"; + + Результат = __ОбщегоНазначенияСервер.ПолучитьТаблицуДатЗаПериод(НачалоПериода, ОкончаниеПериода, Интервал); + + ОжидаемыйРезультат = Новый ТаблицаЗначений; + ОжидаемыйРезультат.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата")); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200101'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200102'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200103'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200104'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200105'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200106'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200107'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200108'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200109'); + ДобавитьСтрокуВТаблицу(ОжидаемыйРезультат, '20200110'); + + ЮТест.ОжидаетЧто(Результат.Количество()).Равно(ОжидаемыйРезультат.Количество()); + + Для каждого Строка Из Результат Цикл + ЮТест.ОжидаетЧто(Строка.Период).Равно(ОжидаемыйРезультат[Результат.Индекс(Строка)].Период); + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьСтрокуВТаблицу(Таблица, Дата) Экспорт + + Строка = Таблица.Добавить(); + Строка.Период = Дата; + +КонецПроцедуры + +#КонецОбласти + diff --git a/src/cfe/YAXUnit/CommonModules/ЮТАсинхроннаяОбработкаСлужебныйКлиент.xml b/src/cfe/YAXUnit/CommonModules/ЮТАсинхроннаяОбработкаСлужебныйКлиент.xml new file mode 100644 index 0000000..1a24a9d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТАсинхроннаяОбработкаСлужебныйКлиент.xml @@ -0,0 +1,23 @@ + + + + + ЮТАсинхроннаяОбработкаСлужебныйКлиент + + + ru + Асинхронная обработка служебный + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТАсинхроннаяОбработкаСлужебныйКлиент/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТАсинхроннаяОбработкаСлужебныйКлиент/Ext/Module.bsl new file mode 100644 index 0000000..655790a --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТАсинхроннаяОбработкаСлужебныйКлиент/Ext/Module.bsl @@ -0,0 +1,100 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ВызватьОбработчик(Обработчик, Результат = Неопределено) Экспорт + + Если Обработчик <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Обработчик, Результат); + КонецЕсли; + +КонецПроцедуры + +Процедура ВызватьСледующийОбработчик(ПараметрыИсполнения, Результат = Неопределено) Экспорт + + Обработчик = СледующийОбработчик(ПараметрыИсполнения); + ЮТЛогирование.Отладка("Вызов обработчика исполнителя: " + Обработчик.ИмяПроцедуры); + ВызватьОбработчик(Обработчик, Результат); + +КонецПроцедуры + +Функция СледующийОбработчик(ПараметрыИсполнения) Экспорт + + ПараметрыИсполнения.ИндексСледующегоОбработчика = ПараметрыИсполнения.ИндексСледующегоОбработчика + 1; + Обработчик = ПараметрыИсполнения.Цепочка[ПараметрыИсполнения.ИндексСледующегоОбработчика]; + ЮТЛогирование.Отладка("Следующий обработчик исполнителя: " + Обработчик.ИмяПроцедуры); + + Возврат Обработчик; + +КонецФункции + +Функция ТекущийОбработчик(ПараметрыИсполнения) Экспорт + + Возврат ПараметрыИсполнения.Цепочка[ПараметрыИсполнения.ИндексСледующегоОбработчика]; + +КонецФункции + + Процедура ДобавитьОбработчикЦепочки(ПараметрыИсполнения, Модуль, ИмяМетода) Экспорт + + Обработчик = Новый ОписаниеОповещения(ИмяМетода, Модуль, ПараметрыИсполнения); + ПараметрыИсполнения.Цепочка.Добавить(Обработчик); + +КонецПроцедуры + +Функция ЦепочкаАсинхроннойОбработки() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("Цепочка", Новый Массив()); + Параметры.Вставить("ИндексСледующегоОбработчика", -1); + + Возврат Параметры; + +КонецФункции + +Функция НовыйПустойОбработчик(КоличествоПараметров = 1) Экспорт + + МаксимальноеДопустимоеЧислоПараметров = 3; + + Если КоличествоПараметров >= 1 И КоличествоПараметров <= МаксимальноеДопустимоеЧислоПараметров Тогда + Возврат Новый ОписаниеОповещения("ПустойОбработчик" + КоличествоПараметров, ЭтотОбъект); + Иначе + ВызватьИсключение СтрШаблон("Пустой обработчик с %1 параметрами не реализован", КоличествоПараметров); + КонецЕсли; + +КонецФункции + +//@skip-check module-empty-method +//@skip-check doc-comment-parameter-section +Процедура ПустойОбработчик1(Параметр1) Экспорт + +КонецПроцедуры + +//@skip-check module-empty-method +//@skip-check doc-comment-parameter-section +Процедура ПустойОбработчик2(Параметр1, Параметр2) Экспорт + +КонецПроцедуры + +//@skip-check module-empty-method +//@skip-check doc-comment-parameter-section +Процедура ПустойОбработчик3(Параметр1, Параметр2, Параметр3) Экспорт + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЗапросы.xml b/src/cfe/YAXUnit/CommonModules/ЮТЗапросы.xml new file mode 100644 index 0000000..2b5f853 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЗапросы.xml @@ -0,0 +1,23 @@ + + + + + ЮТЗапросы + + + ru + Запросы + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЗапросы/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЗапросы/Ext/Module.bsl new file mode 100644 index 0000000..5bc5a6a --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЗапросы/Ext/Module.bsl @@ -0,0 +1,238 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +/////////////////////////////////////////////////////////////////// +// Расширяет возможности тестирования, +// позволяет в упрощенной форме получать данны из информационной базы +// как с сервера так и с клиента. +/////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Возвращает значения реквизитов ссылки +// +// Параметры: +// Ссылка - ЛюбаяСсылка +// ИменаРеквизитов - Строка - Имена получаемых реквизитов, разделенные запятой. +// Важно, нельзя указывать реквизиты через точку. +// +// Возвращаемое значение: +// Структура Из Произвольный - Значения реквизитов ссылки +Функция ЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт + + //@skip-check constructor-function-return-section + Возврат ЮТЗапросыСлужебныйВызовСервера.ЗначенияРеквизитов(Ссылка, ИменаРеквизитов, Ложь); + +КонецФункции + +// Возвращает значение реквизита ссылки +// +// Параметры: +// Ссылка - ЛюбаяСсылка +// ИмяРеквизита - Строка - Имя получаемого реквизита, можно указать путь к вложенному реквизиту через точку +// +// Возвращаемое значение: +// Произвольный - Значение реквизита ссылки +Функция ЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт + + Возврат ЮТЗапросыСлужебныйВызовСервера.ЗначенияРеквизитов(Ссылка, ИмяРеквизита, Истина); + +КонецФункции + +// Возвращает первую запись таблицы соответствующую условиям +// +// Параметры: +// ИмяТаблицы - Строка - Имя таблицы базы +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// - Неопределено - Проверит, что таблица не пустая +// Возвращаемое значение: +// Структура, Неопределено - Содержит все данные записи, включая табличный части +Функция Запись(ИмяТаблицы, Предикат) Экспорт + + ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, "*"); + //@skip-check constructor-function-return-section + Возврат ЮТЗапросыСлужебныйВызовСервера.Записи(ОписаниеЗапроса, Истина); + +КонецФункции + +// Возвращает записи таблицы соответствующую условиям +// +// Параметры: +// ИмяТаблицы - Строка - Имя таблицы базы +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// - Неопределено - Проверит, что таблица не пустая +// Возвращаемое значение: +// Массив из Структура - Найденные записи, включая табличный части +Функция Записи(ИмяТаблицы, Предикат) Экспорт + + ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, "*"); + Возврат ЮТЗапросыСлужебныйВызовСервера.Записи(ОписаниеЗапроса, Ложь); + +КонецФункции + +// Возвращает значения реквизитов первой записи таблицы, соответствующей условиям +// +// Параметры: +// ИмяТаблицы - Строка +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ИменаРеквизитов - Строка - Имена получаемых реквизитов +// +// Возвращаемое значение: +// Произвольный - Значение реквизита записи +// +Функция ЗначенияРеквизитовЗаписи(ИмяТаблицы, Предикат, ИменаРеквизитов) Экспорт + + ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, ИменаРеквизитов); + Возврат ЮТЗапросыСлужебныйВызовСервера.ЗначенияРеквизитовЗаписи(ОписаниеЗапроса, Ложь); + +КонецФункции + +// Возвращает значение реквизита первой записи таблицы, соответствующей условиям +// +// Параметры: +// ИмяТаблицы - Строка +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ИмяРеквизита - Строка - Имя получаемого реквизита +// +// Возвращаемое значение: +// Структура Из Произвольный - Значения реквизитов записи +// +Функция ЗначениеРеквизитаЗаписи(ИмяТаблицы, Предикат, ИмяРеквизита) Экспорт + + ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, ИмяРеквизита); + //@skip-check constructor-function-return-section + Возврат ЮТЗапросыСлужебныйВызовСервера.ЗначенияРеквизитовЗаписи(ОписаниеЗапроса, Истина); + +КонецФункции + +// Вернет признак содержит ли таблица записи удовлетворяющие переданным условиям +// +// Параметры: +// ИмяТаблицы - Строка - Имя таблицы базы +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// - Неопределено - Проверит, что таблица не пустая +// Возвращаемое значение: +// Булево - Таблица содержит записи +Функция ТаблицаСодержитЗаписи(ИмяТаблицы, Предикат = Неопределено) Экспорт + + ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат); + Возврат НЕ РезультатПустой(ОписаниеЗапроса); + +КонецФункции + +// Возвращает результат выполнения простого запроса. +// +// Параметры: +// ОписаниеЗапроса - см. ОписаниеЗапроса +// +// Возвращаемое значение: +// - ТаблицаЗначений - Результат запроса для сервера +// - Массив из Структура - Результат запроса для клиента +Функция РезультатЗапроса(ОписаниеЗапроса) Экспорт + +#Если Клиент Тогда + Возврат ЮТЗапросыСлужебныйВызовСервера.РезультатЗапроса(ОписаниеЗапроса, Истина); +#Иначе + Возврат ЮТЗапросыСлужебныйВызовСервера.РезультатЗапроса(ОписаниеЗапроса, Ложь); +#КонецЕсли + +КонецФункции + +// Определяет, есть ли в результате записи +// +// Параметры: +// ОписаниеЗапроса - см. ОписаниеЗапроса +// +// Возвращаемое значение: +// Булево - Результат пустой +Функция РезультатПустой(ОписаниеЗапроса) Экспорт + + Возврат ЮТЗапросыСлужебныйВызовСервера.РезультатПустой(ОписаниеЗапроса); + +КонецФункции + +// Описание простого запроса +// +// Возвращаемое значение: +// Структура - Описание запроса: +// * ИмяТаблицы - Строка - Имя таблицы, из которой нужно получить данные +// * ВыбираемыеПоля - Массив из Строка - Выражения выбираемых полей +// * КоличествоЗаписей - Число, Неопределено - Ограничение количества выбираемых записей +// * Условия - Массив из Строка - Коллекция выражений условий, которые будут объединены через `И` +// * ЗначенияПараметров - Структура - Набор параметров запроса +// * Порядок - Массив из Строка - Поля сортировки +Функция ОписаниеЗапроса() Экспорт + + Описание = Новый Структура(); + Описание.Вставить("ИмяТаблицы", ""); + Описание.Вставить("ВыбираемыеПоля", Новый Массив); + Описание.Вставить("КоличествоЗаписей", Неопределено); + Описание.Вставить("Условия", Новый Массив()); + Описание.Вставить("Порядок", Новый Массив()); + Описание.Вставить("ЗначенияПараметров", Новый Структура()); + + //@skip-check constructor-function-return-section + Возврат Описание; + +КонецФункции + +Функция НовыйОписаниеЗапроса(ИмяТаблицы, ПредикатыУсловия, ВыбираемыеПоля) Экспорт + + Возврат ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, ПредикатыУсловия, ВыбираемыеПоля); + +КонецФункции + +// Возвращает коллекцию движений документа +// +// Параметры: +// Документ - ДокументСсылка +// ИмяРегистра - Строка - Короткое или полное имя регистра движений +// +// Возвращаемое значение: +// Массив из Структура - Движения документа для клиента +// ТаблицаЗначений - Движения документа для сервера +Функция ДвиженияДокумента(Документ, Знач ИмяРегистра) Экспорт + + Если СтрНайти(ИмяРегистра, ".") = 0 Тогда + РегистрыДвижения = ЮТМетаданные.РегистрыДвиженийДокумента(Документ); + + Если НЕ РегистрыДвижения.Свойство(ИмяРегистра) Тогда + ВызватьИсключение "Документ не делает движений по регистру " + ИмяРегистра; + КонецЕсли; + + ИмяРегистра = РегистрыДвижения[ИмяРегистра]; + КонецЕсли; + + Предикат = ЮТест.Предикат().Реквизит("Регистратор").Равно(Документ); + ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяРегистра, Предикат, "*"); + ОписаниеЗапроса.Порядок.Добавить("НомерСтроки"); + + Возврат ЮТЗапросыСлужебныйВызовСервера.Записи(ОписаниеЗапроса, Ложь); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйВызовСервера.xml new file mode 100644 index 0000000..48b0fd1 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТЗапросыСлужебныйВызовСервера + + + ru + Запросы вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..dc1e0ec --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,397 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция РезультатЗапроса(Знач ОписаниеЗапроса, Знач ДляКлиента) Экспорт + + Запрос = Запрос(ОписаниеЗапроса); + РезультатЗапроса = Запрос.Выполнить(); + + Возврат ВыгрузитьРезультатЗапроса(РезультатЗапроса, ДляКлиента); + +КонецФункции + +// Результат пустой. +// +// Параметры: +// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса +// +// Возвращаемое значение: +// Булево - Результат пустой +Функция РезультатПустой(Знач ОписаниеЗапроса) Экспорт + + Запрос = Запрос(ОписаниеЗапроса); + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Пустой(); + +КонецФункции + +// Возвращает значения реквизитов ссылки +// +// Параметры: +// Ссылка - ЛюбаяСсылка +// ИменаРеквизитов - Строка +// ОдинРеквизит - Булево +// +// Возвращаемое значение: +// - Структура Из Произвольный - Значения реквизитов ссылки при получении значений множества реквизитов +// - Произвольный - Значение реквизита ссылки при получении значения одного реквизита +Функция ЗначенияРеквизитов(Знач Ссылка, Знач ИменаРеквизитов, Знач ОдинРеквизит) Экспорт + + ИмяТаблицы = Ссылка.Метаданные().ПолноеИмя(); + + ТекстЗапроса = СтрШаблон("ВЫБРАТЬ ПЕРВЫЕ 1 %1 ИЗ %2 ГДЕ Ссылка = &Ссылка", ИменаРеквизитов, ИмяТаблицы); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + + Если ОдинРеквизит Тогда + Возврат ЗначениеИзЗапроса(Запрос, 0); + Иначе + Возврат ЗначенияИзЗапроса(Запрос, ИменаРеквизитов); + КонецЕсли; + +КонецФункции + +// Возвращяет записи результат запроса +// +// Параметры: +// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса +// ОднаЗапись - Булево - Вернуть первую запись +// +// Возвращаемое значение: +// Массив из Структура, Структура, Неопределено - Записи +Функция Записи(Знач ОписаниеЗапроса, Знач ОднаЗапись) Экспорт + + Если ОднаЗапись Тогда + ОписаниеЗапроса.КоличествоЗаписей = 1; + КонецЕсли; + + Запрос = Запрос(ОписаниеЗапроса); + РезультатЗапроса = Запрос.Выполнить(); + + Записи = ВыгрузитьРезультатЗапроса(РезультатЗапроса, Истина); + + Если НЕ ОднаЗапись Тогда + Возврат Записи; + ИначеЕсли Записи.Количество() Тогда + Возврат Записи[0]; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Возвращает значения реквизитов записи +// +// Параметры: +// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса +// ОдинРеквизит - Булево +// +// Возвращаемое значение: +// - Структура Из Произвольный - Значения множества реквизитов записи +// - Произвольный - Значение одного реквизита записи +// +Функция ЗначенияРеквизитовЗаписи(Знач ОписаниеЗапроса, Знач ОдинРеквизит) Экспорт + + Запись = Записи(ОписаниеЗапроса, Истина); + + Если ТипЗнч(Запись) <> Тип("Структура") Тогда + Если ОдинРеквизит Тогда + Возврат Неопределено; + Иначе + Реквизиты = СтрСоединить(ПсевдонимыВыбираемыхПолей(ОписаниеЗапроса), ","); + Возврат Новый Структура(Реквизиты); + КонецЕсли; + КонецЕсли; + + Если ОдинРеквизит Тогда + Для Каждого КлючЗнач Из Запись Цикл + Возврат КлючЗнач.Значение; + КонецЦикла; + Иначе + Возврат Запись; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Запрос. +// +// Параметры: +// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса +// +// Возвращаемое значение: +// Запрос +Функция Запрос(ОписаниеЗапроса) + + Запрос = Новый Запрос; + + Строки = Новый Массив(); + Строки.Добавить("ВЫБРАТЬ "); + + Если ОписаниеЗапроса.КоличествоЗаписей <> Неопределено Тогда + Строки.Добавить("ПЕРВЫЕ " + ЮТОбщий.ЧислоВСтроку(ОписаниеЗапроса.КоличествоЗаписей)); + КонецЕсли; + + Если ОписаниеЗапроса.ВыбираемыеПоля.Количество() Тогда + ВыбираемыеПоля = ОписаниеЗапроса.ВыбираемыеПоля; + Иначе + ВыбираемыеПоля = ЮТКоллекции.ЗначениеВМассиве("1 КАК Поле"); + КонецЕсли; + + Строки.Добавить(СтрСоединить(ВыбираемыеПоля, "," + Символы.ПС)); + Строки.Добавить("ИЗ " + ОписаниеЗапроса.ИмяТаблицы); + + Условия = СформироватьУсловия(ОписаниеЗапроса.Условия, ОписаниеЗапроса.ИмяТаблицы, Запрос); + + Если Условия.Количество() Тогда + Строки.Добавить("ГДЕ ("); + Строки.Добавить(СтрСоединить(Условия, ") И (" + Символы.ПС)); + Строки.Добавить(")"); + КонецЕсли; + + Если ОписаниеЗапроса.Порядок.Количество() Тогда + Строки.Добавить("УПОРЯДОЧИТЬ ПО "); + Строки.Добавить(СтрСоединить(ОписаниеЗапроса.Порядок, ",")); + КонецЕсли; + + Запрос.Текст = СтрСоединить(Строки, Символы.ПС); + ЮТКоллекции.ДополнитьСтруктуру(Запрос.Параметры, ОписаниеЗапроса.ЗначенияПараметров); + + Возврат Запрос; + +КонецФункции + +Функция ЗначенияИзЗапроса(Запрос, Реквизиты) + + Результат = Новый Структура(Реквизиты); + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Результат, Выборка); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЗначениеИзЗапроса(Запрос, Реквизит) + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Выборка[Реквизит]; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Функция ВыгрузитьРезультатЗапроса(РезультатЗапроса, ВМассив) + + Если НЕ ВМассив Тогда + Возврат РезультатЗапроса.Выгрузить(); + Иначе + Результат = Новый Массив(); + КонецЕсли; + + Если РезультатЗапроса.Пустой() Тогда + Возврат Результат; + КонецЕсли; + + Реквизиты = Новый Массив(); + ТабличныеЧасти = Новый Массив(); + + ТипРезультатЗапроса = Тип("РезультатЗапроса"); + Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл + + Реквизиты.Добавить(Колонка.Имя); + + Если Колонка.ТипЗначения.СодержитТип(ТипРезультатЗапроса) Тогда + ТабличныеЧасти.Добавить(Колонка.Имя); + КонецЕсли; + + КонецЦикла; + + ПараметрыКонструктора = СтрСоединить(Реквизиты, ","); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Запись = Новый Структура(ПараметрыКонструктора); + ЗаполнитьЗначенияСвойств(Запись, Выборка); + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + Запись[ТабличнаяЧасть] = ВыгрузитьРезультатЗапроса(Выборка[ТабличнаяЧасть], ВМассив); + КонецЦикла; + + Результат.Добавить(Запись); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПсевдонимыВыбираемыхПолей(ОписаниеЗапроса) + + Псевдонимы = Новый Массив; + + Запрос = Запрос(ОписаниеЗапроса); + + СхемаЗапроса = Новый СхемаЗапроса(); + СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст); + + Для Каждого ЗапросСЗ Из СхемаЗапроса.ПакетЗапросов Цикл + Для Каждого КолонкаСЗ Из ЗапросСЗ.Колонки Цикл + Псевдонимы.Добавить(КолонкаСЗ.Псевдоним); + КонецЦикла; + КонецЦикла; + + Возврат Псевдонимы; + +КонецФункции + +Функция ШаблонУсловия(ВыражениеПредиката, ВыраженияПредикатов, ТипРеквизита) + Выражение = ВыражениеПредиката.ВидСравнения; + + Отрицание = ЮТПредикатыСлужебныйКлиентСервер.ЭтоВыраженияОтрицания(Выражение); + Если Отрицание Тогда + Выражение = ЮТПредикатыСлужебныйКлиентСервер.ВыраженияБезОтрицания(Выражение); + КонецЕсли; + + Если Выражение = ВыраженияПредикатов.Равно Тогда + Если ЭтоСтрокаНеограниченнойДлинны(ТипРеквизита) Тогда + Шаблон = СтрШаблон("ВЫРАЗИТЬ(%%1 КАК Строка(%1)) = &%%2", XMLСтрока(СтрДлина(ВыражениеПредиката.Значение) + 1)); + Иначе + Шаблон = "%1 = &%2"; + КонецЕсли; + ИначеЕсли Выражение = ВыраженияПредикатов.Больше Тогда + Шаблон = "%1 > &%2"; + ИначеЕсли Выражение = ВыраженияПредикатов.БольшеРавно Тогда + Шаблон = "%1 >= &%2"; + ИначеЕсли Выражение = ВыраженияПредикатов.Меньше Тогда + Шаблон = "%1 < &%2"; + ИначеЕсли Выражение = ВыраженияПредикатов.МеньшеРавно Тогда + Шаблон = "%1 <= &%2"; + ИначеЕсли Выражение = ВыраженияПредикатов.ИмеетТип Тогда + Шаблон = "ТИПЗНАЧЕНИЯ(%1) = &%2"; + ИначеЕсли Выражение = ВыраженияПредикатов.Содержит Тогда + Шаблон = "%1 ПОДОБНО ""%%"" + &%2 + ""%%"""; + ИначеЕсли Выражение = ВыраженияПредикатов.ВСписке Тогда + Шаблон = "%1 В (&%2)"; + ИначеЕсли Выражение = ВыраженияПредикатов.Заполнено Тогда + // TODO Реализовать + ВызватьИсключение "Проверка заполненности пока не поддерживается"; + Иначе + ВызватьИсключение "Неподдерживаемое выражения предикатов " + Выражение; + КонецЕсли; + + Если Отрицание Тогда + Шаблон = СтрШаблон("НЕ (%1)", Шаблон); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +Функция ТипыРеквизитов(ИмяТаблицы, Предикаты) + + Результат = Новый Соответствие(); + Реквизиты = Новый Массив(); + + ПсевдонимТаблицы = ЮТТестовыеДанные.СлучайныйИдентификатор() + СтрЗаменить(ИмяТаблицы, ".", ""); + ДлинаПсевдонима = СтрДлина(ПсевдонимТаблицы); + + Для Каждого ВыражениеПредиката Из Предикаты Цикл + Если ЮТПредикатыСлужебныйКлиентСервер.ЭтоПредикат(ВыражениеПредиката) И ЗначениеЗаполнено(ВыражениеПредиката.ИмяРеквизита) Тогда + Реквизиты.Добавить(СтрШаблон("%1.%2 КАК _%3", ПсевдонимТаблицы, ВыражениеПредиката.ИмяРеквизита, Реквизиты.Количество())); + КонецЕсли; + КонецЦикла; + + Если НЕ ЗначениеЗаполнено(Реквизиты) Тогда + Возврат Результат; + КонецЕсли; + + Схема = Новый СхемаЗапроса(); + + Попытка + Схема.УстановитьТекстЗапроса(СтрШаблон("ВЫБРАТЬ %1 ИЗ %2 КАК %3", СтрСоединить(Реквизиты, ","), ИмяТаблицы, ПсевдонимТаблицы)); + Исключение + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Не удалось получить типы реквизитов отбора. + |Возможно имена реквизитов заданы неверно"); + ВызватьИсключение; + КонецПопытки; + + Для Каждого Колонка Из Схема.ПакетЗапросов[0].Колонки Цикл + Выражение = Строка(Колонка.Поля[0]); + Результат.Вставить(Сред(Выражение, ДлинаПсевдонима + 2), Новый ОписаниеТипов(Колонка.ТипЗначения, , "Null")); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ЭтоСтрокаНеограниченнойДлинны(ТипРеквизита) + + Возврат ТипРеквизита <> Неопределено + И ТипРеквизита.СодержитТип(Тип("Строка")) + И ТипРеквизита.КвалификаторыСтроки.Длина = 0; + +КонецФункции + +Функция СформироватьУсловия(Условия, ИмяТаблицы, Запрос) Экспорт + + Результат = Новый Массив(); + + Если НЕ ЗначениеЗаполнено(Условия) Тогда + Возврат Результат; + КонецЕсли; + + ТипыРеквизитов = ТипыРеквизитов(ИмяТаблицы, Условия); + ВидыСравнения = ЮТПредикаты.Выражения(); + + Для Каждого Условие Из Условия Цикл + + Если НЕ ЮТПредикатыСлужебныйКлиентСервер.ЭтоПредикат(Условие) Тогда + Результат.Добавить(Условие); + Продолжить; + КонецЕсли; + + ИмяПараметра = "Параметр_" + ЮТОбщий.ЧислоВСтроку(Запрос.Параметры.Количество() + 1); + ТипРеквизита = ТипыРеквизитов[Условие.ИмяРеквизита]; + Шаблон = ШаблонУсловия(Условие, ВидыСравнения, ТипРеквизита); + + ТекстУсловия = СтрШаблон(Шаблон, Условие.ИмяРеквизита, ИмяПараметра); + + Результат.Добавить(ТекстУсловия); + Запрос.Параметры.Вставить(ИмяПараметра, Условие.Значение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйКлиентСервер.xml b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйКлиентСервер.xml new file mode 100644 index 0000000..831a9a1 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ЮТЗапросыСлужебныйКлиентСервер + + + ru + Запросы клиент сервер + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйКлиентСервер/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..42f7360 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЗапросыСлужебныйКлиентСервер/Ext/Module.bsl @@ -0,0 +1,71 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ОписаниеЗапроса(ИмяТаблицы, ПредикатыУсловия, ВыбираемыеПоля = Неопределено) Экспорт + + Описание = ЮТЗапросы.ОписаниеЗапроса(); + Описание.ИмяТаблицы = ИмяТаблицы; + Если ВыбираемыеПоля = Неопределено Тогда + Описание.ВыбираемыеПоля.Добавить("1 КАК Проверка"); + Иначе + ЗаполнитьВыбираемыеПоля(Описание, ВыбираемыеПоля); + КонецЕсли; + + Если ПредикатыУсловия <> Неопределено Тогда + Описание.Условия = ЮТПредикатыСлужебныйКлиентСервер.НаборПредикатов(ПредикатыУсловия); + КонецЕсли; + + Возврат Описание; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаполнитьВыбираемыеПоля(ОписаниеЗапроса, Знач ВыбираемыеПоля) + + ТипПараметра = ТипЗнч(ВыбираемыеПоля); + + Если ТипПараметра = Тип("Строка") Тогда + ВыбираемыеПоля = ЮТСтроки.РазделитьСтроку(ВыбираемыеПоля, ","); + ТипПараметра = Тип("Массив"); + КонецЕсли; + + Если ТипПараметра = Тип("Массив") Тогда + + ОписаниеЗапроса.ВыбираемыеПоля = ВыбираемыеПоля; + + ИначеЕсли ТипПараметра = Тип("Структура") Тогда + + Для Каждого Поле Из ВыбираемыеПоля Цикл + Выражение = СтрШаблон("%1 КАК %2", Поле.Значение, Поле.Ключ); + ОписаниеЗапроса.ВыбираемыеПоля.Добавить(Выражение); + КонецЦикла; + + Иначе + + ВызватьИсключение ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТЗапросыКлиентСервер.ЗаполнитьВыбираемыеПоля", ВыбираемыеПоля); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсключения.xml b/src/cfe/YAXUnit/CommonModules/ЮТИсключения.xml new file mode 100644 index 0000000..592a9aa --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсключения.xml @@ -0,0 +1,23 @@ + + + + + ЮТИсключения + + + ru + Исключения + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсключения/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТИсключения/Ext/Module.bsl new file mode 100644 index 0000000..58f1621 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсключения/Ext/Module.bsl @@ -0,0 +1,64 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Формирует текст исключения о некорректных параметрах вызова метода +// +// Параметры: +// ИмяМетода - Строка +// Пояснение - Строка +// +// Возвращаемое значение: +// Строка - Текст исключения +Функция НекорректныеПараметрыМетода(ИмяМетода, Пояснение = Неопределено) Экспорт + + Сообщение = СтрШаблон("Некорректные параметры метода `%1`"); + Возврат ЮТСтроки.ДобавитьСтроку(Сообщение, Пояснение, ", "); + +КонецФункции + +// Формирует текст исключения о неподдерживаемом значении параметра вызова метода +// +// Параметры: +// ИмяМетода - Строка +// ЗначениеПараметра - Произвольный +// +// Возвращаемое значение: +// Строка - Текст исключения +Функция НеподдерживаемыйПараметрМетода(ИмяМетода, ЗначениеПараметра) Экспорт + + Возврат СтрШаблон("Неподдерживаемый параметр метода `%1` `%2`(%3)", ИмяМетода, ЗначениеПараметра, ТипЗнч(ЗначениеПараметра)); + +КонецФункции + +// Формирует текст исключения о недоступности метода в указанном контексте +// +// Параметры: +// ИмяМетода - Строка +// ИмяКонтекста - Строка +// +// Возвращаемое значение: +// Строка - Текст исключения +Функция МетодНеДоступен(ИмяМетода, ИмяКонтекста = "веб-клиенте") Экспорт + + Возврат СтрШаблон("Метод `%1` не доступен в/на %2", ИмяМетода, ИмяКонтекста); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйВызовСервера.xml new file mode 100644 index 0000000..0ea2d97 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТИсполнительСлужебныйВызовСервера + + + ru + Исполнитель тестов (сервер) + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..2784093 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,36 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// ПрогонНаборов +// Выполняет тесты наборов модуля. Возвращает результат прогона +// Это обертка для прогона на сервере +// Параметры: +// Наборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов - Наборы исполняемых тестов, структуру набора см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// +// Возвращаемое значение: +// Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов - Результат прогона наборов тестов, структура набора см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +Функция ВыполнитьГруппуНаборовТестов(Знач Наборы, Знач ТестовыйМодуль) Экспорт + + Возврат ЮТИсполнительСлужебныйКлиентСервер.ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйГлобальный.xml b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйГлобальный.xml new file mode 100644 index 0000000..3723f56 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйГлобальный.xml @@ -0,0 +1,23 @@ + + + + + ЮТИсполнительСлужебныйГлобальный + + + ru + Исполнитель глобальный + + + + true + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйГлобальный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйГлобальный/Ext/Module.bsl new file mode 100644 index 0000000..366aba7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйГлобальный/Ext/Module.bsl @@ -0,0 +1,27 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ЮТВыполнитьМодульноеТестирование() Экспорт + + ЮТИсполнительСлужебныйКлиент.ВыполнитьМодульноеТестирование(); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиент.xml b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиент.xml new file mode 100644 index 0000000..5e0ee0f --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиент.xml @@ -0,0 +1,23 @@ + + + + + ЮТИсполнительСлужебныйКлиент + + + ru + Исполнитель клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиент/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиент/Ext/Module.bsl new file mode 100644 index 0000000..25dd1f1 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиент/Ext/Module.bsl @@ -0,0 +1,461 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ВыполнитьМодульноеТестирование() Экспорт + + ПараметрыИсполнения = ПараметрыИсполнения(); + ПараметрыИсполнения.АргументыЗапуска = ПараметрЗапуска; + + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьПараметры"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикАнализПараметровЗапуска"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПодключитьКомпоненты"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикИнициализация"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьОтчет"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьКодВозврата"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗавершить"); + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыИсполнения); + +КонецПроцедуры + +Процедура ВыполнитьМодульноеТестированиеПоНастройке(ПараметрыЗапуска, ОбработчикЗавершения) Экспорт + + ПараметрыИсполнения = ПараметрыИсполнения(); + ПараметрыИсполнения.ПараметрыЗапуска = ПараметрыЗапуска; + + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикИнициализация"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование"); + ПараметрыИсполнения.Цепочка.Добавить(ОбработчикЗавершения); + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыИсполнения); + +КонецПроцедуры + +Функция ПараметрыИсполнения() Экспорт + + Параметры = ЮТАсинхроннаяОбработкаСлужебныйКлиент.ЦепочкаАсинхроннойОбработки(); + Параметры.Вставить("АргументыЗапуска"); + Параметры.Вставить("ПараметрыЗапуска"); + Параметры.Вставить("ИсполняемыеТестовыеМодули"); + Параметры.Вставить("РезультатыТестирования"); + + Возврат Параметры; + +КонецФункции + +Функция ВыполнитьТестыМодуля(ТестовыйМодуль) Экспорт + + Результаты = Новый Массив(); + + КонтекстыИсполнения = ЮТФабрика.КонтекстыИсполнения(); + + КлиентскиеНаборы = Новый Массив(); + СерверныеНаборы = Новый Массив(); + ПропущенныеНаборы = Новый Массив(); + + Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл + + Если НЕ Набор.Выполнять Тогда + ПропущенныеНаборы.Добавить(Набор); + Продолжить; + КонецЕсли; + + РежимИсполнения = ЮТФабрикаСлужебный.КонтекстИсполнения(Набор.Режим); + + Если РежимИсполнения = КонтекстыИсполнения.Клиент Тогда + КлиентскиеНаборы.Добавить(Набор); + ИначеЕсли РежимИсполнения = КонтекстыИсполнения.Сервер Тогда + СерверныеНаборы.Добавить(Набор); + Иначе + ПропущенныеНаборы.Добавить(Набор); + КонецЕсли; + + КонецЦикла; + + ТестовыйМодульОблегченный = ЮТКоллекции.СкопироватьСтруктуру(ТестовыйМодуль); + ТестовыйМодульОблегченный.НаборыТестов = Новый Массив(); + + Если ЗначениеЗаполнено(КлиентскиеНаборы) Тогда + Результаты = ЮТИсполнительСлужебныйКлиентСервер.ВыполнитьГруппуНаборовТестов(КлиентскиеНаборы, ТестовыйМодульОблегченный); + КонецЕсли; + + Если ЗначениеЗаполнено(СерверныеНаборы) Тогда + Результат = ЮТИсполнительСлужебныйВызовСервера.ВыполнитьГруппуНаборовТестов(СерверныеНаборы, ТестовыйМодульОблегченный); + ЮТЛогированиеСлужебный.ВывестиСерверныеСообщения(); + ЮТКоллекции.ДополнитьМассив(Результаты, Результат); + КонецЕсли; + + ЮТКоллекции.ДополнитьМассив(Результаты, ПропущенныеНаборы); + + ТестовыйМодульОблегченный.НаборыТестов = Результаты; + + Возврат ТестовыйМодульОблегченный; + +КонецФункции + +Процедура ОбработкаОшибки(ТекстОшибки) Экспорт + ВызватьИсключение ТекстОшибки; +КонецПроцедуры + +Процедура ВыполнитьИнициализацию(ПараметрыЗапуска) Экспорт + + ЮТКонтекстСлужебный.ИнициализироватьКонтекст(); + ЮТКонтекстСлужебный.УстановитьГлобальныеНастройкиВыполнения(ПараметрыЗапуска.settings); + // Повторно сохраним для передачи на сервер + ЮТКонтекстСлужебный.УстановитьГлобальныеНастройкиВыполнения(ЮТКонтекстСлужебный.ГлобальныеНастройкиВыполнения()); + + ЮТСобытияСлужебный.Инициализация(ПараметрыЗапуска); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОбработчикиЦепочкиДействий + +Процедура ОбработчикОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт + + // TODO Подумать надо ли и как реализовать нормально + +КонецПроцедуры + +Процедура ОбработчикЗагрузитьПараметры(Результат, ДополнительныеПараметры) Экспорт + + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры); + ЮТПараметрыЗапускаСлужебный.ПараметрыЗапуска(ДополнительныеПараметры.АргументыЗапуска, Обработчик); + +КонецПроцедуры + +Процедура ОбработчикАнализПараметровЗапуска(ПараметрыЗапуска, ДополнительныеПараметры) Экспорт + + ДополнительныеПараметры.ПараметрыЗапуска = ПараметрыЗапуска; + + Если НЕ ПараметрыЗапуска.ВыполнятьМодульноеТестирование Тогда + Возврат; + КонецЕсли; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОбработчикИнициализация(Результат, ДополнительныеПараметры) Экспорт + + ВыполнитьИнициализацию(ДополнительныеПараметры.ПараметрыЗапуска); + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОбработчикЗагрузитьТесты(Результат, ДополнительныеПараметры) Экспорт + + ЮТСобытияСлужебный.ПередЧтениеСценариев(); + + ТестовыеМодули = ЮТЧитательСлужебный.ЗагрузитьТесты(ДополнительныеПараметры.ПараметрыЗапуска); + ЮТСобытияСлужебный.ПослеЧтенияСценариев(ТестовыеМодули); + + ИсполняемыеТестовыеМодули = Новый Массив(); + + Для Каждого ТестовыйМодуль Из ТестовыеМодули Цикл + ИсполняемыйТестовыйМодуль = ИсполняемыйТестовыйМодуль(ТестовыйМодуль); + ИсполняемыеТестовыеМодули.Добавить(ИсполняемыйТестовыйМодуль); + КонецЦикла; + + ЮТСобытияСлужебный.ПослеФормированияИсполняемыхНаборовТестов(ИсполняемыеТестовыеМодули); + ДополнительныеПараметры.ИсполняемыеТестовыеМодули = ИсполняемыеТестовыеМодули; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры, ИсполняемыеТестовыеМодули); + +КонецПроцедуры + +Процедура ОбработчикВыполнитьТестирование(Результат, ДополнительныеПараметры) Экспорт + + ЮТСобытияСлужебный.ПередВыполнениемТестов(ДополнительныеПараметры.ИсполняемыеТестовыеМодули); + + РезультатыТестирования = Новый Массив(); + + Для Каждого ТестовыйМодуль Из ДополнительныеПараметры.ИсполняемыеТестовыеМодули Цикл + + РезультатыПрогонаМодуля = ВыполнитьТестыМодуля(ТестовыйМодуль); + РезультатыТестирования.Добавить(РезультатыПрогонаМодуля); + + КонецЦикла; + + ЮТСобытияСлужебный.ПослеВыполненияТестов(РезультатыТестирования); + + ДополнительныеПараметры.РезультатыТестирования = РезультатыТестирования; + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры, РезультатыТестирования); + +КонецПроцедуры + +Процедура ОбработчикСохранитьОтчет(Результат, ДополнительныеПараметры) Экспорт + + Если ЗначениеЗаполнено(ДополнительныеПараметры.ПараметрыЗапуска.reportPath) Тогда + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры); + ЮТОтчетСлужебный.СформироватьОтчет(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска, Обработчик); + Иначе + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработчикСохранитьКодВозврата(Результат, ДополнительныеПараметры) Экспорт + + ЗаписатьКодВозврата(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска); + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОбработчикЗавершить(Результат, ДополнительныеПараметры) Экспорт + + Параметры = ДополнительныеПараметры.ПараметрыЗапуска; + ЮТКонтекстСлужебный.УдалитьКонтекст(); + + Если Параметры.showReport Тогда + ПоказатьОтчет(ДополнительныеПараметры.РезультатыТестирования, Параметры); + ИначеЕсли Параметры.CloseAfterTests Тогда + ПрекратитьРаботуСистемы(Ложь); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработчикПодключитьКомпоненты(Результат, ДополнительныеПараметры) Экспорт + + Если ДополнительныеПараметры.ПараметрыЗапуска.ПодключатьВнешниеКомпоненты Тогда + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры); + ЮТКомпонентыСлужебныйКлиент.ТихаяУстановкаКомпонент(Обработчик); + Иначе + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередВыполнениемТестов(ИсполняемыеМодули) Экспорт + + ЮТКонтекстСлужебный.УстановитьКонтекстИсполнения(ЮТФабрикаСлужебный.НовыйКонтекстИсполнения()); + +КонецПроцедуры + +#КонецОбласти + +Процедура ДобавитьОбработчикЦепочки(ПараметрыИсполнения, ИмяМетода) + + Обработчик = Новый ОписаниеОповещения(ИмяМетода, ЭтотОбъект, ПараметрыИсполнения, "ОбработчикОшибки", ЭтотОбъект); + ПараметрыИсполнения.Цепочка.Добавить(Обработчик); + +КонецПроцедуры + +Функция ИсполняемыйТестовыйМодуль(ТестовыйМодуль) + + ИсполняемыйТестовыйМодуль = ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля(ТестовыйМодуль); + + КонтекстыПриложения = ЮТФабрикаСлужебный.КонтекстыПриложения(); + КонтекстыМодуля = ЮТФабрикаСлужебный.КонтекстыМодуля(ТестовыйМодуль.МетаданныеМодуля); + КонтекстыИсполнения = ЮТФабрика.КонтекстыИсполнения(); + + ИсполняемыйТестовыйМодуль.НаборыТестов = ИсполняемыеНаборыМодуля(ТестовыйМодуль); + + Для Каждого Набор Из ИсполняемыйТестовыйМодуль.НаборыТестов Цикл + + КонтекстИсполнения = ЮТФабрикаСлужебный.КонтекстИсполнения(Набор.Режим); + + Если КонтекстыПриложения.Найти(Набор.Режим) = Неопределено Тогда + ОшибкаКонтекста = "Неподдерживаемый режим запуска"; + ИначеЕсли КонтекстыМодуля.Найти(Набор.Режим) = Неопределено Тогда + ОшибкаКонтекста = "Модуль не доступен в этом контексте"; + ИначеЕсли КонтекстИсполнения <> КонтекстыИсполнения.Сервер И КонтекстИсполнения <> КонтекстыИсполнения.Клиент Тогда + ОшибкаКонтекста = "Неизвестный контекст/режим исполнения"; + Иначе + ОшибкаКонтекста = Неопределено; + КонецЕсли; + + Если ОшибкаКонтекста <> Неопределено Тогда + Набор.Выполнять = Ложь; + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуРежимаВыполнения(Набор, ОшибкаКонтекста); + Для Каждого Тест Из Набор.Тесты Цикл + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуРежимаВыполнения(Тест, ОшибкаКонтекста); + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Возврат ИсполняемыйТестовыйМодуль; + +КонецФункции + +Функция ИсполняемыеНаборыМодуля(ТестовыйМодуль) + + Результат = Новый Массив(); + + Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл + + НаборыКонтекстов = Новый Структура; + + ТестыНабора = ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты", Новый Массив()); + ОбработатьОшибкиЧтенияНабора(ТестовыйНабор, ТестовыйМодуль); + + Для Каждого Тест Из ТестыНабора Цикл + + Для Каждого Контекст Из Тест.КонтекстВызова Цикл + + Если НЕ НаборыКонтекстов.Свойство(Контекст) Тогда + ИсполняемыйНабор = ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов(ТестовыйНабор, ТестовыйМодуль); + ИсполняемыйНабор.Режим = Контекст; + НаборыКонтекстов.Вставить(Контекст, ИсполняемыйНабор); + Иначе + ИсполняемыйНабор = НаборыКонтекстов[Контекст]; + КонецЕсли; + + ИсполняемыйТест = ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста(Тест, Контекст, ТестовыйМодуль); + Если Тест.Свойство("Ошибки") И Тест.Ошибки.Количество() > 0 Тогда + ИсполняемыйТест.Ошибки = ЮТКоллекции.СкопироватьМассив(Тест.Ошибки); + КонецЕсли; + ИсполняемыйНабор.Тесты.Добавить(ИсполняемыйТест); + + КонецЦикла; + + КонецЦикла; + + Если НаборыКонтекстов.Количество() Тогда + + Для Каждого Элемент Из НаборыКонтекстов Цикл + Результат.Добавить(Элемент.Значение); + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ОбработатьОшибкиЧтенияНабора(Набор, Модуль) + ТестыНабора = ЮТКоллекции.ЗначениеСтруктуры(Набор, "Тесты", Новый Массив()); + Ошибки = ЮТКоллекции.ЗначениеСтруктуры(Набор, "Ошибки", Новый Массив()); + + Если Ошибки.Количество() > 0 Тогда + Для Каждого Ошибка Из Ошибки Цикл + Если Ошибка.ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().ЧтенияТестов Тогда + Тест = ОписаниеТестаСОшибкойЧтения(Модуль, Ошибка); + ТестыНабора.Добавить(Тест); + + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +Функция ОписаниеТестаСОшибкойЧтения(Модуль, Ошибка) + Контексты = ЮТФабрикаСлужебный.КонтекстыМодуля(Модуль.МетаданныеМодуля); + Тест = ЮТФабрикаСлужебный.ОписаниеТеста("ИсполняемыеСценарии", "ИсполняемыеСценарии", Контексты); + Тест.Вставить("Ошибки", Новый Массив); + Тест.Ошибки.Добавить(ЮТКоллекции.СкопироватьСтруктуру(Ошибка)); + + Возврат Тест; +КонецФункции + +Процедура ПоказатьОтчет(РезультатыТестирования, Параметры) + + Данные = Новый Структура("РезультатыТестирования, ПараметрыЗапуска", РезультатыТестирования, Параметры); + АдресДанных = ПоместитьВоВременноеХранилище(Данные, Новый УникальныйИдентификатор()); + + ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.Основная", Новый Структура("АдресХранилища", АдресДанных)); + +КонецПроцедуры + +// Записать код возврата. +// +// Параметры: +// РезультатыТестирования - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +// Параметры - см. ЮТФабрика.ПараметрыЗапуска +Процедура ЗаписатьКодВозврата(РезультатыТестирования, Параметры) + + Успешно = Истина; + + Если ПустаяСтрока(Параметры.exitCode) Тогда + Возврат; + КонецЕсли; + + Для Каждого Модуль Из РезультатыТестирования Цикл + + Для Каждого Набор Из Модуль.НаборыТестов Цикл + + Если РезультатТестаСодержитОшибки(Набор) Тогда + Успешно = Ложь; + Прервать; + КонецЕсли; + + Для Каждого Тест Из Набор.Тесты Цикл + + Если РезультатТестаСодержитОшибки(Тест) Тогда + Успешно = Ложь; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если НЕ Успешно Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если НЕ Успешно Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТИсполнительКлиент.ЗаписатьКодВозврата"); +#Иначе + Запись = Новый ЗаписьТекста(Параметры.exitCode, КодировкаТекста.UTF8); + Запись.ЗаписатьСтроку(?(Успешно, 0, 1)); + Запись.Закрыть(); +#КонецЕсли + +КонецПроцедуры + +Функция РезультатТестаСодержитОшибки(Тест) + Результат = Ложь; + + Если НЕ ЗначениеЗаполнено(Тест.Ошибки) Тогда + Возврат Результат; + КонецЕсли; + + ТипОшибкиПропущен = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен; + Для Каждого ОписаниеОшибки Из Тест.Ошибки Цикл + Если ОписаниеОшибки.ТипОшибки <> ТипОшибкиПропущен Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиентСервер.xml b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиентСервер.xml new file mode 100644 index 0000000..d2a94fd --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ЮТИсполнительСлужебныйКлиентСервер + + + ru + Исполнитель тестов + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..77a0bf1 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Ext/Module.bsl @@ -0,0 +1,185 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Выполняет тесты группы наборов, соответствующих одному режиму выполнения (клиент/сервер) +// Параметры: +// Наборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов - Наборы тестов модуля +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +// +// Возвращаемое значение: +// Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов - Результат прогона наборов тестов с заполненной информацией о выполнении +Функция ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль) Экспорт + + Если Наборы.Количество() = 0 Тогда + Возврат Наборы; + КонецЕсли; + + ЮТСобытияСлужебный.ПередВсемиТестамиМодуля(ТестовыйМодуль); + + Если ЕстьОшибки(ТестовыйМодуль) Тогда + СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки); + Возврат Наборы; + КонецЕсли; + + Для Каждого Набор Из Наборы Цикл + + Результат = ВыполнитьНаборТестов(Набор, ТестовыйМодуль); + + Если Результат <> Неопределено Тогда + Набор.Тесты = Результат; + КонецЕсли; + + КонецЦикла; + + ЮТСобытияСлужебный.ПослеВсехТестовМодуля(ТестовыйМодуль); + + Если ЕстьОшибки(ТестовыйМодуль) Тогда + СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки); + КонецЕсли; + + ТестовыйМодуль.Ошибки.Очистить(); // Эти ошибки используются как буфер и уже скопированы в наборы, но ломают последующие наборы + + Возврат Наборы; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ВыполнитьНаборТестов(Набор, ТестовыйМодуль) + + Набор.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ЮТСобытияСлужебный.ПередТестовымНабором(ТестовыйМодуль, Набор); + + Если ЕстьОшибки(Набор) Тогда + Возврат Неопределено; + КонецЕсли; + + Результаты = Новый Массив(); + + Для Каждого Тест Из Набор.Тесты Цикл + + ВТранзакции = Ложь; + ПередКаждымТестом(ТестовыйМодуль, Набор, Тест, ВТранзакции); + + Тест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ВыполнитьТестовыйМетод(Тест); + Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта; + + ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест, ВТранзакции); + + Тест.Статус = ЮТРегистрацияОшибокСлужебный.СтатусВыполненияТеста(Тест); + Результаты.Добавить(Тест); + + КонецЦикла; + + ЮТСобытияСлужебный.ПослеТестовогоНабора(ТестовыйМодуль, Набор); + + Набор.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Набор.ДатаСтарта; + + Возврат Результаты; + +КонецФункции + +Процедура ПередКаждымТестом(ТестовыйМодуль, Набор, Тест, ВТранзакции) + + ЮТСобытияСлужебный.УстановитьКонтекстИсполнения(ТестовыйМодуль, Набор, Тест); +#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + ВТранзакции = ЮТНастройкиВыполнения.ВТранзакции(); + Если ВТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; +#КонецЕсли + + ЮТСобытияСлужебный.ПередКаждымТестом(ТестовыйМодуль, Набор, Тест); + +КонецПроцедуры + +Процедура ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест, ВТранзакции) + + Если ЮТКонтекстСлужебный.ДанныеКонтекста() = Неопределено Тогда // Сломан контекст + ОбновитьПовторноИспользуемыеЗначения(); + ОтменитьТранзакциюТеста(Тест, ВТранзакции); + ЮТСобытияСлужебный.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест); + Иначе + ЮТСобытияСлужебный.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест); + ОтменитьТранзакциюТеста(Тест, ВТранзакции); + КонецЕсли; + +КонецПроцедуры + +Процедура ОтменитьТранзакциюТеста(Тест, ВТранзакции) + +#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Если ВТранзакции Тогда + Если ТранзакцияАктивна() Тогда + ОтменитьТранзакцию(); + Иначе + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьПростуюОшибкуВыполнения(Тест, "Обнаружено лишне закрытие транзакции"); + КонецЕсли; + КонецЕсли; + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьПростуюОшибкуВыполнения(Тест, "Обнаружена незакрытая транзакция"); + КонецЦикла; +#КонецЕсли + +КонецПроцедуры + +Функция ЕстьОшибки(Объект) + + Возврат ЗначениеЗаполнено(Объект.Ошибки); + +КонецФункции + +Процедура ВыполнитьТестовыйМетод(Тест) + + Если ЕстьОшибки(Тест) Тогда + Возврат; + КонецЕсли; + + СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста(); + Тест.Статус = СтатусыИсполненияТеста.Исполнение; + + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(Тест.ПолноеИмяМетода, Тест.Параметры); + + Если Ошибка <> Неопределено Тогда + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуВыполненияТеста(Тест, Ошибка); + КонецЕсли; + +КонецПроцедуры + +Процедура СкопироватьОшибкиВ(Объекты, Ошибки) + + Для Каждого Объект Из Объекты Цикл + + ЮТКоллекции.ДополнитьМассив(Объект.Ошибки, Ошибки); + + Если Объект.Свойство("Статус") Тогда + Объект.Статус = ЮТФабрика.СтатусыИсполненияТеста().Сломан; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКоллекции.xml b/src/cfe/YAXUnit/CommonModules/ЮТКоллекции.xml new file mode 100644 index 0000000..94f6bac --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКоллекции.xml @@ -0,0 +1,23 @@ + + + + + ЮТКоллекции + + + ru + Коллекции + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКоллекции/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКоллекции/Ext/Module.bsl new file mode 100644 index 0000000..647261e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКоллекции/Ext/Module.bsl @@ -0,0 +1,409 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает требуемое поле структуры. В случае отсутствия поля возвращает значение по умолчанию +// +// Параметры: +// ИсходнаяСтруктура - Структура - Исходная структура +// ИмяПоля - Строка - Имя поля структуры +// ЗначениеПоУмолчанию - Произвольный - Значение, которое будет возвращено, если поля в структуре нет +// +// Возвращаемое значение: +// Произвольный - Значение искомого поля структуры +Функция ЗначениеСтруктуры(ИсходнаяСтруктура, ИмяПоля, ЗначениеПоУмолчанию = Неопределено) Экспорт + + Если НЕ ЗначениеЗаполнено(ИсходнаяСтруктура) ИЛИ ПустаяСтрока(ИмяПоля) Тогда + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + + ЗначениеПоля = Неопределено; + + Если ИсходнаяСтруктура.Свойство(ИмяПоля, ЗначениеПоля) Тогда + Возврат ЗначениеПоля; + КонецЕсли; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + +// Добавляет в приемник данные из источника, при совпадении ключей значения заменяются +// +// Параметры: +// Приемник - Структура +// Источник - Соответствие из Произвольный +// - Структура +Процедура ДополнитьСтруктуру(Приемник, Источник) Экспорт + + Для Каждого Элемент Из Источник Цикл + Приемник.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + +КонецПроцедуры + +// Добавляет в приемник все элементы источника +// +// Параметры: +// Приемник - Массив из Произвольный +// Источник - Массив из Произвольный +Процедура ДополнитьМассив(Приемник, Источник) Экспорт + + Для Каждого Элемент Из Источник Цикл + Приемник.Добавить(Элемент); + КонецЦикла; + +КонецПроцедуры + +// Создает копию экземпляра указанного объекта. +// Примечание: +// Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.). +// +// Параметры: +// Источник - Произвольный - объект, который необходимо скопировать. +// +// Возвращаемое значение: +// Произвольный - копия объекта, переданного в параметре Источник. +// +Функция СкопироватьРекурсивно(Источник) Экспорт + + Перем Приемник; + + СкопироватьПрисвоением = Ложь; + + ТипИсточника = ТипЗнч(Источник); + + Если ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипИсточника) Тогда + Приемник = СкопироватьСтруктуру(Источник); + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипИсточника) Тогда + Приемник = СкопироватьСоответствие(Источник); + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассива(ТипИсточника) Тогда + Приемник = СкопироватьМассив(Источник); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник); + Иначе + + СкопироватьПрисвоением = Истина; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + Если ТипИсточника = Тип("ТаблицаЗначений") Или ТипИсточника = Тип("ДеревоЗначений") Тогда + + СкопироватьПрисвоением = Ложь; + Приемник = Источник.Скопировать(); + + КонецЕсли; +#КонецЕсли + + КонецЕсли; + + Если СкопироватьПрисвоением Тогда + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции + +// Создает копию структуры +// +// Параметры: +// Источник - Структура, ФиксированнаяСтруктура - копируемая структура +// +// Возвращаемое значение: +// Структура - копия исходной структуры. +Функция СкопироватьСтруктуру(Источник) Экспорт + + Результат = Новый Структура; + + Для Каждого КлючИЗначение Из Источник Цикл + Результат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Создает копию соответствия +// +// Параметры: +// Источник - Соответствие из Произвольный +// - ФиксированноеСоответствие из Произвольный +// +// Возвращаемое значение: +// Соответствие Из Произвольный - копия исходного соответствия. +// +Функция СкопироватьСоответствие(Источник) Экспорт + + Результат = Новый Соответствие; + + Для Каждого КлючИЗначение Из Источник Цикл + + НовыйКлюч = СкопироватьРекурсивно(КлючИЗначение.Ключ); + НовоеЗначение = СкопироватьРекурсивно(КлючИЗначение.Значение); + Результат.Вставить(НовыйКлюч, НовоеЗначение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Создает копию массива +// +// Параметры: +// Источник - Массив Из Произвольный +// - ФиксированныйМассив из Произвольный +// +// Возвращаемое значение: +// Массив Из Произвольный - копия исходного массива. +Функция СкопироватьМассив(Источник) Экспорт + + Если НЕ ЗначениеЗаполнено(Источник) Тогда + Возврат Новый Массив; + КонецЕсли; + + Размер = Источник.Количество(); + Результат = Новый Массив(Размер); + + Для Инд = 0 По Размер - 1 Цикл + Результат[Инд] = СкопироватьРекурсивно(Источник[Инд]); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Создает копию списка значений +// +// Параметры: +// Источник - СписокЗначений Из Произвольный +// +// Возвращаемое значение: +// СписокЗначений Из Произвольный +// +Функция СкопироватьСписокЗначений(Источник) Экспорт + + Результат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из Источник Цикл + + НовоеЗначение = СкопироватьРекурсивно(ЭлементСписка.Значение); + Результат.Добавить(НовоеЗначение, ЭлементСписка.Представление, ЭлементСписка.Пометка, ЭлементСписка.Картинка); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Выгружает значения "колонки" коллекции элементов. +// +// Параметры: +// Коллекция - Произвольный - Итерируемая коллекция +// ИмяРеквизита - Строка - Имя реквизата элементов коллекции +// +// Возвращаемое значение: +// Массив из Произвольный +Функция ВыгрузитьЗначения(Коллекция, ИмяРеквизита) Экспорт + + Результат = Новый Массив(); + + Для Каждого ЭлементКоллекции Из Коллекция Цикл + Результат.Добавить(ЭлементКоллекции[ИмяРеквизита]); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Вычисляет двух массивов, коллекцию содержащую общие элементы. +// +// Параметры: +// Коллекция1 - Массив из Произвольный +// Коллекция2 - Массив из Произвольный +// +// Возвращаемое значение: +// Массив из Произвольный - Пересечение массивов +Функция ПересечениеМассивов(Коллекция1, Коллекция2) Экспорт + + Результат = Новый Массив; + + Для Каждого Элемент Из Коллекция1 Цикл + + Если Коллекция2.Найти(Элемент) <> Неопределено Тогда + Результат.Добавить(Элемент); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Создает массив с переданными значениями +// +// Параметры: +// Значение - Произвольный +// Значение2 - Произвольный +// Значение3 - Произвольный +// Значение4 - Произвольный +// Значение5 - Произвольный +// Значение6 - Произвольный +// Значение7 - Произвольный +// Значение8 - Произвольный +// Значение9 - Произвольный +// Значение10 - Произвольный +// +// Возвращаемое значение: +// Массив из Произвольный +//@skip-check method-too-many-params +Функция ЗначениеВМассиве(Значение, + Значение2 = "_!%*", + Значение3 = "_!%*", + Значение4 = "_!%*", + Значение5 = "_!%*", + Значение6 = "_!%*", + Значение7 = "_!%*", + Значение8 = "_!%*", + Значение9 = "_!%*", + Значение10 = "_!%*") Экспорт + + Значения = Новый Массив; + + Если Не ДобавитьНеПоследнее(Значения, Значение) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение2) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение3) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение4) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение5) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение6) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение7) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение8) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение9) Тогда + Возврат Значения; + КонецЕсли; + + Если Не ДобавитьНеПоследнее(Значения, Значение10) Тогда + Возврат Значения; + КонецЕсли; + + Возврат Значения; + +КонецФункции + +// Возвращает соответствие элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции. +// +// Параметры: +// Коллекция - Произвольный - значение, для которого определен итератор, и возможно обращение к полям элементов через квадратные скобки. +// ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия. +// ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции. +// Возвращаемое значение: +// Соответствие Из Произвольный - полученное соответствие. +Функция ВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт + + Результат = Новый Соответствие(); + + Для Каждого ЭлементКоллекции Из Коллекция Цикл + + Значение = ?(ИмяПоляЗначения = Неопределено, ЭлементКоллекции, ЭлементКоллекции[ИмяПоляЗначения]); + + Результат.Вставить(ЭлементКоллекции[ИмяПоляКлюча], Значение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает структуру элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции. +// +// Параметры: +// Коллекция - Произвольный - значение, для которого определен итератор, и возможно обращение к полям элементов через квадратные скобки. +// ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия. +// ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции. +// Возвращаемое значение: +// Структура Из Произвольный - полученная структура. +Функция ВСтруктуру(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт + + Результат = Новый Структура(); + + Для Каждого ЭлементКоллекции Из Коллекция Цикл + + Значение = ?(ИмяПоляЗначения = Неопределено, ЭлементКоллекции, ЭлементКоллекции[ИмяПоляЗначения]); + + Результат.Вставить(ЭлементКоллекции[ИмяПоляКлюча], Значение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Формирует текстовое представление массива. +// Пример результата - "[1, 2, 3]" +// +// Параметры: +// Данные - Массив из Строка +// +// Возвращаемое значение: +// Строка +Функция ПредставлениеМассива(Данные) Экспорт + + Возврат СтрШаблон("[%1]", СтрСоединить(Данные, ", ")); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ДобавитьНеПоследнее(Значения, Значение, ФлагОкончания = "_!%*") + + Если Значение <> ФлагОкончания Тогда + Значения.Добавить(Значение); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКомпоненты.xml b/src/cfe/YAXUnit/CommonModules/ЮТКомпоненты.xml new file mode 100644 index 0000000..c116169 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКомпоненты.xml @@ -0,0 +1,23 @@ + + + + + ЮТКомпоненты + + + ru + Компоненты + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКомпоненты/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКомпоненты/Ext/Module.bsl new file mode 100644 index 0000000..6732b4d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКомпоненты/Ext/Module.bsl @@ -0,0 +1,160 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает внешнюю компоненту, реализующую паузу +// Предоставляет метод `Ожидать`, `Sleep` +// +// Возвращаемое значение: +// ВнешнийОбъект +Функция Пауза() Экспорт + + Возврат СоздатьКомпоненту(ОписаниеКомпонентыСервисногоНазначения(), Истина); + +КонецФункции + +// Возвращает внешнюю компоненту, реализующую вывод в консоль +// Предоставляет метод `Напечатать`, `Print` +// +// Возвращаемое значение: +// ВнешнийОбъект +Функция Консоль() Экспорт + + Возврат СоздатьКомпоненту(ОписаниеКомпонентыСервисногоНазначения(), Истина); + +КонецФункции + +// Возвращает внешнюю компоненту, реализующую функциональность регулярных выражений +// Подробнее с документацией можно ознакомиться по ссылке: https://github.com/alexkmbk/RegEx1CAddin +// +// Возвращаемое значение: +// ВнешнийОбъект +Функция РегулярныеВыражения() Экспорт + +#Если НЕ Сервер Тогда + Если НЕ ЮТМетаданные.РазрешеныСинхронныеВызовы() Тогда + ВызватьИсключение "Компонента регулярных выражений не доступна на клиенте при отключении синхронных вызовов"; + КонецЕсли; +#КонецЕсли + + Компонента = СоздатьКомпоненту(ОписаниеКомпонентыРегулярныхВыражений()); + Компонента.ВызыватьИсключения = Истина; + Возврат Компонента; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Создает внешнюю компоненту по описанию +// +// Параметры: +// ОписаниеКомпоненты - см. ОписаниеКомпоненты +// Кэшировать - Булево - Кэшировать созданную компоненту +// +// Возвращаемое значение: +// ВнешнийОбъект +Функция СоздатьКомпоненту(ОписаниеКомпоненты, Кэшировать = Ложь) Экспорт + + Если Кэшировать Тогда + Возврат ЮТСлужебныйПовторногоИспользования.СоздатьКомпоненту(ОписаниеКомпоненты); + КонецЕсли; + +#Если Сервер Тогда + Подключена = ПодключитьКомпоненту(ОписаниеКомпоненты.ИмяМакета, ОписаниеКомпоненты.ИмяКомпоненты, Истина); +#Иначе + Если ЮТМетаданные.РазрешеныСинхронныеВызовы() Тогда + Подключена = ПодключитьКомпоненту(ОписаниеКомпоненты.ИмяМакета, ОписаниеКомпоненты.ИмяКомпоненты, Истина); + Иначе + Подключена = Истина; // Подключены при старте системы + КонецЕсли; +#КонецЕсли + + Если Подключена Тогда + Возврат Новый (ОписаниеКомпоненты.ИмяКласса); + Иначе + ВызватьИсключение "Не удалось подключить внешнюю компоненту " + ОписаниеКомпоненты.ИмяКласса; + КонецЕсли; + +КонецФункции + +// Подключает внещнюю компоненту из макета +// +// Параметры: +// ИмяМакета - Строка - Имя макета, в котором хранится компонента +// ИмяКомпоненты - Строка - Имя компоненты +// Кэшировать - Булево - Кэшировать создание компоненты +// +// Возвращаемое значение: +// Булево - Успешность подключения +Функция ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты, Кэшировать) Экспорт + + Если Кэшировать Тогда + Возврат ЮТСлужебныйПовторногоИспользования.ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты); + КонецЕсли; + + Возврат ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native); + +КонецФункции + +// Описание компоненты, реализующей паузу, консоль и другие +// +// Возвращаемое значение: +// см. ОписаниеКомпоненты +Функция ОписаниеКомпонентыСервисногоНазначения() Экспорт + + Возврат ОписаниеКомпоненты("ОбщийМакет.ЮТYaxUnitAddIn", "YaxUnitAddin", "Common"); + +КонецФункции + +// Описание компоненты реализующей функциональность регулярных выражений. +// +// Возвращаемое значение: +// см. ОписаниеКомпоненты +Функция ОписаниеКомпонентыРегулярныхВыражений() Экспорт + + Возврат ОписаниеКомпоненты("ОбщийМакет.ЮТRegEx1CAddin", "RegEx1CAddin", "RegEx"); + +КонецФункции + +// Описание внешней компоненты. +// +// Параметры: +// ИмяМакета - Строка - Имя макета, в котором хранится компонента +// ИмяКомпоненты - Строка -Имя компоненты +// ИмяКласса - Строка - Имя класса, по которому создается компонента +// +// Возвращаемое значение: +// Структура - Описание компоненты: +// * ИмяМакета - Строка - Имя макета, в котором хранится компонента +// * ИмяКомпоненты - Строка -Имя компоненты +// * ИмяКласса - Строка - Имя класса +Функция ОписаниеКомпоненты(ИмяМакета, ИмяКомпоненты, ИмяКласса) Экспорт + + Описание = Новый Структура; + Описание.Вставить("ИмяМакета", ИмяМакета); + Описание.Вставить("ИмяКомпоненты", ИмяКомпоненты); + Описание.Вставить("ИмяКласса", СтрШаблон("AddIn.%1.%2", ИмяКомпоненты, ИмяКласса)); + + Возврат Описание; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйВызовСервера.xml new file mode 100644 index 0000000..6c1a206 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТКомпонентыСлужебныйВызовСервера + + + ru + Компоненты вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..839372a --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,108 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ФайлКомпоненты(Знач ИмяМакета, Знач ОперационнаяСистема, Знач Архитектура) Экспорт + + Данные = ЮТОбщийСлужебныйВызовСервера.Макет(ИмяМакета); + ЧтениеАрхива = Новый ЧтениеZipФайла(); + ЧтениеАрхива.Открыть(Данные.ОткрытьПотокДляЧтения()); + + ИмяФайлаКомпоненты = ИмяФайлаКомпоненты(ЧтениеАрхива, ОперационнаяСистема, Архитектура); + + Если ИмяФайлаКомпоненты = Неопределено Тогда + ВызватьИсключение "Компонента не поддерживает клиентское окружение"; + КонецЕсли; + + Данные = ДвоичныеДанныеЭлемента(ЧтениеАрхива, ИмяФайлаКомпоненты); + + Возврат Новый ФиксированнаяСтруктура("ИмяФайла, Данные", ИмяФайлаКомпоненты, Данные); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИмяФайлаКомпоненты(ЧтениеАрхива, ОперационнаяСистема, Архитектура) + + Данные = ДвоичныеДанныеЭлемента(ЧтениеАрхива, "MANIFEST.XML"); + + Если Данные = Неопределено Тогда + ВызватьИсключение "Архив компоненты не содержит манифеста"; + КонецЕсли; + + ЧтениеXML = Новый ЧтениеXML(); + ЧтениеXML.ОткрытьПоток(Данные.ОткрытьПотокДляЧтения()); + + ИмяФайлаКомпоненты = Неопределено; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЭтоПодходящийУзел(ЧтениеXML, ОперационнаяСистема, Архитектура) Тогда + ИмяФайлаКомпоненты = ЧтениеXML.ЗначениеАтрибута("path"); + Прервать; + КонецЕсли; + + КонецЦикла; + + ЧтениеXML.Закрыть(); + + Возврат ИмяФайлаКомпоненты; + +КонецФункции + +Функция ЭтоПодходящийУзел(ЧтениеXML, ОперационнаяСистема, Архитектура) + + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента ИЛИ СтрСравнить(ЧтениеXML.Имя, "component") <> 0 Тогда + Возврат Ложь; + КонецЕсли; + + ОперационнаяСистемаУзла = ЧтениеXML.ЗначениеАтрибута("os"); + АрхитектураУзла = ЧтениеXML.ЗначениеАтрибута("arch"); + + Возврат ОперационнаяСистема = ОперационнаяСистемаУзла И Архитектура = АрхитектураУзла; + +КонецФункции + +Функция ДвоичныеДанныеЭлемента(ЧтениеАрхива, ИмяФайла) + + ЭлементФайла = Неопределено; + + Для Каждого Элемент Из ЧтениеАрхива.Элементы Цикл + Если СтрСравнить(Элемент.ПолноеИмя, ИмяФайла) = 0 Тогда + ЭлементФайла = Элемент; + КонецЕсли; + КонецЦикла; + + Если ЭлементФайла = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ЧтениеАрхива.Извлечь(ЭлементФайла, ИмяВременногоФайла, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + + Данные = Новый ДвоичныеДанные(ЮТФайлы.ОбъединитьПути(ИмяВременногоФайла, ИмяФайла)); + УдалитьФайлы(ИмяВременногоФайла); + + Возврат Данные; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйКлиент.xml b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйКлиент.xml new file mode 100644 index 0000000..4fa2153 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйКлиент.xml @@ -0,0 +1,23 @@ + + + + + ЮТКомпонентыСлужебныйКлиент + + + ru + Компоненты клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйКлиент/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйКлиент/Ext/Module.bsl new file mode 100644 index 0000000..a750803 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКомпонентыСлужебныйКлиент/Ext/Module.bsl @@ -0,0 +1,220 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ТихаяУстановкаКомпонент(ОбработчикЗавершения) Экспорт + + ПараметрыТихойУстановки = ПараметрыТихойУстановки(); + ПараметрыТихойУстановки.Компоненты.Добавить(ЮТКомпоненты.ОписаниеКомпонентыСервисногоНазначения()); + ПараметрыТихойУстановки.Компоненты.Добавить(ЮТКомпоненты.ОписаниеКомпонентыРегулярныхВыражений()); + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ДобавитьОбработчикЦепочки(ПараметрыТихойУстановки, + ЭтотОбъект, + "УстановитьПараметрыОкружения"); + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ДобавитьОбработчикЦепочки(ПараметрыТихойУстановки, + ЭтотОбъект, + "ТихаяУстановкаВнешнихКомпонент"); + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ДобавитьОбработчикЦепочки(ПараметрыТихойУстановки, + ЭтотОбъект, + "ТихаяУстановкаВнешнихКомпонент"); + Если НЕ ЮТМетаданные.РазрешеныСинхронныеВызовы() Тогда + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ДобавитьОбработчикЦепочки(ПараметрыТихойУстановки, + ЭтотОбъект, + "ПодключениеВнешнихКомпонент"); + КонецЕсли; + + ПараметрыТихойУстановки.Цепочка.Добавить(ОбработчикЗавершения); + + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ПараметрыТихойУстановки); + НачатьПолучениеРабочегоКаталогаДанныхПользователя(Обработчик); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПараметрыТихойУстановки() + + ПараметрыТихойУстановки = ЮТАсинхроннаяОбработкаСлужебныйКлиент.ЦепочкаАсинхроннойОбработки(); + ПараметрыТихойУстановки.Вставить("Компоненты", Новый Массив()); + ПараметрыТихойУстановки.Вставить("РабочийКаталог", ""); + ПараметрыТихойУстановки.Вставить("ОперационнаяСистема", ""); + ПараметрыТихойУстановки.Вставить("Архитектура", ""); + ПараметрыТихойУстановки.Вставить("ДанныеРеестра", ""); + ПараметрыТихойУстановки.Вставить("ИзмененРеестр", Ложь); + ПараметрыТихойУстановки.Вставить("ПодключенныеКомпоненты", Новый Массив()); + + Возврат ПараметрыТихойУстановки; + +КонецФункции + +Процедура УстановитьПараметрыОкружения(Результат, ПараметрыТихойУстановки) Экспорт + + КорневойКаталог = ЮТФайлы.ОбъединитьПути(Результат, "..", "..", ".."); + КаталогКомпонент = ЮТФайлы.ОбъединитьПути(КорневойКаталог, "ExtCompT"); + + ПараметрыТихойУстановки.РабочийКаталог = КаталогКомпонент; + Информация = Новый СистемнаяИнформация(); + ОперационнаяСистема = Неопределено; + Архитектура = Неопределено; + + Linux = "Linux"; + Windows = "Windows"; + MacOS = "MacOS"; + + //@skip-check bsl-variable-name-invalid + x86 = "i386"; + //@skip-check bsl-variable-name-invalid + x64 = "x86_64"; + + ТипКлиентскойПлатформы = Информация.ТипПлатформы; + + Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда + ОперационнаяСистема = Linux; + Архитектура = x86; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда + ОперационнаяСистема = Linux; + Архитектура = x64; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда + ОперационнаяСистема = Windows; + Архитектура = x86; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда + ОперационнаяСистема = Windows; + Архитектура = x64; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда + ОперационнаяСистема = MacOS; + Архитектура = x86; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда + ОперационнаяСистема = MacOS; + Архитектура = x64; + Иначе + ЮТИсполнительСлужебныйКлиент.ОбработкаОшибки("Неподдерживаемый тип платформы"); + КонецЕсли; + + ПараметрыТихойУстановки.ОперационнаяСистема = ОперационнаяСистема; + ПараметрыТихойУстановки.Архитектура = Архитектура; + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыТихойУстановки); + +КонецПроцедуры + +Процедура ПрочитатьФайлRegistry(ПараметрыТихойУстановки) Экспорт + +#Если ВебКлиент Тогда + ЮТИсполнительСлужебныйКлиент.ОбработкаОшибки(ЮТИсключения.МетодНеДоступен("ЮТКомпонентыКлиент.ПрочитатьФайлRegistry")); + Возврат; +#Иначе + ФайлРеестра = ЮТФайлы.ОбъединитьПути(ПараметрыТихойУстановки.РабочийКаталог, "registry.xml"); + Чтение = Новый ЧтениеТекста(ФайлРеестра); + Данные = Чтение.Прочитать(); + Чтение.Закрыть(); + ПараметрыТихойУстановки.ДанныеРеестра = Данные; + +#КонецЕсли + +КонецПроцедуры + +Процедура ЗаписатьФайлRegistry(ПараметрыТихойУстановки) Экспорт + +#Если ВебКлиент Тогда + ЮТИсполнительСлужебныйКлиент.ОбработкаОшибки(ЮТИсключения.МетодНеДоступен("ЮТКомпонентыКлиент.ЗаписатьФайлRegistry")); + Возврат; +#Иначе + Если ПараметрыТихойУстановки.ИзмененРеестр Тогда + ФайлРеестра = ЮТФайлы.ОбъединитьПути(ПараметрыТихойУстановки.РабочийКаталог, "registry.xml"); + Запись = Новый ЗаписьТекста(ФайлРеестра); + Запись.Записать(ПараметрыТихойУстановки.ДанныеРеестра); + Запись.Закрыть(); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +Процедура ТихаяУстановкаВнешнихКомпонент(Результат, ПараметрыТихойУстановки) Экспорт + + ПрочитатьФайлRegistry(ПараметрыТихойУстановки); + + Для Каждого Компонента Из ПараметрыТихойУстановки.Компоненты Цикл + ТихаяУстановкаВнешнейКомпоненты(Компонента, ПараметрыТихойУстановки); + КонецЦикла; + + ЗаписатьФайлRegistry(ПараметрыТихойУстановки); + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыТихойУстановки); + +КонецПроцедуры + +Процедура ПодключениеВнешнихКомпонент(Результат, ПараметрыТихойУстановки) Экспорт + + КомпонентаДляПодключения = Неопределено; + + Для Каждого Компонента Из ПараметрыТихойУстановки.Компоненты Цикл + Если ПараметрыТихойУстановки.ПодключенныеКомпоненты.Найти(Компонента) = Неопределено Тогда + КомпонентаДляПодключения = Компонента; + Прервать; + КонецЕсли; + КонецЦикла; + + Если КомпонентаДляПодключения = Неопределено Тогда + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыТихойУстановки); + Возврат; + КонецЕсли; + + ПараметрыТихойУстановки.ПодключенныеКомпоненты.Добавить(КомпонентаДляПодключения); + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.ТекущийОбработчик(ПараметрыТихойУстановки); + НачатьПодключениеВнешнейКомпоненты(Обработчик, + КомпонентаДляПодключения.ИмяМакета, + КомпонентаДляПодключения.ИмяКомпоненты, + ТипВнешнейКомпоненты.Native); + +КонецПроцедуры + +Процедура ТихаяУстановкаВнешнейКомпоненты(Компонента, Параметры) + + ДанныеФайла = ЮТКомпонентыСлужебныйВызовСервера.ФайлКомпоненты(Компонента.ИмяМакета, Параметры.ОперационнаяСистема, Параметры.Архитектура); + + Если ЗаписатьВРеестр(Параметры.ДанныеРеестра, ДанныеФайла.ИмяФайла) Тогда + Параметры.ИзмененРеестр = Истина; + КонецЕсли; + + ФайлКомпоненты = ЮТФайлы.ОбъединитьПути(Параметры.РабочийКаталог, ДанныеФайла.ИмяФайла); + ДанныеФайла.Данные.Записать(ФайлКомпоненты); + +КонецПроцедуры + +Функция ЗаписатьВРеестр(ДанныеРеестра, ИмяФайла) + + Если СтрНайти(ДанныеРеестра, " + | + | + |", ИмяФайла); + ИначеЕсли СтрНайти(ДанныеРеестра, СтрШаблон("path=""%1""", ИмяФайла)) <> 0 Тогда // Компонента уже зарегистрированна + Возврат Ложь; + Иначе // Добавляем компоненту + Запись = СтрШаблон(" ", ИмяФайла); + ДанныеРеестра = СтрЗаменить(ДанныеРеестра, "", Запись + Символы.ПС + ""); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонструкторВариантов.xml b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторВариантов.xml new file mode 100644 index 0000000..27fc5be --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторВариантов.xml @@ -0,0 +1,23 @@ + + + + + ЮТКонструкторВариантов + + + ru + Конструктор вариантов + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонструкторВариантов/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторВариантов/Ext/Module.bsl new file mode 100644 index 0000000..9ceb2ff --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторВариантов/Ext/Module.bsl @@ -0,0 +1,108 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Инициализирует новый конструктор вариантов +// +// Параметры: +// Реквизиты - Строка - Имена реквизитов варианта разделенные запятыми. +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Варианты(Реквизиты) Экспорт + + Варианты = Новый Структура("Реквизиты, Варианты, КоличествоРеквизитов", Реквизиты, Новый Массив()); + Вариант = Новый Структура(Реквизиты); + Варианты.КоличествоРеквизитов = Вариант.Количество(); + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(КлючКонтекста(), Варианты); + + Возврат ЮТКонструкторВариантов; + +КонецФункции + +// Добавляет новый вариант +// +// Параметры: +// Параметр1 - Произвольный +// Параметр2 - Произвольный +// Параметр3 - Произвольный +// Параметр4 - Произвольный +// Параметр5 - Произвольный +// Параметр6 - Произвольный +// Параметр7 - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +//@skip-check method-too-many-params +Функция Добавить(Параметр1, + Параметр2 = Неопределено, + Параметр3 = Неопределено, + Параметр4 = Неопределено, + Параметр5 = Неопределено, + Параметр6 = Неопределено, + Параметр7 = Неопределено) Экспорт +// BSLLS:MagicNumber-off +// BSLLS:NumberOfValuesInStructureConstructor-off + Варианты = ЮТКонтекстСлужебный.ЗначениеКонтекста(КлючКонтекста()); + + Если Варианты.КоличествоРеквизитов = 1 Тогда + Вариант = Новый Структура(Варианты.Реквизиты, Параметр1); + ИначеЕсли Варианты.КоличествоРеквизитов = 2 Тогда + Вариант = Новый Структура(Варианты.Реквизиты, Параметр1, Параметр2); + ИначеЕсли Варианты.КоличествоРеквизитов = 3 Тогда + Вариант = Новый Структура(Варианты.Реквизиты, Параметр1, Параметр2, Параметр3); + ИначеЕсли Варианты.КоличествоРеквизитов = 4 Тогда + Вариант = Новый Структура(Варианты.Реквизиты, Параметр1, Параметр2, Параметр3, Параметр4); + ИначеЕсли Варианты.КоличествоРеквизитов = 5 Тогда + Вариант = Новый Структура(Варианты.Реквизиты, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5); + ИначеЕсли Варианты.КоличествоРеквизитов = 6 Тогда + Вариант = Новый Структура(Варианты.Реквизиты, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6); + ИначеЕсли Варианты.КоличествоРеквизитов = 7 Тогда + Вариант = Новый Структура(Варианты.Реквизиты, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7); + КонецЕсли; +// BSLLS:NumberOfValuesInStructureConstructor-on +// BSLLS:MagicNumber-on + Варианты.Варианты.Добавить(Вариант); + + Возврат ЮТКонструкторВариантов; + +КонецФункции + +// Список вариантов. +// +// Возвращаемое значение: +// Массив из Структура +Функция СписокВариантов() Экспорт + + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(КлючКонтекста()).Варианты; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция КлючКонтекста() + + Возврат "ВариантыТеста"; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный.xml new file mode 100644 index 0000000..f048d79 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТКонструкторТестовыхДанныхСлужебный + + + ru + Конструктор тестовых данных + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..2e3a624 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Ext/Module.bsl @@ -0,0 +1,292 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура Установить(Контекст, ИмяРеквизита, Значение) Экспорт + + ОписаниеРеквизита(Контекст, ИмяРеквизита); // Проверка наличия реквизита + + ТекущаяЗапись = ТекущаяЗапись(Контекст); + ТекущаяЗапись.Вставить(ИмяРеквизита, Значение); + +КонецПроцедуры + +Процедура УстановитьРеквизиты(Контекст, ЗначенияРеквизитов) Экспорт + + ТекущаяЗапись = ТекущаяЗапись(Контекст); + Для Каждого ЗначениеРеквизита Из ЗначенияРеквизитов Цикл + + ОписаниеРеквизита(Контекст, ЗначениеРеквизита.Ключ); + ТекущаяЗапись.Вставить(ЗначениеРеквизита.Ключ, ЗначениеРеквизита.Значение); + + КонецЦикла; + +КонецПроцедуры + +Процедура Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, Знач ОграничениеТипа) Экспорт + + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОграничениеТипа, "Тип, ОписаниеТипов, Строка", "Фикция", "ЮТКонструкторТестовыхДанных", Истина); + + ТекущаяЗапись = ТекущаяЗапись(Контекст); + ОписаниеРеквизита = ОписаниеРеквизита(Контекст, ИмяРеквизита); + + Если ОграничениеТипа <> Неопределено Тогда + ПолноеИмяРеквизита = ЮТСтроки.ДобавитьСтроку(Контекст.ТекущаяТабличнаяЧасть, ИмяРеквизита, "."); + ТипЗначения = ПересечениеТипов(ОписаниеРеквизита.Тип, ОграничениеТипа, ПолноеИмяРеквизита); + Иначе + ТипЗначения = ОписаниеРеквизита.Тип; + КонецЕсли; + + Значение = ЮТТестовыеДанныеСлужебный.Фикция(ТипЗначения, РеквизитыЗаполнения); + ТекущаяЗапись.Вставить(ИмяРеквизита, Значение); + +КонецПроцедуры + +Процедура ФикцияОбязательныхПолей(Контекст) Экспорт + + Реквизиты = Реквизиты(Контекст); + ТекущаяЗапись = ТекущаяЗапись(Контекст); + + Для Каждого Элемент Из Реквизиты Цикл + Реквизит = Элемент.Значение; + Если Реквизит.Обязательный И НЕ ТекущаяЗапись.Свойство(Реквизит.Имя) Тогда + Значение = ЮТТестовыеДанныеСлужебный.Фикция(Реквизит.Тип); + ТекущаяЗапись.Вставить(Реквизит.Имя, Значение); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ТабличнаяЧасть(Контекст, ИмяТабличнойЧасти) Экспорт + + Контекст.ТекущаяТабличнаяЧасть = ИмяТабличнойЧасти; + + Если ИмяТабличнойЧасти <> Неопределено Тогда + Контекст.Данные.Вставить(ИмяТабличнойЧасти, Новый Массив()); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьСтроку(Контекст, ЗначенияРеквизитов) Экспорт + + Запись = Новый Структура(); + ДанныеТабличнойЧасти(Контекст).Добавить(Запись); + + Если ЗначенияРеквизитов <> Неопределено Тогда + УстановитьРеквизиты(Контекст, ЗначенияРеквизитов); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьДополнительноеСвойство(Контекст, ИмяСвойства, Значение = Неопределено) Экспорт + + Контекст.ДополнительныеСвойства.Вставить(ИмяСвойства, Значение); + +КонецПроцедуры + +Функция Записать(Контекст, ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт + + ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); + ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства; + ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка; + + Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект); + + ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка); + + Возврат Ссылка; + +КонецФункции + +Функция НовыйОбъект(Контекст) Экспорт + + Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.НовыйОбъект(Контекст.Менеджер, Контекст.Данные, Контекст.ДополнительныеСвойства); + +КонецФункции + +Функция Провести(Контекст, ВернутьОбъект = Ложь) Экспорт + + ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); + ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства; + ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение; + + Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект); + + ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка); + + Возврат Ссылка; + +КонецФункции + +Функция ДанныеСтроки(Контекст) Экспорт + + Если ПустаяСтрока(Контекст.ТекущаяТабличнаяЧасть) Тогда + Возврат Неопределено; + КонецЕсли; + + ДанныеТабличнойЧасти = ДанныеТабличнойЧасти(Контекст); + + Если ДанныеТабличнойЧасти.Количество() Тогда + Возврат ДанныеТабличнойЧасти[ДанныеТабличнойЧасти.ВГраница()]; + Иначе + ВызватьИсключение "Сначала необходимо добавить строку табличной части"; + КонецЕсли; + +КонецФункции + +Функция ДанныеОбъекта(Контекст) Экспорт + + Возврат Контекст.Данные; + +КонецФункции + +// Инициализирует конструктор тестовых данных +// +// Параметры: +// Менеджер - Строка - Имя менеджера. Примеры: Справочники.Товары, Документы.ПриходТоваров +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных +Функция Инициализировать(Менеджер) Экспорт + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + Конструктор = Обработки.ЮТКонструкторТестовыхДанных.Создать(); +#Иначе + //@skip-check use-non-recommended-method + Конструктор = ПолучитьФорму("Обработка.ЮТКонструкторТестовыхДанных.Форма.КлиентскийКонструктор"); // BSLLS:GetFormMethod-off +#КонецЕсли + + //@skip-check unknown-method-property + Конструктор.Инициализировать(Менеджер); + + Возврат Конструктор; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Новый контекст конструктора. +// +// Параметры: +// Менеджер - Произвольный +// +// Возвращаемое значение: +// Структура - Новый контекст конструктора: +// * Менеджер - Произвольный +// * Данные - Структура +// * Метаданные - см. ЮТМетаданные.СтруктураОписанияОбъектаМетаданных +// * ТекущаяТабличнаяЧасть - Строка +// * ДополнительныеСвойства - Структура +Функция НовыйКонтекстКонструктора(Менеджер) Экспорт + + Контекст = Новый Структура("Менеджер, Данные, Метаданные", Менеджер, Новый Структура()); + Контекст.Вставить("Менеджер", Менеджер); + Контекст.Вставить("Данные", Новый Структура()); + Контекст.Вставить("Метаданные", ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер)); + Контекст.Вставить("ТекущаяТабличнаяЧасть", ""); + Контекст.Вставить("ДополнительныеСвойства", Новый Структура()); + + //@skip-check constructor-function-return-section + Возврат Контекст; + +КонецФункции + +Функция ДанныеТабличнойЧасти(Контекст) + + Возврат Контекст.Данные[Контекст.ТекущаяТабличнаяЧасть]; + +КонецФункции + +Функция ПересечениеТипов(Знач ОписаниеТипов, Знач ОграничениеТипов, ИмяРеквизита) + + ТипОграничения = ТипЗнч(ОграничениеТипов); + + Если ТипОграничения = Тип("Строка") Тогда + ОграничениеТипов = Новый ОписаниеТипов(ОграничениеТипов); + ТипОграничения = Тип("ОписаниеТипов"); + КонецЕсли; + + Если ТипОграничения = Тип("Тип") И ОписаниеТипов.СодержитТип(ОграничениеТипов) И ОграничениеТипов <> Тип("Неопределено") Тогда + Результат = ЮТКоллекции.ЗначениеВМассиве(ОграничениеТипов); + ИначеЕсли ТипОграничения = Тип("ОписаниеТипов") Тогда + Результат = ЮТКоллекции.ПересечениеМассивов(ОписаниеТипов.Типы(), ОграничениеТипов.Типы()); + Иначе + Результат = Неопределено; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Результат) Тогда + + Сообщение = СтрШаблон("Исправьте ограничение типов для реквизита `%1` (`%2`), оно не входит в множество типов реквизита (`%3`)", + ИмяРеквизита, + ОграничениеТипов, + ОписаниеТипов); + ВызватьИсключение Сообщение; + + КонецЕсли; + + Возврат Новый ОписаниеТипов(Результат, + ОписаниеТипов.КвалификаторыЧисла, + ОписаниеТипов.КвалификаторыСтроки, + ОписаниеТипов.КвалификаторыДаты, + ОписаниеТипов.КвалификаторыДвоичныхДанных); + +КонецФункции + +Функция Реквизиты(Контекст) + + Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда + Возврат Контекст.Метаданные.ТабличныеЧасти[Контекст.ТекущаяТабличнаяЧасть]; + Иначе + Возврат Контекст.Метаданные.Реквизиты; + КонецЕсли; + +КонецФункции + +Функция ОписаниеРеквизита(Контекст, ИмяРеквизита) + + Реквизиты = Реквизиты(Контекст); + + Если НЕ Реквизиты.Свойство(ИмяРеквизита) Тогда + ИмяОсновнойТаблицы = ЮТМетаданные.НормализованноеИмяТаблицы(Контекст.Метаданные); + Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда + Пояснение = СтрШаблон("Табличная часть `%1.%2` не содержит реквизит `%3`", ИмяОсновнойТаблицы, Контекст.ТекущаяТабличнаяЧасть, ИмяРеквизита); + Иначе + Пояснение = СтрШаблон("`%1` не содержит реквизит `%2`", ИмяОсновнойТаблицы, ИмяРеквизита); + КонецЕсли; + + ВызватьИсключение Пояснение; + КонецЕсли; + + Возврат Реквизиты[ИмяРеквизита]; + +КонецФункции + +Функция ТекущаяЗапись(Контекст) + + Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда + Возврат ДанныеСтроки(Контекст); + Иначе + Возврат Контекст.Данные; + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебный.xml new file mode 100644 index 0000000..2c0eada --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТКонтекстСлужебный + + + ru + Контекст тестового движка + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..d60983b --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебный/Ext/Module.bsl @@ -0,0 +1,339 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// ИнициализироватьКонтекст +// Выполняет начальную настройку для работы с хранимым контекстом +Процедура ИнициализироватьКонтекст() Экспорт + +#Если НЕ Клиент Тогда + ВызватьИсключение "Метод `ИнициализироватьКонтекст` должен вызываться только с клиента"; +#Иначе + ЮТКонтекстСлужебныйКлиент.ИнициализироватьКонтекст(); + ЮТКонтекстСлужебныйВызовСервера.ИнициализироватьКонтекст(); + ОбновитьПовторноИспользуемыеЗначения(); +#КонецЕсли + +КонецПроцедуры + +// ДанныеКонтекста +// Возвращает хранимые данные контекста. +// Существует отдельно контекст сервера, отдельно клиента, эти контексты никак не связаны и никак не синхронизируются +// Возвращаемое значение: +// Структура - Данные контекста +Функция ДанныеКонтекста() Экспорт + +#Если Клиент Тогда + Возврат ЮТКонтекстСлужебныйКлиент.ДанныеКонтекста(); +#Иначе + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебныйВызовСервера.ДанныеКонтекста(); +#КонецЕсли + +КонецФункции + +// ЗначениеКонтекста +// Возвращает значение вложенного контекста, вложенного реквизита контекста +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита/вложенного контекста +// ПолучитьССервера - Булево - Получить значение из серверного контекста +// Возвращаемое значение: +// - Структура - Значение реквизита/вложенного контекста +// - Неопределено +Функция ЗначениеКонтекста(ИмяРеквизита, ПолучитьССервера = Ложь) Экспорт + +#Если Клиент Тогда + Если ПолучитьССервера Тогда + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебныйВызовСервера.ЗначениеКонтекста(ИмяРеквизита); + КонецЕсли; +#КонецЕсли + + Объект = ДанныеКонтекста(); + + Если Объект = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Ключи = СтрРазделить(ИмяРеквизита, "."); + Для Инд = 0 По Ключи.Количество() - 2 Цикл + Объект = Объект[Ключи[Инд]]; + КонецЦикла; + + //@skip-check constructor-function-return-section + Возврат ЮТКоллекции.ЗначениеСтруктуры(Объект, Ключи[Ключи.ВГраница()]); + +КонецФункции + +// УстановитьЗначениеКонтекста +// Устанавливает значение вложенного контекста, вложенного реквизита контекста +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита/вложенного контекста +// Значение - Произвольный - Новое значение реквизита/вложенного контекста +// УстановитьНаСервер - Булево - Установить также на сервер +Процедура УстановитьЗначениеКонтекста(Знач ИмяРеквизита, Знач Значение, Знач УстановитьНаСервер = Ложь) Экспорт + + ДанныеКонтекста = ДанныеКонтекста(); + + Объект = ДанныеКонтекста; + Ключи = СтрРазделить(ИмяРеквизита, "."); + Для Инд = 0 По Ключи.Количество() - 2 Цикл + Объект = Объект[Ключи[Инд]]; + КонецЦикла; + + Объект.Вставить(Ключи[Ключи.ВГраница()], Значение); + +#Если НЕ Сервер Тогда + Если УстановитьНаСервер Тогда + ЮТКонтекстСлужебныйВызовСервера.УстановитьЗначениеКонтекста(ИмяРеквизита, Значение); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +// КонтекстТеста +// Возвращает структуру, в которой можно хранить данные используемые в тесте +// Данные живут в рамках одного теста, но доступны в обработчиках событий `ПередКаждымТестом` и `ПослеКаждогоТеста` +// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста` +// +// Параметры: +// ПолучитьССервера - Булево - Получить контекст с сервера +// +// Возвращаемое значение: +// - Структура - Контекст теста +// - Неопределено - Если метод вызывается за рамками теста +Функция КонтекстТеста(ПолучитьССервера = Ложь) Экспорт + + //@skip-check constructor-function-return-section + Возврат ЗначениеКонтекста(ИмяКонтекстаТеста(), ПолучитьССервера); + +КонецФункции + +// КонтекстНабора +// Возвращает структуру, в которой можно хранить данные используемые в тестах набора +// Данные живут в рамках одного набора тестов (данные между клиентом и сервером не синхронизируются) +// Доступны в каждом тесте набора и в обработчиках событий +// + `ПередТестовымНабором` +// + `ПослеТестовогоНабора` +// + `ПередКаждымТестом` +// + `ПослеКаждогоТеста` +// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста` +// Возвращаемое значение: +// - Структура - Контекст набора тестов +// - Неопределено - Если метод вызывается за рамками тестового набора +Функция КонтекстНабора() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЗначениеКонтекста(ИмяКонтекстаНабораТестов()); + +КонецФункции + +// КонтекстМодуля +// Возвращает структуру, в которой можно хранить данные используемые в тестах модуля +// Данные живут в рамках одного тестового модуля (данные между клиентом и сервером не синхронизируются) +// Доступны в каждом тесте модуля и в обработчиках событий +// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеВсехТестов` +// Возвращаемое значение: +// - Структура - Контекст тестового модуля +// - Неопределено - Если метод вызывается за рамками тестового модуля +Функция КонтекстМодуля() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЗначениеКонтекста(ИмяКонтекстаМодуля()); + +КонецФункции + +Функция ГлобальныеНастройкиВыполнения() Экспорт + + Возврат ЗначениеКонтекста(ИмяГлобальныеНастройкиВыполнения()); + +КонецФункции + +// КонтекстПроверки +// Возвращает служебный контекста, данные выполняемой проверки +// Возвращаемое значение: +// Неопределено, Структура - Контекст проверки +Функция КонтекстПроверки() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЗначениеКонтекста(ИмяКонтекстаУтверждений()); + +КонецФункции + +// КонтекстЧитателя +// Возвращает служебный контекста, данные необходимые на этапе загрузки тестов +// Возвращаемое значение: +// Неопределено, Структура - Контекст проверки +Функция КонтекстЧитателя() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЗначениеКонтекста(ИмяКонтекстаЧитателя()); + +КонецФункции + +// КонтекстЧитателя +// Возвращает служебный контекста, данные используемые исполнителем тестов +// Возвращаемое значение: +// см. ЮТФабрикаСлужебный.НовыйКонтекстИсполнения +Функция КонтекстИсполнения() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЗначениеКонтекста(ИмяКонтекстаИсполнения()); + +КонецФункции + +// Контекст исполнения текущего уровня. +// +// Возвращаемое значение: +// - Неопределено +// - См. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// - См. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// - См. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +Функция КонтекстИсполненияТекущегоУровня() Экспорт + + Уровни = ЮТФабрика.УровниИсполнения(); + КонтекстИсполнения = КонтекстИсполнения(); + + Если КонтекстИсполнения.Уровень = Уровни.Модуль Тогда + + Возврат КонтекстИсполнения.Модуль; + + ИначеЕсли КонтекстИсполнения.Уровень = Уровни.НаборТестов Тогда + + Возврат КонтекстИсполнения.Набор; + + ИначеЕсли КонтекстИсполнения.Уровень = Уровни.Тест Тогда + + Возврат КонтекстИсполнения.Тест; + + Иначе + + Возврат Неопределено; + + КонецЕсли; + +КонецФункции + +Функция ОписаниеКонтекста() Экспорт + + Описание = Новый Структура; + + Возврат Описание; + +КонецФункции + +Процедура УстановитьКонтекстУтверждений(Знач ДанныеКонтекста) Экспорт + + УстановитьЗначениеКонтекста(ИмяКонтекстаУтверждений(), ДанныеКонтекста); + +КонецПроцедуры + +Процедура УстановитьКонтекстНабораТестов() Экспорт + + УстановитьЗначениеКонтекста(ИмяКонтекстаНабораТестов(), Новый Структура); + +КонецПроцедуры + +Процедура УстановитьКонтекстМодуля() Экспорт + + УстановитьЗначениеКонтекста(ИмяКонтекстаМодуля(), Новый Структура); + +КонецПроцедуры + +Процедура УстановитьКонтекстТеста() Экспорт + + УстановитьЗначениеКонтекста(ИмяКонтекстаТеста(), Новый Структура); + +КонецПроцедуры + +Процедура УстановитьКонтекстЧитателя(Знач ДанныеКонтекста) Экспорт + + УстановитьЗначениеКонтекста(ИмяКонтекстаЧитателя(), ДанныеКонтекста, Истина); + +КонецПроцедуры + +Процедура УстановитьКонтекстИсполнения(Знач ДанныеКонтекста) Экспорт + + УстановитьЗначениеКонтекста(ИмяКонтекстаИсполнения(), ДанныеКонтекста, Истина); + +КонецПроцедуры + +Процедура УстановитьГлобальныеНастройкиВыполнения(Знач Настройки) Экспорт + + УстановитьЗначениеКонтекста(ИмяГлобальныеНастройкиВыполнения(), Настройки, Истина); + +КонецПроцедуры + +Процедура УдалитьКонтекст() Экспорт + +#Если Клиент Тогда + ЮТКонтекстСлужебныйКлиент.УдалитьКонтекст(); +#КонецЕсли + ЮТКонтекстСлужебныйВызовСервера.УдалитьКонтекст(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИмяКонтекстаУтверждений() + + Возврат "КонтекстУтверждения"; + +КонецФункции + +Функция ИмяКонтекстаНабораТестов() + + Возврат "КонтекстНабора"; + +КонецФункции + +Функция ИмяКонтекстаМодуля() + + Возврат "КонтекстМодуля"; + +КонецФункции + +Функция ИмяКонтекстаТеста() + + Возврат "КонтекстТеста"; + +КонецФункции + +Функция ИмяКонтекстаЧитателя() + + Возврат "КонтекстЧитателя"; + +КонецФункции + +Функция ИмяГлобальныеНастройкиВыполнения() + + Возврат "ГлобальныеНастройкиВыполнения"; + +КонецФункции + +Функция ИмяКонтекстаИсполнения() + + Возврат "КонтекстИсполнения"; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйВызовСервера.xml new file mode 100644 index 0000000..b1787ec --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТКонтекстСлужебныйВызовСервера + + + ru + Контекст (сервер) + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..bbd92c4 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,95 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ИнициализироватьКонтекст() Экспорт + + Контекст = ЮТКонтекстСлужебный.ОписаниеКонтекста(); + АдресХранилища = ПоместитьВоВременноеХранилище(Контекст, Новый УникальныйИдентификатор()); + ХранилищеОбщихНастроек.Сохранить(КлючНастроекКонтекста(), "АдресХранилища", АдресХранилища); + + ОбновитьПовторноИспользуемыеЗначения(); + +КонецПроцедуры + +Функция ДанныеКонтекста() Экспорт + + Адрес = АдресСерверногоКонтекста(); + + Если ЭтоАдресВременногоХранилища(Адрес) Тогда + + Возврат ПолучитьИзВременногоХранилища(АдресСерверногоКонтекста()); + + КонецЕсли; + +КонецФункции + +// УстановитьЗначениеКонтекста +// Устанавливает значение вложенного контекста, вложенного реквизита контекста +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита/вложенного контекста +// Значение - Произвольный - Новое значение реквизита/вложенного контекста +Процедура УстановитьЗначениеКонтекста(Знач ИмяРеквизита, Знач Значение) Экспорт + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяРеквизита, Значение); + +КонецПроцедуры + +Функция ЗначениеКонтекста(Знач ИмяРеквизита) Экспорт + + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяРеквизита); + +КонецФункции + +Функция КлючНастроекКонтекста() Экспорт + + Возврат СтрШаблон("ЮТ%1.Контекста", НомерСеансаИнформационнойБазы()); + +КонецФункции + +Функция АдресСерверногоКонтекста(Кэшировать = Истина) Экспорт + + Если Кэшировать Тогда + + Возврат ЮТСлужебныйПовторногоИспользования.АдресСерверногоКонтекста(); + + Иначе + + Возврат ХранилищеОбщихНастроек.Загрузить(КлючНастроекКонтекста(), "АдресХранилища"); + + КонецЕсли; + +КонецФункции + +Процедура УдалитьКонтекст() Экспорт + + Адрес = АдресСерверногоКонтекста(); + + Если ЭтоАдресВременногоХранилища(Адрес) Тогда + УдалитьИзВременногоХранилища(Адрес); + УстановитьПривилегированныйРежим(Истина); + ХранилищеОбщихНастроек.Удалить(КлючНастроекКонтекста(), "АдресХранилища", Неопределено); + УстановитьПривилегированныйРежим(Ложь); + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйКлиент.xml b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйКлиент.xml new file mode 100644 index 0000000..1b404ea --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйКлиент.xml @@ -0,0 +1,23 @@ + + + + + ЮТКонтекстСлужебныйКлиент + + + ru + Контекст (клиент) + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйКлиент/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйКлиент/Ext/Module.bsl new file mode 100644 index 0000000..a20cef8 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстСлужебныйКлиент/Ext/Module.bsl @@ -0,0 +1,39 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ИнициализироватьКонтекст() Экспорт + + ЮТДанныеКонтекста = ЮТКонтекстСлужебный.ОписаниеКонтекста(); // BSLLS:UnusedLocalVariable-off + +КонецПроцедуры + +Функция ДанныеКонтекста() Экспорт + + Возврат ЮТДанныеКонтекста; + +КонецФункции + +Процедура УдалитьКонтекст() Экспорт + + ЮТДанныеКонтекста = Неопределено; // BSLLS:UnusedLocalVariable-off + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстТеста.xml b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстТеста.xml new file mode 100644 index 0000000..2c9decb --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстТеста.xml @@ -0,0 +1,23 @@ + + + + + ЮТКонтекстТеста + + + ru + Контекст теста + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТКонтекстТеста/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстТеста/Ext/Module.bsl new file mode 100644 index 0000000..d3659f7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТКонтекстТеста/Ext/Module.bsl @@ -0,0 +1,126 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает значение контекста +// +// Параметры: +// ИмяЗначения - Строка +// +// Возвращаемое значение: +// Произвольный - Сохраненное в контексте значение +Функция Значение(ИмяЗначения) Экспорт + + Уровень = ЮТКонтекстСлужебный.КонтекстИсполнения().Уровень; + Уровни = ЮТФабрика.УровниИсполнения(); + + КонтекстТеста = ЮТКонтекстСлужебный.КонтекстТеста(); + Если Уровень = Уровни.Тест И КонтекстТеста <> Неопределено И КонтекстТеста.Свойство(ИмяЗначения) Тогда + + Возврат КонтекстТеста[ИмяЗначения]; + + КонецЕсли; + + КонтекстНабора = ЮТКонтекстСлужебный.КонтекстНабора(); + Если (Уровень = Уровни.НаборТестов ИЛИ Уровень = Уровни.Тест) + И КонтекстНабора <> Неопределено И КонтекстНабора.Свойство(ИмяЗначения) Тогда + + Возврат КонтекстНабора[ИмяЗначения]; + + КонецЕсли; + + КонтекстМодуля = ЮТКонтекстСлужебный.КонтекстМодуля(); + Если (Уровень = Уровни.Модуль ИЛИ Уровень = Уровни.Тест ИЛИ Уровень = Уровни.НаборТестов) + И КонтекстМодуля <> Неопределено И КонтекстМодуля.Свойство(ИмяЗначения) Тогда + + Возврат КонтекстМодуля[ИмяЗначения]; + + Иначе + + Возврат Неопределено; + + КонецЕсли; + +КонецФункции + +// Установить значение. +// Устанавливает значение в контекст тестов. +// Установка происходит в соответствии с уровнем исполнения +// Параметры: +// ИмяЗначения - Строка +// Значение - Произвольный +Процедура УстановитьЗначение(ИмяЗначения, Значение) Экспорт + + Уровень = ЮТКонтекстСлужебный.КонтекстИсполнения().Уровень; + Уровни = ЮТФабрика.УровниИсполнения(); + + Контекст = ТекущийКонтекст(); + + Если Контекст = Неопределено Тогда + + Если Уровень = Уровни.Тест Тогда + ЮТКонтекстСлужебный.УстановитьКонтекстТеста(); + ИначеЕсли Уровень = Уровни.НаборТестов Тогда + ЮТКонтекстСлужебный.УстановитьКонтекстНабораТестов(); + ИначеЕсли Уровень = Уровни.Модуль Тогда + ЮТКонтекстСлужебный.УстановитьКонтекстМодуля(); + Иначе + ВызватьИсключение СтрШаблон("Неизвестный уровень исполнения `%1`", Уровень); + КонецЕсли; + + Контекст = ТекущийКонтекст(); + + КонецЕсли; + + Контекст.Вставить(ИмяЗначения, Значение); + +КонецПроцедуры + +// Текущий контекст исполнения теста +// +// Возвращаемое значение: +// Неопределено, Структура, Произвольный - Текущий контекст +Функция ТекущийКонтекст() Экспорт + + Уровень = ЮТКонтекстСлужебный.КонтекстИсполнения().Уровень; + Уровни = ЮТФабрика.УровниИсполнения(); + + Если Уровень = Уровни.Тест Тогда + + Контекст = ЮТКонтекстСлужебный.КонтекстТеста(); + + ИначеЕсли Уровень = Уровни.НаборТестов Тогда + + Контекст = ЮТКонтекстСлужебный.КонтекстНабора(); + + ИначеЕсли Уровень = Уровни.Модуль Тогда + + Контекст = ЮТКонтекстСлужебный.КонтекстМодуля(); + + Иначе + + Контекст = Неопределено; + + КонецЕсли; + + Возврат Контекст; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогИсполненияТестаСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТЛогИсполненияТестаСлужебный.xml new file mode 100644 index 0000000..37a3af3 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогИсполненияТестаСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТЛогИсполненияТестаСлужебный + + + ru + Лог исполнения теста служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогИсполненияТестаСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЛогИсполненияТестаСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..a329dfe --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогИсполненияТестаСлужебный/Ext/Module.bsl @@ -0,0 +1,84 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ДобавитьСообщение(Текст) Экспорт + + ДобавитьЗапись("[INF] " + Текст); + +КонецПроцедуры + +Процедура ДобавитьОшибку(Текст) Экспорт + + ДобавитьЗапись("[ERR] " + Текст); + +КонецПроцедуры + +Процедура ДобавитьПредупреждение(Текст) Экспорт + + ДобавитьЗапись("[WRN] " + Текст); + +КонецПроцедуры + +Функция Записи() Экспорт + + Если ЮТест.КонтекстТеста() = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Лог = ЮТКоллекции.ЗначениеСтруктуры(ЮТест.КонтекстТеста(), "Лог"); +#Если Сервер Тогда + Возврат Лог; +#Иначе + СерверныйКонтекст = ЮТКонтекстСлужебный.КонтекстТеста(Истина); + СерверныйЛог = ЮТКоллекции.ЗначениеСтруктуры(СерверныйКонтекст, "Лог"); + + Если Лог = Неопределено Тогда + Лог = СерверныйЛог; + ИначеЕсли СерверныйЛог <> Неопределено Тогда + ЮТКоллекции.ДополнитьМассив(Лог, СерверныйЛог); + КонецЕсли; +#КонецЕсли + + Возврат Лог; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьЗапись(Текст) + + Если ЮТест.КонтекстТеста() = Неопределено Тогда + Возврат; + КонецЕсли; + + Ошибки = Неопределено; + + Если НЕ ЮТест.КонтекстТеста().Свойство("Лог", Ошибки) Тогда + Ошибки = Новый Массив(); + ЮТест.КонтекстТеста().Вставить("Лог", Ошибки); + КонецЕсли; + + Ошибки.Добавить(Текст); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогирование.xml b/src/cfe/YAXUnit/CommonModules/ЮТЛогирование.xml new file mode 100644 index 0000000..dd00493 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогирование.xml @@ -0,0 +1,23 @@ + + + + + ЮТЛогирование + + + ru + Логирование + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогирование/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЛогирование/Ext/Module.bsl new file mode 100644 index 0000000..88588c3 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогирование/Ext/Module.bsl @@ -0,0 +1,71 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Выводит отладочное сообщение +// +// Параметры: +// Сообщение - Строка - Сообщение +Процедура Отладка(Сообщение) Экспорт + + ЮТЛогированиеСлужебный.Записать("DBG", Сообщение, 0); + +КонецПроцедуры + +// Выводит информационное сообщение +// +// Параметры: +// Сообщение - Строка - Сообщение +Процедура Информация(Сообщение) Экспорт + + ЮТЛогированиеСлужебный.Записать("INF", Сообщение, 10); + +КонецПроцедуры + +// Выводит предупреждение +// +// Параметры: +// Сообщение - Строка - Сообщение +Процедура Предостережение(Сообщение) Экспорт + + ЮТЛогированиеСлужебный.Записать("WRN", Сообщение, 20); + +КонецПроцедуры + +// Выводит сообщение об ошибке +// +// Параметры: +// Сообщение - Строка - Сообщение +Процедура Ошибка(Сообщение) Экспорт + + ЮТЛогированиеСлужебный.Записать("ERR", Сообщение, 99); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция УровниЛога() Экспорт + + Возврат Новый ФиксированнаяСтруктура("Отладка, Информация, Предупреждение, Ошибка", "debug", "info", "warning", "error"); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебный.xml new file mode 100644 index 0000000..273c9a1 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТЛогированиеСлужебный + + + ru + Логирование служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..a53c92e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебный/Ext/Module.bsl @@ -0,0 +1,395 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура Записать(УровеньЛога, Сообщение, Приоритет) Экспорт + + Контекст = Контекст(); + Если НЕ ЛогированиеВключено(Контекст, Приоритет) Тогда + Возврат; + КонецЕсли; + +#Если Клиент Тогда + КонтекстИсполнения = "Клиент"; +#Иначе + КонтекстИсполнения = "Сервер"; +#КонецЕсли + Текст = СтрШаблон("%1 [%2][%3]: %4", ЮТОбщий.ПредставлениеУниверсальнойДата(), КонтекстИсполнения, УровеньЛога, Сообщение); +#Если Клиент Тогда + ЗаписатьСообщения(Контекст, ЮТКоллекции.ЗначениеВМассиве(Текст)); +#Иначе + Если Контекст.ФайлЛогаДоступенНаСервере Тогда + ЗаписатьСообщения(Контекст, ЮТКоллекции.ЗначениеВМассиве(Текст)); + Иначе + Контекст.НакопленныеЗаписи.Добавить(Текст); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +Процедура ВывестиСерверныеСообщения() Экспорт + +#Если Клиент Тогда + Контекст = Контекст(); + Если Контекст = Неопределено ИЛИ НЕ Контекст.Включено ИЛИ Контекст.ФайлЛогаДоступенНаСервере Тогда + Возврат; + КонецЕсли; + + Сообщения = ЮТЛогированиеСлужебныйВызовСервера.НакопленныеСообщенияЛогирования(Истина); + ЗаписатьСообщения(Контекст, Сообщения); +#Иначе + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ВывестиСерверныеСообщения"); +#КонецЕсли + +КонецПроцедуры + +Функция НакопленныеСообщенияЛогирования(Очистить = Ложь) Экспорт + + Контекст = Контекст(); + + Сообщения = Контекст.НакопленныеЗаписи; + + Если Очистить Тогда + Контекст.НакопленныеЗаписи = Новый Массив(); + КонецЕсли; + + Возврат Сообщения; + +КонецФункции + +#Область ОбработчикиСобытий + +// Инициализация. +// +// Параметры: +// ПараметрыЗапуска - см. ЮТФабрика.ПараметрыЗапуска +Процедура Инициализация(ПараметрыЗапуска) Экспорт + + УровниЛога = ЮТЛогирование.УровниЛога(); + + ДанныеКонтекста = НовыйДанныеКонтекста(); + ДанныеКонтекста.ФайлЛога = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "file"); + ДанныеКонтекста.ВыводВКонсоль = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "console", Ложь); + ДанныеКонтекста.Включено = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "enable", Неопределено); + УровеньЛога = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "level", УровниЛога.Отладка); + + Если ДанныеКонтекста.Включено = Неопределено Тогда + ДанныеКонтекста.Включено = ДанныеКонтекста.ВыводВКонсоль ИЛИ ЗначениеЗаполнено(ДанныеКонтекста.ФайлЛога); + КонецЕсли; + + Если НЕ ДанныеКонтекста.Включено Тогда + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаЛогирования(), ДанныеКонтекста, Истина); + Возврат; + КонецЕсли; + + Если СтрСравнить(УровеньЛога, УровниЛога.Ошибка) = 0 Тогда + ДанныеКонтекста.УровеньЛога = 99; + ИначеЕсли СтрСравнить(УровеньЛога, УровниЛога.Информация) = 0 Тогда + ДанныеКонтекста.УровеньЛога = 10; + ИначеЕсли СтрСравнить(УровеньЛога, УровниЛога.Предупреждение) = 0 Тогда + ДанныеКонтекста.УровеньЛога = 20; + Иначе + ДанныеКонтекста.УровеньЛога = 0; + КонецЕсли; + + ЗначениеПроверки = Строка(Новый УникальныйИдентификатор()); + ЗаписатьСообщения(ДанныеКонтекста, ЮТКоллекции.ЗначениеВМассиве(ЗначениеПроверки), Ложь); + + ДанныеКонтекста.ФайлЛогаДоступенНаСервере = ЮТЛогированиеСлужебныйВызовСервера.ФайлЛогаДоступенНаСервере(ДанныеКонтекста.ФайлЛога, ЗначениеПроверки); + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаЛогирования(), ДанныеКонтекста, Истина); + + Разделитель = "------------------------------------------------------"; + ЗаписатьСообщения(ДанныеКонтекста, ЮТКоллекции.ЗначениеВМассиве(Разделитель), Ложь); + + ЮТЛогирование.Информация("Старт"); + +КонецПроцедуры + +// Обработка события "ПередЧтениеСценариев" +Процедура ПередЧтениеСценариев() Экспорт + + ЮТЛогирование.Информация("Загрузка сценариев"); + +КонецПроцедуры + +// Перед чтением сценариев модуля. +// +// Параметры: +// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// ИсполняемыеСценарии - см. ЮТТесты.СценарииМодуля +Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт + + ЮТЛогирование.Информация(СтрШаблон("Загрузка сценариев модуля `%1`", МетаданныеМодуля.Имя)); + +КонецПроцедуры + +// Перед чтением сценариев модуля. +// +// Параметры: +// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// ИсполняемыеСценарии - см. ЮТТесты.СценарииМодуля +Процедура ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт + + ЮТЛогирование.Информация(СтрШаблон("Загрузка сценариев модуля завершена `%1`", МетаданныеМодуля.Имя)); + +КонецПроцедуры + +// Обработка события "ПослеЧтенияСценариев" +// Параметры: +// Сценарии - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей, которые содержат информацию о запускаемых тестах +Процедура ПослеЧтенияСценариев(Сценарии) Экспорт + + ЮТЛогирование.Информация("Загрузка сценариев завершена."); + +КонецПроцедуры + +// Обработка события "ПослеФормированияИсполняемыхНаборовТестов" +// Параметры: +// ИсполняемыеТестовыеМодули - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля - Набор исполняемых наборов +Процедура ПослеФормированияИсполняемыхНаборовТестов(ИсполняемыеТестовыеМодули) Экспорт + + Количество = 0; + + Для Каждого ТестовыйМодуль Из ИсполняемыеТестовыеМодули Цикл + + Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл + + Если Набор.Выполнять Тогда + ЮТОбщий.Инкремент(Количество, Набор.Тесты.Количество()); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаЛогирования() + ".ОбщееКоличествоТестов", Количество, Истина); + +КонецПроцедуры + +// Перед всеми тестами. +// +// Параметры: +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +Процедура ПередВсемиТестами(ОписаниеСобытия) Экспорт + +#Если Клиент Тогда + Контекст = Контекст(); + ПрогрессКлиент = Контекст.КоличествоВыполненныхТестов; + ПрогрессСервер = ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаЛогирования() + ".КоличествоВыполненныхТестов", Истина); + + Если ПрогрессКлиент < ПрогрессСервер Тогда + Контекст.КоличествоВыполненныхТестов = ПрогрессСервер; + КонецЕсли; +#КонецЕсли + ЮТЛогирование.Информация(СтрШаблон("Запуск тестов модуля `%1`", ОписаниеСобытия.Модуль.МетаданныеМодуля.ПолноеИмя)); + +КонецПроцедуры + +// Перед тестовым набором. +// +// Параметры: +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +Процедура ПередТестовымНабором(ОписаниеСобытия) Экспорт + + ЮТЛогирование.Информация(СтрШаблон("Запуск тестов набора `%1`", ОписаниеСобытия.Набор.Имя)); + +КонецПроцедуры + +// Перед каждым тестом. +// +// Параметры: +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт + + ЮТЛогирование.Информация(СтрШаблон("Запуск теста `%1`", ОписаниеСобытия.Тест.Имя)); + +КонецПроцедуры + +// Перед каждым тестом. +// +// Параметры: +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт + + Контекст = Контекст(); + Если НЕ ЛогированиеВключено(Контекст) Тогда + Возврат; + КонецЕсли; + + ЮТОбщий.Инкремент(Контекст.КоличествоВыполненныхТестов); + ЮТЛогирование.Информация(СтрШаблон("%1 Завершен тест `%2`", Прогресс(), ОписаниеСобытия.Тест.Имя)); + +КонецПроцедуры + +// Перед каждым тестом. +// +// Параметры: +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +Процедура ПослеТестовогоНабора(ОписаниеСобытия) Экспорт + + ЮТЛогирование.Информация(СтрШаблон("Завершен тестовый набор `%1`", ОписаниеСобытия.Набор.Имя)); + +КонецПроцедуры + +// Перед каждым тестом. +// +// Параметры: +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +Процедура ПослеВсехТестов(ОписаниеСобытия) Экспорт + + Контекст = Контекст(); + Если НЕ ЛогированиеВключено(Контекст) Тогда + Возврат; + КонецЕсли; +#Если Клиент Тогда + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаЛогирования() + ".КоличествоВыполненныхТестов", Контекст.КоличествоВыполненныхТестов, Истина); +#КонецЕсли + + ЮТЛогирование.Информация(СтрШаблон("Завершен модуль `%1`", ОписаниеСобытия.Модуль.МетаданныеМодуля.ПолноеИмя)); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Запись + +Функция ЛогированиеВключено(Знач Контекст = Неопределено, Приоритет = Неопределено) + + Если Контекст = Неопределено Тогда + Контекст = Контекст(); + КонецЕсли; + + Возврат Контекст <> Неопределено И Контекст.Включено И (Приоритет = Неопределено ИЛИ Контекст.УровеньЛога <= Приоритет); + +КонецФункции + +Процедура ЗаписатьСообщения(Контекст, Сообщения, Дописывать = Истина) + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЗаписатьСообщения"); +#Иначе + Если Контекст.ВыводВКонсоль Тогда + ЗаписатьЛогВКонсоль(Сообщения); + КонецЕсли; + + Если ЗначениеЗаполнено(Контекст.ФайлЛога) Тогда + ЗаписатьЛогВФайл(Контекст.ФайлЛога, Сообщения, Дописывать); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +Процедура ЗаписатьЛогВФайл(ФайлЛога, Сообщения, Дописывать = Истина) + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЗаписатьЛогВФайл"); +#Иначе + Запись = Новый ЗаписьТекста(ФайлЛога, КодировкаТекста.UTF8, , Дописывать); + + Для Каждого Сообщение Из Сообщения Цикл + Запись.ЗаписатьСтроку(Сообщение); + КонецЦикла; + + Запись.Закрыть(); +#КонецЕсли + +КонецПроцедуры + +Процедура ЗаписатьЛогВКонсоль(Сообщения) + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЗаписатьЛогВКонсоль"); +#Иначе + //@skip-check empty-except-statement + Попытка + Для Каждого Сообщение Из Сообщения Цикл + ЮТОбщий.ВывестиВКонсоль(Сообщение); + КонецЦикла; + Исключение + // Игнорируем ошибку + КонецПопытки; +#КонецЕсли + +КонецПроцедуры + +Функция Прогресс() + + Контекст = Контекст(); + Прогресс = Окр(100 * Контекст.КоличествоВыполненныхТестов / Контекст.ОбщееКоличествоТестов, 0); + + Возврат СтрШаблон("%1%% (%2/%3)", Прогресс, Контекст.КоличествоВыполненныхТестов, Контекст.ОбщееКоличествоТестов); + +КонецФункции + +#КонецОбласти + +#Область Контекст + +// Контекст. +// +// Возвращаемое значение: +// см. НовыйДанныеКонтекста +Функция Контекст() + + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаЛогирования()); + +КонецФункции + +Функция ИмяКонтекстаЛогирования() + + Возврат "КонтекстЛогирования"; + +КонецФункции + +// Новый данные контекста. +// +// Возвращаемое значение: +// Структура - Новый данные контекста: +// * Включено - Булево - Логирование включено +// * ФайлЛога - Неопределено - Файл вывода лога +// * ВыводВКонсоль- Булево - Вывод лога в консоль +// * ФайлЛогаДоступенНаСервере - Булево - Файл лога доступен на сервере +// * НакопленныеЗаписи - Массив из Строка - Буфер для серверных сообщений +// * ОбщееКоличествоТестов - Число +// * КоличествоВыполненныхТестов - Число +// * УровеньЛога - Число - Уровень логирования +Функция НовыйДанныеКонтекста() + + ДанныеКонтекста = Новый Структура(); + ДанныеКонтекста.Вставить("Включено", Ложь); + ДанныеКонтекста.Вставить("ФайлЛога", Неопределено); + ДанныеКонтекста.Вставить("ВыводВКонсоль", Ложь); + ДанныеКонтекста.Вставить("ФайлЛогаДоступенНаСервере", Ложь); + ДанныеКонтекста.Вставить("НакопленныеЗаписи", Новый Массив()); + ДанныеКонтекста.Вставить("ОбщееКоличествоТестов", 0); + ДанныеКонтекста.Вставить("КоличествоВыполненныхТестов", 0); + ДанныеКонтекста.Вставить("УровеньЛога", 0); + + Возврат ДанныеКонтекста; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебныйВызовСервера.xml new file mode 100644 index 0000000..a4fd111 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТЛогированиеСлужебныйВызовСервера + + + ru + Логирование (вызов сервера) + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..680d529 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛогированиеСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,45 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция НакопленныеСообщенияЛогирования(Знач Очистить = Ложь) Экспорт + + Возврат ЮТЛогированиеСлужебный.НакопленныеСообщенияЛогирования(Очистить); + +КонецФункции + +Функция ФайлЛогаДоступенНаСервере(Знач ИмяФайла, Знач ЗначениеПроверки) Экспорт + + Попытка + + Чтение = Новый ЧтениеТекста(ИмяФайла); + Строка = Чтение.ПрочитатьСтроку(); + Чтение.Закрыть(); + + Возврат Строка = ЗначениеПроверки; + + Исключение + + Возврат Ложь; + + КонецПопытки; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛокальСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТЛокальСлужебный.xml new file mode 100644 index 0000000..c769b3c --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛокальСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТЛокальСлужебный + + + ru + Локаль служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЛокальСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЛокальСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..9cedb36 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЛокальСлужебный/Ext/Module.bsl @@ -0,0 +1,50 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ЛокальПлатформы() Экспорт + + Возврат ТекущийЯзыкСистемы(); + +КонецФункции + +Функция ЭтоАнглийскаяЛокальПлатформы() Экспорт + + Возврат ЛокальПлатформы() = "en"; + +КонецФункции + +Функция ЭтоРусскаяЛокальПлатформы() Экспорт + + Возврат ЛокальПлатформы() = "ru"; + +КонецФункции + +Функция ЛокальИнтерфейса() Экспорт + +#Если Клиент Тогда + Возврат ТекущийЯзык(); +#Иначе + Возврат ТекущийЯзык().КодЯзыка; +#КонецЕсли + +КонецФункции + +#КонецОбласти + diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданные.xml b/src/cfe/YAXUnit/CommonModules/ЮТМетаданные.xml new file mode 100644 index 0000000..bbc2fc2 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданные.xml @@ -0,0 +1,23 @@ + + + + + ЮТМетаданные + + + ru + Метаданные + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданные/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТМетаданные/Ext/Module.bsl new file mode 100644 index 0000000..9c543f2 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданные/Ext/Module.bsl @@ -0,0 +1,256 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Модули подсистемы. +// Возвращает список модулей подсистемы +// Подсистема должна находится в подсистеме "ЮТДинамическиПодключаемые" +// Параметры: +// ИмяПодсистемы - Строка - Имя подсистемы +// Серверные - Булево - Возвращять модули доступные на сервере +// Клиентские - Булево - Возвращять модули доступные на клиенте +// Возвращаемое значение: +// Массив из Строка - Имена модулей входящих в подсистему +Функция МодулиПодсистемы(ИмяПодсистемы, Серверные = Истина, Клиентские = Истина) Экспорт + + Возврат ЮТМетаданныеСлужебныйПовтИсп.МодулиПодсистемы(ИмяПодсистемы, Серверные, Клиентские); + +КонецФункции + +// Описание объекта метаданных. +// +// Параметры: +// Значение - ОбъектМетаданных +// - Тип - Тип объекта информационной базы +// - Строка - Полное имя объекта метаданных +// - см. СтруктураОписанияОбъектаМетаданных +// - Произвольный - Объект информационной базы +// +// Возвращаемое значение: +// см. СтруктураОписанияОбъектаМетаданных +Функция ОписаниеОбъектаМетаданных(Знач Значение) Экспорт + + Если ЮТМетаданныеСлужебный.ЭтоОписаниеОбъектаМетаданных(Значение) Тогда + //@skip-check constructor-function-return-section + Возврат Значение; + КонецЕсли; + + ТипЗначения = ТипЗнч(Значение); + + ТипТип = Тип("Тип"); +#Если Сервер Тогда + Если ТипЗначения = Тип("ОбъектМетаданных") Тогда + Значение = Значение.ПолноеИмя(); + ТипЗначения = Тип("Строка"); + КонецЕсли; +#КонецЕсли + + Если ТипЗначения <> ТипТип И ТипЗначения <> Тип("Строка") Тогда + Значение = ТипЗнч(Значение); + ТипЗначения = ТипТип; + КонецЕсли; + + Если ТипЗначения = ТипТип Тогда + ИдентификаторТипа = ЮТТипыДанныхСлужебный.ИдентификаторТипа(Значение); // Для работы кэширования + //@skip-check constructor-function-return-section + Возврат ЮТМетаданныеСлужебныйПовтИсп.ОписаниеОбъектаМетаданныхПоИдентификаторуТипа(ИдентификаторТипа); + Иначе + //@skip-check constructor-function-return-section + Возврат ЮТМетаданныеСлужебныйПовтИсп.ОписаниеОбъектаМетаданных(Значение); + КонецЕсли; + +КонецФункции + +// Возвращает нормализованное имя таблицы, то которое можно использовать в запросах +// +// Параметры: +// Значение - ОбъектМетаданных +// - Тип - Тип объекта информационной базы +// - Строка - Полное имя объекта метаданных +// - см. СтруктураОписанияОбъектаМетаданных +// - Произвольный - Объект информационной базы +// +// Возвращаемое значение: +// Строка - Нормализованное имя таблицы +Функция НормализованноеИмяТаблицы(Значение) Экспорт + + Описание = ОписаниеОбъектаМетаданных(Значение); + + Возврат СтрШаблон("%1.%2", Описание.ОписаниеТипа.Имя, Описание.Имя); + +КонецФункции + +// Проверка, что переданное значение относится к перечислениям. +// +// Параметры: +// Значение - ОбъектМетаданных +// - Тип - Тип объекта информационной базы +// - Строка - Полное имя объекта метаданных +// - см. СтруктураОписанияОбъектаМетаданных +// - Произвольный - Объект информационной базы +// +// Возвращаемое значение: +// Булево - Это перечисление +Функция ЭтоПеречисление(Значение) Экспорт + + Описание = ОписаниеОбъектаМетаданных(Значение); + Возврат Описание <> Неопределено И Описание.ОписаниеТипа.Имя = "Перечисление"; + +КонецФункции + +// Проверка, что переданное значение относится к регистрам. +// +// Параметры: +// Значение - ОбъектМетаданных +// - Тип - Тип объекта информационной базы +// - Строка - Полное имя объекта метаданных +// - см. СтруктураОписанияОбъектаМетаданных +// - Произвольный - Объект информационной базы +// +// Возвращаемое значение: +// Булево - Это перечисление +Функция ЭтоРегистр(Значение) Экспорт + + Описание = ОписаниеОбъектаМетаданных(Значение); + Возврат Описание <> Неопределено И СтрНачинаетсяС(Описание.ОписаниеТипа.Имя, "Регистр"); + +КонецФункции + +// Разрешены ли синхронные вызовы в параметрах конфигурации. +// +// Возвращаемое значение: +// Булево - Разрешены синхронные вызовы +Функция РазрешеныСинхронныеВызовы() Экспорт + + Возврат ЮТМетаданныеСлужебныйПовтИсп.РазрешеныСинхронныеВызовы(); + +КонецФункции + +// Возвращяет набор регистров движений документа +// +// Параметры: +// Документ - ОбъектМетаданных +// - Тип - Тип объекта информационной базы +// - Строка - Полное имя объекта метаданных +// - см. СтруктураОписанияОбъектаМетаданных +// - ДокументСсылка, ДокументОбъект - Объект информационной базы +// - ДокументМенеджер - Менеджер вида документа +// +// Возвращаемое значение: +// Структура - Регистры движений документа. Ключи - Имя регистра, Значение - Полное имя регистра +Функция РегистрыДвиженийДокумента(Документ) Экспорт + + ОписаниеОбъектаМетаданных = ОписаниеОбъектаМетаданных(Документ); + + ПолноеИмя = СтрШаблон("%1.%2", ОписаниеОбъектаМетаданных.ОписаниеТипа.ИмяКоллекции, ОписаниеОбъектаМетаданных.Имя); + + Возврат ЮТМетаданныеСлужебныйПовтИсп.РегистрыДвиженийДокумента(ПолноеИмя); + +КонецФункции + +// Возвращает текущую версию тестового движка (YAxUnit) +// +// Возвращаемое значение: +// Строка - Версия движка +Функция ВерсияДвижка() Экспорт + + Возврат ЮТМетаданныеСлужебныйПовтИсп.ВерсияДвижка(); + +КонецФункции + +// Описание типа объекта метаданных. +// +// Возвращаемое значение: +// Структура - Описание типа метаданных: +// * Имя - Строка +// * ИмяКоллекции - Строка +// * Конструктор - Строка +// * Группы - Булево +// * Ссылочный - Булево +// * Регистр - Булево +// * ОбработкаОтчет - Булево +// * СтандартныеРеквизиты - Булево +// * Реквизиты - Булево +// * Измерения - Булево +// * Ресурсы - Булево +// * РеквизитыАдресации - Булево +// * ТабличныеЧасти - Булево +Функция ОписаниеТипаМетаданных() Экспорт + + Описание = Новый Структура(); + Описание.Вставить("Имя", ""); + Описание.Вставить("ИмяКоллекции", ""); + Описание.Вставить("Конструктор", ""); + Описание.Вставить("Группы", Ложь); + Описание.Вставить("Ссылочный", Ложь); + Описание.Вставить("Регистр", Ложь); + Описание.Вставить("ОбработкаОтчет", Ложь); + Описание.Вставить("СтандартныеРеквизиты", Ложь); + Описание.Вставить("Реквизиты", Ложь); + Описание.Вставить("Измерения", Ложь); + Описание.Вставить("Ресурсы", Ложь); + Описание.Вставить("РеквизитыАдресации", Ложь); + Описание.Вставить("ТабличныеЧасти", Ложь); + + Возврат Описание; + +КонецФункции + +// Описание объекта метаданных. +// +// Возвращаемое значение: +// Структура - Описание объекта метаданных: +// * Имя - Строка +// * ОписаниеТипа - см. ОписаниеТипаМетаданных +// * Реквизиты - Структура +// * ТабличныеЧасти - Структура +Функция СтруктураОписанияОбъектаМетаданных() Экспорт + + Описание = Новый Структура; + Описание.Вставить("Имя", ""); + Описание.Вставить("ОписаниеТипа", Неопределено); + Описание.Вставить("Реквизиты", Новый Структура()); + Описание.Вставить("ТабличныеЧасти", Новый Структура()); + + //@skip-check constructor-function-return-section + Возврат Описание; + +КонецФункции + +// Описание реквизита объекта метаданных +// +// Возвращаемое значение: +// Структура - Описание реквизита: +// * Имя - Строка +// * Тип - ОписаниеТипов +// * Обязательный - Булево +// * ЭтоКлюч - Булево +Функция ОписаниеРеквизита() Экспорт + + Описание = Новый Структура(); + Описание.Вставить("Имя", ""); + Описание.Вставить("Тип", Новый ОписаниеТипов("Неопределено")); + Описание.Вставить("Обязательный", Ложь); + Описание.Вставить("ЭтоКлюч", Ложь); + + Возврат Описание; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебный.xml new file mode 100644 index 0000000..72f316d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТМетаданныеСлужебный + + + ru + Метаданные служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..e6d9c28 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебный/Ext/Module.bsl @@ -0,0 +1,31 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ЭтоОписаниеОбъектаМетаданных(Значение) Экспорт + + Возврат ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗнч(Значение)) И ЮТОбщий.ЭтаСтруктураИмеетТип(Значение, "ОписаниеОбъектаМетаданных"); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйВызовСервера.xml new file mode 100644 index 0000000..8fd7b3f --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТМетаданныеСлужебныйВызовСервера + + + ru + Метаданные (сервер) + + + + false + false + true + false + true + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..357f2d7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,379 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// МодулиРасширений +// Выполняет чтение метаданных общих модулей, которые предположительно могут являться тестами +// +// Возвращаемое значение: +// Массив из см. ЮТФабрикаСлужебный.ОписаниеМодуля - Коллекция описаний моделей, структуру элемента см. ЮТФабрикаСлужебный.ОписаниеМодуля +Функция МодулиРасширений() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МетаданныеМодулей = Новый Массив; + + Для Каждого Модуль Из Метаданные.ОбщиеМодули Цикл + + Если Модуль.РасширениеКонфигурации() <> Неопределено Тогда + + МетаданныеМодуля = МетаданныеМодуля(Модуль); + МетаданныеМодулей.Добавить(МетаданныеМодуля); + + КонецЕсли; + + КонецЦикла; + + Возврат МетаданныеМодулей; + +КонецФункции + +// Модули подсистемы. +// Возвращает список модулей подсистемы +// Подсистема должна находится в подсистеме "ЮТДинамическиПодключаемые" +// Параметры: +// ИмяПодсистемы - Строка - Имя подсистемы +// Серверные - Булево - Возвращять модули доступные на сервере +// Клиентские - Булево - Возвращять модули доступные на клиенте +// +// Возвращаемое значение: +// Массив из Строка - Имена модулей входящих в подсистему +Функция МодулиПодсистемы(Знач ИмяПодсистемы, Знач Серверные, Знач Клиентские) Экспорт + + Подсистема = Метаданные.Подсистемы.ЮТДинамическиПодключаемые.Подсистемы.Найти(ИмяПодсистемы); + + Если Подсистема = Неопределено Тогда + + ВызватьИсключение СтрШаблон("Подсистема ""%1"" не найдена", ИмяПодсистемы); + + КонецЕсли; + + Модули = Новый Массив(); + + Для Каждого Объект Из Подсистема.Состав Цикл + + Если Метаданные.ОбщиеМодули.Содержит(Объект) Тогда + + Добавить = (Серверные И Клиентские) + ИЛИ (Серверные И (Объект.Сервер)) + ИЛИ (Клиентские И (Объект.КлиентУправляемоеПриложение Или Объект.ВызовСервера)); + // КлиентОбычноеПриложение сознательно не анализируется, он должен идти в паре с другой настройкой + + Если Добавить Тогда + Модули.Добавить(Объект.Имя); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Модули; + +КонецФункции + +Функция МетаданныеМодуля(Знач Модуль) Экспорт + + Если ТипЗнч(Модуль) = Тип("Строка") Тогда + ИмяМодуля = Модуль; + Модуль = Метаданные.ОбщиеМодули.Найти(ИмяМодуля); + + Если Модуль = Неопределено Тогда + ВызватьИсключение "Не найден модуль с именем " + ИмяМодуля; + КонецЕсли; + КонецЕсли; + + Описание = ЮТФабрикаСлужебный.ОписаниеМодуля(); + Описание.Имя = Модуль.Имя; + Описание.КлиентУправляемоеПриложение = Модуль.КлиентУправляемоеПриложение; + Описание.КлиентОбычноеПриложение = Модуль.КлиентОбычноеПриложение; + Описание.Глобальный = Модуль.Глобальный; + Описание.Сервер = Модуль.Сервер; + Описание.ВызовСервера = Модуль.ВызовСервера; + Описание.Расширение = Модуль.РасширениеКонфигурации().Имя; + Описание.ПолноеИмя = СтрШаблон("%1.%2", Описание.Расширение, Модуль.Имя); + + Возврат Описание; + +КонецФункции + +Функция ОписаниеОбъектаМетаданных(Знач Значение, ЗаполнятьРеквизиты = Истина) Экспорт + + МетаданныеОбъекта = ОбъектМетаданных(Значение); + ОписаниеТипа = ОписаниеТипаМетаданных(МетаданныеОбъекта); + + ОписаниеОбъект = ЮТМетаданные.СтруктураОписанияОбъектаМетаданных(); + ОписаниеОбъект.Имя = МетаданныеОбъекта.Имя; + ОписаниеОбъект.ОписаниеТипа = ОписаниеТипа; + ЮТОбщий.УказатьТипСтруктуры(ОписаниеОбъект, "ОписаниеОбъектаМетаданных"); + + Если НЕ ЗаполнятьРеквизиты Тогда + Возврат ОписаниеОбъект; + КонецЕсли; + + Если ОписаниеТипа.СтандартныеРеквизиты Тогда + ДобавитьОписанияРеквизитов(МетаданныеОбъекта.СтандартныеРеквизиты, ОписаниеОбъект.Реквизиты, "Ссылка, Период"); + КонецЕсли; + + Если ОписаниеТипа.Измерения Тогда + ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Измерения, ОписаниеОбъект.Реквизиты, Истина); + КонецЕсли; + + Если ОписаниеТипа.Реквизиты Тогда + ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Реквизиты, ОписаниеОбъект.Реквизиты, Ложь); + КонецЕсли; + + Если ОписаниеТипа.Ресурсы Тогда + ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Ресурсы, ОписаниеОбъект.Реквизиты, Ложь); + КонецЕсли; + + Если ОписаниеТипа.РеквизитыАдресации Тогда + ДобавитьОписанияРеквизитов(МетаданныеОбъекта.РеквизитыАдресации, ОписаниеОбъект.Реквизиты, Ложь); + КонецЕсли; + + ДобавитьОбщиеРеквизиты(МетаданныеОбъекта, ОписаниеОбъект.Реквизиты); + + Если ОписаниеТипа.ТабличныеЧасти Тогда + + Для Каждого ТабличнаяЧасть Из МетаданныеОбъекта.ТабличныеЧасти Цикл + РеквизитыТабличнойЧасти = Новый Структура(); + ДобавитьОписанияРеквизитов(ТабличнаяЧасть.Реквизиты, РеквизитыТабличнойЧасти, Ложь); + + ОписаниеОбъект.ТабличныеЧасти.Вставить(ТабличнаяЧасть.Имя, РеквизитыТабличнойЧасти); + КонецЦикла; + + КонецЕсли; + + Возврат Новый ФиксированнаяСтруктура(ОписаниеОбъект); + +КонецФункции + +// Описание типа метаданных. +// +// Параметры: +// МетаданныеОбъекта - Тип, ОбъектМетаданных - Тип +// +// Возвращаемое значение: +// см. ЮТМетаданные.ОписаниеТипаМетаданных +Функция ОписаниеТипаМетаданных(Знач МетаданныеОбъекта) Экспорт + + Если ТипЗнч(МетаданныеОбъекта) = Тип("Тип") Тогда + МетаданныеОбъекта = Метаданные.НайтиПоТипу(МетаданныеОбъекта); + КонецЕсли; + + ПолноеИмя = МетаданныеОбъекта.ПолноеИмя(); + ЧастиИмени = СтрРазделить(ПолноеИмя, "."); + Типы = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных(); + + Если НЕ Типы.Свойство(ЧастиИмени[0]) Тогда + Сообщение = СтрШаблон("Получение описания для '%1' не поддерживается, либо не реализовано", ЧастиИмени[0]); + ВызватьИсключение Сообщение; + КонецЕсли; + + Описание = ЮТМетаданные.ОписаниеТипаМетаданных(); + ЗаполнитьЗначенияСвойств(Описание, Типы[ЧастиИмени[0]]); + //@skip-check constructor-function-return-section + Возврат Новый ФиксированнаяСтруктура(Описание); + +КонецФункции + +Функция ТипыМетаданных() Экспорт + + Макет = ПолучитьОбщийМакет("ЮТОписаниеМетаданных").ПолучитьТекст(); + КоллекцияОписаний = ЮТТестовыеДанные.ТаблицаMarkDown(Макет); + + ТипыМетаданных = Новый Структура(); + + Для Каждого Запись Из КоллекцияОписаний Цикл + + Описание = Новый Структура(); + Описание.Вставить("Имя", Запись.Имя); + Описание.Вставить("ИмяКоллекции", Запись.ИмяКоллекции); + Описание.Вставить("Конструктор", Запись.Конструктор); + Описание.Вставить("Группы", Запись.Группы = "+"); + Описание.Вставить("Ссылочный", Запись.Ссылочный = "+"); + Описание.Вставить("Реквизиты", Запись.Реквизиты = "+"); + Описание.Вставить("Измерения", Запись.Измерения = "+"); + Описание.Вставить("Ресурсы", Запись.Ресурсы = "+"); + Описание.Вставить("РеквизитыАдресации", Запись.РеквизитыАдресации = "+"); + Описание.Вставить("ТабличныеЧасти", Запись.ТабличныеЧасти = "+"); + Описание.Вставить("СтандартныеРеквизиты", Запись.СтандартныеРеквизиты = "+"); + Описание.Вставить("ОбработкаОтчет", Запись.Имя = "Обработка" ИЛИ Запись.Имя = "Отчет"); + Описание.Вставить("Регистр", СтрНачинаетсяС(Запись.Имя, "Регистр")); + + ТипыМетаданных.Вставить(Описание.Имя, Описание); + ТипыМетаданных.Вставить(Описание.ИмяКоллекции, Описание); + + КонецЦикла; + + Возврат ТипыМетаданных; + +КонецФункции + +Функция РазрешеныСинхронныеВызовы() Экспорт + + Возврат Метаданные.РежимИспользованияСинхронныхВызововРасширенийПлатформыИВнешнихКомпонент + = Метаданные.СвойстваОбъектов.РежимИспользованияСинхронныхВызововРасширенийПлатформыИВнешнихКомпонент.Использовать; + +КонецФункции + +Функция РегистрыДвиженийДокумента(ПолноеИмя) Экспорт + + ОбъектМетаданных = ОбъектМетаданных(ПолноеИмя); + + Если НЕ Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда + ВызватьИсключение "Движения доступны только для документов. Не поддерживается получение движений для " + ПолноеИмя; + КонецЕсли; + + Регистры = Новый Структура; + + Для Каждого Регистр Из ОбъектМетаданных.Движения Цикл + + Регистры.Вставить(Регистр.Имя, Регистр.ПолноеИмя()); + + КонецЦикла; + + Возврат Регистры; + +КонецФункции + +Функция ВариантВстроенногоЯзыка() Экспорт + + Возврат String(Metadata.ScriptVariant); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ОбъектМетаданных(Значение) + + ТипЗначение = ТипЗнч(Значение); + + Если ТипЗначение = Тип("Тип") Тогда + + ОбъектМетаданных = Метаданные.НайтиПоТипу(Значение); + + ИначеЕсли ТипЗначение = Тип("ОбъектМетаданных") Тогда + + ОбъектМетаданных = Значение; + + ИначеЕсли ТипЗначение = Тип("Строка") Тогда + + ОбъектМетаданных = ОбъектМетаданныхИзСтроки(Значение); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗначение) И Значение.Свойство("ОписаниеТипа") И Значение.Свойство("Имя") Тогда + + ОбъектМетаданных = Метаданные[Значение.ОписаниеТипа.ИмяКоллекции][Значение.Имя]; + + Иначе + + ОбъектМетаданных = Неопределено; + + КонецЕсли; + + Если ОбъектМетаданных = Неопределено Тогда + Сообщение = ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТМетаданныеСлужебныйВызовСервера.ОбъектМетаданных", Значение); + ВызватьИсключение Сообщение; + КонецЕсли; + + Возврат ОбъектМетаданных; + +КонецФункции + +Функция ОбъектМетаданныхИзСтроки(Значение) + + ЧастиСтроки = СтрРазделить(Значение, "."); + + Если ЧастиСтроки.Количество() = 2 Тогда + + ТипыМетаданных = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных(); + ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]]; + Если ОписаниеТипа <> Неопределено Тогда + ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции].Найти(ЧастиСтроки[1]); + + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение "Не найден объект метаданных " + Значение; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат ОбъектМетаданных; + +КонецФункции + +Процедура ДобавитьОписанияРеквизитов(КоллекцияРеквизитов, КоллекцияОписаний, Знач ЭтоКлюч) + + Если ТипЗнч(ЭтоКлюч) = Тип("Строка") Тогда + ИменаКлючевыхПолей = СтрРазделить(ЭтоКлюч, ", "); + КонецЕсли; + + Для Каждого Реквизит Из КоллекцияРеквизитов Цикл + + Если ИменаКлючевыхПолей <> Неопределено Тогда + ЭтоКлюч = ИменаКлючевыхПолей.Найти(Реквизит.Имя) <> Неопределено; + КонецЕсли; + + КоллекцияОписаний.Вставить(Реквизит.Имя, НовоеОписаниеРеквизита(Реквизит, ЭтоКлюч)); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьОбщиеРеквизиты(МетаданныеОбъекта, КоллекцияОписаний) + + Использовать = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать; + Авто = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Авто; + АвтоИспользование = Метаданные.СвойстваОбъектов.АвтоИспользованиеОбщегоРеквизита.Использовать; + + Для Каждого Реквизит Из Метаданные.ОбщиеРеквизиты Цикл + + ЭлементСостава = Реквизит.Состав.Найти(МетаданныеОбъекта); + + Если ЭлементСостава = Неопределено Тогда + Продолжить; + ИначеЕсли ЭлементСостава.Использование = Использовать Или Реквизит.АвтоИспользование = АвтоИспользование И ЭлементСостава.Использование = Авто Тогда + КоллекцияОписаний.Вставить(Реквизит.Имя, НовоеОписаниеРеквизита(Реквизит, Ложь)); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция НовоеОписаниеРеквизита(Реквизит, ЭтоКлюч) + + Описание = ЮТМетаданные.ОписаниеРеквизита(); + Описание.Имя = Реквизит.Имя; + Описание.Тип = Реквизит.Тип; + Описание.Обязательный = Реквизит.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку; + Описание.ЭтоКлюч = ЭтоКлюч; + + Возврат Описание; + +КонецФункции + +Функция ВерсияДвижка() Экспорт + + Возврат Метаданные.ОбщиеМодули.ЮТМетаданныеСлужебныйВызовСервера.РасширениеКонфигурации().Версия; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйПовтИсп.xml b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйПовтИсп.xml new file mode 100644 index 0000000..2cadde2 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + ЮТМетаданныеСлужебныйПовтИсп + + + ru + Метаданные (повторного использования) + + + + false + true + true + false + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйПовтИсп/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..8d826e7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетаданныеСлужебныйПовтИсп/Ext/Module.bsl @@ -0,0 +1,70 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция МодулиПодсистемы(ИмяПодсистемы, Серверные, Клиентские) Экспорт + + Возврат ЮТМетаданныеСлужебныйВызовСервера.МодулиПодсистемы(ИмяПодсистемы, Серверные, Клиентские); + +КонецФункции + +Функция ОписаниеОбъектаМетаданных(Знач Менеджер) Экспорт + + Возврат ЮТМетаданныеСлужебныйВызовСервера.ОписаниеОбъектаМетаданных(Менеджер); + +КонецФункции + +Функция ОписаниеОбъектаМетаданныхПоИдентификаторуТипа(Знач ИдентификаторТипа) Экспорт + + Тип = ЮТТипыДанныхСлужебный.ТипПоИдентификатору(ИдентификаторТипа); + Возврат ЮТМетаданныеСлужебныйВызовСервера.ОписаниеОбъектаМетаданных(Тип); + +КонецФункции + +Функция ТипыМетаданных() Экспорт + + Возврат ЮТМетаданныеСлужебныйВызовСервера.ТипыМетаданных(); + +КонецФункции + +Функция РазрешеныСинхронныеВызовы() Экспорт + + Возврат ЮТМетаданныеСлужебныйВызовСервера.РазрешеныСинхронныеВызовы(); + +КонецФункции + +Функция РегистрыДвиженийДокумента(ПолноеИмя) Экспорт + + Возврат ЮТМетаданныеСлужебныйВызовСервера.РегистрыДвиженийДокумента(ПолноеИмя); + +КонецФункции + +Функция ВариантВстроенногоЯзыка() Экспорт + + Возврат ЮТМетаданныеСлужебныйВызовСервера.ВариантВстроенногоЯзыка(); + +КонецФункции + +Функция ВерсияДвижка() Экспорт + + Возврат ЮТМетаданныеСлужебныйВызовСервера.ВерсияДвижка(); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетодыСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТМетодыСлужебный.xml new file mode 100644 index 0000000..10b573e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетодыСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТМетодыСлужебный + + + ru + Общий служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТМетодыСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТМетодыСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..1793479 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТМетодыСлужебный/Ext/Module.bsl @@ -0,0 +1,185 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ВызовУстаревшегоМетода(УстаревшийМетод, РекомендуемыйМетод, Версия) Экспорт + + Сообщение = СтрШаблон("Используется устаревший метод '%1'. В следующих релизах он будет удален", УстаревшийМетод); + + Если ЗначениеЗаполнено(РекомендуемыйМетод) Тогда + Сообщение = СтрШаблон("%1. Рекомендуется использовать '%2'", Сообщение, РекомендуемыйМетод); + КонецЕсли; + + ЮТЛогирование.Предостережение(Сообщение); + + Если ЮТСтроки.СравнитьВерсии(Версия, ВерсияЗапретаИспользованияУстаревших()) <= 0 Тогда + ВызватьИсключение Сообщение; + Иначе + ЮТОбщий.СообщитьПользователю(Сообщение); + КонецЕсли; + +КонецПроцедуры + +#Область ПроверкаМетодов + +// МетодМодуляСуществует +// Проверяет существование публичного (экспортного) метода у модуля +// +// Параметры: +// ИмяМодуля - Строка - Имя модуля, метод которого нужно поискать +// ИмяМетода - Строка - Имя метода, который ищем +// Кешировать - Булево - Признак кеширования результата проверки +// +// Возвращаемое значение: +// Булево - Метод найден +Функция МетодМодуляСуществует(ИмяМодуля, ИмяМетода, Кешировать = Истина) Экспорт + + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяМодуля, Тип("Строка"), "ЮТОбщий.МетодМодуляСуществует", "ИмяМодуля"); + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяМетода, Тип("Строка"), "ЮТОбщий.МетодМодуляСуществует", "ИмяМетода"); + + Если Кешировать Тогда + Возврат ЮТСлужебныйПовторногоИспользования.МетодМодуляСуществует(ИмяМодуля, ИмяМетода); + КонецЕсли; + + ПолноеИмяМетода = СтрШаблон("%1.%2", ИмяМодуля, ИмяМетода); + Алгоритм = ПолноеИмяМетода + "(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)"; + + Ошибка = ВыполнитьМетод(Алгоритм); + + ТипОшибки = ЮТРегистрацияОшибокСлужебный.ТипОшибки(Ошибка, ПолноеИмяМетода); + Возврат ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().МногоПараметров; + +КонецФункции + +// Проверяет существование публичного (экспортного) метода у объекта +// +// Параметры: +// Объект - Произвольный - Объект, метод которого нужно поискать +// ИмяМетода - Строка - Имя метода, который ищем +// +// Возвращаемое значение: +// Булево - Метод найден +Функция МетодОбъектаСуществует(Объект, ИмяМетода) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТОбщий.МетодОбъектаСуществует"); +#Иначе + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяМетода, Тип("Строка"), "ЮТОбщий.МетодМодуляСуществует", "ИмяМетода"); + + ПолноеИмяМетода = СтрШаблон("Объект.%1", ИмяМетода); + Алгоритм = ПолноеИмяМетода + "(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)"; + + Ошибка = ВыполнитьМетод(Алгоритм, , Объект); + + ТипОшибки = ЮТРегистрацияОшибокСлужебный.ТипОшибки(Ошибка, ПолноеИмяМетода); + Возврат ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().МногоПараметров; +#КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область ВызовМетодов + +Функция ВыполнитьМетод(ПолноеИмяМетода, Параметры = Неопределено, Объект = Неопределено) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТОбщий.ВыполнитьМетод"); +#Иначе + Если СтрЗаканчиваетсяНа(ПолноеИмяМетода, ")") Тогда + + Алгоритм = ПолноеИмяМетода; + + ИначеЕсли НЕ ЗначениеЗаполнено(Параметры) Тогда + + Алгоритм = ПолноеИмяМетода + "()"; + + ИначеЕсли ТипЗнч(Параметры) = Тип("Массив") Тогда + + Алгоритм = СтрШаблон("%1(%2)", ПолноеИмяМетода, СтрокаПараметровМетода(Параметры, "Параметры")); + + Иначе + + ВызватьИсключение СтрШаблон("Не верный тип параметров `%1` для вызова метода, должен быть массив", ТипЗнч(Параметры)); + + КонецЕсли; + + Попытка + //@skip-check server-execution-safe-mode + Выполнить(Алгоритм); + Исключение + Возврат ИнформацияОбОшибке(); + КонецПопытки; + + Возврат Неопределено; +#КонецЕсли + +КонецФункции + +Функция ВычислитьБезопасно(Выражение) Экспорт + +#Если НЕ ВебКлиент И НЕ ТонкийКлиент Тогда + УстановитьБезопасныйРежим(Истина); + Попытка + Значение = Вычислить(Выражение); + Исключение + УстановитьБезопасныйРежим(Ложь); + ВызватьИсключение; + КонецПопытки; + + УстановитьБезопасныйРежим(Ложь); +#Иначе + Значение = Вычислить(Выражение); +#КонецЕсли + + Возврат Значение; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ВерсияЗапретаИспользованияУстаревших() + + Возврат "23.01"; + +КонецФункции + +Функция СтрокаПараметровМетода(Параметры, ИмяПеременнойСПараметрами) + + СписокПараметров = Новый Массив(); + + Для Инд = 0 По Параметры.ВГраница() Цикл + + Если Параметры[Инд] = Мокито.ПараметрПоУмолчанию() Тогда + СписокПараметров.Добавить(""); + Иначе + СписокПараметров.Добавить(СтрШаблон("%1[%2]", ИмяПеременнойСПараметрами, Инд)); + КонецЕсли; + + КонецЦикла; + + Возврат СтрСоединить(СписокПараметров, ", "); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТНастройкиВыполнения.xml b/src/cfe/YAXUnit/CommonModules/ЮТНастройкиВыполнения.xml new file mode 100644 index 0000000..8010ebe --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТНастройкиВыполнения.xml @@ -0,0 +1,23 @@ + + + + + ЮТНастройкиВыполнения + + + ru + Параметры + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТНастройкиВыполнения/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТНастройкиВыполнения/Ext/Module.bsl new file mode 100644 index 0000000..56a39e6 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТНастройкиВыполнения/Ext/Module.bsl @@ -0,0 +1,121 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает значение настройки "ВТранзакции" для текущего исполняемого объекта (тест, набор, модуль) +// +// Возвращаемое значение: +// Булево +Функция ВТранзакции() Экспорт + + ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции; + + Возврат ЗначениеНастройкиТеста(ИмяПараметра, Ложь); + +КонецФункции + +// Возвращает значение настройки "УдалениеТестовыхДанных" для текущего исполняемого объекта (тест, набор, модуль) +// +// Возвращаемое значение: +// Булево +Функция УдалениеТестовыхДанных() Экспорт + + ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных; + + Возврат ЗначениеНастройкиТеста(ИмяПараметра, Ложь); + +КонецФункции + +// Возвращает значение настройки "Перед" для текущего исполняемого объекта (тест, набор, модуль) +// Возвращает имя назначенного обработчика события (имя метода) "Перед". +// +// Возвращаемое значение: +// Строка +Функция Перед() Экспорт + + ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().Перед; + + Возврат ЗначениеНастройкиТеста(ИмяПараметра, "", Истина); + +КонецФункции + +// Возвращает значение настройки "После" для текущего исполняемого объекта (тест, набор, модуль) +// Возвращает имя назначенного обработчика события (имя метода) "После". +// +// Возвращаемое значение: +// Строка +Функция После() Экспорт + + ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().После; + + Возврат ЗначениеНастройкиТеста(ИмяПараметра, "", Истина); + +КонецФункции + +// Возвращает значение произвольной настройки для текущего исполняемого объекта (тест, набор, модуль) +// +// Параметры: +// ИмяНастройки - Строка - Имя настройки, см. ЮТФабрика.ПараметрыИсполненияТеста +// ЗначениеПоУмолчанию - Произвольный - Значение по умолчанию +// СтрогийУровеньИсполнения - Булево - Признак, стоит ли проверять наличие настройки у родительских элементов. +// Ложь - По умолчанию, будет выполнен поиск и получение значения для родетелей (набор, модуль), если значения для текущего элемента не установлено. +// Истина - Получение настройки только для текущего элемента. +// +// Возвращаемое значение: +// Произвольный, Неопределено, Булево, Строка - Значение настройки теста +Функция ЗначениеНастройкиТеста(ИмяНастройки, ЗначениеПоУмолчанию, СтрогийУровеньИсполнения = Ложь) Экспорт + + Значение = ЗначениеПоУмолчанию; + КонтекстИсполнения = ЮТКонтекстСлужебный.КонтекстИсполнения(); + + Если СтрогийУровеньИсполнения Тогда + + ТекущийКонтекстИсполнения = ЮТКонтекстСлужебный.КонтекстИсполненияТекущегоУровня(); + + Если ТекущийКонтекстИсполнения <> Неопределено Тогда + Значение = ЮТКоллекции.ЗначениеСтруктуры(ТекущийКонтекстИсполнения.НастройкиВыполнения, ИмяНастройки, ЗначениеПоУмолчанию); + КонецЕсли; + + ИначеЕсли КонтекстИсполнения.Тест <> Неопределено И КонтекстИсполнения.Тест.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда + + Значение = КонтекстИсполнения.Тест.НастройкиВыполнения[ИмяНастройки]; + + ИначеЕсли КонтекстИсполнения.Набор <> Неопределено И КонтекстИсполнения.Набор.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда + + Значение = КонтекстИсполнения.Набор.НастройкиВыполнения[ИмяНастройки]; + + ИначеЕсли КонтекстИсполнения.Модуль <> Неопределено И КонтекстИсполнения.Модуль.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда + + Значение = КонтекстИсполнения.Модуль.НастройкиВыполнения[ИмяНастройки]; + + Иначе + + ГлобальныеНастройки = ЮТКонтекстСлужебный.ГлобальныеНастройкиВыполнения(); + + Если ГлобальныеНастройки.Свойство(ИмяНастройки) Тогда + Значение = ГлобальныеНастройки[ИмяНастройки]; + КонецЕсли; + + КонецЕсли; + + Возврат Значение; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОбщий.xml b/src/cfe/YAXUnit/CommonModules/ЮТОбщий.xml new file mode 100644 index 0000000..8f5810e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОбщий.xml @@ -0,0 +1,23 @@ + + + + + ЮТОбщий + + + ru + Общий + + + Набор общих (во всех контекстах) методов + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОбщий/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТОбщий/Ext/Module.bsl new file mode 100644 index 0000000..903abe0 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОбщий/Ext/Module.bsl @@ -0,0 +1,890 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает значение свойства объекта. +// Возможно получение "глубоко" вложенных свойство и элементов коллекции по индексу +// +// Параметры: +// Объект - Произвольный +// ИмяСвойства - Строка - Путь к свойству. Примеры: "ИмяСвойства.ИмяВложенногоСвойства", "[2].ИмяСвойства", "ИмяСвойства[2].ИмяВложенногоСвойства" +// - Число - Индекс элемента. Возможен выбор элемента с конца, для этого нужно указывать отрицательный номер элемента с конца, +// например: '-1' - последний элемент, '-2' - предпоследний +// Возвращаемое значение: +// Произвольный +Функция ЗначениеСвойства(Объект, ИмяСвойства) Экспорт + + Путь = ЧастиПути(ИмяСвойства); + + Значение = Объект; + Для Каждого Часть Из Путь Цикл + + Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда +#Если ВебКлиент Или ТонкийКлиент Тогда + Значение = ЮТОбщийСлужебныйВызовСервера.ИзХранилищаЗначений(Значение); +#Иначе + Значение = Значение.Получить(); +#КонецЕсли + КонецЕсли; + + Если ТипЗнч(Часть) = Тип("Число") И Часть < 0 И ТипЗнч(Значение) <> Тип("Соответствие") Тогда + Часть = Значение.Количество() + Часть; + КонецЕсли; + + Значение = Значение[Часть]; + + КонецЦикла; + + Возврат Значение; + +КонецФункции + +// Вычисляет хеш по алгоритму md5. +// +// Параметры: +// Данные - Строка, ДвоичныеДанные - Данные, для которых необходимо вычислить хеш +// +// Возвращаемое значение: +// Строка +Функция ХешMD5(Данные) Экспорт + + Возврат ЮТОбщийСлужебныйВызовСервера.ХешMD5(Данные); + +КонецФункции + +#Область ДатаВремя + +// Добавляет к дате указанное значение временных интервалов +// +// Параметры: +// Дата - Дата +// Интервал - Число - Добавляемое +// ТипИнтервала - Строка - Тип интервала +// +// Возвращаемое значение: +// Дата +Функция ДобавитьКДате(Дата, Интервал, ТипИнтервала) Экспорт + + Если ЭтоМесяц(ТипИнтервала) Тогда + Возврат ДобавитьМесяц(Дата, Интервал); + КонецЕсли; + + Множитель = МножительПериода(ТипИнтервала); + Возврат Дата + Множитель * Интервал; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область Числа + +// Инкрементирует значение +// +// Параметры: +// Значение - Число +// Шаг - Число +// Возвращаемое значение: +// Число - Результат инкремента +Функция Инкремент(Значение, Знач Шаг = 1) Экспорт + + Значение = Значение + Шаг; + Возврат Значение; + +КонецФункции + +Функция ЧислоВСтроку(Значение) Экспорт + + Возврат Формат(Значение, "ЧН = 0; ЧГ="); + +КонецФункции + +#КонецОбласти + +#Область ДатаВремя + +// Человекочитаемое представление продолжительности +// +// Параметры: +// Продолжительность - Число - Продолжительность в миллисекундах +// +// Возвращаемое значение: +// Строка - Представление продолжительности +Функция ПредставлениеПродолжительности(Знач Продолжительность) Экспорт + + Представление = ЧислоВСтроку(Цел(Продолжительность / 1000)); + Представление = ЮТСтроки.ДобавитьСтроку(Представление, Формат(Продолжительность % 1000, "ЧЦ=3; ЧВН=;"), "."); + + Инкремент(Представление, " сек"); + + Возврат Представление; + +КонецФункции + +Функция ПредставлениеУниверсальнойДата(Знач УниверсальнаяДатаВМиллисекундах = Неопределено) Экспорт + + Если УниверсальнаяДатаВМиллисекундах = Неопределено Тогда + УниверсальнаяДатаВМиллисекундах = ТекущаяУниверсальнаяДатаВМиллисекундах(); + КонецЕсли; + + Дата = '00010101' + УниверсальнаяДатаВМиллисекундах / 1000; + Дата = МестноеВремя(Дата); + + Возврат СтрШаблон("%1.%2", Дата, Формат(УниверсальнаяДатаВМиллисекундах % 1000, "ЧЦ=3; ЧН=000; ЧВН=; ЧГ=0;")); + +КонецФункции + +#КонецОбласти + +#Область ЧтениеДанных + +Функция ДанныеТекстовогоФайла(ИмяФайла) Экспорт + +#Если НЕ ВебКлиент Тогда + Чтение = Новый ЧтениеТекста; + Чтение.Открыть(ИмяФайла, "UTF-8"); + Текст = Чтение.Прочитать(); + Чтение.Закрыть(); + + Возврат Текст; +#Иначе + ВызватьИсключение "Чтение данных текстовых файлов в веб-клиенте не поддерживается"; +#КонецЕсли + +КонецФункции + +Функция ЗначениеИзJSON(СтрокаJSON) Экспорт + +#Если НЕ ВебКлиент Тогда + Чтение = Новый ЧтениеJSON; + Чтение.УстановитьСтроку(СтрокаJSON); + Значение = ПрочитатьJSON(Чтение); + Чтение.Закрыть(); + Возврат Значение; +#Иначе + ВызватьИсключение "Разбор JSON строки в веб-клиенте не поддерживается"; +#КонецЕсли + +КонецФункции + +#КонецОбласти + +// ПеременнаяСодержитСвойство +// функция проверяет наличие свойства у значения любого типа данных. Если передано НЕОПРЕДЕЛЕНО, то ф-ия всегда вернет Ложь +// +// Параметры: +// Переменная - Произвольный - переменная любого типа, для которой необходимо проверить наличие свойства +// ИмяСвойства - Строка - переменная типа "Строка", содержащая искомое свойства +// +// Возвращаемое значение: +// Булево - признак наличия свойства у значения +// +Функция ПеременнаяСодержитСвойство(Переменная, ИмяСвойства) Экспорт + + Если Переменная = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + // Инициализируем структуру для теста с ключом (значение переменной "ИмяСвойства") и значением произвольного GUID'а + GUIDПроверка = Новый УникальныйИдентификатор; + СтруктураПроверка = Новый Структура; + СтруктураПроверка.Вставить(ИмяСвойства, GUIDПроверка); + // Заполняем созданную структуру из переданного значения переменной + ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная); + // Если значение для свойства структуры осталось GUIDПроверка, то искомое свойство не найдено, и наоборот. + Возврат СтруктураПроверка[ИмяСвойства] <> GUIDПроверка; + +КонецФункции + +// СообщитьПользователю +// Формирует и выводит сообщение +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +Процедура СообщитьПользователю(ТекстСообщенияПользователю) Экспорт + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = СокрЛП(ТекстСообщенияПользователю); + Сообщение.Сообщить(); + +КонецПроцедуры + +Функция СтрокаJSON(Значение, ИспользоватьСериализатор = Истина) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТОбщий.СтрокаJSON"); +#Иначе + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + Если ИспользоватьСериализатор Тогда + //@skip-check undefined-variable + СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Значение); + Иначе + ЗаписатьJSON(ЗаписьJSON, Значение); + КонецЕсли; + + Возврат ЗаписьJSON.Закрыть(); +#КонецЕсли + +КонецФункции // СтрокаJSON + +Функция ПредставлениеЗначения(Значение) Экспорт + + Попытка + Возврат СтрокаJSON(Значение); + Исключение + Возврат Строка(Значение); + КонецПопытки; + +КонецФункции + +// Параметры записи объекта +// +// Возвращаемое значение: +// Структура - Параметры записи: +// * ОбменДаннымиЗагрузка - Булево +// * ДополнительныеСвойства - Структура +// * РежимЗаписи - РежимЗаписиДокумента +// - Неопределено +Функция ПараметрыЗаписи() Экспорт + + ПараметрыЗаписи = Новый Структура(); + ПараметрыЗаписи.Вставить("ОбменДаннымиЗагрузка", Ложь); + ПараметрыЗаписи.Вставить("ДополнительныеСвойства", Новый Структура); + ПараметрыЗаписи.Вставить("РежимЗаписи", Неопределено); + + Возврат ПараметрыЗаписи; + +КонецФункции + +Функция УстановленБезопасныйРежим() Экспорт + + Возврат ЮТОбщийСлужебныйВызовСервера.УстановленБезопасныйРежим(); + +КонецФункции + +Функция МестноеВремяПоВременнойМетке(Метка) Экспорт + + Если ЗначениеЗаполнено(Метка) Тогда + Возврат МестноеВремя('00010101' + Метка / 1000); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Функция ПродолжительностьВСекундах(Продолжительность) Экспорт + + Возврат Продолжительность / 1000; + +КонецФункции + +Функция Модуль(ИмяМодуля) Экспорт + + Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(ИмяМодуля); + +КонецФункции + +Функция Менеджер(Знач Менеджер) Экспорт + +#Если Сервер Тогда + Возврат ЮТОбщийСлужебныйВызовСервера.Менеджер(Менеджер); +#Иначе + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТОбщий.Менеджер", "клиенте"); +#КонецЕсли + +КонецФункции + +Функция ТипСтруктуры(Структура) Экспорт + + Возврат ЮТКоллекции.ЗначениеСтруктуры(Структура, "__type__"); + +КонецФункции + +Функция ЭтаСтруктураИмеетТип(Структура, ИмяТипа) Экспорт + + Возврат ТипСтруктуры(Структура) = ИмяТипа; + +КонецФункции + +Процедура УказатьТипСтруктуры(Структура, ИмяТипа) Экспорт + + Структура.Вставить("__type__", ИмяТипа); + +КонецПроцедуры + +// Преостанавливает поток выполнения на указанное количество секунд +// +// Параметры: +// Время - Число - Продолжительность паузы в секундах, возможно указывать дробное значение +Процедура Пауза(Время) Экспорт + + Задержка = Цел(1000 * Время); + Компонента = ЮТКомпоненты.Пауза(); +#Если Сервер Тогда + Компонента.Ожидать(Задержка); +#Иначе + Если ЮТМетаданные.РазрешеныСинхронныеВызовы() Тогда + Компонента.Ожидать(Задержка); + Иначе + ВызватьИсключение "Пауза не работает на клиенте при отключенных синхронных вызовах"; + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +// Выводит сообщение в консоль (stdout) приложения +// +// Параметры: +// Сообщение - Строка - Выводимое сообщение +Процедура ВывестиВКонсоль(Сообщение) Экспорт + + Компонента = ЮТКомпоненты.Консоль(); +#Если Сервер Тогда + Компонента.Напечатать(Сообщение); +#Иначе + Если ЮТМетаданные.РазрешеныСинхронныеВызовы() Тогда + Компонента.Напечатать(Сообщение); + Иначе + Компонента.НачатьВызовНапечатать(ЮТАсинхроннаяОбработкаСлужебныйКлиент.НовыйПустойОбработчик(3), Сообщение); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +// Возвращяет макет +// +// Параметры: +// ИмяМакета - Строка - Возможные значения +// * Общий макет, например, ОбщийМакет.ЮТМетаданные +// * Макет объекта метаданных, например, Справочник.Товары.ПечатнаяФорма +// * Область макета, например, Справочник.Товары.ПечатнаяФорма.Шапка, ОбщийМакет.ЮТМетаданные.Заголовок +// +// Возвращаемое значение: +// ТабличныйДокумент, ТекстовыйДокумент, ДвоичныеДанные - Макет или его область +Функция Макет(ИмяМакета) Экспорт + + Возврат ЮТОбщийСлужебныйВызовСервера.Макет(ИмяМакета); + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Метод перенесен в см. ЮТСтроки.ДобавитьСтроку +// Конкатенирует строки, разделяя их разделителем +// +// Параметры: +// ИсходнаяСтрока - Строка - Исходная строка +// ДополнительнаяСтрока - Строка - Добавляемая строка +// Разделитель - Строка - Строка разделитель, любой набор символов - разделитель между подстроками +// +// Возвращаемое значение: +// Строка - Результат конкатенации строк +Функция ДобавитьСтроку(ИсходнаяСтрока, ДополнительнаяСтрока, Разделитель = ";") Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ДобавитьСтроку", "ЮТСтроки.ДобавитьСтроку", "24.03"); + Возврат ЮТСтроки.ДобавитьСтроку(ИсходнаяСтрока, ДополнительнаяСтрока, Разделитель); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТСтроки.РазделитьСтроку +// Возвращает массив на основании строки +// +// Параметры: +// Значение - Строка - преобразуемая строка +// Разделитель - Строка - строка-разделитель +// +// Возвращаемое значение: +// Массив Из Строка - массив строк +// +Функция РазложитьСтрокуВМассивПодстрок(Значение, Разделитель = ";") Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.РазложитьСтрокуВМассивПодстрок", "ЮТСтроки.РазбитьСтроку", "24.03"); + Возврат ЮТСтроки.РазделитьСтроку(Значение, Разделитель); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТСтроки.СтрокаСимволов +// Формирует строку из заданного количества повторяемых символов +// Параметры: +// Символ - Строка - Повторяемый символ +// Количество - Число - Количество повторений +// +// Возвращаемое значение: +// Строка - Строка повторяемых символов +Функция СформироватьСтрокуСимволов(Символ, Количество) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.СформироватьСтрокуСимволов", "ЮТСтроки.СтрокаСимволов", "24.03"); + Возврат ЮТСтроки.СтрокаСимволов(Символ, Количество); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.ЗначениеСтруктуры +// Возвращает требуемое поле структуры. В случае отсутствия поля возвращает значение по умолчанию +// +// Параметры: +// ИсходнаяСтруктура - Структура - Исходная структура +// ИмяПоля - Строка - Имя поля структуры +// ЗначениеПоУмолчанию - Произвольный - Значение, которое будет возвращено, если поля в структуре нет +// +// Возвращаемое значение: +// Произвольный - Значение искомого поля структуры +Функция ЗначениеСтруктуры(ИсходнаяСтруктура, ИмяПоля, ЗначениеПоУмолчанию = Неопределено) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ЗначениеСтруктуры", "ЮТКоллекции.ЗначениеСтруктуры", "24.03"); + Возврат ЮТКоллекции.ЗначениеСтруктуры(ИсходнаяСтруктура, ИмяПоля, ЗначениеПоУмолчанию); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.ДополнитьСтруктуру +// Функция, объединяющая две коллекции( с типами Структура или Соответствие) в одну структуру, если это возможно +// +// Параметры: +// Коллекция1 - Соответствие из Произвольный +// - Структура +// Коллекция2 - Соответствие из Произвольный +// - Структура +// +// Возвращаемое значение: +// Структура - Результат объединения двух коллекций +// +Функция ОбъединитьВСтруктуру(Знач Коллекция1, Коллекция2) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ОбъединитьВСтруктуру", "ЮТКоллекции.ДополнитьСтруктуру", "24.03"); + Если ТипЗнч(Коллекция1) <> Тип("Структура") Тогда + Коллекция1 = ЮТКоллекции.СкопироватьСтруктуру(Коллекция1); + КонецЕсли; + + ЮТКоллекции.ДополнитьСтруктуру(Коллекция1, Коллекция2); + + //@skip-check constructor-function-return-section + Возврат Коллекция1; + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.СкопироватьРекурсивно +// Создает копию экземпляра указанного объекта. +// Примечание: +// Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.). +// +// Параметры: +// Источник - Произвольный - объект, который необходимо скопировать. +// +// Возвращаемое значение: +// Произвольный - копия объекта, переданного в параметре Источник. +// +Функция СкопироватьРекурсивно(Источник) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.СкопироватьРекурсивно", "ЮТКоллекции.СкопироватьРекурсивно", "24.03"); + Возврат ЮТКоллекции.СкопироватьРекурсивно(Источник); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.СкопироватьСтруктуру +// Создает копию значения типа Структура +// +// Параметры: +// Источник - Структура - копируемая структура +// +// Возвращаемое значение: +// Структура - копия исходной структуры. +// +Функция СкопироватьСтруктуру(Источник) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.СкопироватьСтруктуру", "ЮТКоллекции.СкопироватьСтруктуру", "24.03"); + Возврат ЮТКоллекции.СкопироватьСтруктуру(Источник); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.СкопироватьСоответствие +// Создает копию значения типа Соответствие. +// +// Параметры: +// Источник - Соответствие из Произвольный - соответствие, копию которого необходимо получить. +// +// Возвращаемое значение: +// Соответствие Из Произвольный - копия исходного соответствия. +// +Функция СкопироватьСоответствие(Источник) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.СкопироватьСоответствие", "ЮТКоллекции.СкопироватьСоответствие", "24.03"); + Возврат ЮТКоллекции.СкопироватьСоответствие(Источник); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.СкопироватьМассив +// Создает копию значения типа Массив. +// +// Параметры: +// Источник - Массив Из Произвольный - массив, копию которого необходимо получить +// +// Возвращаемое значение: +// Массив Из Произвольный - копия исходного массива. +// +Функция СкопироватьМассив(Источник) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.СкопироватьМассив", "ЮТКоллекции.СкопироватьМассив", "24.03"); + Возврат ЮТКоллекции.СкопироватьМассив(Источник); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.СкопироватьСписокЗначений +// Создает копию значения типа СписокЗначений. +// +// Параметры: +// Источник - СписокЗначений Из Произвольный - список значений, копию которого необходимо получить +// +// Возвращаемое значение: +// СписокЗначений Из Произвольный - копия исходного списка значений +// +Функция СкопироватьСписокЗначений(Источник) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.СкопироватьСписокЗначений", "ЮТКоллекции.СкопироватьСписокЗначений", "24.03"); + Возврат ЮТКоллекции.СкопироватьСписокЗначений(Источник); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.ВыгрузитьЗначения +// +// Параметры: +// Коллекция - Произвольный +// ИмяРеквизита - Строка +// +// Возвращаемое значение: +// Массив из Произвольный - Выгрузить значения +Функция ВыгрузитьЗначения(Коллекция, ИмяРеквизита) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ВыгрузитьЗначения", "ЮТКоллекции.ВыгрузитьЗначения", "24.03"); + Возврат ЮТКоллекции.ВыгрузитьЗначения(Коллекция, ИмяРеквизита); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.ВыгрузитьЗначения +// +// Параметры: +// Коллекция1 - Массив из Произвольный +// Коллекция2 - Массив из Произвольный +// +// Возвращаемое значение: +// Массив из Произвольный - Пересечение массивов +Функция ПересечениеМассивов(Коллекция1, Коллекция2) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ПересечениеМассивов", "ЮТКоллекции.ПересечениеМассивов", "24.03"); + Возврат ЮТКоллекции.ПересечениеМассивов(Коллекция1, Коллекция2); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.ЗначениеВМассиве +// Создает массив с переданными значениями +// +// Параметры: +// Значение - Произвольный +// Значение2 - Произвольный +// Значение3 - Произвольный +// Значение4 - Произвольный +// Значение5 - Произвольный +// Значение6 - Произвольный +// Значение7 - Произвольный +// Значение8 - Произвольный +// Значение9 - Произвольный +// Значение10 - Произвольный +// +// Возвращаемое значение: +// Массив из Произвольный +//@skip-check method-too-many-params +Функция ЗначениеВМассиве(Значение, + Значение2 = "_!%*", + Значение3 = "_!%*", + Значение4 = "_!%*", + Значение5 = "_!%*", + Значение6 = "_!%*", + Значение7 = "_!%*", + Значение8 = "_!%*", + Значение9 = "_!%*", + Значение10 = "_!%*") Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ЗначениеВМассиве", "ЮТКоллекции.ЗначениеВМассиве", "24.03"); + Возврат ЮТКоллекции.ЗначениеВМассиве(Значение, Значение2, Значение3, Значение4, Значение5, Значение6, Значение7, Значение8, Значение9, Значение10); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.ДополнитьМассив +// +// Параметры: +// Приемник - Массив из Произвольный +// Источник - Массив из Произвольный +Процедура ДополнитьМассив(Приемник, Источник) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ДополнитьМассив", "ЮТКоллекции.ДополнитьМассив", "24.03"); + ЮТКоллекции.ДополнитьМассив(Приемник, Источник); + +КонецПроцедуры + +// Устарела. Метод перенесен в см. ЮТКоллекции.ВСоответствие +// Возвращает соответствие элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции. +// +// Параметры: +// Коллекция - Произвольный - значение, для которого определен итератор, и возможно обращение к полям элементов через квадратные скобки. +// ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия. +// ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции. +// Возвращаемое значение: +// Соответствие Из Произвольный - полученное соответствие. +Функция ВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ВСоответствие", "ЮТКоллекции.ВСоответствие", "24.03"); + Возврат ЮТКоллекции.ВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения); + +КонецФункции + +// Устарела. Метод перенесен в см. ЮТКоллекции.ВСтруктуру +// Возвращает структуру элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции. +// +// Параметры: +// Коллекция - Произвольный - значение, для которого определен итератор, и возможно обращение к полям элементов через квадратные скобки. +// ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия. +// ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции. +// Возвращаемое значение: +// Структура Из Произвольный - полученная структура. +Функция ВСтруктуру(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ВСтруктуру", "ЮТКоллекции.ВСтруктуру", "24.03"); + Возврат ЮТКоллекции.ВСтруктуру(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения); + +КонецФункции + +// Устарела. МетодМодуляСуществует +// Проверяет существование публичного (экспортного) метода у модуля +// +// Параметры: +// ИмяМодуля - Строка - Имя модуля, метод которого нужно поискать +// ИмяМетода - Строка - Имя метода, который ищем +// КоличествоПараметров - Число - Количество параметров метода, увы это никак не влияет на проверку +// Кешировать - Булево - Признак кеширования результата проверки +// +// Возвращаемое значение: +// Булево - Метод найден +Функция МетодМодуляСуществует(ИмяМодуля, ИмяМетода, КоличествоПараметров = 0, Кешировать = Истина) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.МетодМодуляСуществует", Неопределено, "24.03"); + Возврат ЮТМетодыСлужебный.МетодМодуляСуществует(ИмяМодуля, ИмяМетода, Кешировать); + +КонецФункции + +// Устарела. Проверяет существование публичного (экспортного) метода у объекта +// +// Параметры: +// Объект - Произвольный - Объект, метод которого нужно поискать +// ИмяМетода - Строка - Имя метода, который ищем +// +// Возвращаемое значение: +// Булево - Метод найден +Функция МетодОбъектаСуществует(Объект, ИмяМетода) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.МетодОбъектаСуществует", Неопределено, "24.03"); + Возврат ЮТМетодыСлужебный.МетодОбъектаСуществует(Объект, ИмяМетода); + +КонецФункции + +// Устарела. +Функция ВыполнитьМетод(ПолноеИмяМетода, Параметры = Неопределено, Объект = Неопределено) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ВыполнитьМетод", Неопределено, "24.03"); + Возврат ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода, Параметры, Объект); + +КонецФункции + +// Устарела. +Функция ВычислитьБезопасно(Выражение) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ВычислитьБезопасно", Неопределено, "24.03"); + Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(Выражение); + +КонецФункции + +// Устарела. +Функция ПредставлениеТипа(Тип) Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ПредставлениеТипа", Неопределено, "24.03"); + Возврат ЮТТипыДанныхСлужебный.ПредставлениеТипа(Тип); + +КонецФункции + +// Устарела. Описание типов любая ссылка. +// +// Возвращаемое значение: +// ОписаниеТипов - Описание типов любая ссылка +Функция ОписаниеТиповЛюбаяСсылка() Экспорт + + ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ОписаниеТиповЛюбаяСсылка", Неопределено, "24.03"); + Возврат ЮТТипыДанныхСлужебный.ОписаниеТиповЛюбаяСсылка(); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПредставлениеОбъекта(Объект, Знач Уровень = 1, ПредставлениеОбъекта = Неопределено) + + ТипОбъекта = ТипЗнч(Объект); + + Шаблон = "%1 (%2)"; + Представление = ""; + ПредставлениеТипа = ТипОбъекта; + + Если ТипОбъекта = Тип("Структура") ИЛИ ТипОбъекта = Тип("Соответствие") Тогда + ЮТСтроки.СтрокаСимволов(" ", Уровень * 4); + Шаблон = "%2: + |%1"; + Представление = ЮТСтроки.СтрокаСимволов(" ", Уровень * 4) + ПредставлениеСтруктуры(Объект, Уровень); + + ИначеЕсли ТипОбъекта = Тип("Массив") Тогда + + Шаблон = "[%1] (%2)"; + Представление = СтрСоединить(Объект, ", "); + + ИначеЕсли ТипОбъекта = Тип("Число") Тогда + + Представление = ЧислоВСтроку(Объект); + + ИначеЕсли ТипОбъекта = Тип("Дата") Тогда + + Представление = Формат(Объект, "ДФ=""dd.MM.yyyy ЧЧ:мм:сс"""); + + ИначеЕсли ТипОбъекта = Тип("Булево") Тогда + + Представление = Строка(Объект); + + ИначеЕсли ТипОбъекта = Тип("Строка") Тогда + + Представление = Объект; + + Иначе + + Представление = Строка(Объект); + ПредставлениеТипа = ПредставлениеТипа(ТипОбъекта); // Для ссылочных + + КонецЕсли; + + Если ПустаяСтрока(Представление) Тогда + + Представление = "<Пусто>"; + + КонецЕсли; + + Возврат СтрШаблон(Шаблон, Представление, ?(ПредставлениеОбъекта = Неопределено, ПредставлениеТипа, ПредставлениеОбъекта)); + +КонецФункции + +Функция ПредставлениеСтруктуры(Значение, Уровень) + + Строки = Новый Массив(); + + Для Каждого Элемент Из Значение Цикл + + Строки.Добавить(СтрШаблон("%1: %2", Элемент.Ключ, ПредставлениеОбъекта(Элемент.Значение, Уровень + 1))); + + КонецЦикла; + + Возврат СтрСоединить(Строки, Символы.ПС + ЮТСтроки.СтрокаСимволов(" ", Уровень * 4)); + +КонецФункции + +Функция ЧастиПути(Цепочка) Экспорт + + ПутьКСвойству = Новый Массив(); + + ТипПути = ТипЗнч(Цепочка); + + Если ТипПути = Тип("Строка") Тогда + + Части = СтрРазделить(Цепочка, "."); + + Для Каждого Часть Из Части Цикл + + Если СодержитИндекс(Часть) Тогда + + ИзвлечьИндекс(Часть, ПутьКСвойству); + + Иначе + + ПутьКСвойству.Добавить(Часть); + + КонецЕсли; + + КонецЦикла; + + Иначе + + ПутьКСвойству.Добавить(Цепочка); + + КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off + + Возврат ПутьКСвойству; + +КонецФункции + +Функция СодержитИндекс(ИмяСвойства) + + Возврат СтрНайти(ИмяСвойства, "[") > 0 И СтрЗаканчиваетсяНа(ИмяСвойства, "]"); + +КонецФункции + +Процедура ИзвлечьИндекс(ИмяСвойства, БлокиПути) + + ПозицияИндекса = СтрНайти(ИмяСвойства, "["); + + Если ПозицияИндекса > 1 Тогда + БлокиПути.Добавить(Лев(ИмяСвойства, ПозицияИндекса - 1)); + КонецЕсли; + + Пока ПозицияИндекса > 0 Цикл + + ЗакрывающаяПозиция = СтрНайти(ИмяСвойства, "]", , ПозицияИндекса); + ИндексСтрокой = Сред(ИмяСвойства, ПозицияИндекса + 1, ЗакрывающаяПозиция - ПозицияИндекса - 1); + Индекс = Число(ИндексСтрокой); + БлокиПути.Добавить(Индекс); + + ПозицияИндекса = СтрНайти(ИмяСвойства, "[", , ЗакрывающаяПозиция); + + КонецЦикла; + +КонецПроцедуры + +Функция МножительПериода(ТипИнтервала) + + Множители = ЮТСлужебныйПовторногоИспользования.МножителиИнтервалов(); + Возврат Множители[ТипИнтервала]; + +КонецФункции + +Функция ЭтоМесяц(ТипИнтервала) + + Возврат СтрСравнить(ТипИнтервала, "месяц") = 0 + ИЛИ СтрСравнить(ТипИнтервала, "месяца") = 0 + ИЛИ СтрСравнить(ТипИнтервала, "месяцев") = 0; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОбщийСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТОбщийСлужебныйВызовСервера.xml new file mode 100644 index 0000000..2722f45 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОбщийСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТОбщийСлужебныйВызовСервера + + + ru + Общий (вызов сервера) + + + + false + false + true + false + true + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОбщийСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТОбщийСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..6cb2a1c --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОбщийСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,147 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ОписаниеТиповЛюбаяСсылка() Экспорт + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку( + " + | cc:AnyRef + |"); + + Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); + +КонецФункции + +Функция УстановленБезопасныйРежим() Экспорт + + Возврат БезопасныйРежим(); + +КонецФункции + +Функция Менеджер(Знач Менеджер) Экспорт + + Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер); + + Если Описание = Неопределено Тогда + ВызватьИсключение "Несуществующий объект метаданных, либо " + + ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТОбщийВызовСервера.Менеджер", Менеджер); + КонецЕсли; + + ИмяТипа = ""; + Если ЭтоАнглийскийВстроенныйЯзык() Тогда + ИмяТипа = СтрШаблон("%1Manager.%2", Описание.ОписаниеТипа.Имя, Описание.Имя); + Иначе + ИмяТипа = СтрШаблон("%1Менеджер.%2", Описание.ОписаниеТипа.Имя, Описание.Имя); + КонецЕсли; + + Возврат Новый(ИмяТипа); + +КонецФункции + +Функция Макет(ИмяМакета) Экспорт + + ЧастиИмени = СтрРазделить(ИмяМакета, "."); + + КоличествоБлоковДляОбщегоМакета = 2; + КоличествоБлоковМакетаМенеджера = 3; + + Если ЧастиИмени.Количество() < КоличествоБлоковДляОбщегоМакета Тогда + ВызватьИсключение СтрШаблон("Некорректное имя макет, если вы хотите получить данные общего макета необходимо указать `ОбщийМакет.%1`", + ИмяМакета); + КонецЕсли; + + ИндексОбласти = 0; + Если СтрСравнить(ЧастиИмени[0], "ОбщийМакет") = 0 Тогда + Макет = ПолучитьОбщийМакет(ЧастиИмени[1]); + ИндексОбласти = КоличествоБлоковДляОбщегоМакета; + ИначеЕсли ЧастиИмени.Количество() >= КоличествоБлоковМакетаМенеджера Тогда + Менеджер = Менеджер(СтрШаблон("%1.%2", ЧастиИмени[0], ЧастиИмени[1])); + Макет = Менеджер.ПолучитьМакет(ЧастиИмени[КоличествоБлоковМакетаМенеджера - 1]); + ИндексОбласти = КоличествоБлоковМакетаМенеджера; + Иначе + ВызватьИсключение СтрШаблон("Некорректное имя макета `%1`", ИмяМакета); + КонецЕсли; + + Если ЧастиИмени.Количество() > ИндексОбласти Тогда + Макет = Макет.ПолучитьОбласть(ЧастиИмени[ИндексОбласти]); + КонецЕсли; + + Возврат Макет; + +КонецФункции + +Функция ВыборкаИзТабличногоДокумента(ТабличныйДокумент) Экспорт + + Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выбрать(); + +КонецФункции + +Функция ТаблицаИзТабличногоДокумента(ТабличныйДокумент) Экспорт + + Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выгрузить(); + +КонецФункции + +Функция ИзХранилищаЗначений(Знач ХранилищеЗначений) Экспорт + Возврат ХранилищеЗначений.Получить(); +КонецФункции + +Функция ЭтоАнглийскийВстроенныйЯзык() Экспорт + + Возврат ЮТМетаданныеСлужебныйПовтИсп.ВариантВстроенногоЯзыка() = "English"; + +КонецФункции + +Функция ЭтоРусскийВстроенныйЯзык() Экспорт + + Возврат ЮТМетаданныеСлужебныйПовтИсп.ВариантВстроенногоЯзыка() = "Русский"; + +КонецФункции + +Функция ХешMD5(Строка) Экспорт + + Хеш = Новый ХешированиеДанных(ХешФункция.MD5); + Хеш.Добавить(Строка); + Возврат НРег(СтрЗаменить(Хеш.ХешСумма, " ", "")); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЗапросКТабличномуДокументу(ТабличныйДокумент) + + ВсегоСтрок = ТабличныйДокумент.ВысотаТаблицы; + ВсегоКолонок = ТабличныйДокумент.ШиринаТаблицы; + + Область = ТабличныйДокумент.Область(1, 1, ВсегоСтрок, ВсегоКолонок); + + ИсточникДанных = Новый ОписаниеИсточникаДанных(Область); + ПостроительОтчета = Новый ПостроительОтчета; + ПостроительОтчета.ИсточникДанных = ИсточникДанных; + ПостроительОтчета.Выполнить(); + + Возврат ПостроительОтчета.Результат; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетAllureСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТОтчетAllureСлужебный.xml new file mode 100644 index 0000000..9e44fbc --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетAllureСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТОтчетAllureСлужебный + + + ru + Отчет allure + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетAllureСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТОтчетAllureСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..4107e7a --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетAllureСлужебный/Ext/Module.bsl @@ -0,0 +1,266 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПараметрыГенерацииОтчета() Экспорт + + Параметры = ЮТФабрикаСлужебный.ПараметрыГенератораОтчета(); + + ОписаниеФормата = ЮТФабрикаСлужебный.ОписаниеФорматаОтчета("allure", "Allure 2 (json)"); + ОписаниеФормата.ЗаписьВКаталог = Истина; + ОписаниеФормата.СамостоятельнаяЗаписьОтчета = Истина; + Параметры.Форматы.Вставить(ОписаниеФормата.Идентификатор, ОписаниеФормата); + + Возврат Параметры; + +КонецФункции + +Процедура ЗаписатьОтчет(РезультатВыполнения, Каталог, Формат, Обработчик) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение "Формирование отчета в формате Allure не поддерживается в web-клиенте"; +#Иначе + Для Каждого Модуль Из РезультатВыполнения Цикл + + Для Каждого Набор Из Модуль.НаборыТестов Цикл + + Для Каждого РезультатТеста Из Набор.Тесты Цикл + + Попытка + СохранитьОтчетТеста(РезультатТеста, Набор, Модуль, Каталог); + Исключение + ЮТЛогирование.Ошибка("Ошибка сохранения отчета в формате Allure. " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + КонецЦикла; +#КонецЕсли + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Если НЕ ВебКлиент Тогда +Процедура СохранитьОтчетТеста(РезультатТеста, Набор, Модуль, Каталог) + + Описание = ОписаниеТеста(РезультатТеста, Набор, Модуль); + + ИмяФайла = ЮТФайлы.ОбъединитьПути(Каталог, Описание.uuid + "-result.json"); + Запись = Новый ЗаписьJSON(); + Запись.ОткрытьФайл(ИмяФайла, КодировкаТекста.UTF8, Ложь); + ЗаписатьJSON(Запись, Описание); + Запись.Закрыть(); + +КонецПроцедуры + +Функция ОписаниеТеста(РезультатТеста, Набор, Модуль) Экспорт + + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + ПредставлениеРежима = СтрШаблон(" [%1]", РезультатТеста.Режим); + ПолныйИдентификаторТеста = СтрШаблон("%1_%2_%3", РезультатТеста.НомерВНаборе, РезультатТеста.ПолноеИмяМетода, РезультатТеста.Режим); + + Описание = НовыйОписаниеТеста(); + Описание.fullName = РезультатТеста.ПолноеИмяМетода + ПредставлениеРежима; + Описание.name = РезультатТеста.Метод + ПредставлениеРежима; + Описание.status = СтатусОтчета(РезультатТеста.Статус, Статусы); + Описание.testCaseId = ЮТОбщий.ХешMD5(ПолныйИдентификаторТеста); + Описание.start = РезультатТеста.ДатаСтарта; + Описание.stop = РезультатТеста.ДатаСтарта + РезультатТеста.Длительность; + + ОписаниеМодуля = ИмяМодуляПоСхеме(Модуль.МетаданныеМодуля.Имя); + ИмяНабора = Модуль.МетаданныеМодуля.Имя; + ИмяВложенногоНабора = Набор.Представление + ПредставлениеРежима; + + ДобавитьМетку(Описание, "language", "bsl"); + ДобавитьМетку(Описание, "framework", "YAxUnit"); + + Если ЗначениеЗаполнено(ОписаниеМодуля.epic) Тогда + ДобавитьМетку(Описание, "epic", ОписаниеМодуля.epic); + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеМодуля.feature) Тогда + ДобавитьМетку(Описание, "feature", ОписаниеМодуля.feature); + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеМодуля.story) Тогда + ДобавитьМетку(Описание, "story", ОписаниеМодуля.story); + КонецЕсли; + + ДобавитьМетку(Описание, "suite", ИмяНабора); + Если Модуль.НаборыТестов.Количество() > 1 ИЛИ Модуль.МетаданныеМодуля.Имя <> Набор.Представление Тогда + ДобавитьМетку(Описание, "subSuite", ИмяВложенногоНабора); + КонецЕсли; + + ДобавитьМетку(Описание, "tag", РезультатТеста.Режим); + + Для Каждого Тег Из РезультатТеста.Теги Цикл + ДобавитьМетку(Описание, "tag", Тег); + КонецЦикла; + + Если ЗначениеЗаполнено(РезультатТеста.Параметры) Тогда + Для Каждого Параметр Из РезультатТеста.Параметры Цикл + Описание.parameters.Добавить(Новый Структура("name, value", "П" + Описание.parameters.Количество(), Строка(Параметр))); + ПолныйИдентификаторТеста = ПолныйИдентификаторТеста + Строка(Параметр); + КонецЦикла; + КонецЕсли; + + Описание.historyId = ЮТОбщий.ХешMD5(ПолныйИдентификаторТеста); + + Для Каждого ОписаниеОшибки Из РезультатТеста.Ошибки Цикл + + Описание.statusDetails.message = ЮТСтроки.ДобавитьСтроку(Описание.statusDetails.message, ОписаниеОшибки.Сообщение, Символы.ПС); + Описание.statusDetails.trace = ЮТСтроки.ДобавитьСтроку(Описание.statusDetails.trace, ОписаниеОшибки.Стек, Символы.ПС); + + КонецЦикла; + + Если РезультатТеста.Ошибки.Количество() = 0 И РезультатТеста.Статус <> Статусы.Успешно Тогда + + Если РезультатТеста.Статус = Статусы.Ожидание Тогда + Описание.statusDetails.message = "Тест не был вызван"; + Иначе + Описание.statusDetails.message = "Тест не успешен, но нет сообщений об ошибках" + КонецЕсли; + + КонецЕсли; + + Возврат Описание; + +КонецФункции + +Функция НовыйОписаниеТеста() + + Описание = Новый Структура; + Описание.Вставить("uuid", ЮТТестовыеДанные.УникальнаяСтрока()); + Описание.Вставить("historyId", ""); + Описание.Вставить("testCaseId", ""); + Описание.Вставить("fullName", ""); + Описание.Вставить("name", ""); + Описание.Вставить("parameters", Новый Массив()); + Описание.Вставить("links", Новый Массив()); + Описание.Вставить("labels", Новый Массив()); + Описание.Вставить("status", ""); + Описание.Вставить("statusDetails", НовыйОписаниеСтатуса()); + Описание.Вставить("start", 0); + Описание.Вставить("stop", 0); + Описание.Вставить("steps", Новый Массив()); + + Возврат Описание; + +КонецФункции + +Функция НовыйОписаниеСтатуса() + + Описание = Новый Структура(); + Описание.Вставить("message"); + Описание.Вставить("trace"); + + Возврат Описание; + +КонецФункции + +Функция СтатусОтчета(Статус, Статусы) + + Если Статус = Статусы.Успешно Тогда + СтатусОтчета = "passed"; + ИначеЕсли Статус = Статусы.Ошибка Тогда + СтатусОтчета = "failed"; + ИначеЕсли Статус = Статусы.Пропущен Тогда + СтатусОтчета = "skipped"; + Иначе + СтатусОтчета = "broken"; + КонецЕсли; + + Возврат СтатусОтчета; + +КонецФункции + +Процедура ДобавитьМетку(ОписаниеТеста, ИмяМетки, Значение) + ОписаниеТеста.labels.Добавить(Новый Структура("name, value", ИмяМетки, Значение)); +КонецПроцедуры + +Функция ИмяМодуляПоСхеме(ИмяМодуля) + + Части = СтрРазделить(ИмяМодуля, "_"); + Описание = Новый Структура("epic, feature, story"); + Если Части.Количество() <> 2 И Части.Количество() <> 3 Тогда + Описание.epic = ИмяМодуля; + Возврат Описание; + КонецЕсли; + + Эпик = ТипОбъектаПоПрефиксу(Части[0]); + + Описание.epic = Эпик; + Описание.feature = Части[1]; + + Если Части.Количество() = 3 Тогда + Описание.story = ТипМодуляПоСуфииксу(Части[2]); + КонецЕсли; + + Возврат Описание; + +КонецФункции + +Функция ТипОбъектаПоПрефиксу(Префикс) + + ТипОбъекта = Неопределено; + + Если Префикс = "ОМ" Тогда ТипОбъекта = "Общий модуль"; + ИначеЕсли Префикс = "РБ" Тогда ТипОбъекта = "Регистр бухгалтерии"; + ИначеЕсли Префикс = "РН" Тогда ТипОбъекта = "Регистр накопления"; + ИначеЕсли Префикс = "РР" Тогда ТипОбъекта = "Регистр расчета"; + ИначеЕсли Префикс = "РС" Тогда ТипОбъекта = "Регистр сведений"; + ИначеЕсли Префикс = "БП" Тогда ТипОбъекта = "Бизнес процесс"; + ИначеЕсли Префикс = "Спр" Тогда ТипОбъекта = "Справочник"; + ИначеЕсли Префикс = "ПС" Тогда ТипОбъекта = "План счетов"; + ИначеЕсли Префикс = "ПВР" Тогда ТипОбъекта = "План видов расчета"; + ИначеЕсли Префикс = "ПВХ" Тогда ТипОбъекта = "План видов характеристик"; + ИначеЕсли Префикс = "Док" Тогда ТипОбъекта = "Документ"; + ИначеЕсли Префикс = "Пер" Тогда ТипОбъекта = "Перечисление"; + ИначеЕсли Префикс = "ПО" Тогда ТипОбъекта = "План обмена"; + ИначеЕсли Префикс = "Зад" Тогда ТипОбъекта = "Задача"; + ИначеЕсли Префикс = "Обр" Тогда ТипОбъекта = "Обработка"; + ИначеЕсли Префикс = "Отч" Тогда ТипОбъекта = "Отчет"; + Иначе ТипОбъекта = Префикс; + КонецЕсли; + + Возврат ТипОбъекта; +КонецФункции + +Функция ТипМодуляПоСуфииксу(Суффикс) + + ТипМодуля = Неопределено; + + Если Суффикс = "МО" Тогда ТипМодуля = "Модуль объекта"; + ИначеЕсли Суффикс = "ММ" Тогда ТипМодуля = "Модуль менеджера"; + ИначеЕсли Суффикс = "НЗ" Тогда ТипМодуля = "Модуль набора записей"; + Иначе ТипМодуля = Суффикс; + КонецЕсли; + + Возврат ТипМодуля; + +КонецФункции +#КонецЕсли + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетJSONСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJSONСлужебный.xml new file mode 100644 index 0000000..90d1d4e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJSONСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТОтчетJSONСлужебный + + + ru + Отчет JSON + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетJSONСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJSONСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..a2b48bd --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJSONСлужебный/Ext/Module.bsl @@ -0,0 +1,59 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПараметрыГенерацииОтчета() Экспорт + + Параметры = ЮТФабрикаСлужебный.ПараметрыГенератораОтчета(); + + ОписаниеФормата = ЮТФабрикаСлужебный.ОписаниеФорматаОтчета("dumpjson", "Дамп результата тестирования в json"); + ОписаниеФормата.ИмяФайлаПоУмолчанию = "report.json"; + ОписаниеФормата.ФильтрВыбораФайла = "Дамп результата тестирования (*.json)|*.json"; + Параметры.Форматы.Вставить(ОписаниеФормата.Идентификатор, ОписаниеФормата); + + Возврат Параметры; + +КонецФункции + +// Формирует отчет в формате JSON +// +// Параметры: +// РезультатВыполнения - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +// Формат - см. ЮТФабрикаСлужебный.ОписаниеФорматаОтчета +// Возвращаемое значение: +// ДвоичныеДанные - Данные отчета +Функция ДанныеОтчета(РезультатВыполнения, Формат) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение "Формирование отчета в формате JSON не поддерживается в web-клиенте"; +#Иначе + Поток = Новый ПотокВПамяти(); + Запись = Новый ЗаписьJSON(); + Запись.ОткрытьПоток(Поток, "UTF-8", Ложь); + + ЗаписатьJSON(Запись, РезультатВыполнения); + + Запись.Закрыть(); + + Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные(); +#КонецЕсли + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетJUnitСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJUnitСлужебный.xml new file mode 100644 index 0000000..04da7d8 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJUnitСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТОтчетJUnitСлужебный + + + ru + Отчет jUnit + + + + false + false + true + false + true + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетJUnitСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJUnitСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..9259ebc --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетJUnitСлужебный/Ext/Module.bsl @@ -0,0 +1,344 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПараметрыГенерацииОтчета() Экспорт + + Параметры = ЮТФабрикаСлужебный.ПараметрыГенератораОтчета(); + + ОписаниеФормата = ЮТФабрикаСлужебный.ОписаниеФорматаОтчета("jUnit", "JUnit"); + ОписаниеФормата.ИмяФайлаПоУмолчанию = "junit.xml"; + ОписаниеФормата.ФильтрВыбораФайла = "jUnit(*.xml)|*.xml"; + Параметры.Форматы.Вставить(ОписаниеФормата.Идентификатор, ОписаниеФормата); + + Возврат Параметры; + +КонецФункции + +// Формирует отчет в формате jUnit +// +// Параметры: +// РезультатВыполнения - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +// Формат - см. ЮТФабрикаСлужебный.ОписаниеФорматаОтчета +// +// Возвращаемое значение: +// ДвоичныеДанные - Данные отчета +Функция ДанныеОтчета(Знач РезультатВыполнения, Формат) Экспорт + + Возврат СформироватьОтчетОТестировании(РезультатВыполнения); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// СформироватьОтчетОТестировании +// Формирует отчет (xml-файл) и возвращает его в виде двоичных данных +// +// Параметры: +// РезультатТестирования - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +// Возвращаемое значение: +// ДвоичныеДанные - полученный отчет +Функция СформироватьОтчетОТестировании(РезультатТестирования) + + Поток = Новый ПотокВПамяти(); + ЗаписьXML = Новый ЗаписьXML; + + ЗаписьXML.ОткрытьПоток(Поток, "UTF-8", Ложь); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("testsuites"); + + Номер = 0; + + Для Каждого Модуль Из РезультатТестирования Цикл + + Для Каждого Набор Из Модуль.НаборыТестов Цикл + + ЗаписатьНабор(ЗаписьXML, Набор, Номер); + Номер = Номер + 1; + + КонецЦикла; + + КонецЦикла; + + ЗаписатьСвойства(ЗаписьXML, Новый Структура("executor, reportDate", "BIA YAxUnit", ТекущаяДатаСеанса())); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.Закрыть(); + + Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные(); + +КонецФункции + +// ЗаписатьРезультатТеста +// +// Параметры: +// ЗаписьXML - ЗаписьXML - Запись XML +// РезультатТеста - Структура - Результат теста +Процедура ЗаписатьТест(ЗаписьXML, РезультатТеста) + + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("testcase"); + ЗаписьXML.ЗаписатьАтрибут("name", РезультатТеста.Имя); + ЗаписьXML.ЗаписатьАтрибут("classname", РезультатТеста.ПолноеИмяМетода); + ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ЮТОбщий.ПродолжительностьВСекундах(РезультатТеста.Длительность))); + ЗаписьXML.ЗаписатьАтрибут("context", РезультатТеста.Режим); + + Для Каждого ОписаниеОшибки Из РезультатТеста.Ошибки Цикл + + Статус = ЮТРегистрацияОшибокСлужебный.СтатусОшибки(ОписаниеОшибки.ТипОшибки); + + ИмяУзла = Неопределено; + ЗаписатьЗначения = Ложь; + ЗаписатьСтек = Ложь; + Если Статус = Статусы.Ошибка Тогда + ИмяУзла = "failure"; + ЗаписатьЗначения = Истина; + ЗаписатьСтек = Истина; + ИначеЕсли Статус = Статусы.Пропущен Тогда + ИмяУзла = "skipped"; + ЗаписатьСтек = Истина; + ИначеЕсли Статус = Статусы.Ожидание Тогда + ИмяУзла = "skipped"; + ЗаписатьСтек = Истина; + ИначеЕсли Статус <> Статусы.Успешно Тогда + ИмяУзла = "error"; + ЗаписатьСтек = Истина; + КонецЕсли; + + Сообщение = СообщениеОбОшибке(ОписаниеОшибки); + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяУзла); + ЗаписьXML.ЗаписатьАтрибут("message", Сообщение); + + Если ЗначениеЗаполнено(ОписаниеОшибки.ТипОшибки) Тогда + ЗаписьXML.ЗаписатьАтрибут("type", XMLСтрока(ОписаниеОшибки.ТипОшибки)); + КонецЕсли; + + Если ЗаписатьЗначения Тогда + Если ОписаниеОшибки.ОжидаемоеЗначение <> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("expected"); + ЗаписьXML.ЗаписатьТекст(ЗначениеВСтрокуjUnit(ОписаниеОшибки.ОжидаемоеЗначение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + Если ОписаниеОшибки.ПроверяемоеЗначение <> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("actual"); + ЗаписьXML.ЗаписатьТекст(ЗначениеВСтрокуjUnit(ОписаниеОшибки.ПроверяемоеЗначение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЕсли; + + Если ЗаписатьСтек И ОписаниеОшибки.Стек <> Неопределено Тогда + ЗаписьXML.ЗаписатьТекст(ОписаниеОшибки.Стек); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + КонецЦикла; + + Если РезультатТеста.Ошибки.Количество() = 0 И РезультатТеста.Статус <> Статусы.Успешно Тогда + + Если РезультатТеста.Статус = Статусы.Ожидание Тогда + + ЗаписьXML.ЗаписатьНачалоЭлемента("skipped"); + ЗаписьXML.ЗаписатьАтрибут("message", "Тест не был вызван"); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Иначе + + ЗаписьXML.ЗаписатьНачалоЭлемента("error"); + ЗаписьXML.ЗаписатьАтрибут("message", "Тест не успешен, но нет сообщений об ошибках"); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + КонецЕсли; + + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +Процедура ЗаписатьОшибку(ЗаписьXML, ОписаниеОшибки) + Сообщение = СообщениеОбОшибке(ОписаниеОшибки); + ЗаписьXML.ЗаписатьНачалоЭлемента("error"); + ЗаписьXML.ЗаписатьАтрибут("message", Сообщение); + + Если ЗначениеЗаполнено(ОписаниеОшибки.ТипОшибки) Тогда + ЗаписьXML.ЗаписатьАтрибут("type", XMLСтрока(ОписаниеОшибки.ТипОшибки)); + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеОшибки.Стек) Тогда + ЗаписьXML.ЗаписатьТекст(ОписаниеОшибки.Стек); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); +КонецПроцедуры + +Процедура ЗаписатьНабор(ЗаписьXML, Набор, Номер) + + КоличествоТестов = 0; + КоличествоПропущенных = 0; + КоличествоУпавших = 0; + КоличествоСломанных = 0; + + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + + Для Каждого РезультатТеста Из Набор.Тесты Цикл + + КоличествоТестов = КоличествоТестов + 1; + + Если РезультатТеста.Статус = Статусы.Ошибка Тогда + КоличествоУпавших = КоличествоУпавших + 1; + ИначеЕсли РезультатТеста.Статус = Статусы.Пропущен ИЛИ РезультатТеста.Статус = Статусы.Ожидание Тогда + КоличествоПропущенных = КоличествоПропущенных + 1; + ИначеЕсли РезультатТеста.Статус <> Статусы.Успешно Тогда + КоличествоСломанных = КоличествоСломанных + 1; + КонецЕсли; + + КонецЦикла; + + ЗаписьXML.ЗаписатьНачалоЭлемента("testsuite"); + ЗаписьXML.ЗаписатьАтрибут("id", XMLСтрока(Номер)); + ЗаписьXML.ЗаписатьАтрибут("name", СтрШаблон("%1 [%2]", Набор.Представление, Набор.Режим)); + ЗаписьXML.ЗаписатьАтрибут("tests", XMLСтрока(КоличествоТестов)); + ЗаписьXML.ЗаписатьАтрибут("errors", XMLСтрока(КоличествоСломанных)); + ЗаписьXML.ЗаписатьАтрибут("skipped", XMLСтрока(КоличествоПропущенных)); + ЗаписьXML.ЗаписатьАтрибут("failures", XMLСтрока(КоличествоУпавших)); + ЗаписьXML.ЗаписатьАтрибут("timestamp", XMLСтрока(ЮТОбщий.МестноеВремяПоВременнойМетке(Набор.ДатаСтарта))); + ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ЮТОбщий.ПродолжительностьВСекундах(Набор.Длительность))); + ЗаписьXML.ЗаписатьАтрибут("package", Набор.МетаданныеМодуля.Расширение); + ЗаписьXML.ЗаписатьАтрибут("context", Набор.Режим); + + Для Каждого ОписаниеОшибки Из Набор.Ошибки Цикл + ЗаписатьОшибку(ЗаписьXML, ОписаниеОшибки); + КонецЦикла; + + Для Каждого РезультатТеста Из Набор.Тесты Цикл + + ЗаписатьТест(ЗаписьXML, РезультатТеста); + + КонецЦикла; + + ЗаписатьСвойства(ЗаписьXML, Новый Структура("context", Набор.Режим)); + ЗаписьXML.ЗаписатьКонецЭлемента(); // testsuite + +КонецПроцедуры + +Функция ЗначениеВСтрокуjUnit(Знач Значение) + + ТипЗначения = ТипЗнч(Значение); + + Если ТипЗначения = Тип("Строка") Тогда + + Возврат XMLСтрока(Значение); + + ИначеЕсли ТипЗначения = Тип("Массив") Тогда + + Возврат ЗначениеВСтрокуМассивjUnit(Значение); + + ИначеЕсли ТипЗначения = Тип("Структура") Или ТипЗначения = Тип("Соответствие") Или ТипЗначения = Тип("СписокЗначений") Тогда + + Возврат ЗначениеВСтрокуПростаяКоллекцияjUnit(Значение); + + ИначеЕсли ТипЗначения = Тип("Тип") Или ТипЗначения = Тип("СтандартныйПериод") Тогда + + Возврат Строка(Значение); + + Иначе + + Попытка + + Возврат XMLСтрока(Значение); + + Исключение + + Возврат Строка(Значение); + + КонецПопытки; + + КонецЕсли; + +КонецФункции + +Функция ЗначениеВСтрокуМассивjUnit(Коллекция) + + Стр = ""; + + Для Ккк = 0 По Коллекция.Количество() - 1 Цикл + + Стр = Стр + ЗначениеВСтрокуjUnit(Коллекция[Ккк]); + + Если Ккк < Коллекция.Количество() - 1 Тогда + + Стр = Стр + Символы.ПС; + + КонецЕсли; + + КонецЦикла; + + Возврат Стр; + +КонецФункции + +Функция ЗначениеВСтрокуПростаяКоллекцияjUnit(Коллекция) + + Стр = "|"; + + Для Каждого Элем Из Коллекция Цикл + + Стр = " " + Стр + Элем.Значение + " |"; + + КонецЦикла; + + Возврат Стр; + +КонецФункции + +Функция СообщениеОбОшибке(ОписаниеОшибки) + + Если ТипЗнч(ОписаниеОшибки) = Тип("Структура") Тогда + Сообщение = ОписаниеОшибки.Сообщение; + ИначеЕсли ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Сообщение = Строка(ОписаниеОшибки); + Иначе + Сообщение = Неопределено; + КонецЕсли; + + Возврат Сообщение; + +КонецФункции + +Процедура ЗаписатьСвойства(ЗаписьXML, Свойства) + + ЗаписьXML.ЗаписатьНачалоЭлемента("properties"); + + Для Каждого Свойство Из Свойства Цикл + ЗаписьXML.ЗаписатьНачалоЭлемента("property"); + ЗаписьXML.ЗаписатьАтрибут("name", Свойство.Ключ); + ЗаписьXML.ЗаписатьАтрибут("value", ЗначениеВСтрокуjUnit(Свойство.Значение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); // property + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); // properties + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТОтчетСлужебный.xml new file mode 100644 index 0000000..5b93afa --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТОтчетСлужебный + + + ru + Отчет + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТОтчетСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТОтчетСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..48dae26 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТОтчетСлужебный/Ext/Module.bsl @@ -0,0 +1,169 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// СформироватьОтчет +// Формирует отчет о результатах тестирования по заданным параметрам +// Параметры: +// РезультатВыполнения - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +// ПараметрыЗапуска - Структура - Параметры запуска, см. ЮТФабрика.ПараметрыЗапуска +// Обработчик - ОписаниеОповещения +Процедура СформироватьОтчет(РезультатВыполнения, ПараметрыЗапуска, Обработчик) Экспорт + + Если НЕ ЗначениеЗаполнено(ПараметрыЗапуска.reportPath) Тогда + ЮТЛогирование.Ошибка("Не указан путь сохранения отчета"); + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик); + Возврат; + КонецЕсли; + + ПараметрыФормирования = МодульФормирования(ПараметрыЗапуска.reportFormat); + + Если ПараметрыФормирования = Неопределено Тогда + ЮТЛогирование.Ошибка(СтрШаблон("Отчет в формате `%1` не поддерживается", ПараметрыЗапуска.reportFormat)); + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик); + Возврат; + КонецЕсли; + + МодульОтчета = ПараметрыФормирования.Модуль; + Формат = ПараметрыФормирования.Формат; + ПараметрыФормирования = Новый Структура("РезультатВыполнения, ПараметрыЗапуска, Обработчик", РезультатВыполнения, ПараметрыЗапуска, Обработчик); + ПараметрыФормирования.Вставить("МодульОтчета", МодульОтчета); + ПараметрыФормирования.Вставить("Формат", Формат); + + ОбработчикПолученияИмениФайла = Новый ОписаниеОповещения("ПослеФормированияИмениФайла", ЭтотОбъект, ПараметрыФормирования); + ПодготовитьИмяФайлаОтчета(ПараметрыФормирования, ОбработчикПолученияИмениФайла); + +КонецПроцедуры + +// Поддерживаемые форматы отчетов. +// +// Возвращаемое значение: +// Структура - Поддерживаемые форматы отчетов +// + Ключ - Идентификатор формата +// + Значение - см. ЮТФабрикаСлужебный.ОписаниеФорматаОтчета +Функция ПоддерживаемыеФорматыОтчетов() Экспорт + + Модули = ЮТРасширенияСлужебный.ГенераторыОтчетов(); + Форматы = Новый Структура; + + Для Каждого Модуль Из Модули Цикл + + Параметры = Модуль.ПараметрыГенерацииОтчета(); + ЮТКоллекции.ДополнитьСтруктуру(Форматы, Параметры.Форматы); + + КонецЦикла; + + Возврат Форматы; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура СформироватьОтчетВФормате(РезультатВыполнения, ГенераторОтчета, ИмяФайлаОтчета, Формат, Обработчик) + + Если Формат.СамостоятельнаяЗаписьОтчета Тогда + ГенераторОтчета.ЗаписатьОтчет(РезультатВыполнения, ИмяФайлаОтчета, Формат, Обработчик) + Иначе + ДанныеОтчета = ГенераторОтчета.ДанныеОтчета(РезультатВыполнения, Формат); + + Если ДанныеОтчета = Неопределено Тогда + ЮТЛогирование.Ошибка("Не удалось получить данные отчета"); + Иначе + ДанныеОтчета.Записать(ИмяФайлаОтчета); + КонецЕсли; + КонецЕсли; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик); + +КонецПроцедуры + +Процедура ПодготовитьИмяФайлаОтчета(ПараметрыФормирования, Обработчик) + + ПараметрыПроверки = Новый Структура("ПараметрыФормирования, Обработчик", ПараметрыФормирования, Обработчик); + + ОбработчикПроверки = Новый ОписаниеОповещения("ПослеПроверкиСуществования", ЭтотОбъект, ПараметрыПроверки); + ЮТФайлы.Существует(ПараметрыФормирования.ПараметрыЗапуска.reportPath, ОбработчикПроверки); + +КонецПроцедуры + +Функция МодульФормирования(Формат) + + Модули = ЮТРасширенияСлужебный.ГенераторыОтчетов(); + + Для Каждого Модуль Из Модули Цикл + + Параметры = Модуль.ПараметрыГенерацииОтчета(); + Если Параметры.Форматы.Свойство(Формат) Тогда + Возврат Новый Структура("Модуль, Формат", Модуль, Параметры.Форматы[Формат]); + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +Процедура ПослеПроверкиСуществования(Существует, Параметры) Экспорт + + ПутьКОтчету = Параметры.ПараметрыФормирования.ПараметрыЗапуска.reportPath; + Если Существует Тогда + ОбработчикПроверки = Новый ОписаниеОповещения("ПослеПроверкиКаталога", ЭтотОбъект, Параметры); + ЮТФайлы.ЭтоКаталог(ПутьКОтчету, ОбработчикПроверки); + Возврат + КонецЕсли; + + Формат = Параметры.ПараметрыФормирования.Формат; + Если Формат.ЗаписьВКаталог Тогда + НачатьСозданиеКаталога(Новый ОписаниеОповещения("ПослеСозданияКаталогаОтчета", ЭтотОбъект, Параметры), ПутьКОтчету); + Иначе + ПослеПроверкиКаталога(Ложь, Параметры); + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеСозданияКаталогаОтчета(ИмяКаталога, Параметры) Экспорт + + ПослеПроверкиКаталога(Истина, Параметры); + +КонецПроцедуры + +Процедура ПослеПроверкиКаталога(ЭтоКаталог, Параметры) Экспорт + + ПутьКОтчету = Параметры.ПараметрыФормирования.ПараметрыЗапуска.reportPath; + Формат = Параметры.ПараметрыФормирования.Формат; + + Если НЕ Формат.ЗаписьВКаталог И ЭтоКаталог Тогда + ИмяФайла = ЮТФайлы.ОбъединитьПути(ПутьКОтчету, Формат.ИмяФайлаПоУмолчанию); + Иначе + ИмяФайла = ПутьКОтчету; + КонецЕсли; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Параметры.Обработчик, ИмяФайла); + +КонецПроцедуры + +Процедура ПослеФормированияИмениФайла(ИмяФайлаОтчета, Параметры) Экспорт + + СформироватьОтчетВФормате(Параметры.РезультатВыполнения, Параметры.МодульОтчета, ИмяФайлаОтчета, Параметры.Формат, Параметры.Обработчик); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПараметрыЗапускаСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТПараметрыЗапускаСлужебный.xml new file mode 100644 index 0000000..aa762a3 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПараметрыЗапускаСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТПараметрыЗапускаСлужебный + + + ru + Параметры + + + Используется для обработки и дополнения параметров запуска тестов + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПараметрыЗапускаСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПараметрыЗапускаСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..5eb5ae0 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПараметрыЗапускаСлужебный/Ext/Module.bsl @@ -0,0 +1,175 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// ПараметрыЗапуска +// Возвращает загруженные параметры запуска тестирования +// Параметры: +// ПараметрыЗапускаСтрокой - Строка - Параметры запуска приложения +// Обработчик - ОписаниеОповещения +// +// Возвращаемое значение: +// см. ЮТФабрика.ПараметрыЗапуска +Функция ПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой, Обработчик) Экспорт + + Попытка + + Параметры = ПрочитатьПараметрыЗапуска(ПараметрыЗапускаСтрокой, Обработчик); + + Исключение + + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуИнициализацииДвижка(ИнформацияОбОшибке(), "Ошибка чтения параметров запуска"); + Параметры = ЮТФабрика.ПараметрыЗапуска(); + + КонецПопытки; + + Возврат Параметры; + +КонецФункции + +Функция КлючЗапуска() Экспорт + + Возврат "RunUnitTests"; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// ПрочитатьПараметрыЗапуска +// Читает параметры из строки запуска +// Параметры: +// ПараметрыЗапускаСтрокой - Строка - Строка с параметрами запуска. +// Содержит ключ запуска и строку с конфигурационным файлом. +// Формат строки "RunUnitTests=/путь/к/конфигурационному/файлу", +// где ключ указывается обязательно, а путь - по желанию +// Обработчик - ОписаниеОповещения +// +// Возвращаемое значение: +// см. ЮТФабрика.ПараметрыЗапуска +Функция ПрочитатьПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой, Обработчик) + + Параметры = ЮТФабрика.ПараметрыЗапуска(); + + Если Не ЗначениеЗаполнено(ПараметрыЗапускаСтрокой) Тогда + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик, Параметры); + Возврат Параметры; + КонецЕсли; + + ПарыКлючЗначение = ЮТСтроки.РазделитьСтроку(ПараметрыЗапускаСтрокой, ";"); + + ПараметрыЗапуска = Новый Структура; + + Для Каждого Пара Из ПарыКлючЗначение Цикл + + Если ПустаяСтрока(Пара) Тогда + Продолжить; + КонецЕсли; + + КлючЗначение = ЮТСтроки.РазделитьСтроку(Пара, "="); + + Если КлючЗначение.Количество() = 1 Тогда + ПараметрыЗапуска.Вставить(КлючЗначение[0], Истина); + Иначе + ПараметрыЗапуска.Вставить(КлючЗначение[0], КлючЗначение[1]); + КонецЕсли; + + КонецЦикла; + + ЗначениеКлючаЗапуска = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапуска, КлючЗапуска(), Ложь); + + Если ТипЗнч(ЗначениеКлючаЗапуска) = Тип("Булево") Тогда + + Параметры.ВыполнятьМодульноеТестирование = ЗначениеКлючаЗапуска; + Параметры.showReport = Истина; + Параметры.closeAfterTests = Ложь; + + ИначеЕсли ТипЗнч(ЗначениеКлючаЗапуска) = Тип("Строка") Тогда + + Параметры.ВыполнятьМодульноеТестирование = Истина; + КонфигурационныйФайл = ЗначениеКлючаЗапуска; + + КонецЕсли; + + Если ЗначениеЗаполнено(КонфигурационныйФайл) Тогда + + ПараметрыИзФайла = ПрочитатьКонфигурационныйФайл(КонфигурационныйФайл); + ДополнитьПараметрыПрочитанными(Параметры, ПараметрыИзФайла); + + КонецЕсли; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик, Параметры); + + Возврат Параметры; + +КонецФункции + +Функция ПрочитатьКонфигурационныйФайл(ПутьКФайлу) + +#Если НЕ ВебКлиент Тогда + + Если ЮТОбщий.УстановленБезопасныйРежим() Тогда + ВызватьИсключение "Расширение подключено в безопасном режиме. Чтение конфигурационного файла недоступно"; + КонецЕсли; + + ДанныеФайла = Неопределено; + + Попытка + + Текст = ЮТОбщий.ДанныеТекстовогоФайла(ПутьКФайлу); + + Если ЗначениеЗаполнено(Текст) Тогда + ДанныеФайла = ЮТОбщий.ЗначениеИзJSON(Текст); + КонецЕсли; + + Исключение + + ВызватьИсключение; + + КонецПопытки; + + Возврат ДанныеФайла; + +#Иначе + // будут использованы параметры по умолчанию + Возврат Новый Структура; +#КонецЕсли + +КонецФункции + +Процедура ДополнитьПараметрыПрочитанными(Параметры, ДанныеДополнения) + + Для Каждого Параметр Из ДанныеДополнения Цикл + + Если НЕ Параметры.Свойство(Параметр.Ключ) Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(Параметры[Параметр.Ключ]) = ТипЗнч(Параметр.Значение) Тогда + + Параметры[Параметр.Ключ] = Параметр.Значение; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель.xml b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель.xml new file mode 100644 index 0000000..04f1f0d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель.xml @@ -0,0 +1,23 @@ + + + + + ЮТПодражатель + + + ru + Подражатель + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель/Ext/Module.bsl new file mode 100644 index 0000000..0a0ae76 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель/Ext/Module.bsl @@ -0,0 +1,65 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Локализация. +// +// Возвращаемое значение: +// Строка - Возвращает текущую установленную локализацию +Функция Локализация() Экспорт + Возврат ЮТПодражательСлужебный.Контекст().Локализация; +КонецФункции + +// Устанавливает локализацию подражателя +// В дальнейшем используется для получения списка словарей с указанной локализацией +// Параметры: +// КодЯзыка - Строка - Код языка +Процедура УстановитьЛокализацию(КодЯзыка) Экспорт + ЮТПодражательСлужебный.Контекст().Локализация = КодЯзыка; +КонецПроцедуры + +#Область Реализации + +// Подражатель для людей +// +// Возвращаемое значение: +// CommonModule.ЮТПодражатель_Люди - Люди +Функция Люди() Экспорт + Возврат ЮТПодражатель_Люди; +КонецФункции + +// Подражатель для компаний +// +// Возвращаемое значение: +// CommonModule.ЮТПодражатель_Компании - Компании +Функция Компании() Экспорт + Возврат ЮТПодражатель_Компании; +КонецФункции + +// Подражатель для банков +// +// Возвращаемое значение: +// CommonModule.ЮТПодражатель_Банки - Банки +Функция Банки() Экспорт + Возврат ЮТПодражатель_Банки; +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Банки.xml b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Банки.xml new file mode 100644 index 0000000..0161416 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Банки.xml @@ -0,0 +1,23 @@ + + + + + ЮТПодражатель_Банки + + + ru + Подражатель реализация люди клиент сервер + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Банки/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Банки/Ext/Module.bsl new file mode 100644 index 0000000..f0df91b --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Банки/Ext/Module.bsl @@ -0,0 +1,85 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает случайный номер банковского счета, по умолчанию +// Подробности алгоритма можно прочитать по ссылке +// http://keysystems.ru/files/fo/arm_budjet/show_docum/BKS/onlinehelphtm/ro_kr_algor_klyuch_rs.htm +// Параметры: +// БИК - Строка - БИК банка +// КодВалюты - Строка - Код валюты +// ЮрЛицо - Булево - Генерация счета юрлица, иначе физ лица +// +// Возвращаемое значение: +// Строка - Номер счета +Функция НомерСчета(БИК, КодВалюты = "810", ЮрЛицо = Истина) Экспорт + + Если СтрДлина(КодВалюты) <> 3 Тогда + ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("НомерСчета", "Длина кода валюты должна быть равна 3"); + КонецЕсли; + + БалансовыйСчет = ?(ЮрЛицо, "40702", "40802"); + НомерСчетаВБанке = ЮТТестовыеДанные.СлучайнаяСтрока(11, , "0123456789"); + + ЧислоДляРасчетаКонтрольнойСуммы = Прав(БИК, 3) + БалансовыйСчет + КодВалюты + "0" + НомерСчетаВБанке; + Весы = ВесовыеКоэффициентаДляРасчетаКонтрольнойСуммыСчета(); + + КонтрольнаяСумма = 0; + Для Индекс = 0 По 22 Цикл + КонтрольнаяСумма = + КонтрольнаяСумма + + Число(Сред(ЧислоДляРасчетаКонтрольнойСуммы, Индекс + 1, 1)) * Число(Весы.Получить(Индекс)) + ; + КонецЦикла; + + КонтрольноеЧисло = ((КонтрольнаяСумма % 10) * 3) % 10; + + Возврат СтрШаблон( + "%1%2%3%4", + БалансовыйСчет, + КодВалюты, + КонтрольноеЧисло, + НомерСчетаВБанке + ); + +КонецФункции + +// Формирует случайный валидный БИК банка +// +// Возвращаемое значение: +// Строка - БИК +Функция БИК() Экспорт + Возврат СтрШаблон( + "%1%2%3%4", + "04", // код страны + ЮТТестовыеДанные.СлучайнаяСтрока(2, , "0123456789"), // ОКАТО код территории + ЮТТестовыеДанные.СлучайнаяСтрока(2, , "0123456789"), // код подразделение расчетной сети ЦБ + Формат(ЮТТестовыеДанные.СлучайноеЧисло(50, 999), "ЧЦ=3; ЧВН=;") // номер кредитной организации + ); +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ВесовыеКоэффициентаДляРасчетаКонтрольнойСуммыСчета() + Возврат СтрРазделить("7,1,3,7,1,3,7,1,3,7,1,3,7,1,3,7,1,3,7,1,3,7,1", ","); +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Компании.xml b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Компании.xml new file mode 100644 index 0000000..17ed7f2 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Компании.xml @@ -0,0 +1,23 @@ + + + + + ЮТПодражатель_Компании + + + ru + Подражатель реализация люди клиент сервер + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Компании/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Компании/Ext/Module.bsl new file mode 100644 index 0000000..43cd0d4 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Компании/Ext/Module.bsl @@ -0,0 +1,150 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает случайное имя компании +// +// Возвращаемое значение: +// Строка +Функция Наименование() Экспорт + + СловарьИмен = СловарьИменаКомпаний(); + СловарьПрефиксов = СловарьПрефиксыИменКомпаний(); + + Возврат СтрШаблон( + "%1 %2", + ЮТПодражательСлужебный.СлучайноеЗначениеИзСловаря(СловарьПрефиксов), + ЮТПодражательСлужебный.СлучайноеЗначениеИзСловаря(СловарьИмен) + ); + +КонецФункции + +// Формирует случайный валидный ИНН РФ. +// +// Параметры: +// КодРегиона - Строка - Код региона это первые две цифры кода ИНН. Список действующих кодов регионов +// можно подсмотреть: https://www.nalog.gov.ru/html/docs/kods_regions.doc . Если код региона задан +// как "00" то будет сформирован случайный код региона. По умолчанию "00" (случайный код региона) +// ЭтоИННФизическогоЛица - Булево - Если Истина, то это ИНН физического лица, иначе ИНН юридического +// лица. По умолчанию Ложь (ИНН юридического лица) +// +// Возвращаемое значение: +// Строка - Случайный ИНН, например 3444140904 +Функция ИНН(КодРегиона = "00", ЭтоИННФизическогоЛица = Ложь) Экспорт + + СлучайныйИНН = ""; + + Если ЭтоИННФизическогоЛица Тогда + ИННМассив = Новый Массив(12); + ВесовыеКоэффициенты1 = СтрРазделить("7, 2, 4, 10, 3, 5, 9, 4, 6, 8", ","); + ВесовыеКоэффициенты2 = СтрРазделить("3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8", ","); + Иначе + ИННМассив = Новый Массив(10); + ВесовыеКоэффициенты1 = СтрРазделить("2, 4, 10, 3, 5, 9, 4, 6, 8", ","); + ВесовыеКоэффициенты2 = Новый Массив; + КонецЕсли; + + Если КодРегиона = "00" Или СтрДлина(КодРегиона) <> 2 Тогда + ИННМассив.Установить(0, ЮТТестовыеДанные.СлучайноеЧисло(0, 9, 0)); + ИННМассив.Установить(1, ЮТТестовыеДанные.СлучайноеЧисло(0, 9, 0)); + Иначе + ИННМассив.Установить(0, Число(Сред(КодРегиона, 1, 1))); + ИННМассив.Установить(1, Число(Сред(КодРегиона, 2, 1))); + КонецЕсли; + + Для Индекс = 2 По ИННМассив.ВГраница() Цикл + ИННМассив.Установить(Индекс, ЮТТестовыеДанные.СлучайноеЧисло(0, 9, 0)); + КонецЦикла; + + Сумма1 = 0; + Для Индекс = 0 По ВесовыеКоэффициенты1.ВГраница() Цикл + Элемент = ИННМассив.Получить(Индекс) * Число(ВесовыеКоэффициенты1.Получить(Индекс)); + Сумма1 = Сумма1 + Элемент; + КонецЦикла; + ИННМассив.Установить(ВесовыеКоэффициенты1.Количество(), Сумма1 % 11 % 10); + + Если ВесовыеКоэффициенты2.Количество() <> 0 Тогда + Сумма2 = 0; + Для Индекс = 0 По ВесовыеКоэффициенты2.ВГраница() Цикл + Элемент = ИННМассив.Получить(Индекс) * Число(ВесовыеКоэффициенты2.Получить(Индекс)); + Сумма2 = Сумма2 + Элемент; + КонецЦикла; + ИННМассив.Установить(ВесовыеКоэффициенты2.Количество(), Сумма1 % 11 % 10); + КонецЕсли; + + СлучайныйИНН = СтрСоединить(ИННМассив); + + Возврат СлучайныйИНН; +КонецФункции + +// Формирует случайный валидный КПП РФ +// +// Параметры: +// КодНалоговогоОргана - Строка - Код налогового органа, первые четыре цифры КПП. +// Причина - Число - Причина постановки. Поддерживаются следующие варианты +// # 2 - код причины "43" постановка на учет филиала российской организации +// # любая другая цифра - код причины "01" постановка на учет российской организации +// по месту ее нахождения +// +// Возвращаемое значение: +// Строка - Случайный КПП, например 344401001 +Функция КПП(КодНалоговогоОргана = "0000", Причина = 1) Экспорт + + СлучайныйКПП = ""; + + Если ТипЗнч(Причина) = Тип("Число") И Причина = 2 Тогда + Код2 = "43"; + Иначе + Код2 = "01"; + КонецЕсли; + + Если ТипЗнч(КодНалоговогоОргана) = Тип("Строка") И СтрДлина(КодНалоговогоОргана) = 4 Тогда + Код1 = КодНалоговогоОргана; + Иначе + МассивКод1 = Новый Массив(4); + Для Индекс = 0 По МассивКод1.ВГраница() Цикл + МассивКод1.Установить(Индекс, ЮТТестовыеДанные.СлучайноеЧисло(0, 9, 0)); + КонецЦикла; + Код1 = СтрСоединить(МассивКод1); + КонецЕсли; + + Код3 = "00" + Строка(ЮТТестовыеДанные.СлучайноеЧисло(0, 9, 0)); + + СлучайныйКПП = СтрШаблон("%1%2%3", Код1, Код2, Код3); + + Возврат СлучайныйКПП; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИмяРеализации() + Возврат "Компании"; +КонецФункции + +Функция СловарьИменаКомпаний() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "Наименования"); +КонецФункции + +Функция СловарьПрефиксыИменКомпаний() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "ПрефиксыНаименований"); +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Люди.xml b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Люди.xml new file mode 100644 index 0000000..f621f18 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Люди.xml @@ -0,0 +1,23 @@ + + + + + ЮТПодражатель_Люди + + + ru + Подражатель реализация люди клиент сервер + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Люди/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Люди/Ext/Module.bsl new file mode 100644 index 0000000..716b13c --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражатель_Люди/Ext/Module.bsl @@ -0,0 +1,204 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Возвращает случайное имя +// +// Параметры: +// Пол - Строка - см. ЮТПодражатель_Люди.ПолЧеловека +// +// Возвращаемое значение: +// Строка +Функция Имя(Пол = Неопределено) Экспорт + + ПолЧеловека = ОпределитьПолЧеловекаИзПараметра(Пол); + + Если ПолЧеловека = ПолЧеловека().Мужской Тогда + Словарь = СловарьМужскиеИмена(); + ИначеЕсли ПолЧеловека = ПолЧеловека().Женский Тогда + Словарь = СловарьЖенскиеИмена(); + КонецЕсли; + + Возврат ЮТПодражательСлужебный.СлучайноеЗначениеИзСловаря(Словарь); + +КонецФункции + +// Возвращает случайную фамилию +// +// Параметры: +// Пол - Строка - см. ЮТПодражатель_Люди.ПолЧеловека +// +// Возвращаемое значение: +// Строка +Функция Фамилия(Пол = Неопределено) Экспорт + + ПолЧеловека = ОпределитьПолЧеловекаИзПараметра(Пол); + + Если ПолЧеловека = ПолЧеловека().Мужской Тогда + Словарь = СловарьМужскиеФамилии(); + ИначеЕсли ПолЧеловека = ПолЧеловека().Женский Тогда + Словарь = СловарьЖенскиеФамилии(); + КонецЕсли; + + Возврат ЮТПодражательСлужебный.СлучайноеЗначениеИзСловаря(Словарь); + +КонецФункции + +// Возвращает случайное отчество +// +// Параметры: +// Пол - Строка - см. ЮТПодражатель_Люди.ПолЧеловека +// +// Возвращаемое значение: +// Строка +Функция Отчество(Пол = Неопределено) Экспорт + + ПолЧеловека = ОпределитьПолЧеловекаИзПараметра(Пол); + + Если ПолЧеловека = ПолЧеловека().Мужской Тогда + Словарь = СловарьМужскиеОтчества(); + ИначеЕсли ПолЧеловека = ПолЧеловека().Женский Тогда + Словарь = СловарьЖенскиеОтчества(); + КонецЕсли; + + Возврат ЮТПодражательСлужебный.СлучайноеЗначениеИзСловаря(Словарь); + +КонецФункции + +// Возвращает случайное отчество +// +// Параметры: +// Пол - Строка - см. ЮТПодражатель_Люди.ПолЧеловека +// +// Возвращаемое значение: +// Строка +Функция ФИО(Пол = Неопределено) Экспорт + + ПолЧеловека = ОпределитьПолЧеловекаИзПараметра(Пол); + + Возврат СтрШаблон( + "%1 %2 %3", + Фамилия(ПолЧеловека), + Имя(ПолЧеловека), + Отчество(ПолЧеловека) + ); + +КонецФункции + +// Формирует случаный ИНН физического лица +// +// Возвращаемое значение: +// Строка +Функция ИНН() Экспорт + Возврат ЮТТестовыеДанные.Подражатель().Компании().ИНН(, Истина); +КонецФункции + +// Формирует случаный СНИЛС. +// https://ru.wikipedia.org/wiki/Контрольное_число +// Возвращаемое значение: +// Строка +Функция СНИЛС() Экспорт + ЧастиСнилс = Новый Массив(); + ФорматаяСтрока = "ЧЦ=3; ЧН=000; ЧВН=;"; + ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(100, 999), ФорматаяСтрока)); + ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(0, 999), ФорматаяСтрока)); + ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(0, 999), ФорматаяСтрока)); + + ИтогоСтрокой = СтрСоединить(ЧастиСнилс, ""); + ДлинаОсновнойЧасти = СтрДлина(ИтогоСтрокой); + Сумма = 0; + Для Итератор = 0 По 8 Цикл + Сумма = Сумма + (Число(Сред(ИтогоСтрокой, ДлинаОсновнойЧасти - Итератор, 1)) * (Итератор + 1)); + КонецЦикла; + + ОстатокОтДеления = Сумма % 101; + КонтрольноеЧисло = ?(ОстатокОтДеления = 100, 0, ОстатокОтДеления); + + Возврат СтрШаблон( + "%1-%2-%3 %4", + ЧастиСнилс[0], + ЧастиСнилс[1], + ЧастиСнилс[2], + Формат(КонтрольноеЧисло, "ЧЦ=2; ЧН=00; ЧВН=;") + ); + +КонецФункции + +#Область ФабрикаПеречислений + +// Варианты биологического пола человека (не путать с гендером) +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Пол человека: +// * Мужской - Строка - +// * Женский - Строка - +Функция ПолЧеловека() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Мужской", "Мужской"); + Результат.Вставить("Женский", "Женский"); + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИмяРеализации() + Возврат "Люди"; +КонецФункции + +Функция СловарьЖенскиеИмена() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "ЖенскиеИмена"); +КонецФункции +Функция СловарьЖенскиеФамилии() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "ЖенскиеФамилии"); +КонецФункции +Функция СловарьЖенскиеОтчества() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "ЖенскиеОтчества"); +КонецФункции + +Функция СловарьМужскиеИмена() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "МужскиеИмена"); +КонецФункции +Функция СловарьМужскиеФамилии() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "МужскиеФамилии"); +КонецФункции +Функция СловарьМужскиеОтчества() + Возврат ЮТПодражательСлужебный.Словарь(ИмяРеализации(), "МужскиеОтчества"); +КонецФункции + +Функция ОпределитьПолЧеловекаИзПараметра(Пол) + + Если Пол <> Неопределено Тогда + Если Не ПолЧеловека().Свойство(Пол) Тогда + ВызватьИсключение СтрШаблон("Отсутствует реализация словаря для пола: %1", Пол); + КонецЕсли; + Возврат Пол; + КонецЕсли; + + Варианты = ЮТКоллекции.ВыгрузитьЗначения(ПолЧеловека(), "Значение"); + + Возврат ЮТТестовыеДанные.СлучайноеЗначениеИзСписка(Варианты); +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебный.xml new file mode 100644 index 0000000..2e52d1d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТПодражательСлужебный + + + ru + Подражатель служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..a0936b0 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебный/Ext/Module.bsl @@ -0,0 +1,87 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Получает список из словаря с учетом установленной локализации +// +// Параметры: +// ИмяРеализации - Строка - Имя реализации +// ИмяСловаря - Строка - Имя словаря +// КодЛокализации - Строка - Код локализации, по умолчанию берется из контекста +// +// Возвращаемое значение: +// ФиксированныйМассив из Строка +Функция Словарь(ИмяРеализации, ИмяСловаря, Знач КодЛокализации = Неопределено) Экспорт + КодЛокализации = ?(КодЛокализации = Неопределено, ЮТПодражатель.Локализация(), КодЛокализации); + Возврат ЮТПодражательСлужебныйПовтИсп.Словарь(ИмяРеализации, ИмяСловаря, КодЛокализации); +КонецФункции + +// Случайное значение из словаря. +// +// Параметры: +// Словарь - Массив из Строка - Словарь +// +// Возвращаемое значение: +// - Строка +Функция СлучайноеЗначениеИзСловаря(Словарь) Экспорт + Возврат Словарь.Получить(ЮТТестовыеДанные.СлучайноеЧисло(0, Словарь.ВГраница())); +КонецФункции + +// Контекст. +// +// Возвращаемое значение: +// см. НовыйКонтекст +Функция Контекст() Экспорт + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(КлючКонтекста()); +КонецФункции + +// Инициализирует подражатель +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Инициализировать() Экспорт + Если Контекст() = Неопределено Тогда + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(КлючКонтекста(), НовыйКонтекст()); + КонецЕсли; + Возврат ЮТПодражатель; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция КлючКонтекста() + Возврат "Подражатель"; +КонецФункции + +// Новый контекст. +// +// Возвращаемое значение: +// Структура - Новый контекст: +// * Локализация - см. ЮТЛокальСлужебный.ЛокальИнтерфейса +Функция НовыйКонтекст() + + Описание = Новый Структура; + Описание.Вставить("Локализация", ЮТЛокальСлужебный.ЛокальИнтерфейса()); + Возврат Описание; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйВызовСервера.xml new file mode 100644 index 0000000..34d70b7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТПодражательСлужебныйВызовСервера + + + ru + Подражатель вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..781bcd5 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,38 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Данные словаря. +// +// Параметры: +// Кодификатор - Строка - Имя словаря в метаданных +// +// Возвращаемое значение: +// ФиксированныйМассив из Строка +Функция ДанныеСловаря(Кодификатор) Экспорт + Если Метаданные.ОбщиеМакеты.Найти(Кодификатор) = Неопределено Тогда + ВызватьИсключение СтрШаблон("Словарь с именем (%1) не найден", Кодификатор); + КонецЕсли; + + Макет = ПолучитьОбщийМакет(Кодификатор); + Возврат СтрРазделить(Макет.ПолучитьТекст(), Символы.ПС, Ложь); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйПовтИсп.xml b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйПовтИсп.xml new file mode 100644 index 0000000..f4e5672 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + ЮТПодражательСлужебныйПовтИсп + + + ru + Подражатель повт исп + + + + false + true + true + true + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйПовтИсп/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..366db1d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПодражательСлужебныйПовтИсп/Ext/Module.bsl @@ -0,0 +1,48 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Получает список из словаря с учетом установленной локализации +// +// Параметры: +// ИмяРеализации - Строка - Имя реализации +// ИмяСловаря - Строка - Имя словаря +// КодЛокализации - Строка - Код локализации +// +// Возвращаемое значение: +// ФиксированныйМассив из Строка +Функция Словарь(ИмяРеализации, ИмяСловаря, КодЛокализации) Экспорт + Кодификатор = КодификаторСловаря(ИмяРеализации, ИмяСловаря, КодЛокализации); + Возврат Новый ФиксированныйМассив(ЮТПодражательСлужебныйВызовСервера.ДанныеСловаря(Кодификатор)); +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция КодификаторСловаря(ИмяРеализации, ИмяСловаря, КодЛокализации) + Возврат СтрШаблон( + "ЮТ_СловарьПодражателя_%1_%2_%3", + ИмяРеализации, + ИмяСловаря, + КодЛокализации + ); +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПредикаты.xml b/src/cfe/YAXUnit/CommonModules/ЮТПредикаты.xml new file mode 100644 index 0000000..1535867 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПредикаты.xml @@ -0,0 +1,23 @@ + + + + + ЮТПредикаты + + + ru + Предикаты + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПредикаты/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПредикаты/Ext/Module.bsl new file mode 100644 index 0000000..ec10021 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПредикаты/Ext/Module.bsl @@ -0,0 +1,440 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +///////////////////////////////////////////////////////////////////////////////// +// Механизм предикатов позволяет: +// +// * Формировать наборы утверждений и передавать в методы проверки +// * Методы для формирования предикатов имеют такой же синтаксис как и утверждения для тестов см. ЮТест.ОжидаетЧто +// * Проверять элементы коллекций на соответствие утверждениям +///////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Устанавливает имя реквизита, все последующие проверки будут относится к нему. +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита +// - Число - Индекс коллекции +// - Произвольный - Ключ соответствия +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Реквизит(ИмяРеквизита) Экспорт + + Контекст().ИмяРеквизита = ИмяРеквизита; + Возврат ЮТПредикаты; + +КонецФункции + +// Устанавливает имя свойства, все последующие проверки будут относится к нему. +// Это алиас для см. Реквизит +// +// Параметры: +// ИмяСвойства - Строка - Имя реквизита +// - Число - Индекс коллекции +// - Произвольный - Ключ соответствия +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Свойство(ИмяСвойства) Экспорт + + Возврат Реквизит(ИмяСвойства); + +КонецФункции + +// Добавляет предикат, проверяющий равенство объекта (свойства) указанному значению +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Равно(Значение) Экспорт + + ДобавитьПредикат(Выражения().Равно, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий не равенство объекта (свойства) указанному значению +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеРавно(Значение) Экспорт + + ДобавитьПредикат(Выражения().НеРавно, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий заполненность объекта (свойства) +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Заполнено() Экспорт + + ДобавитьПредикат(Выражения().Заполнено, Неопределено); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что объект (свойств) не заполнено +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Пусто() Экспорт + + ДобавитьПредикат(Выражения().НеЗаполнено, Неопределено); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (свойства) больше указанного +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Больше(Значение) Экспорт + + ДобавитьПредикат(Выражения().Больше, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (свойства) больше или равно указанному +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция БольшеИлиРавно(Значение) Экспорт + + ДобавитьПредикат(Выражения().БольшеРавно, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (свойства) меньше указанного +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Меньше(Значение) Экспорт + + ДобавитьПредикат(Выражения().Меньше, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (свойства) меньше или равно указанному +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция МеньшеИлиРавно(Значение) Экспорт + + ДобавитьПредикат(Выражения().МеньшеРавно, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (свойства) имеет указанный тип +// +// Параметры: +// Тип - Тип +// - ОписаниеТипов +// - Строка - Имя типа +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетТип(Тип) Экспорт + + ДобавитьПредикат(Выражения().ИмеетТип, Тип); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (свойства) имеет тип отличный от указанного +// +// Параметры: +// Тип - Тип +// - ОписаниеТипов +// - Строка - Имя типа +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетТипОтличныйОт(Тип) Экспорт + + ДобавитьПредикат(Выражения().НеИмеетТип, Тип); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, длину/размер значение объекта (свойства) на равенство указанному значению +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетДлину(Значение) Экспорт + + ДобавитьПредикат(Выражения().ИмеетДлину, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, длину/размер значение объекта (свойства) на не равенство указанному значению +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетДлинуОтличнуюОт(Значение) Экспорт + + ДобавитьПредикат(Выражения().НеИмеетДлину, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (реквизита) содержит вложенное свойство +// +// Параметры: +// ИмяСвойства - Строка - Имя свойства +// - Число - Индекс коллекции +// - Произвольный - Ключ соответствия +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетСвойство(ИмяСвойства) Экспорт + + ДобавитьПредикат(Выражения().ИмеетСвойство, ИмяСвойства); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (реквизита) не содержит вложенное свойство +// +// Параметры: +// ИмяСвойства - Строка - Имя свойства +// - Число - Индекс коллекции +// - Произвольный - Ключ соответствия +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеИмеетСвойства(ИмяСвойства) Экспорт + + ДобавитьПредикат(Выражения().НеИмеетСвойство, ИмяСвойства); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (реквизита) содержит указанное значение +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Содержит(Значение) Экспорт + + ДобавитьПредикат(Выражения().Содержит, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что значение объекта (реквизита) не содержит указанное значение +// +// Параметры: +// Значение - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержит(Значение) Экспорт + + ДобавитьПредикат(Выражения().НеСодержит, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что строка соответствует указанному регулярному выражению +// +// Параметры: +// Значение - Строка +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция СодержитСтрокуПоШаблону(Значение) Экспорт + + ДобавитьПредикат(Выражения().СодержитСтрокуПоШаблону, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет предикат, проверяющий, что строка не соответствует указанному регулярному выражению +// +// Параметры: +// Значение - Строка +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержитСтрокуПоШаблону(Значение) Экспорт + + ДобавитьПредикат(Выражения().НеСодержитСтрокуПоШаблону, Значение); + Возврат ЮТПредикаты; + +КонецФункции + +// Добавляет условие, что проверяемое значение (или значение его свойства) входит в список значений +// +// Параметры: +// Значения - Массив из Произвольный - Значения для проверки +// - СписокЗначений из Произвольный - Значения для проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ВСписке(Значения) Экспорт + + ДобавитьПредикат(Выражения().ВСписке, Значения); + Возврат ЮТПредикаты; + +КонецФункции + +// Возвращает набор сформированных утверждений. +// +// Рекомендуется использовать этот метод, если планируется отложенная проверка предикатов. Например, вы хотите сформировать два набору предикатов +// и проверять их в зависимости от условия. +// +// Метод копирует настроенный набор утверждений в массив и возвращает его, таким образом сохраняется состояние, которое можно передавать дальше. +// +// Возвращаемое значение: +// Массив из см. ЮТФабрика.ВыражениеПредиката - Набор предикатов +Функция Получить() Экспорт + + Возврат ЮТКоллекции.СкопироватьМассив(Контекст().Предикаты); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Инициализирует конструктор предиката +// Параметры: +// Условия - Структура, Соответствие из Произвольный - Набор условий, которыми инициализируется предикат +// Ключ - Строка - Имя реквизита +// Значение - Произвольный - Значение, которому должен быть равен реквизит +// +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Инициализировать(Условия = Неопределено) Экспорт + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(КлючКонтекста(), НовыйКонтекст()); + + Если ЗначениеЗаполнено(Условия) Тогда + Для Каждого Элемент Из Условия Цикл + Реквизит(Элемент.Ключ).Равно(Элемент.Значение); + КонецЦикла; + КонецЕсли; + + Возврат ЮТПредикаты; + +КонецФункции + +Функция Выражения() Экспорт + + Выражения = Новый Структура; + Выражения.Вставить("Равно", "Равно"); + Выражения.Вставить("НеРавно", "НеРавно"); + Выражения.Вставить("Заполнено", "Заполнено"); + Выражения.Вставить("НеЗаполнено", "НеЗаполнено"); + Выражения.Вставить("Больше", "Больше"); + Выражения.Вставить("БольшеРавно", "БольшеРавно"); + Выражения.Вставить("Меньше", "Меньше"); + Выражения.Вставить("МеньшеРавно", "МеньшеРавно"); + Выражения.Вставить("ИмеетТип", "ИмеетТип"); + Выражения.Вставить("НеИмеетТип", "НеИмеетТип"); + Выражения.Вставить("ИмеетДлину", "ИмеетДлину"); + Выражения.Вставить("НеИмеетДлину", "НеИмеетДлину"); + Выражения.Вставить("ИмеетСвойство", "ИмеетСвойство"); + Выражения.Вставить("НеИмеетСвойство", "НеИмеетСвойство"); + Выражения.Вставить("Содержит", "Содержит"); + Выражения.Вставить("НеСодержит", "НеСодержит"); + Выражения.Вставить("СодержитСтрокуПоШаблону", "СодержитСтрокуПоШаблону"); + Выражения.Вставить("НеСодержитСтрокуПоШаблону", "НеСодержитСтрокуПоШаблону"); + Выражения.Вставить("ВСписке", "ВСписке"); + + Возврат Новый ФиксированнаяСтруктура(Выражения); + +КонецФункции + +// Контекст. +// +// Возвращаемое значение: +// см. НовыйКонтекст +Функция Контекст() + + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(КлючКонтекста()); + +КонецФункции + +Функция КлючКонтекста() + + Возврат "Предикаты"; + +КонецФункции + +// Новый контекст. +// +// Возвращаемое значение: +// Структура - Новый контекст: +// * Предикаты - Массив из см. Предикат - Зарегистрированные предикаты +// * ИмяРеквизита - Неопределено, Строка - Имя проверяемого реквизита +Функция НовыйКонтекст() + + Описание = Новый Структура(); + Описание.Вставить("Предикаты", Новый Массив()); + Описание.Вставить("ИмяРеквизита", Неопределено); + + Возврат Описание; + +КонецФункции + +Процедура ДобавитьПредикат(ВидСравнения, Значение) + + Контекст = Контекст(); + + Предикат = ЮТФабрика.ВыражениеПредиката(ВидСравнения, Контекст.ИмяРеквизита, Значение); + Контекст.Предикаты.Добавить(Предикат); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПредикатыСлужебныйКлиентСервер.xml b/src/cfe/YAXUnit/CommonModules/ЮТПредикатыСлужебныйКлиентСервер.xml new file mode 100644 index 0000000..2315dc0 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПредикатыСлужебныйКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ЮТПредикатыСлужебныйКлиентСервер + + + ru + Предикаты клиент сервер + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПредикатыСлужебныйКлиентСервер/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПредикатыСлужебныйКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..67d24a9 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПредикатыСлужебныйКлиентСервер/Ext/Module.bsl @@ -0,0 +1,235 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Проверить предикат. +// +// Параметры: +// Значение - Произвольный +// Предикаты - Массив Из см. ЮТФабрика.ВыражениеПредиката +// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке +// ПараметрыСравнения - Неопределено +// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры +// +// Возвращаемое значение: +// см. ЮТФабрикаСлужебный.ОписаниеРезультатаПроверки +Функция ПроверитьПредикаты(Знач Значение, Знач Предикаты, Знач ПараметрыСообщенийОбОшибке = Неопределено, ПараметрыСравнения = Неопределено) Экспорт + + Результат = ЮТФабрикаСлужебный.ОписаниеРезультатаПроверки(); + + Если ПараметрыСообщенийОбОшибке = Неопределено Тогда + ПараметрыСообщенийОбОшибке = ПараметрыСообщенийОбОшибке(); + КонецЕсли; + + Предикаты = НаборПредикатов(Предикаты); + Для Каждого Выражение Из Предикаты Цикл + + ЮТСравнениеСлужебныйКлиентСервер.ПроверитьВыражениеПредиката(Значение, Выражение, Результат, ПараметрыСообщенийОбОшибке, ПараметрыСравнения); + Если НЕ Результат.Успешно Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Набор предикатов. +// +// Параметры: +// Предикаты - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор утверждений. см. ЮТест.Предикат +// - см. ЮТФабрика.ВыражениеПредиката +// - CommonModule.ЮТПредикаты - Модуль настройки предикатов, см. ЮТест.Предикат +// +// Возвращаемое значение: +// Массив из см. ЮТФабрика.ВыражениеПредиката - Набор предикатов +Функция НаборПредикатов(Знач Предикаты) Экспорт + + ТипПараметра = ТипЗнч(Предикаты); + + Если ЭтоПредикатОбщийМодуль(ТипПараметра, Предикаты) Тогда + Результат = ЮТПредикаты.Получить(); + ИначеЕсли ЭтоПредикатМассив(ТипПараметра, Предикаты) Тогда + Результат = Предикаты; + ИначеЕсли ЭтоПредикатСтруктура(ТипПараметра, Предикаты) Тогда + Результат = ЮТКоллекции.ЗначениеВМассиве(Предикаты); + Иначе + ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("ЮТПредикатыКлиентСервер.НаборПредикатов"); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Это предикат +// +// Параметры: +// Предикаты - Произвольный - значение, для которого будет определено является ли оно предикатом или нет +// +// Возвращаемое значение: +// Булево +Функция ЭтоПредикат(Предикаты) Экспорт + + ТипПараметра = ТипЗнч(Предикаты); + + Возврат ЭтоПредикатОбщийМодуль(ТипПараметра, Предикаты) + ИЛИ ЭтоПредикатМассив(ТипПараметра, Предикаты) + ИЛИ ЭтоПредикатСтруктура(ТипПараметра, Предикаты); + +КонецФункции + +Функция ПредставлениеПредикатов(Знач Предикаты, Разделитель, ШаблонСвойства = "содержит свойство `%1`, которое") Экспорт + + Представления = Новый Массив(); + Предикаты = НаборПредикатов(Предикаты); + ИмяРеквизита = Неопределено; + Для Каждого Выражение Из Предикаты Цикл + НеДобавлятьИмяРеквизита = ИмяРеквизита = Выражение.ИмяРеквизита; + ИмяРеквизита = Выражение.ИмяРеквизита; + Представления.Добавить(ПредставлениеПредиката(Выражение, ШаблонСвойства, НеДобавлятьИмяРеквизита)); + КонецЦикла; + + Возврат СтрСоединить(Представления, Разделитель); + +КонецФункции + +Функция ШаблонВыражения(Знач Выражение) Экспорт + + Отрицание = СтрНачинаетсяС(Выражение, "Не"); + Если Отрицание Тогда + Выражение = Сред(Выражение, 3); + КонецЕсли; + + Выражения = ЮТПредикаты.Выражения(); + + Шаблон = Неопределено; + Если Выражение = Выражения.Равно Тогда + Шаблон = "равно %1"; + ИначеЕсли Выражение = Выражения.Заполнено Тогда + Шаблон = "является заполненным"; + ИначеЕсли Выражение = Выражения.Больше Тогда + Шаблон = "больше чем %1"; + ИначеЕсли Выражение = Выражения.БольшеРавно Тогда + Шаблон = "больше или равно %1"; + ИначеЕсли Выражение = Выражения.Меньше Тогда + Шаблон = "меньше чем %1"; + ИначеЕсли Выражение = Выражения.МеньшеРавно Тогда + Шаблон = "меньше или равно %1"; + ИначеЕсли Выражение = Выражения.ИмеетТип Тогда + Шаблон = "имеет тип %1"; + ИначеЕсли Выражение = Выражения.ИмеетДлину Тогда + Шаблон = "имеет длину (размер) %1"; + ИначеЕсли Выражение = Выражения.ИмеетСвойство Тогда + Шаблон = "содержит свойство %1"; + ИначеЕсли Выражение = Выражения.Содержит Тогда + Шаблон = "содержит %1"; + ИначеЕсли Выражение = Выражения.СодержитСтрокуПоШаблону Тогда + Шаблон = "содержит подстроку соответствующую шаблону %1"; + ИначеЕсли Выражение = Выражения.ВСписке Тогда + Шаблон = "в списке %1"; + Иначе + ВызватьИсключение "Не описан шаблон сообщения для выражения предиката " + Выражение; + КонецЕсли; + + Если Отрицание Тогда + Шаблон = "не " + Шаблон; + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +Функция ЭтоВыраженияОтрицания(Выражение) Экспорт + + Возврат СтрНачинаетсяС(Выражение, "Не"); + +КонецФункции + +Функция ВыраженияБезОтрицания(Выражение) Экспорт + + Возврат Сред(Выражение, 3); + +КонецФункции + +// Параметры сообщений об ошибке. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// ТекстПроверяемоеЗначение - Строка - Человекочитаемое описание проверяемого значения +// ПредставлениеПроверяемогоЗначения - Неопределено - Представление проверяемого значения +// +// Возвращаемое значение: +// Структура - Параметры сообщений об ошибке: +// * ОписаниеПроверки - Неопределено, Строка - Описание конкретной проверки +// * ТекстПроверяемоеЗначение - Неопределено, Строка - Человекочитаемое описание проверяемого значения +// * ПредставлениеПроверяемогоЗначения - Неопределено, Строка - +Функция ПараметрыСообщенийОбОшибке(ОписаниеПроверки = Неопределено, + ТекстПроверяемоеЗначение = "проверяемое значение", + ПредставлениеПроверяемогоЗначения = Неопределено) Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ОписаниеПроверки", ОписаниеПроверки); + Параметры.Вставить("ТекстПроверяемоеЗначение", ТекстПроверяемоеЗначение); + Параметры.Вставить("ПредставлениеПроверяемогоЗначения", ПредставлениеПроверяемогоЗначения); + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПредставлениеПредиката(ВыражениеПредиката, ШаблонСвойства, НеДобавлятьИмяРеквизита) + + Если НеДобавлятьИмяРеквизита ИЛИ ВыражениеПредиката.ИмяРеквизита = Неопределено Тогда + ПроверяемоеЗначение = ""; + Иначе + ПроверяемоеЗначение = СтрШаблон(ШаблонСвойства, ВыражениеПредиката.ИмяРеквизита) + " "; + КонецЕсли; + + Выражение = ЮТСообщенияСлужебный.ПодставитьПредставлениеЗначенияВШаблон(ШаблонВыражения(ВыражениеПредиката.ВидСравнения), + ВыражениеПредиката.Значение); + + Возврат СтрШаблон("%1%2", ПроверяемоеЗначение, Выражение); + +КонецФункции + +Функция ЭтоПредикатОбщийМодуль(ТипПредикатов, Предикаты) + + Возврат ТипПредикатов = Тип("ОбщийМодуль") И Предикаты = ЮТПредикаты; + +КонецФункции + +Функция ЭтоПредикатМассив(ТипПредикатов, Предикаты) + + Возврат ТипПредикатов = Тип("Массив") + И Предикаты.Количество() + И ЭтоПредикатСтруктура(ТипЗнч(Предикаты[0]), Предикаты[0]); + +КонецФункции + +Функция ЭтоПредикатСтруктура(ТипПредикатов, Предикаты) + + Возврат ТипПредикатов = Тип("Структура") И ЮТОбщий.ТипСтруктуры(Предикаты) = "Предикат"; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПреобразованияСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТПреобразованияСлужебный.xml new file mode 100644 index 0000000..7111d62 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПреобразованияСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТПреобразованияСлужебный + + + ru + Преобразования + + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПреобразованияСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПреобразованияСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..7b36a3c --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПреобразованияСлужебный/Ext/Module.bsl @@ -0,0 +1,230 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Читает табличный документ в массив структур +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - Исходный табличный документ +// НомерКолонки - Число - Номер строки таблицы, с которой следует начать считывание +// НомерСтроки - Число - Номер колонки таблицы, с которой следует начать считывание +// Возвращаемое значение: +// Массив из Структура - Данные табличного документа +Функция ДанныеТабличногоДокумента(ТабличныйДокумент, Знач НомерКолонки = 1, Знач НомерСтроки = 1) Экспорт + + МассивДанных = Новый Массив; + СведенияКолонок = Новый Массив; + + ЗаменяемыеСтроки = ЮТТестовыеДанныеСлужебный.ПодстрокиДляЗаменыВИменахСвойств(); + + ЗначениеКолонки = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки).Текст; + Пока ЗначениеЗаполнено(ЗначениеКолонки) Цикл + + Для Каждого Замена Из ЗаменяемыеСтроки Цикл + ПодстрокаПоиска = Замена.Ключ; + ПодстрокаЗамены = Замена.Значение; + ИмяКолонки = СтрЗаменить(ЗначениеКолонки, ПодстрокаПоиска, ПодстрокаЗамены); + КонецЦикла; + + Сведения = Новый Структура("НомерКолонки, ИмяКолонки", НомерКолонки, ИмяКолонки); + СведенияКолонок.Добавить(Сведения); + + НомерКолонки = НомерКолонки + 1; + ЗначениеКолонки = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки).Текст; + + КонецЦикла; + + НомерСтроки = НомерСтроки + 1; + + Пока ЕстьЗначенияВСтроке(ТабличныйДокумент, НомерСтроки, СведенияКолонок) Цикл + + Структура = Новый Структура; + + Для Каждого Сведения Из СведенияКолонок Цикл + Значение = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, Сведения.НомерКолонки).Текст); + Структура.Вставить(Сведения.ИмяКолонки, Значение); + КонецЦикла; + + МассивДанных.Добавить(Структура); + + НомерСтроки = НомерСтроки + 1; + + КонецЦикла; + + Возврат МассивДанных; + +КонецФункции + +Функция ПривестиЗначениеКДате(ОписаниеТипа, Знач Значение) Экспорт + + ДатаМассив = СтрРазделить(Значение, ".,:T-/ "); + + НетВремени = 3; + ЕстьВремя = 7; + Полдень = 12; + + ДлинаДеньМесяц = 2; + ДлинаГод = 4; + + ДатаИзСтроки_ПроверкаДлиныДаты(ДатаМассив.Количество(), НетВремени, ЕстьВремя); + + ///////////////////////////////////////////////////////////////////////////////// + + ДатаИзСтроки_ОбработкаМассиваДаты(ДатаМассив); // если вдруг кто-то забыл вставить что-то между разделителями. + + ДатаИзСтроки_ПроверкаМесяца(ДатаМассив[1]); // проверка месяца, корректно или нет + + Если ДатаМассив.Количество() = ЕстьВремя Тогда // время формата HH:mm:ss tt или H:mm:ss tt + + ВГр = ДатаМассив.ВГраница(); + ПозЧас = 3; + + ДатаМассив[ВГр] = ВРег(ДатаМассив[ВГр]); + ЧасДоп = ?(ДатаМассив[ВГр] = "PM", Полдень, 0); + ДатаМассив.Удалить(ВГр); + + ЧасовВСутках = 24; + // если все-таки решили вписать не существующий формат попробуем его воспринять адекватно. + ДатаМассив[ПозЧас] = Строка(?(Число(ДатаМассив[ПозЧас]) + ЧасДоп >= ЧасовВСутках, ДатаМассив[ПозЧас], Число(ДатаМассив[ПозЧас]) + ЧасДоп)); + + КонецЕсли; + + Для Индекс = 0 По ДатаМассив.ВГраница() Цикл // добавляем ведущие нули в маски d.M.yy, yy.M.d, H:mm:ss + + ДатаМассив[Индекс] = Формат(Число(ДатаМассив[Индекс]), "ЧЦ=" + ?(СтрДлина(ДатаМассив[Индекс]) > ДлинаДеньМесяц, "4", "2") + "; ЧВН=; ЧГ=0; ЧН=00"); + + КонецЦикла; + + ПозГод = 2; + ПозМесяц = 1; + ПозДень = 0; + + // Проверка гггг.мм.дд или дд.мм.гггг + Если СтрДлина(ДатаМассив[ПозГод]) = ДлинаГод Тогда + + ВремДата = ДатаМассив[ПозДень]; + ДатаМассив[ПозДень] = ДатаМассив[ПозГод]; + ДатаМассив[ПозГод] = ВремДата; + + КонецЕсли; + + // обработка масок dd.MM.yy и yy.MM.dd, первая маска в приоритете. + Если СтрДлина(ДатаМассив[0]) = ДлинаДеньМесяц И СтрДлина(ДатаМассив[ПозГод]) = ДлинаДеньМесяц Тогда + + УсловнаяГраница = 66; // что больше, то 20 век, что меньше - 21 + Год = ?(Число(ДатаМассив[ПозГод]) > УсловнаяГраница, "19", "20"); + + Попытка // попытаемся превратить ее в дату + + // Собственно - проверка, попытка получить дату + //@skip-check module-unused-local-variable - Необходима для помещения результата получения даты из строки. + ТестоваяДата = Дата(Год + ДатаМассив[ПозГод] + ДатаМассив[ПозМесяц] + ДатаМассив[ПозДень]); + + ВремДата = ДатаМассив[ПозДень]; + ДатаМассив[ПозДень] = (Год + ДатаМассив[ПозГод]); + ДатаМассив[ПозГод] = ВремДата; + + Исключение // если не получилось, значит маска yy.MM.dd + + ДатаМассив[ПозДень] = (Год + ДатаМассив[ПозДень]); + + КонецПопытки; + + КонецЕсли; + + Результат = ОписаниеТипа.ПривестиЗначение(СтрСоединить(ДатаМассив)); + + Возврат Результат; + +КонецФункции + +Функция ПривестиЗначениеКЧислу(ОписаниеТипа, Знач Значение) Экспорт + + Значение = СтрЗаменить(Значение, ",", "."); + Результат = ОписаниеТипа.ПривестиЗначение(Значение); + Если ЗначениеЗаполнено(Результат) Тогда + Возврат Результат; + КонецЕсли; + + Значение = СтрЗаменить(Значение, " ", ""); + Результат = ОписаниеТипа.ПривестиЗначение(Значение); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЕстьЗначенияВСтроке(ТабличныйДокумент, НомерСтроки, СведенияКолонок) + + ЕстьЗаполненныеЗначения = Ложь; + + Для Каждого Сведения Из СведенияКолонок Цикл + Если ЕстьЗаполненныеЗначения Тогда + Прервать; + КонецЕсли; + НомерКолонки = Сведения.НомерКолонки; + ЕстьЗаполненныеЗначения = ЗначениеЗаполнено(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки).Текст); + КонецЦикла; + + Возврат ЕстьЗаполненныеЗначения; + +КонецФункции + +Процедура ДатаИзСтроки_ПроверкаДлиныДаты(ДлинаСтроки, ДлинаБезВремени = 0, ДлинаСВременем = 0, ДатаСтрока = "") + + Если ДлинаБезВремени = 0 ИЛИ ДлинаСВременем = 0 Тогда + + ДлинаБезВремени = 6; + ДлинаСВременем = 22; + + КонецЕсли; + + // Временные зоны не поддерживаются, однако формат даты в нулевой зоне попадает в допустимую длину других поддерживаемых форматов. + ДлинаДатыВНулевойЗоне = 20; + ЭтоНулеваяЗона = ДлинаСтроки = ДлинаДатыВНулевойЗоне И СтрЗаканчиваетсяНа(ДатаСтрока, "Z"); + + Если ДлинаСтроки < ДлинаБезВремени Или ДлинаСтроки > ДлинаСВременем Или ЭтоНулеваяЗона Тогда + ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("ПривестиЗначениеКДате", "Дата в строке не подходит ни под одну маску."); + КонецЕсли; + +КонецПроцедуры + +Процедура ДатаИзСтроки_ОбработкаМассиваДаты(ДатаМассив) + + Для Индекс = 0 По ДатаМассив.ВГраница() Цикл + + ДатаМассив[Индекс] = ?(СтрДлина(ДатаМассив[Индекс]) = 0, "0", ДатаМассив[Индекс]); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДатаИзСтроки_ПроверкаМесяца(МесяцСтрокой) + + МесяцевВГоду = 12; + Если Число(МесяцСтрокой) > МесяцевВГоду Или Число(МесяцСтрокой) = 0 Тогда + ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("ПривестиЗначениеКДате", "Месяц выходит за границы диапазона."); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПроверкиСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТПроверкиСлужебный.xml new file mode 100644 index 0000000..c3bf133 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПроверкиСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТПроверкиСлужебный + + + ru + Проверки служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТПроверкиСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТПроверкиСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..1faf6cc --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТПроверкиСлужебный/Ext/Module.bsl @@ -0,0 +1,69 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПроверитьТипПараметра(Значение, ОжидаемыйТип, ИмяМетода, ИмяПараметра, ЕслиУстановлен = Ложь) Экспорт + + Если ЕслиУстановлен И Значение = Неопределено Тогда + Возврат; + КонецЕсли; + + Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип); + + Если НЕ Соответствует Тогда + ТекстОшибки = СтрШаблон("Некорректный тип параметра `%1` метода `%2`. Метод принимает `%3`, а получили `%4` (%5)", + ИмяПараметра, + ИмяМетода, + ОжидаемыйТип, + ТипЗнч(Значение), + Значение); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип) Экспорт + + ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип); + + Если ТипОжидаемогоТипа = Тип("Строка") Тогда + Если СтрНайти(ОжидаемыйТип, ",") Тогда + ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип); + ТипОжидаемогоТипа = Тип("ОписаниеТипов"); + Иначе + ОжидаемыйТип = Тип(ОжидаемыйТип); + ТипОжидаемогоТипа = Тип("Тип"); + КонецЕсли; + КонецЕсли; + + ТипЗначения = ТипЗнч(Значение); + + Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда + // СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено") + Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено + И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение; + Иначе + Соответствует = ТипЗначения = ОжидаемыйТип; + КонецЕсли; + + Возврат Соответствует; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТРасширенияСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТРасширенияСлужебный.xml new file mode 100644 index 0000000..a5d10b3 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТРасширенияСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТРасширенияСлужебный + + + ru + Расширения функциональности + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТРасширенияСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТРасширенияСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..5e732b7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТРасширенияСлужебный/Ext/Module.bsl @@ -0,0 +1,64 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ГенераторыОтчетов() Экспорт + + Возврат МодулиПодсистемы("ЮТФормированиеОтчета"); + +КонецФункции + +Функция ОбработчикиСобытий() Экспорт + + Серверные = Ложь; + Клиентские = Ложь; +#Если Сервер Тогда + Серверные = Истина; +#КонецЕсли + +#Если Клиент Тогда + Клиентские = Истина; +#КонецЕсли + + Возврат ЮТМетаданные.МодулиПодсистемы("ЮТОбработчикиСобытий", Серверные, Клиентские); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция МодулиПодсистемы(ИмяПодсистемы) + + ИменаМодулей = ЮТМетаданные.МодулиПодсистемы(ИмяПодсистемы); + + Модули = Новый Массив(); + + Для Каждого ИмяМодуля Из ИменаМодулей Цикл + + Модуль = ЮТОбщий.Модуль(ИмяМодуля); + Модули.Добавить(Модуль); + + КонецЦикла; + + Возврат Модули; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибок.xml b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибок.xml new file mode 100644 index 0000000..9bcbfd3 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибок.xml @@ -0,0 +1,23 @@ + + + + + ЮТРегистрацияОшибок + + + ru + Регистрация ошибок + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибок/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибок/Ext/Module.bsl new file mode 100644 index 0000000..69fab23 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибок/Ext/Module.bsl @@ -0,0 +1,36 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Добавляет пяснение возникшей ошибки, которое будет довлено в отчет. +// Используется перед выбросом исключения, чтобы добавить полезной информации об ошибке, но при этом не ломать стек. +// +// Параметры: +// Пояснение - Строка - Пояснение +Процедура ДобавитьПояснениеОшибки(Пояснение) Экспорт + + ЮТРегистрацияОшибокСлужебный.ДобавитьПояснениеОшибки(Пояснение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибокСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибокСлужебный.xml new file mode 100644 index 0000000..e240ebf --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибокСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТРегистрацияОшибокСлужебный + + + ru + Регистрация ошибок + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибокСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибокСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..8f3af48 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТРегистрацияОшибокСлужебный/Ext/Module.bsl @@ -0,0 +1,698 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ФиксацияОшибокВРезультате + +// Регистрирует ошибку обработки события исполнения тестов +// +// Параметры: +// ИмяСобытия - Строка +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +// Ошибка - ИнформацияОбОшибке +// - Строка +Процедура ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка) Экспорт + + ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().ОшибкаОбработкиСобытия; + Пояснение = ЮТСообщенияСлужебный.СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка); + ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки); + + Если ОписаниеСобытия.Тест <> Неопределено Тогда + Объект = ОписаниеСобытия.Тест; + ИначеЕсли ОписаниеСобытия.Набор <> Неопределено Тогда + Объект = ОписаниеСобытия.Набор; + Иначе + Объект = ОписаниеСобытия.Модуль; + КонецЕсли; + + Объект.Ошибки.Добавить(ДанныеОшибки); + +КонецПроцедуры + +// Регистрирует ошибку загрузки тестов +// +// Параметры: +// Объект - Структура - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля или см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора или см. ЮТФабрикаСлужебный.ОписаниеТеста +// Описание - Строка - Описания ошибки, места возникновения +// Ошибка - ИнформацияОбОшибке +Процедура ЗарегистрироватьОшибкуЧтенияТестов(Объект, Описание, Ошибка) Экспорт + + ДанныеОшибки = ДанныеОшибки(Ошибка, Описание, ЮТФабрикаСлужебный.ТипыОшибок().ЧтенияТестов); + Объект.Ошибки.Добавить(ДанныеОшибки); + +КонецПроцедуры + +// Регистрирует ошибку выполнения теста +// Параметры: +// Тест - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +// Ошибка - ИнформацияОбОшибке +Процедура ЗарегистрироватьОшибкуВыполненияТеста(Тест, Ошибка) Экспорт + + ТипОшибки = ТипОшибки(Ошибка, Тест.ПолноеИмяМетода); + + Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Утверждений Тогда + ДанныеОшибки = ДанныеОшибкиУтверждений(Ошибка); + ИначеЕсли ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда + ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка); + Иначе + ДанныеОшибки = ДанныеОшибки(Ошибка, ЮТСообщенияСлужебный.КраткоеСообщениеОшибки(Ошибка), ТипОшибки); + КонецЕсли; + + Тест.Ошибки.Добавить(ДанныеОшибки); + +КонецПроцедуры + +// Регистрирует ошибку выполнения теста +// Параметры: +// Объект - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +// Сообщение - Строка +Процедура ЗарегистрироватьПростуюОшибкуВыполнения(Объект, Сообщение) Экспорт + + ДанныеОшибки = ДанныеОшибки(Неопределено, Сообщение, ЮТФабрикаСлужебный.ТипыОшибок().Исполнения); + Объект.Ошибки.Добавить(ДанныеОшибки); + +КонецПроцедуры + +// Регистрирует ошибку режима выполнения теста +// Параметры: +// Объект - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +// Ошибка - Строка +Процедура ЗарегистрироватьОшибкуРежимаВыполнения(Объект, Ошибка) Экспорт + + ДанныеОшибки = ДанныеОшибки(Неопределено, Ошибка, ЮТФабрикаСлужебный.ТипыОшибок().НекорректныйКонтекстИсполнения); + Объект.Ошибки.Добавить(ДанныеОшибки); + +КонецПроцедуры + +#КонецОбласти + +// Вызывает ошибку выполнения теста, на основании перехваченной ошибки +// +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке +// ОписаниеПроверки - см. ЮТФабрикаСлужебный.ОписаниеПроверки +Процедура СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке, ОписаниеПроверки = Неопределено) Экспорт + + СтруктураОшибки = КонтекстОшибки(); + СтруктураОшибки.ОшибкаУтверждения = Ложь; + + ВызватьОшибкуИсполнения(ИнформацияОбОшибке, ОписаниеПроверки); + +КонецПроцедуры + +// Вызывает ошибку сравнения значений +// При этом сохраняет в контекст состояние, для дальнейшей обработки +// +// Параметры: +// ОписаниеПроверки - см. ЮТФабрикаСлужебный.ОписаниеПроверки +// Сообщение - Строка +// ПроверяемоеЗначение - Произвольный +// ОжидаемоеЗначение - Произвольный +// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения +Процедура СгенерироватьОшибкуСравнения(ОписаниеПроверки, + Сообщение, + ПроверяемоеЗначение, + ОжидаемоеЗначение, + ОбъектПроверки = "проверяемое значение") Экспорт + + УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение); + ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); + ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки); + +КонецПроцедуры + +// Вызывает ошибку проверки утверждений +// При этом сохраняет в контекст состояние, для дальнейшей обработки +// +// Параметры: +// ОписаниеПроверки - см. ЮТФабрикаСлужебный.ОписаниеПроверки +// Сообщение - Строка +// ПроверяемоеЗначение - Произвольный +// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения +Процедура СгенерироватьОшибкуУтверждения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт + + УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение); + ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); + ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки); + +КонецПроцедуры + +Процедура Пропустить(Сообщение) Экспорт + + СтруктураОшибки = КонтекстОшибки(); + СтруктураОшибки.ОшибкаУтверждения = Ложь; + + СообщениеОбОшибке = СообщениеОбОшибке(Сообщение, ПрефиксОшибкиПропуска()); + ВызватьИсключение СообщениеОбОшибке; + +КонецПроцедуры + +Функция ПредставлениеОшибки(Знач Описание, Знач Ошибка) Экспорт + + Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда + Ошибка = Символы.ПС + ПодробноеПредставлениеОшибки(Ошибка); + КонецЕсли; + + Возврат СтрШаблон("%1: %2", Описание, Ошибка); + +КонецФункции + +// Вызывает ошибку выполнения теста +// Служебный метод, предварительно нужно самостоятельно настроить контекст (см. ЮТКонтекстСлужебный.КонтекстОшибки) +// Параметры: +// ТекстСообщения - Строка +// ОписаниеПроверки - см. ЮТФабрикаСлужебный.ОписаниеПроверки +Процедура ВызватьОшибкуПроверки(Знач ТекстСообщения, ОписаниеПроверки = Неопределено) Экспорт + + СообщениеОбОшибке = СообщениеОбОшибке(ТекстСообщения, ПрефиксОшибкиУтверждений(), ОписаниеПроверки); + ВызватьИсключение СообщениеОбОшибке; + +КонецПроцедуры + +Процедура ЗарегистрироватьОшибкуИнициализацииДвижка(Ошибка, Описание) Экспорт + + СообщитьОбОшибке(Ошибка, Описание); + +КонецПроцедуры + +// Возвращает тип ошибки +// +// Параметры: +// Ошибка - ИнформацияОбОшибке +// ИмяВызываемогоМетода - Строка - Имя вызываемого метода +// +// Возвращаемое значение: +// Строка - см. ЮТФабрикаСлужебный.ТипыОшибок +Функция ТипОшибки(Ошибка, ИмяВызываемогоМетода) Экспорт + + ТипыОшибок = ЮТФабрикаСлужебный.ТипыОшибок(); + + Описание = Ошибка.Описание; + + ИмяМетода = Сред(ИмяВызываемогоМетода, СтрНайти(ИмяВызываемогоМетода, ".") + 1); + + Тексты = ТекстыОшибокВызоваМетода(ИмяМетода); + + Если Описание = Тексты.МетодНеОбнаружен + И СтрНачинаетсяС(Ошибка.ИсходнаяСтрока, ИмяВызываемогоМетода) Тогда + + ТипОшибки = ТипыОшибок.ТестНеРеализован; + + ИначеЕсли Описание = Тексты.МалоПараметров И СтрНачинаетсяС(Ошибка.ИсходнаяСтрока, ИмяВызываемогоМетода) Тогда + + ТипОшибки = ТипыОшибок.МалоПараметров; + + ИначеЕсли Описание = Тексты.МногоПараметров И СтрНачинаетсяС(Ошибка.ИсходнаяСтрока, ИмяВызываемогоМетода) Тогда + + ТипОшибки = ТипыОшибок.МногоПараметров; + + ИначеЕсли СтрНачинаетсяС(Описание, ПрефиксОшибкиУтверждений()) Тогда + + ТипОшибки = ТипыОшибок.Утверждений; + + ИначеЕсли СтрНачинаетсяС(Описание, ПрефиксОшибкиПропуска()) Тогда + + ТипОшибки = ТипыОшибок.Пропущен; + + Иначе + + ТипОшибки = ТипыОшибок.Исполнения; + + КонецЕсли; + + Возврат ТипОшибки; + +КонецФункции + +Функция ПрефиксОшибкиУтверждений() Экспорт + + Возврат "[Failed]"; + +КонецФункции + +Функция ПрефиксОшибкиВыполнения() Экспорт + + Возврат "[Broken]"; + +КонецФункции + +Функция ПрефиксОшибкиПропуска() Экспорт + + Возврат "[Skip]"; + +КонецФункции + +Функция СтатусВыполненияТеста(Тест) Экспорт + + СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста(); + + Если Тест.Ошибки.КОличество() = 0 Тогда + Возврат СтатусыИсполненияТеста.Успешно; + КонецЕсли; + + ПорядокСтатусов = Новый Массив(); + ПорядокСтатусов.Добавить(СтатусыИсполненияТеста.Успешно); + ПорядокСтатусов.Добавить(СтатусыИсполненияТеста.Исполнение); + ПорядокСтатусов.Добавить(СтатусыИсполненияТеста.НеРеализован); + ПорядокСтатусов.Добавить(СтатусыИсполненияТеста.Ожидание); + ПорядокСтатусов.Добавить(СтатусыИсполненияТеста.Пропущен); + ПорядокСтатусов.Добавить(СтатусыИсполненияТеста.Ошибка); + ПорядокСтатусов.Добавить(СтатусыИсполненияТеста.Сломан); + + Статус = Тест.Статус; + + Для Каждого Ошибка Из Тест.Ошибки Цикл + + СтатусОшибки = СтатусОшибки(Ошибка.ТипОшибки); + + Если ПорядокСтатусов.Найти(СтатусОшибки) > ПорядокСтатусов.Найти(Статус) Тогда + Статус = СтатусОшибки; + КонецЕсли; + + Если Статус = СтатусыИсполненияТеста.Сломан Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Статус; + +КонецФункции + +Функция СтатусОшибки(ТипОшибки) Экспорт + + СтатусОшибки = ЮТФабрикаСлужебный.ПараметрыТиповОшибок()[ТипОшибки].Статус; + + Если СтатусОшибки = Неопределено Тогда + СтатусОшибки = ЮТФабрика.СтатусыИсполненияТеста().Сломан; + КонецЕсли; + + Возврат СтатусОшибки; + +КонецФункции + +Процедура УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение) Экспорт + + СтруктураОшибки = КонтекстОшибки(); + + СтруктураОшибки.ОшибкаУтверждения = Истина; + СтруктураОшибки.ПроверяемоеЗначение = ЮТОбщий.ПредставлениеЗначения(ПроверяемоеЗначение); + СтруктураОшибки.ОжидаемоеЗначение = ЮТОбщий.ПредставлениеЗначения(ОжидаемоеЗначение); + +КонецПроцедуры + +Процедура УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение) Экспорт + + СтруктураОшибки = КонтекстОшибки(); + + СтруктураОшибки.ОшибкаУтверждения = Истина; + СтруктураОшибки.ПроверяемоеЗначение = ЮТОбщий.ПредставлениеЗначения(ПроверяемоеЗначение); + СтруктураОшибки.ОжидаемоеЗначение = Неопределено; + +КонецПроцедуры + +Функция ДобавитьОписания(ТекстОшибки, ОписаниеПроверки = Неопределено) Экспорт + + Если ОписаниеПроверки <> Неопределено Тогда + ПрефиксОшибки = ЮТСтроки.ДобавитьСтроку(ОписаниеПроверки.ПрефиксОшибки, ОписаниеПроверки.ОписаниеПроверки, " "); + СообщениеОбОшибке = ЮТСтроки.ДобавитьСтроку(ПрефиксОшибки, ТекстОшибки, ": "); + Иначе + СообщениеОбОшибке = ТекстОшибки; + КонецЕсли; + + СообщениеОбОшибке = ВРег(Лев(СообщениеОбОшибке, 1)) + Сред(СообщениеОбОшибке, 2); + Возврат СообщениеОбОшибке; + +КонецФункции + +Процедура ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, Знач Ошибка, ОписаниеПроверки = Неопределено) Экспорт + + Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда + Ошибка = ПодробноеПредставлениеОшибки(Ошибка); + КонецЕсли; + + ТекстОшибки = ДобавитьОписания(Ошибка, ОписаниеПроверки); + РезультатПроверки.Успешно = Ложь; + РезультатПроверки.Сообщения.Добавить(ТекстОшибки); + +КонецПроцедуры + +Процедура ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки, Сообщение, ПроверяемоеЗначение, ОжидаемоеЗначение) Экспорт + + ОписаниеКонтекстаОшибки = ОписаниеКонтекстаОшибки(); + ОписаниеКонтекстаОшибки.ПроверяемоеЗначение = ПроверяемоеЗначение; + ОписаниеКонтекстаОшибки.ОжидаемоеЗначение = ОжидаемоеЗначение; + ОписаниеКонтекстаОшибки.ОшибкаУтверждения = Истина; + ОписаниеКонтекстаОшибки.Сообщение = Сообщение; + + РезультатПроверки.Успешно = Ложь; + РезультатПроверки.Сообщения.Добавить(ОписаниеКонтекстаОшибки); + +КонецПроцедуры + +Процедура ДобавитьПояснениеОшибки(Пояснение) Экспорт + + Детали = КонтекстДеталиОшибки(); + Установить = Детали = Неопределено; + + Если Установить Тогда + Детали = Новый Массив(); + КонецЕсли; + + Детали.Добавить(Пояснение); + + Если Установить Тогда + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), Детали); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Контекст + +// Контекст ошибки. +// +// Возвращаемое значение: +// см. ОписаниеКонтекстаОшибки +Функция КонтекстОшибки() Экспорт + + Контекст = ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаОшибки()); + + Если Контекст = Неопределено Тогда + Контекст = УстановитьКонтекстОшибки(); + КонецЕсли; + + //@skip-check constructor-function-return-section + Возврат Контекст; + +КонецФункции + +Функция УстановитьКонтекстОшибки() Экспорт + + ДанныеОшибки = ОписаниеКонтекстаОшибки(); + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаОшибки(), ДанныеОшибки); + + Возврат ДанныеОшибки; + +КонецФункции + +Функция КонтекстДеталиОшибки(ПолучитьССервера = Ложь) + + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), ПолучитьССервера); + +КонецФункции + +// ОписаниеКонтекстаОшибки +// Возвращает описание деталей/расшифровки ошибки +// Возвращаемое значение: +// Структура - Детали ошибки: +// * ОшибкаУтверждения - Булево - Признак, это ошибка проверки утверждения +// * ПроверяемоеЗначение - Произвольный - Фактическое значение +// * ОжидаемоеЗначение - Произвольный - Ожидаемое значение +// * Сообщение - Строка +// * ДополнительныеДанные - Массив из Произвольный +// * Пояснения - Массив из Произвольный +Функция ОписаниеКонтекстаОшибки() + + Описание = Новый Структура("ПроверяемоеЗначение, ОжидаемоеЗначение"); + Описание.Вставить("ОшибкаУтверждения", Ложь); + Описание.Вставить("Сообщение", ""); + Описание.Вставить("ДополнительныеДанные", Новый Массив()); + Описание.Вставить("Пояснения", Новый Массив()); + + //@skip-check constructor-function-return-section + Возврат Описание; + +КонецФункции + +Функция ИмяКонтекстаОшибки() + + Возврат "ДанныеОшибки"; + +КонецФункции + +Функция ИмяКонтекстаДеталиОшибки() + + Возврат "ДеталиОшибки"; + +КонецФункции + +#КонецОбласти + +#Область КонструкторыОписанийОшибки + +Функция ДанныеОшибки(Ошибка, Знач Сообщение, ТипОшибки) + +#Если Сервер Тогда + Детали = КонтекстДеталиОшибки(Истина); +#Иначе + ДеталиСервер = КонтекстДеталиОшибки(Истина); + ДеталиКлиент = КонтекстДеталиОшибки(); + + Если ЗначениеЗаполнено(ДеталиКлиент) И ЗначениеЗаполнено(ДеталиСервер) Тогда + ЮТКоллекции.ДополнитьМассив(ДеталиСервер, ДеталиКлиент); + Детали = ДеталиСервер; + ИначеЕсли ЗначениеЗаполнено(ДеталиКлиент) Тогда + Детали = ДеталиКлиент; + ИначеЕсли ЗначениеЗаполнено(ДеталиСервер) Тогда + Детали = ДеталиСервер; + Иначе + Детали = Неопределено; + КонецЕсли; +#КонецЕсли + + Если ЗначениеЗаполнено(Детали) Тогда + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), Неопределено); + + Детали.Добавить(Сообщение); + Сообщение = СтрСоединить(Детали, Символы.ПС); + КонецЕсли; + + ДанныеОшибки = ЮТФабрикаСлужебный.ОписаниеВозникшейОшибки(ТипОшибки + ": " + Сообщение); + + Если Ошибка <> Неопределено Тогда + ДанныеОшибки.Стек = СтекОшибки(Ошибка); + КонецЕсли; + ДанныеОшибки.ТипОшибки = ТипОшибки; + + ДобавитьСообщенияПользователю(); + ДобавитьЛогТеста(ДанныеОшибки); + + Возврат ДанныеОшибки; + +КонецФункции + +Функция ДанныеОшибкиУтверждений(Ошибка) + + Описание = ИзвлечьТекстОшибки(Ошибка, ПрефиксОшибкиУтверждений()); + + ДанныеОшибки = ЮТФабрикаСлужебный.ОписаниеОшибкиСравнения(Описание); + ДанныеОшибки.Стек = СтекОшибки(Ошибка); + + ДобавитьСообщенияПользователю(); + ДобавитьЛогТеста(ДанныеОшибки); + + СтруктураОшибки = КонтекстОшибки(); + + Если СтруктураОшибки <> Неопределено И СтруктураОшибки.ОшибкаУтверждения Тогда + ДанныеОшибки.ПроверяемоеЗначение = СтруктураОшибки.ПроверяемоеЗначение; + ДанныеОшибки.ОжидаемоеЗначение = СтруктураОшибки.ОжидаемоеЗначение; + КонецЕсли; + + Возврат ДанныеОшибки; + +КонецФункции + +Функция ДанныеОшибкиПропуска(Ошибка) + + Описание = ИзвлечьТекстОшибки(Ошибка, ПрефиксОшибкиПропуска()); + + ДанныеОшибки = ЮТФабрикаСлужебный.ОписаниеОшибкиПропуска(Описание); + + ДобавитьСообщенияПользователю(); + ДобавитьЛогТеста(ДанныеОшибки); + + Возврат ДанныеОшибки; + +КонецФункции + +Процедура ДобавитьЛогТеста(ДанныеОшибки) + + Лог = ЮТЛогИсполненияТестаСлужебный.Записи(); + Если Лог <> Неопределено Тогда + ЮТКоллекции.ДополнитьМассив(ДанныеОшибки.Лог, Лог); + КонецЕсли; + +КонецПроцедуры + +Функция СтекОшибки(Ошибка) + + Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда + Возврат ПодробноеПредставлениеОшибки(Ошибка); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Функция ИзвлечьТекстОшибки(Ошибка, Префикс) + + ДлинаПрефикса = СтрДлина(Префикс); + + Описание = Сред(Ошибка.Описание, ДлинаПрефикса + 1); + Описание = СокрЛП(Описание); + + Если СтрНачинаетсяС(Описание, "<") И СтрЗаканчиваетсяНа(Описание, ">") Тогда + Описание = Сред(Описание, 2, СтрДлина(Описание) - 2); + КонецЕсли; + + Возврат Описание; + +КонецФункции + +#КонецОбласти + +Функция МодулиУтверждений() + + Возврат ЮТКоллекции.ЗначениеВМассиве("ЮТУтверждения"); + +КонецФункции + +Процедура СообщитьОбОшибке(Ошибка, Описание) + + ЮТОбщий.СообщитьПользователю(ПредставлениеОшибки(Описание, Ошибка)); + +КонецПроцедуры + +Функция ИнформациюОбОшибкеВСтроку(Ошибка, НомерПричины = 0) + + ТекстОшибки = ""; + + Если Ошибка = Неопределено Тогда + + ТекстОшибки = "Неизвестная ошибка."; + + ИначеЕсли ТипЗнч(Ошибка) = Тип("Строка") Тогда + + ТекстОшибки = Ошибка; + + ИначеЕсли ЭтоОшибкаСлужебногоМодуля(Ошибка) Тогда + + Если Ошибка.Причина = Неопределено Тогда + + ТекстОшибки = Ошибка.Описание; + + Иначе + + ТекстОшибки = ИнформациюОбОшибкеВСтроку(Ошибка.Причина, НомерПричины); + + КонецЕсли; + + Иначе + + Если НЕ ПустаяСтрока(Ошибка.ИмяМодуля) Тогда + + ТекстОшибки = ТекстОшибки + "{" + + Ошибка.ИмяМодуля + "(" + + Ошибка.НомерСтроки + ")}: "; + + КонецЕсли; + + ТекстОшибки = ТекстОшибки + Ошибка.Описание + ?(ПустаяСтрока(Ошибка.ИсходнаяСтрока), "", " + |" + Ошибка.ИсходнаяСтрока); + + Если Ошибка.Причина <> Неопределено Тогда + + ТекстОшибки = ТекстОшибки + " + | + |ПРИЧИНА №" + Формат(НомерПричины + 1, "ЧГ=0") + " + |" + ИнформациюОбОшибкеВСтроку(Ошибка.Причина, НомерПричины + 1); + + КонецЕсли; + + КонецЕсли; + + Возврат ТекстОшибки; + +КонецФункции + +Функция ЭтоОшибкаСлужебногоМодуля(Ошибка) + + Если НЕ ЗначениеЗаполнено(Ошибка.ИмяМодуля) Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого ИмяМодуля Из МодулиУтверждений() Цикл + Если СтрНайти(Ошибка.ИмяМодуля, ИмяМодуля) > 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Процедура ДобавитьСообщенияПользователю() + +#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Для Каждого Сообщение Из ПолучитьСообщенияПользователю(Истина) Цикл + ЮТест.ДобавитьСообщение(Сообщение.Текст); + КонецЦикла; +#КонецЕсли + +КонецПроцедуры + +Процедура ВызватьОшибкуИсполнения(Знач ИнформацияОбОшибке, ОписаниеПроверки) + + ТекстОшибки = ИнформациюОбОшибкеВСтроку(ИнформацияОбОшибке); + СообщениеОбОшибке = СообщениеОбОшибке(ТекстОшибки, ПрефиксОшибкиВыполнения(), ОписаниеПроверки); + ВызватьИсключение СообщениеОбОшибке; + +КонецПроцедуры + +Функция СообщениеОбОшибке(ТекстОшибки, ПрефиксТипаОшибки, ОписаниеПроверки = Неопределено) + + СообщениеОбОшибке = ДобавитьОписания(ТекстОшибки, ОписаниеПроверки); + + Возврат СтрШаблон("%1 <%2>", ПрефиксТипаОшибки, СообщениеОбОшибке); + +КонецФункции + +Функция ТекстыОшибокВызоваМетода(ИмяМетода) + + Тексты = Новый Структура("МетодНеОбнаружен, МногоПараметров, МалоПараметров"); + + Если ЮТЛокальСлужебный.ЭтоАнглийскаяЛокальПлатформы() Тогда + Тексты.МетодНеОбнаружен = СтрШаблон("Object method not found (%1)", ИмяМетода); + Тексты.МногоПараметров = "Too many actual parameters"; + Тексты.МалоПараметров = "Not enough actual parameters"; + Иначе + Тексты.МетодНеОбнаружен = СтрШаблон("Метод объекта не обнаружен (%1)", ИмяМетода); + Тексты.МногоПараметров = "Слишком много фактических параметров"; + Тексты.МалоПараметров = "Недостаточно фактических параметров"; + КонецЕсли; + + Возврат Тексты; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСлужебныйПовторногоИспользования.xml b/src/cfe/YAXUnit/CommonModules/ЮТСлужебныйПовторногоИспользования.xml new file mode 100644 index 0000000..a925aed --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСлужебныйПовторногоИспользования.xml @@ -0,0 +1,23 @@ + + + + + ЮТСлужебныйПовторногоИспользования + + + ru + Повторного использования + + + + false + true + true + false + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСлужебныйПовторногоИспользования/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТСлужебныйПовторногоИспользования/Ext/Module.bsl new file mode 100644 index 0000000..c6ee8f9 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСлужебныйПовторногоИспользования/Ext/Module.bsl @@ -0,0 +1,94 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция АдресСерверногоКонтекста() Экспорт + + Возврат ЮТКонтекстСлужебныйВызовСервера.АдресСерверногоКонтекста(Ложь); + +КонецФункции + +Функция МетодМодуляСуществует(ИмяМодуля, ИмяМетода) Экспорт + + Возврат ЮТМетодыСлужебный.МетодМодуляСуществует(ИмяМодуля, ИмяМетода, Ложь); + +КонецФункции + +Функция ПараметрыТиповОшибок() Экспорт + + Возврат ЮТФабрикаСлужебный.ПараметрыТиповОшибок(Ложь); + +КонецФункции + +Функция ОписаниеТиповЛюбаяСсылка() Экспорт + + Возврат ЮТОбщийСлужебныйВызовСервера.ОписаниеТиповЛюбаяСсылка(); + +КонецФункции + +Функция ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты) Экспорт + + Возврат ЮТКомпоненты.ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты, Ложь); + +КонецФункции + +Функция СоздатьКомпоненту(ОписаниеКомпоненты) Экспорт + + Возврат ЮТКомпоненты.СоздатьКомпоненту(ОписаниеКомпоненты, Ложь); + +КонецФункции + +Функция ПримитивныеТипы() Экспорт + + Типы = Новый Массив(); + Типы.Добавить(Тип("Строка")); + Типы.Добавить(Тип("Число")); + Типы.Добавить(Тип("Дата")); + Типы.Добавить(Тип("Булево")); + Типы.Добавить(Тип("УникальныйИдентификатор")); + + Возврат Новый ФиксированныйМассив(Типы); + +КонецФункции + +Функция МножителиИнтервалов() Экспорт + + СекундВМинуте = 60; + СекундВЧасе = 60 * СекундВМинуте; + СекундВДне = СекундВЧасе * 24; + + Множители = Новый Структура; + Множители.Вставить("секунда", 1); + Множители.Вставить("секунды", 1); + Множители.Вставить("секунд", 1); + Множители.Вставить("минута", СекундВМинуте); + Множители.Вставить("минуты", СекундВМинуте); + Множители.Вставить("минут", СекундВМинуте); + Множители.Вставить("час", СекундВЧасе); + Множители.Вставить("часа", СекундВЧасе); + Множители.Вставить("часов", СекундВЧасе); + Множители.Вставить("день", СекундВДне); + Множители.Вставить("дня", СекундВДне); + Множители.Вставить("дней", СекундВДне); + + Возврат Множители; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСобытияСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТСобытияСлужебный.xml new file mode 100644 index 0000000..c4d2b0d --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСобытияСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТСобытияСлужебный + + + ru + Генератор событий + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСобытияСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТСобытияСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..bb506ba --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСобытияСлужебный/Ext/Module.bsl @@ -0,0 +1,364 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура Инициализация(ПараметрыЗапуска) Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(ПараметрыЗапуска); + ВызватьОбработчикРасширения("Инициализация", Параметры); + +КонецПроцедуры + +#Область СобытияИсполненияТестов + +// Обработчик события "ПередВсемиТестамиМодуля" +// +// Параметры: +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +Процедура ПередВсемиТестамиМодуля(ТестовыйМодуль) Экспорт + + УстановитьКонтекстИсполнения(ТестовыйМодуль); + ЮТКонтекстСлужебный.УстановитьКонтекстМодуля(); + + ОписаниеСобытия = ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль); + ВызватьОбработкуСобытия("ПередВсемиТестами", ОписаниеСобытия); + +КонецПроцедуры + +// Обработчик события "ПередТестовымНабором" +// +// Параметры: +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// Набор - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +Процедура ПередТестовымНабором(ТестовыйМодуль, Набор) Экспорт + + УстановитьКонтекстИсполнения(ТестовыйМодуль, Набор); + ЮТКонтекстСлужебный.УстановитьКонтекстНабораТестов(); + + ОписаниеСобытия = ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор); + ВызватьОбработкуСобытия("ПередТестовымНабором", ОписаниеСобытия); + +КонецПроцедуры + +// Обработчик события "ПередКаждымТестом" +// +// Параметры: +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// Набор - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// Тест - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +Процедура ПередКаждымТестом(ТестовыйМодуль, Набор, Тест) Экспорт + + // Установка контекста исполнения вызывается в см. ЮТИсполнительСлужебныйКлиентСервер.ПередКаждымТестом + ЮТКонтекстСлужебный.УстановитьКонтекстТеста(); + + ОписаниеСобытия = ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор, Тест); + + #Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + ПолучитьСообщенияПользователю(Истина); + #КонецЕсли + + ВызватьОбработкуСобытий(ЮТКоллекции.ЗначениеВМассиве("ПередКаждымТестом", "ПередТестом"), ОписаниеСобытия); + +КонецПроцедуры + +// Обработчик события "ПослеКаждогоТеста" +// +// Параметры: +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// Набор - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// Тест - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +Процедура ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест) Экспорт + + ОписаниеСобытия = ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор, Тест); + + ВызватьОбработкуСобытий(ЮТКоллекции.ЗначениеВМассиве("ПослеТеста", "ПослеКаждогоТеста"), ОписаниеСобытия); + + УстановитьКонтекстИсполнения(ТестовыйМодуль, Набор); + +КонецПроцедуры + +// Обработчик события "ПослеТестовогоНабора" +// +// Параметры: +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// Набор - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +Процедура ПослеТестовогоНабора(ТестовыйМодуль, Набор) Экспорт + + ОписаниеСобытия = ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор); + ВызватьОбработкуСобытия("ПослеТестовогоНабора", ОписаниеСобытия); + + УстановитьКонтекстИсполнения(ТестовыйМодуль); + +КонецПроцедуры + +// Обработчик события "ПослеВсехТестовМодуля" +// +// Параметры: +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +Процедура ПослеВсехТестовМодуля(ТестовыйМодуль) Экспорт + + ОписаниеСобытия = ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль); + ВызватьОбработкуСобытия("ПослеВсехТестов", ОписаниеСобытия); + + УстановитьКонтекстИсполнения(); + +КонецПроцедуры + +// Перед выполнением тестов. +// +// Параметры: +// ИсполняемыеМодули - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +Процедура ПередВыполнениемТестов(ИсполняемыеМодули) Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(ИсполняемыеМодули); + ВызватьОбработчикРасширения("ПередВыполнениемТестов", Параметры); + +КонецПроцедуры + +// После выполнения тестов. +// +// Параметры: +// РезультатТестирования - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +Процедура ПослеВыполненияТестов(РезультатТестирования) Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(РезультатТестирования); + ВызватьОбработчикРасширения("ПослеВыполненияТестов", Параметры); + +КонецПроцедуры + +#КонецОбласти + +#Область СобытияЗагрузкиТестов + +// Обработка события "ПередЧтениеСценариев" +Процедура ПередЧтениеСценариев() Экспорт + + Параметры = Новый Массив(); + ВызватьОбработчикРасширения("ПередЧтениеСценариев", Параметры); + +КонецПроцедуры + +// Обработчик события "ПередЧтениемСценариевМодуля" +// Позволяет настроить базовые параметры перед чтением настроек тестов модуля +// Параметры: +// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(МетаданныеМодуля); + ВызватьОбработчикРасширения("ПередЧтениемСценариевМодуля", Параметры); + +КонецПроцедуры + +// После чтения сценариев модуля. +// Позволяет настроить/обработать параметры загруженных настроек тестов модуля +// Параметры: +// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// ИсполняемыеСценарии - см. ЮТТесты.СценарииМодуля +Процедура ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(МетаданныеМодуля, ИсполняемыеСценарии); + ВызватьОбработчикРасширения("ПослеЧтенияСценариевМодуля", Параметры); + +КонецПроцедуры + +// Обработка события "ПослеЧтенияСценариев" +// Параметры: +// Сценарии - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей, которые содержат информацию о запускаемых тестах +Процедура ПослеЧтенияСценариев(Сценарии) Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(Сценарии); + ВызватьОбработчикРасширения("ПослеЧтенияСценариев", Параметры); + +КонецПроцедуры + +// Обработка события "ПослеФормированияИсполняемыхНаборовТестов" +// Параметры: +// ИсполняемыеТестовыеМодули - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля - Набор исполняемых наборов +Процедура ПослеФормированияИсполняемыхНаборовТестов(ИсполняемыеТестовыеМодули) Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(ИсполняемыеТестовыеМодули); + ВызватьОбработчикРасширения("ПослеФормированияИсполняемыхНаборовТестов", Параметры); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура УстановитьКонтекстИсполнения(ТестовыйМодуль = Неопределено, Набор = Неопределено, Тест = Неопределено) Экспорт + + Уровни = ЮТФабрика.УровниИсполнения(); + КонтекстИсполнения = ЮТКонтекстСлужебный.КонтекстИсполнения(); + + КонтекстИсполнения.Модуль = ТестовыйМодуль; + КонтекстИсполнения.Набор = Набор; + КонтекстИсполнения.Тест = Тест; + + Если Тест <> Неопределено Тогда + КонтекстИсполнения.Уровень = Уровни.Тест; + ИначеЕсли Набор <> Неопределено Тогда + КонтекстИсполнения.Уровень = Уровни.НаборТестов; + ИначеЕсли ТестовыйМодуль <> Неопределено Тогда + КонтекстИсполнения.Уровень = Уровни.Модуль; + Иначе + КонтекстИсполнения.Уровень = Неопределено; + КонецЕсли; + +КонецПроцедуры + +Процедура ВызватьОбработкуСобытий(События, ОписаниеСобытия) + + Для ы = 0 По События.ВГраница() Цикл + ИмяСобытия = События[ы]; + ПропуститьОбработчикТестовогоМодуля = (ы > 0 И ОбработчикСобытияПереопределен(ИмяСобытия)); + Если ПропуститьОбработчикТестовогоМодуля Тогда + + Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеСобытия); + Ошибки = ВызватьОбработчикРасширения(ИмяСобытия, Параметры); + ЗарегистрироватьОшибкиСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибки); + + Иначе + + ВызватьОбработкуСобытия(ИмяСобытия, ОписаниеСобытия); + + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ВызватьОбработкуСобытия(ИмяСобытия, ОписаниеСобытия) + + Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеСобытия); + + Если ЭтоСобытиеПеред(ИмяСобытия) Тогда + Ошибки = ВызватьОбработчикРасширения(ИмяСобытия, Параметры); + ВызватьОбработчикТестовогоМодуля(ИмяСобытия, ОписаниеСобытия); + Иначе + ВызватьОбработчикТестовогоМодуля(ИмяСобытия, ОписаниеСобытия); + Ошибки = ВызватьОбработчикРасширения(ИмяСобытия, Параметры); + КонецЕсли; + + ЗарегистрироватьОшибкиСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибки); + +КонецПроцедуры + +Функция ВызватьОбработчикРасширения(ИмяСобытия, ПараметрыСобытия) + + Ошибки = Новый Массив(); + + Для Каждого ИмяМодуля Из ЮТРасширенияСлужебный.ОбработчикиСобытий() Цикл + + Если ЮТМетодыСлужебный.МетодМодуляСуществует(ИмяМодуля, ИмяСобытия) Тогда + ПолноеИмяМетода = СтрШаблон("%1.%2", ИмяМодуля, ИмяСобытия); + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода, ПараметрыСобытия); + + Если Ошибка <> Неопределено Тогда + Ошибки.Добавить(Ошибка); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Возврат Ошибки; + +КонецФункции + +// Вызвать обработчик модуля. +// +// Параметры: +// ИмяСобытия - Строка - Имя вызываемого метода обработки события +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +// +Процедура ВызватьОбработчикТестовогоМодуля(Знач ИмяСобытия, ОписаниеСобытия) + + ОбработчикСобытияПереопределен = ОбработчикСобытияПереопределен(ИмяСобытия); + Если ОбработчикСобытияПереопределен Тогда + ИмяСобытия = ПереопределенноеИмяСобытия(ИмяСобытия); + КонецЕсли; + + ИмяМодуля = ОписаниеСобытия.Модуль.МетаданныеМодуля.Имя; + + ЧастиКоманды = СтрРазделить(ИмяСобытия, "."); + Если ЧастиКоманды.Количество() = 2 Тогда + ИмяМодуля = ЧастиКоманды[0]; + ИмяСобытия = ЧастиКоманды[1]; + КонецЕсли; + + Ошибки = Новый Массив(); + Команда = СтрШаблон("%1.%2()", ИмяМодуля, ИмяСобытия); + Если ЮТМетодыСлужебный.МетодМодуляСуществует(ИмяМодуля, ИмяСобытия) Тогда + + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(Команда); + + Если Ошибка <> Неопределено Тогда + Ошибки.Добавить(Ошибка); + КонецЕсли; + + ИначеЕсли ОбработчикСобытияПереопределен Тогда + + ТекстИсключения = СтрШаблон("Не найден обработчик тестового модуля %1", Команда); + ВызватьИсключение ТекстИсключения; + + КонецЕсли; + + ЗарегистрироватьОшибкиСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибки); + +КонецПроцедуры + +Процедура ЗарегистрироватьОшибкиСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибки) + + Для Каждого Ошибка Из Ошибки Цикл + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка); + КонецЦикла; + +КонецПроцедуры + +Функция ОбработчикСобытияПереопределен(ИмяСобытия) + + Возврат ЗначениеЗаполнено(ПереопределенноеИмяСобытия(ИмяСобытия)); + +КонецФункции + +Функция ПереопределенноеИмяСобытия(ИмяСобытия) + + Если ЭтоСобытиеПеред(ИмяСобытия) Тогда + Возврат ЮТНастройкиВыполнения.Перед(); + ИначеЕсли ЭтоСобытиеПосле(ИмяСобытия) Тогда + Возврат ЮТНастройкиВыполнения.После(); + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + +Функция ЭтоСобытиеПеред(ИмяСобытия) + + Возврат СтрНачинаетсяС(ИмяСобытия, "Перед"); + +КонецФункции + +Функция ЭтоСобытиеПосле(ИмяСобытия) + + Возврат СтрНачинаетсяС(ИмяСобытия, "После"); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСообщенияСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТСообщенияСлужебный.xml new file mode 100644 index 0000000..80d0987 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСообщенияСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТСообщенияСлужебный + + + ru + Сообщения служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСообщенияСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТСообщенияСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..0627502 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСообщенияСлужебный/Ext/Module.bsl @@ -0,0 +1,127 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Форматированный текст ошибки утверждения. +// +// Параметры: +// ОписаниеПроверки - см. ЮТФабрикаСлужебный.ОписаниеПроверки +// ТекстОжидания - Строка - Описание ожидания +// ОбъектПроверки - Строка - Объект проверки +// +// Возвращаемое значение: +// Строка - Форматированный текст ошибки утверждения +Функция ФорматированныйТекстОшибкиУтверждения(Знач ОписаниеПроверки, ТекстОжидания, ОбъектПроверки) Экспорт + + Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.ИмяСвойства) Тогда + ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ОписаниеПроверки.ОбъектПроверки.ИмяСвойства); + Иначе + ВставкаСвойство = ""; + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.Представление) Тогда + ПредставлениеЗначения = ОписаниеПроверки.ОбъектПроверки.Представление; + Иначе + ПредставлениеЗначения = ПредставлениеЗначения(ОписаниеПроверки.ОбъектПроверки.Значение); + КонецЕсли; + + // Заголовок сообщения + ТекстСообщения = ""; + // Тело сообщения + ТекстСообщения = СтрШаблон("ожидали, что %1 %2%3 %4, но это не так.", + ОбъектПроверки, + ПредставлениеЗначения, + ВставкаСвойство, + ТекстОжидания); + + Возврат ТекстСообщения; + +КонецФункции + +// Сообщение об ошибке события. +// +// Параметры: +// ИмяСобытия - Строка +// Ошибка - Строка - Текст ошибки +// - ИнформацияОбОшибке - ошибка выполнения +// +// Возвращаемое значение: +// Строка - Сообщение об ошибке события +Функция СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка) Экспорт + + ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().ОшибкаОбработкиСобытия; + Возврат СтрШаблон("%1 '%2': %3", ТипОшибки, ИмяСобытия, КраткоеСообщениеОшибки(Ошибка)); + +КонецФункции + +Функция КраткоеСообщениеОшибки(Ошибка) Экспорт + + Если ЭтоИнформацияОбОшибке(Ошибка) Тогда + Возврат КраткоеПредставлениеОшибки(Ошибка); + Иначе + Возврат Ошибка; + КонецЕсли; + +КонецФункции + +// Формирует строковое представление значения. Для значений, преобразуемых в пустые строки, добавляет описание типа. +// +// Параметры: +// Значение - Произвольный - Значение +// +// Возвращаемое значение: +// Строка - Представление значения +Функция ПредставлениеЗначения(Значение) Экспорт + ЗначениеСтрокой = Строка(Значение); + ТипЗначения = ТипЗнч(Значение); + Если ПустаяСтрока(ЗначениеСтрокой) Тогда + Тип = Строка(ТипЗначения); + Возврат СтрШаблон("`<Пустое значение, Тип: %1>`", Тип); + Иначе + Возврат СтрШаблон("`%1`", ЗначениеСтрокой); + КонецЕсли; +КонецФункции + +// Производит замену в переданном шаблоне параметра на переданное значение. +// +// Параметры: +// ШаблонСтроки - Строка - Шаблон строки, в которую должен быть подставлен параметр. +// ЗначениеПараметра - Произвольный - Значение параметра, подставляемое в шаблон. +// +// Возвращаемое значение: +// Строка - Если шаблон строки содержит в тексте параметр `%1`, он будет заменен переданным значением, +// в противном случае, будет возвращен текст шаблона без изменений. +// +Функция ПодставитьПредставлениеЗначенияВШаблон(ШаблонСтроки, ЗначениеПараметра) Экспорт + + Возврат СтрЗаменить(ШаблонСтроки, "%1", ПредставлениеЗначения(ЗначениеПараметра)); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоИнформацияОбОшибке(Ошибка) Экспорт + + Возврат ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке"); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйВызовСервера.xml new file mode 100644 index 0000000..25ad10c --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТСравнениеСлужебныйВызовСервера + + + ru + Сравнение сервер + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..e1d2697 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,119 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ТаблицыРавны(Знач Данные1, Знач Данные2) Экспорт + + Если Данные1.Количество() <> Данные2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Если Данные1.Колонки.Количество() <> Данные2.Колонки.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого Колонка Из Данные1.Колонки Цикл + Если Данные2.Колонки.Найти(Колонка.Имя) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Индекс = Данные1.Количество() - 1; + Пока Индекс >= 0 Цикл + Если НЕ ЮТСравнениеСлужебныйКлиентСервер.ЗначенияРавны(Данные1[Индекс][Колонка.Имя], Данные2[Индекс][Колонка.Имя]) Тогда + Возврат Ложь; + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ТабличныеДокументыРавны(Знач ТабличныйДокумент1, Знач ТабличныйДокумент2) Экспорт + + Данные1 = ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент1); + Данные2 = ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент2); + + Возврат ТаблицыРавны(Данные1, Данные2); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// https://github.com/vanessa-opensource/add +// портирован из Functest +Функция ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент, УчитыватьТолькоВидимыеКолонки = Ложь, УчитыватьТолькоВидимыеСтроки = Ложь) + + ТипТабличногоДокумента = ТипЗнч(ТабличныйДокумент); + Если ТипТабличногоДокумента <> Тип("ТабличныйДокумент") И ТипТабличногоДокумента <> Тип("ПолеТабличногоДокумента") Тогда + ВызватьИсключение "ПолучитьТаблицуЗначенийИзТабличногоДокумента: Требуется тип ТабличныйДокумент или ПолеТабличногоДокумента"; + КонецЕсли; + + Если УчитыватьТолькоВидимыеКолонки И УчитыватьТолькоВидимыеСтроки Тогда + ЮТОбщийСлужебныйВызовСервера.ТаблицаИзТабличногоДокумента(ТипТабличногоДокумента); + КонецЕсли; + + НомерПоследнейКолонки = ТабличныйДокумент.ШиринаТаблицы; + НомерПоследнейСтроки = ТабличныйДокумент.ВысотаТаблицы; + + НоваяТаблицаЗначений = Новый ТаблицаЗначений; + Колонки = НоваяТаблицаЗначений.Колонки; + ТипСтрока = Новый ОписаниеТипов("Строка"); + + // TODO При определении видимости не учитывается наличие нескольких форматов строк, сейчас видимоcть колонки определяется по формату первой строки + УчитываемыеКолонки = Новый Массив; + Для НомерКолонки = 1 По НомерПоследнейКолонки Цикл + ОбластьКолонки = ТабличныйДокумент.Область(0, НомерКолонки, 1, НомерКолонки); + + УчитыватьКолонку = Не УчитыватьТолькоВидимыеКолонки Или ОбластьКолонки.Видимость; + Если УчитыватьКолонку Тогда + УчитываемыеКолонки.Добавить(НомерКолонки); + ШиринаКолонки = ОбластьКолонки.ШиринаКолонки; + Если ШиринаКолонки <= 1 Тогда + ШиринаКолонки = 1; + КонецЕсли; + ИмяКолонки = "К" + Формат(Колонки.Количество() + 1, "ЧН=; ЧГ=0"); + Колонки.Добавить(ИмяКолонки, ТипСтрока, ИмяКолонки, ШиринаКолонки); + КонецЕсли; + КонецЦикла; + + ГраницаКолонок = УчитываемыеКолонки.ВГраница(); + Для НомерСтроки = 1 По НомерПоследнейСтроки Цикл + + Если УчитыватьТолькоВидимыеСтроки И Не ТабличныйДокумент.Область(НомерСтроки, , НомерСтроки).Видимость Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = НоваяТаблицаЗначений.Добавить(); + + Для Индекс = 0 По ГраницаКолонок Цикл + НомерКолонки = УчитываемыеКолонки[Индекс]; + Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + НоваяСтрока[Индекс] = Область.Текст; + КонецЦикла; + КонецЦикла; + + Возврат НоваяТаблицаЗначений; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйКлиентСервер.xml b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйКлиентСервер.xml new file mode 100644 index 0000000..491ffe2 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ЮТСравнениеСлужебныйКлиентСервер + + + ru + Сравнение клиент сервер + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..ff4999b --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Ext/Module.bsl @@ -0,0 +1,657 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Сравнивает данные сложной структуры с учетом вложенности. +// +// Параметры: +// Данные1 - Структура +// - ФиксированнаяСтруктура +// - Соответствие из Произвольный +// - ФиксированноеСоответствие из Произвольный +// - Массив из Произвольный +// - ФиксированныйМассив из Произвольный +// - Строка +// - Число +// - Булево +// - ТаблицаЗначений +// - ХранилищеЗначения +// Данные2 - Произвольный - те же типы, что и для параметра Данные1. +// ПараметрыСравнения - Структура - Параметры проверки: +// * ГлубокийАнализ - Булево - Использовать сериализацию и прочие алгоритмы сравнения +// Возвращаемое значение: +// Булево - Истина, если совпадают. +// +Функция ЗначенияРавны(Данные1, Данные2, ПараметрыСравнения = Неопределено) Экспорт + + ТипЗначения = ТипЗнч(Данные1); + Если ТипЗначения <> ТипЗнч(Данные2) Тогда + Возврат Ложь; + КонецЕсли; + + Если Данные1 = Данные2 Тогда + Возврат Истина; + КонецЕсли; + + Результат = Неопределено; + + Если ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗначения) Тогда + + Результат = СтруктурыРавны(Данные1, Данные2); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипЗначения) Тогда + + Результат = СоответствияРавны(Данные1, Данные2); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассива(ТипЗначения) Тогда + + Результат = МассивыРавны(Данные1, Данные2); + + ИначеЕсли ТипЗначения = Тип("ТабличныйДокумент") Тогда + + Результат = ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(Данные1, Данные2); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоПримитивныйТип(ТипЗначения) ИЛИ ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения) Тогда + // Возвращаем ложь, так как для этих типов должно сработать обычное равенство + Результат = Ложь; + КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off + +#Если Сервер Тогда + Если ТипЗначения = Тип("ТаблицаЗначений") Тогда + + Результат = ЮТСравнениеСлужебныйВызовСервера.ТаблицыРавны(Данные1, Данные2); + + ИначеЕсли ТипЗначения = Тип("ХранилищеЗначения") Тогда + + Результат = ЗначенияРавны(Данные1.Получить(), Данные2.Получить()); + + КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off +#КонецЕсли + + Если Результат = Неопределено И ПараметрыСравнения <> Неопределено И ЮТКоллекции.ЗначениеСтруктуры(ПараметрыСравнения, "ГлубокийАнализ", Ложь) Тогда + Результат = СравнитьПоЗначению(Данные1, Данные2); + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = Ложь; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, Больше = Ложь, Меньше = Ложь, Равно = Ложь) Экспорт + + Результат = Ложь; + + Если Больше Тогда + Результат = ПроверяемоеЗначение > ОжидаемоеЗначение; + КонецЕсли; + + Если Меньше Тогда + Результат = Результат ИЛИ ПроверяемоеЗначение < ОжидаемоеЗначение; + КонецЕсли; + + Если Равно Тогда + Результат = Результат ИЛИ ПроверяемоеЗначение = ОжидаемоеЗначение; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Параметры проверки. +// +// Параметры: +// ВидСравнения - Строка +// ПроверяемоеЗначение - Произвольный +// ИмяСвойства - Строка +// ОжидаемоеЗначение - Произвольный +// Реверс - Булево +// +// Возвращаемое значение: +// Структура - Параметры проверки: +// * ОбъектПроверки - см. ЮТФабрикаСлужебный.ОписаниеПроверяемогоЗначения +// * ПрефиксОшибки - Строка, Неопределено - +// * ОписаниеПроверки - Строка, Неопределено - +// * ВидСравнения - Строка +// * ОжидаемоеЗначение - Произвольный, Неопределено - +// * Реверс - Булево +// * ТекстПроверяемоеЗначение - Строка +Функция ПараметрыПроверки(ВидСравнения, ПроверяемоеЗначение, ИмяСвойства, ОжидаемоеЗначение, Реверс = Ложь) Экспорт + + Параметры = ЮТФабрикаСлужебный.ОписаниеПроверки(ПроверяемоеЗначение); + Параметры.ОбъектПроверки.ИмяСвойства = ИмяСвойства; + Параметры.Вставить("ВидСравнения", ВидСравнения); + Параметры.Вставить("ОжидаемоеЗначение", ОжидаемоеЗначение); + Параметры.Вставить("Реверс", Реверс); + + Параметры.Вставить("ТекстПроверяемоеЗначение", "проверяемое значение"); + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Сравнения + +Функция СтруктурыРавны(Данные1, Данные2) + + Если Данные1.Количество() <> Данные2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого КлючИЗначение Из Данные1 Цикл + СтароеЗначение = Неопределено; + + Если НЕ Данные2.Свойство(КлючИЗначение.Ключ, СтароеЗначение) + ИЛИ НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция СоответствияРавны(Данные1, Данные2) + + Если Данные1.Количество() <> Данные2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + КлючиНовогоСоответствия = Новый Соответствие; + + Для Каждого КлючИЗначение Из Данные1 Цикл + КлючиНовогоСоответствия.Вставить(КлючИЗначение.Ключ, Истина); + СтароеЗначение = Данные2.Получить(КлючИЗначение.Ключ); + + Если НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Для Каждого КлючИЗначение Из Данные2 Цикл + Если КлючиНовогоСоответствия[КлючИЗначение.Ключ] = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция МассивыРавны(Данные1, Данные2) + + Если Данные1.Количество() <> Данные2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Индекс = 0 По Данные1.ВГраница() Цикл + Если НЕ ЗначенияРавны(Данные1[Индекс], Данные2[Индекс]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ПроверитьТипЗначения(РезультатПроверки, + Значение, + Знач ОжидаемыйТип, + Описание = "ожидаемого значения", + ЕслиУстановлен = Ложь, + Суффикс = Неопределено) + + Если ЕслиУстановлен И Значение = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип); + + Если НЕ Соответствует Тогда + ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4", + Описание, + ТипЗнч(Значение), + ОжидаемыйТип, + Суффикс); + ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки); + КонецЕсли; + + Возврат Соответствует; + +КонецФункции + +Функция СравнитьПоЗначению(Значение1, Значение2) + + Попытка + СтрокаСравнения1 = ЮТОбщий.СтрокаJSON(Значение1); + СтрокаСравнения2 = ЮТОбщий.СтрокаJSON(Значение2); + Возврат СтрокаСравнения1 = СтрокаСравнения2; + Исключение + Возврат Ложь; + КонецПопытки; + +КонецФункции + +#КонецОбласти + +Функция ЗначениеИмеетСвойство(Значение, Свойство) + + Результат = Ложь; + ТипЗначения = ТипЗнч(Значение); + + Если ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗначения) Тогда + + Результат = Значение.Свойство(Свойство); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипЗначения) Тогда + + Для Каждого КлючЗначение Из Значение Цикл + + Если КлючЗначение.Ключ = Свойство И ТипЗнч(КлючЗначение.Ключ) = ТипЗнч(Свойство) Тогда + Результат = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(Свойство) = Тип("Число") Тогда + + Если Свойство < 0 Тогда + Свойство = Значение.Количество() + Свойство; + КонецЕсли; + Результат = Свойство >= 0 И Значение.Количество() > Свойство; + + Иначе + + Результат = ЮТОбщий.ПеременнаяСодержитСвойство(Значение, Свойство); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Параметры проверки. +// +// Параметры: +// ПараметрыПроверки - см. ПараметрыПроверки +// +// Возвращаемое значение: +// Произвольный +Функция ПроверяемоеЗначение(ПараметрыПроверки) + + Если ПараметрыПроверки.ОбъектПроверки.ИмяСвойства <> Неопределено Тогда + Значение = ЮТОбщий.ЗначениеСвойства(ПараметрыПроверки.ОбъектПроверки.Значение, ПараметрыПроверки.ОбъектПроверки.ИмяСвойства); + Иначе + Значение = ПараметрыПроверки.ОбъектПроверки.Значение; + КонецЕсли; + + Возврат Значение; + +КонецФункции + +Функция ДлинаЗначения(ПроверяемоеЗначение) + + ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); + + Если ТипПроверяемогоЗначения = Тип("Строка") ИЛИ ТипПроверяемогоЗначения = Тип("ФорматированнаяСтрока") Тогда + + ФактическаяДлина = СтрДлина(ПроверяемоеЗначение); + + Иначе + + Попытка + ФактическаяДлина = ПроверяемоеЗначение.Количество(); + Исключение + ФактическаяДлина = Неопределено; + КонецПопытки; + + КонецЕсли; + + Возврат ФактическаяДлина; + +КонецФункции + +Функция СоответствуетШаблону(ПроверяемаяСтрока, РегулярноеВыражение) + + РегулярныеВыражения = ЮТКомпоненты.РегулярныеВыражения(); + + Попытка + Результат = РегулярныеВыражения.Совпадает(Строка(ПроверяемаяСтрока), РегулярноеВыражение); + Исключение + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка проверки строки по шаблону " + РегулярноеВыражение); + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(РегулярныеВыражения.ОписаниеОшибки); + ВызватьИсключение; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +Функция НайтиЗначение(ПроверяемоеЗначение, ОжидаемоеЗначение) + + ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); + + Если ТипПроверяемогоЗначения = Тип("Строка") Или ТипПроверяемогоЗначения = Тип("ФорматированнаяСтрока") Тогда + + ИскомоеЗначениеНайдено = СтрНайти(ПроверяемоеЗначение, ОжидаемоеЗначение) > 0; + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассива(ТипПроверяемогоЗначения) Тогда + + Индекс = ПроверяемоеЗначение.Найти(ОжидаемоеЗначение); + ИскомоеЗначениеНайдено = Индекс <> Неопределено; + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоКлючЗначение(ТипПроверяемогоЗначения) Тогда + + ИскомоеЗначениеНайдено = Ложь; + ТипОжидаемогоЗначения = ТипЗнч(ОжидаемоеЗначение); + + Для Каждого КлючЗначение Из ПроверяемоеЗначение Цикл + Если КлючЗначение.Значение = ОжидаемоеЗначение И ТипЗнч(КлючЗначение.Значение) = ТипОжидаемогоЗначения Тогда + ИскомоеЗначениеНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + ИначеЕсли ТипПроверяемогоЗначения = Тип("СписокЗначений") Тогда + + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ОжидаемоеЗначение) <> Неопределено; + + ИначеЕсли ПроверяемоеЗначение <> Неопределено И ЮТМетодыСлужебный.МетодОбъектаСуществует(ПроверяемоеЗначение, "Найти") Тогда + + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ОжидаемоеЗначение) <> Неопределено; + + Иначе + + ИскомоеЗначениеНайдено = Неопределено; // Обрабатывается вызывающим методом + + КонецЕсли; + + Возврат ИскомоеЗначениеНайдено; + +КонецФункции + +#Область РеализацияПредикатор + +Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения) Экспорт + + Попытка + ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения); + Исключение + ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(СтатусПроверки, ИнформацияОбОшибке()); + КонецПопытки; + +КонецПроцедуры + +// Вычислить выражение предиката. +// +// Параметры: +// Значение - Произвольный - Значение +// Выражение - см. ЮТФабрика.ВыражениеПредиката +// СтатусПроверки - см. ЮТФабрикаСлужебный.ОписаниеРезультатаПроверки +// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке +// ПараметрыСравнения - Неопределено +// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры +Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения) + +// BSLLS:CognitiveComplexity-off + ВидыСравнения = ЮТПредикаты.Выражения(); + + ПараметрыПроверки = ПараметрыПроверки(Выражение.ВидСравнения, Значение, Выражение.ИмяРеквизита, Выражение.Значение, Ложь); + + ПараметрыПроверки.ОписаниеПроверки = ПараметрыСообщенийОбОшибке.ОписаниеПроверки; + ПараметрыПроверки.ТекстПроверяемоеЗначение = ПараметрыСообщенийОбОшибке.ТекстПроверяемоеЗначение; + ПараметрыПроверки.ОбъектПроверки.Представление = ПараметрыСообщенийОбОшибке.ПредставлениеПроверяемогоЗначения; + + Если СтрНачинаетсяС(Выражение.ВидСравнения, "Не") И ВидыСравнения.Свойство(Сред(Выражение.ВидСравнения, 3)) Тогда + ПараметрыПроверки.Реверс = Истина; + ВидСравненияВыражения = Сред(Выражение.ВидСравнения, 3); + Иначе + ВидСравненияВыражения = Выражение.ВидСравнения; + КонецЕсли; + + Результат = Неопределено; + + ОжидаемоеЗначение = Выражение.Значение; + ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки); + + Если ВидСравненияВыражения = ВидыСравнения.Равно Тогда + + Результат = ЗначенияРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Заполнено Тогда + + Результат = ЗначениеЗаполнено(ПроверяемоеЗначение); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Больше Тогда + + Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, Истина); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.БольшеРавно Тогда + + Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, Истина, , Истина); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Меньше Тогда + + Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, , Истина); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.МеньшеРавно Тогда + + Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, , Истина, Истина); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетТип Тогда + + ПроверитьТипПараметра(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетСвойство Тогда + + Результат = ПроверитьНаличиеСвойства(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетДлину Тогда + + ПроверитьДлину(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Содержит Тогда + + Результат = ПроверитьСодержит(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.СодержитСтрокуПоШаблону Тогда + + Результат = ПроверитьСоответствуетШаблону(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки); + + ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ВСписке Тогда + + Результат = ПроверитьВСписке(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки); + + Иначе + + ВызватьИсключение СтрШаблон("Неизвестное выражение предиката `%1`", Выражение.ВидСравнения); + + КонецЕсли; +// BSLLS:CognitiveComplexity-on + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПараметрыПроверки.Реверс Тогда + Результат = НЕ Результат; + КонецЕсли; + + ОбработатьРезультатСравнения(Результат, СтатусПроверки, ПараметрыПроверки, ПроверяемоеЗначение); + +КонецПроцедуры + +Процедура ОбработатьРезультатСравнения(Результат, РезультатПроверки, ПараметрыПроверки, ФактическоеЗначение) + + Если Результат Тогда + Возврат; + КонецЕсли; + + ШаблонСообщения = ЮТПредикатыСлужебныйКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения); + Сообщение = ЮТСообщенияСлужебный.ПодставитьПредставлениеЗначенияВШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение); + + ТекстОшибки = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение); + ТекстОшибки = ЮТРегистрацияОшибокСлужебный.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки); + + ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки, + ТекстОшибки, + ФактическоеЗначение, + ПараметрыПроверки.ОжидаемоеЗначение); + +КонецПроцедуры + +Процедура ПроверитьТипПараметра(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки) + + Если НЕ ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, Новый ОписаниеТипов("ОписаниеТипов, Тип, Строка")) Тогда + Возврат; + КонецЕсли; + + Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение); + + Если ПараметрыПроверки.Реверс Тогда + Результат = НЕ Результат; + КонецЕсли; + + ОбработатьРезультатСравнения(Результат, РезультатПроверки, ПараметрыПроверки, ТипЗнч(ПроверяемоеЗначение)); + +КонецПроцедуры + +Функция ПроверитьНаличиеСвойства(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение) + + Значение = ПроверяемоеЗначение; + + ПутьКСвойству = ЮТОбщий.ЧастиПути(ОжидаемоеЗначение); + + ПройденныйПуть = Новый Массив(); + + Для Каждого Часть Из ПутьКСвойству Цикл + + ПройденныйПуть.Добавить(Часть); + + Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда +#Если ВебКлиент Или ТонкийКлиент Тогда + Значение = ЮТОбщийСлужебныйВызовСервера.ИзХранилищаЗначений(Значение); +#Иначе + Значение = Значение.Получить(); +#КонецЕсли + КонецЕсли; + + Попытка + ЕстьСвойство = ЗначениеИмеетСвойство(Значение, Часть); + Исключение + ЕстьСвойство = Ложь; + КонецПопытки; + + Если ЕстьСвойство Тогда + Значение = Значение[Часть]; + Иначе + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат ЕстьСвойство; + +КонецФункции + +Процедура ПроверитьДлину(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки) + + Если НЕ ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Число") Тогда + Возврат; + КонецЕсли; + + ФактическаяДлина = ДлинаЗначения(ПроверяемоеЗначение); + + Если ФактическаяДлина = Неопределено Тогда + ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение)); + ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки); + Возврат; + КонецЕсли; + + Результат = ФактическаяДлина = ПараметрыПроверки.ОжидаемоеЗначение; + + Если ПараметрыПроверки.Реверс Тогда + Результат = НЕ Результат; + КонецЕсли; + + ОбработатьРезультатСравнения(Результат, РезультатПроверки, ПараметрыПроверки, ФактическаяДлина); + +КонецПроцедуры + +Функция ПроверитьСодержит(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки) + + Результат = НайтиЗначение(ПроверяемоеЗначение, ОжидаемоеЗначение); + + Если Результат = Неопределено Тогда + ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение)); + ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПроверитьСоответствуетШаблону(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки) + + ТипыПараметровСоответствуют = ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Строка") + И ПроверитьТипЗначения(РезультатПроверки, ПроверяемоеЗначение, "Строка, ФорматированнаяСтрока", "проверяемого значения"); + + Если Не ТипыПараметровСоответствуют Тогда + Возврат Неопределено; + КонецЕсли; + + СоответствуетШаблону = СоответствуетШаблону(ПроверяемоеЗначение, ОжидаемоеЗначение); + + Если СоответствуетШаблону = Неопределено Тогда + ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение)); + ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки); + КонецЕсли; + + Возврат СоответствуетШаблону; + +КонецФункции + +Функция ПроверитьВСписке(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки) + + ТипыПараметровСоответствуют = ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Массив, ФиксированныйМассив, СписокЗначений"); + + Если Не ТипыПараметровСоответствуют Тогда + Возврат Неопределено; + КонецЕсли; + + ТипСписка = ТипЗнч(ОжидаемоеЗначение); + + Если ЮТТипыДанныхСлужебный.ЭтоМассива(ТипСписка) Тогда + Возврат ОжидаемоеЗначение.Найти(ПроверяемоеЗначение) <> Неопределено; + Иначе + Возврат ОжидаемоеЗначение.НайтиПоЗначению(ПроверяемоеЗначение) <> Неопределено; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСтроки.xml b/src/cfe/YAXUnit/CommonModules/ЮТСтроки.xml new file mode 100644 index 0000000..fa6a336 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСтроки.xml @@ -0,0 +1,23 @@ + + + + + ЮТСтроки + + + ru + Строки + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТСтроки/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТСтроки/Ext/Module.bsl new file mode 100644 index 0000000..33c7b5e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТСтроки/Ext/Module.bsl @@ -0,0 +1,188 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Конкатенирует строки, разделяя их разделителем +// +// Параметры: +// ИсходнаяСтрока - Строка - Исходная строка +// ДополнительнаяСтрока - Строка - Добавляемая строка +// Разделитель - Строка - Строка разделитель, любой набор символов - разделитель между подстроками +// +// Возвращаемое значение: +// Строка - Результат конкатенации строк +// +Функция ДобавитьСтроку(ИсходнаяСтрока, ДополнительнаяСтрока, Разделитель = ";") Экспорт + + Если Не ПустаяСтрока(ДополнительнаяСтрока) Тогда + + Если Не ПустаяСтрока(ИсходнаяСтрока) Тогда + Возврат Строка(ИсходнаяСтрока) + Разделитель + Строка(ДополнительнаяСтрока); + Иначе + Возврат Строка(ДополнительнаяСтрока); + КонецЕсли; + + КонецЕсли; + + Возврат Строка(ИсходнаяСтрока); + +КонецФункции + +// Возвращает массив на основании строки. +// При этом: +// * отсекает незначащие символы, стоящие слева от первого значащего символа в строке, и пробелы, стоящие справа от последнего значащего символа в строке. +// * в отличии от `СтрРазделить` в качестве разделителля используется вся переданная строка, а не любой из символов входящий в нее. +// +// Параметры: +// Значение - Строка - преобразуемая строка +// Разделитель - Строка - строка-разделитель +// +// Возвращаемое значение: +// Массив Из Строка - массив строк +// +Функция РазделитьСтроку(Знач Значение, Разделитель = ";") Экспорт + + КодУниверсальногоРазделителя = 5855; + УниверсальныйРазделитель = Символ(КодУниверсальногоРазделителя); + МодифицированнаяСтрока = СтрЗаменить(Значение, Разделитель, УниверсальныйРазделитель); + + МассивСтрок = ?(МодифицированнаяСтрока = "", Новый Массив, СтрРазделить(МодифицированнаяСтрока, УниверсальныйРазделитель)); + + Для Индекс = 0 По МассивСтрок.ВГраница() Цикл + МассивСтрок[Индекс] = СокрЛП(МассивСтрок[Индекс]); + КонецЦикла; + + Возврат МассивСтрок; + +КонецФункции + +// Формирует строку из заданного количества повторяемых символов +// Параметры: +// Символ - Строка - Повторяемый символ +// Количество - Число - Количество повторений +// +// Возвращаемое значение: +// Строка - Строка повторяемых символов +Функция СтрокаСимволов(Символ, Количество) Экспорт + + Возврат СтрСоединить(Новый Массив(Количество + 1), Символ); + +КонецФункции + +// Строка с символами русского алфавита +// +// Параметры: +// НижнийРегистр - Булево - добавить символы в нижнем регистре +// ВерхнийРегистр - Булево - добавить символы в верхнем регистре +// +// Возвращаемое значение: +// Строка +Функция РусскиеБуквы(НижнийРегистр = Истина, ВерхнийРегистр = Ложь) Экспорт + + Возврат Буквы("абвгдеёжзийклмнопрстуфхцчшщъыьэюя", НижнийРегистр, ВерхнийРегистр); + +КонецФункции + +// Строка с символами английского алфавита +// +// Параметры: +// НижнийРегистр - Булево - добавить символы в нижнем регистре +// ВерхнийРегистр - Булево - добавить символы в верхнем регистре +// +// Возвращаемое значение: +// Строка +Функция АнглийскиеБуквы(НижнийРегистр = Истина, ВерхнийРегистр = Ложь) Экспорт + + Возврат Буквы("abcdefghijklmnopqrstuvwxyz", НижнийРегистр, ВерхнийРегистр); + +КонецФункции + +// Строка с числами +// +// Возвращаемое значение: +// Строка +Функция Цифры() Экспорт + + Возврат "1234567890"; + +КонецФункции + +// Выполняет сравнение версий +// +// Параметры: +// Версия1 - Строка +// Версия2 - Строка +// +// Возвращаемое значение: +// Число - Результат сравнения +// `-1` - Версия1 меньше Версия2 +// `0` - Версии равны +// `1` - Версия1 больше Версия2 +Функция СравнитьВерсии(Версия1, Версия2) Экспорт + + ЧастиВерсия1 = СтрРазделить(Версия1, "."); + ЧастиВерсия2 = СтрРазделить(Версия2, "."); + + КоличествоЧастейВерсия1 = ЧастиВерсия1.Количество(); + КоличествоЧастейВерсия2 = ЧастиВерсия2.Количество(); + + КоличествоЧастей = Макс(КоличествоЧастейВерсия1, КоличествоЧастейВерсия2); + + Для Инд = КоличествоЧастейВерсия1 По КоличествоЧастей - 1 Цикл + ЧастиВерсия1.Добавить("0"); + КонецЦикла; + + Для Инд = КоличествоЧастейВерсия2 По КоличествоЧастей - 1 Цикл + ЧастиВерсия2.Добавить("0"); + КонецЦикла; + + Результат = 0; + + Для Разряд = 0 По КоличествоЧастей - 1 Цикл + + Результат = Число(ЧастиВерсия1[Разряд]) - Число(ЧастиВерсия2[Разряд]); + Если Результат <> 0 Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Макс(Мин(Результат, 1), -1); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция Буквы(Буквы, НижнийРегистр, ВерхнийРегистр) + + Если НижнийРегистр И ВерхнийРегистр Тогда + Возврат Буквы + ВРег(Буквы); + ИначеЕсли НижнийРегистр Тогда + Возврат Буквы; + ИначеЕсли ВерхнийРегистр Тогда + Возврат ВРег(Буквы); + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанные.xml b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанные.xml new file mode 100644 index 0000000..ff4e344 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанные.xml @@ -0,0 +1,23 @@ + + + + + ЮТТестовыеДанные + + + ru + Тестовые данные + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанные/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанные/Ext/Module.bsl new file mode 100644 index 0000000..f865bf8 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанные/Ext/Module.bsl @@ -0,0 +1,881 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Создает новый элемент и возвращает его ссылку. +// +// Параметры: +// Менеджер - Произвольный - Менеджер справочника/ПВХ и тд. +// Наименование - Строка, Неопределено - Наименование элемента +// Реквизиты - Структура, Неопределено - Значения реквизитов элемента +// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи +// +// Возвращаемое значение: +// ЛюбаяСсылка - Ссылка на созданный объект +Функция СоздатьЭлемент(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено, Знач ПараметрыЗаписи = Неопределено) Экспорт + + Если Реквизиты <> Неопределено Тогда + Данные = Реквизиты; + Иначе + Данные = Новый Структура; + КонецЕсли; + + Если ЗначениеЗаполнено(Наименование) Тогда + Если ЮТОбщийСлужебныйВызовСервера.ЭтоАнглийскийВстроенныйЯзык() Тогда + Данные.Вставить("Description", Наименование); + Иначе + Данные.Вставить("Наименование", Наименование); + КонецЕсли; + КонецЕсли; + + Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь); + ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка); + + Возврат Ссылка; + +КонецФункции + +// Создает новый документ и возвращает его ссылку. +// +// Параметры: +// Менеджер - Произвольный - Менеджер справочника/ПВХ и тд. +// Реквизиты - Структура, Неопределено - Значения реквизитов элемента +// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи +// +// Возвращаемое значение: +// ДокументСсылка - Ссылка на созданный объект +Функция СоздатьДокумент(Менеджер, Реквизиты = Неопределено, Знач ПараметрыЗаписи = Неопределено) Экспорт + + Если Реквизиты <> Неопределено Тогда + Данные = Реквизиты; + Иначе + Данные = Новый Структура; + КонецЕсли; + + Если ПараметрыЗаписи = Неопределено И Данные.Свойство("РежимЗаписи") Тогда + ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); + ПараметрыЗаписи.РежимЗаписи = Данные.РежимЗаписи; + Данные.Удалить("РежимЗаписи"); + КонецЕсли; + + Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь); + ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка); + + Возврат Ссылка; + +КонецФункции + +// Создает новую группу +// +// Параметры: +// Менеджер - Произвольный - Менеджер справочника/ПВХ и тд. +// Наименование - Строка, Неопределено - Наименование элемента +// Реквизиты - Структура, Неопределено - Значения реквизитов элемента +// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи +// +// Возвращаемое значение: +// ЛюбаяСсылка - Ссылка на созданную группу +Функция СоздатьГруппу(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено, Знач ПараметрыЗаписи = Неопределено) Экспорт + + Если Реквизиты <> Неопределено Тогда + Данные = Реквизиты; + Иначе + Данные = Новый Структура; + КонецЕсли; + + Данные.Вставить("ЭтоГруппа", Истина); + + Возврат СоздатьЭлемент(Менеджер, Наименование, Данные, ПараметрыЗаписи); + +КонецФункции + +#Область ГенерацияСлучайныхЗначений + +// Генерирует и возвращает случайное число. +// +// Параметры: +// Минимум - Неопределено, Число - Минимальное значение +// Максимум - Неопределено, Число - Максимальное значение +// ЗнаковПослеЗапятой - Число - Количество знаков после запятой +// +// Возвращаемое значение: +// Число - Случайное число +Функция СлучайноеЧисло(Минимум = 0, Максимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТТестовыеДанные.СлучайноеЧисло"); +#Иначе + Генератор = ЮТКонтекстСлужебный.ЗначениеКонтекста("ГенераторСлучайныхЧисел"); + + Если Генератор = Неопределено Тогда + Генератор = Новый ГенераторСлучайныхЧисел(); + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("ГенераторСлучайныхЧисел", Генератор); + КонецЕсли; + + Если Максимум = Неопределено Тогда + Результат = Генератор.СлучайноеЧисло(Минимум); + Иначе + Результат = Генератор.СлучайноеЧисло(Минимум, Максимум); + КонецЕсли; + + Если ЗнаковПослеЗапятой > 0 Тогда + Множитель = Pow(10, ЗнаковПослеЗапятой); + Результат = Результат + Окр(Генератор.СлучайноеЧисло(0, Множитель) / Множитель, ЗнаковПослеЗапятой); + КонецЕсли; + + Возврат Результат; +#КонецЕсли + +КонецФункции + +// Генерирует и возвращает случайное положительное число. +// +// Параметры: +// Максимум - Неопределено, Число - Максимальное значение +// ЗнаковПослеЗапятой - Число - Знаков после запятой +// +// Возвращаемое значение: +// Число - Случайное положительное число +Функция СлучайноеПоложительноеЧисло(Максимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт + + Возврат СлучайноеЧисло(1, Максимум, ЗнаковПослеЗапятой); + +КонецФункции + +// Генерирует и возвращает случайное отрицательное число. +// +// Параметры: +// Минимум - Неопределено, Число - Минимальное значение +// ЗнаковПослеЗапятой - Число - Знаков после запятой +// +// Возвращаемое значение: +// Число - Случайное отрицательное число +Функция СлучайноеОтрицательноеЧисло(Знач Минимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт + + Если Минимум <> Неопределено Тогда + Минимум = -Минимум; + КонецЕсли; + + Возврат -СлучайноеЧисло(0, Минимум, ЗнаковПослеЗапятой); + +КонецФункции + +// Генерирует и возвращает случайную строку указанной длины, строка может содержать цифры, английские и русские буквы в разных регистрах. +// +// Параметры: +// Длина - Число - Длина генерируемой строки с учетом префикса +// Префикс - Строка - Префикс строки +// ДопустимыеСимволы - Строка - Допустимые символы из которая будет формироваться случайная строка +// +// Возвращаемое значение: +// Строка - Случайная строка +Функция СлучайнаяСтрока(Знач Длина = 10, Префикс = "", Знач ДопустимыеСимволы = Неопределено) Экспорт + + Если ДопустимыеСимволы = Неопределено Тогда + ДопустимыеСимволы = ЮТСтроки.РусскиеБуквы(Истина, Истина) + ЮТСтроки.АнглийскиеБуквы(Истина, Истина) + ЮТСтроки.Цифры(); + КонецЕсли; + + Результат = ""; + КоличествоСимволов = СтрДлина(ДопустимыеСимволы); + + Длина = Длина - СтрДлина(Префикс); + + Для Инд = 1 По Длина Цикл + + Результат = Результат + Сред(ДопустимыеСимволы, СлучайноеЧисло(1, КоличествоСимволов), 1); + + КонецЦикла; + + Возврат Префикс + Результат; + +КонецФункции + +// Возвращяет случайный валидный идентификатор +// +// Параметры: +// Длина - Число - Длина генерируемой строки с учетом префикса +// Префикс - Строка - Префикс строки +// +// Возвращаемое значение: +// Строка - Случайный идентификатор +Функция СлучайныйИдентификатор(Знач Длина = 10, Знач Префикс = "") Экспорт + + НаборСимволов = "_" + ЮТСтроки.РусскиеБуквы(Истина, Истина) + ЮТСтроки.АнглийскиеБуквы(Истина, Истина); + + Если ПустаяСтрока(Префикс) Тогда + Префикс = СлучайнаяСтрока(1, "", НаборСимволов); + КонецЕсли; + + НаборСимволов = НаборСимволов + ЮТСтроки.Цифры(); + + Возврат СлучайнаяСтрока(Длина, Префикс, НаборСимволов); + +КонецФункции + +// Генерирует и возвращает случайную дату в указанном интервале (если не указан используется `0001-01-01 - 3999-12-31`). +// +// Параметры: +// Минимум - Дата - Минимальное значение случайной даты +// - Неопределено - Если не указано используется `0001-01-01` +// Максимум - Дата - Максимальное значение случайной даты +// - Неопределено - Если не указано используется `3999-12-31` +// +// Возвращаемое значение: +// Дата - Случайная дата +Функция СлучайнаяДата(Знач Минимум = '00010101', Знач Максимум = '39991231') Экспорт + + Если Минимум = Максимум Тогда + Возврат Минимум; + ИначеЕсли Максимум < Минимум Тогда + ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("СлучайнаяДата", "максимальное значение должно быть больше минимального"); + КонецЕсли; + + РазностьДат = Максимум - Минимум; + + Если РазностьДат <= МаксимумГенератора() Тогда + Возврат Минимум + СлучайноеЧисло(0, РазностьДат); + КонецЕсли; + + СекундВДне = 86400; + КоличествоДней = Цел((РазностьДат) / СекундВДне); + + Возврат Минимум + СлучайноеЧисло(0, КоличествоДней) * СекундВДне + СлучайноеЧисло(0, СекундВДне); + +КонецФункции + +// Генерирует случайное время +// +// Возвращаемое значение: +// Дата - Случайное время +Функция СлучайноеВремя() Экспорт + + СекундВСутках = 60*60*24; + + Возврат '00010101000000' + СлучайноеЧисло(0, СекундВСутках - 1); + +КонецФункции + +// Генерирует случайную дату в будущем. +// Максимальное значение генерируемой даты можно ограничить параметрами. +// Например: СлучайнаяДатаВБудущем(2, "часа") - будет сформирована дата в интервале (ТекущаяДата, ТекущаяДата + 2 часа] +// +// Параметры: +// Интервал - Число - Интервал +// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения +// * секунда, секунды, секунд +// * минута, минуты, минут +// * час, часа, часов +// * день, дня, дней +// * месяц, месяца, месяцев +// +// Возвращаемое значение: +// Дата - Случайная дата в будущем +Функция СлучайнаяДатаВБудущем(Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт + + //@skip-check use-non-recommended-method + Возврат СлучайнаяДатаПосле(ТекущаяДата(), Интервал, ТипИнтервала); + +КонецФункции + +// Генерирует случайную дату в прошлом. +// Минимальное значение генерируемой даты можно ограничить параметрами. +// Например: СлучайнаяДатаВПрошлом(2, "часа") - будет сформирована дата в интервале [ТекущаяДата - 2 часа, ТекущаяДата) +// +// Параметры: +// Интервал - Число - Интервал +// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения +// * секунда, секунды, секунд +// * минута, минуты, минут +// * час, часа, часов +// * день, дня, дней +// * месяц, месяца, месяцев +// +// Возвращаемое значение: +// Дата - Случайная дата в прошлом +Функция СлучайнаяДатаВПрошлом(Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт + + //@skip-check use-non-recommended-method + Возврат СлучайнаяДатаДо(ТекущаяДата(), Интервал, ТипИнтервала); + +КонецФункции + +// Генерирует случайную дату, значение которой больше указанной. +// Максимальное значение генерируемой даты можно ограничить параметрами. +// Например: СлучайнаяДатаПосле(Дата, 2, "часа") - будет сформирована дата в интервале [Дата - 2 часа, Дата) +// +// Параметры: +// Дата - Дата +// Интервал - Число - Интервал +// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения +// * секунда, секунды, секунд +// * минута, минуты, минут +// * час, часа, часов +// * день, дня, дней +// * месяц, месяца, месяцев +// +// Возвращаемое значение: +// Дата +Функция СлучайнаяДатаПосле(Дата, Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт + + ИнтервалНеУказан = Интервал = Неопределено И ТипИнтервала = Неопределено; + + Если ИнтервалНеУказан Тогда + Возврат СлучайнаяДата(Дата + 1); + Иначе + Минимум = Дата + 1; + Максимум = ЮТОбщий.ДобавитьКДате(Дата, Интервал, ТипИнтервала); + Возврат СлучайнаяДата(Минимум, Максимум); + КонецЕсли; + +КонецФункции + +// Генерирует случайную дату, значение которой меньше указанной. +// Минимальное значение генерируемой даты можно ограничить параметрами. +// Например: СлучайнаяДатаПосле(Дата, 2, "часа") - будет сформирована дата в интервале [Дата - 2 часа, Дата) +// +// Параметры: +// Дата - Дата +// Интервал - Число - Интервал +// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения +// * секунда, секунды, секунд +// * минута, минуты, минут +// * час, часа, часов +// * день, дня, дней +// * месяц, месяца, месяцев +// +// Возвращаемое значение: +// Дата +Функция СлучайнаяДатаДо(Дата, Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт + + ИнтервалНеУказан = Интервал = Неопределено И ТипИнтервала = Неопределено; + + Если ИнтервалНеУказан Тогда + Возврат СлучайнаяДата(, Дата - 1); + Иначе + Минимум = ЮТОбщий.ДобавитьКДате(Дата, -Интервал, ТипИнтервала); + Максимум = Дата - 1; + Возврат СлучайнаяДата(Минимум, Максимум); + КонецЕсли; + +КонецФункции + +// Генерирует и возвращает случайный IP адрес. +// +// Возвращаемое значение: +// Строка - Случайный IP адрес +Функция СлучайныйIPАдрес() Экспорт + + Части = Новый Массив(); + Части.Добавить(СлучайноеЧисло(1, 253)); + Части.Добавить(СлучайноеЧисло(1, 253)); + Части.Добавить(СлучайноеЧисло(1, 253)); + Части.Добавить(СлучайноеЧисло(1, 253)); + + Возврат СтрСоединить(Части, "."); + +КонецФункции + +// Возвращает случайный элемент списка. +// +// Параметры: +// Список - Массив из Произвольный - Коллекция возможных значений +// +// Возвращаемое значение: +// Произвольный - случайное значение из списка +Функция СлучайноеЗначениеИзСписка(Список) Экспорт + + Индекс = СлучайноеЧисло(0, Список.ВГраница()); + + Возврат Список[Индекс]; + +КонецФункции + +// Возвращает случайное логическое значение. +// +// Возвращаемое значение: +// Булево - Случайное булево +Функция СлучайноеБулево() Экспорт + + Возврат СлучайноеЧисло() % 2 = 0; + +КонецФункции + +// Возвращает случайное значение перечисления +// +// Параметры: +// Перечисление - ПеречислениеМенеджер - Менеджер +// - Строка - Имя объекта метаданных +// +// Возвращаемое значение: +// ПеречислениеСсылка +Функция СлучайноеЗначениеПеречисления(Перечисление) Экспорт + + Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.СлучайноеЗначениеПеречисления(Перечисление); + +КонецФункции + +// Возвращает случайное предопреленное значения объекта конфигурации. +// +// Параметры: +// Менеджер - Строка - Имя менеджера. Примеры: "Справочники.ВидыЦен", "Справочник.ВидыЦен" +// - Произвольный - Менеджер объекта метаданных. Примеры: Справочники.ВидыЦен +// Отбор - Структура, Соответствие из Произвольный - Отбора поиска предопределенных значений (сравнение на равенство) +// +// Возвращаемое значение: +// ПеречислениеСсылка +Функция СлучайноеПредопределенноеЗначение(Менеджер, Отбор = Неопределено) Экспорт + + Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.СлучайноеПредопределенноеЗначение(Менеджер, Отбор); + +КонецФункции + +// Возвращает случайный номер телефона. +// +// Параметры: +// КодСтраны - Строка - Код страны, с которого будет начинаться номер. +// +// Возвращаемое значение: +// Строка - Сгенерированный номер телефона. +Функция СлучайныйНомерТелефона(КодСтраны = "7") Экспорт + Результат = СтрШаблон( + "+%1(%2)%3-%4-%5", + ?(ПустаяСтрока(КодСтраны), "7", КодСтраны), + Формат(СлучайноеЧисло(0, 999), "ЧЦ=3; ЧН=000; ЧВН=; ЧГ=0;"), + Формат(СлучайноеЧисло(0, 999), "ЧЦ=3; ЧН=000; ЧВН=; ЧГ=0;"), + Формат(СлучайноеЧисло(0, 99), "ЧЦ=2; ЧН=00; ЧВН=; ЧГ=0;"), + Формат(СлучайноеЧисло(0, 99), "ЧЦ=2; ЧН=00; ЧВН=; ЧГ=0;") + ); + + Возврат Результат; +КонецФункции + +#КонецОбласти + +// Генерирует и возвращает уникальную строку, формируется из уникального идентификатора. +// +// Параметры: +// Префикс - Строка - Префикс строки +// +// Возвращаемое значение: +// Строка - Уникальная строка +Функция УникальнаяСтрока(Префикс = "") Экспорт + + Возврат Префикс + Новый УникальныйИдентификатор(); + +КонецФункции + +#Если Не ВебКлиент Тогда + +// Создает новый файл, который будет удален после теста +// +// Параметры: +// Содержимое - Строка, Неопределено - Содержимое файла +// ТолькоЧтение - Булево - Установить атрибут `только чтение` +// Расширение - Строка, Неопределено - Расширение нового файла +// +// Возвращаемое значение: +// Строка - Новый файл +Функция НовыйФайл(Содержимое = Неопределено, ТолькоЧтение = Ложь, Расширение = Неопределено) Экспорт + + Результат = НовоеИмяВременногоФайла(Расширение); + + ЗаписьДанных = Новый ЗаписьДанных(Результат); + + Если Содержимое <> Неопределено Тогда + ЗаписьДанных.ЗаписатьСимволы(Содержимое); + КонецЕсли; + + ЗаписьДанных.Закрыть(); + + Если ТолькоЧтение Тогда + СозданныйФайл = Новый Файл(Результат); + СозданныйФайл.УстановитьТолькоЧтение(Истина); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает имя нового файла. +// По окончании выполнения теста этот файл будет удален. +// +// Параметры: +// Расширение - Строка - Расширение нового файла +// +// Возвращаемое значение: +// Строка +Функция НовоеИмяВременногоФайла(Расширение = Неопределено) Экспорт + + Возврат ЮТТестовыеДанныеСлужебный.НовоеИмяВременногоФайла(Расширение); + +КонецФункции + +// Читает таблицу MarkDown в массив структур +// +// Параметры: +// Строки - Строка - Таблица markdown +// +// Возвращаемое значение: +// Массив из Структура - Данные таблицы markdown +Функция ТаблицаMarkDown(Строки) Экспорт + + ЗагрузилиЗаголовок = Ложь; + Результат = Новый Массив(); + Ключи = ""; + + Разделитель = "|"; + + Кодировка = КодировкаТекста.UTF8; + Поток = ПолучитьДвоичныеДанныеИзСтроки(Строки, Кодировка).ОткрытьПотокДляЧтения(); + Чтение = Новый ЧтениеТекста(Поток, Кодировка); + + Пока Истина Цикл + + Строка = Чтение.ПрочитатьСтроку(); + Если Строка = Неопределено Тогда + Прервать; + КонецЕсли; + + Строка = СокрЛП(Строка); + + Если ПустаяСтрока(Строка) Тогда + Продолжить; + ИначеЕсли НЕ СтрНачинаетсяС(Строка, Разделитель) Тогда + Если ЗагрузилиЗаголовок Тогда + Прервать; + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + + Блоки = СтрРазделить(Строка, Разделитель); + + Если ЗагрузилиЗаголовок Тогда + + Если Блоки.Количество() <> Ключи.Количество() Тогда + ВызватьИсключение СтрШаблон("Количество значений в строке (%1) Markdown не совпадает с количеством заголовков (%2): + |%3", Блоки.Количество(), Ключи.Количество(), Строка); + КонецЕсли; + + СтрокаРезультата = Новый Структура(); + Для Инд = 1 По Блоки.ВГраница() - 1 Цикл + СтрокаРезультата.Вставить(Ключи[Инд], СокрЛП(Блоки[Инд])); + КонецЦикла; + Результат.Добавить(СтрокаРезультата); + Иначе + Ключи = Новый Массив(); + Для Инд = 0 По Блоки.ВГраница() Цикл + Ключи.Добавить(СокрЛП(Блоки[Инд])); + КонецЦикла; + Чтение.ПрочитатьСтроку(); // Пропуск строки разделителя + ЗагрузилиЗаголовок = Истина; + КонецЕсли; + + КонецЦикла; + + Чтение.Закрыть(); + Поток.Закрыть(); + + Возврат Результат; + +КонецФункции + +// Формирует структуру на основании таблицы Markdown +// +// Параметры: +// Ключ - Строка - Имя ключевой колонки +// Строки - Строка - Таблица markdown +// +// Возвращаемое значение: +// Структура +Функция СтруктураMarkDown(Ключ, Строки) Экспорт + + Таблица = ТаблицаMarkDown(Строки); + + Результат = Новый Структура(); + + Для Каждого Строка Из Таблица Цикл + Результат.Вставить(Строка[Ключ], Строка); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецЕсли + +// Формирует массив различных комбиначий параметров +// +// Предназначено для формирования таблицы возможных значений параметров для краш теста метода. +// +// Параметры: +// ЗначенияПоУмолчанию - Структура - Значения параметров по умолчанию. +// ЗначенияПараметров - Структура - Массивы значений для каждого параметра. +// +// Возвращаемое значение: +// Массив из Структура - Варианты параметров. +Функция ВариантыПараметров(ЗначенияПоУмолчанию, ЗначенияПараметров) Экспорт + + Варианты = Новый Массив; + Варианты.Добавить(ЗначенияПоУмолчанию); + + Ключи = ЮТКоллекции.ВыгрузитьЗначения(ЗначенияПараметров, "Ключ"); + + ДобавитьВарианты(Варианты, ЗначенияПоУмолчанию, ЗначенияПараметров, Ключи, 0); + + Возврат Варианты; + +КонецФункции + +// Возвращает конструктор создания тестовых данных +// +// Конструктор имеет ряд особенностей: +// +// * Нельзя использовать параллельно несколько конструкторов. +// Например +// +// ```bsl +// Пользователь = КонструкторОбъекта(Справочники.Пользователи); +// Документ = КонструкторОбъекта(Документы.Приход); +// ... +// Пользователь.Записать(); +// Документ.Провести(); +// ``` +// +// * Создание объекта происходит при вызове методов `Записать` и `Провести`, а создание реквизитов происходит во время вызова методов установки. +// * При использовании на клиенте все значения должны быть сериализуемыми. +// +// Параметры: +// Менеджер - Строка - Имя менеджера. Примеры: "Справочники.Товары", "Документы.ПриходТоваров" +// - Произвольный - Менеджер объекта метаданных. Примеры: Справочники.Товары, Документы.ПриходТоваров +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных +Функция КонструкторОбъекта(Менеджер) Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.Инициализировать(Менеджер); + +КонецФункции + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда +// Возвращает конструктор создания объекта XDTO +// +// Параметры: +// ИмяТипа - Строка - Имя типа объекта +// ПространствоИмен - Строка - Пространство имен типа +// Фабрика - ФабрикаXDTO - Используемая фабрика XDTO +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Конструктор объекта XDTO +Функция КонструкторОбъектаXDTO(ИмяТипа, ПространствоИмен, Фабрика = Неопределено) Экспорт + + Обработка = Обработки.ЮТКонструкторОбъектаXDTO.Создать(); + Обработка.Инициализировать(ИмяТипа, ПространствоИмен, Фабрика); + + Возврат Обработка; + +КонецФункции +#КонецЕсли + +// Удаляет переданные объекта +// +// Параметры: +// Ссылки - Массив из ЛюбаяСсылка +Процедура Удалить(Ссылки) Экспорт + + Если ЗначениеЗаполнено(Ссылки) Тогда + ЮТТестовыеДанныеСлужебныйВызовСервера.Удалить(Ссылки); + КонецЕсли; + +КонецПроцедуры + +// Возвращает объект подражателя для формирования осмысленных тестовых данных +// +// Возвращаемое значение: +// ОбщийМодуль - Подражатель +Функция Подражатель() Экспорт + + Возврат ЮТПодражательСлужебный.Инициализировать(); + +КонецФункции + +// Возвращает таблицу значений из табличного документа +// +// Параметры: +// Макет - ТабличныйДокумент - Исходный табличный документ +// ОписанияТипов - Соответствие из ОписаниеТипов - Соответствие имен колонок таблицы к типам значений +// КэшЗначений - Соответствие из Произвольный - Соответствие для хранения создаваемых значений +// ЗаменяемыеЗначения - Соответствие из Произвольный - Значения, использующиеся для замены +// ПараметрыСозданияОбъектов - см. ЮТФабрика.ПараметрыСозданияОбъектов +// Возвращаемое значение: +// - ТаблицаЗначений - Для сервера, данные загруженные из макета +// - Массив из Структура - Для клиента, данные загруженные из макета +Функция ЗагрузитьИзМакета(Макет, + ОписанияТипов, + КэшЗначений = Неопределено, + ЗаменяемыеЗначения = Неопределено, + ПараметрыСозданияОбъектов = Неопределено) Экспорт + +#Если Сервер Тогда + ТаблицаЗначений = Истина; +#Иначе + ТаблицаЗначений = Ложь; +#КонецЕсли + + Если Макет = Неопределено Тогда + ВызватьИсключение "Укажите источник данных (Макет)"; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ОписанияТипов) Тогда + ВызватьИсключение "Укажите описание загружаемых колонок (ОписанияТипов)"; + КонецЕсли; + + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОписанияТипов, "Структура, Соответствие", "ЮТТестовыеДанные.ЗагрузитьИзМакета", "ОписанияТипов"); + + Возврат ЮТТестовыеДанныеСлужебный.ЗагрузитьИзМакета(Макет, + ОписанияТипов, + КэшЗначений, + ЗаменяемыеЗначения, + ПараметрыСозданияОбъектов, + ТаблицаЗначений); + +КонецФункции + +#Если Сервер Тогда +// Возвращает мок для `HTTPСервисЗапрос`. +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция HTTPСервисЗапрос() Экспорт + + Если ЮТОбщийСлужебныйВызовСервера.ЭтоАнглийскийВстроенныйЯзык() Тогда + Возврат Обработки.ЮТHTTPServiceRequest.Создать(); + Иначе + Возврат Обработки.ЮТHTTPСервисЗапрос.Создать(); + КонецЕсли; + +КонецФункции +#КонецЕсли + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда +// Возвращает мок для ADO.RecordSet. +// +// Параметры: +// Колонки - Строка - Имена колонок набора данных, разделенные запятой +// Описание - Строка - Описание, полезно для отладки и проверки +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТRecordSet - Мок ADO.RecordSet +Функция ADORecordSet(Колонки, Описание = Неопределено) Экспорт + + Обработка = Обработки.ЮТRecordSet.Создать(); + Обработка.Описание = Описание; + Обработка.Инициализировать(Колонки); + + Возврат Обработка; + +КонецФункции +#КонецЕсли + +// Устанавливает значение реквизита ссылки +// +// Параметры: +// Ссылка - ЛюбаяСсылка +// ИмяРеквизита - Строка +// ЗначениеРеквизита - Произвольный +// ПараметрыЗаписи - см. ЮТФабрикаСлужебный.ПараметрыЗаписи +Процедура УстановитьЗначениеРеквизита(Ссылка, ИмяРеквизита, ЗначениеРеквизита, ПараметрыЗаписи = Неопределено) Экспорт + + Значения = Новый Соответствие(); + Значения.Вставить(ИмяРеквизита, ЗначениеРеквизита); + УстановитьЗначенияРеквизитов(Ссылка, Значения, ПараметрыЗаписи); + +КонецПроцедуры + +// Устанавливает значения реквизитов ссылки. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - Ссылка +// ЗначенияРеквизитов - Структура, Соответствие из Произвольный - Значения реквизитов +// ПараметрыЗаписи - см. ЮТФабрикаСлужебный.ПараметрыЗаписи +Процедура УстановитьЗначенияРеквизитов(Ссылка, ЗначенияРеквизитов, ПараметрыЗаписи = Неопределено) Экспорт + + ЮТТестовыеДанныеСлужебныйВызовСервера.УстановитьЗначенияРеквизитов(Ссылка, ЗначенияРеквизитов); + +КонецПроцедуры + +// Генерирует новое значение указанного типа. +// Если `ОписаниеТипа` содержит несколько типов, то выбирается случайный из них. +// Параметры: +// ОписаниеТипа - ОписаниеТипов, Тип - Тип значения генерируемого значения +// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы +// - Неопределено +// +// Возвращаемое значение: +// Произвольный - Сгенерированное значение указанного типа +Функция Фикция(ОписаниеТипа, РеквизитыЗаполнения = Неопределено) Экспорт + + Возврат ЮТТестовыеДанныеСлужебный.Фикция(ОписаниеТипа, РеквизитыЗаполнения); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьВарианты(Варианты, БазоваяСтруктура, ЗначенияПараметров, Ключи, Инд) + + Если Инд > Ключи.ВГраница() Тогда + Возврат; + КонецЕсли; + + Ключ = Ключи[Инд]; + Для Каждого Значение Из ЗначенияПараметров[Ключ] Цикл + + Вариант = ЮТКоллекции.СкопироватьСтруктуру(БазоваяСтруктура); + Вариант[Ключ] = Значение; + Варианты.Добавить(Вариант); + + ДобавитьВарианты(Варианты, Вариант, ЗначенияПараметров, Ключи, Инд + 1); + + КонецЦикла; + +КонецПроцедуры + +Функция МножительПериода(ТипИнтервала) + + Множители = ЮТСлужебныйПовторногоИспользования.МножителиИнтервалов(); + Возврат Множители[ТипИнтервала]; + +КонецФункции + +Функция ЭтоМесяц(ТипИнтервала) + + Возврат СтрСравнить(ТипИнтервала, "месяц") = 0 + Или СтрСравнить(ТипИнтервала, "месяца") = 0 + Или СтрСравнить(ТипИнтервала, "месяцев") = 0; + +КонецФункции + +Функция МаксимумГенератора() + + Возврат 4294967295; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебный.xml new file mode 100644 index 0000000..8bfc1a9 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТТестовыеДанныеСлужебный + + + ru + Тестовые данные (служебный) + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..c4b52c4 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебный/Ext/Module.bsl @@ -0,0 +1,254 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// см. ЮТТестовыеДанные.Фикция +Функция Фикция(ОписаниеТипа, РеквизитыЗаполнения = Неопределено) Экспорт + + ПереданоОписаниеТипа = ТипЗнч(ОписаниеТипа) = Тип("ОписаниеТипов"); + + Если НЕ ПереданоОписаниеТипа Тогда + Тип = ОписаниеТипа; + ИначеЕсли ОписаниеТипа.Типы().Количество() > 1 Тогда + НомерТипа = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(ОписаниеТипа.Типы().Количество()); + Тип = ОписаниеТипа.Типы()[НомерТипа - 1]; + Иначе + Тип = ОписаниеТипа.Типы()[0]; + КонецЕсли; + + Значение = Неопределено; + + Если Тип = Тип("Число") Тогда + + Значение = ФиктивноеЧисло(ОписаниеТипа); + + ИначеЕсли Тип = Тип("Строка") Тогда + + Значение = ФикстивнаяСтрока(ОписаниеТипа); + + ИначеЕсли Тип = Тип("Дата") Тогда + + Значение = ФикстивнаяДата(ОписаниеТипа); + + ИначеЕсли Тип = Тип("Булево") Тогда + + Значение = ЮТТестовыеДанные.СлучайноеБулево(); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСистемноеПеречисление(Тип) Тогда + + Значение = СлучайноЗначениеСистемногоПеречисления(Тип); + + Иначе + + Значение = ЮТТестовыеДанныеСлужебныйВызовСервера.ФикцияЗначенияБазы(Тип, РеквизитыЗаполнения); + ДобавитьТестовуюЗапись(Значение); + + КонецЕсли; + + Если Значение = Неопределено Тогда + ВызватьИсключение СтрШаблон("Создание фейковых значений для `%1` не поддерживается", ОписаниеТипа); + КонецЕсли; + + Если ПереданоОписаниеТипа Тогда + Значение = ОписаниеТипа.ПривестиЗначение(Значение); + КонецЕсли; + + Возврат Значение; + +КонецФункции + +#Если Не ВебКлиент Тогда + +// см. ЮТТестовыеДанные.НовоеИмяВременногоФайла +Функция НовоеИмяВременногоФайла(Расширение = Неопределено) Экспорт + + //@skip-check missing-temporary-file-deletion + Результат = ПолучитьИмяВременногоФайла(Расширение); // BSLLS:MissingTemporaryFileDeletion-off + ДобавитьВременныйФайл(Результат); + Возврат Результат; + +КонецФункции + +#КонецЕсли + +Процедура ДобавитьВременныйФайл(Файл) Экспорт + + БуферВременныеФайлы().Добавить(Файл); + +КонецПроцедуры + +Процедура ДобавитьТестовуюЗапись(Запись) Экспорт + +#Если Сервер Тогда + Если ТранзакцияАктивна() И ЮТНастройкиВыполнения.ВТранзакции() Тогда + Возврат; + КонецЕсли; +#КонецЕсли + Если ЮТНастройкиВыполнения.УдалениеТестовыхДанных() Тогда + БуферТестовыеДанные().Добавить(Запись); + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьТестовыеДанные() Экспорт + + ЮТФайлы.УдалитьВременныеФайлы(БуферВременныеФайлы()); + + Если ЮТНастройкиВыполнения.УдалениеТестовыхДанных() Тогда + ЮТТестовыеДанные.Удалить(БуферТестовыеДанные()); + КонецЕсли; + +КонецПроцедуры + +// Возвращает соответствие с подстроками поиска и замены +// Возвращаемое значение: +// Соответствие из Строка +Функция ПодстрокиДляЗаменыВИменахСвойств() Экспорт + + ЗаменяемыеПодстроки = Новый Соответствие; + ЗаменяемыеПодстроки.Вставить(".", "_tchk_"); + + Возврат ЗаменяемыеПодстроки; + +КонецФункции + +#Область ОбработчикиСобытий + +Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт + + УдалитьТестовыеДанные(); // Очистка тестовых данных на уровне теста + +КонецПроцедуры + +Процедура ПослеТестовогоНабора(ОписаниеСобытия) Экспорт + + УдалитьТестовыеДанные(); // Очистка тестовых данных на уровне теста + +КонецПроцедуры + +Процедура ПослеВсехТестов(ОписаниеСобытия) Экспорт + + УдалитьТестовыеДанные(); // Очистка тестовых данных на уровне теста + +КонецПроцедуры + +#КонецОбласти + +Функция ЗагрузитьИзМакета(Макет, ОписанияТипов, КэшЗначений, ЗаменяемыеЗначения, ПараметрыСозданияОбъектов, ТаблицаЗначений) Экспорт + + ПараметрыЗаполнения = ЮТФабрикаСлужебный.ПараметрыЗаполненияТаблицыЗначений(ПараметрыСозданияОбъектов); + + Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.ЗагрузитьИзМакета(Макет, + ОписанияТипов, + КэшЗначений, + ЗаменяемыеЗначения, + ПараметрыЗаполнения, + ТаблицаЗначений); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СлучайноЗначениеСистемногоПеречисления(Тип) + + Менеджер = ЮТМетодыСлужебный.ВычислитьБезопасно(ЮТТипыДанныхСлужебный.ИмяСистемногоПеречисления(Тип)); + + Значения = Новый Массив(); + + Для Каждого Значение Из Менеджер Цикл + Значения.Добавить(Значение); + КонецЦикла; + + Возврат ЮТТестовыеДанные.СлучайноеЗначениеИзСписка(Значения); + +КонецФункции + +Функция БуферВременныеФайлы() + + Возврат Буфер("ВременныеФайлы"); + +КонецФункции + +Функция БуферТестовыеДанные() + + Возврат Буфер("ТестовыеДанные"); + +КонецФункции + +Функция Буфер(Ключ) + + ТекущийКонтекст = ЮТест.Контекст().ТекущийКонтекст(); + + Если ТекущийКонтекст.Свойство(Ключ) Тогда + Буфер = ТекущийКонтекст[Ключ]; + Иначе + Буфер = Новый Массив(); + ТекущийКонтекст.Вставить(Ключ, Буфер); + КонецЕсли; + + Возврат Буфер; + +КонецФункции + +Функция ФиктивноеЧисло(ОписаниеТипа) + + Если ТипЗнч(ОписаниеТипа) <> Тип("ОписаниеТипов") Тогда + Возврат ЮТТестовыеДанные.СлучайноеЧисло(); + КонецЕсли; + + МаксимальноеЗначение = 4294967295; + Если ОписаниеТипа.КвалификаторыЧисла.ДопустимыйЗнак = ДопустимыйЗнак.Неотрицательный ИЛИ ЮТТестовыеДанные.СлучайноеБулево() Тогда + МаксимальноеЗначение = ОписаниеТипа.ПривестиЗначение(МаксимальноеЗначение); + Значение = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(МаксимальноеЗначение, ОписаниеТипа.КвалификаторыЧисла.РазрядностьДробнойЧасти); + Иначе + МаксимальноеЗначение = ОписаниеТипа.ПривестиЗначение(-МаксимальноеЗначение); + Значение = ЮТТестовыеДанные.СлучайноеОтрицательноеЧисло(МаксимальноеЗначение, ОписаниеТипа.КвалификаторыЧисла.РазрядностьДробнойЧасти); + КонецЕсли; + + Возврат Значение; + +КонецФункции + +Функция ФикстивнаяСтрока(ОписаниеТипа) + + Если ТипЗнч(ОписаниеТипа) <> Тип("ОписаниеТипов") Тогда + Возврат ЮТТестовыеДанные.СлучайнаяСтрока(ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(100)); + КонецЕсли; + + Если ОписаниеТипа.КвалификаторыСтроки.Длина = 0 Тогда + Значение = ЮТТестовыеДанные.СлучайнаяСтрока(ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(100)); + Иначе + Значение = ЮТТестовыеДанные.СлучайнаяСтрока(ОписаниеТипа.КвалификаторыСтроки.Длина); + КонецЕсли; + + Возврат Значение; + +КонецФункции + +Функция ФикстивнаяДата(ОписаниеТипа) + + Интервал = 315360000; // 10 лет + //@skip-check use-non-recommended-method + Возврат ЮТТестовыеДанные.СлучайнаяДата(ТекущаяДата() - Интервал, ТекущаяДата() + Интервал); // BSLLS:DeprecatedCurrentDate-off + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйВызовСервера.xml new file mode 100644 index 0000000..c407192 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТТестовыеДанныеСлужебныйВызовСервера + + + ru + Тестовые данные (вызов сервера) + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..93717ab --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,420 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция СоздатьЗапись(Знач Менеджер, Знач Данные, Знач ПараметрыЗаписи, Знач ВернутьОбъект) Экспорт + + ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи); + + Объект = НовыйОбъект(Менеджер, Данные, ПараметрыЗаписи.ДополнительныеСвойства); + + КлючЗаписи = ЗаписатьОбъект(Объект, ПараметрыЗаписи); + + Если ВернутьОбъект Тогда + Возврат Объект; + Иначе + Возврат КлючЗаписи; + КонецЕсли; + +КонецФункции + +// Создает новый объект и заполняет его данными +// +// Параметры: +// Менеджер - Произвольный +// Данные - Структура - Данные заполнения объекта +// ДополнительныеСвойства - Структура - Дополнительные свойства объекта +// +// Возвращаемое значение: +// Произвольный - Созданный объект +Функция НовыйОбъект(Знач Менеджер, Знач Данные, Знач ДополнительныеСвойства = Неопределено) Экспорт + + ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер); + Менеджер = ЮТОбщий.Менеджер(ОписаниеОбъектаМетаданных); + + ЭтоРегистр = ЮТМетаданные.ЭтоРегистр(ОписаниеОбъектаМетаданных); + + Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, Данные); + + Если ДополнительныеСвойства <> Неопределено Тогда + ЮТКоллекции.ДополнитьСтруктуру(Объект.ДополнительныеСвойства, ДополнительныеСвойства); + КонецЕсли; + + Если ЭтоРегистр Тогда + + ЗаполнитьНаборРегистра(Объект, Данные); + Возврат Объект; + + КонецЕсли; + ЗаполнитьЗначенияСвойств(Объект, Данные); + + Если ОписаниеОбъектаМетаданных.ОписаниеТипа.ТабличныеЧасти Тогда + + Для Каждого ОписаниеТабличнойЧасти Из ОписаниеОбъектаМетаданных.ТабличныеЧасти Цикл + + ИмяТабличнойЧасти = ОписаниеТабличнойЧасти.Ключ; + Если НЕ Данные.Свойство(ИмяТабличнойЧасти) Тогда + Продолжить; + КонецЕсли; + + Для Каждого Запись Из Данные[ИмяТабличнойЧасти] Цикл + Строка = Объект[ИмяТабличнойЧасти].Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Запись); + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + + ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных); + + Возврат Объект; + +КонецФункции + +Процедура Удалить(Знач Ссылки) Экспорт + + Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда + Ссылки = ЮТКоллекции.ЗначениеВМассиве(Ссылки); + КонецЕсли; + + Ошибки = Новый Массив; + + Для Каждого Ссылка Из Ссылки Цикл + + ТипЗначения = ТипЗнч(Ссылка); + Если Ссылка = Неопределено ИЛИ ЮТТипыДанныхСлужебный.ЭтоТипПеречисления(ТипЗначения) Тогда + Продолжить; + КонецЕсли; + + Попытка + Если ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения) Тогда + Объект = Ссылка.ПолучитьОбъект(); + Если Объект <> Неопределено Тогда + Объект.Удалить(); + КонецЕсли; + Иначе + Менеджер = ЮТОбщий.Менеджер(ТипЗначения); + Запись = Менеджер.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(Запись, Ссылка); + Запись.Прочитать(); + Запись.Удалить(); + КонецЕсли; + Исключение + + Ошибки.Добавить(ЮТРегистрацияОшибокСлужебный.ПредставлениеОшибки("Удаление " + Ссылка, ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЦикла; + + ОбновитьНумерациюОбъектов(); + + Если ЗначениеЗаполнено(Ошибки) Тогда + ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС); + КонецЕсли; + +КонецПроцедуры + +Функция ФикцияЗначенияБазы(Знач ТипЗначения, Знач РеквизитыЗаполнения = Неопределено) Экспорт + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения); + + Если ОбъектМетаданных = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда + + Возврат СлучайноеЗначениеПеречисления(ОбъектМетаданных); + + КонецЕсли; + + ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ОбъектМетаданных); + Менеджер = ЮТОбщий.Менеджер(ОбъектМетаданных); + + Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, РеквизитыЗаполнения); + + Если ЗначениеЗаполнено(РеквизитыЗаполнения) Тогда + ЗаполнитьЗначенияСвойств(Объект, РеквизитыЗаполнения); + КонецЕсли; + + ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных); + + Возврат ЗаписатьОбъект(Объект, ПараметрыЗаписи()); + +КонецФункции + +Функция ЗагрузитьИзМакета(Знач Макет, + Знач ОписанияТипов, + КэшЗначений, + Знач ЗаменяемыеЗначения, + Знач ПараметрыЗаполнения, + Знач ТаблицаЗначений) Экспорт + + Таблица = ЮТТестовыеДанныеСлужебныйТаблицыЗначений.ЗагрузитьИзМакета(Макет, + ОписанияТипов, + КэшЗначений, + ЗаменяемыеЗначения, + ПараметрыЗаполнения); + + Если ТаблицаЗначений Тогда + Возврат Таблица; + КонецЕсли; + + Реквизиты = СтрСоединить(ЮТКоллекции.ВыгрузитьЗначения(Таблица.Колонки, "Имя"), ","); + Результат = Новый Массив(Таблица.Количество()); + + Для Инд = 0 По Таблица.Количество() - 1 Цикл + Запись = Новый Структура(Реквизиты); + ЗаполнитьЗначенияСвойств(Запись, Таблица[Инд]); + Результат[Инд] = Запись; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция СлучайноеЗначениеПеречисления(Знач Перечисление) Экспорт + + Менеджер = ЮТОбщий.Менеджер(Перечисление); + + НомерЗначения = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(Менеджер.Количество()); + Возврат Менеджер.Получить(НомерЗначения - 1); + +КонецФункции + +Функция СлучайноеПредопределенноеЗначение(Менеджер, Отбор) Экспорт + + ИмяТаблицы = ЮТМетаданные.НормализованноеИмяТаблицы(Менеджер); + Условия = ЮТест.Предикат(Отбор) + .Реквизит("Предопределенный").Равно(Истина); + + ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Условия, "Ссылка"); + + Данные = ЮТЗапросы.РезультатЗапроса(ОписаниеЗапроса); + + Если Данные.Количество() = 1 Тогда + Значение = Данные[0].Ссылка; + ИначеЕсли Данные.Количество() > 1 Тогда + Индекс = ЮТест.Данные().СлучайноеЧисло(0, Данные.Количество() - 1); + Значение = Данные[Индекс].Ссылка; + Иначе + Значение = Неопределено; + КонецЕсли; + + Возврат Значение; + +КонецФункции + +Процедура УстановитьЗначенияРеквизитов(Знач Ссылка, Знач ЗначенияРеквизитов, Знач ПараметрыЗаписи = Неопределено) Экспорт + + Объект = Ссылка.ПолучитьОбъект(); + ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи); + + Для Каждого Элемент Из ЗначенияРеквизитов Цикл + Объект[Элемент.Ключ] = Элемент.Значение; + КонецЦикла; + + ЗаписатьОбъект(Объект, ПараметрыЗаписи); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Создать объект. +// +// Параметры: ОписаниеМенеджера - +// См. ОписаниеМенеджера +// Менеджер - Произвольный - Менеджер +// ОписаниеТипа - см. ЮТМетаданные.СтруктураОписанияОбъектаМетаданных +// Данные - Структура +// Возвращаемое значение: +// Произвольный - Создать объект +Функция СоздатьОбъект(Менеджер, ОписаниеТипа, Данные) + + Если ОписаниеТипа.Конструктор = "СоздатьЭлемент" Тогда + + ЭтоГруппа = ?(Данные = Неопределено, Ложь, ЮТКоллекции.ЗначениеСтруктуры(Данные, "ЭтоГруппа", Ложь)); + Если ЭтоГруппа Тогда + Результат = Менеджер.СоздатьГруппу(); + Иначе + Результат = Менеджер.СоздатьЭлемент(); + КонецЕсли; + + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьДокумент" Тогда + Результат = Менеджер.СоздатьДокумент(); + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьСчет" Тогда + Результат = Менеджер.СоздатьСчет(); + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьВидРасчета" Тогда + Результат = Менеджер.СоздатьВидРасчета(); + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьУзел" Тогда + Результат = Менеджер.СоздатьУзел(); + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьНаборЗаписей" Тогда + Результат = Менеджер.СоздатьНаборЗаписей(); + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьМенеджерЗаписи" Тогда + Результат = Менеджер.СоздатьМенеджерЗаписи(); + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьБизнесПроцесс" Тогда + Результат = Менеджер.СоздатьБизнесПроцесс(); + ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьЗадачу" Тогда + Результат = Менеджер.СоздатьЗадачу(); + Иначе + ВызватьИсключение СтрШаблон("Для %1 не поддерживается создание записей ИБ", ОписаниеТипа.Имя); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Записать объект. +// +// Параметры: +// Объект - Произвольный - Объект +// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи +// +// Возвращаемое значение: +// ЛюбаяСсылка +Функция ЗаписатьОбъект(Объект, ПараметрыЗаписи) + + Если ПараметрыЗаписи.ОбменДаннымиЗагрузка Тогда + Объект.ОбменДанными.Загрузка = Истина; + КонецЕсли; + + Попытка + + Если ПараметрыЗаписи.РежимЗаписи <> Неопределено Тогда + Объект.Записать(ПараметрыЗаписи.РежимЗаписи); + Иначе + Объект.Записать(); + КонецЕсли; + + Если ПараметрыЗаписи.ОбменДаннымиЗагрузка Тогда + Объект.ОбменДанными.Загрузка = Ложь; + КонецЕсли; + + Возврат КлючЗаписи(Объект); + + Исключение + + ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось записать объект `%1` (%2)", Объект, ТипЗнч(Объект))); + ВызватьИсключение; + + КонецПопытки; + +КонецФункции + +Процедура ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных) + + АнглийскийЯзык = ЮТОбщийСлужебныйВызовСервера.ЭтоАнглийскийВстроенныйЯзык(); + ИмяТипаДокумент = ?(АнглийскийЯзык, "Document", "Документ"); + ИмяРеквизитаКод = ?(АнглийскийЯзык, "Code", "Код"); + ИмяРеквизитаНаименование = ?(АнглийскийЯзык, "Description", "Наименование"); + + ОписаниеТипа = ОписаниеОбъектаМетаданных.ОписаниеТипа; + Если ОписаниеТипа.Имя = ИмяТипаДокумент Тогда + Если НЕ ЗначениеЗаполнено(Объект.Дата) Тогда + Объект.Дата = ТекущаяДатаСеанса(); + КонецЕсли; + Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда + Объект.УстановитьНовыйНомер(); + КонецЕсли; + КонецЕсли; + + Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизитаКод) + И ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаКод].Обязательный + И НЕ ЗначениеЗаполнено(Объект.Код) Тогда + Объект.УстановитьНовыйКод(); + КонецЕсли; + + Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизитаНаименование) + И ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаНаименование].Обязательный + И НЕ ЗначениеЗаполнено(Объект.Наименование) Тогда + Объект.Наименование = ЮТТестовыеДанные.СлучайнаяСтрока(); + КонецЕсли; + +КонецПроцедуры + +Функция КлючЗаписи(Объект) + + ТипЗначения = ТипЗнч(Объект); + + Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда + + Возврат Объект.Ссылка; + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМенеджерЗаписи(ТипЗначения) Тогда + + Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(Объект); + + КлючевыеРеквизиты = Новый Структура(); + Для Каждого Реквизит Из Описание.Реквизиты Цикл + Если Реквизит.Значение.ЭтоКлюч Тогда + КлючевыеРеквизиты.Вставить(Реквизит.Ключ, Объект[Реквизит.Ключ]); + КонецЕсли; + КонецЦикла; + + Менеджер = ЮТОбщий.Менеджер(Описание); + Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипНабораЗаписей(ТипЗначения) Тогда + + КлючевыеРеквизиты = Новый Структура(); + + Для Каждого ЭлементОтбора Из Объект.Отбор Цикл + КлючевыеРеквизиты.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЦикла; + + Менеджер = ЮТОбщий.Менеджер(Объект); + Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты); + + Иначе + + Сообщение = ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.КлючЗаписи", Объект); + ВызватьИсключение Сообщение; + + КонецЕсли; + +КонецФункции + +Функция ПараметрыЗаписи(ВходящиеПараметрыЗаписи = Неопределено) + + Если ВходящиеПараметрыЗаписи = Неопределено Тогда + Возврат ЮТОбщий.ПараметрыЗаписи(); + Иначе + ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); + ЗаполнитьЗначенияСвойств(ПараметрыЗаписи, ВходящиеПараметрыЗаписи); + Возврат ПараметрыЗаписи; + КонецЕсли; + +КонецФункции + +Процедура ЗаполнитьНаборРегистра(Набор, ДанныеЗаписи) + + Запись = Набор.Добавить(); + ЗаполнитьЗначенияСвойств(Запись, ДанныеЗаписи); + + Для Каждого ЭлементОтбора Из Набор.Отбор Цикл + ЭлементОтбора.Установить(Запись[ЭлементОтбора.Имя]); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйТаблицыЗначений.xml b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйТаблицыЗначений.xml new file mode 100644 index 0000000..df01bd3 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйТаблицыЗначений.xml @@ -0,0 +1,23 @@ + + + + + ЮТТестовыеДанныеСлужебныйТаблицыЗначений + + + ru + Тестовые данные таблицы значений + + + + false + false + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйТаблицыЗначений/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйТаблицыЗначений/Ext/Module.bsl new file mode 100644 index 0000000..9269c0b --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестовыеДанныеСлужебныйТаблицыЗначений/Ext/Module.bsl @@ -0,0 +1,562 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ЗагрузитьИзМакета(Макет, ОписанияТипов, КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения) Экспорт + + ДанныеМакета = ДанныеМакета(Макет); + ТипДанныхМакета = ТипЗнч(ДанныеМакета); + + Если ТипДанныхМакета = Тип("ТабличныйДокумент") Тогда + Результат = ЗагрузитьДанныеИзТабличногоДокумента(ДанныеМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения); + ИначеЕсли ТипДанныхМакета = Тип("ТекстовыйДокумент") ИЛИ ТипДанныхМакета = Тип("Строка") Тогда + Результат = ЗагрузитьДанныеИзСтроки(ДанныеМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения); + Иначе + ВызватьИсключение "Макет должен быть либо табличным, либо текстовым документом"; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЗагрузитьДанныеИзТабличногоДокумента(ДанныеМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения) + + КолонкиМакета = Новый Массив(); + Для Инд = 1 По ДанныеМакета.ШиринаТаблицы Цикл + ИмяКолонки = ДанныеМакета.Область(1, Инд).Текст; + КолонкиМакета.Добавить(ИмяКолонки); + КонецЦикла; + + ПараметрыЗагрузки = ПараметрыЗагрузки(КолонкиМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения); + + Выборка = ЮТОбщийСлужебныйВызовСервера.ВыборкаИзТабличногоДокумента(ДанныеМакета); + + Пока Выборка.Следующий() Цикл + + Строка = ПараметрыЗагрузки.Таблица.Добавить(); + + Для Каждого ОписаниеКолонки Из ПараметрыЗагрузки.ОписаниеКолонок Цикл + + ЗначениеПредставления = Выборка[ОписаниеКолонки.Индекс]; + + Если ПустаяСтрока(ЗначениеПредставления) Тогда + Продолжить; + КонецЕсли; + + Значение = ЗначениеЯчейки(Выборка, + ЗначениеПредставления, + ОписаниеКолонки, + ЗаменяемыеЗначения, + КэшЗначений, + ПараметрыЗагрузки.ПараметрыСоздания); + Строка[ОписаниеКолонки.Имя] = Значение; + + КонецЦикла; + + КонецЦикла; + + Возврат ПараметрыЗагрузки.Таблица; + +КонецФункции + +Функция ЗагрузитьДанныеИзСтроки(ДанныеМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения) + + Разделитель = "|"; + ПараметрыИтератора = ПараметрыИтератора(ДанныеМакета); + + Пока СледующаяСтрока(ПараметрыИтератора) Цикл + + Строка = СокрЛП(ПараметрыИтератора.Строка); + + Если НЕ СтрНачинаетсяС(Строка, Разделитель) Тогда + Продолжить; + КонецЕсли; + + КолонкиМакета = ЮТСтроки.РазделитьСтроку(Строка, Разделитель); + + СледующаяСтрока(ПараметрыИтератора); + Прервать; + + КонецЦикла; + + ПараметрыЗагрузки = ПараметрыЗагрузки(КолонкиМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения); + + Пока СледующаяСтрока(ПараметрыИтератора) Цикл + + Строка = СокрЛП(ПараметрыИтератора.Строка); + + Если ПустаяСтрока(Строка) Тогда + Продолжить; + ИначеЕсли НЕ СтрНачинаетсяС(Строка, Разделитель) Тогда + Прервать; + КонецЕсли; + + СтрокаДанных = ПараметрыЗагрузки.Таблица.Добавить(); + Блоки = ЮТСтроки.РазделитьСтроку(Строка, Разделитель); + + Для Каждого ОписаниеКолонки Из ПараметрыЗагрузки.ОписаниеКолонок Цикл + + ЗначениеПредставления = Блоки[ОписаниеКолонки.Индекс]; + + Если ПустаяСтрока(ЗначениеПредставления) Тогда + Продолжить; + КонецЕсли; + + Значение = ЗначениеЯчейки(Блоки, + ЗначениеПредставления, + ОписаниеКолонки, + ЗаменяемыеЗначения, + КэшЗначений, + ПараметрыЗагрузки.ПараметрыСоздания); + СтрокаДанных[ОписаниеКолонки.Имя] = Значение; + + КонецЦикла; + + КонецЦикла; + + Возврат ПараметрыЗагрузки.Таблица; + +КонецФункции + +Функция ПараметрыИтератора(Источник) + + ПараметрыЧтения = Новый Структура; + + ПараметрыЧтения.Вставить("ИзТекстовогоДокумента", Ложь); + ПараметрыЧтения.Вставить("ИзЧтенияТекста", Ложь); + ПараметрыЧтения.Вставить("ИзВыборки", Ложь); + ПараметрыЧтения.Вставить("ДостиглиКонца", Ложь); + ПараметрыЧтения.Вставить("Строка", Неопределено); + + ТипЗначения = ТипЗнч(Источник); + + Если ТипЗначения = Тип("ТекстовыйДокумент") Тогда + ПараметрыЧтения.ИзТекстовогоДокумента = Истина; + ПараметрыЧтения.Вставить("ТекстовыйДокумент", Источник); + ПараметрыЧтения.Вставить("КоличествоСтрок", Источник.КоличествоСтрок()); + ПараметрыЧтения.Вставить("ИндексСтроки", 0); + ИначеЕсли ТипЗначения = Тип("Строка") Тогда + ПараметрыЧтения.ИзЧтенияТекста = Истина; + Кодировка = КодировкаТекста.UTF8; + Поток = ПолучитьДвоичныеДанныеИзСтроки(Источник, Кодировка).ОткрытьПотокДляЧтения(); + Чтение = Новый ЧтениеТекста(Поток, Кодировка); + ПараметрыЧтения.Вставить("Чтение", Чтение); + ПараметрыЧтения.Вставить("Поток", Поток); + ИначеЕсли ТипЗначения = Тип("ВыборкаДанных") Тогда + ПараметрыЧтения.ИзВыборки = Истина; + ПараметрыЧтения.Вставить("Выборка", Источник); + Иначе + ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("ЗагрузитьИзМакета", "неподдерживаемый источник"); + КонецЕсли; + + Возврат ПараметрыЧтения; + +КонецФункции + +Функция СледующаяСтрока(ПараметрыЧтения) + + Если ПараметрыЧтения.ДостиглиКонца Тогда + ВызватьИсключение "Построчное чтение уже завершено. Обнаружена попытка чтения завершенного потока"; + КонецЕсли; + + Если ПараметрыЧтения.ИзТекстовогоДокумента Тогда + + ЮТОбщий.Инкремент(ПараметрыЧтения.ИндексСтроки); + Если ПараметрыЧтения.ИндексСтроки > ПараметрыЧтения.КоличествоСтрок Тогда + ПараметрыЧтения.ДостиглиКонца = Истина; + Возврат Ложь; + КонецЕсли; + ПараметрыЧтения.Строка = ПараметрыЧтения.ТекстовыйДокумент.ПолучитьСтроку(ПараметрыЧтения.ИндексСтроки); + + ИначеЕсли ПараметрыЧтения.ИзЧтенияТекста Тогда + + ПараметрыЧтения.Строка = ПараметрыЧтения.Чтение.ПрочитатьСтроку(); + + Если ПараметрыЧтения.Строка = Неопределено Тогда + ПараметрыЧтения.Чтение.Закрыть(); + ПараметрыЧтения.Поток.Закрыть(); + ПараметрыЧтения.ДостиглиКонца = Истина; + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ПараметрыЧтения.ИзВыборки Тогда + + Если ПараметрыЧтения.Выборка.Следующий() Тогда + ПараметрыЧтения.Строка = ПараметрыЧтения.Выборка; + Иначе + ПараметрыЧтения.ДостиглиКонца = Истина; + ПараметрыЧтения.Строка = Неопределено; + Возврат Ложь; + КонецЕсли; + + Иначе + ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("ЗагрузитьИзМакета", "Некорректные/неподдерживаемые параметры чтения"); + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ДанныеМакета(Знач Макет) + + ТипПараметра = ТипЗнч(Макет); + ДанныеМакета = Неопределено; + + ПараметрыСодержитДанные = ТипПараметра = Тип("ТабличныйДокумент") + ИЛИ ТипПараметра = Тип("ТекстовыйДокумент") + ИЛИ ТипПараметра = Тип("Строка") И СтрНачинаетсяС(Макет, "|"); + + Если ПараметрыСодержитДанные Тогда + ДанныеМакета = Макет; + ИначеЕсли ТипПараметра = Тип("Строка") Тогда + ДанныеМакета = ЮТОбщийСлужебныйВызовСервера.Макет(Макет); + Иначе + ВызватьИсключение ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.ДанныеМакета", Макет); + КонецЕсли; + + Возврат ДанныеМакета; + +КонецФункции + +Функция ЗначениеЯчейки(СтрокаДанных, ЗначениеПредставления, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания) + + Значение = ЗаменяемыеЗначения[ЗначениеПредставления]; + + КэшироватьЗначение = Значение = Неопределено И ОписаниеКолонки.Менеджер <> Неопределено; + + Если КэшироватьЗначение Тогда + Если КэшЗначений[ОписаниеКолонки.КлючТипаЗначения] = Неопределено Тогда + КэшЗначений.Вставить(ОписаниеКолонки.КлючТипаЗначения, Новый Соответствие()); + Иначе + Значение = КэшЗначений[ОписаниеКолонки.КлючТипаЗначения][ЗначениеПредставления]; + КонецЕсли; + КонецЕсли; + + Если Значение <> Неопределено Тогда + Возврат Значение; + КонецЕсли; + + ЗначенияРеквизитов = ЗначенияРеквизитов(СтрокаДанных, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания); + Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания); + + Если КэшироватьЗначение Тогда + КэшЗначений[ОписаниеКолонки.КлючТипаЗначения].Вставить(ЗначениеПредставления, Значение); + КонецЕсли; + + Возврат Значение; + +КонецФункции + +Процедура ПодготовитьПараметрыЗаполненияТаблицы(КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения, Колонки) + + Если ЗаменяемыеЗначения = Неопределено Тогда + ЗаменяемыеЗначения = Новый Соответствие; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(КэшЗначений) Тогда + КэшЗначений = Новый Соответствие; + КонецЕсли; + + Для Каждого Колонка Из Колонки Цикл + + Если НЕ Колонка.Ссылочный Тогда + Продолжить; + КонецЕсли; + + Если КэшЗначений[Колонка.КлючТипаЗначения] = Неопределено Тогда + КэшЗначений.Вставить(Колонка.КлючТипаЗначения, Новый Соответствие); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ЗначенияРеквизитов(СтрокаТаблицы, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, Параметры) + + ЗначенияРеквизитов = Новый Структура(); + + Для Каждого ОписаниеВложеннойКолонки Из ОписаниеКолонки.ДополнительныеРеквизиты Цикл + + ПредставлениеЗначения = СтрокаТаблицы[ОписаниеВложеннойКолонки.Индекс]; + Если ПустаяСтрока(ПредставлениеЗначения) Тогда + Продолжить; + КонецЕсли; + + Значение = ЗначениеЯчейки(СтрокаТаблицы, ПредставлениеЗначения, ОписаниеВложеннойКолонки, ЗаменяемыеЗначения, КэшЗначений, Параметры); + ЗначенияРеквизитов.Вставить(ОписаниеВложеннойКолонки.Имя, Значение); + + КонецЦикла; + + ОписаниеОбъектаМетаданных = ОписаниеКолонки.ОписаниеОбъектаМетаданных; + + Если ОписаниеОбъектаМетаданных <> Неопределено И ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя = "Справочник" Тогда + ИмяРеквизита = "Наименование"; + Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизита) = Неопределено Тогда + ИмяРеквизита = "Код"; + КонецЕсли; + ЗначенияРеквизитов.Вставить(ИмяРеквизита, СтрокаТаблицы[ОписаниеКолонки.Индекс]); + КонецЕсли; + + Возврат ЗначенияРеквизитов; + +КонецФункции + +Функция ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыЗаписи) + + Если ОписаниеКолонки.ЭтоПеречисление Тогда + Значение = ОписаниеКолонки.Менеджер[ЗначениеПредставления]; + ИначеЕсли ОписаниеКолонки.Ссылочный Тогда + Значение = СоздатьНовуюЗапись(ОписаниеКолонки, ЗначенияРеквизитов, ПараметрыЗаписи); + ИначеЕсли ОписаниеКолонки.ЭтоДата Тогда + Значение = ЮТПреобразованияСлужебный.ПривестиЗначениеКДате(ОписаниеКолонки.ОписаниеТипа, ЗначениеПредставления); + ИначеЕсли ОписаниеКолонки.ЭтоЧисло Тогда + Значение = ЮТПреобразованияСлужебный.ПривестиЗначениеКЧислу(ОписаниеКолонки.ОписаниеТипа, ЗначениеПредставления); + Иначе + Значение = ОписаниеКолонки.ОписаниеТипа.ПривестиЗначение(ЗначениеПредставления); + КонецЕсли; + + Возврат Значение; + +КонецФункции + +Функция СоздатьНовуюЗапись(ОписаниеКолонки, ЗначенияРеквизитов, ПараметрыЗаписи) + + Конструктор = ЮТТестовыеДанные.КонструкторОбъекта(ОписаниеКолонки.Менеджер); + + Если ЗначениеЗаполнено(ЗначенияРеквизитов) Тогда + Для Каждого ДанныеЗначения Из ЗначенияРеквизитов Цикл + Конструктор.Установить(ДанныеЗначения.Ключ, ДанныеЗначения.Значение); + КонецЦикла; + КонецЕсли; + + Если ПараметрыЗаписи.ФикцияОбязательныхПолей Тогда + Конструктор.ФикцияОбязательныхПолей(); + КонецЕсли; + + Возврат Конструктор.Записать( , ПараметрыЗаписи.ПараметрыЗаписи.ОбменДаннымиЗагрузка); + +КонецФункции + +Функция НоваяТаблица(ОписаниеКолонок) + + ТаблицаЗначений = Новый ТаблицаЗначений(); + + Для Каждого ОписаниеКолонки Из ОписаниеКолонок Цикл + ТаблицаЗначений.Колонки.Добавить(ОписаниеКолонки.Имя, ОписаниеКолонки.ОписаниеТипа); + КонецЦикла; + + Возврат ТаблицаЗначений; + +КонецФункции + +Функция ПараметрыЗагрузки(КолонкиМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения) + + ОписаниеКолонок = ОписаниеКолонок(КолонкиМакета, ОписанияТипов); + ПодготовитьПараметрыЗаполненияТаблицы(КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения, ОписаниеКолонок); + ПараметрыСоздания = ПараметрыЗаполнения.СозданиеОбъектовМетаданных; + + ТаблицаЗначений = НоваяТаблица(ОписаниеКолонок); + + ПараметрыЗагрузки = Новый Структура; + + ПараметрыЗагрузки.Вставить("ОписаниеКолонок", ОписаниеКолонок); + ПараметрыЗагрузки.Вставить("ПараметрыСоздания", ПараметрыСоздания); + ПараметрыЗагрузки.Вставить("Таблица", ТаблицаЗначений); + + Возврат ПараметрыЗагрузки; + +КонецФункции + +#Область ОписаниеКолонок + +Функция ОписаниеКолонок(КолонкиМакета, ОписанияТипов) + + ОсновныеКолонки = ОсновныеКолонкиМакета(КолонкиМакета); + + Для Каждого Элемент Из ОписанияТипов Цикл + + Если НЕ ОсновныеКолонки.Свойство(Элемент.Ключ) Тогда + + Сообщение = СтрШаблон("Макет не содержит колонку `%1`", Элемент.Ключ); + ВызватьИсключение Сообщение; + + КонецЕсли; + + КонецЦикла; + + Если ТипЗнч(ОписанияТипов) = Тип("Структура") Тогда + ОписанияТипов = ЮТКоллекции.ВСоответствие(ОписанияТипов, "Ключ", "Значение"); + КонецЕсли; + + ЗагружаемыеКолонки = Новый Массив(); + + Для Каждого Элемент Из ОсновныеКолонки Цикл + + ОписаниеТиповКолонки = ОписанияТипов[Элемент.Ключ]; + + Если ОписаниеТиповКолонки = Неопределено Тогда + Продолжить; + КонецЕсли; + + ОсновнаяКолонка = Элемент.Значение; + ЗагружаемыеКолонки.Добавить(ОсновнаяКолонка); + + ОсновнаяКолонка.ОписаниеТипа = ОписаниеТиповКолонки; + ДозаполнитьОписаниеКолонки(ОсновнаяКолонка); + + ДополнительныеКолонки = ОсновнаяКолонка.ДополнительныеРеквизиты; + ОсновнаяКолонка.ДополнительныеРеквизиты = Новый Массив(); + + Для Каждого ВложеннаяКолонка Из ДополнительныеКолонки Цикл + + ВложеннаяКолонка.ОписаниеТипа = ОписаниеТипаВложеннойКолонки(ОписанияТипов, ОсновнаяКолонка, ВложеннаяКолонка); + + Если ВложеннаяКолонка.ОписаниеТипа = Неопределено Тогда + Продолжить; + КонецЕсли; + + ОсновнаяКолонка.ДополнительныеРеквизиты.Добавить(ВложеннаяКолонка); + ДозаполнитьОписаниеКолонки(ВложеннаяКолонка); + + КонецЦикла; + + ОсновнаяКолонка.Составное = ЗначениеЗаполнено(ОсновнаяКолонка.ДополнительныеРеквизиты); + + КонецЦикла; + + Возврат ЗагружаемыеКолонки; + +КонецФункции + +Функция ОписаниеТипаВложеннойКолонки(ОписанияТипов, ОсновнаяКолонка, ВложеннаяКолонка) + + ПолноеИмя = СтрШаблон("%1.%2", ОсновнаяКолонка.Имя, ВложеннаяКолонка.Имя); + ОписаниеТипа = ОписанияТипов[ПолноеИмя]; + + Если ОписаниеТипа = Неопределено Тогда + Реквизиты = ОсновнаяКолонка.ОписаниеОбъектаМетаданных.Реквизиты; + + Если Реквизиты.Свойство(ВложеннаяКолонка.Имя) Тогда + ОписаниеТипа = Реквизиты[ВложеннаяКолонка.Имя].Тип; + КонецЕсли; + КонецЕсли; + + Возврат ОписаниеТипа; + +КонецФункции + +Функция ОписаниеКолонки(Индекс) + + ОписаниеКолонки = Новый Структура; + ОписаниеКолонки.Вставить("Индекс", Индекс); + ОписаниеКолонки.Вставить("Имя", ""); + + ОписаниеКолонки.Вставить("ОписаниеТипа", Неопределено); + ОписаниеКолонки.Вставить("ТипЗначения", Неопределено); + ОписаниеКолонки.Вставить("Ссылочный", Ложь); + ОписаниеКолонки.Вставить("ДополнительныеРеквизиты", Новый Массив()); + ОписаниеКолонки.Вставить("Составное", Ложь); + ОписаниеКолонки.Вставить("Менеджер", Неопределено); + ОписаниеКолонки.Вставить("КлючТипаЗначения", Неопределено); + ОписаниеКолонки.Вставить("ОписаниеОбъектаМетаданных", Неопределено); + ОписаниеКолонки.Вставить("ЭтоПеречисление", Ложь); + ОписаниеКолонки.Вставить("ЭтоЧисло", Ложь); + ОписаниеКолонки.Вставить("ЭтоДата", Ложь); + + Возврат ОписаниеКолонки; + +КонецФункции + +Функция ОсновныеКолонкиМакета(КолонкиМакета) + + ОсновныеКолонки = Новый Структура(); + + ВторойУровеньВложенности = 2; + + // Сначала соберем основные колонки + Для Инд = 0 По КолонкиМакета.ВГраница() Цикл + + ИмяКолонки = КолонкиМакета[Инд]; + ЧастиИмени = СтрРазделить(ИмяКолонки, "."); + + Если ПустаяСтрока(ИмяКолонки) ИЛИ ЧастиИмени.Количество() = ВторойУровеньВложенности Тогда + Продолжить; + ИначеЕсли ЧастиИмени.Количество() > ВторойУровеньВложенности Тогда + Сообщение = СтрШаблон("Некорректное имя колонки макета `%1`, доступно использовать максимум 1 уровень вложенности", ИмяКолонки); + ВызватьИсключение Сообщение; + Иначе + ОписаниеКолонки = ОписаниеКолонки(Инд); + ОписаниеКолонки.Имя = ИмяКолонки; + + ОсновныеКолонки.Вставить(ИмяКолонки, ОписаниеКолонки); + КонецЕсли; + + КонецЦикла; + + Для Инд = 0 По КолонкиМакета.ВГраница() Цикл + + ЧастиИмени = СтрРазделить(КолонкиМакета[Инд], "."); + + Если ЧастиИмени.Количество() <> ВторойУровеньВложенности Тогда + Продолжить; + КонецЕсли; + + Если НЕ ОсновныеКолонки.Свойство(ЧастиИмени[0]) Тогда + Сообщение = СтрШаблон("Для колонки `%1` не найдена в макете основная колонка с именем `%2`", ИмяКолонки, ЧастиИмени[0]); + ВызватьИсключение Сообщение; + КонецЕсли; + + ОсновнаяКолонка = ОсновныеКолонки[ЧастиИмени[0]]; + ОписаниеКолонки = ОписаниеКолонки(Инд); + ОписаниеКолонки.Имя = ЧастиИмени[1]; + + ОсновнаяКолонка.ДополнительныеРеквизиты.Добавить(ОписаниеКолонки); + + КонецЦикла; + + Возврат ОсновныеКолонки; + +КонецФункции + +Процедура ДозаполнитьОписаниеКолонки(ОписаниеКолонки) + + ТипЗначения = ОписаниеКолонки.ОписаниеТипа.Типы()[0]; + ОписаниеКолонки.ТипЗначения = ТипЗначения; + + ОписаниеКолонки.Ссылочный = ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения); + ОписаниеКолонки.ЭтоЧисло = ТипЗначения = Тип("Число"); + ОписаниеКолонки.ЭтоДата = ТипЗначения = Тип("Дата"); + + Если ОписаниеКолонки.Ссылочный Тогда + ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипЗначения); + ОписаниеКолонки.ЭтоПеречисление = ЮТМетаданные.ЭтоПеречисление(ОписаниеКолонки.ОписаниеОбъектаМетаданных); + ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ОписаниеОбъектаМетаданных); + ОписаниеКолонки.КлючТипаЗначения = ЮТТипыДанныхСлужебный.ИдентификаторТипа(ТипЗначения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТесты.xml b/src/cfe/YAXUnit/CommonModules/ЮТТесты.xml new file mode 100644 index 0000000..e687646 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТесты.xml @@ -0,0 +1,23 @@ + + + + + ЮТТесты + + + ru + Регистрация тестов + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТесты/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТТесты/Ext/Module.bsl new file mode 100644 index 0000000..4ab119a --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТесты/Ext/Module.bsl @@ -0,0 +1,353 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +///////////////////////////////////////////////////////////////////////////////// +// Содержит методы создания тестов и тестовых наборов +///////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Создает и регистрирует тестовый набор, в который будут добавляться последующие тесты +// Параметры: +// Имя - Строка - Имя набора тестов +// ТегиСтрокой - Строка - Теги относящиеся к набору и вложенным тестам. Это строка разделенная запятыми +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция ДобавитьТестовыйНабор(Имя, ТегиСтрокой = "") Экспорт + + ЮТТестыСлужебный.ДобавитьТестовыйНабор(Имя, ТегиСтрокой); + + Возврат ЮТТесты; + +КонецФункции + +// Регистрирует тест, исполняемый в контекстах, в которых доступен тестовый модуль. +// Например +// +// * Если модуль с тестами клиент-серверный, то тест будет вызван и на клиенте и на сервере. +// * Если клиентский, то только на клиенте. +// * Если клиент обычное приложение, то только при запуске в режиме обычного приложения. +// +// Параметры: +// ИмяТестовогоМетода - Строка - Имя тестового метода +// ПредставлениеТеста - Строка - Представление теста +// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми +// Контексты - Строка - Контексты, строка перечисления контекстов вызова, разделенных запятой. +// Возможные значения см. ЮТФабрика.КонтекстыВызова +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "", Контексты = Неопределено) Экспорт + + ЮТТестыСлужебный.ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты); + + Возврат ЮТТесты; + +КонецФункции + +// Регистрирует тест исполняемый на клиенте. +// +// Параметры: +// ИмяТестовогоМетода - Строка - Имя тестового метода +// ПредставлениеТеста - Строка - Представление теста +// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция ДобавитьКлиентскийТест(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "") Экспорт + + ЮТТестыСлужебный.ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, ЮТТестыСлужебный.КонтекстыВызоваКлиента()); + + Возврат ЮТТесты; + +КонецФункции + +// Регистрирует тест исполняемый на сервере. +// +// Параметры: +// ИмяТестовогоМетода - Строка - Имя тестового метода +// ПредставлениеТеста - Строка - Представление теста +// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция ДобавитьСерверныйТест(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "") Экспорт + + КонтекстыВызова = ЮТФабрика.КонтекстыВызова(); + ЮТТестыСлужебный.ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, КонтекстыВызова.Сервер); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает настройку выполнения тестового метода. +// +// Параметры: +// ИмяПараметра - Строка +// Значение - Произвольный - Значение настройки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция НастройкаИсполнения(ИмяПараметра, Значение) Экспорт + + ЮТТестыСлужебный.НастройкаИсполнения(ИмяПараметра, Значение); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает настройку выполнения тестового метода в транзакции. +// +// Параметры: +// ВыполнятьВТранзакции - Булево +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция ВТранзакции(ВыполнятьВТранзакции = Истина) Экспорт + + ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции, ВыполнятьВТранзакции); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает настройку удаления созданных тестовых данных +// В отличии от использования транзакции: +// +// * Умеет работать с данными созданными на клиенте +// * Только удаляет созданные данные и не откатывает изменения объектов +// * Работает с данными созданными через API работы с тестовыми данными +// * Удаляет данные созданные вне теста (в обработчиках событий, например, ПередВсемиТестами и ПередТестовымНабором) +// +// Параметры: +// УдалятьСозданныеДанные - Булево +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция УдалениеТестовыхДанных(УдалятьСозданныеДанные = Истина) Экспорт + + ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает настройку переопределения обработчика события Перед... +// +// Параметры: +// ВыполнитьПеред - Строка - Имя обработчика события, который будет выполнен вместо основного +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция Перед(ВыполнитьПеред = "") Экспорт + + ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает настройку переопределения обработчика события После... +// +// Параметры: +// ВыполнитьПосле - Строка - Имя обработчика события, который будет выполнен вместо основного +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция После(ВыполнитьПосле = "") Экспорт + + ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает параметры вызова теста. +// +// * Если метод вызывается первый раз, то он устанавливает параметры теста. +// * Если второй и последующие, то добавляет новый тест с параметрами. +// +// Параметры: +// Параметр1 - Произвольный +// Параметр2 - Произвольный +// Параметр3 - Произвольный +// Параметр4 - Произвольный +// Параметр5 - Произвольный +// Параметр6 - Произвольный +// Параметр7 - Произвольный +// Параметр8 - Произвольный +// Параметр9 - Произвольный +// Параметр10 - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +// +// Примеры: +// +// ЮТТесты.ДобавитьТест("Тест1").СПараметрами(1, 2); // Будет зарегистрирован один тест с параметрами 1, 2 +// ЮТТесты.ДобавитьТест("Тест1") +// .СПараметрами(1) +// .СПараметрами(2); // Будет зарегистрировано два теста, первый с параметром 1 и второй с параметром 2 +// +//@skip-check method-too-many-params +Функция СПараметрами(Параметр1 = "_!%*", + Параметр2 = "_!%*", + Параметр3 = "_!%*", + Параметр4 = "_!%*", + Параметр5 = "_!%*", + Параметр6 = "_!%*", + Параметр7 = "_!%*", + Параметр8 = "_!%*", + Параметр9 = "_!%*", + Параметр10 = "_!%*") Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(Параметр1, + Параметр2, + Параметр3, + Параметр4, + Параметр5, + Параметр6, + Параметр7, + Параметр8, + Параметр9, + Параметр10); + + ЮТТестыСлужебный.СПараметрами(Параметры, Неопределено); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает параметры вызова теста и новый контекст исполнения (клиентский). +// +// * Если метод вызывается первый раз, то он устанавливает параметры теста. +// * Если второй и последующие, то добавляет новый тест с параметрами. +// +// Параметры: +// Параметр1 - Произвольный +// Параметр2 - Произвольный +// Параметр3 - Произвольный +// Параметр4 - Произвольный +// Параметр5 - Произвольный +// Параметр6 - Произвольный +// Параметр7 - Произвольный +// Параметр8 - Произвольный +// Параметр9 - Произвольный +// Параметр10 - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +// +//@skip-check method-too-many-params +Функция СПараметрамиНаКлиенте(Параметр1 = "_!%*", + Параметр2 = "_!%*", + Параметр3 = "_!%*", + Параметр4 = "_!%*", + Параметр5 = "_!%*", + Параметр6 = "_!%*", + Параметр7 = "_!%*", + Параметр8 = "_!%*", + Параметр9 = "_!%*", + Параметр10 = "_!%*") Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(Параметр1, + Параметр2, + Параметр3, + Параметр4, + Параметр5, + Параметр6, + Параметр7, + Параметр8, + Параметр9, + Параметр10); + + ЮТТестыСлужебный.СПараметрами(Параметры, ЮТТестыСлужебный.КонтекстыВызоваКлиента()); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает параметры вызова теста и новый контекст исполнения (серверный). +// +// * Если метод вызывается первый раз, то он устанавливает параметры теста. +// * Если второй и последующие, то добавляет новый тест с параметрами. +// +// Параметры: +// Параметр1 - Произвольный +// Параметр2 - Произвольный +// Параметр3 - Произвольный +// Параметр4 - Произвольный +// Параметр5 - Произвольный +// Параметр6 - Произвольный +// Параметр7 - Произвольный +// Параметр8 - Произвольный +// Параметр9 - Произвольный +// Параметр10 - Произвольный +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +// +//@skip-check method-too-many-params +Функция СПараметрамиНаСервере(Параметр1 = "_!%*", + Параметр2 = "_!%*", + Параметр3 = "_!%*", + Параметр4 = "_!%*", + Параметр5 = "_!%*", + Параметр6 = "_!%*", + Параметр7 = "_!%*", + Параметр8 = "_!%*", + Параметр9 = "_!%*", + Параметр10 = "_!%*") Экспорт + + Параметры = ЮТКоллекции.ЗначениеВМассиве(Параметр1, + Параметр2, + Параметр3, + Параметр4, + Параметр5, + Параметр6, + Параметр7, + Параметр8, + Параметр9, + Параметр10); + + КонтекстыВызова = ЮТФабрика.КонтекстыВызова(); + ЮТТестыСлужебный.СПараметрами(Параметры, КонтекстыВызова.Сервер); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает представление объекта, может использоваться как для теста, так и для набора. +// +// Параметры: +// Представление - Строка +// ИспользуяИмя - Булево - Необходимо ли использовать имя объекта при формировании представления. +// Ложь - По умолчанию, представление будет установлено по параметру. +// Истина - Новое представление объекта = `<ИмяОбъект>. <Параметр Представление>` +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль +Функция Представление(Представление, ИспользуяИмя = Ложь) Экспорт + + ЮТТестыСлужебный.УстановитьПредставление(Представление, ИспользуяИмя); + + Возврат ЮТТесты; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестыСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТТестыСлужебный.xml new file mode 100644 index 0000000..e0c7995 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестыСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТТестыСлужебный + + + ru + Тесты служебный + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТестыСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТТестыСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..c42d9c7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТестыСлужебный/Ext/Module.bsl @@ -0,0 +1,287 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ДобавитьТестовыйНабор(Имя, ТегиСтрокой) Экспорт + + ИсполняемыеСценарии = СценарииМодуля(); + + Если НЕ ЭтоИсполняемыеСценарии(ИсполняемыеСценарии) Тогда + ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии"; + КонецЕсли; + + Если ПустаяСтрока(Имя) Тогда + ВызватьИсключение "Имя тестового набора не может быть пустым"; + КонецЕсли; + + Контекст = Контекст(); + НовыйТестовыйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, ТегиСтрокой); + + ИсполняемыеСценарии.ТестовыеНаборы.Добавить(НовыйТестовыйНабор); + Контекст.ТекущийНабор = НовыйТестовыйНабор; + Контекст.ТекущийЭлемент = НовыйТестовыйНабор; + +КонецПроцедуры + +Процедура ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты) Экспорт + + Контекст = Контекст(); + Набор = Контекст.ТекущийНабор; + + ЭтоИсполняемыеСценарии = ЭтоИсполняемыеСценарии(Набор); + ЭтоТестовыйНабор = ЭтоТестовыйНабор(Набор); + + Если НЕ (ЭтоИсполняемыеСценарии ИЛИ ЭтоТестовыйНабор) Тогда + ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии или ЮТТесты.ТестовыйНабор"; + КонецЕсли; + + Если ПустаяСтрока(ИмяТестовогоМетода) Тогда + ВызватьИсключение "Имя тестового метода не может быть пустым"; + КонецЕсли; + + Тест = ОписаниеТеста(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты); + ДобавитьТестВНабор(Контекст, Тест, Ложь); + +КонецПроцедуры + +Процедура ДобавитьКлиентскийТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой) Экспорт + + ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, КонтекстыВызоваКлиента()); + +КонецПроцедуры + +Процедура ДобавитьСерверныйТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой) Экспорт + + Режимы = ЮТФабрика.КонтекстыВызова(); + + ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Режимы.Сервер); + +КонецПроцедуры + +Процедура НастройкаИсполнения(ИмяПараметра, Значение) Экспорт + + Контекст = Контекст(); + + Если Контекст.ТекущийЭлемент = Неопределено Тогда + ВызватьИсключение "Не инициализированы настройки регистрации тестов"; + КонецЕсли; + + Контекст.ТекущийЭлемент.НастройкиВыполнения.Вставить(ИмяПараметра, Значение); + +КонецПроцедуры + +Процедура СПараметрами(Параметры, Знач НовыеКонтексты) Экспорт + + Контекст = Контекст(); + + Если Контекст.ТекущийЭлемент = Неопределено Тогда + ВызватьИсключение "Не инициализированы настройки регистрации тестов"; + ИначеЕсли НЕ ЭтоОписаниеТеста(Контекст.ТекущийЭлемент) Тогда + ВызватьИсключение "Параметры устанавливаются только для теста"; + КонецЕсли; + + ЭтоПервыйВызовСПараметрами = Контекст.ТекущийЭлемент.Параметры = Неопределено; + УстановитьНовыйКонтекст = ЗначениеЗаполнено(НовыеКонтексты); + + Если ЭтоПервыйВызовСПараметрами Тогда + Контекст.БазовыйТест = ЮТКоллекции.СкопироватьСтруктуру(Контекст.ТекущийЭлемент); + КонецЕсли; + + Если УстановитьНовыйКонтекст Тогда + НормализованныеКонтексты = НормализованныеКонтексты(НовыеКонтексты); + НовыеКонтексты = ЮТКоллекции.ПересечениеМассивов(Контекст.БазовыйТест.КонтекстВызова, НормализованныеКонтексты); + + Если НЕ ЗначениеЗаполнено(НовыеКонтексты) Тогда + ВызватьИсключение СтрШаблон("Не пересекаются контексты базового теста %1 и устанавливаемые %2", + ЮТКоллекции.ПредставлениеМассива(Контекст.БазовыйТест.КонтекстВызова), + ЮТКоллекции.ПредставлениеМассива(НормализованныеКонтексты)); + КонецЕсли; + КонецЕсли; + + Если НЕ ЭтоПервыйВызовСПараметрами Тогда + НоваяНастройка = ЮТКоллекции.СкопироватьСтруктуру(Контекст.БазовыйТест); + ДобавитьТестВНабор(Контекст, НоваяНастройка, Истина); + КонецЕсли; + + Контекст.ТекущийЭлемент.Параметры = Параметры; + + Если УстановитьНовыйКонтекст Тогда + Контекст.ТекущийЭлемент.КонтекстВызова = НовыеКонтексты; + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьПредставление(Представление, ИспользуяИмя) Экспорт + + ТекущийЭлемент = Контекст().ТекущийЭлемент; + Если ИспользуяИмя Тогда + ТекущийЭлемент.Представление = СтрШаблон("%1. %2", ТекущийЭлемент.Имя, Представление); + Иначе + ТекущийЭлемент.Представление = Представление; + КонецЕсли; + +КонецПроцедуры + +Функция КонтекстыВызоваКлиента() Экспорт + + Режимы = ЮТФабрика.КонтекстыВызова(); + Возврат ЮТКоллекции.ЗначениеВМассиве(Режимы.КлиентУправляемоеПриложение, Режимы.КлиентОбычноеПриложение); + +КонецФункции + +// Описание сценариев модуля +// +// Возвращаемое значение: +// Структура - см. ИсполняемыеСценарии +Функция СценарииМодуля() Экспорт + + Возврат Контекст().ИсполняемыеСценарии; + +КонецФункции + +Функция Контекст() Экспорт + + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("КонтекстРегистрацияТестов"); + +КонецФункции + +#Область ОбработчикиСобытий + +Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт + + ИнициализироватьКонтекст(МетаданныеМодуля); + ЮТСобытияСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля); + +КонецПроцедуры + +Процедура ПослеЧтенияСценариевМодуля() Экспорт + + Контекст = Контекст(); + ЮТСобытияСлужебный.ПослеЧтенияСценариевМодуля(Контекст.МетаданныеМодуля, Контекст.ИсполняемыеСценарии); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Исполняемые сценарии. +// +// Параметры: +// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// +// Возвращаемое значение: +// Структура - Исполняемые сценарии: +// * ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы модуля +// * НастройкиВыполнения- Структура - Настройки исполнения теста +Функция ИсполняемыеСценарии(МетаданныеМодуля) + + Структура = Новый Структура; + Структура.Вставить("ТестовыеНаборы", Новый Массив()); + Структура.Вставить("НастройкиВыполнения", Новый Структура()); + + Набор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя); + Набор.НастройкиВыполнения = Структура.НастройкиВыполнения; // Общие настройки с набором по умолчанию + Структура.ТестовыеНаборы.Добавить(Набор); + + Возврат Структура; + +КонецФункции + +Функция КонтекстыВызоваПоУмолчанию() + + Возврат ЮТФабрикаСлужебный.КонтекстыМодуля(Контекст().МетаданныеМодуля); + +КонецФункции + +Функция ОписаниеТеста(Имя, Знач Представление, ТегиСтрокой, Знач Контексты) + + Контексты = НормализованныеКонтексты(Контексты); + + Возврат ЮТФабрикаСлужебный.ОписаниеТеста(Имя, Представление, Контексты, ТегиСтрокой); + +КонецФункции + +Функция ЭтоИсполняемыеСценарии(ИсполняемыеСценарии) + + Возврат ТипЗнч(ИсполняемыеСценарии) = Тип("Структура") + И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ИсполняемыеСценарии, "ТестовыеНаборы")) = Тип("Массив"); + +КонецФункции + +Функция ЭтоТестовыйНабор(ТестовыйНабор) + + Возврат ТипЗнч(ТестовыйНабор) = Тип("Структура") + И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты")) = Тип("Массив"); + +КонецФункции + +Функция ЭтоОписаниеТеста(Описание) + + Возврат ТипЗнч(Описание) = Тип("Структура") + И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(Описание, "КонтекстВызова")) = Тип("Массив"); + +КонецФункции + +Процедура ДобавитьТестВНабор(Контекст, Тест, ЭтоКопия) + + Если НЕ ЭтоКопия Тогда + Контекст.БазовыйТест = Неопределено; + КонецЕсли; + + Контекст.ТекущийНабор.Тесты.Добавить(Тест); + Контекст.ТекущийЭлемент = Тест; + Тест.НомерВНаборе = Контекст.ТекущийНабор.Тесты.Количество(); + +КонецПроцедуры + +Процедура ИнициализироватьКонтекст(МетаданныеМодуля) + + ИсполняемыеСценарии = ИсполняемыеСценарии(МетаданныеМодуля); + Набор = ИсполняемыеСценарии.ТестовыеНаборы[0]; + + Контекст = Новый Структура(); + + Контекст.Вставить("МетаданныеМодуля", МетаданныеМодуля); + Контекст.Вставить("ИсполняемыеСценарии", ИсполняемыеСценарии); + Контекст.Вставить("ТекущийНабор", Набор); + Контекст.Вставить("ТекущийЭлемент", Набор); + Контекст.Вставить("БазовыйТест", Неопределено); + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("КонтекстРегистрацияТестов", Контекст); + +КонецПроцедуры + +Функция НормализованныеКонтексты(ПараметрКонтексты) + + Если НЕ ЗначениеЗаполнено(ПараметрКонтексты) Тогда + Контексты = КонтекстыВызоваПоУмолчанию(); + ИначеЕсли ТипЗнч(ПараметрКонтексты) = Тип("Строка") Тогда + Контексты = СтрРазделить(ПараметрКонтексты, ", ", Ложь); + Иначе + Контексты = ПараметрКонтексты; + КонецЕсли; + + Возврат Контексты; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТипыДанныхСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТТипыДанныхСлужебный.xml new file mode 100644 index 0000000..b6cb6fa --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТипыДанныхСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТТипыДанныхСлужебный + + + ru + Типы данных + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТТипыДанныхСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТТипыДанныхСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..edffc9f --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТТипыДанныхСлужебный/Ext/Module.bsl @@ -0,0 +1,231 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПредставлениеТипа(Тип) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа"); +#Иначе + Возврат ИдентификаторТипа(Тип); +#КонецЕсли + +КонецФункции + +Функция ИдентификаторТипа(Тип) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа"); +#Иначе + ЮТПроверкиСлужебный.ПроверитьТипПараметра(Тип, Тип("Тип"), "ЮТТипыДанныхСлужебный.ИдентификаторТипа", "Тип"); + + Если Тип = Тип("Дата") Тогда + ИдентификаторТипа = "date"; + ИначеЕсли Тип = Тип("Число") Тогда + ИдентификаторТипа = "number"; + Иначе + //@skip-check Undefined variable + ИмяТипаСПространствомИмен = СериализаторXDTO.ЗаписатьXDTO(Тип).ЛексическоеЗначение; + ИдентификаторТипа = СтрРазделить(ИмяТипаСПространствомИмен, "}")[1]; + КонецЕсли; + + Возврат ИдентификаторТипа; +#КонецЕсли + +КонецФункции + +Функция ТипПоИдентификатору(ИдентификаторТипа) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа"); +#Иначе + Возврат Тип(ИдентификаторТипа); +#КонецЕсли + +КонецФункции + +Функция ЭтоСсылочныйТип(Тип) Экспорт + + Возврат Тип <> Неопределено И ОписаниеТиповЛюбаяСсылка().СодержитТип(Тип); + +КонецФункции + +Функция ЭтоМенеджерЗаписи(ТипЗначения) Экспорт + + ПредставлениеТипа = ПредставлениеТипа(ТипЗначения); + Возврат СтрНайти(ПредставлениеТипа, "RecordManager.") > 0; + +КонецФункции + +Функция ЭтоТипОбъекта(ТипЗначения) Экспорт + + ПредставлениеТипа = ПредставлениеТипа(ТипЗначения); + Возврат СтрНайти(ПредставлениеТипа, "Object.") > 0; + +КонецФункции + +Функция ЭтоТипНабораЗаписей(ТипЗначения) Экспорт + + ПредставлениеТипа = ПредставлениеТипа(ТипЗначения); + Возврат СтрНайти(ПредставлениеТипа, "RecordSet.") > 0; + +КонецФункции + +Функция ЭтоТипОбъектаОбработкиОтчета(ТипЗначения) Экспорт + + ПредставлениеТипа = ПредставлениеТипа(ТипЗначения); + Возврат СтрНачинаетсяС(ПредставлениеТипа, "DataProcessorObject.") Или СтрНачинаетсяС(ПредставлениеТипа, "ReportObject."); + +КонецФункции + +Функция ЭтоТипМенеджера(ТипЗначения) Экспорт + + ПредставлениеТипа = ПредставлениеТипа(ТипЗначения); + Возврат СтрНайти(ПредставлениеТипа, "Manager.") > 0; + +КонецФункции + +Функция ТипОбъектаСсылки(ТипСсылки) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТТипыДанныхСлужебный.ТипОбъектаСсылки"); +#Иначе + ТипXML = СериализаторXDTO.XMLТип(ТипСсылки); + ИмяТипа = СтрЗаменить(ТипXML.ИмяТипа, "Ref.", "Object."); + + Возврат СериализаторXDTO.ИзXMLТипа(ИмяТипа, ТипXML.URIПространстваИмен); +#КонецЕсли + +КонецФункции + +Функция ЭтоТипПеречисления(ТипЗначения) Экспорт + + ПредставлениеТипа = ПредставлениеТипа(ТипЗначения); + Возврат СтрНачинаетсяС(ПредставлениеТипа, "EnumRef."); + +КонецФункции + +Функция ОписаниеТиповЛюбаяСсылка() Экспорт + + Возврат ЮТСлужебныйПовторногоИспользования.ОписаниеТиповЛюбаяСсылка(); + +КонецФункции + +#Область СистемныеПеречисления + +Функция ЭтоСистемноеПеречисление(Тип) Экспорт + + Возврат ТипыСистемныхПеречислений().СодержитТип(Тип); + +КонецФункции + +Функция ТипыСистемныхПеречислений() Экспорт + + Возврат Новый ОписаниеТипов( + "ВидДвиженияБухгалтерии, + |ВидДвиженияНакопления, + |ВидПериодаРегистраРасчета, + |ВидСчета, + |ВидТочкиМаршрутаБизнесПроцесса, + |ИспользованиеГруппИЭлементов, + |ИспользованиеСреза, + |ИспользованиеРежимаПроведения, + |РежимАвтоВремя, + |РежимЗаписиДокумента, + |РежимПроведенияДокумента, + |ПериодичностьАгрегатаРегистраНакопления, + |ИспользованиеАгрегатаРегистраНакопления"); + +КонецФункции + +Функция ИмяСистемногоПеречисления(Тип) Экспорт + + Возврат Строка(Тип); + +КонецФункции + +Функция ЭтоКоллекцияПримитивныхТипов(Типы) Экспорт + + Для Каждого Тип Из Типы Цикл + + Если НЕ ЭтоПримитивныйТип(Тип) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ЭтоПримитивныйТип(Тип) Экспорт + + ПримитивныеТипы = ЮТСлужебныйПовторногоИспользования.ПримитивныеТипы(); + + ТипПараметра = ТипЗнч(Тип); + + Если ТипПараметра = Тип("Тип") Тогда + Возврат ПримитивныеТипы.Найти(Тип) <> Неопределено; + КонецЕсли; + + Для Каждого Тип Из Тип.Типы() Цикл + + Если ПримитивныеТипы.Найти(Тип) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +#КонецОбласти + +Функция ЭтоСтруктура(ТипЗначения) Экспорт + + Возврат ТипЗначения = Тип("Структура") + Или ТипЗначения = Тип("ФиксированнаяСтруктура"); + +КонецФункции + +Функция ЭтоМассива(ТипЗначения) Экспорт + + Возврат ТипЗначения = Тип("Массив") + Или ТипЗначения = Тип("ФиксированныйМассив"); + +КонецФункции + +Функция ЭтоСоответствие(ТипЗначения) Экспорт + + Возврат ТипЗначения = Тип("Соответствие") + Или ТипЗначения = Тип("ФиксированноеСоответствие"); + +КонецФункции + +Функция ЭтоКлючЗначение(ТипЗначения) Экспорт + + Возврат ТипЗначения = Тип("Структура") + Или ТипЗначения = Тип("ФиксированнаяСтруктура") + Или ТипЗначения = Тип("Соответствие") + Или ТипЗначения = Тип("ФиксированноеСоответствие"); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТУтверждения.xml b/src/cfe/YAXUnit/CommonModules/ЮТУтверждения.xml new file mode 100644 index 0000000..6f140b7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТУтверждения.xml @@ -0,0 +1,23 @@ + + + + + ЮТУтверждения + + + ru + Утверждения + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТУтверждения/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТУтверждения/Ext/Module.bsl new file mode 100644 index 0000000..03d1d7e --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТУтверждения/Ext/Module.bsl @@ -0,0 +1,1945 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +// Инициализирует модуль для проверки утверждений. +// +// * Запоминает проверяемое значение. +// * Запоминает описание. +// * Сбрасывает настройки предыдущих утверждений. +// +// Утверждения формируются методами этого модуля. +// +// Параметры: +// ПроверяемоеЗначение - Произвольный - Проверяемое фактическое значение +// Сообщение - Строка - Описание проверки, которое будет выведено при возникновении ошибки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +// Примеры +// ЮТУтверждения.Что(...).ЭтоИстина(...); +// +Функция Что(Знач ПроверяемоеЗначение, Знач Сообщение = "") Экспорт + + Контекст = НовыйКонтекстУтверждения(ПроверяемоеЗначение); + + Контекст.ОбъектПроверки.Значение = ПроверяемоеЗначение; + Контекст.ПрефиксОшибки = Сообщение; + + СброситьКонтекст(); + ЮТКонтекстСлужебный.УстановитьКонтекстУтверждений(Контекст); + + Возврат ЮТУтверждения; + +КонецФункции + +// Запоминает описание метода (имя и параметры) для последующей проверки. +// +// Параметры: +// ИмяМетода - Строка - Наименование метода +// ПараметрыМетода - Массив из Произвольный - Параметры вызываемого метода +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Метод(Знач ИмяМетода, Знач ПараметрыМетода = Неопределено) Экспорт + + Контекст = Контекст(); + + ПроверитьТипЗначения(Контекст, ИмяМетода, "Строка", "имени метода", Истина); + ПроверитьТипЗначения(Контекст, ПараметрыМетода, "Массив", "параметров метода", Истина); + + Контекст = Контекст(); + Контекст.ИмяМетода = ИмяМетода; + Контекст.ПараметрыМетода = ПараметрыМетода; + + Возврат ЮТУтверждения; + +КонецФункции + +// Добавляет параметр метода для последующего вызова метода и проверки. +// +// Параметры: +// ЗначениеПараметра - Произвольный - Параметр вызываемого метода +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Параметр(Знач ЗначениеПараметра) Экспорт + + Контекст = Контекст(); + + Если НЕ ЗначениеЗаполнено(Контекст.ИмяМетода) Тогда + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения("Перед установкой параметров нужно указать метод", Контекст); + КонецЕсли; + + Если Контекст.ПараметрыМетода = Неопределено Тогда + Контекст.ПараметрыМетода = ЮТКоллекции.ЗначениеВМассиве(ЗначениеПараметра); + Иначе + Контекст.ПараметрыМетода.Добавить(ЗначениеПараметра); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Устанавливает описание проверяемого объекта. +// +// Параметры: +// Представление - Строка - Представление +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеющееПредставление(Представление) Экспорт + + Контекст().ОбъектПроверки.Представление = Представление; + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет наличие свойства и запоминает его для последующих проверок. +// +// Важно, следующие проверки будут относится к этому свойству. +// Для переключения на проверки объекта можно воспользоваться методом см. Объект. +// +// Параметры: +// ИмяСвойства - Строка - Наименование свойства объекта. +// Возможно обращение к вложенным свойствам через точку +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Свойство(Знач ИмяСвойства, Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + Контекст.ОбъектПроверки.ИмяСвойства = Неопределено; // Очищаем для формирования корректного сообщения об ошибке + + Путь = НормализованныйПутьКСвойству(Контекст.ОбъектПроверки.Значение, ИмяСвойства, Истина); + + Контекст.ОбъектПроверки.ИмяСвойства = ИмяСвойства; + Контекст.НормализованныйПутьКСвойству = Путь; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет отсутствие свойства основного объекта. +// А также сбрасывает ранее установленное проверяемое свойство (см. Свойство). +// +// Параметры: +// ИмяСвойства - Строка - Наименование свойства объекта. +// Возможно обращение к вложенным свойствам через точку +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НетСвойства(Знач ИмяСвойства, Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + Контекст.ОбъектПроверки.ИмяСвойства = Неопределено; // Очищаем для формирования корректного сообщения об ошибке + + Если ЗначениеСодержитСвойство(Контекст.ОбъектПроверки.Значение, ИмяСвойства) Тогда + СгенерироватьОшибкуСравнения(СтрШаблон("не содержит свойство `%1`", ИмяСвойства), Неопределено, ИмяСвойства); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет наличие элемента с указанным индексом и позиционируется на нем для последующих проверок. +// +// Важно, следующие проверки будут относится к этому элементу. +// Для переключения на проверки объекта можно воспользоваться методом см. Объект. +// +// Параметры: +// Индекс - Число - Индекс элемента коллекции +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Элемент(Знач Индекс, Знач ОписаниеПроверки = Неопределено) Экспорт + + Возврат Свойство(Индекс, ОписаниеПроверки); + +КонецФункции + +// Используется после вызова метода см. Свойство, для переключения с ранее указанного свойства на объект. +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Объект() Экспорт + + Контекст = Контекст(); + Контекст.ОбъектПроверки.ИмяСвойства = Неопределено; + + Возврат ЮТУтверждения; + +КонецФункции + +#Область УтвержденияПредикатов + +// Проверяет установленное значение Контекста (или его свойство) на равенство ожидаемому. +// +// При сравнении также проверяется совпадение типов проверяемого и ожидаемого значения. +// Для сериализуемых объектов проверяется равенство по значению. +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) равно этому значению +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Равно(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПараметрыСравнения = Новый Структура("ГлубокийАнализ", Истина); + ПроверитьПредикат(ЮТПредикаты.Выражения().Равно, ОжидаемоеЗначение, ОписаниеПроверки, ПараметрыСравнения); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на НЕ равенство ожидаемому. +// +// При сравнении также проверяется совпадение типов проверяемого и ожидаемого значения +// Для сериализуемых значений проверяется равенство по значению +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) НЕ равно этому значению +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеРавно(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПараметрыСравнения = Новый Структура("ГлубокийАнализ", Истина); + ПроверитьПредикат(ЮТПредикаты.Выражения().НеРавно, ОжидаемоеЗначение, ОписаниеПроверки, ПараметрыСравнения); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство), оно должно быть больше ожидаемого. +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) Больше этого значения +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Больше(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().Больше, ОжидаемоеЗначение, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство), оно должно быть больше или равно ожидаемому. +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) Больше этого значения или равно ему +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция БольшеИлиРавно(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().БольшеРавно, ОжидаемоеЗначение, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство), оно должно быть меньше ожидаемого. +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) меньше этого значения +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Меньше(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().Меньше, ОжидаемоеЗначение, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство), оно должно быть меньше или равно ожидаемому. +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) меньше этого значения или равно ему +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция МеньшеИлиРавно(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().МеньшеРавно, ОжидаемоеЗначение, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на "заполненность" (обертка для `ЗначениеЗаполнено`). +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Заполнено(Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().Заполнено, , ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на "не заполненность" (обертка для `ЗначениеЗаполнено`) +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеЗаполнено(Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().НеЗаполнено, , ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на соответствие переданному типу. +// +// Параметры: +// ОжидаемоеЗначение - Строка, Тип, ОписаниеТипов - Ожидается, что значение Контекста (или его свойство) имеет данный тип +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетТип(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().ИмеетТип, ОжидаемоеЗначение, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на несоответствие переданному типу. +// +// Параметры: +// ОжидаемоеЗначение - Строка, Тип, ОписаниеТипов - Ожидается, что значение Контекста (или его свойство) НЕ имеет данный тип +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеИмеетТип(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().НеИмеетТип, ОжидаемоеЗначение, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на наличие в нем искомого. +// +// Проверка поддерживается для следующих типов проверяемого значения: +// +// - Строка - по вхождению +// - Массив - по наличию равного элемента +// - Структура - по наличию равного значения +// - Соответствие - по наличию равного значения +// - СписокЗначений - по наличию равного значения +// - ФиксированныйМассив - по наличию равного значения +// - ФиксированнаяСтруктура - по наличию равного значения +// - ФиксированноеСоответствие - по наличию равного значения +// - Произвольный итерируемый объект для проверки на соответствие предикату +// +// При сравнении также проверяется совпадение типов +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) содержит указанное значение +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Содержит(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + Если ЮТПредикатыСлужебныйКлиентСервер.ЭтоПредикат(ОжидаемоеЗначение) Тогда + ПроверитьСодержаниеПредиката(ОжидаемоеЗначение, ОписаниеПроверки, Ложь); + Иначе + ПроверитьПредикат(ЮТПредикаты.Выражения().Содержит, ОжидаемоеЗначение, ОписаниеПроверки); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на наличие в нем искомого. +// +// Проверка поддерживается для следующих типов проверяемого значения: +// +// - Строка - по отсутствию вхождению +// - Массив - по отсутствию равного элемента +// - Структура - по отсутствию равного значения +// - Соответствие - по отсутствию равного значения +// - СписокЗначений - по отсутствию равного значения +// - ФиксированныйМассив - по отсутствию равного значения +// - ФиксированнаяСтруктура - по отсутствию равного значения +// - ФиксированноеСоответствие - по отсутствию равного значения +// - Произвольный итерируемый объект для проверки на соответствие предикату +// +// При сравнении также проверяется совпадение типов +// +// Параметры: +// ОжидаемоеЗначение - Произвольный - Ожидается, что значение Контекста (или его свойство) НЕ содержит указанное +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержит(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + Если ЮТПредикатыСлужебныйКлиентСервер.ЭтоПредикат(ОжидаемоеЗначение) Тогда + ПроверитьСодержаниеПредиката(ОжидаемоеЗначение, ОписаниеПроверки, Истина); + Иначе + ПроверитьПредикат(ЮТПредикаты.Выражения().НеСодержит, ОжидаемоеЗначение, ОписаниеПроверки); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на наличие подстроки, соответствующей регулярному выражению +// +// Параметры: +// Шаблон - Строка - Регулярное выражение, по которому ищем подстроку +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция СодержитСтрокуПоШаблону(Знач Шаблон, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().СодержитСтрокуПоШаблону, Шаблон, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на отсутствие подстроки, соответствующей регулярному выражению +// +// Параметры: +// Шаблон - Строка - Регулярное выражение, по которому ищем подстроку +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержитСтрокуПоШаблону(Знач Шаблон, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().НеСодержитСтрокуПоШаблону, Шаблон, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет наличие свойства у объекта/его свойства. +// В отличии от метода см. Свойство не позиционируется на указанное свойство. +// Параметры: +// ИмяСвойства - Строка - Наименование свойства объекта. +// Возможно обращение к вложенным свойствам через точку +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетСвойство(Знач ИмяСвойства, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().ИмеетСвойство, ИмяСвойства, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет отсутствие свойства у объекта/его свойства. +// В отличии от метода см. НетСвойства не сбрасывает позиционирование проверки. +// +// Параметры: +// ИмяСвойства - Строка - Наименование свойства объекта. +// Возможно обращение к вложенным свойствам через точку +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеИмеетСвойства(Знач ИмяСвойства, Знач ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().НеИмеетСвойство, ИмяСвойства, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет значение (или его свойство), оно должно входить в указанный список. +// +// Параметры: +// Значения - Массив из Произвольный - Значения для проверки +// - СписокЗначений из Произвольный - Значения для проверки +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ВСписке(Значения, ОписаниеПроверки = Неопределено) Экспорт + + ПроверитьПредикат(ЮТПредикаты.Выражения().ВСписке, Значения, ОписаниеПроверки); + Возврат ЮТУтверждения; + +КонецФункции + +#КонецОбласти + +// Проверяет наличие свойств и их значения у проверяемого объекта (или его свойства). +// +// Параметры: +// ОжидаемоеЗначение - Структура - Проверяемый объект должен иметь свойства указанные в параметре +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетСвойстваРавные(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ОбъектыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение); + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на равенство `Истина)`. +// При сравнении также проверяется совпадение типов проверяемого и ожидаемого значения. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоИстина(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Истина, Ложь, "является истиной"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство)на НЕ равенство `Истина`. +// При сравнении также проверяется совпадение типов проверяемого и ожидаемого значения. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоНеИстина(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Истина, Истина, "является истиной"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на равенство `Ложь`. +// При сравнении также проверяется совпадение типов проверяемого и ожидаемого значения. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоЛожь(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Ложь, Ложь, "является ложью"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на НЕ равенство `Ложь`. +// При сравнении также проверяется совпадение типов проверяемого и ожидаемого значения. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоНеЛожь(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Ложь, Истина, "является ложью"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на "существование", т.е. отличие от `Null` и `Неопределено`. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция Существует(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьСуществование(Контекст, Ложь); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на "не существование", т.е. оно равно `Null` или `Неопределено`. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСуществует(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьСуществование(Контекст, Истина); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) не равенство `Неопределено`. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоНеопределено(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Неопределено, Ложь, "является неопределено"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на не равенство `Неопределено`. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоНеНеопределено(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Неопределено, Истина, "является неопределено"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на равенство `Null`. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоNull(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Null, Ложь, "является null"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на не равенство `Null`. +// +// Параметры: +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЭтоНеNull(Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + СравнитьЗначения(Контекст, Null, Истина, "является null"); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции. +// +// Проверка поддерживается для следующих типов проверяемого значения: +// - Строка +// - Массив +// - Структура +// - Соответствие +// - СписокЗначений +// - ФиксированныйМассив +// - ФиксированнаяСтруктура +// - ФиксированноеСоответствие +// - ТаблицаЗначения +// +// Параметры: +// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) имеет указанную длину или размер +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетДлину(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, "Число"); + + ФактическаяДлина = ДлинаПроверяемогоЗначения(Контекст); + Результат = ФактическаяДлина = ОжидаемоеЗначение; + + Сообщение = СтрШаблон("длиной (размером) `%1` имеет длину (размер) `%2`", ФактическаяДлина, ОжидаемоеЗначение); + ОбработатьРезультатСравнения(Результат, Сообщение, Ложь, ФактическаяДлина, ОжидаемоеЗначение); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции. +// +// Проверка поддерживается для следующих типов проверяемого значения: +// - Строка +// - Массив +// - Структура +// - Соответствие +// - СписокЗначений +// - ФиксированныйМассив +// - ФиксированнаяСтруктура +// - ФиксированноеСоответствие +// - ТаблицаЗначения +// +// Параметры: +// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) имеет указанную длину или размер +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетДлинуБольше(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, "Число"); + + ФактическаяДлина = ДлинаПроверяемогоЗначения(Контекст); + Результат = ФактическаяДлина > ОжидаемоеЗначение; + + Сообщение = СтрШаблон("длиной (размером) `%1` имеет длину (размер) больше `%2`", ФактическаяДлина, ОжидаемоеЗначение); + ОбработатьРезультатСравнения(Результат, Сообщение, Ложь, ФактическаяДлина, ОжидаемоеЗначение); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции. +// +// Проверка поддерживается для следующих типов проверяемого значения: +// - Строка +// - Массив +// - Структура +// - Соответствие +// - СписокЗначений +// - ФиксированныйМассив +// - ФиксированнаяСтруктура +// - ФиксированноеСоответствие +// - ТаблицаЗначения +// +// Параметры: +// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) имеет указанную длину или размер +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетДлинуМеньше(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, "Число"); + + ФактическаяДлина = ДлинаПроверяемогоЗначения(Контекст); + Результат = ФактическаяДлина < ОжидаемоеЗначение; + + Сообщение = СтрШаблон("длиной (размером) `%1` имеет длину (размер) меньше `%2`", ФактическаяДлина, ОжидаемоеЗначение); + ОбработатьРезультатСравнения(Результат, Сообщение, Ложь, ФактическаяДлина, ОжидаемоеЗначение); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции, которые не должны совпадать с указанным значением. +// +// Проверка поддерживается для следующих типов проверяемого значения: +// - Строка +// - Массив +// - Структура +// - Соответствие +// - СписокЗначений +// - ФиксированныйМассив +// - ФиксированнаяСтруктура +// - ФиксированноеСоответствие +// - ТаблицаЗначения +// +// Параметры: +// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) не имеет указанную дину или размер +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеИмеетДлину(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, "Число"); + + ФактическаяДлина = ДлинаПроверяемогоЗначения(Контекст); + Результат = ФактическаяДлина <> ОжидаемоеЗначение; + + Сообщение = СтрШаблон("длиной (размером) `%1` не имеет длину (размер) `%2`", ФактическаяДлина, ОжидаемоеЗначение); + ОбработатьРезультатСравнения(Результат, Сообщение, Ложь, ФактическаяДлина, ОжидаемоеЗначение); + Возврат ЮТУтверждения; + +КонецФункции + +#Область ПроверкаМетодов + +// Вызывает метод (см. Метод) объекта контекста и проверяет, выбрасывает ли он исключение. +// Проверяет, что метод упадет по исключению, а текст исключения содержит(включает) указанный. +// +// Параметры: +// ОжидаемоеЗначение - Строка - Ожидается, что сообщение об ошибке будет содержать(включать) данный текст +// ОписаниеПроверки - Строка - Описание конкретной проверки +// ВТранзакции - Булево - Вызов метода выполняется в трананзакции +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ВыбрасываетИсключение(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено, ВТранзакции = Ложь) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + Попытка + Модуль = ПроверяемоеЗначение(Контекст); + Результат = ВызватьМетод(Модуль, Контекст.ИмяМетода, Контекст.ПараметрыМетода, ВТранзакции); + Исключение + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст); + КонецПопытки; + + Если НЕ Результат.ИсключениеВозникло Тогда + ТекстОшибки = СтрШаблон("ожидали, что метод `%1` вызовет исключение `%2`, но это не так.", Контекст.ИмяМетода, ОжидаемоеЗначение); + ЮТРегистрацияОшибокСлужебный.УстановитьДанныеОшибкиСравнения(Результат.ТекстИсключения, ОжидаемоеЗначение); + ЮТРегистрацияОшибокСлужебный.ВызватьОшибкуПроверки(ТекстОшибки, Контекст); + ИначеЕсли СтрНайти(Результат.ТекстИсключения, ОжидаемоеЗначение) = 0 Тогда + ТекстОшибки = СтрШаблон("ожидали, что метод `%1` вызовет исключение `%2`, но получили `%3`.", + Контекст.ИмяМетода, + ОжидаемоеЗначение, + Результат.ТекстИсключения); + ЮТРегистрацияОшибокСлужебный.УстановитьДанныеОшибкиСравнения(Результат.ТекстИсключения, ОжидаемоеЗначение); + ЮТРегистрацияОшибокСлужебный.ВызватьОшибкуПроверки(ТекстОшибки, Контекст); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Вызывает метод (см. Метод) объекта контекста и проверяет, выбрасывает ли он исключение. +// Проверяет, что метод не упадет по исключению +// или упадет по исключению текст, которого не содержит указанный. +// +// Параметры: +// ОжидаемоеЗначение - Строка - Ожидается, что метод выбросит исключение, текст которого НЕ будет содержать (включать) данный текст +// - Неопределено - Ожидается, что метод отработает без выбора исключения +// ОписаниеПроверки - Строка - Описание конкретной проверки +// ВТранзакции - Булево - Вызов метода выполняется в трананзакции +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеВыбрасываетИсключение(Знач ОжидаемоеЗначение = Неопределено, Знач ОписаниеПроверки = Неопределено, ВТранзакции = Ложь) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + Попытка + Модуль = ПроверяемоеЗначение(Контекст); + Результат = ВызватьМетод(Модуль, Контекст.ИмяМетода, Контекст.ПараметрыМетода, ВТранзакции); + Исключение + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст); + КонецПопытки; + + Если Результат.ИсключениеВозникло Тогда + ЮТРегистрацияОшибокСлужебный.УстановитьДанныеОшибкиСравнения(Результат.ТекстИсключения, ОжидаемоеЗначение); + + Если НЕ ЗначениеЗаполнено(ОжидаемоеЗначение) Тогда + ТекстОшибки = СтрШаблон("ожидали, что метод `%1` не вызовет исключение, но это не так.", Контекст.ИмяМетода); + ЮТРегистрацияОшибокСлужебный.ВызватьОшибкуПроверки(ТекстОшибки, Контекст); + ИначеЕсли СтрНайти(Результат.ТекстИсключения, ОжидаемоеЗначение) <> 0 Тогда + ТекстОшибки = СтрШаблон("ожидали, что метод `%1` не вызовет исключение `%2`, но это не так.", Контекст.ИмяМетода, ОжидаемоеЗначение); + ЮТРегистрацияОшибокСлужебный.ВызватьОшибкуПроверки(ТекстОшибки, Контекст); + КонецЕсли; + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет, что установленное значение Контекста (или его свойство) имеет указанный экспортный метод. +// +// +// Параметры: +// ИмяМетода - Строка - Имя метода, наличие которого нужно проверить +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ИмеетМетод(ИмяМетода, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + + Модуль = ПроверяемоеЗначение(Контекст); + Результат = ЮТМетодыСлужебный.МетодОбъектаСуществует(Модуль, ИмяМетода); + Если НЕ Результат Тогда + Сообщение = СтрШаблон("имеет метод `%1`", ИмяМетода); + СгенерироватьОшибкуСравнения(Сообщение, Модуль, ИмяМетода); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +#КонецОбласти +// Проверяет установленное значение Контекста (или его свойство), ожидается что оно начинается на указанное значение. +// +// При этом проверяемое значение должно быть строкой. +// +// Параметры: +// СтрокаПоиска - Строка - Строка поиска +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НачинаетсяС(СтрокаПоиска, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ПроверитьТипЗначения(Контекст, ПроверяемоеЗначение, "Строка, ФорматированнаяСтрока", "проверяемого значения"); + ПроверитьТипЗначения(Контекст, СтрокаПоиска, "Строка", "ожидаемого значения"); + ПроверитьЗаполненностьЗначения(Контекст, СтрокаПоиска, "ожидаемое значение"); + + Результат = СтрНачинаетсяС(ПроверяемоеЗначение, СтрокаПоиска); + + Если НЕ Результат Тогда + Сообщение = СтрШаблон("начинается с `%1`", СтрокаПоиска); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, СтрокаПоиска); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение Контекста (или его свойство), ожидается что оно заканчивается на указанное значение. +// +// При этом проверяемое значение должно быть строкой. +// +// Параметры: +// СтрокаПоиска - Строка - Строка поиска +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЗаканчиваетсяНа(СтрокаПоиска, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ПроверитьТипЗначения(Контекст, ПроверяемоеЗначение, "Строка, ФорматированнаяСтрока", "проверяемого значения"); + ПроверитьТипЗначения(Контекст, СтрокаПоиска, "Строка", "ожидаемого значения"); + ПроверитьЗаполненностьЗначения(Контекст, СтрокаПоиска, "ожидаемое значение"); + + Результат = СтрЗаканчиваетсяНа(ПроверяемоеЗначение, СтрокаПоиска); + + Если НЕ Результат Тогда + Сообщение = СтрШаблон("заканчивается на `%1`", СтрокаПоиска); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, СтрокаПоиска); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет вхождение установленного значение (или его свойства) в заданный интервал. +// +// Проверяемое значение может находится на границе интервала. +// +// Параметры: +// НачалоИнтервала - Произвольный - Левая граница интервала. Может иметь любой тип, позволяющий сравнивать значения +// ОкончаниеИнтервала - Произвольный - Правая граница. Может иметь любой тип, позволяющий сравнивать значения +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция МеждуВключаяГраницы(НачалоИнтервала, ОкончаниеИнтервала, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьМежду(Контекст, НачалоИнтервала, ОкончаниеИнтервала, Истина, Истина); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет вхождение установленного значение (или его свойства) в заданный интервал. +// +// Проверяемое значение не может находится на границе интервала. +// +// Параметры: +// НачалоИнтервала - Произвольный - Левая граница интервала. Может иметь любой тип, позволяющий сравнивать значения +// ОкончаниеИнтервала - Произвольный - Правая граница. Может иметь любой тип, позволяющий сравнивать значения +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция МеждуИсключаяГраницы(НачалоИнтервала, ОкончаниеИнтервала, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьМежду(Контекст, НачалоИнтервала, ОкончаниеИнтервала, Ложь, Ложь); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет вхождение установленного значение (или его свойства) в заданный интервал. +// +// Проверяемое значение может находится на начальной границе интервала. +// +// Параметры: +// НачалоИнтервала - Произвольный - Левая граница интервала. Может иметь любой тип, позволяющий сравнивать значения +// ОкончаниеИнтервала - Произвольный - Правая граница. Может иметь любой тип, позволяющий сравнивать значения +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция МеждуВключаяНачалоГраницы(НачалоИнтервала, ОкончаниеИнтервала, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьМежду(Контекст, НачалоИнтервала, ОкончаниеИнтервала, Истина, Ложь); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет вхождение установленного значение (или его свойства) в заданный интервал. +// +// Проверяемое значение может находится на конечной границе интервала. +// +// Параметры: +// НачалоИнтервала - Произвольный - Левая граница интервала. Может иметь любой тип, позволяющий сравнивать значения +// ОкончаниеИнтервала - Произвольный - Правая граница. Может иметь любой тип, позволяющий сравнивать значения +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция МеждуВключаяОкончаниеГраницы(НачалоИнтервала, ОкончаниеИнтервала, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверитьМежду(Контекст, НачалоИнтервала, ОкончаниеИнтервала, Ложь, Истина); + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет каждый элемент установленного значения (или его свойства), все элементы должны иметь указанное свойство. +// +// Параметры: +// ИмяСвойства - Строка +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция КаждыйЭлементСодержитСвойство(ИмяСвойства, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ОбъектПроверки = "каждый элемент проверяемого значения"; + + Для Каждого Элемент Из ПроверяемоеЗначение Цикл + + Если НЕ ЗначениеСодержитСвойство(Элемент, ИмяСвойства) Тогда + Сообщение = СтрШаблон("содержит свойство `%1`", ИмяСвойства); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ИмяСвойства, ОбъектПроверки); + КонецЕсли; + + КонецЦикла; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет каждый элемент установленного значения (или его свойства), +// все элементы должны иметь указанное свойство, которое равно ожидаемому значению. +// +// Параметры: +// ИмяСвойства - Строка +// ОжидаемоеЗначение - Произвольный - Ожидаемое значение свойства +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция КаждыйЭлементСодержитСвойствоСоЗначением(ИмяСвойства, ОжидаемоеЗначение, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ОбъектПроверки = "каждый элемент проверяемого значения"; + ОписаниеОжидания = Новый Структура(ИмяСвойства, ОжидаемоеЗначение); + + Для Каждого Элемент Из ПроверяемоеЗначение Цикл + + Путь = НормализованныйПутьКСвойству(Элемент, ИмяСвойства, Ложь); + Если Путь = Неопределено Тогда + Сообщение = СтрШаблон("содержит свойство `%1`", ИмяСвойства); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ОписаниеОжидания, ОбъектПроверки); + КонецЕсли; + + ЗначениеСвойства = ЗначениеСвойства(Элемент, Путь); + + Если НЕ ЗначенияРавны(ЗначениеСвойства, ОжидаемоеЗначение) Тогда + Сообщение = СтрШаблон("содержит свойство `%1`, которое равно `%2`", ИмяСвойства, ОжидаемоеЗначение); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ОписаниеОжидания, ОбъектПроверки); + КонецЕсли; + + КонецЦикла; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет элементы установленного значения (или его свойства), хотя бы один из них должен иметь указанное свойство. +// +// Параметры: +// ИмяСвойства - Строка +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЛюбойЭлементСодержитСвойство(ИмяСвойства, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ОбъектПроверки = "хоть один элемент проверяемого значения"; + + Найден = Ложь; + Для Каждого Элемент Из ПроверяемоеЗначение Цикл + + Если ЗначениеСодержитСвойство(Элемент, ИмяСвойства) Тогда + Найден = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если НЕ Найден Тогда + Сообщение = СтрШаблон("содержит свойство `%1`", ИмяСвойства); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ИмяСвойства, ОбъектПроверки); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет элементы установленного значения (или его свойства), +// хотя бы один из них должен иметь указанное свойство, которое равно ожидаемому значению. +// +// Параметры: +// ИмяСвойства - Строка +// ОжидаемоеЗначение - Произвольный - Ожидаемое значение свойства +// ОписаниеПроверки - Строка - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЛюбойЭлементСодержитСвойствоСоЗначением(ИмяСвойства, ОжидаемоеЗначение, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ОбъектПроверки = "хоть один элемент проверяемого значения"; + + НайденоСвойство = Ложь; + НайденоЗначение = Ложь; + Для Каждого Элемент Из ПроверяемоеЗначение Цикл + + Путь = НормализованныйПутьКСвойству(Элемент, ИмяСвойства, Ложь); + Если Путь = Неопределено Тогда + Продолжить; + КонецЕсли; + + НайденоСвойство = Истина; + ЗначениеСвойства = ЗначениеСвойства(Элемент, Путь); + + Если ЗначенияРавны(ЗначениеСвойства, ОжидаемоеЗначение) Тогда + НайденоЗначение = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + ОписаниеОжидания = Новый Структура(ИмяСвойства, ОжидаемоеЗначение); + Если НЕ НайденоСвойство Тогда + Сообщение = СтрШаблон("содержит свойство `%1`", ИмяСвойства); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ОписаниеОжидания, ОбъектПроверки); + ИначеЕсли НЕ НайденоЗначение Тогда + Сообщение = СтрШаблон("содержит свойство `%1`, которое равно `%2`", ИмяСвойства, ОжидаемоеЗначение); + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ОписаниеОжидания, ОбъектПроверки); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет установленное значение (или его свойства) на соответствие утверждениям предиката. +// см. ЮТест.Предикат +// +// Параметры: +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор утверждений, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ОписаниеПроверки - Строка, Неопределено - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция СоответствуетПредикату(Предикат, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + + ПараметрыСообщенийОбОшибке = ПараметрыСообщенийОбОшибке(ПроверяемоеЗначение, ОписаниеПроверки); + + РезультатПроверки = ЮТПредикатыСлужебныйКлиентСервер.ПроверитьПредикаты(ПроверяемоеЗначение, Предикат, ПараметрыСообщенийОбОшибке); + + Если НЕ РезультатПроверки.Успешно Тогда + ОбработатьРезультатПроверки(Контекст, РезультатПроверки); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет каждый элемент установленного значения (или его свойства), +// все элементы должны соответствовать утверждениям предиката. +// см. ЮТест.Предикат +// +// Параметры: +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор утверждений, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ОписаниеПроверки - Строка, Неопределено - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция КаждыйЭлементСоответствуетПредикату(Предикат, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + + ПараметрыСообщенийОбОшибке = ПараметрыСообщенийОбОшибке(ПроверяемоеЗначение, ОписаниеПроверки, "каждый элемент проверяемого значения"); + + Для Каждого Элемент Из ПроверяемоеЗначение Цикл + + РезультатПроверки = ЮТПредикатыСлужебныйКлиентСервер.ПроверитьПредикаты(Элемент, Предикат, ПараметрыСообщенийОбОшибке); + Если НЕ РезультатПроверки.Успешно Тогда + ОбработатьРезультатПроверки(Контекст, РезультатПроверки); + КонецЕсли; + + КонецЦикла; + + Возврат ЮТУтверждения; + +КонецФункции + +// Проверяет элементы установленного значения (или его свойства), +// хотя бы один из них должен соответствовать утверждениям предиката. +// см. ЮТест.Предикат +// +// Параметры: +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор утверждений, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ОписаниеПроверки - Строка, Неопределено - Описание конкретной проверки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция ЛюбойЭлементСоответствуетПредикату(Предикат, ОписаниеПроверки = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + + ПараметрыСообщенийОбОшибке = ПараметрыСообщенийОбОшибке(ПроверяемоеЗначение, ОписаниеПроверки); + + Успешно = Ложь; + + Для Каждого Элемент Из ПроверяемоеЗначение Цикл + + РезультатПроверки = ЮТПредикатыСлужебныйКлиентСервер.ПроверитьПредикаты(Элемент, Предикат, ПараметрыСообщенийОбОшибке); + Если РезультатПроверки.Успешно Тогда + Успешно = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если НЕ Успешно Тогда + Сообщение = ЮТПредикатыСлужебныйКлиентСервер.ПредставлениеПредикатов(Предикат, " и "); + СгенерироватьОшибкуУтверждения(Сообщение, ПроверяемоеЗначение, "один из элементов проверяемого значения"); + КонецЕсли; + + Возврат ЮТУтверждения; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Сбросить контекст. +// Используется для принудительного сброса контекста утверждения +Процедура СброситьКонтекст() Экспорт + + ЮТКонтекстСлужебный.УстановитьКонтекстУтверждений(Неопределено); + ЮТРегистрацияОшибокСлужебный.УстановитьКонтекстОшибки(); + +КонецПроцедуры + +// Обработчик события "ПередКаждымТестом" +// +// Параметры: +// ОписаниеСобытия - см. ЮТФабрикаСлужебный.ОписаниеСобытияИсполненияТестов +Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт + + СброситьКонтекст(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Контекст + +// Контекст. +// +// Возвращаемое значение: +// см. НовыйКонтекстУтверждения +Функция Контекст() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебный.КонтекстПроверки(); + +КонецФункции + +// Инициализирует контекст утверждений +// +// Параметры: +// ПроверяемоеЗначение - Произвольный - Проверяемое значение +// +// Возвращаемое значение: +// Структура - контекст утверждений: +// * ОбъектПроверки - см. ЮТФабрикаСлужебный.ОписаниеПроверяемогоЗначения +// * ИмяМетода - Строка +// * НормализованныйПутьКСвойству - Неопределено - Не указано свойство +// - Массив из Строка, Число +// * ПараметрыМетода - Неопределено - Не установлены +// - Массив из Произвольный +Функция НовыйКонтекстУтверждения(ПроверяемоеЗначение) + + Контекст = ЮТФабрикаСлужебный.ОписаниеПроверки(ПроверяемоеЗначение); + + Контекст.Вставить("ИмяМетода", ""); + Контекст.Вставить("НормализованныйПутьКСвойству", Неопределено); + Контекст.Вставить("ПараметрыМетода", Неопределено); + + Возврат Контекст; + +КонецФункции + +#КонецОбласти + +Функция ПроверяемоеЗначение(Контекст) + + Если Контекст.ОбъектПроверки.ИмяСвойства <> Неопределено Тогда + Значение = ЗначениеСвойства(Контекст.ОбъектПроверки.Значение, Контекст.НормализованныйПутьКСвойству); + Иначе + Значение = Контекст.ОбъектПроверки.Значение; + КонецЕсли; + + Возврат Значение; + +КонецФункции + +Функция ЗначениеСвойства(Объект, НормализованныйПутьКСвойству) + + Значение = Объект; + Для Каждого Часть Из НормализованныйПутьКСвойству Цикл + + Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда +#Если ВебКлиент Или ТонкийКлиент Тогда + Значение = ЮТОбщийСлужебныйВызовСервера.ИзХранилищаЗначений(Значение); +#Иначе + Значение = Значение.Получить(); +#КонецЕсли + КонецЕсли; + + Если ТипЗнч(Часть) = Тип("Число") И Часть < 0 И ТипЗнч(Значение) <> Тип("Соответствие") Тогда + Часть = Значение.Количество() + Часть; + КонецЕсли; + + Значение = Значение[Часть]; + + КонецЦикла; + + Возврат Значение; + +КонецФункции + +Функция ЗначенияРавны(Значение1, Значение2) + + Возврат ТипЗнч(Значение1) = ТипЗнч(Значение2) И + (Значение1 = Значение2 ИЛИ СравнитьПоЗначению(Значение1, Значение2)); + +КонецФункции + +Функция НормализованныйПутьКСвойству(Знач Значение, Цепочка, ФиксироватьОшибку = Истина) + + ПутьКСвойству = Новый Массив(); + + ТипПути = ТипЗнч(Цепочка); + + Если ТипПути = Тип("Строка") Тогда + + Части = СтрРазделить(Цепочка, "."); + + ПройденныйПуть = Новый Массив(); + + Для Каждого Часть Из Части Цикл + + ПройденныйПуть.Добавить(Часть); + + ПозицияИндекса = СтрНайти(Часть, "["); + + Если ПозицияИндекса > 0 И СтрЗаканчиваетсяНа(Часть, "]") Тогда + + Если ПозицияИндекса > 1 Тогда + ПутьКСвойству.Добавить(Лев(Часть, ПозицияИндекса - 1)); + КонецЕсли; + + Пока ПозицияИндекса > 0 Цикл + + ЗакрывающаяПозиция = СтрНайти(Часть, "]", , ПозицияИндекса); + ИндексСтрокой = Сред(Часть, ПозицияИндекса + 1, ЗакрывающаяПозиция - ПозицияИндекса - 1); + Индекс = Число(ИндексСтрокой); + ПутьКСвойству.Добавить(Индекс); + + ПозицияИндекса = СтрНайти(Часть, "[", , ЗакрывающаяПозиция); + + КонецЦикла; + + Иначе + + ПутьКСвойству.Добавить(Часть); + + КонецЕсли; + + КонецЦикла; + + Иначе + + ПутьКСвойству.Добавить(Цепочка); + + КонецЕсли; + + ПройденныйПуть = Новый Массив(); + + Для Каждого Часть Из ПутьКСвойству Цикл + + ПройденныйПуть.Добавить(Часть); + + Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда + Значение = Значение.Получить(); + КонецЕсли; + + Попытка + ЕстьСвойство = ЗначениеИмеетСвойство(Значение, Часть); + Исключение + ЕстьСвойство = Ложь; + КонецПопытки; + + Если ЕстьСвойство Тогда + Значение = Значение[Часть]; + ИначеЕсли ФиксироватьОшибку Тогда + ПутьСвойства = СтрСоединить(ПройденныйПуть, "."); + СгенерироватьОшибкуСравнения(СтрШаблон("содержит свойство `%1`", ПутьСвойства), Значение, Цепочка); + Иначе + Возврат Неопределено; + КонецЕсли; + + КонецЦикла; + + Возврат ПутьКСвойству; + +КонецФункции + +Функция ЗначениеСодержитСвойство(Знач Значение, Знач ИмяСвойства) + + Возврат НормализованныйПутьКСвойству(Значение, ИмяСвойства, Ложь) <> Неопределено; + +КонецФункции + +Функция ЗначениеИмеетСвойство(Значение, Свойство) + + Результат = Ложь; + ТипЗначения = ТипЗнч(Значение); + + Если ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗначения) Тогда + + Результат = Значение.Свойство(Свойство); + + ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипЗначения) Тогда + + Для Каждого КлючЗначение Из Значение Цикл + + Если КлючЗначение.Ключ = Свойство И ТипЗнч(КлючЗначение.Ключ) = ТипЗнч(Свойство) Тогда + Результат = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(Свойство) = Тип("Число") Тогда + + Если Свойство < 0 Тогда + Свойство = Значение.Количество() + Свойство; + КонецЕсли; + Результат = Свойство >= 0 И Значение.Количество() > Свойство; + + Иначе + + Результат = ЮТОбщий.ПеременнаяСодержитСвойство(Значение, Свойство); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ДлинаЗначения(ПроверяемоеЗначение) + + ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); + + Если ТипПроверяемогоЗначения = Тип("Строка") ИЛИ ТипПроверяемогоЗначения = Тип("ФорматированнаяСтрока") Тогда + + ФактическаяДлина = СтрДлина(ПроверяемоеЗначение); + + Иначе + + Попытка + ФактическаяДлина = ПроверяемоеЗначение.Количество(); + Исключение + ФактическаяДлина = Неопределено; + КонецПопытки; + + КонецЕсли; + + Возврат ФактическаяДлина; + +КонецФункции + +Функция ВызватьМетод(Модуль, ИмяМетода, ПараметрыМетода, ВТранзакции) + +#Если ВебКлиент Тогда + ВызватьИсключение ЮТИсключения.МетодНеДоступен("ЮТУтверждения.ВызватьМетод"); +#Иначе + Если НЕ ЗначениеЗаполнено(ИмяМетода) Тогда + ВызватьИсключение "ИмяМетода не заполнено в контексте. Воспользуйтесь предварительно методом интерфейса `Метод(ИмяМетода)`"; + КонецЕсли; + +#Если НЕ Сервер Тогда + Если ВТранзакции Тогда + ВызватьИсключение "Использование транзакции доступно только на сервере (толстом клиенте)"; + КонецЕсли; +#КонецЕсли + + Если Модуль <> Неопределено Тогда + ПолноеИмяМетода = СтрШаблон("Объект.%1", ИмяМетода); + Иначе + ПолноеИмяМетода = СтрШаблон("%1", ИмяМетода); + КонецЕсли; + + Результат = Новый Структура("ИсключениеВозникло, ТекстИсключения", Ложь); + +#Если Сервер Тогда + Если ВТранзакции Тогда + Если ТранзакцияАктивна() Тогда + ВызватьИсключение "Использование транзакции внутри транзакции при проверке метода недопустимо"; + КонецЕсли; + + НачатьТранзакцию(); // BSLLS:PairingBrokenTransaction-off BSLLS:BeginTransactionBeforeTryCatch-off + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода, ПараметрыМетода, Модуль); + ОтменитьТранзакцию(); // BSLLS:WrongUseOfRollbackTransactionMethod-off + Иначе + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода, ПараметрыМетода, Модуль); + КонецЕсли; +#Иначе + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода, ПараметрыМетода, Модуль); +#КонецЕсли + + Если Ошибка <> Неопределено Тогда + Результат.ТекстИсключения = КраткоеПредставлениеОшибки(Ошибка); + Результат.ИсключениеВозникло = Истина; + КонецЕсли; + + Возврат Результат; +#КонецЕсли + +КонецФункции + +#Область ПроверкаТипов + +Процедура ПроверитьТипЗначения(Контекст, + Значение, + Знач ОжидаемыйТип, + Описание = "ожидаемого значения", + ЕслиУстановлен = Ложь, + Суффикс = Неопределено) + + Если ЕслиУстановлен И Значение = Неопределено Тогда + Возврат; + КонецЕсли; + + Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип); + + Если НЕ Соответствует Тогда + ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4", + Описание, + ТипЗнч(Значение), + ОжидаемыйТип, + Суффикс); + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ТекстОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +Функция СравнитьПоЗначению(Значение1, Значение2) + + Попытка + СтрокаСравнения1 = ЮТОбщий.СтрокаJSON(Значение1); + СтрокаСравнения2 = ЮТОбщий.СтрокаJSON(Значение2); + Возврат СтрокаСравнения1 = СтрокаСравнения2; + Исключение + Возврат Ложь; + КонецПопытки; + +КонецФункции + +Процедура УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки) + + Контекст.ОписаниеПроверки = ОписаниеПроверки; + +КонецПроцедуры + +Процедура СравнитьЗначения(Контекст, ОжидаемоеЗначение, Реверс, Сообщение) + + Попытка + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + Результат = ЗначенияРавны(ПроверяемоеЗначение, ОжидаемоеЗначение); + Исключение + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст); + КонецПопытки; + + ОбработатьРезультатСравнения(Результат, Сообщение, Реверс, ПроверяемоеЗначение, ОжидаемоеЗначение); + +КонецПроцедуры + +Процедура ПроверитьСуществование(Контекст, Реверс) + Попытка + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + Результат = ПроверяемоеЗначение <> Null И ПроверяемоеЗначение <> Неопределено; + Исключение + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст); + КонецПопытки; + + ОбработатьРезультатСравнения(Результат, "существует", Реверс, ПроверяемоеЗначение, Неопределено); + +КонецПроцедуры + +Функция ДлинаПроверяемогоЗначения(Контекст) + + Попытка + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + ФактическаяДлина = ДлинаЗначения(ПроверяемоеЗначение); + Исключение + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст); + КонецПопытки; + + Если ФактическаяДлина = Неопределено Тогда + ТекстОшибки = СтрШаблон("Тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение)); + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ТекстОшибки, Контекст); + КонецЕсли; + + Возврат ФактическаяДлина; + +КонецФункции + +Процедура ОбработатьРезультатСравнения(Знач Результат, Знач Сообщение, Реверс, ПроверяемоеЗначение, ОжидаемоеЗначение) + + Если Реверс Тогда + Результат = НЕ Результат; + Сообщение = "не " + Сообщение; + КонецЕсли; + + Если НЕ Результат Тогда + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ОжидаемоеЗначение); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьМежду(Контекст, НачалоИнтервала, ОкончаниеИнтервала, ВключаяНачало, ВключаяОкончание) + + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + + ТипЗначения = ТипЗнч(ПроверяемоеЗначение); + + Суффикс = ". Он должен совпадать с типом проверяемого значения"; + ПроверитьТипЗначения(Контекст, НачалоИнтервала, ТипЗначения, "левой границы интервала", , Суффикс); + ПроверитьТипЗначения(Контекст, ОкончаниеИнтервала, ТипЗначения, "правой границы интервала", , Суффикс); + + Если НачалоИнтервала > ОкончаниеИнтервала Тогда + ТекстОшибки = СтрШаблон("Не корректно задан интервал, левая граница (%1) не должна быть больше правой (%2)", + НачалоИнтервала, + ОкончаниеИнтервала); + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ТекстОшибки, Контекст); + КонецЕсли; + Результат = Истина; + + Если ВключаяНачало Тогда + Результат = НачалоИнтервала <= ПроверяемоеЗначение; + Иначе + Результат = НачалоИнтервала < ПроверяемоеЗначение; + КонецЕсли; + + Если ВключаяОкончание Тогда + Результат = Результат И ПроверяемоеЗначение <= ОкончаниеИнтервала; + Иначе + Результат = Результат И ПроверяемоеЗначение < ОкончаниеИнтервала; + КонецЕсли; + + Если НЕ Результат Тогда + Интервал = СтрШаблон("%1%2; %3%4", + ?(ВключаяНачало, "[", "("), + НачалоИнтервала, + ОкончаниеИнтервала, + ?(ВключаяОкончание, "]", ")")); + Сообщение = "находится в интервале " + Интервал; + СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, Интервал); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьЗаполненностьЗначения(Контекст, Значение, Описание) + + Если НЕ ЗначениеЗаполнено(Значение) Тогда + ТекстОшибки = СтрШаблон("Ожидали, что %1 заполнено, но это не так", Описание); + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(ТекстОшибки, Контекст); + КонецЕсли; +КонецПроцедуры + +Процедура ОбъектыРавны(Объект, ОбъектЭталон) + + Ключи = ЮТКоллекции.ВыгрузитьЗначения(ОбъектЭталон, "Ключ"); + ТипЗначения = ТипЗнч(Объект); + + ЭтоСоответствие = ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипЗначения); + ЭтоСтруктура = ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗначения); + + ЗначениеОтсутствующегоРеквизита = Новый УникальныйИдентификатор(); + + Если НЕ ЭтоСтруктура И НЕ ЭтоСоответствие Тогда + СтруктураОбъекта = Новый Структура(СтрСоединить(Ключи, ",")); + Для Каждого Ключ Из Ключи Цикл + СтруктураОбъекта[Ключ] = ЗначениеОтсутствующегоРеквизита; + КонецЦикла; + ЗаполнитьЗначенияСвойств(СтруктураОбъекта, Объект); + Иначе + СтруктураОбъекта = Объект; + КонецЕсли; + + Для Каждого Ключ Из Ключи Цикл + + Если НЕ ЭтоСоответствие И (НЕ СтруктураОбъекта.Свойство(Ключ) ИЛИ СтруктураОбъекта[Ключ] = ЗначениеОтсутствующегоРеквизита) Тогда + Сообщение = СтрШаблон("не содержат свойство '%1'", Ключ); + СгенерироватьОшибкуСравнения(Сообщение, СтруктураОбъекта, ОбъектЭталон); + КонецЕсли; + + Если НЕ ЗначенияРавны(Объект[Ключ], ОбъектЭталон[Ключ]) Тогда + Сообщение = СтрШаблон("имеет свойство '%1', которое равно `%2`", Ключ, ОбъектЭталон[Ключ]); + СгенерироватьОшибкуСравнения(Сообщение, СтруктураОбъекта, ОбъектЭталон); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ОбработатьРезультатПроверки(Контекст, Результат) + + Если НЕ Результат.Успешно Тогда + + Для Каждого Сообщение Из Результат.Сообщения Цикл + + Если ТипЗнч(Сообщение) = Тип("Структура") Тогда + ЮТРегистрацияОшибокСлужебный.УстановитьДанныеОшибкиСравнения(Сообщение.ПроверяемоеЗначение, Сообщение.ОжидаемоеЗначение); + + ТекстИсключения = СтрШаблон("%1 <%2>", ЮТРегистрацияОшибокСлужебный.ПрефиксОшибкиУтверждений(), Сообщение.Сообщение); + ВызватьИсключение ТекстИсключения; + Иначе + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(Сообщение, Контекст); + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение "Провальный результат проверки не содержит сообщения"; + + КонецЕсли; + +КонецПроцедуры + +Функция ПараметрыСообщенийОбОшибке(ПроверяемоеЗначение, ОписаниеПроверки, ОбъектПроверки = "проверяемое значение") + + Контекст = Контекст(); + ПолноеОписаниеПроверки = ЮТСтроки.ДобавитьСтроку(Контекст.ПрефиксОшибки, ОписаниеПроверки, " "); + ПредставлениеЗначения = СтрШаблон("`%1`", ПроверяемоеЗначение); + + Возврат ЮТПредикатыСлужебныйКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки, ОбъектПроверки, ПредставлениеЗначения); + +КонецФункции + +// Вызывает ошибку проверки утверждений +// При этом сохраняет в контекст состояние, для дальнейшей обработки +// +// Параметры: +// Сообщение - Строка +// ПроверяемоеЗначение - Произвольный +// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения +Процедура СгенерироватьОшибкуУтверждения(Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") + + Контекст = Контекст(); + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуУтверждения(Контекст, Сообщение, ПроверяемоеЗначение, ОбъектПроверки); + +КонецПроцедуры + +Процедура СгенерироватьОшибкуСравнения(Сообщение, ФактическоеЗначение, ОжидаемоеЗначение, ОбъектПроверки = "проверяемое значение") + + Контекст = Контекст(); + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуСравнения(Контекст, Сообщение, ФактическоеЗначение, ОжидаемоеЗначение, ОбъектПроверки); + +КонецПроцедуры + +#Область Предикаты + +Процедура ПроверитьПредикат(Выражение, ОжидаемоеЗначение, ОписаниеПроверки, ПараметрыСравнения = Неопределено) + + Контекст = Контекст(); + Предикат = ЮТФабрика.ВыражениеПредиката(Выражение, Контекст.ОбъектПроверки.ИмяСвойства, ОжидаемоеЗначение); + + ПолноеОписаниеПроверки = ЮТСтроки.ДобавитьСтроку(Контекст.ПрефиксОшибки, ОписаниеПроверки, " "); + + ПараметрыСообщенийОбОшибке = ЮТПредикатыСлужебныйКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки, , Контекст.ОбъектПроверки.Представление); + Результат = ЮТПредикатыСлужебныйКлиентСервер.ПроверитьПредикаты(Контекст.ОбъектПроверки.Значение, Предикат, ПараметрыСообщенийОбОшибке, ПараметрыСравнения); + + ОбработатьРезультатПроверкиПредиката(Результат); + +КонецПроцедуры + +Процедура ОбработатьРезультатПроверкиПредиката(Результат) + + Если НЕ Результат.Успешно Тогда + + Для Каждого Сообщение Из Результат.Сообщения Цикл + + Если ТипЗнч(Сообщение) = Тип("Структура") Тогда + ЮТРегистрацияОшибокСлужебный.УстановитьДанныеОшибкиСравнения(Сообщение.ПроверяемоеЗначение, Сообщение.ОжидаемоеЗначение); + + ТекстИсключения = СтрШаблон("%1 <%2>", ЮТРегистрацияОшибокСлужебный.ПрефиксОшибкиУтверждений(), Сообщение.Сообщение); + ВызватьИсключение ТекстИсключения; + Иначе + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуВыполнения(Сообщение); + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение "Провальный результат проверки не содержит сообщения"; + + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьСодержаниеПредиката(Предикат, ОписаниеПроверки, Реверс) + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки); + ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); + + ПараметрыСообщенийОбОшибке = ПараметрыСообщенийОбОшибке(ПроверяемоеЗначение, ОписаниеПроверки); + + Успешно = Ложь; + + Для Каждого Элемент Из ПроверяемоеЗначение Цикл + + РезультатПроверки = ЮТПредикатыСлужебныйКлиентСервер.ПроверитьПредикаты(Элемент, Предикат, ПараметрыСообщенийОбОшибке); + Если РезультатПроверки.Успешно Тогда + Успешно = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если Реверс Тогда + Успешно = НЕ Успешно; + КонецЕсли; + + Если НЕ Успешно Тогда + Сообщение = "содержит элемент, значение которого " + ЮТПредикатыСлужебныйКлиентСервер.ПредставлениеПредикатов(Предикат, " и "); + + Если Реверс Тогда + Сообщение = "не " + Сообщение; + КонецЕсли; + + СгенерироватьОшибкуУтверждения(Сообщение, ПроверяемоеЗначение); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТУтвержденияИБ.xml b/src/cfe/YAXUnit/CommonModules/ЮТУтвержденияИБ.xml new file mode 100644 index 0000000..b0c41c1 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТУтвержденияИБ.xml @@ -0,0 +1,23 @@ + + + + + ЮТУтвержденияИБ + + + ru + Утверждения ИБ + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТУтвержденияИБ/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТУтвержденияИБ/Ext/Module.bsl new file mode 100644 index 0000000..c008daf --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТУтвержденияИБ/Ext/Module.bsl @@ -0,0 +1,300 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +/////////////////////////////////////////////////////////////////// +// Предоставляет методы для формирования утверждений проверяющих данные информационной базы. +// +// Например: +// +// ```bsl +// ЮТест.ОжидаетЧтоТаблицаБазы("Справочник.Товары") +// .СодержитЗаписи(); +// ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.КурсыВалют") +// .СодержитЗаписи(ЮТест.Предикат() +// .Реквизит("Валюта").Равно(ДанныеРегистра.Валюта)); +// ``` +/////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Инициализирует модуль для проверки утверждений. +// +// * Запоминает/устанавливает имя проверяемой таблицы +// * Запоминает описание. +// +// Параметры: +// ИмяТаблицы - Строка - Имя проверяемой таблицы, например, Справочник.Товары, РегистрНакопления.ТоварыНаСкладах +// ОписаниеПроверки - Строка - Описание проверки, которое будет выведено при возникновении ошибки +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +// Примеры +// ЮТест.ОжидаетЧтоТаблицаБазы("Справочник.Товары").СодержитЗаписи(); +// +Функция ЧтоТаблица(ИмяТаблицы, ОписаниеПроверки = "") Экспорт + + Контекст = НовыйКонтекст(ИмяТаблицы); + Контекст.ПрефиксОшибки = ОписаниеПроверки; + + ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекста(), Контекст); + + Возврат ЮТУтвержденияИБ; + +КонецФункции + +// Проверяет наличие в таблице записей удовлетворяющих условиям +// +// Параметры: +// Предикат - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - Неопределено - Проверит, что таблица не пустая +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция СодержитЗаписи(Знач Предикат = Неопределено, Знач ОписаниеУтверждения = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеУтверждения); + Результат = ЮТЗапросы.ТаблицаСодержитЗаписи(Контекст.ОбъектПроверки.Значение, Предикат); + + Если Не Результат Тогда + Контекст = Контекст(); + СгенерироватьОшибкуУтверждения(Контекст, Предикат, "содержит записи"); + КонецЕсли; + + Возврат ЮТУтвержденияИБ; + +КонецФункции + +// Проверяет отсутствие в таблице записей удовлетворяющих условиям +// +// Параметры: +// Предикат - ОбщийМодуль - Условия сформированные с использованием см. ЮТест.Предикат +// - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - Неопределено - Проверит, что таблица пустая +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержитЗаписи(Знач Предикат = Неопределено, Знач ОписаниеУтверждения = Неопределено) Экспорт + + Контекст = Контекст(); + УстановитьОписаниеПроверки(Контекст, ОписаниеУтверждения); + Результат = НЕ ЮТЗапросы.ТаблицаСодержитЗаписи(Контекст.ОбъектПроверки.Значение, Предикат); + + Если Не Результат Тогда + Контекст = Контекст(); + СгенерироватьОшибкуУтверждения(Контекст, Предикат, "не содержит записи"); + КонецЕсли; + + Возврат ЮТУтвержденияИБ; + +КонецФункции + +// Проверяет наличие в таблице записей с указанным наименованием +// +// Параметры: +// ОжидаемоеНаименование - Строка +// ПроверятьПометкуУдаления - Булево - Проверять пометку удаления. +// + `Истина` - Подбираются только непомеченные на удаление записи. +// + `Ложь` - пометка на удаление игнорируется +// +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция СодержитЗаписиСНаименованием(ОжидаемоеНаименование, ПроверятьПометкуУдаления = Истина, ОписаниеУтверждения = Неопределено) Экспорт + + Условия = ПредикатПоискаПоРеквизиту("Наименование", ОжидаемоеНаименование, ПроверятьПометкуУдаления); + Возврат СодержитЗаписи(Условия, ОписаниеУтверждения); + +КонецФункции + +// Проверяет наличие в таблице записей с указанным кодом +// +// Параметры: +// ОжидаемыйКод - Строка +// ПроверятьПометкуУдаления - Булево - Проверять пометку удаления. +// + `Истина` - Подбираются только непомеченные на удаление записи. +// + `Ложь` - пометка на удаление игнорируется +// +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция СодержитЗаписиСКодом(ОжидаемыйКод, ПроверятьПометкуУдаления = Истина, ОписаниеУтверждения = Неопределено) Экспорт + + Условия = ПредикатПоискаПоРеквизиту("Код", ОжидаемыйКод, ПроверятьПометкуУдаления); + Возврат СодержитЗаписи(Условия, ОписаниеУтверждения); + +КонецФункции + +// Проверяет наличие в таблице записей с указанным номером +// +// Параметры: +// ОжидаемыйНомер - Строка +// ПроверятьПометкуУдаления - Булево - Проверять пометку удаления. +// + `Истина` - Подбираются только непомеченные на удаление записи. +// + `Ложь` - пометка на удаление игнорируется +// +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция СодержитЗаписиСНомером(ОжидаемыйНомер, ПроверятьПометкуУдаления = Истина, ОписаниеУтверждения = Неопределено) Экспорт + + Условия = ПредикатПоискаПоРеквизиту("Номер", ОжидаемыйНомер, ПроверятьПометкуУдаления); + Возврат СодержитЗаписи(Условия, ОписаниеУтверждения); + +КонецФункции + +// Проверяет отсутствие в таблице записей с указанным наименованием +// +// Параметры: +// ОжидаемоеНаименование - Строка +// ПроверятьПометкуУдаления - Булево - Проверять пометку удаления. +// + `Истина` - Подбираются только непомеченные на удаление записи. +// + `Ложь` - пометка на удаление игнорируется +// +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержитЗаписиСНаименованием(ОжидаемоеНаименование, ПроверятьПометкуУдаления = Истина, ОписаниеУтверждения = Неопределено) Экспорт + + Условия = ПредикатПоискаПоРеквизиту("Наименование", ОжидаемоеНаименование, ПроверятьПометкуУдаления); + Возврат НеСодержитЗаписи(Условия, ОписаниеУтверждения); + +КонецФункции + +// Проверяет отсутствие в таблице записей с указанным кодом +// +// Параметры: +// ОжидаемыйКод - Строка +// ПроверятьПометкуУдаления - Булево - Проверять пометку удаления. +// + `Истина` - Подбираются только непомеченные на удаление записи. +// + `Ложь` - пометка на удаление игнорируется +// +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержитЗаписиСКодом(ОжидаемыйКод, ПроверятьПометкуУдаления = Истина, ОписаниеУтверждения = Неопределено) Экспорт + + Условия = ПредикатПоискаПоРеквизиту("Код", ОжидаемыйКод, ПроверятьПометкуУдаления); + Возврат НеСодержитЗаписи(Условия, ОписаниеУтверждения); + +КонецФункции + +// Проверяет отсутствие в таблице записей с указанным номером +// +// Параметры: +// ОжидаемыйНомер - Строка +// ПроверятьПометкуУдаления - Булево - Проверять пометку удаления. +// + `Истина` - Подбираются только непомеченные на удаление записи. +// + `Ложь` - пометка на удаление игнорируется +// +// ОписаниеУтверждения - Строка - Описание конкретного утверждения +// +// Возвращаемое значение: +// ОбщийМодуль - Этот модуль для замыкания +Функция НеСодержитЗаписиСНомером(ОжидаемыйНомер, ПроверятьПометкуУдаления = Истина, ОписаниеУтверждения = Неопределено) Экспорт + + Условия = ПредикатПоискаПоРеквизиту("Номер", ОжидаемыйНомер, ПроверятьПометкуУдаления); + Возврат НеСодержитЗаписи(Условия, ОписаниеУтверждения); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Контекст + +// Контекст. +// +// Возвращаемое значение: +// см. НовыйКонтекст +Функция Контекст() + + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекста()); + +КонецФункции + +// Инициализирует контекст +// +// Параметры: +// ИмяТаблицы - Строка +// +// Возвращаемое значение: +// см. ЮТФабрикаСлужебный.ОписаниеПроверки +Функция НовыйКонтекст(ИмяТаблицы) + + Контекст = ЮТФабрикаСлужебный.ОписаниеПроверки(ИмяТаблицы); + + Возврат Контекст; + +КонецФункции + +Функция ИмяКонтекста() + + Возврат "КонтекстУтвержденияИБ"; + +КонецФункции + +#КонецОбласти + +Процедура СгенерироватьОшибкуУтверждения(Контекст, Предикат, Сообщение) + + Если Предикат <> Неопределено Тогда + ПредставлениеПредиката = ЮТПредикатыСлужебныйКлиентСервер.ПредставлениеПредикатов(Предикат, ", ", "`%1`"); + КонецЕсли; + + Если ЗначениеЗаполнено(ПредставлениеПредиката) Тогда + СообщениеОбОшибке = СтрШаблон("%1 с %2", Сообщение, ПредставлениеПредиката); + Иначе + СообщениеОбОшибке = Сообщение; + КонецЕсли; + + ЮТРегистрацияОшибокСлужебный.СгенерироватьОшибкуУтверждения(Контекст, СообщениеОбОшибке, Неопределено, "проверяемая таблица"); + +КонецПроцедуры + +Процедура УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки) + + Контекст.ОписаниеПроверки = ОписаниеПроверки; + +КонецПроцедуры + +Функция ПредикатПоискаПоРеквизиту(ИмяРеквизита, ЗначениеРеквизита, ПроверятьПометкуУдаления) + + Условия = ЮТПредикаты.Инициализировать() + .Реквизит(ИмяРеквизита).Равно(ЗначениеРеквизита); + + Если ПроверятьПометкуУдаления Тогда + Условия.Реквизит("ПометкаУдаления").Равно(Ложь); + КонецЕсли; + + Возврат Условия; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФабрика.xml b/src/cfe/YAXUnit/CommonModules/ЮТФабрика.xml new file mode 100644 index 0000000..cad0590 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФабрика.xml @@ -0,0 +1,23 @@ + + + + + ЮТФабрика + + + ru + Фабрика + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФабрика/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТФабрика/Ext/Module.bsl new file mode 100644 index 0000000..ee36eba --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФабрика/Ext/Module.bsl @@ -0,0 +1,283 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ПрограммныйИнтерфейс + +#Область Перечисления +// КонтекстыВызова +// Возвращает перечисление возможных контекстов вызова +// Возвращаемое значение: +// ФиксированнаяСтруктура - Контексты вызова: +// * КлиентОбычноеПриложение - Строка +// * КлиентУправляемоеПриложение - Строка +// * Сервер - Строка +// * ВызовСервера - Строка +Функция КонтекстыВызова() Экспорт + + Контексты = Новый Структура(); + + Контексты.Вставить("КлиентОбычноеПриложение", "КлиентОбычноеПриложение"); + Контексты.Вставить("КлиентУправляемоеПриложение", "КлиентУправляемоеПриложение"); + Контексты.Вставить("Сервер", "Сервер"); + Контексты.Вставить("ВызовСервера", "ВызовСервера"); + + // TODO Подозреваю нужно добавить web клиент + + Возврат Новый ФиксированнаяСтруктура(Контексты); + +КонецФункции + +// КонтекстыИсполнения +// Возвращает перечисление возможных контекстов исполнения тестов +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Контексты исполнения: +// * Клиент - Строка +// * Сервер - Строка +Функция КонтекстыИсполнения() Экспорт + + Контексты = Новый Структура(); + + Контексты.Вставить("Клиент", "Клиент"); + Контексты.Вставить("Сервер", "Сервер"); + + Возврат Новый ФиксированнаяСтруктура(Контексты); + +КонецФункции + +// Возвращает перечисление возможных статусов выполнения теста, жизненный цикл теста +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Статусы исполнения теста: +// * Ожидание- Строка - Тест не выполнялся +// * Исполнение- Строка - Тест выполняется в данный момент +// * Успешно- Строка - Тест успешно пройден +// * Ошибка- Строка - Тест упал с ошибкой выполнения +// * Сломан- Строка - Тест упал на проверках утверждений +// * Пропущен- Строка - Тест пропущен по каким либо причинам +// * НеРеализован- Строка - Тест не реализован +Функция СтатусыИсполненияТеста() Экспорт + + Статусы = Новый Структура(); + + Статусы.Вставить("Ожидание", "Ожидание"); + Статусы.Вставить("Исполнение", "Исполнение"); + Статусы.Вставить("Успешно", "Успешно"); + Статусы.Вставить("Ошибка", "Ошибка"); + Статусы.Вставить("Сломан", "Сломан"); + Статусы.Вставить("Пропущен", "Пропущен"); + Статусы.Вставить("НеРеализован", "НеРеализован"); + + Возврат Новый ФиксированнаяСтруктура(Статусы); + +КонецФункции + +// Возвращает перечисление возможные уровнией исполнения тестрв. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Уровни исполнения: +// * Модуль - Строка +// * НаборТестов - Строка +// * Тест - Строка +Функция УровниИсполнения() Экспорт + + Уровни = Новый Структура; + Уровни.Вставить("Модуль", "Модуль"); + Уровни.Вставить("НаборТестов", "НаборТестов"); + Уровни.Вставить("Тест", "Тест"); + + Возврат Новый ФиксированнаяСтруктура(Уровни); + +КонецФункции + +#КонецОбласти + +// ПараметрыЗапуска +// Набор параметров подсистемы тестирования. +// Параметры на английском, чтобы не держать несколько реализаций чтения и обработки параметров +// +// Возвращаемое значение: +// Структура - Параметры: +// * ВыполнятьМодульноеТестирование - Булево - Признак необходимости выполнения тестов +// * reportPath - Строка - Файл или каталог сохранения отчета о тестировании +// * filter - см. ПараметрыФильтрации +// * settings - см. НастройкиВыполнения +// * closeAfterTests - Булево - Признак необходимости закрытия приложения по окончании прогона +// * reportFormat - Строка - Формат отчета о тестировании. +// Модули реализующие различные форматы отчетов собраны в подсистеме ЮТФормированиеОтчета +// * logging - см. ПараметрыЛогирования +// * showReport - Булево - Признак необходмости отобразить отчет в 1с по окончании тестирования +// * exitCode - Строка - Путь к файлу, в который будет записан коды выхода +// * ПодключатьВнешниеКомпоненты - Булево - Выполнять установку и подключение внешних компонент при старте. +// Если выключено и включен запрет синхронных вызовов, то компоненты не будут доступы в тонком клиенте. +// Если выключено и разрешены синхронные вызовы, то компоненты можно установить вручную и тогда они будут доступны на клиенте. +Функция ПараметрыЗапуска() Экспорт + + Параметры = Новый Структура; + + Параметры.Вставить("ВыполнятьМодульноеТестирование", Ложь); + + Параметры.Вставить("reportPath", ""); + Параметры.Вставить("closeAfterTests", Истина); + Параметры.Вставить("filter", ПараметрыФильтрации()); + Параметры.Вставить("settings", НастройкиВыполнения()); + Параметры.Вставить("reportFormat", "jUnit"); + Параметры.Вставить("showReport", Ложь); + Параметры.Вставить("logging", ПараметрыЛогирования()); + Параметры.Вставить("exitCode", ""); + + Параметры.Вставить("ПодключатьВнешниеКомпоненты", Истина); + + Возврат Параметры; + +КонецФункции + +// Выражение предиката. +// +// Параметры: +// ВидСравнения - Строка - см. ЮТПредикаты.Выражения +// ИмяРеквизита - Строка - Имя реквизита +// Значение - Произвольный - Значение +// +// Возвращаемое значение: +// Структура - Выражение предиката: +// * ИмяРеквизита - Неопределено, Строка - Имя проверяемого реквизита +// * ВидСравнения - Строка +// * Значение - Произвольный, Неопределено - Операнд выражения +Функция ВыражениеПредиката(ВидСравнения, ИмяРеквизита = Неопределено, Значение = Неопределено) Экспорт + + Выражение = Новый Структура(); + ЮТОбщий.УказатьТипСтруктуры(Выражение, "Предикат"); + + Выражение.Вставить("ИмяРеквизита", ИмяРеквизита); + Выражение.Вставить("ВидСравнения", ВидСравнения); + Выражение.Вставить("Значение", Значение); + + Возврат Выражение; + +КонецФункции + +// Доступные параметры (настройки) исполнения тестов +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Параметры исполнения теста: +// * ВТранзакции - Строка - Тест должен выполняться в транзакции +// * УдалениеТестовыхДанных - Строка - Тест должен удалить созданные тестовые данные +// * Перед - Строка - Перед тестом должен выполниться указанный обработчик события вместо основного +// * После - Строка - После теста должен выполниться указанный обработчик события вместо основного +Функция ПараметрыИсполненияТеста() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ВТранзакции", "ВТранзакции"); + Параметры.Вставить("УдалениеТестовыхДанных", "УдалениеТестовыхДанных"); + Параметры.Вставить("Перед", "Перед"); + Параметры.Вставить("После", "После"); + + Возврат Новый ФиксированнаяСтруктура(Параметры); + +КонецФункции + +// Параметры создания объектов, используется при загрузке макетов. +// +// Параметры: +// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи +// ФикцияОбязательныхПолей - Булево - Фикция обязательных полей +// +// Возвращаемое значение: +// Структура - Параметры создания объектов: +// * ФикцияОбязательныхПолей - Булево +// * ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи +Функция ПараметрыСозданияОбъектов(Знач ПараметрыЗаписи = Неопределено, ФикцияОбязательныхПолей = Ложь) Экспорт + + Если ПараметрыЗаписи = Неопределено Тогда + ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); + Иначе + ВходныеПараметрыЗаписи = ПараметрыЗаписи; + ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); + ЗаполнитьЗначенияСвойств(ПараметрыЗаписи, ВходныеПараметрыЗаписи); + КонецЕсли; + + Возврат Новый Структура("ФикцияОбязательныхПолей, ПараметрыЗаписи", ФикцияОбязательныхПолей, ПараметрыЗаписи); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// ПараметрыФильтрации +// Возвращает структуру отборов для поиска тестов +// Возвращаемое значение: +// Структура - Параметры фильтрации: +// * extensions - Неопределено - Нет фильтрации по расширениям +// - Массив из Строка - Список тестовых расширений +// * modules - Неопределено - Нет фильтрации по модулям +// - Массив из Строка - Список тестовых модулей +// * suites - Неопределено - Нет фильтрации по тестовым наборам +// - Массив из Строка - Список тестовых наборов +// * paths - Неопределено - Нет фильтрации по путям +// - Массив из Строка - Список путей до тестовых методов, путь может быть не полным. +// Например: +// + tests - Ищем тесты в расширении tests +// + tests.ОМ_ОбщегоНазначения - Ищем тесты в модуле ОМ_ОбщегоНазначения расширения tests +// + tests.ОМ_ОбщегоНазначения.ПолучитьЗначениеРеквизита - указание конкретного теста +// * tags - Неопределено - Нет фильтрации по тегам +// - Массив из Строка - Список тэгов +// * contexts - Неопределено - Нет фильтрации по контекстам +// - Массив из Строка - Список тестируемых контекстов +// * tests - Неопределено - Нет фильтрации по тестам +// - Массив из Строка - Список полных имен тестовых методов. ИмяМодуля.ИмяМетода{.Контекст} +Функция ПараметрыФильтрации() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("extensions", Неопределено); + Параметры.Вставить("modules", Неопределено); + Параметры.Вставить("suites", Неопределено); + Параметры.Вставить("tags", Неопределено); + Параметры.Вставить("contexts", Неопределено); + Параметры.Вставить("paths", Неопределено); + Параметры.Вставить("tests", Неопределено); + + Возврат Параметры; + +КонецФункции + +Функция НастройкиВыполнения() Экспорт + + Настройки = Новый Структура(); + + ПараметрыИсполнения = ПараметрыИсполненияТеста(); + Настройки.Вставить(ПараметрыИсполнения.ВТранзакции, Ложь); + + Возврат Настройки; + +КонецФункции + +Функция ПараметрыЛогирования() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("file", ""); + Параметры.Вставить("console", Ложь); + Параметры.Вставить("enable", Неопределено); + Параметры.Вставить("level", ЮТЛогирование.УровниЛога().Отладка); + + Возврат Параметры; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФабрикаСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТФабрикаСлужебный.xml new file mode 100644 index 0000000..6a7e4dd --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФабрикаСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТФабрикаСлужебный + + + ru + Фабрика + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФабрикаСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТФабрикаСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..c088c35 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФабрикаСлужебный/Ext/Module.bsl @@ -0,0 +1,684 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +#Область Перечисления + +// Типы ошибок. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Типы возможных ошибок: +// * ТестНеРеализован - Строка +// * ОшибкаСравнения - Строка +// * ОшибкаОбработкиСобытия - Строка +// * Утверждений - Строка +// * Исполнения - Строка +// * ЧтенияТестов - Строка +// * МалоПараметров - Строка +// * МногоПараметров - Строка +// * НекорректныйКонтекстИсполнения - Строка +// * Пропущен - Строка +Функция ТипыОшибок() Экспорт + + Типы = Новый Структура; + + Для Каждого ТипОшибки Из ПараметрыТиповОшибок() Цикл + Типы.Вставить(ТипОшибки.Ключ, ТипОшибки.Ключ); + КонецЦикла; + + //@skip-check constructor-function-return-section + Возврат Новый ФиксированнаяСтруктура(Типы); + +КонецФункции + +Функция ПараметрыТиповОшибок(Кешировать = Истина) Экспорт + + Если Кешировать Тогда + ЮТСлужебныйПовторногоИспользования.ПараметрыТиповОшибок(); + КонецЕсли; + + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + Реквизиты = "Ключ, Представление, Статус"; + + ТипыОшибок = Новый Массив(); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ТестНеРеализован", "Не реализован", Статусы.НеРеализован)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ОшибкаСравнения", "Ошибка сравнения", Статусы.Ошибка)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ОшибкаОбработкиСобытия", "Ошибка обработки события", Статусы.Сломан)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Утверждений", "Ошибка утверждений", Статусы.Ошибка)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Исполнения", "Ошибка исполнения", Статусы.Сломан)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ЧтенияТестов", "Загрузки тестов", Статусы.Сломан)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "МалоПараметров", "Мало фактических параметров", Статусы.Сломан)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "МногоПараметров", "Много фактических параметров", Статусы.Сломан)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "НекорректныйКонтекстИсполнения", "Некорректный контекст исполнения", Статусы.Пропущен)); + ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Пропущен", "Пропущен", Статусы.Пропущен)); + + Возврат ЮТКоллекции.ВСтруктуру(ТипыОшибок, "Ключ"); + +КонецФункции + +#КонецОбласти + +#Область СтруктурыДанных + +// Описание тестового модуля. +// +// Параметры: +// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// НаборыТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора +// +// Возвращаемое значение: +// Структура - Описание тестового модуля: +// * МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// * НаборыТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора +// * Ошибки - Массив из см. ЮТФабрикаСлужебный.ОписаниеВозникшейОшибки +// * НастройкиВыполнения- Структура - Настройки исполнения теста +Функция ОписаниеТестовогоМодуля(МетаданныеМодуля, НаборыТестов) Экспорт + + Описание = Новый Структура; + Описание.Вставить("МетаданныеМодуля", МетаданныеМодуля); + Описание.Вставить("НаборыТестов", НаборыТестов); + Описание.Вставить("Ошибки", Новый Массив); + Описание.Вставить("НастройкиВыполнения", Новый Структура()); + + Возврат Описание; + +КонецФункции + +// ОписаниеТестовогоНабора +// Возвращает описание регистрируемого тестового набора. +// Эта структура используется на этапе формирования описаний имеющихся тестов +// Параметры: +// Имя - Строка - Имя набора +// ТегиСтрокой - Строка - Теги набора +// +// Возвращаемое значение: +// Структура - Описание тестового набора: +// * Имя - Строка - Имя набора +// * Представление - Строка - Представление, краткое описание +// * Теги - Массив из Строка - Коллекция тегов набора +// * Тесты - Массив из см. ОписаниеТеста - Коллекция тестов набора, см. ОписаниеТеста +// * Ошибки - Массив из см. ЮТФабрикаСлужебный.ОписаниеВозникшейОшибки - Описания ошибок регистрации тестов +// * НастройкиВыполнения- Структура - Настройки исполнения теста +Функция ОписаниеТестовогоНабора(Имя, ТегиСтрокой = "") Экспорт + + Описание = Новый Структура; + Описание.Вставить("Имя", Строка(Имя)); + Описание.Вставить("Представление", Строка(Имя)); + Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь)); + Описание.Вставить("Тесты", Новый Массив); + Описание.Вставить("Ошибки", Новый Массив); + Описание.Вставить("НастройкиВыполнения", Новый Структура()); + + Возврат Описание; + +КонецФункции + +// ОписаниеТеста +// Возвращает описание регистрируемого теста. +// Эта структура используется на этапе формирования описаний имеющихся тестов +// Параметры: +// Имя - Строка - Имя тестового метода +// Представление - Строка - Представление, краткое описание теста +// КонтекстыВызова - Массив из Строка - Контексты исполнения теста, см. ЮТФабрика.КонтекстыВызова +// ТегиСтрокой - Строка - Теги теста +// +// Возвращаемое значение: +// Структура - Описание теста: +// * Имя - Строка - Имя теста (тестового метода) +// * Представление - Строка - Представление теста +// * Теги - Массив из Строка - Теги теста +// * КонтекстВызова - Массив из Строка - Контексты исполнения теста +// * НастройкиВыполнения- Структура - Настройки исполнения теста +// * Параметры - Неопределено, Массив из Произвольный - Параметры теста +// * НомерВНаборе - Число - Порядковый номер теста в наборе +Функция ОписаниеТеста(Имя, Представление, КонтекстыВызова, Знач ТегиСтрокой = "") Экспорт + + Если ТегиСтрокой = Неопределено Тогда + ТегиСтрокой = ""; + КонецЕсли; + + Описание = Новый Структура(); + Описание.Вставить("Имя", Строка(Имя)); + Описание.Вставить("Представление", Строка(Представление)); + Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь)); + Описание.Вставить("КонтекстВызова", КонтекстыВызова); + Описание.Вставить("НастройкиВыполнения", Новый Структура()); + Описание.Вставить("Параметры", Неопределено); + Описание.Вставить("НомерВНаборе", 0); + + Возврат Описание; + +КонецФункции + +// Описание исполняемого тестового модуля. +// Содержит всю необходимую информацию для прогона тестов, а также данные результата +// Параметры: +// ТестовыйМодуль - см. ОписаниеТестовогоМодуля +// +// Возвращаемое значение: +// Структура - Описание тестового модуля: +// * МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// * НаборыТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// * Ошибки - Массив из см. ЮТФабрикаСлужебный.ОписаниеВозникшейОшибки +// * НастройкиВыполнения- Структура - Настройки исполнения теста +Функция ОписаниеИсполняемогоТестовогоМодуля(ТестовыйМодуль) Экспорт + + Описание = Новый Структура; + + Описание.Вставить("МетаданныеМодуля", ТестовыйМодуль.МетаданныеМодуля); + Описание.Вставить("НаборыТестов", Новый Массив); + Описание.Вставить("Ошибки", ЮТКоллекции.СкопироватьМассив(ТестовыйМодуль.Ошибки)); + Описание.Вставить("НастройкиВыполнения", ЮТКоллекции.СкопироватьСтруктуру(ТестовыйМодуль.НастройкиВыполнения)); + + Возврат Описание; + +КонецФункции + +// ОписаниеИсполняемогоНабораТестов +// Возвращает описание исполняемого тестового набора. +// Содержит данные необходимые для выполнения прогона тестов +// Параметры: +// НаборТестов - См. ОписаниеТестовогоНабора +// ТестовыйМодуль - См. ОписаниеТестовогоМодуля +// +// Возвращаемое значение: +// Структура - Описание исполняемого набора тестов: +// * Имя - Строка - Имя набора +// * Представление - Строка - Представление набора +// * Теги - Массив из Строка - Тэги набора +// * Ошибки - Массив из см. ЮТФабрикаСлужебный.ОписаниеВозникшейОшибки - Описания ошибок выполнения теста +// * Режим - Строка - Режим исполнения набора, см. ЮТФабрика.КонтекстыВызова +// * МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// * Тесты - Массив из см. ОписаниеИсполняемогоТеста - Тесты набора, структуру тестов см. ОписаниеИсполняемогоТеста +// * Выполнять - Булево - Признак, что можно выполнить прогон набора (нет ошибок блокирующих запуск) +// * ДатаСтарта - Число - Дата запуска набора +// * Длительность - Число - Продолжительность выполнения набора +// * НастройкиВыполнения - Структура - Настройки исполнения теста +// * ТестовыйМодуль - См. ОписаниеТестовогоМодуля +Функция ОписаниеИсполняемогоНабораТестов(НаборТестов, ТестовыйМодуль) Экспорт + + Описание = Новый Структура(); + + Описание.Вставить("Имя", НаборТестов.Имя); + Описание.Вставить("Представление", НаборТестов.Представление); + Описание.Вставить("Теги", НаборТестов.Теги); + Описание.Вставить("Ошибки", ЮТКоллекции.СкопироватьМассив(НаборТестов.Ошибки)); + Описание.Вставить("Режим", ""); + Описание.Вставить("ТестовыйМодуль", ТестовыйМодуль); + Описание.Вставить("МетаданныеМодуля", ТестовыйМодуль.МетаданныеМодуля); + Описание.Вставить("Тесты", Новый Массив); + Описание.Вставить("Выполнять", Описание.Ошибки.Количество() = 0); + Описание.Вставить("ДатаСтарта", 0); + Описание.Вставить("Длительность", 0); + Описание.Вставить("НастройкиВыполнения", НаборТестов.НастройкиВыполнения); + + Возврат Описание; + +КонецФункции + +// ОписаниеИсполняемогоТеста +// Возвращает описание исполняемого теста +// Содержит данные необходимые для выполнения прогона тестов +// +// Параметры: +// Тест - См. ОписаниеТеста +// Режим - См. ЮТФабрика.КонтекстыВызова +// ТестовыйМодуль - См. ОписаниеТестовогоМодуля +// +// Возвращаемое значение: +// Структура - Описание исполняемого теста: +// * Имя - Строка - Имя/представление теста +// * Метод - Строка - Имя тестового метода +// * ПолноеИмяМетода - Строка - Полное имя тестового метода, ИмяМодуля.ИмяМетода +// * Теги - Массив из Строка - Теги теста +// * Режим - Строка - Режим исполнения теста, см. ЮТФабрика.КонтекстыВызова +// * ДатаСтарта - Число - Дата запуска теста +// * Длительность - Число - Продолжительность выполнения теста +// * Статус - Строка - Статус выполнения теста, см. ЮТФабрика.СтатусыИсполненияТеста +// * Ошибки - Массив из см. ЮТФабрикаСлужебный.ОписаниеВозникшейОшибки - Описания ошибок выполнения теста, см. ЮТФабрикаСлужебный.ОписаниеВозникшейОшибки +// * НастройкиВыполнения- Структура - Настройки исполнения теста +// * Параметры - Неопределено, Массив из Произвольный - Набор параметров теста +// * НомерВНаборе - Число - Порядковый номер теста в наборе +Функция ОписаниеИсполняемогоТеста(Тест, Режим, ТестовыйМодуль) Экспорт + + ПолноеИмяМетода = СтрШаблон("%1.%2", ТестовыйМодуль.МетаданныеМодуля.Имя, Тест.Имя); + Представление = ПредставлениеТеста(Тест); + + ОписаниеТеста = Новый Структура; + ОписаниеТеста.Вставить("Имя", Представление); + ОписаниеТеста.Вставить("Метод", Тест.Имя); + ОписаниеТеста.Вставить("ПолноеИмяМетода", ПолноеИмяМетода); + ОписаниеТеста.Вставить("Теги", Тест.Теги); + ОписаниеТеста.Вставить("Режим", Режим); + ОписаниеТеста.Вставить("ДатаСтарта", 0); + ОписаниеТеста.Вставить("Длительность", 0); + ОписаниеТеста.Вставить("Статус", ЮТФабрика.СтатусыИсполненияТеста().Ожидание); + ОписаниеТеста.Вставить("Ошибки", Новый Массив); + ОписаниеТеста.Вставить("НастройкиВыполнения", Тест.НастройкиВыполнения); + ОписаниеТеста.Вставить("Параметры", Тест.Параметры); + ОписаниеТеста.Вставить("НомерВНаборе", Тест.НомерВНаборе); + + //@skip-check constructor-function-return-section + Возврат ОписаниеТеста; + +КонецФункции + +// ОписаниеМодуля +// Возвращает структуру описания модуля +// Возвращаемое значение: +// Структура - Описание модуля: +// * Имя - Строка - Имя модуля +// * ПолноеИмя - Строка - Полное имя модуля +// * Расширение - Строка - Имя расширения, владельца модуля +// * КлиентУправляемоеПриложение - Булево - Доступность контекста +// * КлиентОбычноеПриложение - Булево - Доступность контекста +// * Сервер - Булево - Доступность контекста +// * ВызовСервера - Булево - Доступность контекста +// * Глобальный - Булево - Доступность контекста +Функция ОписаниеМодуля() Экспорт + + Описание = Новый Структура; + Описание.Вставить("Имя", ""); + Описание.Вставить("ПолноеИмя", ""); + Описание.Вставить("Расширение", ""); + Описание.Вставить("КлиентУправляемоеПриложение", Ложь); + Описание.Вставить("КлиентОбычноеПриложение", Ложь); + Описание.Вставить("Сервер", Ложь); + Описание.Вставить("ВызовСервера", Ложь); + Описание.Вставить("Глобальный", Ложь); + + Возврат Описание; + +КонецФункции + +// ОписаниеВозникшейОшибки +// Возвращает базовую структуру ошибки +// +// Параметры: +// Сообщение - Строка - Описание ошибки +// +// Возвращаемое значение: +// Структура - Описание возникшей ошибки: +// * Сообщение - Строка - Описание возникшей ошибки +// * Стек - Строка - Стек возникшей ошибки +// * ТипОшибки - Строка - Тип возникшей ошибки. Доступные значения см. ЮТФабрикаСлужебный.ТипыОшибок +// * Лог - Массив из Строка +Функция ОписаниеВозникшейОшибки(Сообщение) Экспорт + + Описание = Новый Структура("Стек, ТипОшибки", "", ""); + Описание.Вставить("Сообщение", Сообщение); + Описание.Вставить("Лог", Новый Массив); + + Возврат Описание; + +КонецФункции + +// Возвращает базовую структуру ошибки проверки факта и ожидания +// +// Параметры: +// Сообщение - Строка +// +// Возвращаемое значение: +// Структура - Описание возникшей ошибки: +// * Сообщение - Строка - Описание возникшей ошибки +// * Стек - Строка - Стек возникшей ошибки +// * ТипОшибки - Строка - Тип возникшей ошибки. Доступные значения см. ЮТФабрикаСлужебный.ТипыОшибок +// * ПроверяемоеЗначение - Произвольный - Проверяемое, фактическое значение +// * ОжидаемоеЗначение - Произвольный - Ожидаемое значение +Функция ОписаниеОшибкиСравнения(Сообщение) Экспорт + + Описание = ОписаниеВозникшейОшибки(Сообщение); + Описание.ТипОшибки = ТипыОшибок().Утверждений; + Описание.Вставить("ПроверяемоеЗначение"); + Описание.Вставить("ОжидаемоеЗначение"); + + //@skip-check constructor-function-return-section + Возврат Описание; + +КонецФункции + +// Возвращает базовую структуру ошибки пропуска теста +// +// Параметры: +// Сообщение - Строка +// +// Возвращаемое значение: +// Структура - Описание возникшей ошибки: +// * Сообщение - Строка - Описание возникшей ошибки +// * Стек - Строка - Стек возникшей ошибки +// * ТипОшибки - Строка - Тип возникшей ошибки. Доступные значения +// См. ЮТФабрикаСлужебный.ТипыОшибок +Функция ОписаниеОшибкиПропуска(Сообщение) Экспорт + + Описание = ОписаниеВозникшейОшибки(Сообщение); + Описание.ТипОшибки = ТипыОшибок().Пропущен; + + Возврат Описание; + +КонецФункции + +// Описание события исполнения тестов. +// +// Параметры: +// Модуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// Набор - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// Тест - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +// +// Возвращаемое значение: +// Структура - Описание события исполнения тестов: +// * Модуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// * Набор - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// * Тест - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТеста +Функция ОписаниеСобытияИсполненияТестов(Модуль, Набор = Неопределено, Тест = Неопределено) Экспорт + + Описание = Новый Структура(); + Описание.Вставить("Модуль", Модуль); + Описание.Вставить("Набор", Набор); + Описание.Вставить("Тест", Тест); + + //@skip-check constructor-function-return-section + Возврат Описание; + +КонецФункции + +// Описание категория набора тестов. +// +// Параметры: +// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// +// Возвращаемое значение: +// Структура - Описание категория набора тестов: +// * ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +// * Клиентские - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// * Серверные - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +// * Пропущенные - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоНабораТестов +Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль) Экспорт + + КатегорииНаборов = Новый Структура(); + КатегорииНаборов.Вставить("ТестовыйМодуль", ТестовыйМодуль); + КатегорииНаборов.Вставить("Клиентские", Новый Массив()); + КатегорииНаборов.Вставить("Серверные", Новый Массив()); + КатегорииНаборов.Вставить("Пропущенные", Новый Массив()); + + //@skip-check constructor-function-return-section + Возврат КатегорииНаборов; + +КонецФункции + +// Формирует описание проверяемого значения. +// Используется в утверждения для формирования дружелюбного сообщения об ошибке. +// +// Параметры: +// ПроверяемоеЗначение - Произвольный - Проверяемое значение +// +// Возвращаемое значение: +// Структура - Описание проверяемого значения: +// * Значение - Произвольный +// * Представление - Строка - Представление объекта +// - Неопределено - Если не указано тогда используется платформенное предсталение (`Строка(Значение)`) +// * ИмяСвойства - Строка, Число, Неопределено - Имя проверяемого реквизита, индекса +Функция ОписаниеПроверяемогоЗначения(ПроверяемоеЗначение) Экспорт + + Описание = Новый Структура(); + Описание.Вставить("Значение", ПроверяемоеЗначение); + Описание.Вставить("Представление", Неопределено); + Описание.Вставить("ИмяСвойства", Неопределено); + + Возврат Описание; + +КонецФункции + +// Описание проверки. +// +// Параметры: +// ПроверяемоеЗначение - Произвольный +// +// Возвращаемое значение: +// Структура - Описание проверки: +// * ОбъектПроверки - см. ОписаниеПроверяемогоЗначения +// * ПрефиксОшибки - Строка, Неопределено - +// * ОписаниеПроверки - Строка, Неопределено - +Функция ОписаниеПроверки(ПроверяемоеЗначение) Экспорт + + Описание = Новый Структура(); + Описание.Вставить("ОбъектПроверки", ОписаниеПроверяемогоЗначения(ПроверяемоеЗначение)); + Описание.Вставить("ПрефиксОшибки", Неопределено); + Описание.Вставить("ОписаниеПроверки", Неопределено); + + Возврат Описание; + +КонецФункции + +#КонецОбласти + +#Область КонструкторыКонтекстов + +// Данные контекста исполнения. +// +// Возвращаемое значение: +// Структура - Данные контекста исполнения: +// * Уровень - Строка - Возможные значения см. ЮТФабрика.УровниИсполнения +// * Модуль - Неопределено - Нет исполняемого модуля +// - см. ОписаниеТестовогоМодуля +// * Набор - Неопределено - Нет исполняемого тестового набора +// - см. ОписаниеИсполняемогоНабораТестов +// * Тест - Неопределено - Нет исполняемого теста +// - см. ОписаниеИсполняемогоТеста +Функция НовыйКонтекстИсполнения() Экспорт + + Контекст = Новый Структура(); + Контекст.Вставить("Уровень", ""); + Контекст.Вставить("Модуль", Неопределено); + Контекст.Вставить("Набор", Неопределено); + Контекст.Вставить("Тест", Неопределено); + + Возврат Контекст; + +КонецФункции + +// Описание результата проверки. +// +// Параметры: +// Успешно - Булево - Успешно +// +// Возвращаемое значение: +// Структура - Описание результата проверки: +// * Сообщения - Массив из Произвольный +// * Успешно - Булево +Функция ОписаниеРезультатаПроверки(Успешно = Истина) Экспорт + + Описание = Новый Структура(); + Описание.Вставить("Сообщения", Новый Массив); + Описание.Вставить("Успешно", Истина); + + Возврат Описание; + +КонецФункции + +#КонецОбласти + +// КонтекстыМодуля +// Возвращает коллекцию доступных контекстов выполнения модуля +// Параметры: +// Модуль - См. ОписаниеМодуля +// +// Возвращаемое значение: +// Массив из Строка - Контексты модуля, возможные значения см. ЮТФабрика.КонтекстыВызова +Функция КонтекстыМодуля(Модуль) Экспорт + + Контексты = ЮТФабрика.КонтекстыВызова(); + + КонтекстыМодуля = Новый Массив(); + + Если Модуль.Сервер Тогда + КонтекстыМодуля.Добавить(Контексты.Сервер); + КонецЕсли; + + Если Модуль.КлиентУправляемоеПриложение Тогда + КонтекстыМодуля.Добавить(Контексты.КлиентУправляемоеПриложение); + КонецЕсли; + + Если Модуль.КлиентОбычноеПриложение Тогда + КонтекстыМодуля.Добавить(Контексты.КлиентОбычноеПриложение); + КонецЕсли; + + Возврат КонтекстыМодуля; + +КонецФункции + +// КонтекстыПриложения +// Возвращает коллекцию доступных контекстов приложения +// Возвращаемое значение: +// Массив из Строка - Контексты приложения, возможные значения см. ЮТФабрика.КонтекстыВызова +Функция КонтекстыПриложения() Экспорт + +#Если НЕ Клиент Тогда + ВызватьИсключение "Метод получения контекстов приложения должен вызываться с клиента"; +#КонецЕсли + + Контексты = ЮТФабрика.КонтекстыВызова(); + КонтекстыПриложения = Новый Массив(); + + КонтекстыПриложения.Добавить(Контексты.Сервер); + КонтекстыПриложения.Добавить(Контексты.ВызовСервера); + +#Если ТолстыйКлиентОбычноеПриложение Тогда + КонтекстыПриложения.Добавить(Контексты.КлиентОбычноеПриложение); +#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Или ТонкийКлиент Тогда + КонтекстыПриложения.Добавить(Контексты.КлиентУправляемоеПриложение); +#КонецЕсли + + Возврат КонтекстыПриложения; + +КонецФункции + +// КонтекстИсполнения +// Возвращает контекст исполнения по контексту вызова +// Параметры: +// КонтекстВызова - Строка - Контекст вызова, см. ЮТФабрика.КонтекстыВызова +// +// Возвращаемое значение: +// Неопределено, Строка - Контекст исполнения +Функция КонтекстИсполнения(КонтекстВызова) Экспорт + + КонтекстыВызова = ЮТФабрика.КонтекстыВызова(); + + Если КонтекстВызова = КонтекстыВызова.Сервер Тогда + + Возврат ЮТФабрика.КонтекстыИсполнения().Сервер; + + ИначеЕсли КонтекстВызова = КонтекстыВызова.КлиентУправляемоеПриложение + ИЛИ КонтекстВызова = КонтекстыВызова.КлиентОбычноеПриложение + ИЛИ КонтекстВызова = КонтекстыВызова.ВызовСервера Тогда + + Возврат ЮТФабрика.КонтекстыИсполнения().Клиент; + + Иначе + + Возврат Неопределено; + + КонецЕсли; + +КонецФункции + +// Формирует представление теста +// +// Параметры: +// Тест - см. ОписаниеТеста +// +// Возвращаемое значение: +// Строка - Представление теста +Функция ПредставлениеТеста(Тест) Экспорт + + Если ЗначениеЗаполнено(Тест.Представление) Тогда + Представление = Тест.Представление; + ИначеЕсли ЗначениеЗаполнено(Тест.Параметры) Тогда + ПредставлениеПараметров = СтрСоединить(Тест.Параметры, ", "); + Представление = СтрШаблон("%1(%2)", Тест.Имя, ПредставлениеПараметров); + Иначе + Представление = Тест.Имя; + КонецЕсли; + + Возврат Представление; + +КонецФункции + +Функция ПараметрыЗаполненияТаблицыЗначений(Знач ПараметрыСозданияОбъектов = Неопределено) Экспорт + + Если ПараметрыСозданияОбъектов = Неопределено Тогда + ПараметрыСозданияОбъектов = ЮТФабрика.ПараметрыСозданияОбъектов(); + Иначе + ВходныеПараметрыСозданияОбъектов = ПараметрыСозданияОбъектов; + ПараметрыСозданияОбъектов = ЮТФабрика.ПараметрыСозданияОбъектов(); + ЗаполнитьЗначенияСвойств(ПараметрыСозданияОбъектов, ВходныеПараметрыСозданияОбъектов); + КонецЕсли; + + Возврат Новый ФиксированнаяСтруктура("СозданиеОбъектовМетаданных", ПараметрыСозданияОбъектов); + +КонецФункции + +// Параметры генератора отчета. +// Описывает предоставляемые модулем форматы отчетов +// +// Возвращаемое значение: +// Структура - Параметры генератора отчета: +// * Форматы - Структура - Форматы отчетов, предоставляемые модулем +Функция ПараметрыГенератораОтчета() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("Форматы", Новый Структура); + + Возврат Параметры; + +КонецФункции + +// Описание формата отчета. +// +// Параметры: +// Идентификатор - Строка - Уникальный идентификатор формата отчета +// Представление - Строка - Пользовательское представление отчета, выводится в форму настроек тестирования +// +// Возвращаемое значение: +// Структура - Описание формата отчета: +// * Идентификатор - Строка - Уникальный идентификатор формата отчета +// * Представление - Строка - Пользовательское представление отчета, выводится в форму настроек тестирования +// * ЗаписьВКаталог - Булево - Отчет записывается в каталог, в этом случае должен быть установлен призак `СамостоятельнаяЗаписьОтчета` +// * ФильтрВыбораФайла - Строка - Фильтр выбора, используется в форме настроек тестирования +// * ИмяФайлаПоУмолчанию - Строка - Для отчетов, записываемых в файл, имя файла если в параметрах указан каталог +// * СамостоятельнаяЗаписьОтчета - Булево - Способ записи отчета в файлы. +// Истина - Модуль формирования отчета самостоятельно записывает отчет +// Ложь - Модуль формирования отчета генерирует данные, которые записываются движком +Функция ОписаниеФорматаОтчета(Идентификатор, Представление) Экспорт + + Описание = Новый Структура(); + Описание.Вставить("Идентификатор", Идентификатор); + Описание.Вставить("Представление", Представление); + Описание.Вставить("ЗаписьВКаталог", Ложь); + Описание.Вставить("ФильтрВыбораФайла", ""); + Описание.Вставить("ИмяФайлаПоУмолчанию", ""); + Описание.Вставить("СамостоятельнаяЗаписьОтчета", Ложь); + + Возврат Описание; + +КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФайлы.xml b/src/cfe/YAXUnit/CommonModules/ЮТФайлы.xml new file mode 100644 index 0000000..01e9009 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФайлы.xml @@ -0,0 +1,23 @@ + + + + + ЮТФайлы + + + ru + Файлы + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФайлы/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТФайлы/Ext/Module.bsl new file mode 100644 index 0000000..a17b5ae --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФайлы/Ext/Module.bsl @@ -0,0 +1,201 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +/////////////////////////////////////////////////////////////////// +// Содержит методы по работе с файлами +/////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Проверяет существование файла +// +// Параметры: +// ПутьКФайлу - Строка +// Обработчик - ОписаниеОповещения - Обработчик асинхронного получения свойства файла. Если обработчик указан, но проверка выполняется асинхронно. +// - Неопределено - Проверка выполняется синхронно. +// +// Возвращаемое значение: +// Булево - Существует +Функция Существует(ПутьКФайлу, Обработчик = Неопределено) Экспорт + + Файл = Новый Файл(ПутьКФайлу); + +#Если Клиент Тогда + Если Обработчик = Неопределено Тогда + Возврат Файл.Существует(); + Иначе + Файл.НачатьПроверкуСуществования(Обработчик); + КонецЕсли; +#Иначе + Возврат Файл.Существует(); +#КонецЕсли + +КонецФункции + +// Проверяет, что по указанному пути находится каталог +// +// Параметры: +// ПутьКФайлу - Строка +// Обработчик - ОписаниеОповещения - Обработчик асинхронного получения свойства файла. Если обработчик указан, но проверка выполняется асинхронно. +// - Неопределено - Проверка выполняется синхронно. +// +// Возвращаемое значение: +// Булево - Это каталог +Функция ЭтоКаталог(ПутьКФайлу, Обработчик = Неопределено) Экспорт + + Файл = Новый Файл(ПутьКФайлу); + +#Если Клиент Тогда + Если Обработчик <> Неопределено Тогда + ОбработчикПолученияАтрибута = ОбработчикПолученияАтрибута(Файл, "ЭтоКаталог", Обработчик, Ложь); + Файл.НачатьПроверкуСуществования(ОбработчикПолученияАтрибута); + + Возврат Неопределено; + КонецЕсли; +#КонецЕсли + + Возврат Файл.Существует() И Файл.ЭтоКаталог(); + +КонецФункции + +// Возвращает путь к вложенному элементу +// +// Параметры: +// Путь1 - Строка - базовый путь к каталогу +// Путь2 - Строка - относительный путь к вложенному элементу +// Путь3 - Строка - относительный путь к вложенному элементу +// Путь4 - Строка - относительный путь к вложенному элементу +// Путь5 - Строка - относительный путь к вложенному элементу +// +// Возвращаемое значение: +// Строка - Объединенный путь +Функция ОбъединитьПути(Путь1, Путь2, Путь3 = Неопределено, Путь4 = Неопределено, Путь5 = Неопределено) Экспорт + + Разделитель = ПолучитьРазделительПути(); + + Результат = ДополнитьПуть(Путь1, Путь2, Разделитель); + + Если Путь3 <> Неопределено Тогда + Результат = ДополнитьПуть(Результат, Путь3, Разделитель); + КонецЕсли; + + Если Путь4 <> Неопределено Тогда + Результат = ДополнитьПуть(Результат, Путь4, Разделитель); + КонецЕсли; + + Если Путь5 <> Неопределено Тогда + Результат = ДополнитьПуть(Результат, Путь5, Разделитель); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Удаляет файлы +// +// Параметры: +// Файлы - Массив из Файл +// - Массив из Строка +Процедура УдалитьВременныеФайлы(Файлы) Экспорт + + Если НЕ ЗначениеЗаполнено(Файлы) Тогда + Возврат; + КонецЕсли; + + Ошибки = Новый Массив(); + + Для Каждого УдаляемыйФайл Из Файлы Цикл + + Если ТипЗнч(УдаляемыйФайл) = Тип("Строка") Тогда + УдаляемыйФайл = Новый Файл(УдаляемыйФайл); + КонецЕсли; + + Попытка + Если УдаляемыйФайл.Существует() Тогда + + Если УдаляемыйФайл.ПолучитьТолькоЧтение() Тогда + УдаляемыйФайл.УстановитьТолькоЧтение(Ложь); + КонецЕсли; + + УдалитьФайлы(УдаляемыйФайл.ПолноеИмя); + + КонецЕсли; + Исключение + + Ошибки.Добавить(ЮТРегистрацияОшибокСлужебный.ПредставлениеОшибки("Удаление файла " + УдаляемыйФайл, ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЦикла; + + Если ЗначениеЗаполнено(Ошибки) Тогда + ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Если Клиент Тогда +Функция ОбработчикПолученияАтрибута(Файл, ИмяАтрибута, Обработчик, ЗначениеПоУмолчанию = Неопределено) + + Параметры = Новый Структура("Файл, ИмяАтрибута, Обработчик", Файл, ИмяАтрибута, Обработчик); + Параметры.Вставить("ЗначениеПоУмолчанию", ЗначениеПоУмолчанию); + + Возврат Новый ОписаниеОповещения("ПолучитьАтрибутФайла", ЭтотОбъект, Параметры); + +КонецФункции + +Процедура ПолучитьАтрибутФайла(Результат, Параметры) Экспорт + + Если НЕ Результат Тогда + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Параметры.Обработчик, Параметры.ЗначениеПоУмолчанию); + Возврат; + КонецЕсли; + + Если Параметры.ИмяАтрибута = "ЭтоКаталог" Тогда + Параметры.Файл.НачатьПроверкуЭтоКаталог(Параметры.Обработчик); + КонецЕсли; + +КонецПроцедуры +#КонецЕсли + +Функция ДополнитьПуть(Путь1, Путь2, Разделитель) + + Результат = Неопределено; + + Если ЗначениеЗаполнено(Путь1) И ЗначениеЗаполнено(Путь2) Тогда + + Если НЕ СтрЗаканчиваетсяНа(Путь1, Разделитель) И НЕ СтрНачинаетсяС(Разделитель, Путь2) Тогда + Результат = СтрШаблон("%1%2%3", Путь1, Разделитель, Путь2); + Иначе + Результат = Путь1 + Путь2; + КонецЕсли; + + ИначеЕсли ЗначениеЗаполнено(Путь1) Тогда + Результат = Путь1; + Иначе + Результат = Путь2; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФильтрацияСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТФильтрацияСлужебный.xml new file mode 100644 index 0000000..d20c3ca --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФильтрацияСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТФильтрацияСлужебный + + + ru + Фильтрация + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТФильтрацияСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТФильтрацияСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..1b04441 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТФильтрацияСлужебный/Ext/Module.bsl @@ -0,0 +1,294 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ЭтоПодходящееРасширение(ИмяРасширения) Экспорт + + Контекст = ЮТКонтекстСлужебный.КонтекстЧитателя(); + + НормализованноеИмяРасширения = УдалитьНедопустимыеСимволыИзСтрокиКакКлючаСтруктуры(ИмяРасширения); + + Возврат НЕ Контекст.Фильтр.ЕстьФильтрРасширений ИЛИ Контекст.Фильтр.Расширения.Свойство(НормализованноеИмяРасширения); + +КонецФункции + +Функция ЭтоПодходящийМодуль(ОписаниеМодуля) Экспорт + + Контекст = ЮТКонтекстСлужебный.КонтекстЧитателя(); + + Возврат ЗначениеЗаполнено(ОписаниеМодуля.Расширение) + И (НЕ Контекст.Фильтр.ЕстьФильтрМодулей ИЛИ Контекст.Фильтр.Модули.Свойство(ОписаниеМодуля.Имя)) + И ЭтоПодходящееРасширение(ОписаниеМодуля.Расширение); + +КонецФункции + +// Отфильтровать тестовые наборы. +// +// Параметры: +// ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы +// ОписаниеМодуля - Структура - Описание модуля, которому принадлежат наборы, см. ЮТФабрикаСлужебный.ОписаниеМодуля +// +// Возвращаемое значение: +// Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Отфильтрованные наборы +Функция ОтфильтроватьТестовыеНаборы(ТестовыеНаборы, ОписаниеМодуля) Экспорт + + Контекст = ЮТКонтекстСлужебный.КонтекстЧитателя(); + + Если НЕ Контекст.Фильтр.ЕстьФильтрТестов И НЕ Контекст.Фильтр.ЕстьФильтрКонтекстов Тогда + Возврат ТестовыеНаборы; + КонецЕсли; + + Результат = Новый Массив(); + + Если Контекст.Фильтр.ЕстьФильтрТестов Тогда + ДоступныеТестовыеМетоды = Новый Соответствие(); + + Для Каждого ОписаниеИмениТеста Из Контекст.Фильтр.Тесты Цикл + + Если СтрСравнить(ОписаниеИмениТеста.ИмяМодуля, ОписаниеМодуля.Имя) = 0 Тогда + ОписаниеИмениТеста.ИмяМетода = ВРег(ОписаниеИмениТеста.ИмяМетода); + + СохраненноеОписаниеИмени = ДоступныеТестовыеМетоды[ОписаниеИмениТеста.ИмяМетода]; + + Если СохраненноеОписаниеИмени = Неопределено И ОписаниеИмениТеста.Контекст = Неопределено Тогда + ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста); + ИначеЕсли СохраненноеОписаниеИмени = Неопределено Тогда + ОписаниеИмениТеста.Контекст = ЮТКоллекции.ЗначениеВМассиве(ОписаниеИмениТеста.Контекст); + ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста); + ИначеЕсли ОписаниеИмениТеста.Контекст = Неопределено Тогда + СохраненноеОписаниеИмени.Контекст = Неопределено; // Без фильтрации контекста теста, возьмом из самого теста контексты + ИначеЕсли СохраненноеОписаниеИмени.Контекст <> Неопределено Тогда + СохраненноеОписаниеИмени.Контекст.Добавить(ОписаниеИмениТеста.Контекст); + Иначе + // Если было имя теста без контекста, то будет вызов во всех контекстах + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Для Каждого Набор Из ТестовыеНаборы Цикл + + ОтфильтрованныйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Набор.Имя); + ЗаполнитьЗначенияСвойств(ОтфильтрованныйНабор, Набор, , "Тесты"); + + Для Каждого Тест Из Набор.Тесты Цикл + + КонтекстыТеста = Неопределено; + + Если ДоступныеТестовыеМетоды <> Неопределено Тогда + ОписаниеИмениТеста = ДоступныеТестовыеМетоды[ВРег(Тест.Имя)]; + + Если ОписаниеИмениТеста = Неопределено Тогда + Продолжить; + КонецЕсли; + + КонтекстыТеста = ОписаниеИмениТеста.Контекст; + + КонецЕсли; + + Если КонтекстыТеста = Неопределено Тогда + КонтекстыТеста = Тест.КонтекстВызова; + КонецЕсли; + + Если Контекст.Фильтр.ЕстьФильтрКонтекстов Тогда + КонтекстыТеста = ЮТКоллекции.ПересечениеМассивов(КонтекстыТеста, Контекст.Фильтр.Контексты); + КонецЕсли; + + Если КонтекстыТеста.Количество() = 0 Тогда + // Возможно стоит такие выводить в лог с ошибкой "по переданным параметрам контекст теста не определен" + Продолжить; + КонецЕсли; + + ОтфильтрованныйТест = ЮТФабрикаСлужебный.ОписаниеТеста(Тест.Имя, "", ""); + ЗаполнитьЗначенияСвойств(ОтфильтрованныйТест, Тест, , "КонтекстВызова"); + ОтфильтрованныйТест.КонтекстВызова = КонтекстыТеста; + + ОтфильтрованныйНабор.Тесты.Добавить(ОтфильтрованныйТест); + + КонецЦикла; + + Если ОтфильтрованныйНабор.Тесты.Количество() Тогда + Результат.Добавить(ОтфильтрованныйНабор); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Фильтр +// Конструктур фильтра поиска тестовых методов +// +// Возвращаемое значение: +// Структура - Фильтр: +// * Расширения - Структура - Имена расширений +// * Модули - Структура - Имена модулей +// * Наборы - Массив из Строка - Имена тестовых наборов +// * Теги - Массив из Строка +// * Контексты - Массив из Строка - Контексты вызова тестовых методов +// * Тесты - Массив из см. ОписаниеИмениТеста - Список путей к тестовым методам +// * Пути - Массив из Строка +Функция Фильтр() Экспорт + + //@skip-check structure-consructor-too-many-keys + Фильтр = Новый Структура("Расширения, Модули, Наборы, Теги, Контексты, Пути, Тесты"); + + Фильтр.Расширения = Новый Структура(); + Фильтр.Модули = Новый Структура(); + Фильтр.Теги = Новый Массив(); + Фильтр.Контексты = Новый Массив(); + Фильтр.Наборы = Новый Массив(); + Фильтр.Пути = Новый Массив(); + Фильтр.Тесты = Новый Массив(); + + //@skip-check constructor-function-return-section + Возврат Фильтр; + +КонецФункции + +Процедура УстановитьКонтекст(ПараметрыЗапускаТестов) Экспорт + + Расширения = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "extensions", Новый Массив); + Модули = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "modules", Новый Массив); + Контексты = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "contexts"); + Тесты = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "tests", Новый Массив); + + Теги = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "tags", Новый Массив); + // TODO: Подумать в каком формате задать наборы - ИмяМодуля.Набор, Набор или другой вариант + Наборы = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "suites", Новый Массив); + // TODO: Обработка путей в формате: Модуль.ИмяТеста, ИмяТеста - метод, параметры, контекст + // ОМ_ЮТУтверждения.Что[0: 1].Сервер, ОМ_ЮТУтверждения.Что[1: Структура].Сервер + Пути = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "paths", Новый Массив); + + Фильтр = Фильтр(); + + Фильтр.Расширения = МассивВСтруктуру(Расширения); + Фильтр.Модули = МассивВСтруктуру(Модули); + + Если Контексты = Неопределено Тогда + Фильтр.Контексты = ЮТФабрикаСлужебный.КонтекстыПриложения(); + Иначе + Фильтр.Контексты = Контексты; + КонецЕсли; + + Если ЗначениеЗаполнено(Теги) Тогда + Фильтр.Теги = Теги; + КонецЕсли; + + Если ЗначениеЗаполнено(Наборы) Тогда + Фильтр.Наборы = Наборы; + КонецЕсли; + + Если ЗначениеЗаполнено(Пути) Тогда + Фильтр.Пути = Пути; + КонецЕсли; + + МодулиТестов = Новый Структура(); + + Если ЗначениеЗаполнено(Тесты) Тогда + Для Каждого ПолноеИмяТеста Из Тесты Цикл + Описание = ОписаниеИмениТеста(ПолноеИмяТеста); + Фильтр.Тесты.Добавить(Описание); + МодулиТестов.Вставить(Описание.ИмяМодуля, Истина); + КонецЦикла; + КонецЕсли; + + Если МодулиТестов.Количество() И Фильтр.Модули.Количество() = 0 Тогда + + Фильтр.Модули = МодулиТестов; + + ИначеЕсли МодулиТестов.Количество() Тогда + + Модули = Новый Структура(); + + Для Каждого Элемент Из Фильтр.Модули Цикл + Если МодулиТестов.Свойство(Элемент.Ключ) Тогда + Модули.Вставить(Элемент.Ключ, Истина); + КонецЕсли; + КонецЦикла; + + Фильтр.Модули = Модули; + + КонецЕсли; + + Фильтр.Вставить("ЕстьФильтрРасширений", Фильтр.Расширения.Количество() > 0); + Фильтр.Вставить("ЕстьФильтрМодулей", МодулиТестов.Количество() ИЛИ Фильтр.Модули.Количество()); + Фильтр.Вставить("ЕстьФильтрТестов", Фильтр.Тесты.Количество()); + Фильтр.Вставить("ЕстьФильтрКонтекстов", ЗначениеЗаполнено(Фильтр.Контексты)); + + ЮТКонтекстСлужебный.УстановитьКонтекстЧитателя(Новый Структура("Фильтр", Фильтр)); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция МассивВСтруктуру(Значения) + + Результат = Новый Структура(); + + Если НЕ ЗначениеЗаполнено(Значения) Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого Значение Из Значения Цикл + + НормализованноеЗначение = УдалитьНедопустимыеСимволыИзСтрокиКакКлючаСтруктуры(Значение); + Результат.Вставить(НормализованноеЗначение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция УдалитьНедопустимыеСимволыИзСтрокиКакКлючаСтруктуры(СтрокаКакКлюч) + // TODO Переработать. Не модифицировать значение + Возврат СтрЗаменить(СтрокаКакКлюч, ".", ""); +КонецФункции + +Функция ОписаниеИмениТеста(Путь) + + Части = СтрРазделить(Путь, "."); + + Если Части.Количество() <= 1 ИЛИ Части.Количество() > 3 Тогда + ВызватьИсключение СтрШаблон("Не корректный формат пути к тесту `%1`, должен быть в формате `ИмяМодуля.ИмяМетода{.Контекст}`", Путь); + КонецЕсли; + + Описание = Новый Структура("ИмяМодуля, ИмяМетода, Контекст"); + + Для Инд = 0 По Части.ВГраница() Цикл + Части[Инд] = СокрЛП(Части[Инд]); + КонецЦикла; + + Описание.ИмяМодуля = Части[0]; + Описание.ИмяМетода = Части[1]; + Если Части.Количество() > 2 Тогда + Описание.Контекст = Части[2]; + КонецЕсли; + + Возврат Описание; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебный.xml b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебный.xml new file mode 100644 index 0000000..62d14a7 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ЮТЧитательСлужебный + + + ru + Загрузчик тестов + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебный/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..73c2206 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебный/Ext/Module.bsl @@ -0,0 +1,235 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// ЗагрузитьТесты +// Читает наборы тестов (тестовые модули) из расширений +// Параметры: +// ПараметрыЗапускаТестов - см. ЮТФабрика.ПараметрыЗапуска +// +// Возвращаемое значение: +// Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей, которые содержат информацию о запускаемых тестах +Функция ЗагрузитьТесты(ПараметрыЗапускаТестов) Экспорт + + Результат = Новый Массив; + + ЮТФильтрацияСлужебный.УстановитьКонтекст(ПараметрыЗапускаТестов); + + Для Каждого МетаданныеМодуля Из ТестовыеМодули() Цикл + + ОписаниеТестовогоМодуля = ТестовыеНаборыМодуля(МетаданныеМодуля, ПараметрыЗапускаТестов); + + Если ОписаниеТестовогоМодуля = Неопределено Тогда + Продолжить; + КонецЕсли; + + Результат.Добавить(ОписаниеТестовогоМодуля); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// ПрочитатьНаборТестов +// Читает набор тестов из модуля +// Параметры: +// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля +// +// Возвращаемое значение: +// - Неопределено - Если это не тестовый модуль +// - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля +Функция ИсполняемыеСценарииМодуля(Знач МетаданныеМодуля) Экспорт + + ЭтоТестовыйМодуль = Истина; + ОписаниеТестовогоМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив); + + ЮТТестыСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля); + + ПолноеИмяМетода = МетаданныеМодуля.Имя + "." + ИмяМетодаСценариев(); + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода); + + Если Ошибка <> Неопределено Тогда + + ТипыОшибок = ЮТФабрикаСлужебный.ТипыОшибок(); + ТипОшибки = ЮТРегистрацияОшибокСлужебный.ТипОшибки(Ошибка, ПолноеИмяМетода); + + Если ТипОшибки = ТипыОшибок.ТестНеРеализован Тогда + ЭтоТестовыйМодуль = Ложь; + Ошибка = Неопределено; + ИначеЕсли ТипОшибки = ТипыОшибок.МалоПараметров Тогда + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода, ЮТКоллекции.ЗначениеВМассиве(Неопределено)); + ЮТОбщий.СообщитьПользователю("Используется устаревшая сигнатура метода `ИсполняемыеСценарии`, метод не должен принимать параметров."); + КонецЕсли; + + КонецЕсли; + + Если Ошибка <> Неопределено Тогда + + НаборПоУмолчанию = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя); + ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуЧтенияТестов(НаборПоУмолчанию, "Ошибка формирования списка тестовых методов", Ошибка); + ОписаниеТестовогоМодуля.НаборыТестов.Добавить(НаборПоУмолчанию); + + ИначеЕсли ЭтоТестовыйМодуль Тогда + + ЮТТестыСлужебный.ПослеЧтенияСценариевМодуля(); + Сценарии = ЮТТестыСлужебный.СценарииМодуля(); + + УдалитьНастройкиМодуляИзПервогоНабора(Сценарии); // TODO Нужен рефакторинг + + ОписаниеТестовогоМодуля.НаборыТестов = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Сценарии.ТестовыеНаборы, МетаданныеМодуля); + ОписаниеТестовогоМодуля.НастройкиВыполнения = Сценарии.НастройкиВыполнения; + + Иначе + + ОписаниеТестовогоМодуля = Неопределено; + + КонецЕсли; + + Возврат ОписаниеТестовогоМодуля; + +КонецФункции + +// ЭтоТестовыйМодуль +// Проверяет, является ли модуль модулем с тестами +// Параметры: +// МетаданныеМодуля - Структура - Описание метаданных модуля, см. ЮТФабрикаСлужебный.ОписаниеМодуля +// +// Возвращаемое значение: +// Булево - Этот модуль содержит тесты +Функция ЭтоТестовыйМодуль(МетаданныеМодуля) Экспорт + + Если МетаданныеМодуля.Глобальный Тогда + Возврат Ложь; + КонецЕсли; + +#Если Сервер Тогда + Возврат ЮТМетодыСлужебный.МетодМодуляСуществует(МетаданныеМодуля.Имя, ИмяМетодаСценариев()); +#КонецЕсли + +#Если ТолстыйКлиентУправляемоеПриложение ИЛИ ТонкийКлиент Тогда + Если МетаданныеМодуля.КлиентУправляемоеПриложение Тогда + Возврат ЮТМетодыСлужебный.МетодМодуляСуществует(МетаданныеМодуля.Имя, ИмяМетодаСценариев()); + КонецЕсли; +#КонецЕсли + +#Если ТолстыйКлиентОбычноеПриложение Тогда + Если МетаданныеМодуля.КлиентОбычноеПриложение Тогда + Возврат ЮТМетодыСлужебный.МетодМодуляСуществует(МетаданныеМодуля.Имя, ИмяМетодаСценариев()); + КонецЕсли; +#КонецЕсли + + Если МетаданныеМодуля.Сервер Тогда + //@skip-check unknown-method-property + Возврат ЮТЧитательСлужебныйВызовСервера.ЭтоТестовыйМодуль(МетаданныеМодуля); + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИмяМетодаСценариев() + + Возврат "ИсполняемыеСценарии"; + +КонецФункции + +// ТестовыеМодули +// Возвращает описания модулей, содержащих тесты +// Возвращаемое значение: +// Массив из см. ЮТМетаданныеСлужебныйВызовСервера.МетаданныеМодуля - Тестовые модули +Функция ТестовыеМодули() + + ТестовыеМодули = Новый Массив; + + //@skip-check unknown-method-property + МодулиРасширения = ЮТМетаданныеСлужебныйВызовСервера.МодулиРасширений(); + + Для Каждого ОписаниеМодуля Из МодулиРасширения Цикл + + Если ЮТФильтрацияСлужебный.ЭтоПодходящийМодуль(ОписаниеМодуля) И ЭтоТестовыйМодуль(ОписаниеМодуля) Тогда + + ТестовыеМодули.Добавить(ОписаниеМодуля); + + КонецЕсли; + + КонецЦикла; + + Возврат ТестовыеМодули; + +КонецФункции + +Функция ТестовыеНаборыМодуля(МетаданныеМодуля, ПараметрыЗапуска) + + // TODO Фильтрация по путям + ОписаниеМодуля = Неопределено; + +#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Если МетаданныеМодуля.КлиентОбычноеПриложение ИЛИ МетаданныеМодуля.КлиентУправляемоеПриложение Тогда + + ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля); + + ИначеЕсли МетаданныеМодуля.Сервер Тогда + + ОписаниеМодуля = ЮТЧитательСлужебныйВызовСервера.ИсполняемыеСценарииМодуля(МетаданныеМодуля); + ЮТЛогированиеСлужебный.ВывестиСерверныеСообщения(); + + КонецЕсли; +#ИначеЕсли Сервер Тогда + Если МетаданныеМодуля.Сервер Тогда + + ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля); + + Иначе + + ВызватьИсключение "Чтение списка тестов модуля в недоступном контексте"; + + КонецЕсли; +#ИначеЕсли Клиент Тогда + Если МетаданныеМодуля.КлиентУправляемоеПриложение Тогда + + ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля); + + ИначеЕсли МетаданныеМодуля.Сервер Тогда + + ОписаниеМодуля = ЮТЧитательСлужебныйВызовСервера.ИсполняемыеСценарииМодуля(МетаданныеМодуля); + ЮТЛогированиеСлужебный.ВывестиСерверныеСообщения(); + + КонецЕсли; +#КонецЕсли + + Возврат ОписаниеМодуля; + +КонецФункции + +Процедура УдалитьНастройкиМодуляИзПервогоНабора(СценарииМодуля) + + НастройкиВыполнения = ЮТКоллекции.СкопироватьРекурсивно(СценарииМодуля.НастройкиВыполнения); + + СценарииМодуля.НастройкиВыполнения.Очистить(); + + СценарииМодуля.НастройкиВыполнения = НастройкиВыполнения; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебныйВызовСервера.xml b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебныйВызовСервера.xml new file mode 100644 index 0000000..2290747 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЮТЧитательСлужебныйВызовСервера + + + ru + Загрузчик тестов (сервер) + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..1e3cf45 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТЧитательСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,34 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// См. ЮТЧитательСлужебный.ИсполняемыеСценарииМодуля +Функция ИсполняемыеСценарииМодуля(Знач МетаданныеМодуля) Экспорт + + Возврат ЮТЧитательСлужебный.ИсполняемыеСценарииМодуля(МетаданныеМодуля); + +КонецФункции + +Функция ЭтоТестовыйМодуль(МетаданныеМодуля) Экспорт + + Возврат ЮТЧитательСлужебный.ЭтоТестовыйМодуль(МетаданныеМодуля); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonModules/ЮТест.xml b/src/cfe/YAXUnit/CommonModules/ЮТест.xml new file mode 100644 index 0000000..c7e24cf --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТест.xml @@ -0,0 +1,23 @@ + + + + + ЮТест + + + ru + Тест + + + + false + true + true + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonModules/ЮТест/Ext/Module.bsl b/src/cfe/YAXUnit/CommonModules/ЮТест/Ext/Module.bsl new file mode 100644 index 0000000..b67ec89 --- /dev/null +++ b/src/cfe/YAXUnit/CommonModules/ЮТест/Ext/Module.bsl @@ -0,0 +1,206 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +///////////////////////////////////////////////////////////////////////////////// +// Основной модуль для запуска тестирования +///////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Возвращает API формирования утверждения для проверки теста. +// +// Параметры: +// ПроверяемоеЗначение - Произвольный - Проверяемое фактическое значение +// Сообщение - Строка - Описание проверки, которое будет выведено при возникновении ошибки +// +// Возвращаемое значение: +// ОбщийМодуль - Утверждения, см. ЮТУтверждения +Функция ОжидаетЧто(ПроверяемоеЗначение, Сообщение = "") Экспорт + + Возврат ЮТУтверждения.Что(ПроверяемоеЗначение, Сообщение); + +КонецФункции + +// Возвращает API формирования утверждения для проверки данных базы. +// +// Параметры: +// ИмяТаблицы - Строка - Имя таблицы базы, например, `Справочник.Пользователи`, `Документ.ПКО`, `РегистрСведений.ИнформацияОбОшибках` +// Сообщение - Строка - Описание проверки, которое будет выведено при возникновении ошибки +// +// Возвращаемое значение: +// ОбщийМодуль - Утверждения для проверки данных базы, см. ЮТУтвержденияИБ +Функция ОжидаетЧтоТаблицаБазы(ИмяТаблицы, Сообщение = "") Экспорт + + Возврат ЮТУтвержденияИБ.ЧтоТаблица(ИмяТаблицы, Сообщение); + +КонецФункции + +// Возвращает API для работы с тестовыми данными. +// +// Возвращаемое значение: +// ОбщийМодуль - Данные, см. ЮТТестовыеДанные. +Функция Данные() Экспорт + + Возврат ЮТТестовыеДанные; + +КонецФункции + +// Возвращает API для формирования предикатов/утверждений, которые могут быть использованы для проверки коллекций. +// +// Параметры: +// Условия - Структура, Соответствие из Произвольный - Набор условий, которыми инициализируется предикат +// Ключ - Строка - Имя реквизита +// Значение - Произвольный - Значение, которому должен быть равен реквизит +// +// Возвращаемое значение: +// ОбщийМодуль - См. ЮТПредикаты. +Функция Предикат(Условия = Неопределено) Экспорт + + Возврат ЮТПредикаты.Инициализировать(Условия); + +КонецФункции + +// Конструктор вариантов прогона теста. +// +// Используется для формирования набора различных параметров выполнения. +// Параметры: +// Реквизиты - Строка - Список реквизитов варианта разделенных запятой +// +// Возвращаемое значение: +// ОбщийМодуль - Варианты, см. ЮТКонструкторВариантов. +Функция Варианты(Реквизиты) Экспорт + + Возврат ЮТКонструкторВариантов.Варианты(Реквизиты); + +КонецФункции + +// Умный контекст, в который можно сохранять и получать из него промежуточные данные +// Этот контекст работает с см. КонтекстТеста, см. КонтекстТестовогоНабора и см. КонтекстМодуля. +// При получении значения оно ущется во всех 3 контекста поочереди. +// При установке значения, оно устанавливается в текущий контекст, например, в событии перед тестовым наборов в м. КонтекстТестовогоНабора +// +// Возвращаемое значение: +// ОбщийМодуль - Контекст теста, см. ЮТКонтекстТеста +Функция Контекст() Экспорт + + Возврат ЮТКонтекстТеста; + +КонецФункции + +// Пропустить выполнение теста. +// +// Используется если тест выполняется в неподходящих условиях и не нужно его выполнять, но отразить в отчете требуется. +// Параметры: +// Сообщение - Строка, Неопределено - Сообщение +Процедура Пропустить(Сообщение = Неопределено) Экспорт + + ЮТРегистрацияОшибокСлужебный.Пропустить(Сообщение); + +КонецПроцедуры + +// Возвращает структуру, в которой можно хранить данные используемые в тесте. +// +// Данные живут в рамках одного теста, но доступны в обработчиках событий `ПередКаждымТестом` и `ПослеКаждогоТеста`. +// +// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста`. +// Возвращаемое значение: +// - Структура - Контекст теста +// - Неопределено - Если метод вызывается за рамками теста +Функция КонтекстТеста() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебный.КонтекстТеста(); + +КонецФункции + +// Возвращает структуру, в которой можно хранить данные используемые в тестах набора. +// +// Данные живут в рамках одного набора тестов (данные между клиентом и сервером не синхронизируются). +// Доступны в каждом тесте набора и в обработчиках событий: +// + `ПередТестовымНабором` +// + `ПослеТестовогоНабора` +// + `ПередКаждымТестом` +// + `ПослеКаждогоТеста` +// +// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста`. +// Возвращаемое значение: +// - Структура - Контекст набора тестов +// - Неопределено - Если метод вызывается за рамками тестового набора +Функция КонтекстТестовогоНабора() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебный.КонтекстНабора(); + +КонецФункции + +// Возвращает структуру, в которой можно хранить данные используемые в тестах модуля. +// +// Данные живут в рамках одного тестового модуля (данные между клиентом и сервером не синхронизируются). +// Доступны в каждом тесте модуля и в обработчиках событий. +// +// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеВсехТестов`. +// Возвращаемое значение: +// - Структура - Контекст тестового модуля +// - Неопределено - Если метод вызывается за рамками тестового модуля +Функция КонтекстМодуля() Экспорт + + //@skip-check constructor-function-return-section + Возврат ЮТКонтекстСлужебный.КонтекстМодуля(); + +КонецФункции + +// Преостанавливает поток выполнения на указанное количество секунд +// +// Параметры: +// Время - Число - Продолжительность паузы в секундах, возможно указывать дробное значение +Процедура Пауза(Время) Экспорт + + ЮТОбщий.Пауза(Время); + +КонецПроцедуры + +// Выводит сообщение в консоль (stdout) приложения +// +// Параметры: +// Сообщение - Строка - Выводимое сообщение +Процедура ВывестиВКонсоль(Сообщение) Экспорт + + ЮТОбщий.ВывестиВКонсоль(Сообщение); + +КонецПроцедуры + +// Добавляет сообщение в лог исполнения теста. +// +// Параметры: +// ТекстСообщения - Строка - Текст сообщения +Процедура ДобавитьСообщение(ТекстСообщения) Экспорт + + ЮТЛогИсполненияТестаСлужебный.ДобавитьСообщение(ТекстСообщения); + +КонецПроцедуры + +// Добавляет предупреждение в лог исполнения теста. +// +// Параметры: +// ТекстПредупреждения - Строка - Текст предупреждения +Процедура ДобавитьПредупреждение(ТекстПредупреждения) Экспорт + + ЮТЛогИсполненияТестаСлужебный.ДобавитьПредупреждение(ТекстПредупреждения); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить.xml b/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить.xml new file mode 100644 index 0000000..9d6a5d5 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить.xml @@ -0,0 +1,17 @@ + + + + + ЮТЗапустить + + + ru + Запустить + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить/Ext/Picture/Picture.svg new file mode 100644 index 0000000..2f6dafb --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТЗапустить/Ext/Picture/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный.xml b/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный.xml new file mode 100644 index 0000000..42713a8 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный.xml @@ -0,0 +1,17 @@ + + + + + ЮТНеизвестный + + + ru + Неизвестный + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный/Ext/Picture/Picture.svg new file mode 100644 index 0000000..6c4094e --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТНеизвестный/Ext/Picture/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТОшибка.xml b/src/cfe/YAXUnit/CommonPictures/ЮТОшибка.xml new file mode 100644 index 0000000..6ada654 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТОшибка.xml @@ -0,0 +1,17 @@ + + + + + ЮТОшибка + + + ru + Ошибка + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТОшибка/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТОшибка/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТОшибка/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТОшибка/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТОшибка/Ext/Picture/Picture.svg new file mode 100644 index 0000000..30a9406 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТОшибка/Ext/Picture/Picture.svg @@ -0,0 +1,6 @@ + + + + diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие.xml b/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие.xml new file mode 100644 index 0000000..5ea959e --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие.xml @@ -0,0 +1,17 @@ + + + + + ЮТПерезапуститьУпавшие + + + ru + Перезапустить упавшие + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие/Ext/Picture/Picture.svg new file mode 100644 index 0000000..9cbd45c --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПерезапуститьУпавшие/Ext/Picture/Picture.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема.xml b/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема.xml new file mode 100644 index 0000000..86cc296 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема.xml @@ -0,0 +1,17 @@ + + + + + ЮТПодсистема + + + ru + Картинка подсистемы ЮТДвижок + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема/Ext/Picture.xml new file mode 100644 index 0000000..dba17d4 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.png + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема/Ext/Picture/Picture.png b/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема/Ext/Picture/Picture.png new file mode 100644 index 0000000..649e965 Binary files /dev/null and b/src/cfe/YAXUnit/CommonPictures/ЮТПодсистема/Ext/Picture/Picture.png differ diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПропущен.xml b/src/cfe/YAXUnit/CommonPictures/ЮТПропущен.xml new file mode 100644 index 0000000..ec89fe9 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПропущен.xml @@ -0,0 +1,17 @@ + + + + + ЮТПропущен + + + ru + Пропущен + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПропущен/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТПропущен/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПропущен/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТПропущен/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТПропущен/Ext/Picture/Picture.svg new file mode 100644 index 0000000..85123af --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТПропущен/Ext/Picture/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТСравнить.xml b/src/cfe/YAXUnit/CommonPictures/ЮТСравнить.xml new file mode 100644 index 0000000..c6393ba --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТСравнить.xml @@ -0,0 +1,17 @@ + + + + + ЮТСравнить + + + ru + Сравнить + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТСравнить/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТСравнить/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТСравнить/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТСравнить/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТСравнить/Ext/Picture/Picture.svg new file mode 100644 index 0000000..eba7e61 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТСравнить/Ext/Picture/Picture.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТУпал.xml b/src/cfe/YAXUnit/CommonPictures/ЮТУпал.xml new file mode 100644 index 0000000..1299874 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТУпал.xml @@ -0,0 +1,17 @@ + + + + + ЮТУпал + + + ru + Упал + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТУпал/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТУпал/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТУпал/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТУпал/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТУпал/Ext/Picture/Picture.svg new file mode 100644 index 0000000..0334713 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТУпал/Ext/Picture/Picture.svg @@ -0,0 +1,6 @@ + + + + diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТУспешно.xml b/src/cfe/YAXUnit/CommonPictures/ЮТУспешно.xml new file mode 100644 index 0000000..00ac380 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТУспешно.xml @@ -0,0 +1,17 @@ + + + + + ЮТУспешно + + + ru + Успешно + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТУспешно/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТУспешно/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТУспешно/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТУспешно/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТУспешно/Ext/Picture/Picture.svg new file mode 100644 index 0000000..103604d --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТУспешно/Ext/Picture/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов.xml b/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов.xml new file mode 100644 index 0000000..01e8ca5 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов.xml @@ -0,0 +1,17 @@ + + + + + ЮТЭлементыТестов + + + ru + Элементы тестов + + + + false + false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов/Ext/Picture.xml b/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов/Ext/Picture.xml new file mode 100644 index 0000000..0da1845 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.svg + false + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов/Ext/Picture/Picture.svg b/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов/Ext/Picture/Picture.svg new file mode 100644 index 0000000..ac31420 --- /dev/null +++ b/src/cfe/YAXUnit/CommonPictures/ЮТЭлементыТестов/Ext/Picture/Picture.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТRegEx1CAddin.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТRegEx1CAddin.xml new file mode 100644 index 0000000..0f7f46e --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТRegEx1CAddin.xml @@ -0,0 +1,16 @@ + + + + + ЮТRegEx1CAddin + + + ru + Reg ex1 c addin + + + + AddIn + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТRegEx1CAddin/Ext/Template.bin b/src/cfe/YAXUnit/CommonTemplates/ЮТRegEx1CAddin/Ext/Template.bin new file mode 100644 index 0000000..3e59669 Binary files /dev/null and b/src/cfe/YAXUnit/CommonTemplates/ЮТRegEx1CAddin/Ext/Template.bin differ diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТYaxUnitAddIn.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТYaxUnitAddIn.xml new file mode 100644 index 0000000..7353dfc --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТYaxUnitAddIn.xml @@ -0,0 +1,16 @@ + + + + + ЮТYaxUnitAddIn + + + ru + ЮТYax unit add in + + + + AddIn + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТYaxUnitAddIn/Ext/Template.bin b/src/cfe/YAXUnit/CommonTemplates/ЮТYaxUnitAddIn/Ext/Template.bin new file mode 100644 index 0000000..c651293 Binary files /dev/null and b/src/cfe/YAXUnit/CommonTemplates/ЮТYaxUnitAddIn/Ext/Template.bin differ diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_Наименования_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_Наименования_ru.xml new file mode 100644 index 0000000..4c39b41 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_Наименования_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Компании_Наименования_ru + + + ru + Подражатель компании наименования ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_Наименования_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_Наименования_ru/Ext/Template.txt new file mode 100644 index 0000000..304d468 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_Наименования_ru/Ext/Template.txt @@ -0,0 +1,33 @@ +Рога и Копыта +Ромашка +Организатория +Содружество +Синергия +УспехПартнер +Стратегия+ +Эволюция +ОргаLife +МастерОрг +ЛидерОрг +УспехОрг +Профессиональное Организованное Решение +Стратегическая Организация +Идеальная Организация +МастерПлан +Гений в Деталях +Успешная Система +Органайзер +Профессиональная Структура +Успешное будущее +Мастера организации +Профессиональные архитекторы +Организационный гений +АльпаБанк +ВТП +Пенькофф +Сперпанк +Азито +Ямтекс +Почта Рус Лимитед +Телепам +Система успеха \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru.xml new file mode 100644 index 0000000..f3587c5 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru + + + ru + Подражатель компании префиксы ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru/Ext/Template.txt new file mode 100644 index 0000000..f636297 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru/Ext/Template.txt @@ -0,0 +1,12 @@ +AO +ГУП +ЗАО +ИП +МУП +НКО +ОП +ООО +ОАО +ПАО +ТСЖ +ФГУП \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru.xml new file mode 100644 index 0000000..216eb83 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru + + + ru + Подражатель люди женские имена ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru/Ext/Template.txt new file mode 100644 index 0000000..4d57c68 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru/Ext/Template.txt @@ -0,0 +1,80 @@ +Агата +Агафья +Акулина +Алевтина +Александра +Алина +Алла +Анастасия +Ангелина +Анжела +Анжелика +Анна +Антонина +Валентина +Валерия +Варвара +Василиса +Вера +Вероника +Виктория +Галина +Глафира +Дарья +Евгения +Евдокия +Евпраксия +Евфросиния +Екатерина +Елена +Елизавета +Жанна +Зинаида +Зоя +Иванна +Ираида +Ирина +Ия +Кира +Клавдия +Ксения +Лариса +Лидия +Лора +Лукия +Любовь +Людмила +Майя +Маргарита +Марина +Мария +Марфа +Милица +Надежда +Наина +Наталья +Нина +Нинель +Нонна +Оксана +Октябрина +Олимпиада +Ольга +Пелагея +Полина +Прасковья +Раиса +Регина +Светлана +Синклитикия +София +Таисия +Тамара +Татьяна +Ульяна +Фаина +Феврония +Фёкла +Элеонора +Эмилия +Юлия \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru.xml new file mode 100644 index 0000000..1f5b4ec --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru + + + ru + Подражатель люди женские отчества ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru/Ext/Template.txt new file mode 100644 index 0000000..83f6a58 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru/Ext/Template.txt @@ -0,0 +1,79 @@ +Александровна +Андреевна +Архиповна +Алексеевна +Антоновна +Аскольдовна +Альбертовна +Аркадьевна +Афанасьевна +Анатольевна +Артемовна +Богдановна +Болеславовна +Борисовна +Вадимовна +Васильевна +Владимировна +Валентиновна +Вениаминовна +Владиславовна +Валериевна +Викторовна +Вячеславовна +Геннадиевна +Георгиевна +Геннадьевна +Григорьевна +Даниловна +Дмитриевна +Евгеньевна +Егоровна +Ефимовна +Ждановна +Захаровна +Ивановна +Игоревна +Ильинична +Кирилловна +Кузьминична +Константиновна +Леонидовна +Леоновна +Львовна +Макаровна +Матвеевна +Михайловна +Максимовна +Мироновна +Натановна +Никифоровна +Ниловна +Наумовна +Николаевна +Олеговна +Оскаровна +Павловна +Петровна +Робертовна +Рубеновна +Руслановна +Романовна +Рудольфовна +Святославовна +Сергеевна +Степановна +Семеновна +Станиславовна +Тарасовна +Тимофеевна +Тимуровна +Федоровна +Феликсовна +Филипповна +Харитоновна +Эдуардовна +Эльдаровна +Юльевна +Юрьевна +Яковлевна diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru.xml new file mode 100644 index 0000000..3589872 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru + + + ru + Подражатель люди женские фамилии ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru/Ext/Template.txt new file mode 100644 index 0000000..75c5f87 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru/Ext/Template.txt @@ -0,0 +1,250 @@ +Смирнова +Иванова +Кузнецова +Попова +Соколова +Лебедева +Козлова +Новикова +Морозова +Петрова +Волкова +Соловьева +Васильева +Зайцева +Павлова +Семенова +Голубева +Виноградова +Богданова +Воробьева +Федорова +Михайлова +Беляева +Тарасова +Белова +Комарова +Орлова +Киселева +Макарова +Андреева +Ковалева +Ильина +Гусева +Титова +Кузьмина +Кудрявцева +Баранова +Куликова +Алексеева +Степанова +Яковлева +Сорокина +Сергеева +Романова +Захарова +Борисова +Королева +Герасимова +Пономарева +Григорьева +Лазарева +Медведева +Ершова +Никитина +Соболева +Рябова +Полякова +Цветкова +Данилова +Жукова +Фролова +Журавлева +Николаева +Крылова +Максимова +Сидорова +Осипова +Белоусова +Федотова +Дорофеева +Егорова +Матвеева +Боброва +Дмитриева +Калинина +Анисимова +Петухова +Антонова +Тимофеева +Никифорова +Веселова +Филиппова +Маркова +Большакова +Суханова +Миронова +Ширяева +Александрова +Коновалова +Шестакова +Казакова +Ефимова +Денисова +Громова +Фомина +Давыдова +Мельникова +Щербакова +Блинова +Колесникова +Карпова +Афанасьева +Власова +Маслова +Исакова +Тихонова +Аксенова +Гаврилова +Родионова +Котова +Горбунова +Кудряшова +Быкова +Зуева +Третьякова +Савельева +Панова +Рыбакова +Суворова +Абрамова +Воронова +Мухина +Архипова +Трофимова +Мартынова +Емельянова +Горшкова +Чернова +Овчинникова +Селезнева +Панфилова +Копылова +Михеева +Галкина +Назарова +Лобанова +Лукина +Белякова +Потапова +Некрасова +Хохлова +Жданова +Наумова +Шилова +Воронцова +Ермакова +Дроздова +Игнатьева +Савина +Логинова +Сафонова +Капустина +Кириллова +Моисеева +Елисеева +Кошелева +Костина +Горбачева +Орехова +Ефремова +Исаева +Евдокимова +Калашникова +Кабанова +Носкова +Юдина +Кулагина +Лапина +Прохорова +Нестерова +Харитонова +Агафонова +Муравьева +Ларионова +Федосеева +Зимина +Пахомова +Шубина +Игнатова +Филатова +Крюкова +Рогова +Кулакова +Терентьева +Молчанова +Владимирова +Артемьева +Гурьева +Зиновьева +Гришина +Кононова +Дементьева +Ситникова +Симонова +Мишина +Фадеева +Комиссарова +Мамонтова +Носова +Гуляева +Шарова +Устинова +Вишнякова +Евсеева +Лаврентьева +Брагина +Константинова +Корнилова +Авдеева +Зыкова +Бирюкова +Шарапова +Никонова +Щукина +Дьячкова +Одинцова +Сазонова +Якушева +Красильникова +Гордеева +Самойлова +Князева +Беспалова +Уварова +Шашкова +Бобылева +Доронина +Белозерова +Рожкова +Самсонова +Мясникова +Лихачева +Бурова +Сысоева +Фомичева +Русакова +Стрелкова +Гущина +Тетерина +Колобова +Субботина +Фокина +Блохина +Селиверстова +Пестова +Кондратьева +Силина +Меркушева +Лыткина +Турова diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru.xml new file mode 100644 index 0000000..8367221 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru + + + ru + Подражатель люди мужские имена ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru/Ext/Template.txt new file mode 100644 index 0000000..e50230a --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru/Ext/Template.txt @@ -0,0 +1,321 @@ +Август +Авдей +Аверкий +Аверьян +Авксентий +Автоном +Агап +Агафон +Аггей +Адам +Адриан +Азарий +Аким +Александр +Алексей +Амвросий +Амос +Ананий +Анатолий +Андрей +Андрон +Андроник +Аникей +Аникита +Анисим +Антип +Антонин +Аполлинарий +Аполлон +Арефий +Аристарх +Аркадий +Арсений +Артемий +Артем +Архип +Аскольд +Афанасий +Афиноген +Бажен +Богдан +Болеслав +Борис +Борислав +Боян +Бронислав +Будимир +Вадим +Валентин +Валерий +Валерьян +Варлаам +Варфоломей +Василий +Вацлав +Велимир +Венедикт +Вениамин +Викентий +Виктор +Викторин +Виссарион +Виталий +Владилен +Владлен +Владимир +Владислав +Влас +Всеволод +Всемил +Всеслав +Вышеслав +Вячеслав +Гаврила +Галактион +Гедеон +Геннадий +Георгий +Герасим +Герман +Глеб +Гордей +Гостомысл +Гремислав +Григорий +Гурий +Давыд +Данила +Дементий +Демид +Демьян +Денис +Дмитрий +Добромысл +Доброслав +Дорофей +Евгений +Евграф +Евдоким +Евлампий +Евсей +Евстафий +Евстигней +Егор +Елизар +Елисей +Емельян +Епифан +Еремей +Ермил +Ермолай +Ерофей +Ефим +Ефрем +Захар +Зиновий +Зосима +Иван +Игнатий +Игорь +Измаил +Изот +Изяслав +Иларион +Илья +Иннокентий +Иосиф +Ипат +Ипатий +Ипполит +Ираклий +Исай +Исидор +Казимир +Каллистрат +Капитон +Карл +Карп +Касьян +Ким +Кир +Кирилл +Клавдий +Климент +Кондрат +Кондратий +Конон +Константин +Корнил +Кузьма +Куприян +Лавр +Лаврентий +Ладимир +Ладислав +Лазарь +Лев +Леон +Леонид +Леонтий +Лонгин +Лука +Лукьян +Лучезар +Любим +Любомир +Любосмысл +Макар +Максим +Максимильян +Мариан +Марк +Мартын +Мартьян +Матвей +Мефодий +Мечислав +Милан +Милен +Милий +Милован +Мина +Мир +Мирон +Мирослав +Митофан +Михаил +Михей +Модест +Моисей +Мокей +Мстислав +Назар +Наркис +Натан +Наум +Нестор +Никандр +Никанор +Никита +Никифор +Никодим +Николай +Никон +Нифонт +Олег +Олимпий +Онуфрий +Орест +Осип +Остап +Остромир +Павел +Панкратий +Панкрат +Пантелеймон +Панфил +Парамон +Парфен +Пахом +Петр +Пимен +Платон +Поликарп +Порфирий +Потап +Пров +Прокл +Прокофий +Прохор +Радим +Радислав +Радован +Ратибор +Ратмир +Родион +Роман +Ростислав +Рубен +Руслан +Рюрик +Савва +Савватий +Савелий +Самсон +Самуил +Светозар +Святополк +Святослав +Севастьян +Селиван +Селиверст +Семен +Серафим +Сергей +Сигизмунд +Сидор +Сила +Силантий +Сильвестр +Симон +Сократ +Соломон +Софон +Софрон +Спартак +Спиридон +Станимир +Станислав +Степан +Стоян +Тарас +Твердислав +Творимир +Терентий +Тимофей +Тимур +Тит +Тихон +Трифон +Трофим +Ульян +Устин +Фадей +Федор +Федосий +Федот +Феликс +Феоктист +Феофан +Ферапонт +Филарет +Филимон +Филипп +Фирс +Флорентин +Фока +Фома +Фортунат +Фотий +Фрол +Харитон +Харлампий +Христофор +Чеслав +Эдуард +Эммануил +Эмиль +Эраст +Эрнест +Эрнст +Ювеналий +Юлиан +Юлий +Юрий +Яков +Ян +Якуб +Януарий +Ярополк +Ярослав diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru.xml new file mode 100644 index 0000000..c6ebae6 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru + + + ru + Подражатель люди мужские отчества ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru/Ext/Template.txt new file mode 100644 index 0000000..f06f757 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru/Ext/Template.txt @@ -0,0 +1,132 @@ +Ааронович +Абрамович +Августович +Авдеевич +Аверьянович +Адамович +Адрианович +Аксёнович +Александрович +Алексеевич +Анатольевич +Андреевич +Анисимович +Антипович +Антонович +Ануфриевич +Арсенович +Арсеньевич +Артёмович +Артемьевич +Артурович +Архипович +Афанасьевич +Бенедиктович +Богданович +Бориславович +Борисович +Брониславович +Валентинович +Валерианович +Валерьевич +Валерьянович +Васильевич +Венедиктович +Викентьевич +Викторович +Виленович +Вилорович +Витальевич +Владиленович +Владиславович +Владленович +Власович +Всеволодович +Вячеславович +Гавриилович +Гаврилович +Геннадиевич +Георгиевич +Герасимович +Германович +Гертрудович +Глебович +Гордеевич +Григорьевич +Гурьевич +Давидович +Давыдович +Даниилович +Данилович +Демидович +Демьянович +Денисович +Димитриевич +Дмитриевич +Дорофеевич +Евсеевич +Евстигнеевич +Егорович +Елизарович +Елисеевич +Еремеевич +Ермилович +Ермолаевич +Ерофеевич +Ефимович +Ефимьевич +Ефремович +Ефстафьевич +Жанович +Жоресович +Захарьевич +Зиновьевич +Игнатович +Игнатьевич +Игоревич +Измаилович +Изотович +Иларионович +Ильич +Ильясович +Иосипович +Иосифович +Исидорович +Марсович +Матвеевич +Тарасович +Теймуразович +Терентьевич +Тимурович +Тихонович +Трифонович +Трофимович +Устинович +Фадеевич +Фёдорович +Федосеевич +Федосьевич +Федотович +Феликсович +Феодосьевич +Феоктистович +Феофанович +Филатович +Филимонович +Филиппович +Фокич +Фомич +Фролович +Харитонович +Харламович +Харлампович +Харлампьевич +Чеславович +Эдгардович +Эдгарович +Эдуардович +Юлианович +Юльевич +Яковлевич +Якубович +Ярославович diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru.xml new file mode 100644 index 0000000..292acce --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru.xml @@ -0,0 +1,16 @@ + + + + + ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru + + + ru + Подражатель люди мужские фамилии ru + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru/Ext/Template.txt new file mode 100644 index 0000000..db20d2e --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru/Ext/Template.txt @@ -0,0 +1,250 @@ +Смирнов +Иванов +Кузнецов +Попов +Соколов +Лебедев +Козлов +Новиков +Морозов +Петров +Волков +Соловьев +Васильев +Зайцев +Павлов +Семенов +Голубев +Виноградов +Богданов +Воробьев +Федоров +Михайлов +Беляев +Тарасов +Белов +Комаров +Орлов +Киселев +Макаров +Андреев +Ковалев +Ильин +Гусев +Титов +Кузьмин +Кудрявцев +Баранов +Куликов +Алексеев +Степанов +Яковлев +Сорокин +Сергеев +Романов +Захаров +Борисов +Королев +Герасимов +Пономарев +Григорьев +Лазарев +Медведев +Ершов +Никитин +Соболев +Рябов +Поляков +Цветков +Данилов +Жуков +Фролов +Журавлев +Николаев +Крылов +Максимов +Сидоров +Осипов +Белоусов +Федотов +Дорофеев +Егоров +Матвеев +Бобров +Дмитриев +Калинин +Анисимов +Петухов +Антонов +Тимофеев +Никифоров +Веселов +Филиппов +Марков +Большаков +Суханов +Миронов +Ширяев +Александров +Коновалов +Шестаков +Казаков +Ефимов +Денисов +Громов +Фомин +Давыдов +Мельников +Щербаков +Блинов +Колесников +Карпов +Афанасьев +Власов +Маслов +Исаков +Тихонов +Аксенов +Гаврилов +Родионов +Котов +Горбунов +Кудряшов +Быков +Зуев +Третьяков +Савельев +Панов +Рыбаков +Суворов +Абрамов +Воронов +Мухин +Архипов +Трофимов +Мартынов +Емельянов +Горшков +Чернов +Овчинников +Селезнев +Панфилов +Копылов +Михеев +Галкин +Назаров +Лобанов +Лукин +Беляков +Потапов +Некрасов +Хохлов +Жданов +Наумов +Шилов +Воронцов +Ермаков +Дроздов +Игнатьев +Савин +Логинов +Сафонов +Капустин +Кириллов +Моисеев +Елисеев +Кошелев +Костин +Горбачев +Орехов +Ефремов +Исаев +Евдокимов +Калашников +Кабанов +Носков +Юдин +Кулагин +Лапин +Прохоров +Нестеров +Харитонов +Агафонов +Муравьев +Ларионов +Федосеев +Зимин +Пахомов +Шубин +Игнатов +Филатов +Крюков +Рогов +Кулаков +Терентьев +Молчанов +Владимиров +Артемьев +Гурьев +Зиновьев +Гришин +Кононов +Дементьев +Ситников +Симонов +Мишин +Фадеев +Комиссаров +Мамонтов +Носов +Гуляев +Шаров +Устинов +Вишняков +Евсеев +Лаврентьев +Брагин +Константинов +Корнилов +Авдеев +Зыков +Бирюков +Шарапов +Никонов +Щукин +Дьячков +Одинцов +Сазонов +Якушев +Красильников +Гордеев +Самойлов +Князев +Беспалов +Уваров +Шашков +Бобылев +Доронин +Белозеров +Рожков +Самсонов +Мясников +Лихачев +Буров +Сысоев +Фомичев +Русаков +Стрелков +Гущин +Тетерин +Колобов +Субботин +Фокин +Блохин +Селиверстов +Пестов +Кондратьев +Силин +Меркушев +Лыткин +Туров diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТИнформацияОбОшибке.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТИнформацияОбОшибке.xml new file mode 100644 index 0000000..c7a3088 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТИнформацияОбОшибке.xml @@ -0,0 +1,16 @@ + + + + + ЮТИнформацияОбОшибке + + + ru + Информация об ошибке + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТИнформацияОбОшибке/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТИнформацияОбОшибке/Ext/Template.txt new file mode 100644 index 0000000..579fb28 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТИнформацияОбОшибке/Ext/Template.txt @@ -0,0 +1,167 @@ + + + + + + + + TREE_CONTENT + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТОписаниеМетаданных.xml b/src/cfe/YAXUnit/CommonTemplates/ЮТОписаниеМетаданных.xml new file mode 100644 index 0000000..7c2cb72 --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТОписаниеМетаданных.xml @@ -0,0 +1,16 @@ + + + + + ЮТОписаниеМетаданных + + + ru + Описание метаданных + + + + TextDocument + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/CommonTemplates/ЮТОписаниеМетаданных/Ext/Template.txt b/src/cfe/YAXUnit/CommonTemplates/ЮТОписаниеМетаданных/Ext/Template.txt new file mode 100644 index 0000000..794facb --- /dev/null +++ b/src/cfe/YAXUnit/CommonTemplates/ЮТОписаниеМетаданных/Ext/Template.txt @@ -0,0 +1,34 @@ +# Описание свойств метаданных + +| Имя | ИмяКоллекции | Конструктор | Группы | Ссылочный | Реквизиты | Измерения | Ресурсы | РеквизитыАдресации | ТабличныеЧасти | СтандартныеРеквизиты | +|----------------------------|-----------------------------|-----------------------|--------|-----------|-----------|-----------|---------|--------------------|----------------|----------------------| +| Справочник | Справочники | СоздатьЭлемент | + | + | + | | | | + | + | +| Документ | Документы | СоздатьДокумент | | + | + | | | | + | + | +| ПланВидовХарактеристик | ПланыВидовХарактеристик | СоздатьЭлемент | + | + | + | | | | + | + | +| ПланСчетов | ПланыСчетов | СоздатьСчет | | + | + | | | | + | + | +| ПланВидовРасчета | ПланыВидовРасчета | СоздатьВидРасчета | | + | + | | | | + | + | +| ПланОбмена | ПланыОбмена | СоздатьУзел | | + | + | | | | + | + | +| РегистрСведений | РегистрыСведений | СоздатьНаборЗаписей | | | + | + | + | | | + | +| РегистрНакопления | РегистрыНакопления | | | | + | + | + | | | + | +| РегистрБухгалтерии | РегистрыБухгалтерии | | | | + | + | + | | | + | +| РегистрРасчета | РегистрыРасчета | | | | + | + | + | | | + | +| БизнесПроцесс | БизнесПроцессы | СоздатьБизнесПроцесс | | + | + | | | | + | + | +| Задача | Задачи | СоздатьЗадачу | | + | + | | | + | + | + | +| Перечисление | Перечисления | | | + | | | | | | + | +| Отчет | Отчеты | | | | + | | | | + | | +| Обработка | Обработки | | | | + | | | | + | | +| Catalog | Catalogs | СоздатьЭлемент | + | + | + | | | | + | + | +| Document | Documents | СоздатьДокумент | | + | + | | | | + | + | +| ChartOfCharacteristicTypes | ChartsOfCharacteristicTypes | СоздатьЭлемент | + | + | + | | | | + | + | +| ChartOfAccounts | ChartsOfAccounts | СоздатьСчет | | + | + | | | | + | + | +| ChartOfCalculationTypes | ChartsOfCalculationTypes | СоздатьВидРасчета | | + | + | | | | + | + | +| ExchangePlan | ExchangePlans | СоздатьУзел | | + | + | | | | + | + | +| InformationRegister | InformationRegisters | СоздатьНаборЗаписей | | | + | + | + | | | + | +| AccumulationRegister | AccumulationRegisters | | | | + | + | + | | | + | +| AccountingRegister | AccountingRegisters | | | | + | + | + | | | + | +| CalculationRegister | CalculationRegisters | | | | + | + | + | | | + | +| BusinessProcess | BusinessProcesses | СоздатьБизнесПроцесс | | + | + | | | | + | + | +| Task | Tasks | СоздатьЗадачу | | + | + | | | + | + | + | +| Enum | Enums | | | + | | | | | | + | +| Report | Reports | | | | + | | | | + | | +| DataProcessor | DataProcessors | | | | + | | | | + | | diff --git a/src/cfe/YAXUnit/Configuration.xml b/src/cfe/YAXUnit/Configuration.xml new file mode 100644 index 0000000..e8d4418 --- /dev/null +++ b/src/cfe/YAXUnit/Configuration.xml @@ -0,0 +1,172 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 7aac7ebc-1c41-419f-aac1-52a9be0908ba + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + a0ea5602-5711-43f0-ae72-26204f907950 + + + e3687481-0a87-462c-a166-9f34594f9bba + b8f84992-e90b-41b5-b663-77dbeb5a8c9b + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + 4fb22a5b-2d3a-445e-b9c7-b51a4e59f82a + + + 51f2d5d8-ea4d-4064-8892-82951750031e + d26a61dd-a7a6-44b9-b131-be84fcf8c021 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 8339b2da-95e3-48c0-b355-f1f6179cebb2 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 7e0583a8-49fb-447b-9c04-741038e0b528 + + + + Adopted + YAXUNIT + + + ru + YAxUnit + + + + AddOn + true + ЮТ + Version8_3_10 + Russian + + 24.03 + + + + + + + + Русский + ЮТДвижок + ЮТДинамическиПодключаемые + ЮТПубличный + ЮТЗапустить + ЮТНеизвестный + ЮТОшибка + ЮТПерезапуститьУпавшие + ЮТПодсистема + ЮТПропущен + ЮТСравнить + ЮТУпал + ЮТУспешно + ЮТЭлементыТестов + ЮТ_СловарьПодражателя_Компании_Наименования_ru + ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru + ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru + ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru + ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru + ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru + ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru + ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru + ЮТRegEx1CAddin + ЮТYaxUnitAddIn + ЮТИнформацияОбОшибке + ЮТОписаниеМетаданных + Мокито + МокитоОбучение + МокитоПерехват + МокитоПроверки + МокитоСлужебный + ЮТАсинхроннаяОбработкаСлужебныйКлиент + ЮТест + ЮТЗапросы + ЮТЗапросыСлужебныйВызовСервера + ЮТЗапросыСлужебныйКлиентСервер + ЮТИсключения + ЮТИсполнительСлужебныйВызовСервера + ЮТИсполнительСлужебныйГлобальный + ЮТИсполнительСлужебныйКлиент + ЮТИсполнительСлужебныйКлиентСервер + ЮТКоллекции + ЮТКомпоненты + ЮТКомпонентыСлужебныйВызовСервера + ЮТКомпонентыСлужебныйКлиент + ЮТКонструкторВариантов + ЮТКонструкторТестовыхДанныхСлужебный + ЮТКонтекстСлужебный + ЮТКонтекстСлужебныйВызовСервера + ЮТКонтекстСлужебныйКлиент + ЮТКонтекстТеста + ЮТЛогирование + ЮТЛогированиеСлужебный + ЮТЛогированиеСлужебныйВызовСервера + ЮТЛогИсполненияТестаСлужебный + ЮТЛокальСлужебный + ЮТМетаданные + ЮТМетаданныеСлужебный + ЮТМетаданныеСлужебныйВызовСервера + ЮТМетаданныеСлужебныйПовтИсп + ЮТМетодыСлужебный + ЮТНастройкиВыполнения + ЮТОбщий + ЮТОбщийСлужебныйВызовСервера + ЮТОтчетAllureСлужебный + ЮТОтчетJSONСлужебный + ЮТОтчетJUnitСлужебный + ЮТОтчетСлужебный + ЮТПараметрыЗапускаСлужебный + ЮТПодражатель + ЮТПодражатель_Банки + ЮТПодражатель_Компании + ЮТПодражатель_Люди + ЮТПодражательСлужебный + ЮТПодражательСлужебныйВызовСервера + ЮТПодражательСлужебныйПовтИсп + ЮТПредикаты + ЮТПредикатыСлужебныйКлиентСервер + ЮТПреобразованияСлужебный + ЮТПроверкиСлужебный + ЮТРасширенияСлужебный + ЮТРегистрацияОшибок + ЮТРегистрацияОшибокСлужебный + ЮТСлужебныйПовторногоИспользования + ЮТСобытияСлужебный + ЮТСообщенияСлужебный + ЮТСравнениеСлужебныйВызовСервера + ЮТСравнениеСлужебныйКлиентСервер + ЮТСтроки + ЮТТестовыеДанные + ЮТТестовыеДанныеСлужебный + ЮТТестовыеДанныеСлужебныйВызовСервера + ЮТТестовыеДанныеСлужебныйТаблицыЗначений + ЮТТесты + ЮТТестыСлужебный + ЮТТипыДанныхСлужебный + ЮТУтверждения + ЮТУтвержденияИБ + ЮТФабрика + ЮТФабрикаСлужебный + ЮТФайлы + ЮТФильтрацияСлужебный + ЮТЧитательСлужебный + ЮТЧитательСлужебныйВызовСервера + ОМ_ОбщегоНазаначенияСервер + ОМ_КоннекторHTTP + ЮТHTTPServiceRequest + ЮТHTTPСервисЗапрос + ЮТRecordSet + ЮТКонструкторОбъектаXDTO + ЮТКонструкторТестовыхДанных + ЮТЮнитТесты + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТHTTPServiceRequest.xml b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPServiceRequest.xml new file mode 100644 index 0000000..ff1cd7d --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPServiceRequest.xml @@ -0,0 +1,32 @@ + + + + + + 852c0b16-4887-4def-83f9-18821d77f310 + d40cfd7c-5781-4c8f-9ec6-d59b29f9380a + + + 8710c3c0-b550-4cce-816c-3e4364c212ca + 82b2c6e6-4ea3-473c-90d5-4c2e17fa50de + + + + ЮТHTTPServiceRequest + + + ru + Мок для HTTP Service request + + + + true + + + false + + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТHTTPServiceRequest/Ext/ObjectModule.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPServiceRequest/Ext/ObjectModule.bsl new file mode 100644 index 0000000..ee4254b --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPServiceRequest/Ext/ObjectModule.bsl @@ -0,0 +1,252 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Если Сервер Тогда + +#Область ОписаниеПеременных + +//@skip-check object-module-export-variable +Var HTTPMethod Export; +//@skip-check object-module-export-variable +Var BaseURL Export; +//@skip-check object-module-export-variable +Var Headers Export; +//@skip-check object-module-export-variable +Var RelativeURL Export; +//@skip-check object-module-export-variable +Var URLParameters Export; +//@skip-check object-module-export-variable +Var QueryOptions Export; + +Var Body; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Возвращает тело как двоичные данные. +// +// Возвращаемое значение: +// ДвоичныеДанные - Тело +Function GetBodyAsBinaryData() Export + + BodyType = TypeOf(Body); + + If Body = Undefined Then + Return GetBinaryDataFromBase64String(""); + ElsIf BodyType = Type("BinaryData") Then + Return Body; + ElsIf BodyType = Type("String") Then + Return GetBinaryDataFromString(Body); + EndIf; + +EndFunction + +// Возвращает тело как поток. +// +// Возвращаемое значение: +// Поток - Тело +Function GetBodyAsStream() Export + + Return GetBodyAsBinaryData().OpenStreamForRead(); + +EndFunction + +// Возвращает тело как строку. +// +// Параметры: +// Encoding - КодировкаТекста, Строка - Кодировка +// +// Возвращаемое значение: +// Строка - Тело +Function GetBodyAsString(Encoding = Undefined) Export + + BodyType = TypeOf(Body); + + If Body = Undefined Then + Return ""; + ElsIf BodyType = Тип("BinaryData") Then + Return GetStringFromBinaryData(Body, Encoding); + ElsIf BodyType = Тип("String") Then + Return Body; + EndIf; + +EndFunction + +// Устанавливает тело как двоичные данные. +// При получении тела в другом формате происходит конвертация +// +// Параметры: +// Data - ДвоичныеДанные +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function УстановитьТелоКакДвоичныеДанные(Data) Export + + Body = Data; + Return ThisObject; + +EndFunction + +// Устанавливает тело как строку. +// При получении тела в другом формате происходит конвертация +// +// Параметры: +// String - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function УстановитьТелоКакСтроку(String) Export + + Body = String; + Return ThisObject; + +EndFunction + +// Устанавливает тело как строку JSON. +// Сериализует переданный объект в строку JSON и сохраняет в тело +// При получении тела в другом формате происходит конвертация +// +// Параметры: +// Data - Произвольный +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function УстановитьТелоКакСтрокуJSON(Data) Export + + JSONWriter = Новый JSONWriter(); + JSONWriter.SetString(); + WriteJSON(JSONWriter, Data); + + Body = JSONWriter.Close(); + + Return ThisObject; + +EndFunction + +// Добавляет заголовок. +// +// Параметры: +// HeaderName - Строка +// Value - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function ДобавитьЗаголовок(HeaderName, Value) Export + + Headers.Insert(HeaderName, Value); + Return ThisObject; + +EndFunction + +// Добавляет параметр запроса. +// +// Параметры: +// ParameterName - Строка +// Value - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function ДобавитьПараметрЗапроса(ParameterName, Value) Export + + QueryOptions.Insert(ParameterName, Value); + Return ThisObject; + +EndFunction + +// Добавляет параметр URL. +// +// Параметры: +// ParameterName - Строка +// Value - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function ДобавитьПараметрURL(ParameterName, Value) Export + + URLParameters.Insert(ParameterName, Value); + Return ThisObject; + +EndFunction + +// Устанавливает HTTP метод +// +// Параметры: +// Value - Строка - Имя http метода +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function Метод(Value) Export + + HTTPMethod = Value; + Return ThisObject; + +EndFunction + +// Устанавливает базовый URL. +// +// Параметры: +// Value - Строка - базовый URL +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function БазовыйURL(Value) Export + + BaseURL = Value; + Return ThisObject; + +EndFunction + +// Устанавливает относительный URL. +// +// Параметры: +// Value - Строка - относительный URL +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPServiceRequest - Мок +Function ОтносительныйURL(Value) Export + + RelativeURL = Value; + Return ThisObject; + +EndFunction + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура Initialize() + + HTTPMethod = "GET"; + BaseURL = ""; + Headers = New Map(); + RelativeURL = ""; + URLParameters = New Map(); + QueryOptions = New Map(); + +КонецПроцедуры + +#КонецОбласти + +#Область Инициализация + +Initialize(); + +#КонецОбласти + +#КонецЕсли diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТHTTPСервисЗапрос.xml b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPСервисЗапрос.xml new file mode 100644 index 0000000..a3e2381 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPСервисЗапрос.xml @@ -0,0 +1,32 @@ + + + + + + 5b53c341-183f-4aa0-b3ec-1f355d0f74f5 + 26dcab52-beab-4c30-aa64-02887735d56e + + + d0cecbc4-c89f-4ef2-ab8d-10bcfd8c514c + 50afe94b-4ccb-4a26-9a80-01121c6fef66 + + + + ЮТHTTPСервисЗапрос + + + ru + Мок для HTTPСервис запрос + + + + true + + + false + + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТHTTPСервисЗапрос/Ext/ObjectModule.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPСервисЗапрос/Ext/ObjectModule.bsl new file mode 100644 index 0000000..e0d9e1f --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТHTTPСервисЗапрос/Ext/ObjectModule.bsl @@ -0,0 +1,252 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Если Сервер Тогда + +#Область ОписаниеПеременных + +//@skip-check object-module-export-variable +Перем HTTPМетод Экспорт; +//@skip-check object-module-export-variable +Перем БазовыйURL Экспорт; +//@skip-check object-module-export-variable +Перем Заголовки Экспорт; +//@skip-check object-module-export-variable +Перем ОтносительныйURL Экспорт; +//@skip-check object-module-export-variable +Перем ПараметрыURL Экспорт; +//@skip-check object-module-export-variable +Перем ПараметрыЗапроса Экспорт; + +Перем Тело; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Возвращает тело как двоичные данные. +// +// Возвращаемое значение: +// ДвоичныеДанные - Тело +Функция ПолучитьТелоКакДвоичныеДанные() Экспорт + + ТипТела = ТипЗнч(Тело); + + Если Тело = Неопределено Тогда + Возврат ПолучитьДвоичныеДанныеИзBase64Строки(""); + ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда + Возврат Тело; + ИначеЕсли ТипТела = Тип("Строка") Тогда + Возврат ПолучитьДвоичныеДанныеИзСтроки(Тело); + КонецЕсли; + +КонецФункции + +// Возвращает тело как поток. +// +// Возвращаемое значение: +// Поток - Тело +Функция ПолучитьТелоКакПоток() Экспорт + + Возврат ПолучитьТелоКакДвоичныеДанные().ОткрытьПотокДляЧтения(); + +КонецФункции + +// Возвращает тело как строку. +// +// Параметры: +// Кодировка - КодировкаТекста, Строка - Кодировка +// +// Возвращаемое значение: +// Строка - Тело +Функция ПолучитьТелоКакСтроку(Кодировка = Неопределено) Экспорт + + ТипТела = ТипЗнч(Тело); + + Если Тело = Неопределено Тогда + Возврат ""; + ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда + Возврат ПолучитьСтрокуИзДвоичныхДанных(Тело, Кодировка); + ИначеЕсли ТипТела = Тип("Строка") Тогда + Возврат Тело; + КонецЕсли; + +КонецФункции + +// Устанавливает тело как двоичные данные. +// При получении тела в другом формате происходит конвертация +// +// Параметры: +// Данные - ДвоичныеДанные +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция УстановитьТелоКакДвоичныеДанные(Данные) Экспорт + + Тело = Данные; + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает тело как строку. +// При получении тела в другом формате происходит конвертация +// +// Параметры: +// Строка - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция УстановитьТелоКакСтроку(Строка) Экспорт + + Тело = Строка; + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает тело как строку JSON. +// Сериализует переданный объект в строку JSON и сохраняет в тело +// При получении тела в другом формате происходит конвертация +// +// Параметры: +// Данные - Произвольный +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция УстановитьТелоКакСтрокуJSON(Данные) Экспорт + + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, Данные); + + Тело = ЗаписьJSON.Закрыть(); + + Возврат ЭтотОбъект; + +КонецФункции + +// Добавляет заголовок. +// +// Параметры: +// ИмяЗаголовка - Строка +// Значение - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция ДобавитьЗаголовок(ИмяЗаголовка, Значение) Экспорт + + Заголовки.Вставить(ИмяЗаголовка, Значение); + Возврат ЭтотОбъект; + +КонецФункции + +// Добавляет параметр запроса. +// +// Параметры: +// ИмяПараметра - Строка +// Значение - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция ДобавитьПараметрЗапроса(ИмяПараметра, Значение) Экспорт + + ПараметрыЗапроса.Вставить(ИмяПараметра, Значение); + Возврат ЭтотОбъект; + +КонецФункции + +// Добавляет параметр URL. +// +// Параметры: +// ИмяПараметра - Строка +// Значение - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция ДобавитьПараметрURL(ИмяПараметра, Значение) Экспорт + + ПараметрыURL.Вставить(ИмяПараметра, Значение); + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает HTTP метод +// +// Параметры: +// Значение - Строка - Имя http метода +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция Метод(Значение) Экспорт + + HTTPМетод = Значение; + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает базовый URL. +// +// Параметры: +// Значение - Строка - базовый URL +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция БазовыйURL(Значение) Экспорт + + БазовыйURL = Значение; + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает относительный URL. +// +// Параметры: +// Значение - Строка - относительный URL +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок +Функция ОтносительныйURL(Значение) Экспорт + + ОтносительныйURL = Значение; + Возврат ЭтотОбъект; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура Инициализировать() + + HTTPМетод = "GET"; + БазовыйURL = ""; + Заголовки = Новый Соответствие(); + ОтносительныйURL = ""; + ПараметрыURL = Новый Соответствие(); + ПараметрыЗапроса = Новый Соответствие(); + +КонецПроцедуры + +#КонецОбласти + +#Область Инициализация + +Инициализировать(); + +#КонецОбласти + +#КонецЕсли diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТRecordSet.xml b/src/cfe/YAXUnit/DataProcessors/ЮТRecordSet.xml new file mode 100644 index 0000000..6d72015 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТRecordSet.xml @@ -0,0 +1,217 @@ + + + + + + 40542278-a176-447b-b729-967555b6fbc5 + 5802b53d-bb23-4f8e-b96b-9ba39325447a + + + 6d7fc763-87bb-4249-8308-775667798af9 + f1dcbc92-0692-415d-a538-8c7b774610d2 + + + + ЮТRecordSet + + + ru + Record set + + + + true + + + false + + + + + + + EOF + + + ru + EOF + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + BOF + + + ru + BOF + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Описание + + + ru + Описание + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + AbsolutePosition + + + ru + Absolute position + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + RecordCount + + + ru + Record count + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТRecordSet/Ext/ObjectModule.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТRecordSet/Ext/ObjectModule.bsl new file mode 100644 index 0000000..b6df694 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТRecordSet/Ext/ObjectModule.bsl @@ -0,0 +1,187 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + +#Область ОписаниеПеременных + +//@skip-check object-module-export-variable +Перем Fields Экспорт; + +Перем Данные; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Добавляет запись в набор данных. Это данные, которые могут быть прочитаны через интерфейс RecordSet +// +// Параметры: +// Значение1 - Произвольный +// Значение2 - Произвольный +// Значение3 - Произвольный +// Значение4 - Произвольный +// Значение5 - Произвольный +// Значение6 - Произвольный +// Значение7 - Произвольный +// Значение8 - Произвольный +// Значение9 - Произвольный +// Значение10 - Произвольный +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТRecordSet - Эмулятор +//@skip-check method-too-many-params +Функция Добавить(Значение1, + Значение2 = Неопределено, + Значение3 = Неопределено, + Значение4 = Неопределено, + Значение5 = Неопределено, + Значение6 = Неопределено, + Значение7 = Неопределено, + Значение8 = Неопределено, + Значение9 = Неопределено, + Значение10 = Неопределено) Экспорт + + Строка = Данные.Добавить(); + + УстановитьБезопасныйРежим(Истина); + + Для Инд = 1 По Данные.Колонки.Количество() Цикл + Строка[Инд - 1] = Вычислить("Значение" + Инд); + КонецЦикла; + + УстановитьФлаги(); + + Возврат ЭтотОбъект; + +КонецФункции + +// Переход к первой строке набора +Процедура MoveFirst() Экспорт + + AbsolutePosition = 0; + УстановитьФлаги(); + +КонецПроцедуры + +// Переход к следующей строке набора +Процедура MoveNext() Экспорт + + AbsolutePosition = AbsolutePosition + 1; + УстановитьФлаги(); + +КонецПроцедуры + +// Закрытие набора и очистка данных +Процедура Close() Экспорт + + Данные = Неопределено; + УстановитьФлаги(); + ОбновитьFields(); + +КонецПроцедуры + +// Возвращает информацию о колонке набора +// +// Параметры: +// ИндексПоля - Число - Индекс колонки +// +// Возвращаемое значение: +// Структура - Fields: +// * Name - Строка - Имя колонки +// * Value - Произвольный - Значения колонки для текущей строки набора +Функция Fields(ИндексПоля) Экспорт + + Если Данные <> Неопределено И Данные.Количество() <> 0 Тогда + Значение = Данные[AbsolutePosition][ИндексПоля]; + Иначе + Значение = Неопределено + КонецЕсли; + + //@skip-check constructor-function-return-section + Возврат Новый Структура("Name, Value", Данные.Колонки[ИндексПоля].Имя, Значение); + +КонецФункции + +// Возвращает признак, что все записи набора прочитаны +// +// Возвращаемое значение: +// Булево +Функция EOF() Экспорт + + Возврат EOF; + +КонецФункции + +// Возвращает признак, который показывает, находится ли текущее положение записи курсора перед первой записью +// +// Возвращаемое значение: +// Булево +Функция BOF() Экспорт + + Возврат BOF; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс +// Инициализирует эмулятор RecordSet. Устанавливает информацию о колонках и служебные данные. +// Параметры: +// Колонки - Строка - Имена колонок, разделенные запятой +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТRecordSet - Эмулятор +Функция Инициализировать(Знач Колонки) Экспорт + + Данные = Новый ТаблицаЗначений(); + + Колонки = ЮТСтроки.РазделитьСтроку(Колонки, ","); + + Для Каждого Колонка Из Колонки Цикл + Данные.Колонки.Добавить(Колонка); + КонецЦикла; + + ОбновитьFields(); + MoveFirst(); + + Возврат ЭтотОбъект; + +КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура УстановитьФлаги() + + EOF = Данные = Неопределено ИЛИ Данные.Количество() <= AbsolutePosition; + BOF = Данные = Неопределено ИЛИ Данные.Количество() = 0 ИЛИ AbsolutePosition < 0; + RecordCount = ?(Данные = Неопределено, 0, Данные.Количество()); + +КонецПроцедуры + +Процедура ОбновитьFields() + + Количество = ?(Данные = Неопределено, 0, Данные.Колонки.Количество()); + Fields = Новый Структура("Count", Количество); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторОбъектаXDTO.xml b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторОбъектаXDTO.xml new file mode 100644 index 0000000..1ddc000 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторОбъектаXDTO.xml @@ -0,0 +1,32 @@ + + + + + + 4d0c09ec-ea56-4aef-852c-42a99d491406 + ac59e2e1-acef-483b-b47d-b9aa6bcde7cd + + + f43e3751-6657-41b5-a060-07b0bcd9b2c0 + 66b97e8e-5ab2-4e0b-8e10-a14a755c4e0b + + + + ЮТКонструкторОбъектаXDTO + + + ru + Конструктор объекта XDTO + + + + true + + + false + + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторОбъектаXDTO/Ext/ObjectModule.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторОбъектаXDTO/Ext/ObjectModule.bsl new file mode 100644 index 0000000..d89b5e0 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторОбъектаXDTO/Ext/ObjectModule.bsl @@ -0,0 +1,375 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + +#Область ОписаниеПеременных + +Перем ТекущийОбъект; +Перем ТекущийТип; +Перем СтекОбъектов; +Перем Фабрика; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Устанавливает значение реквизита объекта. +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита объекта +// Значение - Произвольный - Значение реквизита объекта +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Конструктор +Функция Установить(ИмяРеквизита, Значение) Экспорт + + ТекущийОбъект[ИмяРеквизита] = Значение; + + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает значения реквизитов объекта. +// +// Параметры: +// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Конструктор +Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт + + Для Каждого ЗначениеРеквизита Из ЗначенияРеквизитов Цикл + ТекущийОбъект[ЗначениеРеквизита.Ключ] = ЗначениеРеквизита.Значение; + КонецЦикла; + + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает фиктивное значение реквизита объекта. +// +// На основании типа реквизита генерируется фиктивное значение. +// +// * Для примитивных значение генерируется случайное значение +// * Для объектных типов создается новый объект +// * Для коллекций - генерируется случайно количество случайных элементов (на основании типа) +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита объекта +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Конструктор +Функция Фикция(ИмяРеквизита) Экспорт + + Свойство = Свойство(ИмяРеквизита); + Значение = СлучайноеЗначениеСвойства(Свойство, 0); + Установить(ИмяРеквизита, Значение); + + Возврат ЭтотОбъект; + +КонецФункции + +// Заполняет обязательные реквизиты объекта фиктивными значениями +// +// На основании типа объекта определяются обязательные поля. +// Для них генерируются и устанавливаются фиктивные значение. +// +// * Для примитивных значение генерируется случайное значение +// * Для объектных типов создается новый объект +// * Для коллекций - генерируется случайно количество случайных элементов (на основании типа) +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Конструктор +Функция ФикцияОбязательныхПолей() Экспорт + + Для Каждого Свойство Из ТекущийТип.Свойства Цикл + + Если НЕ Свойство.ВозможноПустое И НеЗаполнено(Свойство, ТекущийОбъект[Свойство.Имя]) Тогда + УстановитьСлучайноеЗначениеСвойства(ТекущийОбъект, Свойство, 0); + КонецЕсли; + + КонецЦикла; + + Возврат ЭтотОбъект; + +КонецФункции + +// Заполняет неустановленные реквизиты объекта фиктивными значениями +// +// На основании типа объекта определяются обязательные поля. +// Для них генерируются и устанавливаются фиктивные значение. +// +// * Для примитивных значение генерируется случайное значение +// * Для объектных типов создается новый объект +// * Для коллекций - генерируется случайно количество случайных элементов (на основании типа) +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Конструктор +Функция ФикцияНезаполненных() Экспорт + + Для Каждого Свойство Из ТекущийТип.Свойства Цикл + + Если НеЗаполнено(Свойство, ТекущийОбъект[Свойство.Имя]) Тогда + УстановитьСлучайноеЗначениеСвойства(ТекущийОбъект, Свойство, 0); + КонецЕсли; + + КонецЦикла; + + Возврат ЭтотОбъект; + +КонецФункции + +// Возвращает основной объект XDTO +// +// Возвращаемое значение: +// ОбъектXDTO +Функция ДанныеОбъекта() Экспорт + + Возврат СтекОбъектов[0]; + +КонецФункции + +// Добавляет новый объект в реквизит-коллекцию +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизиты коллекции +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Добавить новый +Функция ДобавитьНовый(ИмяРеквизита) Экспорт + + Свойство = Свойство(ИмяРеквизита); + + Если НЕ ЭтоТипОбъектаXDTO(Свойство.Тип) Тогда + ВызватьИсключение СтрШаблон("Метод применяется только для свойств-объектов. Реквизит: %1 имеет тип %2", ИмяРеквизита, Свойство.Тип); + КонецЕсли; + + Коллекция = ТекущийОбъект[Свойство.Имя]; + ДобавитьНовыйОбъектВСтек(Свойство.Тип); + + Коллекция.Добавить(ТекущийОбъект); + + Возврат ЭтотОбъект; + +КонецФункции + +// Переходит на уровень выше по стеку. +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Перейти к владельцу +Функция ПерейтиКВладельцу() Экспорт + + УдалитьПоследнийИзСтека(); + + Возврат ЭтотОбъект; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура Инициализировать(ИмяТипаОбъекта, ПространствоИмен, ФабрикаОбъектов = Неопределено) Экспорт + + Если ФабрикаОбъектов = Неопределено Тогда + Фабрика = ФабрикаXDTO; + Иначе + Фабрика = ФабрикаОбъектов; + КонецЕсли; + + СтекОбъектов = Новый Массив(); + ТипОбъекта = Фабрика.Тип(ПространствоИмен, ИмяТипаОбъекта); + ДобавитьНовыйОбъектВСтек(ТипОбъекта); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция Свойство(ИмяСвойства) + + Свойство = ТекущийТип.Свойства.Получить(ИмяСвойства); + + Если Свойство = Неопределено Тогда + Сообщение = СтрШаблон("Тип XDTO `%1` не содержит свойства `%2`", ТекущийТип.Имя, ИмяСвойства); + ВызватьИсключение Сообщение; + КонецЕсли; + + Возврат Свойство; + +КонецФункции + +Процедура ДобавитьНовыйОбъектВСтек(Тип) + + Объект = НовыйОбъект(Тип); + СтекОбъектов.Добавить(Объект); + ТекущийОбъект = Объект; + ТекущийТип = Тип; + +КонецПроцедуры + +Процедура УдалитьПоследнийИзСтека() + + ИндексПоследнего = СтекОбъектов.ВГраница(); + + ТекущийОбъект = СтекОбъектов[ИндексПоследнего - 1]; + ТекущийТип = ТекущийОбъект.Тип(); + + СтекОбъектов.Удалить(ИндексПоследнего); + +КонецПроцедуры + +Функция СлучайноеЗначениеСвойства(Свойство, Уровень = 0) + + ТипСвойства = Свойство.Тип; + Если ТипЗнч(ТипСвойства) = Тип("ТипЗначенияXDTO") Тогда + Возврат СлучайноеЗначениеПримитипа(Свойство); + ИначеЕсли Уровень < 3 Тогда + Возврат СлучайноеЗначениеОбъекта(Свойство, Уровень + 1); + КонецЕсли; + +КонецФункции + +Функция СлучайноеЗначениеПримитипа(Свойство) + + Тип = Свойство.Тип; + + Если Тип.Имя = "string" И СтрНайти(НРег(Свойство.Имя), "uid") Тогда + Возврат ЮТест.Данные().УникальнаяСтрока(); + ИначеЕсли Тип.Имя = "string" Тогда + Возврат ЮТест.Данные().СлучайнаяСтрока(); + ИначеЕсли Тип.Имя = "boolean" Тогда + Возврат ЮТест.Данные().СлучайноеБулево(); + ИначеЕсли Тип.Имя = "integer" Тогда + Возврат ЮТест.Данные().СлучайноеЧисло(); + ИначеЕсли Тип.Имя = "decimal" Тогда + Возврат ЮТест.Данные().СлучайноеЧисло(, , 3); + ИначеЕсли Тип.Имя = "time" Тогда + Возврат ЮТест.Данные().СлучайноеВремя(); + ИначеЕсли Тип.Имя = "date" Тогда + Возврат НачалоДня(ЮТест.Данные().СлучайнаяДата()); + ИначеЕсли Тип.Имя = "dateTime" Тогда + Возврат ЮТест.Данные().СлучайнаяДата(); + ИначеЕсли Тип.БазовыйТип.Имя = "AnyRef" Тогда + Возврат ЮТест.Данные().УникальнаяСтрока(); + ИначеЕсли ЗначениеЗаполнено(Тип.Фасеты) И Тип.Фасеты[0].Вид = ВидФасетаXDTO.Перечисление Тогда + Возврат СлучайноеЗначениеПеречисления(Тип); + Иначе + ВызватьИсключение "Неподдерживаемый тип примитива XDTO: " + Тип; + КонецЕсли; + +КонецФункции + +Функция СлучайноеЗначениеОбъекта(Свойство, Уровень) + + Пакет = НовыйОбъект(Свойство.Тип); + ЗаполнитьПакетСлучайнымиЗначениями(Пакет, Уровень); + + Возврат Пакет; + +КонецФункции + +Процедура ЗаполнитьПакетСлучайнымиЗначениями(Пакет, Уровень = 0) + + Тип = Пакет.Тип(); + Для Каждого Свойство Из Тип.Свойства Цикл + + Если НеЗаполнено(Свойство, Пакет[Свойство.Имя]) Тогда + УстановитьСлучайноеЗначениеСвойства(Пакет, Свойство, Уровень); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура УстановитьСлучайноеЗначениеСвойства(Пакет, Свойство, Уровень) + + ЭтоСписок = ЭтоСписок(Свойство); + + Если ЭтоСписок Тогда + СписокСлучайныхЗначений(Пакет[Свойство.Имя], Свойство, Уровень); + Иначе + Пакет[Свойство.Имя] = СлучайноеЗначениеСвойства(Свойство, Уровень); + КонецЕсли; + +КонецПроцедуры + +Функция НеЗаполнено(Свойство, Значение) + + ЭтоСписок = ЭтоСписок(Свойство); + + Если ЭтоСписок И Значение.Количество() Тогда + Возврат Значение.Количество() = 0; + Иначе + Возврат НЕ ЗначениеЗаполнено(Значение); + КонецЕсли; + +КонецФункции + +Функция ЭтоСписок(Свойство) + + Возврат Свойство.ВерхняяГраница = -1 ИЛИ Свойство.ВерхняяГраница > 1; + +КонецФункции + +Процедура СписокСлучайныхЗначений(Список, Свойство, Уровень) + + Если Свойство.ВерхняяГраница = -1 Тогда + Количество = ЮТест.Данные().СлучайноеЧисло(Свойство.НижняяГраница, 10); + Иначе + Количество = ЮТест.Данные().СлучайноеЧисло(Свойство.НижняяГраница, Свойство.ВерхняяГраница); + КонецЕсли; + + Для Инд = 0 По Количество Цикл + Значение = СлучайноеЗначениеСвойства(Свойство, Уровень); + Список.Добавить(Значение); + КонецЦикла; + +КонецПроцедуры + +Функция НовыйОбъект(Тип) + + Возврат Фабрика.Создать(Тип); + +КонецФункции + +Функция ЭтоТипОбъектаXDTO(ТипСвойства) + + Возврат ТипЗнч(ТипСвойства) = Тип("ТипОбъектаXDTO"); + +КонецФункции + +Функция СлучайноеЗначениеПеречисления(Тип) + + Значения = Новый Массив(); + + Для Каждого Фасет Из Тип.Фасеты Цикл + Если Фасет.Вид = ВидФасетаXDTO.Перечисление Тогда + Значения.Добавить(Фасет.Значение); + КонецЕсли; + КонецЦикла; + + Возврат ЮТест.Данные().СлучайноеЗначениеИзСписка(Значения); + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных.xml b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных.xml new file mode 100644 index 0000000..11a191b --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных.xml @@ -0,0 +1,34 @@ + + + + + + feb4bd6a-59d7-4b74-98a7-c722b4300cc1 + 4a6b9b50-8e10-4172-ab37-7ec247e39f1a + + + 6c763c70-caff-423c-a7db-0024c94f60ab + 5df0b0b8-38c5-4709-b2ea-865d8e990c86 + + + + ЮТКонструкторТестовыхДанных + + + ru + Конструктор тестовых данных + + + + false + DataProcessor.ЮТКонструкторТестовыхДанных.Form.КлиентскийКонструктор + + false + + + + +
КлиентскийКонструктор
+
+
+
\ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Ext/ObjectModule.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Ext/ObjectModule.bsl new file mode 100644 index 0000000..c55ae33 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Ext/ObjectModule.bsl @@ -0,0 +1,261 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + +#Область ОписаниеПеременных + +// см. ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктора +Перем Контекст; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Устанавливает значение реквизита создаваемого объекта. +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значение реквизита строки табличной части +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части +// Значение - Произвольный - Значение реквизита объекта или табличной части +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция Установить(ИмяРеквизита, Значение) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.Установить(Контекст, ИмяРеквизита, Значение); + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает значения реквизитов создаваемого объекта. +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливаются значения реквизитов строки табличной части +// +// Параметры: +// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Установить реквизиты +Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.УстановитьРеквизиты(Контекст, ЗначенияРеквизитов); + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает фиктивное значение реквизита создаваемого объекта. +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значение реквизита строки табличной части. +// +// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение. +// +// * Для примитивных значение генерируется случайное значение +// * Для ссылочных типов создается новый объект +// * Для перечислений (в том числе системных) выбирается случайно значение перечисления +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части +// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы +// - Неопределено +// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа +// - Неопределено - Будет сгенерировано значение, на основании типа реквизита, если реквизит составной, то будет использован случайный тип +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа); + Возврат ЭтотОбъект; + +КонецФункции + +// Заполняет обязательные поля объекта фиктивными значениями +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливаются значения реквизитов строки табличной части. +// +// На основании метаданных определяются обязательные поля (Проверка заполнения = Выдавать ошибку), +// для них генерируются и устанавливаются фиктивные значение. +// +// * Для примитивных значение генерируется случайное значение +// * Для ссылочных типов создается новый объект +// * Для перечислений (в том числе системных) выбирается случайно значение перечисления +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция ФикцияОбязательныхПолей() Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ФикцияОбязательныхПолей(Контекст); + Возврат ЭтотОбъект; + +КонецФункции + +// Переключает конструктор на заполнение табличной части объекта. +// +// Параметры: +// ИмяТабличнойЧасти - Строка - Имя табличной части +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция ТабличнаяЧасть(ИмяТабличнойЧасти) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ТабличнаяЧасть(Контекст, ИмяТабличнойЧасти); + Возврат ЭтотОбъект; + +КонецФункции + +// Переключает конструктор на заполнение объекта. +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция Объект() Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ТабличнаяЧасть(Контекст, Неопределено); + Возврат ЭтотОбъект; + +КонецФункции + +// Добавляет новую строку табличной части объекта. +// При необходимости можно выполнить установку реквизитов новой строки +// +// Параметры: +// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов новой строки +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ДобавитьСтроку(Контекст, ЗначенияРеквизитов); + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает дополнительное свойство объекта. +// +// Параметры: +// ИмяСвойства - Строка - Имя дополнительного свойства +// Значение - Произвольный - Значение дополнительного свойства +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.УстановитьДополнительноеСвойство(Контекст, ИмяСвойства, Значение); + Возврат ЭтотОбъект; + +КонецФункции + +// Создает новый объект и возвращает его или ссылку. +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Параметры: +// ВернутьОбъект - Булево - Вернуть объект вместо ссылки +// ОбменДаннымиЗагрузка - Булево - Записать объект с признаком `ОбменДанными.Загрузка = Истина` +// +// Возвращаемое значение: +// Произвольный - Созданный объект или ссылка на него +Функция Записать(ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.Записать(Контекст, ВернутьОбъект, ОбменДаннымиЗагрузка); + +КонецФункции + +// Создает новый объект. +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Параметры: +// ОбменДаннымиЗагрузка - Булево - Записать объект с признаком `ОбменДанными.Загрузка = Истина` +// +// Возвращаемое значение: +// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор +Функция ДобавитьЗапись(ОбменДаннымиЗагрузка = Ложь) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.Записать(Контекст, Ложь, ОбменДаннымиЗагрузка); + + Возврат ЭтотОбъект; + +КонецФункции + +// Создает и возвращяет новый объект (не записывая его). +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Возвращаемое значение: +// Произвольный - Созданный объект. +Функция НовыйОбъект() Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.НовыйОбъект(Контекст); + +КонецФункции + +// Создает и проводит новый документ. Возвращает объект или или ссылку на него. +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создать множество объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Параметры: +// ВернутьОбъект - Булево - Вернуть объект вместо ссылки +// +// Возвращаемое значение: +// Произвольный - Созданный объект или ссылка на него +Функция Провести(ВернутьОбъект = Ложь) Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.Провести(Контекст, ВернутьОбъект); + +КонецФункции + +// Возвращает данные текущей строки табличной части объекта. +// +// Возвращаемое значение: +// - Структура - Данные строки +// - Неопределено - Если заполняется объект +Функция ДанныеСтроки() Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтроки(Контекст); + +КонецФункции + +// Возвращает данные создаваемого объекта. +// +// Возвращаемое значение: +// Структура - Данные объекта +Функция ДанныеОбъекта() Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеОбъекта(Контекст); + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура Инициализировать(Менеджер) Экспорт + + Контекст = ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктора(Менеджер); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор.xml b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор.xml new file mode 100644 index 0000000..4ec950c --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор.xml @@ -0,0 +1,22 @@ + + +
+ + КлиентскийКонструктор + + + ru + Клиентский конструктор + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Ext/Form.xml b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Ext/Form.xml new file mode 100644 index 0000000..c1f2bc2 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Ext/Form.xml @@ -0,0 +1,6 @@ + +
+ false + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Ext/Form/Module.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Ext/Form/Module.bsl new file mode 100644 index 0000000..649aedb --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Ext/Form/Module.bsl @@ -0,0 +1,277 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +// BSLLS:NonStandardRegion-off +#Область ОписаниеПеременных + +// см. ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктора +&НаКлиенте +Перем Контекст; + +#КонецОбласти + +//@skip-check module-structure-top-region +#Область ПрограммныйИнтерфейс + +// Устанавливает значение реквизита создаваемого объекта. +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значение реквизита строки табличной части +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части +// Значение - Произвольный - Значение реквизита объекта или табличной части +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция Установить(ИмяРеквизита, Значение) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.Установить(Контекст, ИмяРеквизита, Значение); + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает значения реквизитов создаваемого объекта. +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливаются значения реквизитов строки табличной части +// +// Параметры: +// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов +// +// Возвращаемое значение: +// ОбщийМодуль - Установить реквизиты +&НаКлиенте +Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.УстановитьРеквизиты(Контекст, ЗначенияРеквизитов); + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает фиктивное значение реквизита создаваемого объекта. +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значение реквизита строки табличной части. +// +// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение. +// +// * Для примитивных значение генерируется случайное значение +// * Для ссылочных типов создается новый объект +// * Для перечислений (в том числе системных) выбирается случайно значение перечисления +// +// Параметры: +// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части +// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы +// - Неопределено +// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа +// - Неопределено - Будет сгенерировано значение, на основании типа реквизита, если реквизит составной, то будет использован случайный тип +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа); + Возврат ЭтотОбъект; + +КонецФункции + +// Заполняет обязательные поля объекта фиктивными значениями +// +// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливаются значения реквизитов строки табличной части. +// +// На основании метаданных определяются обязательные поля (Проверка заполнения = Выдавать ошибку), +// для них генерируются и устанавливаются фиктивные значение. +// +// * Для примитивных значение генерируется случайное значение +// * Для ссылочных типов создается новый объект +// * Для перечислений (в том числе системных) выбирается случайно значение перечисления +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция ФикцияОбязательныхПолей() Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ФикцияОбязательныхПолей(Контекст); + Возврат ЭтотОбъект; + +КонецФункции + +// Переключает конструктор на заполнение табличной части объекта. +// +// Параметры: +// ИмяТабличнойЧасти - Строка - Имя табличной части +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция ТабличнаяЧасть(ИмяТабличнойЧасти) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ТабличнаяЧасть(Контекст, ИмяТабличнойЧасти); + Возврат ЭтотОбъект; + +КонецФункции + +// Переключает конструктор на заполнение объекта. +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция Объект() Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ТабличнаяЧасть(Контекст, Неопределено); + Возврат ЭтотОбъект; + +КонецФункции + +// Добавляет новую строку табличной части объекта. +// При необходимости можно выполнить установку реквизитов новой строки +// +// Параметры: +// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов новой строки +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.ДобавитьСтроку(Контекст, ЗначенияРеквизитов); + Возврат ЭтотОбъект; + +КонецФункции + +// Устанавливает дополнительное свойство объекта. +// +// Параметры: +// ИмяСвойства - Строка - Имя дополнительного свойства +// Значение - Произвольный - Значение дополнительного свойства +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.УстановитьДополнительноеСвойство(Контекст, ИмяСвойства, Значение); + Возврат ЭтотОбъект; + +КонецФункции + +// Создает новый объект и возвращает его или ссылку. +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Параметры: +// ВернутьОбъект - Булево - Вернуть объект вместо ссылки +// ОбменДаннымиЗагрузка - Булево - Записать объект с признаком `ОбменДанными.Загрузка = Истина` +// +// Возвращаемое значение: +// Произвольный - Созданный объект или ссылка на него +&НаКлиенте +Функция Записать(ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.Записать(Контекст, ВернутьОбъект, ОбменДаннымиЗагрузка); + +КонецФункции + +// Создает новый объект. +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Параметры: +// ОбменДаннымиЗагрузка - Булево - Записать объект с признаком `ОбменДанными.Загрузка = Истина` +// +// Возвращаемое значение: +// ОбщийМодуль - Конструктор +&НаКлиенте +Функция ДобавитьЗапись(ОбменДаннымиЗагрузка = Ложь) Экспорт + + ЮТКонструкторТестовыхДанныхСлужебный.Записать(Контекст, Ложь, ОбменДаннымиЗагрузка); + + Возврат ЭтотОбъект; + +КонецФункции + +// Создает и возвращяет новый объект (не записывая его). +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Возвращаемое значение: +// Произвольный - Созданный объект. +&НаКлиенте +Функция НовыйОбъект() Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.НовыйОбъект(Контекст); + +КонецФункции + +// Создает и проводит новый документ. Возвращает объект или или ссылку на него. +// +// Важно, после создания данные не очищаются, поэтому многократный вызов метода создать множество объектов. +// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор. +// +// Параметры: +// ВернутьОбъект - Булево - Вернуть объект вместо ссылки +// +// Возвращаемое значение: +// Произвольный - Созданный объект или ссылка на него +&НаКлиенте +Функция Провести(ВернутьОбъект = Ложь) Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.Провести(Контекст, ВернутьОбъект); + +КонецФункции + +// Возвращает данные текущей строки табличной части объекта. +// +// Возвращаемое значение: +// - Структура - Данные строки +// - Неопределено - Если заполняется объект +&НаКлиенте +Функция ДанныеСтроки() Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтроки(Контекст); + +КонецФункции + +// Возвращает данные создаваемого объекта. +// +// Возвращаемое значение: +// Структура - Данные объекта +&НаКлиенте +Функция ДанныеОбъекта() Экспорт + + Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеОбъекта(Контекст); + +КонецФункции + +#КонецОбласти + +//@skip-check module-structure-top-region +#Область СлужебныйПрограммныйИнтерфейс + +&НаКлиенте +Процедура Инициализировать(Менеджер) Экспорт + + Контекст = ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктора(Менеджер); + +КонецПроцедуры + +#КонецОбласти +// BSLLS:NonStandardRegion-on diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты.xml new file mode 100644 index 0000000..68e5199 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты.xml @@ -0,0 +1,83 @@ + + + + + + 5b4ab199-21bb-4d2c-9b3f-76400ff90d09 + 46e26617-02e4-4719-87a0-982b4820504f + + + cea40759-07dd-409f-8c26-be7e738c7fbe + e3a7e7ca-1e0d-4fdf-9390-258825a6bba5 + + + + ЮТЮнитТесты + + + ru + Юнит-тесты + + + + false + DataProcessor.ЮТЮнитТесты.Form.Основная + + false + + + + +
Основная
+
СозданиеНастройки
+
Сравнение
+ + + + + ЗапускТестов + + + ru + Запуск тестирования + + + + NavigationPanelImportant + + Single + false + PictureAndText + + + CommonPicture.ЮТЗапустить + false + + + Auto + + + + + СформироватьНастройкиТестирования + + + ru + Сформировать настройки тестирования + + + + NavigationPanelOrdinary + + Single + false + Auto + + + + Auto + + +
+
+
\ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Commands/ЗапускТестов/Ext/CommandModule.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Commands/ЗапускТестов/Ext/CommandModule.bsl new file mode 100644 index 0000000..1b635e3 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Commands/ЗапускТестов/Ext/CommandModule.bsl @@ -0,0 +1,35 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПараметрыОткрытия = Новый Структура("ЗагрузитьТесты", Истина); + + ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.Основная", + ПараметрыОткрытия, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно, + ПараметрыВыполненияКоманды.НавигационнаяСсылка); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Commands/СформироватьНастройкиТестирования/Ext/CommandModule.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Commands/СформироватьНастройкиТестирования/Ext/CommandModule.bsl new file mode 100644 index 0000000..1278ad3 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Commands/СформироватьНастройкиТестирования/Ext/CommandModule.bsl @@ -0,0 +1,33 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.СозданиеНастройки", + , + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно, + ПараметрыВыполненияКоманды.НавигационнаяСсылка); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная.xml new file mode 100644 index 0000000..2a3b9e3 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная.xml @@ -0,0 +1,22 @@ + + +
+ + Основная + + + ru + Основная + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная/Ext/Form.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная/Ext/Form.xml new file mode 100644 index 0000000..c3a0206 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная/Ext/Form.xml @@ -0,0 +1,929 @@ + +
+ Use + None + + + ПриОткрытии + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа1</v8:content> + </v8:item> + + Item.ДеревоТестов + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа1</v8:content> + </v8:item> + + Compact + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content> </v8:content> + </v8:item> + + + StdPicture.GenerateReport + true + + Text + + + + + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа1</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + Tree + None + true + false + false + false + 3 + false + false + true + AsFile + ДеревоТестов + ДеревоТестов.ТипОбъекта + + CommonPicture.ЮТЭлементыТестов + false + + None + None + + false + + + + + + + + + ДеревоТестов + SearchStringRepresentation + + + + + + + ДеревоТестов + ViewStatusRepresentation + + + + + + + ДеревоТестов + SearchControl + + + + + + ДеревоТестовПриАктивизацииСтроки + + + + ДеревоТестов.Представление + 10 + + + + + + ДеревоТестов.Контекст + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево тестов группа1</v8:content> + </v8:item> + + 30 + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево тестов группа состояние</v8:content> + </v8:item> + + InCell + + + + ДеревоТестов.Иконка + None + 5 + false + AsFile + + + + + ДеревоТестов.Состояние + + + + + + + ДеревоТестов.Прогресс + 2 + false + Stretch + AsFile + + + + + + + ДеревоТестов.ПредставлениеВремяВыполнения + 2 + + + + +
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа1</v8:content> + </v8:item> + + Vertical + Usual + None + false + + + + ФорматВыводаОшибки + Right + Tumbler + + + + ФорматВыводаОшибкиПриИзменении + + + + List + None + false + false + false + 2 + false + false + false + false + AsFile + Items.ДеревоТестов.CurrentData.Ошибки + style:FormBackColor + None + None + + + + + + + ДеревоТестовОшибки + SearchStringRepresentation + + + + + + + ДеревоТестовОшибки + ViewStatusRepresentation + + + + + + + ДеревоТестовОшибки + SearchControl + + + + + + + Items.ДеревоТестов.CurrentData.Ошибки.Сообщение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сообщения</v8:content> + </v8:item> + + + + + +
+ + Items.ДеревоТестовОшибки.CurrentData.Стек + false + None + true + false + false + style:FormBackColor + + + + + ОтображениеОшибки + None + style:FormBackColor + + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа1</v8:content> + </v8:item> + + true + Right + + + + + +
+
+
+
+ + false + false + + + + +
+ + + + cfg:DataProcessorObject.ЮТЮнитТесты + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево тестов</v8:content> + </v8:item> + + + v8:ValueTree + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Представление</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Состояние</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Время выполнения</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Иконка</v8:content> + </v8:item> + + + v8ui:Picture + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ошибки</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прогресс</v8:content> + </v8:item> + + + v8ui:Picture + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Набор</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контекст</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип объекта</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Время выполнения</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сообщение</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Стек</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ожидаемое значение</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фактическое значение</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Лог</v8:content> + </v8:item> + + + v8:ValueListType + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип ошибки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Адрес отчета</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить тесты при открытии</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отображение ошибки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Формат вывода ошибки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + true + + ФорматВыводаОшибки + + + + + + + ДеревоТестовПрогресс + + + + + ДеревоТестов.Набор + Equal + false + + + + + Видимость + false + + + + + ru + Скрытие колонок. Тест + + + + + + + ДеревоТестовИконка + + + ДеревоТестовСостояние + + + + + ДеревоТестов.Набор + Equal + true + + + + + Видимость + false + + + + + ru + Скрытие колонок. Набор + + + + + + + ДеревоТестовКонтекст + + + + + ДеревоТестов.Контекст + Equal + Сервер + + + + + ЦветТекста + #B46C00 + + + + + ru + Контекст. Сервер + + + + + + + ДеревоТестовКонтекст + + + + + ДеревоТестов.Контекст + Equal + Клиент + + + + + ЦветТекста + #058BC0 + + + + + ru + Контекст. Клиент + + + + + + + ДеревоТестовВремяВыполнения + + + + + OrGroup + + AndGroup + + ДеревоТестов.Набор + Equal + false + + + ДеревоТестов.ВремяВыполнения + Greater + 1000 + + + + AndGroup + + ДеревоТестов.Набор + Equal + true + + + ДеревоТестов.ВремяВыполнения + Greater + 10000 + + + + + + + ЦветТекста + #D2000F + + + + + ru + Время выполнения > 1 сек + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сравнить</v8:content> + </v8:item> + + + CommonPicture.ЮТСравнить + false + + Сравнить + TextPicture + Use + ДеревоТестовОшибки + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сформировать настройки</v8:content> + </v8:item> + + + StdPicture.ReportSettings + true + + СформироватьНастройки + TextPicture + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запустить все тесты</v8:content> + </v8:item> + + + CommonPicture.ЮТЗапустить + false + + ЗапуститьВсеТесты + TextPicture + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Замер времени выполнения</v8:content> + </v8:item> + + + StdPicture.BusinessProcessStart + true + + ЗамерВремениВыполнения + TextPicture + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбранные тесты</v8:content> + </v8:item> + + + CommonPicture.ЮТЗапустить + false + + ЗапуститьВыделенныеТесты + TextPicture + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перезапустить упавшие тесты</v8:content> + </v8:item> + + + CommonPicture.ЮТПерезапуститьУпавшие + false + + ПерезапуститьУпавшиеТесты + TextPicture + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная/Ext/Form/Module.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная/Ext/Form/Module.bsl new file mode 100644 index 0000000..be892c9 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Основная/Ext/Form/Module.bsl @@ -0,0 +1,986 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ИсполняемыеТестовыеМодули; + +&НаКлиенте +Перем ПараметрыЗапускаТестирования; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АдресХранилища") И ЭтоАдресВременногоХранилища(Параметры.АдресХранилища) Тогда + АдресОтчета = Параметры.АдресХранилища; + КонецЕсли; + + Параметры.Свойство("ЗагрузитьТесты", ЗагрузитьТестыПриОткрытии); + + Для Каждого Формат Из ФорматыВыводаОшибки() Цикл + Элементы.ФорматВыводаОшибки.СписокВыбора.Добавить(Формат.Ключ, Формат.Ключ); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ЗначениеЗаполнено(АдресОтчета) Тогда + ДанныеОтчета = ДанныеОтчета(АдресОтчета); + ПослеЗагрузкиТестов(ДанныеОтчета.РезультатыТестирования, ДанныеОтчета.ПараметрыЗапуска); + ИначеЕсли ЗагрузитьТестыПриОткрытии Тогда + ЗагрузитьТесты(); + КонецЕсли; + + ПереключитьВыводОшибки(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ФорматВыводаОшибкиПриИзменении(Элемент) + + ПереключитьВыводОшибки(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоТестов + +&НаКлиенте +Процедура ДеревоТестовПриАктивизацииСтроки(Элемент) + + Данные = Элементы.ДеревоТестов.ТекущиеДанные; + + Если Данные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Данные.Ошибки.Количество() Тогда + Элементы.ДеревоТестовОшибки.ТекущаяСтрока = Данные.Ошибки[0].ПолучитьИдентификатор(); + КонецЕсли; + + ОтобразитьДанныеОшибки(); + ОбновитьДоступностьСравнения(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Сравнить(Команда) + + Данные = ДанныеТекущейОшибки(); + + Если Данные = Неопределено ИЛИ ПустаяСтрока(Данные.ОжидаемоеЗначение) И ПустаяСтрока(Данные.ФактическоеЗначение) Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура("ОжидаемоеЗначение, ФактическоеЗначение", Данные.ОжидаемоеЗначение, Данные.ФактическоеЗначение); + + ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.Сравнение", ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура СформироватьНастройки(Команда) + + ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.СозданиеНастройки", , ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗамерВремениВыполнения(Команда) + + Обработчик = Новый ОписаниеОповещения("ПослеВодаКоличестваИтерацийЗамера", ЭтотОбъект); + ПоказатьВводЧисла(Обработчик, 100, "Укажите количество итераций замера", 3, 0); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьВсеТесты(Команда) + + ВыполнитьТестовыеМодули(ИсполняемыеТестовыеМодули); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерезапуститьУпавшиеТесты(Команда) + + СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста(); + Статусы = ЮТКоллекции.ЗначениеВМассиве(СтатусыИсполненияТеста.Ошибка, СтатусыИсполненияТеста.Сломан); + + Модули = МодулиСоответствующиеСтатусу(Статусы); + ВыполнитьТестовыеМодули(Модули); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьВыделенныеТесты(Команда) + + Модули = ВыделенныеТестовыеМодули(); + ВыполнитьТестовыеМодули(Модули); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ВыводОтчета + +&НаСервереБезКонтекста +Функция ДанныеОтчета(Знач АдресХранилища) + + Данные = ПолучитьИзВременногоХранилища(АдресХранилища); + УдалитьИзВременногоХранилища(АдресХранилища); + + Возврат Данные; + +КонецФункции + +&НаКлиенте +Процедура ОтобразитьРезультатТеста(СтрокаТеста, Тест, Набор) + + СтрокаТеста.Представление = Тест.Имя; + СтрокаТеста.Контекст = НормализоватьКонтекст(Набор.Режим); + СтрокаТеста.ПредставлениеВремяВыполнения = ЮТОбщий.ПредставлениеПродолжительности(Тест.Длительность); + СтрокаТеста.ВремяВыполнения = Тест.Длительность; + СтрокаТеста.Состояние = Тест.Статус; + СтрокаТеста.ТипОбъекта = 3; + СтрокаТеста.Иконка = КартинкаСтатуса(Тест.Статус); + + ЗаполнитьОшибки(СтрокаТеста, Тест); + +КонецПроцедуры + +&НаКлиенте +Функция ОбновитьСтатистикуНабора(СтрокаНабора) + + СтатистикаНабора = СтатистикаНабора(СтрокаНабора); + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + + Если СтатистикаНабора.Сломано Тогда + СтрокаНабора.Состояние = Статусы.Сломан; + ИначеЕсли СтатистикаНабора.Упало Тогда + СтрокаНабора.Состояние = Статусы.Ошибка; + ИначеЕсли СтатистикаНабора.Пропущено Тогда + СтрокаНабора.Состояние = Статусы.Пропущен; + ИначеЕсли СтатистикаНабора.Неизвестно Тогда + СтрокаНабора.Состояние = Статусы.Ошибка; + ИначеЕсли СтатистикаНабора.Ожидание Тогда + СтрокаНабора.Состояние = Статусы.Ожидание; + Иначе + СтрокаНабора.Состояние = Статусы.Успешно; + КонецЕсли; + + СтрокаНабора.Прогресс = ГрафическоеПредставлениеСтатистики(СтатистикаНабора); + СтрокаНабора.Иконка = КартинкаСтатуса(СтрокаНабора.Состояние); + + СтрокаНабора.ПредставлениеВремяВыполнения = ЮТОбщий.ПредставлениеПродолжительности(СтатистикаНабора.Продолжительность); + СтрокаНабора.ВремяВыполнения = СтатистикаНабора.Продолжительность; + + Возврат СтатистикаНабора; + +КонецФункции + +&НаКлиенте +Процедура ОбновитьОбщуюСтатистику(ОбновлятьСтатистикуНаборов) + + ОбщаяСтатистика = Статистика(); + + Для Каждого СтрокаНабора Из ДеревоТестов.ПолучитьЭлементы() Цикл + + Если ОбновлятьСтатистикуНаборов Тогда + СтатистикаНабора = ОбновитьСтатистикуНабора(СтрокаНабора); + Иначе + СтатистикаНабора = СтатистикаНабора(СтрокаНабора); + КонецЕсли; + + Для Каждого Элемент Из СтатистикаНабора Цикл + ЮТОбщий.Инкремент(ОбщаяСтатистика[Элемент.Ключ], Элемент.Значение); + КонецЦикла; + + КонецЦикла; + + Элементы.СтатистикаВыполнения.Заголовок = ПредставлениеСтатистики(ОбщаяСтатистика); + +КонецПроцедуры + +&НаКлиенте +Функция СтатистикаНабора(СтрокаНабора) + + СтатистикаНабора = Статистика(); + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + + Для Каждого СтрокаТеста Из СтрокаНабора.ПолучитьЭлементы() Цикл + + ИнкрементСтатистики(СтатистикаНабора, СтрокаТеста.Состояние, Статусы); + ЮТОбщий.Инкремент(СтатистикаНабора.Продолжительность, СтрокаТеста.ВремяВыполнения); + + КонецЦикла; + + Возврат СтатистикаНабора; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура ЗаполнитьОшибки(СтрокаДерева, ОписаниеОбъекта) + + СтрокаДерева.Ошибки.Очистить(); + Для Каждого Ошибка Из ОписаниеОбъекта.Ошибки Цикл + + СтрокаОшибки = СтрокаДерева.Ошибки.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаОшибки, Ошибка); + СтрокаОшибки.Лог.ЗагрузитьЗначения(Ошибка.Лог); + СтрокаОшибки.ОжидаемоеЗначение = ЮТКоллекции.ЗначениеСтруктуры(Ошибка, "ОжидаемоеЗначение"); + СтрокаОшибки.ФактическоеЗначение = ЮТКоллекции.ЗначениеСтруктуры(Ошибка, "ПроверяемоеЗначение"); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция Статистика() + + Статистика = Новый Структура(); + Статистика.Вставить("Всего", 0); + Статистика.Вставить("Успешно", 0); + Статистика.Вставить("Упало", 0); + Статистика.Вставить("Сломано", 0); + Статистика.Вставить("Пропущено", 0); + Статистика.Вставить("Ожидание", 0); + Статистика.Вставить("Неизвестно", 0); + Статистика.Вставить("Продолжительность", 0); + + Возврат Статистика; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НормализоватьКонтекст(Контекст) + + Если СтрНачинаетсяС(Контекст, "Клиент") Тогда + Возврат "Клиент"; + Иначе + Возврат Контекст; + КонецЕсли; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура ИнкрементСтатистики(Статистика, Статус, Знач Статусы = Неопределено) + + Если Статусы = Неопределено Тогда + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + КонецЕсли; + + ЮТОбщий.Инкремент(Статистика.Всего); + + Если Статус = Статусы.Успешно Тогда + + ЮТОбщий.Инкремент(Статистика.Успешно); + + ИначеЕсли Статус = Статусы.Сломан ИЛИ Статус = Статусы.НеРеализован Тогда + + ЮТОбщий.Инкремент(Статистика.Сломано); + + ИначеЕсли Статус = Статусы.Ошибка Тогда + + ЮТОбщий.Инкремент(Статистика.Упало); + + ИначеЕсли Статус = Статусы.Пропущен Тогда + + ЮТОбщий.Инкремент(Статистика.Пропущено); + + ИначеЕсли Статус = Статусы.Ожидание Тогда + + ЮТОбщий.Инкремент(Статистика.Ожидание); + + Иначе + + ЮТОбщий.Инкремент(Статистика.Неизвестно); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область Интерфейсное + +&НаСервереБезКонтекста +Функция КартинкаСтатуса(Статус) + + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + + Если Статус = Статусы.Успешно Тогда + + Возврат БиблиотекаКартинок.ЮТУспешно; + + ИначеЕсли Статус = Статусы.Сломан ИЛИ Статус = Статусы.НеРеализован Тогда + + Возврат БиблиотекаКартинок.ЮТОшибка; + + ИначеЕсли Статус = Статусы.Ошибка Тогда + + Возврат БиблиотекаКартинок.ЮТУпал; + + ИначеЕсли Статус = Статусы.Пропущен Тогда + + Возврат БиблиотекаКартинок.ЮТПропущен; + + Иначе + + Возврат БиблиотекаКартинок.ЮТНеизвестный; + + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПредставлениеСтатистики(Статистика) + + БлокиСтатистики = Новый Массив(); + Разделитель = "; "; + + БлокиСтатистики.Добавить(СтрШаблон("Тестов: %1/%2", Статистика.Всего - Статистика.Пропущено - Статистика.Ожидание, Статистика.Всего)); + + Если Статистика.Ожидание Тогда + БлокиСтатистики.Добавить(Разделитель); + БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТНеизвестный); + БлокиСтатистики.Добавить(" Ожидание: " + Статистика.Ожидание); + КонецЕсли; + + Если Статистика.Пропущено Тогда + БлокиСтатистики.Добавить(Разделитель); + БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТПропущен); + БлокиСтатистики.Добавить(" Пропущено: " + Статистика.Пропущено); + КонецЕсли; + + БлокиСтатистики.Добавить(Разделитель); + БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТУспешно); + БлокиСтатистики.Добавить(" Успешно: " + Статистика.Успешно); + + БлокиСтатистики.Добавить(Разделитель); + БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТОшибка); + БлокиСтатистики.Добавить(" Сломано: " + Статистика.Сломано); + + БлокиСтатистики.Добавить(Разделитель); + БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТУпал); + БлокиСтатистики.Добавить(" Упало: " + Статистика.Упало); + + Если Статистика.Неизвестно Тогда + БлокиСтатистики.Добавить(Разделитель); + БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТНеизвестный); + БлокиСтатистики.Добавить(" Неизвестно: " + Статистика.Неизвестно); + КонецЕсли; + + БлокиСтатистики.Добавить(Разделитель); + БлокиСтатистики.Добавить(" Время выполнения: " + ЮТОбщий.ПредставлениеПродолжительности(Статистика.Продолжительность)); + + Возврат Новый ФорматированнаяСтрока(БлокиСтатистики); + +КонецФункции + +&НаСервереБезКонтекста +Функция ГрафическоеПредставлениеСтатистики(Статистика) + + Текст = БлокиСтатистики(Статистика); + + Возврат Новый Картинка(ПолучитьДвоичныеДанныеИзСтроки(Текст)); + +КонецФункции + +&НаСервереБезКонтекста +Функция БлокиСтатистики(Статистика) + + Блоки = Новый Массив(); + Ключи = "Количество, Цвет"; + + Блоки.Добавить(Новый Структура(Ключи, Статистика.Успешно, "25AE88")); + Блоки.Добавить(Новый Структура(Ключи, Статистика.Пропущено, "999999")); + Блоки.Добавить(Новый Структура(Ключи, Статистика.Упало, "EFCE4A")); + Блоки.Добавить(Новый Структура(Ключи, Статистика.Сломано, "D75A4A")); + Блоки.Добавить(Новый Структура(Ключи, Статистика.Ожидание, "BBBBBB")); + Блоки.Добавить(Новый Структура(Ключи, Статистика.Неизвестно, "9400d3")); + + Сдвиг = 0; + Высота = 20; + + Текст = ""; + + Для Инд = 0 По Блоки.ВГраница() Цикл + + Если Блоки[Инд].Количество = 0 Тогда + Продолжить; + КонецЕсли; + + Текст = Текст + СтрШаблон(" + | %7 + |", Сдвиг + 2, Высота * 2 - 4, Высота - 4, Блоки[Инд].Цвет, Сдвиг + Высота, Высота - 4, Блоки[Инд].Количество); + ЮТОбщий.Инкремент(Сдвиг, Высота * 2 + 2); + + КонецЦикла; + + Возврат СтрШаблон(" + | %3 + |", Сдвиг, Высота + 2, Текст); + +КонецФункции + +#КонецОбласти + +#Область ЗагрузкаТестов + +&НаКлиенте +Процедура ЗагрузитьТесты() + + ПараметрыЗапуска = ПараметрыЗапуска(); + + ПараметрыЗагрузки = ЮТИсполнительСлужебныйКлиент.ПараметрыИсполнения(); + ПараметрыЗагрузки.Цепочка.Добавить(Новый ОписаниеОповещения("ПослеЗагрузкиТестов", ЭтотОбъект, ПараметрыЗапуска)); + ПараметрыЗагрузки.ПараметрыЗапуска = ПараметрыЗапуска; + + ЮТИсполнительСлужебныйКлиент.ВыполнитьИнициализацию(ПараметрыЗагрузки.ПараметрыЗапуска); + ЮТИсполнительСлужебныйКлиент.ОбработчикЗагрузитьТесты(Неопределено, ПараметрыЗагрузки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗагрузкиТестов(Результат, ПараметрыЗапуска) Экспорт + + ИсполняемыеТестовыеМодули = Результат; + ПараметрыЗапускаТестирования = ПараметрыЗапуска; + + Для Каждого ТестовыйМодуль Из ИсполняемыеТестовыеМодули Цикл + + Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл + + СтрокаНабора = ДеревоТестов.ПолучитьЭлементы().Добавить(); + СтрокаНабора.Набор = Истина; + СтрокаНабора.Представление = Набор.Представление; + СтрокаНабора.Контекст = НормализоватьКонтекст(Набор.Режим); + СтрокаНабора.ПредставлениеВремяВыполнения = ЮТОбщий.ПредставлениеПродолжительности(Набор.Длительность); + СтрокаНабора.ВремяВыполнения = Набор.Длительность; + СтрокаНабора.ТипОбъекта = 2; + + ЗаполнитьОшибки(СтрокаНабора, Набор); + + Набор.Вставить("Идентификатор", СтрокаНабора.ПолучитьИдентификатор()); + + Для Каждого Тест Из Набор.Тесты Цикл + + СтрокаТеста = СтрокаНабора.ПолучитьЭлементы().Добавить(); + + ОтобразитьРезультатТеста(СтрокаТеста, Тест, Набор); + + Тест.Вставить("Идентификатор", СтрокаТеста.ПолучитьИдентификатор()); + + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + ОбновитьОбщуюСтатистику(Истина); + + ЮТКонтекстСлужебный.УдалитьКонтекст(); + +КонецПроцедуры + +#КонецОбласти + +#Область ЗапускТестов + +&НаКлиенте +Процедура ВыполнитьТестовыеМодули(Модули) + + Если Модули.Количество() = 0 Тогда + ПоказатьПредупреждение( , "Нет тестов для запуска"); + Возврат; + КонецЕсли; + + ОповещениеПользователю("Прогон тестов", "Запушено выполнение тестов"); + + ЮТИсполнительСлужебныйКлиент.ВыполнитьИнициализацию(ПараметрыЗапускаТестирования); + ЮТСобытияСлужебный.ПослеФормированияИсполняемыхНаборовТестов(Модули); + ЮТСобытияСлужебный.ПередВыполнениемТестов(Модули); + + Для Каждого Модуль Из Модули Цикл + + СброситьСостояниеТестирования(Модуль); + + Результат = ЮТИсполнительСлужебныйКлиент.ВыполнитьТестыМодуля(Модуль); + + Для Каждого Набор Из Результат.НаборыТестов Цикл + + Для Каждого Тест Из Набор.Тесты Цикл + + Строка = ДеревоТестов.НайтиПоИдентификатору(Тест.Идентификатор); + ОтобразитьРезультатТеста(Строка, Тест, Набор); + + КонецЦикла; + + Строка = ДеревоТестов.НайтиПоИдентификатору(Набор.Идентификатор); + ОбновитьСтатистикуНабора(Строка); + + КонецЦикла; + + КонецЦикла; + + ОбновитьОбщуюСтатистику(Ложь); + + ЮТКонтекстСлужебный.УдалитьКонтекст(); + + ОповещениеПользователю("Прогон тестов завершен", "Завершено выполнение тестов"); + +КонецПроцедуры + +&НаКлиенте +Процедура СброситьСостояниеТестирования(Модуль) + + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + + Модуль.Ошибки.Очистить(); + + Для Каждого Набор Из Модуль.НаборыТестов Цикл + Набор.Ошибки.Очистить(); + Набор.Выполнять = Истина; + + Для Каждого Тест Из Набор.Тесты Цикл + Тест.Ошибки.Очистить(); + Тест.Статус = Статусы.Ожидание; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция ВыделенныеТестовыеМодули() + + МодулиКЗапуску = Новый Массив(); + + ВыделенныеСтроки = Элементы.ДеревоТестов.ВыделенныеСтроки; + + Если ВыделенныеСтроки.Количество() = 0 Тогда + Возврат МодулиКЗапуску; + КонецЕсли; + + Для Каждого Модуль Из ИсполняемыеТестовыеМодули Цикл + + НаборыКЗапуску = Новый Массив(); + + Для Каждого Набор Из Модуль.НаборыТестов Цикл + + Если ВыделенныеСтроки.Найти(Набор.Идентификатор) <> Неопределено Тогда + НаборыКЗапуску.Добавить(Набор); + Продолжить; + КонецЕсли; + + ТестыКЗапуску = Новый Массив(); + + Для Каждого Тест Из Набор.Тесты Цикл + Если ВыделенныеСтроки.Найти(Тест.Идентификатор) <> Неопределено Тогда + ТестыКЗапуску.Добавить(Тест); + КонецЕсли; + КонецЦикла; + + Если ТестыКЗапуску.Количество() Тогда + ЗапускаемыйНабор = ЮТКоллекции.СкопироватьСтруктуру(Набор); + ЗапускаемыйНабор.Тесты = ТестыКЗапуску; + НаборыКЗапуску.Добавить(ЗапускаемыйНабор); + КонецЕсли; + + КонецЦикла; + + Если НаборыКЗапуску.Количество() Тогда + + ЗапускаемыйМодуль = ЮТКоллекции.СкопироватьСтруктуру(Модуль); + ЗапускаемыйМодуль.НаборыТестов = НаборыКЗапуску; + МодулиКЗапуску.Добавить(ЗапускаемыйМодуль); + + КонецЕсли; + + КонецЦикла; + + Возврат МодулиКЗапуску; + +КонецФункции + +&НаКлиенте +Функция МодулиСоответствующиеСтатусу(Статусы) + + МодулиКЗапуску = Новый Массив(); + + Для Каждого Модуль Из ИсполняемыеТестовыеМодули Цикл + + НаборыКЗапуску = Новый Массив(); + + Для Каждого Набор Из Модуль.НаборыТестов Цикл + + ТестыКЗапуску = Новый Массив(); + + Для Каждого Тест Из Набор.Тесты Цикл + Если Статусы.Найти(Тест.Статус) <> Неопределено Тогда + ТестыКЗапуску.Добавить(Тест); + КонецЕсли; + КонецЦикла; + + Если ТестыКЗапуску.Количество() Тогда + ЗапускаемыйНабор = ЮТКоллекции.СкопироватьСтруктуру(Набор); + ЗапускаемыйНабор.Тесты = ТестыКЗапуску; + НаборыКЗапуску.Добавить(ЗапускаемыйНабор); + КонецЕсли; + + КонецЦикла; + + Если НаборыКЗапуску.Количество() Тогда + + ЗапускаемыйМодуль = ЮТКоллекции.СкопироватьСтруктуру(Модуль); + ЗапускаемыйМодуль.НаборыТестов = НаборыКЗапуску; + МодулиКЗапуску.Добавить(ЗапускаемыйМодуль); + + КонецЕсли; + + КонецЦикла; + + Возврат МодулиКЗапуску; + +КонецФункции + +&НаКлиенте +Процедура ВыполнитьЗапускТестовПоПараметрам(ПараметрыЗапуска, Обработчик) + + ЮТИсполнительСлужебныйКлиент.ВыполнитьМодульноеТестированиеПоНастройке(ПараметрыЗапуска, Обработчик); + +КонецПроцедуры + +#КонецОбласти + +#Область ПараметрыЗапуска + +&НаКлиенте +Функция ПараметрыЗапуска() + + ПараметрыЗапуска = ЮТФабрика.ПараметрыЗапуска(); + ПараметрыЗапуска.closeAfterTests = Ложь; + ПараметрыЗапуска.showReport = Ложь; + ПараметрыЗапуска.ВыполнятьМодульноеТестирование = Истина; + + Возврат ПараметрыЗапуска; + +КонецФункции + +#КонецОбласти + +&НаКлиенте +Процедура ОбновитьДоступностьСравнения() + + Данные = ДанныеТекущейОшибки();; + Элементы.Сравнить.Доступность = Данные <> Неопределено И (НЕ ПустаяСтрока(Данные.ОжидаемоеЗначение) ИЛИ НЕ ПустаяСтрока(Данные.ФактическоеЗначение)); + +КонецПроцедуры + +&НаКлиенте +Функция ДанныеТекущейОшибки() + + Данные = Элементы.ДеревоТестовОшибки.ТекущиеДанные; + + Если Данные <> Неопределено Или ФорматВыводаОшибки = ФорматыВыводаОшибки().Текст Тогда + Возврат Данные; + КонецЕсли; + + ДанныеТеста = Элементы.ДеревоТестов.ТекущиеДанные; + + Если ДанныеТеста <> Неопределено И ЗначениеЗаполнено(ДанныеТеста.Ошибки) Тогда + Возврат ДанныеТеста.Ошибки[0]; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Процедура ПослеВодаКоличестваИтерацийЗамера(Результат, ДополнительныеПараметры) Экспорт + + Если НЕ ЗначениеЗаполнено(Результат) Тогда + Возврат; + КонецЕсли; + + ПараметрыЗамера = Новый Структура(); + ПараметрыЗамера.Вставить("ПараметрыЗапуска", ПараметрыЗапуска()); + ПараметрыЗамера.Вставить("КоличествоИтераций", Результат); + ПараметрыЗамера.Вставить("ТекущаяИтерация", 0); + ПараметрыЗамера.Вставить("Замеры", Новый Массив()); + ПараметрыЗамера.Вставить("НачалоИтерации"); + + ПослеВыполненияИтерации(Неопределено, ПараметрыЗамера); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыполненияИтерации(Результат, ПараметрыЗамера) Экспорт + + Если ПараметрыЗамера.ТекущаяИтерация > 0 Тогда + Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - ПараметрыЗамера.НачалоИтерации; + ПараметрыЗамера.Замеры.Добавить(Длительность); + КонецЕсли; + + Если ЮТОбщий.Инкремент(ПараметрыЗамера.ТекущаяИтерация) <= ПараметрыЗамера.КоличествоИтераций Тогда + + Обработчик = Новый ОписаниеОповещения("ПослеВыполненияИтерации", ЭтотОбъект, ПараметрыЗамера); + ПараметрыЗамера.НачалоИтерации = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ВыполнитьЗапускТестовПоПараметрам(ПараметрыЗамера.ПараметрыЗапуска, Обработчик); + + Иначе + + ОбщееВремя = 0; + Для Каждого Замер Из ПараметрыЗамера.Замеры Цикл + ЮТОбщий.Инкремент(ОбщееВремя, Замер); + КонецЦикла; + + Список = Новый СписокЗначений(); + Список.ЗагрузитьЗначения(ПараметрыЗамера.Замеры); + Список.СортироватьПоЗначению(); + + ОбщееВремя = Окр(ОбщееВремя / 1000, 2); + СреднееВремя = Окр(ОбщееВремя / ПараметрыЗамера.Замеры.Количество(), 2); + МедианноеВремя = Окр(Список[Цел(Список.Количество() / 2) + 1].Значение / 1000, 2); + + Сообщение = СтрШаблон("Количество итераций: %1 + |Общее время: %2 сек + |Среднее время: %3 сек + |Медианное время: %4 сек", ПараметрыЗамера.Замеры.Количество(), ОбщееВремя, СреднееВремя, МедианноеВремя); + + ЮТОбщий.СообщитьПользователю(Сообщение); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОповещениеПользователю(Текст, Пояснение) + + ПоказатьОповещениеПользователя(Текст, + , + Пояснение, + БиблиотекаКартинок.ЮТПодсистема, + СтатусОповещенияПользователя.Важное, + УникальныйИдентификатор); + +КонецПроцедуры + +#Область ВыводОшибки + +&НаКлиенте +Процедура ПереключитьВыводОшибки() + + Форматы = ФорматыВыводаОшибки(); + Если НЕ ЗначениеЗаполнено(ФорматВыводаОшибки) Тогда + ФорматВыводаОшибки = Форматы.HTML; + КонецЕсли; + + Элементы.ДеревоТестовОшибки.Видимость = ФорматВыводаОшибки = Форматы.Текст; + Элементы.ДеревоТестовОшибкиСтек.Видимость = ФорматВыводаОшибки = Форматы.Текст; + Элементы.ОтображениеОшибки.Видимость = ФорматВыводаОшибки = Форматы.HTML; + + Если ФорматВыводаОшибки = Форматы.HTML Тогда + ОтобразитьДанныеОшибки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ФорматыВыводаОшибки() + + Форматы = Новый Структура(); + Форматы.Вставить("Текст", "Текст"); + Форматы.Вставить("HTML", "HTML"); + + Возврат Форматы; + +КонецФункции + +&НаКлиенте +Процедура ОтобразитьДанныеОшибки(); + + ДанныеТеста = Элементы.ДеревоТестов.ТекущиеДанные; + Если ДанныеТеста = Неопределено Или НЕ ЗначениеЗаполнено(ДанныеТеста.Ошибки) Тогда + Если ЭтоАдресВременногоХранилища(ОтображениеОшибки) Тогда + УдалитьИзВременногоХранилища(ОтображениеОшибки); + КонецЕсли; + ОтображениеОшибки = Неопределено; + Возврат; + КонецЕсли; + + ОтображениеОшибки = ДеревоОшибкиHTML(ОтображениеОшибки, ДанныеТеста.Ошибки); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДеревоОшибкиHTML(Знач АдресХранилища, Знач Ошибки) + + Если ЭтоАдресВременногоХранилища(АдресХранилища) Тогда + УдалитьИзВременногоХранилища(АдресХранилища); + КонецЕсли; + + Блоки = Новый Массив(); + + Для Каждого Ошибка Из Ошибки Цикл + ВывестиДанныеОшибки(Блоки, Ошибка); + КонецЦикла; + + ШаблонПредставленияОшибки = ЮТОбщий.Макет("ОбщийМакет.ЮТИнформацияОбОшибке").ПолучитьТекст(); + ПредставленияОшибки = СтрЗаменить(ШаблонПредставленияОшибки, "TREE_CONTENT", СтрСоединить(Блоки, Символы.ПС)); + + Возврат ПолучитьНавигационнуюСсылкуИнформационнойБазы() + "/"+ ПоместитьВоВременноеХранилище(ПредставленияОшибки, Новый УникальныйИдентификатор); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ВывестиДанныеОшибки(Блоки, Ошибка) + + ТипыОшибок = ЮТФабрикаСлужебный.ТипыОшибок(); + Если Ошибка.ТипОшибки = ТипыОшибок.Утверждений Тогда + Класс = "failure"; + ИначеЕсли Ошибка.ТипОшибки = ТипыОшибок.Пропущен Тогда + Класс = "skipped"; + Иначе + Класс = "error"; + КонецЕсли; + + Блоки.Добавить(СтрШаблон("
+ |
+ | + | + |
%2
+ |
+ |", Класс, ЗаменитьСпецСимволы(Ошибка.Сообщение))); + Если ЗначениеЗаполнено(Ошибка.Лог) Или ЗначениеЗаполнено(Ошибка.Стек) Тогда + Блоки.Добавить("
"); + ВывестиЛог(Блоки, Ошибка.Лог); + ВывестиСтек(Блоки, Ошибка.Стек, Класс); + Блоки.Добавить("
"); + КонецЕсли; + Блоки.Добавить("
"); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ВывестиЛог(Блоки, Лог) + + Если НЕ ЗначениеЗаполнено(Лог) Тогда + Возврат; + КонецЕсли; + + Блоки.Добавить("
+ | Лог исполнения + |
"); + Для Каждого Строка Из Лог Цикл + Блоки.Добавить(СтрШаблон("
%1
", ЗаменитьСпецСимволы(Строка))); + КонецЦикла; + Блоки.Добавить("
"); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ВывестиСтек(Блоки, ПредставлениеСтека, Класс) + + Если НЕ ЗначениеЗаполнено(ПредставлениеСтека) Тогда + Возврат; + КонецЕсли; + + Стек = Стек(ПредставлениеСтека); + + Блоки.Добавить(СтрШаблон("
+ |
+ | + | + |
%2
+ |
+ |
+ |", Класс, ЗаменитьСпецСимволы(Стек.Сообщение))); + + Для Каждого Линия Из Стек.Линии Цикл + Блоки.Добавить(СтрШаблон("
+ |
%1
+ |
+ |", ЗаменитьСпецСимволы(Линия))); + КонецЦикла; + + Блоки.Добавить("
"); + +КонецПроцедуры +&НаСервереБезКонтекста +Функция ЗаменитьСпецСимволы(Знач Стр) + + Стр = СтрЗаменить(Стр, "&", "&"); + Стр = СтрЗаменить(Стр, """", """); + Стр = СтрЗаменить(Стр, "<", "<"); + Стр = СтрЗаменить(Стр, ">", ">"); + Стр = СтрЗаменить(Стр, "‘", "'"); + + Возврат СокрЛП(Стр); + +КонецФункции + +&НаСервереБезКонтекста +Функция Стек(Стек) + + Разделитель = Символы.ПС; + Строки = СтрРазделить(Стек, Разделитель); + + Корень = Новый Структура("Сообщение, Линии", Неопределено, Новый Массив()); + + Для Инд = 0 По Строки.ВГраница() Цикл + + Строка = Строки[Инд]; + Если СтрНачинаетсяС(Строка, "{") И СтрНайти(Строка, ")}") Тогда + НомерСтроки = Инд; + Прервать; + КонецЕсли; + + Корень.Сообщение = ЮТСтроки.ДобавитьСтроку(Корень.Сообщение, Строка, Разделитель); + КонецЦикла; + + Для Инд = НомерСтроки По Строки.ВГраница() Цикл + Строка = Строки[Инд]; + Если СтрНачинаетсяС(Строка, "{") И СтрНайти(Строка, ")}") Тогда + Корень.Линии.Добавить(Строка); + КонецЕсли; + КонецЦикла; + + Возврат Корень; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки.xml new file mode 100644 index 0000000..a4086d6 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки.xml @@ -0,0 +1,22 @@ + + +
+ + СозданиеНастройки + + + ru + Создание настройки + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки/Ext/Form.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки/Ext/Form.xml new file mode 100644 index 0000000..7437c5c --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки/Ext/Form.xml @@ -0,0 +1,577 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конфигурация запуска тестов</v8:content> + </v8:item> + + Use + false + false + None + + + ПриОткрытии + ПриСозданииНаСервере + + + + Tree + false + false +
false
+ AsFile + ДеревоТестов + ДеревоТестов.ТипОбъекта + + CommonPicture.ЮТЭлементыТестов + false + + + + + + + + + + + + + ДеревоТестов + SearchStringRepresentation + + + + + + + ДеревоТестов + ViewStatusRepresentation + + + + + + + ДеревоТестов + SearchControl + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево тестов группа1</v8:content> + </v8:item> + + InCell + + + + ДеревоТестов.Отметка + None + true + + + + ДеревоТестовОтметкаПриИзменении + + + + ДеревоТестов.Представление + + + + + + +
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры запуска</v8:content> + </v8:item> + + Vertical + Usual + NormalSeparation + + + + ФайлКонфигурации + false + true + true + true + + + + ФайлКонфигурацииПриИзменении + ФайлКонфигурацииНачалоВыбора + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет по результатам тестирования</v8:content> + </v8:item> + + Vertical + Usual + Use + + + + ОтобразитьОтчет + Auto + + + + + ФорматОтчета + Tumbler + + + + + ИмяФайлаОтчета + false + true + true + + + + ИмяФайлаОтчетаНачалоВыбора + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа параметры запуска строка1</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Логирование</v8:content> + </v8:item> + + Vertical + Usual + Use + + + + УровеньЛога + true + + + + + ИмяФайлаЛога + false + false + true + true + + + + ВыводЛогаНачалоВыбора + + + + ЛогированиеВКонсоль + Auto + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочее</v8:content> + </v8:item> + + Vertical + Usual + + + + ЗакрытьПослеТестирования + Auto + + + + + ИмяФайлаКодаВозврата + + + ru + В файл будет записан статус тестирования. 0 - тестирование завершилось успешно, отличное от 0 - были ошибки. + + + ShowBottom + false + true + true + + + + ИмяФайлаКодаВозвратаНачалоВыбора + + + + + + + + Usual + None + false + + + + ЗапускИзКонфигуратор + None + Tumbler + + + ru + БЛ='Строка запуска предприятия'; БИ='Запуск из конфигуратора' + + + + + + ЗапускИзПредприятияПриИзменении + + + + ПараметрыЗапуска + None + false + + + + + + + +
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево тестов</v8:content> + </v8:item> + + + v8:ValueTree + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Представление</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип объекта</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отметка</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Any + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Файл конфигурации запуска</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + ФайлКонфигурации + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры запуска</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запуск из конифгуратор</v8:content> + </v8:item> + + + xs:boolean + + + ЗапускИзКонфигуратор + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Логирование в файл</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + ИмяФайлаЛога + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показать отчет после выполнения тестов</v8:content> + </v8:item> + + + xs:boolean + + + ОтобразитьОтчет + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код возврата</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + ИмяФайлаКодаВозврата + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сохранить отчет в</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + ИмяФайлаОтчета + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Логирование в консоль</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Формат отчета</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень лога</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Закрыть 1С:Предприятие по окончанию тестирования</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установить флажки</v8:content> + </v8:item> + + + StdPicture.CheckAll + true + + УстановитьФлажки + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Снять флажки</v8:content> + </v8:item> + + + StdPicture.UncheckAll + true + + СнятьФлажки + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сохранить параметры</v8:content> + </v8:item> + + СохранитьПараметры + DontUse + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки/Ext/Form/Module.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки/Ext/Form/Module.bsl new file mode 100644 index 0000000..8cdbd97 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/СозданиеНастройки/Ext/Form/Module.bsl @@ -0,0 +1,587 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ОписаниеПеременных +&НаКлиенте +Перем ПоддерживаемыеФорматыОтчетов; +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Для Каждого УровеньЛог Из ЮТЛогирование.УровниЛога() Цикл + Элементы.УровеньЛога.СписокВыбора.Добавить(УровеньЛог.Значение, УровеньЛог.Ключ); + КонецЦикла; + + Конфигурация = ЮТФабрика.ПараметрыЗапуска(); + ФорматОтчета = Конфигурация.reportFormat; + УровеньЛога = Конфигурация.logging.level; + ОтобразитьОтчет = Конфигурация.showReport; + ЗакрытьПослеТестирования = Конфигурация.closeAfterTests; + ЛогированиеВКонсоль = Конфигурация.logging.console ; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ЗаполнитьДеревоТестов(); + + ПоддерживаемыеФорматыОтчетов = ЮТОтчетСлужебный.ПоддерживаемыеФорматыОтчетов(); + Для Каждого Формат Из ПоддерживаемыеФорматыОтчетов Цикл + Элементы.ФорматОтчета.СписокВыбора.Добавить(Формат.Ключ, Формат.Значение.Представление); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ФайлКонфигурацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыбратьФайл("*.json|*.json", ФайлКонфигурации, Новый ОписаниеОповещения("УстановитьФайлКонфигурации", ЭтотОбъект)); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапускИзПредприятияПриИзменении(Элемент) + + ОбновитьСтрокуЗапуска(); + +КонецПроцедуры + +&НаКлиенте +Процедура ФайлКонфигурацииПриИзменении(Элемент) + + ОбновитьСтрокуЗапуска(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыводЛогаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыбратьФайл("*.log|*.log|*.txt|*.txt|All files(*.*)|*.*", ИмяФайлаЛога, Новый ОписаниеОповещения("УстановитьИмяФайлаЛога", ЭтотОбъект)); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаКодаВозвратаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыбратьФайл("All files(*.*)|*.*", ИмяФайлаЛога, Новый ОписаниеОповещения("УстановитьИмяФайлаКодаВозврата", ЭтотОбъект)); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаОтчетаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОписаниеФормата = Неопределено; + Если НЕ ПоддерживаемыеФорматыОтчетов.Свойство(ФорматОтчета, ОписаниеФормата) Тогда + ПоказатьПредупреждение(, "Сначала укажите формат отчета"); + Возврат; + КонецЕсли; + + Если ОписаниеФормата.ЗаписьВКаталог Тогда + ВыбратьКаталог(ИмяФайлаОтчета, Новый ОписаниеОповещения("УстановитьИмяФайлаОтчета", ЭтотОбъект)); + Иначе + ВыбратьФайл(ОписаниеФормата.ФильтрВыбораФайла, ИмяФайлаОтчета, Новый ОписаниеОповещения("УстановитьИмяФайлаОтчета", ЭтотОбъект)); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоТестов + +&НаКлиенте +Процедура ДеревоТестовОтметкаПриИзменении(Элемент) + + Данные = Элементы.ДеревоТестов.ТекущиеДанные; + + Если Данные.Отметка = 2 Тогда + Данные.Отметка = 0; + КонецЕсли; + + УстановитьРекурсивноЗначение(Данные.ПолучитьЭлементы(), Данные.Отметка); + ОбновитьОтметкиРодителей(Данные); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СнятьФлажки(Команда) + + УстановитьРекурсивноЗначение(ДеревоТестов.ПолучитьЭлементы(), 0); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажки(Команда) + + УстановитьРекурсивноЗначение(ДеревоТестов.ПолучитьЭлементы(), 1); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьПараметры(Команда) + + Если НЕ ЕстьОтмеченныеТесты() Тогда + ПоказатьПредупреждение(, "Отметьте тесты, которые должны выполниться"); + Возврат; + КонецЕсли; + + Если ПустаяСтрока(ФайлКонфигурации) Тогда + Обработчик = Новый ОписаниеОповещения("СохранитьПараметрыПослеВыбораФайла", ЭтотОбъект); + ВыбратьФайл("*.json|*.json", ФайлКонфигурации, Обработчик); + Иначе + СохранитьПараметрыПослеВыбораФайла(ФайлКонфигурации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ЗаполнитьДеревоТестов() + + ЮТКонтекстСлужебный.ИнициализироватьКонтекст(); + ТестовыеМодули = ЮТЧитательСлужебный.ЗагрузитьТесты(Новый Структура("filter", Новый Структура)); + ЮТКонтекстСлужебный.УдалитьКонтекст(); + + СтрокиРасширений = Новый Соответствие(); + + Для Каждого ОписаниеМодуля Из ТестовыеМодули Цикл + + ИмяРасширения = ОписаниеМодуля.МетаданныеМодуля.Расширение; + + СтрокаРасширения = СтрокиРасширений[ИмяРасширения]; + Если СтрокаРасширения = Неопределено Тогда + СтрокаРасширения = ДобавитьСтрокуРасширения(ДеревоТестов, ИмяРасширения); + СтрокиРасширений.Вставить(ИмяРасширения, СтрокаРасширения); + КонецЕсли; + + СтрокаМодуля = ДобавитьСтрокуМодуля(СтрокаРасширения, ОписаниеМодуля.МетаданныеМодуля); + + Если ОписаниеМодуля.НаборыТестов.Количество() = 1 Тогда + + Для Каждого Тест Из ОписаниеМодуля.НаборыТестов[0].Тесты Цикл + + ДобавитьСтрокуТеста(СтрокаМодуля, Тест); + + КонецЦикла; + + Иначе + + Для Каждого Набор Из ОписаниеМодуля.НаборыТестов Цикл + + СтрокаНабора = ДобавитьСтрокуНабора(СтрокаМодуля, Набор); + + Для Каждого Тест Из Набор.Тесты Цикл + + ДобавитьСтрокуТеста(СтрокаНабора, Тест); + + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ДобавитьСтрокуРасширения(Владелец, ИмяРасширения) + + Строка = Владелец.ПолучитьЭлементы().Добавить(); + Строка.Идентификатор = ИмяРасширения; + Строка.Представление = ИмяРасширения; + Строка.ТипОбъекта = 0; + + Возврат Строка; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ДобавитьСтрокуМодуля(Владелец, МетаданныеМодуля) + + Строка = Владелец.ПолучитьЭлементы().Добавить(); + Строка.Идентификатор = МетаданныеМодуля.Имя; + Строка.Представление = МетаданныеМодуля.Имя; + Строка.ТипОбъекта = 1; + + Возврат Строка; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ДобавитьСтрокуНабора(Владелец, Набор) + + Строка = Владелец.ПолучитьЭлементы().Добавить(); + Строка.Идентификатор = Набор.Имя; + Строка.Представление = Набор.Представление; + Строка.ТипОбъекта = 2; + + Возврат Строка; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ДобавитьСтрокуТеста(Владелец, Тест) + + Представление = ЮТФабрикаСлужебный.ПредставлениеТеста(Тест); + + Если Владелец.ТипОбъекта = 1 Тогда + СтрокаМодуля = Владелец; + Иначе + СтрокаМодуля = Владелец.ПолучитьРодителя(); + КонецЕсли; + + Строка = Владелец.ПолучитьЭлементы().Добавить(); + Строка.Идентификатор = СтрШаблон("%1.%2", СтрокаМодуля.Идентификатор, Тест.Имя); + Строка.Представление = СтрШаблон("%1, %2", Представление, СтрСоединить(Тест.КонтекстВызова, ", ")); + Строка.ТипОбъекта = 3; + + Возврат Строка; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьРекурсивноЗначение(Элементы, Значение, Колонка = "Отметка") + + Для Каждого Элемент Из Элементы Цикл + + Элемент[Колонка] = Значение; + + Если ЗначениеЗаполнено(Элемент.ПолучитьЭлементы()) Тогда + УстановитьРекурсивноЗначение(Элемент.ПолучитьЭлементы(), Значение, Колонка); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьОтметкиРодителей(Элемент) + + Родитель = Элемент.ПолучитьРодителя(); + + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ЕстьСОтметкой = Ложь; + ЕстьБезОтметки = Ложь; + + Для Каждого Элемент Из Родитель.ПолучитьЭлементы() Цикл + + Если Элемент.Отметка = 0 Тогда + ЕстьБезОтметки = Истина; + ИначеЕсли Элемент.Отметка = 1 Тогда + ЕстьСОтметкой = Истина; + ИначеЕсли Элемент.Отметка = 2 Тогда + ЕстьБезОтметки = Истина; + ЕстьСОтметкой = Истина; + КонецЕсли; + + Если ЕстьБезОтметки И ЕстьСОтметкой Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ЕстьСОтметкой И ЕстьБезОтметки Тогда + НоваяОтметка = 2; + ИначеЕсли ЕстьСОтметкой Тогда + НоваяОтметка = 1; + Иначе + НоваяОтметка = 0; + КонецЕсли; + + Если Родитель.Отметка = НоваяОтметка Тогда + Возврат; + КонецЕсли; + + Родитель.Отметка = НоваяОтметка; + ОбновитьОтметкиРодителей(Родитель); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСтрокуЗапуска() + + ПараметрыЗапускаЮнитТестов = СтрШаблон("%1=%2", ЮТПараметрыЗапускаСлужебный.КлючЗапуска(), ФайлКонфигурации); + + Если ЗапускИзКонфигуратор Тогда + + ПараметрыЗапуска = ПараметрыЗапускаЮнитТестов; + + Иначе + +#Если ВебКлиент Тогда + ВызватьИсключение "Формирование строки запуска для веб-клиенте не поддерживается"; +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; +#Если ТонкийКлиент Тогда + Файл = "1cv8c"; +#Иначе + Файл = "1cv8"; +#КонецЕсли + ПутьЗапускаемогоКлиента = ЮТФайлы.ОбъединитьПути(КаталогПрограммы(), Файл); + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + ПутьЗапускаемогоКлиента = ПутьЗапускаемогоКлиента + ".exe"; + КонецЕсли; + + Если ЗначениеЗаполнено(ИмяПользователя()) Тогда + Пользователь = СтрШаблон("/N""%1""", ИмяПользователя()); + Иначе + Пользователь = ""; + КонецЕсли; + + ПараметрыЗапуска = СтрШаблон("""%1"" %2 /IBConnectionString ""%3"" /C""%4""", + ПутьЗапускаемогоКлиента, + Пользователь, + СтрЗаменить(СтрокаСоединенияИнформационнойБазы(), """", """"""), + ПараметрыЗапускаЮнитТестов); +#КонецЕсли + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьПараметрыПослеВыбораФайла(ВыбранныйФайл, ДополнительныеПараметры = Неопределено) Экспорт + + ФайлКонфигурации = ВыбранныйФайл; + ОбновитьСтрокуЗапуска(); + СохранитьКонфигурациюЗапуска(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФайлКонфигурации(ВыбранныйФайл, ДополнительныеПараметры) Экспорт + + Если ВыбранныйФайл <> Неопределено Тогда + ФайлКонфигурации = ВыбранныйФайл; + ОбновитьСтрокуЗапуска(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьИмяФайлаЛога(ВыбранныйФайл, ДополнительныеПараметры) Экспорт + + Если ВыбранныйФайл <> Неопределено Тогда + ИмяФайлаЛога = ВыбранныйФайл; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьИмяФайлаКодаВозврата(ВыбранныйФайл, ДополнительныеПараметры) Экспорт + + Если ВыбранныйФайл <> Неопределено Тогда + ИмяФайлаКодаВозврата = ВыбранныйФайл; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьИмяФайлаОтчета(ВыбранныйФайл, ДополнительныеПараметры) Экспорт + + Если ВыбранныйФайл <> Неопределено Тогда + ИмяФайлаОтчета = ВыбранныйФайл; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьФайл(Фильтр, ИмяФайла, Оповещение) + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогВыбораФайла.Фильтр = Фильтр; + ДиалогВыбораФайла.МножественныйВыбор = Ложь; + ДиалогВыбораФайла.ПолноеИмяФайла = ИмяФайла; + + ПараметрыОбработчика = Новый Структура("Оповещение", Оповещение); + Обработчик = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект, ПараметрыОбработчика); + ДиалогВыбораФайла.Показать(Обработчик); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьКаталог(ИмяФайла, Оповещение) + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогВыбораФайла.МножественныйВыбор = Ложь; + ДиалогВыбораФайла.ПолноеИмяФайла = ИмяФайла; + + ПараметрыОбработчика = Новый Структура("Оповещение", Оповещение); + Обработчик = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект, ПараметрыОбработчика); + ДиалогВыбораФайла.Показать(Обработчик); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, ВыбранныеФайлы[0]); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьКонфигурациюЗапуска() + +#Если ВебКлиент Тогда + ВызватьИсключение "Сохранение конфигурации из веб-клиента не поддерживается"; +#Иначе + Конфигурация = ЮТФабрика.ПараметрыЗапуска(); + Конфигурация.Удалить("ВыполнятьМодульноеТестирование"); + + Конфигурация.showReport = ОтобразитьОтчет; + Конфигурация.closeAfterTests = ЗакрытьПослеТестирования; + Конфигурация.reportFormat = ФорматОтчета; + Конфигурация.reportPath = ИмяФайлаОтчета; + + Конфигурация.logging.level = УровеньЛога; + Конфигурация.logging.file = ИмяФайлаЛога; + Конфигурация.logging.console = ЛогированиеВКонсоль; + + Если ЗначениеЗаполнено(ИмяФайлаКодаВозврата) Тогда + Конфигурация.exitCode = ИмяФайлаКодаВозврата; + КонецЕсли; + + Если НЕ (УстановленФильтрПоРасширению(Конфигурация) ИЛИ УстановленФильтрПоМодулям(Конфигурация)) Тогда + УстановитьФильтрПоТестам(Конфигурация); + КонецЕсли; + + Запись = Новый ЗаписьJSON(); + СимволыОтступа = " "; + ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, СимволыОтступа); + Запись.ОткрытьФайл(ФайлКонфигурации, , , ПараметрыЗаписи); + ЗаписатьJSON(Запись, Конфигурация); + Запись.Закрыть(); +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Функция ЕстьОтмеченныеТесты() + + Для Каждого СтрокаРасширения Из ДеревоТестов.ПолучитьЭлементы() Цикл + Если СтрокаРасширения.Отметка > 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +&НаКлиенте +Функция УстановленФильтрПоРасширению(Конфигурация) + + Расширения = Новый Массив(); + Для Каждого СтрокаРасширения Из ДеревоТестов.ПолучитьЭлементы() Цикл + + Если СтрокаРасширения.Отметка = 2 Тогда + Возврат Ложь; + ИначеЕсли СтрокаРасширения.Отметка = 1 Тогда + Расширения.Добавить(СтрокаРасширения.Идентификатор); + КонецЕсли; + + КонецЦикла; + + Если Расширения.Количество() Тогда + Конфигурация.filter.extensions = Расширения; + КонецЕсли; + + Возврат Расширения.Количество() > 0; + +КонецФункции + +&НаКлиенте +Функция УстановленФильтрПоМодулям(Конфигурация) + + Модули = Новый Массив(); + + Для Каждого СтрокаРасширения Из ДеревоТестов.ПолучитьЭлементы() Цикл + + Если СтрокаРасширения.Отметка = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого СтрокаМодуля Из СтрокаРасширения.ПолучитьЭлементы() Цикл + + Если СтрокаМодуля.Отметка = 2 Тогда + Возврат Ложь; + ИначеЕсли СтрокаМодуля.Отметка = 1 Тогда + Модули.Добавить(СтрокаМодуля.Идентификатор); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Если Модули.Количество() Тогда + Конфигурация.filter.modules = Модули; + КонецЕсли; + + Возврат Модули.Количество() > 0; + +КонецФункции + +&НаКлиенте +Процедура УстановитьФильтрПоТестам(Конфигурация) + + Тесты = Новый Массив(); + ДобавитьОтмеченныеТесты(ДеревоТестов.ПолучитьЭлементы(), Тесты); + + Конфигурация.filter.tests = Тесты; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьОтмеченныеТесты(Строки, Тесты) + + Для Каждого Строка Из Строки Цикл + Если Строка.Отметка = 0 Тогда + Продолжить; + КонецЕсли; + + Если Строка.ТипОбъекта = 3 Тогда + Тесты.Добавить(Строка.Идентификатор); + Иначе + ДобавитьОтмеченныеТесты(Строка.ПолучитьЭлементы(), Тесты); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение.xml new file mode 100644 index 0000000..f4802f0 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение.xml @@ -0,0 +1,22 @@ + + +
+ + Сравнение + + + ru + Сравнение + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение/Ext/Form.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение/Ext/Form.xml new file mode 100644 index 0000000..f699737 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение/Ext/Form.xml @@ -0,0 +1,38 @@ + +
+ None + false + + + ПриСозданииНаСервере + + + + Скрипт + true + None + false + false + style:FormBackColor + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Скрипт</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение/Ext/Form/Module.bsl b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение/Ext/Form/Module.bsl new file mode 100644 index 0000000..42bd74c --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Forms/Сравнение/Ext/Form/Module.bsl @@ -0,0 +1,34 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТекстСтраницы = Обработки.ЮТЮнитТесты.ПолучитьМакет("СравнениеOld").ПолучитьТекст(); + + ТекстСтраницы = СтрЗаменить(ТекстСтраницы, "ИсходныйТекст", Параметры.ОжидаемоеЗначение); + ТекстСтраницы = СтрЗаменить(ТекстСтраницы, "СравниваемыйТекст", Параметры.ФактическоеЗначение); + + АдресСтраницы = ПоместитьВоВременноеХранилище(ПолучитьДвоичныеДанныеИзСтроки(ТекстСтраницы), УникальныйИдентификатор); + Скрипт = СтрШаблон("%1/%2", ПолучитьНавигационнуюСсылкуИнформационнойБазы(), АдресСтраницы); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/Сравнение.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/Сравнение.xml new file mode 100644 index 0000000..8e530f2 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/Сравнение.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/Сравнение/Ext/Template.txt b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/Сравнение/Ext/Template.txt new file mode 100644 index 0000000..3a3d0e4 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/Сравнение/Ext/Template.txt @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/СравнениеOld.xml b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/СравнениеOld.xml new file mode 100644 index 0000000..dc425c1 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/СравнениеOld.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/СравнениеOld/Ext/Template.txt b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/СравнениеOld/Ext/Template.txt new file mode 100644 index 0000000..8f5e360 --- /dev/null +++ b/src/cfe/YAXUnit/DataProcessors/ЮТЮнитТесты/Templates/СравнениеOld/Ext/Template.txt @@ -0,0 +1,936 @@ + + + + + + + + Diff test + + + + + + + +
+
+

Edit

+
+
+
+
+

Ожидаемое значение

+
+
+

+    
+
+
+

Фактическое значение

+
+
+

+    
+ + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Ext/ManagedApplicationModule.bsl b/src/cfe/YAXUnit/Ext/ManagedApplicationModule.bsl new file mode 100644 index 0000000..874afc7 --- /dev/null +++ b/src/cfe/YAXUnit/Ext/ManagedApplicationModule.bsl @@ -0,0 +1,50 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ОписаниеПеременных + +Перем ЮТДанныеКонтекста Экспорт; + +#КонецОбласти + +///////////////////////////////////////////////////////////////////////////////// +// Обработчики событий модуля +///////////////////////////////////////////////////////////////////////////////// +#Область ОбработчикиСобытий + +///////////////////////////////////////////////////////////////////////////////// +// ОТКРЫТИЕ ПРИЛОЖЕНИЯ +///////////////////////////////////////////////////////////////////////////////// + +// Используется для перехвата управления расширением после отработки запуска приложения +//@skip-check not-allowed-pragma +&После("ПриНачалеРаботыСистемы") +Процедура ЮТПриНачалеРаботыСистемы() + + ПодключитьОбработчикОжидания("ЮТВыполнитьМодульноеТестирование", 0.1, Истина); + +КонецПроцедуры + +&After("OnStart") +Procedure ЮТOnStart() + + ЮТИсполнительСлужебныйКлиент.ВыполнитьМодульноеТестирование(); + +EndProcedure + +#КонецОбласти diff --git a/src/cfe/YAXUnit/Ext/OrdinaryApplicationModule.bsl b/src/cfe/YAXUnit/Ext/OrdinaryApplicationModule.bsl new file mode 100644 index 0000000..ef0acd4 --- /dev/null +++ b/src/cfe/YAXUnit/Ext/OrdinaryApplicationModule.bsl @@ -0,0 +1,43 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область ОписаниеПеременных + +Перем ЮТДанныеКонтекста Экспорт; + +#КонецОбласти + +///////////////////////////////////////////////////////////////////////////////// +// Обработчики событий модуля +///////////////////////////////////////////////////////////////////////////////// +#Область ОбработчикиСобытий + +///////////////////////////////////////////////////////////////////////////////// +// ОТКРЫТИЕ ПРИЛОЖЕНИЯ +///////////////////////////////////////////////////////////////////////////////// + +// Используется для перехвата управления расширением после отработки запуска приложения +//@skip-check not-allowed-pragma +&После("ПриНачалеРаботыСистемы") +Процедура ЮТПриНачалеРаботыСистемы() + + ЮТИсполнительСлужебныйКлиент.ВыполнитьМодульноеТестирование(); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/YAXUnit/Languages/Русский.xml b/src/cfe/YAXUnit/Languages/Русский.xml new file mode 100644 index 0000000..fc81dfa --- /dev/null +++ b/src/cfe/YAXUnit/Languages/Русский.xml @@ -0,0 +1,12 @@ + + + + + + Adopted + Русский + + ru + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок.xml new file mode 100644 index 0000000..99e6302 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок.xml @@ -0,0 +1,34 @@ + + + + + ЮТДвижок + + + ru + Юнит тесты + + + + true + false + false + + + ru + Внутренняя реализация инструмента + + + + + + + ЮТИсполнитель + ЮТКонтекст + ЮТМокирование + ЮТСервис + ЮТТестовыеДанные + ЮТУтверждения + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТИсполнитель.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТИсполнитель.xml new file mode 100644 index 0000000..7b0a343 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТИсполнитель.xml @@ -0,0 +1,37 @@ + + + + + ЮТИсполнитель + + + ru + Исполнитель + + + + true + false + false + + + ru + Функциональность запуска тестирования + + + + + CommonModule.ЮТИсполнительСлужебныйВызовСервера + CommonModule.ЮТИсполнительСлужебныйГлобальный + CommonModule.ЮТИсполнительСлужебныйКлиент + CommonModule.ЮТИсполнительСлужебныйКлиентСервер + CommonModule.ЮТПараметрыЗапускаСлужебный + CommonModule.ЮТТестыСлужебный + CommonModule.ЮТФильтрацияСлужебный + CommonModule.ЮТЧитательСлужебный + CommonModule.ЮТЧитательСлужебныйВызовСервера + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТКонтекст.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТКонтекст.xml new file mode 100644 index 0000000..ae53460 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТКонтекст.xml @@ -0,0 +1,32 @@ + + + + + ЮТКонтекст + + + ru + Контекст + + + + true + false + false + + + ru + Функциональность работы с контекстами + + + + + CommonModule.ЮТКонтекстСлужебный + CommonModule.ЮТКонтекстСлужебныйВызовСервера + CommonModule.ЮТКонтекстСлужебныйКлиент + CommonModule.ЮТКонтекстТеста + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТМокирование.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТМокирование.xml new file mode 100644 index 0000000..be6a93e --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТМокирование.xml @@ -0,0 +1,34 @@ + + + + + ЮТМокирование + + + ru + Мокирование + + + + true + false + false + + + ru + Содержит функциональности мокирования данных + + + + + CommonModule.МокитоОбучение + CommonModule.МокитоПроверки + CommonModule.МокитоСлужебный + DataProcessor.ЮТHTTPServiceRequest + DataProcessor.ЮТHTTPСервисЗапрос + DataProcessor.ЮТRecordSet + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТСервис.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТСервис.xml new file mode 100644 index 0000000..d755f66 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТСервис.xml @@ -0,0 +1,59 @@ + + + + + ЮТСервис + + + ru + Сервис + + + + true + false + false + + + ru + Сервисная функциональность работы движка + + + + + CommonModule.ЮТАсинхроннаяОбработкаСлужебныйКлиент + CommonModule.ЮТИсключения + CommonModule.ЮТКомпоненты + CommonModule.ЮТКомпонентыСлужебныйВызовСервера + CommonModule.ЮТКомпонентыСлужебныйКлиент + CommonModule.ЮТЛогированиеСлужебныйВызовСервера + CommonModule.ЮТЛокальСлужебный + CommonModule.ЮТМетаданныеСлужебныйВызовСервера + CommonModule.ЮТМетаданныеСлужебныйПовтИсп + CommonModule.ЮТНастройкиВыполнения + CommonModule.ЮТОбщийСлужебныйВызовСервера + CommonModule.ЮТОтчетСлужебный + CommonModule.ЮТПроверкиСлужебный + CommonModule.ЮТРасширенияСлужебный + CommonModule.ЮТРегистрацияОшибокСлужебный + CommonModule.ЮТСлужебныйПовторногоИспользования + CommonModule.ЮТСобытияСлужебный + CommonModule.ЮТСообщенияСлужебный + CommonModule.ЮТТипыДанныхСлужебный + CommonModule.ЮТФабрикаСлужебный + CommonModule.ЮТФайлы + CommonPicture.ЮТНеизвестный + CommonPicture.ЮТОшибка + CommonPicture.ЮТПодсистема + CommonPicture.ЮТПропущен + CommonPicture.ЮТУпал + CommonPicture.ЮТУспешно + CommonPicture.ЮТЭлементыТестов + CommonTemplate.ЮТRegEx1CAddin + CommonTemplate.ЮТYaxUnitAddIn + CommonTemplate.ЮТОписаниеМетаданных + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные.xml new file mode 100644 index 0000000..31ab28e --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные.xml @@ -0,0 +1,39 @@ + + + + + ЮТТестовыеДанные + + + ru + Тестовые данные + + + + true + false + false + + + ru + Реализация генерации и работы с тестовыми данными + + + + + CommonModule.ЮТКонструкторВариантов + CommonModule.ЮТКонструкторТестовыхДанныхСлужебный + CommonModule.ЮТПреобразованияСлужебный + CommonModule.ЮТСтроки + CommonModule.ЮТТестовыеДанные + CommonModule.ЮТТестовыеДанныеСлужебный + CommonModule.ЮТТестовыеДанныеСлужебныйВызовСервера + CommonModule.ЮТТестовыеДанныеСлужебныйТаблицыЗначений + DataProcessor.ЮТКонструкторТестовыхДанных + + + + ЮТПодражатель + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные/Subsystems/ЮТПодражатель.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные/Subsystems/ЮТПодражатель.xml new file mode 100644 index 0000000..04a3ba2 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные/Subsystems/ЮТПодражатель.xml @@ -0,0 +1,38 @@ + + + + + ЮТПодражатель + + + ru + Подражатель + + + + true + false + false + + + + CommonModule.ЮТПодражатель + CommonModule.ЮТПодражатель_Банки + CommonModule.ЮТПодражатель_Компании + CommonModule.ЮТПодражатель_Люди + CommonModule.ЮТПодражательСлужебный + CommonModule.ЮТПодражательСлужебныйВызовСервера + CommonModule.ЮТПодражательСлужебныйПовтИсп + CommonTemplate.ЮТ_СловарьПодражателя_Компании_Наименования_ru + CommonTemplate.ЮТ_СловарьПодражателя_Компании_ПрефиксыНаименований_ru + CommonTemplate.ЮТ_СловарьПодражателя_Люди_ЖенскиеИмена_ru + CommonTemplate.ЮТ_СловарьПодражателя_Люди_ЖенскиеОтчества_ru + CommonTemplate.ЮТ_СловарьПодражателя_Люди_ЖенскиеФамилии_ru + CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru + CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru + CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТУтверждения.xml b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТУтверждения.xml new file mode 100644 index 0000000..a012d05 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДвижок/Subsystems/ЮТУтверждения.xml @@ -0,0 +1,36 @@ + + + + + ЮТУтверждения + + + ru + Утверждения + + + + true + false + false + + + ru + Реализация утверждений для проверки результатов при тестировании + + + + + CommonModule.ЮТЗапросыСлужебныйВызовСервера + CommonModule.ЮТЗапросыСлужебныйКлиентСервер + CommonModule.ЮТПредикаты + CommonModule.ЮТПредикатыСлужебныйКлиентСервер + CommonModule.ЮТСравнениеСлужебныйВызовСервера + CommonModule.ЮТСравнениеСлужебныйКлиентСервер + CommonModule.ЮТУтверждения + CommonModule.ЮТУтвержденияИБ + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые.xml b/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые.xml new file mode 100644 index 0000000..ea00f2c --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые.xml @@ -0,0 +1,30 @@ + + + + + ЮТДинамическиПодключаемые + + + ru + Динамически подключаемые + + + + true + false + false + + + ru + Содержит подсистемы с динамически подключаемой (загружаемой) функциональностью + + + + + + + ЮТОбработчикиСобытий + ЮТФормированиеОтчета + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые/Subsystems/ЮТОбработчикиСобытий.xml b/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые/Subsystems/ЮТОбработчикиСобытий.xml new file mode 100644 index 0000000..0930391 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые/Subsystems/ЮТОбработчикиСобытий.xml @@ -0,0 +1,33 @@ + + + + + ЮТОбработчикиСобытий + + + ru + Обработчики событий + + + + true + false + false + + + ru + Подключаемые обработчики событий тестов + + + + + CommonModule.МокитоСлужебный + CommonModule.ЮТИсполнительСлужебныйКлиент + CommonModule.ЮТЛогированиеСлужебный + CommonModule.ЮТТестовыеДанныеСлужебный + CommonModule.ЮТУтверждения + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые/Subsystems/ЮТФормированиеОтчета.xml b/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые/Subsystems/ЮТФормированиеОтчета.xml new file mode 100644 index 0000000..c12ba88 --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТДинамическиПодключаемые/Subsystems/ЮТФормированиеОтчета.xml @@ -0,0 +1,31 @@ + + + + + ЮТФормированиеОтчета + + + ru + Формирование отчета + + + + true + false + false + + + ru + Функциональность формирования отчетов + + + + + CommonModule.ЮТОтчетAllureСлужебный + CommonModule.ЮТОтчетJSONСлужебный + CommonModule.ЮТОтчетJUnitСлужебный + + + + + \ No newline at end of file diff --git a/src/cfe/YAXUnit/Subsystems/ЮТПубличный.xml b/src/cfe/YAXUnit/Subsystems/ЮТПубличный.xml new file mode 100644 index 0000000..1f0403d --- /dev/null +++ b/src/cfe/YAXUnit/Subsystems/ЮТПубличный.xml @@ -0,0 +1,62 @@ + + + + + ЮТПубличный + + + ru + YAxUnit + + + + true + true + false + + + ru + Публичные API и инструменты, применяемые при написании тестов и самом тестировании. Остальные использовать напрямую не рекомендуется + + + + CommonPicture.ЮТПодсистема + false + + + CommonModule.Мокито + CommonModule.МокитоОбучение + CommonModule.МокитоПроверки + CommonModule.ЮТест + CommonModule.ЮТЗапросы + CommonModule.ЮТИсключения + CommonModule.ЮТКоллекции + CommonModule.ЮТКомпоненты + CommonModule.ЮТКонструкторВариантов + CommonModule.ЮТКонтекстТеста + CommonModule.ЮТЛогирование + CommonModule.ЮТМетаданные + CommonModule.ЮТНастройкиВыполнения + CommonModule.ЮТОбщий + CommonModule.ЮТПодражатель + CommonModule.ЮТПодражатель_Банки + CommonModule.ЮТПодражатель_Компании + CommonModule.ЮТПодражатель_Люди + CommonModule.ЮТПредикаты + CommonModule.ЮТСтроки + CommonModule.ЮТТестовыеДанные + CommonModule.ЮТТесты + CommonModule.ЮТУтверждения + CommonModule.ЮТУтвержденияИБ + CommonModule.ЮТФабрика + CommonModule.ЮТФайлы + DataProcessor.ЮТHTTPServiceRequest + DataProcessor.ЮТHTTPСервисЗапрос + DataProcessor.ЮТRecordSet + DataProcessor.ЮТКонструкторТестовыхДанных + DataProcessor.ЮТЮнитТесты + + + + + \ No newline at end of file diff --git a/tools/VBParams.json b/tools/VBParams.json index 6096686..6d796ce 100644 --- a/tools/VBParams.json +++ b/tools/VBParams.json @@ -4,9 +4,9 @@ "ВыполнитьСценарии": true, "ЗавершитьРаботуСистемы": true, "ЗакрытьTestClientПослеЗапускаСценариев": true, - "КаталогФич": "$workspaceRoot/feature/core", + "КаталогФич": "$workspaceRoot/features", "КаталогиБиблиотек": [ - "$workspaceRoot/feature/lib" + "$workspaceRoot/features" ], "СписокТеговИсключение": [ "IgnoreOnCIMainBuild", @@ -56,7 +56,7 @@ "ПрикладыватьКОтчетуAllureДанныеОСостоянииВсехФорм": true, "ПрикладыватьКОтчетуAllureДанныеОСетевыхСоединениях": false, "ПрикладыватьКОтчетуAllureДанныеОПроцессахОС": false, - "КаталогОтносительноКоторогоНадоСтроитьИерархию": "$workspaceRoot/features/core", + "КаталогОтносительноКоторогоНадоСтроитьИерархию": "$workspaceRoot/features", "ДанныеАллюрМеток": [] }, "ДелатьОтчетВФорматеjUnit": false, diff --git a/tools/yaxunit.json b/tools/yaxunit.json new file mode 100644 index 0000000..b591045 --- /dev/null +++ b/tools/yaxunit.json @@ -0,0 +1,26 @@ +{ + "reportPath": "./build/out/yaxunit/junit.xml", + "closeAfterTests": true, + "filter": { + "extensions": [ + "YAXUNIT" + ], + "modules": null, + "suites": null, + "tags": null, + "contexts": null, + "paths": null, + "tests": null + }, + "settings": { + "ВТранзакции": true + }, + "reportFormat": "jUnit", + "showReport": false, + "logging": { + "file": "./build/out/yaxunit/log.txt", + "enable": false, + "level": "debug" + }, + "exitCode": "./build/out/yaxunit/result.txt" +} \ No newline at end of file