1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-02-07 19:30:17 +02:00

Merge pull request #71 from bia-technologies/feature/query-gen

Утверждения для проверки данных ИБ
This commit is contained in:
Koryakin Aleksey 2023-05-11 13:42:40 +03:00 committed by GitHub
commit a51f402636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 1522 additions and 349 deletions

View File

@ -1,3 +1,3 @@
addModuleStrictTypesAnnotation=true
addModuleStrictTypesAnnotation=false
createModuleStructure=true
eclipse.preferences.version=1

View File

@ -18,39 +18,6 @@
#Область СлужебныйПрограммныйИнтерфейс
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
.ДобавитьТест("ТестовыйМетод")
.ДобавитьТест("ТестовыйМетод").СПараметрами(1, 2, 3);
;
КонецПроцедуры
#Область События
Процедура ПередВсемиТестами() Экспорт
КонецПроцедуры
Процедура ПередКаждымТестом() Экспорт
КонецПроцедуры
Процедура ПослеКаждогоТеста() Экспорт
КонецПроцедуры
Процедура ПослеВсехТестов() Экспорт
КонецПроцедуры
#КонецОбласти
Процедура ТестовыйМетод() Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -0,0 +1,130 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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 constructor-function-return-section
Возврат ЮТЗапросыВызовСервера.ЗначенияРеквизитов(Ссылка, ИменаРеквизитов, Ложь);
КонецФункции
// Возвращает значение реквизита ссылки
//
// Параметры:
// Ссылка - ЛюбаяСсылка
// ИмяРеквизита - Строка - Имя получаемого реквизита, можно указать путь к вложенному реквизиту через точку
//
// Возвращаемое значение:
// Структура Из Произвольный - Значения реквизитов ссылки
Функция ЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт
//@skip-check constructor-function-return-section
Возврат ЮТЗапросыВызовСервера.ЗначенияРеквизитов(Ссылка, ИмяРеквизита, Истина);
КонецФункции
// Вернет признак содержит ли таблица записи удовлетворяющие переданным условиям
//
// Параметры:
// ИмяТаблицы - Строка - Имя таблицы базы
// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
// - см. ЮТФабрика.ВыражениеПредиката
// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат
// - Неопределено - Проверит, что таблица не пустая
// Возвращаемое значение:
// Булево - Таблица содержит записи
Функция ТаблицаСодержитЗаписи(ИмяТаблицы, Предикат = Неопределено) Экспорт
ОписаниеЗапроса = ЮТЗапросыКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат);
Возврат НЕ РезультатПустой(ОписаниеЗапроса);
КонецФункции
// Возвращает результат выполнения простого запроса.
//
// Параметры:
// ОписаниеЗапроса - см. ОписаниеЗапроса
//
// Возвращаемое значение:
// - ТаблицаЗначений - Результат запроса для сервера
// - Массив из Структура - Результат запроса для клиента
Функция РезультатЗапроса(ОписаниеЗапроса) Экспорт
#Если Клиент Тогда
Возврат ЮТЗапросыВызовСервера.РезультатЗапроса(ОписаниеЗапроса, Истина);
#Иначе
Возврат ЮТЗапросыВызовСервера.РезультатЗапроса(ОписаниеЗапроса, Ложь);
#КонецЕсли
КонецФункции
// Определяет, есть ли в результате записи
//
// Параметры:
// ОписаниеЗапроса - см. ОписаниеЗапроса
//
// Возвращаемое значение:
// Булево - Результат пустой
Функция РезультатПустой(ОписаниеЗапроса) Экспорт
Возврат ЮТЗапросыВызовСервера.РезультатПустой(ОписаниеЗапроса);
КонецФункции
// Описание простого запроса
//
// Возвращаемое значение:
// Структура - Описание запроса:
// * ИмяТаблицы - Строка -
// * ВыбираемыеПоля - Структура - Выражения выбираемых полей:
// * Ключ - Строка - Имя поля
// * Значение - Строка - выражение поля
// * КоличествоЗаписей - Число, Неопределено - Ограничение количества выбираемых записей
// * Условия - Массив из Строка - Коллекция выражений условий, которые будут объединены через `И`
// * ЗначенияПараметров - Структура - Набор параметров запроса
Функция ОписаниеЗапроса() Экспорт
Описание = Новый Структура();
Описание.Вставить("ИмяТаблицы", "");
Описание.Вставить("ВыбираемыеПоля", Новый Структура);
Описание.Вставить("КоличествоЗаписей", Неопределено);
Описание.Вставить("Условия", Новый Массив());
Описание.Вставить("ЗначенияПараметров", Новый Структура());
//@skip-check constructor-function-return-section
Возврат Описание;
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c8a4bf65-9736-47f1-a39c-12536b8207a6">
<name>ЮТЗапросы</name>
<synonym>
<key>ru</key>
<value>Запросы</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -0,0 +1,162 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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 ИЗ %2 ГДЕ Ссылка = &Ссылка", ИменаРеквизитов, ИмяТаблицы);
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если ОдинРеквизит Тогда
Возврат ЗначениеИзЗапроса(Запрос, 0);
Иначе
Возврат ЗначенияИзЗапроса(Запрос, ИменаРеквизитов);
КонецЕсли;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Запрос.
//
// Параметры:
// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса
//
// Возвращаемое значение:
// Запрос
Функция Запрос(ОписаниеЗапроса)
Строки = Новый Массив();
Строки.Добавить("ВЫБРАТЬ ");
Если ОписаниеЗапроса.КоличествоЗаписей <> Неопределено Тогда
Строки.Добавить("ПЕРВЫЕ " + ЮТОбщий.ЧислоВСтроку(ОписаниеЗапроса.КоличествоЗаписей));
КонецЕсли;
ВыбираемыеПоля = Новый Массив();
Для Каждого Выражение Из ОписаниеЗапроса.ВыбираемыеПоля Цикл
Поле = СтрШаблон(" %1 КАК %2", ?(Выражение.Значение = Неопределено, Выражение.Ключ, Выражение.Значение), Выражение.Ключ);
ВыбираемыеПоля.Добавить(Поле);
КонецЦикла;
Если НЕ ВыбираемыеПоля.Количество() Тогда
ВыбираемыеПоля.Добавить("1 КАК Поле");
КонецЕсли;
Строки.Добавить(СтрСоединить(ВыбираемыеПоля, "," + Символы.ПС));
Строки.Добавить("ИЗ " + ОписаниеЗапроса.ИмяТаблицы);
Если ОписаниеЗапроса.Условия.Количество() Тогда
Строки.Добавить("ГДЕ (");
Строки.Добавить(СтрСоединить(ОписаниеЗапроса.Условия, ") И (" + Символы.ПС));
Строки.Добавить(")");
КонецЕсли;
Запрос = Новый Запрос(СтрСоединить(Строки, Символы.ПС));
ЮТОбщий.ОбъединитьВСтруктуру(Запрос.Параметры, ОписаниеЗапроса.ЗначенияПараметров);
Возврат Запрос;
КонецФункции
Функция ЗначенияИзЗапроса(Запрос, Реквизиты)
Результат = Новый Структура(Реквизиты);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(Результат, Выборка);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЗначениеИзЗапроса(Запрос, Реквизит)
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка[Реквизит];
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9115c1c4-e348-46da-820d-e61915f18fde">
<name>ЮТЗапросыВызовСервера</name>
<synonym>
<key>ru</key>
<value>Запросы вызов сервера</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
</mdclass:CommonModule>

View File

@ -0,0 +1,96 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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 = &%2";
ИначеЕсли Выражение = ВыраженияПредикатов.Больше Тогда
Шаблон = "%1 > &%2";
ИначеЕсли Выражение = ВыраженияПредикатов.БольшеРавно Тогда
Шаблон = "%1 >= &%2";
ИначеЕсли Выражение = ВыраженияПредикатов.Меньше Тогда
Шаблон = "%1 < &%2";
ИначеЕсли Выражение = ВыраженияПредикатов.МеньшеРавно Тогда
Шаблон = "%1 <= &%2";
ИначеЕсли Выражение = ВыраженияПредикатов.ИмеетТип Тогда
Шаблон = "ТИПЗНАЧЕНИЯ(%1) = &%2";
ИначеЕсли Выражение = ВыраженияПредикатов.Содержит Тогда
Шаблон = "%1 ПОДОБНО ""%%"" + &%2 + ""%%""";
ИначеЕсли Выражение = ВыраженияПредикатов.Заполнено Тогда
// TODO Реализовать
ВызватьИсключение "Проверка заполненности пока не поддерживается";
Иначе
ВызватьИсключение "Неподдерживаемое выражения предикатов " + Выражение;
КонецЕсли;
Если Отрицание Тогда
Шаблон = СтрШаблон("НЕ (%1)", Шаблон);
КонецЕсли;
Возврат Шаблон;
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6dfe96cd-f835-42f2-b5d7-561680929207">
<name>ЮТЗапросыКлиентСервер</name>
<synonym>
<key>ru</key>
<value>Запросы клиент сервер</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -45,11 +45,20 @@
// Параметр3 - Произвольный
// Параметр4 - Произвольный
// Параметр5 - Произвольный
// Параметр6 - Произвольный
// Параметр7 - Произвольный
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
Функция Добавить(Параметр1, Параметр2 = Неопределено, Параметр3 = Неопределено, Параметр4 = Неопределено, Параметр5 = Неопределено) Экспорт
Функция Добавить(Параметр1,
Параметр2 = Неопределено,
Параметр3 = Неопределено,
Параметр4 = Неопределено,
Параметр5 = Неопределено,
Параметр6 = Неопределено,
Параметр7 = Неопределено) Экспорт
// BSLLS:MagicNumber-off
// BSLLS:NumberOfValuesInStructureConstructor-off
Варианты = ЮТКонтекст.ЗначениеКонтекста(КлючКонтекста());
Если Варианты.КоличествоРеквизитов = 1 Тогда
@ -62,8 +71,13 @@
Вариант = Новый Структура(Варианты.Реквизиты, Параметр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
Варианты.Варианты.Добавить(Вариант);
Возврат ЮТКонструкторВариантов;

View File

@ -78,24 +78,24 @@
КонецФункции
Функция ПредставлениеПредикатов(Знач Предикаты, Разделитель) Экспорт
Функция ПредставлениеПредикатов(Знач Предикаты, Разделитель, ШаблонСвойства = "содержит свойство `%1`, которое") Экспорт
Представления = Новый Массив();
Предикаты = НаборПредикатов(Предикаты);
Для Каждого Выражение Из Предикаты Цикл
Представления.Добавить(ПредставлениеПредиката(Выражение));
Представления.Добавить(ПредставлениеПредиката(Выражение, ШаблонСвойства));
КонецЦикла;
Возврат СтрСоединить(Представления, Разделитель);
КонецФункции
Функция ПредставлениеПредиката(ВыражениеПредиката) Экспорт
Функция ПредставлениеПредиката(ВыражениеПредиката, ШаблонСвойства) Экспорт
Если ВыражениеПредиката.ИмяРеквизита = Неопределено Тогда
ПроверяемоеЗначение = "";
Иначе
ПроверяемоеЗначение = СтрШаблон("содержит свойство `%1`, которое ", ВыражениеПредиката.ИмяРеквизита);
ПроверяемоеЗначение = СтрШаблон(ШаблонСвойства, ВыражениеПредиката.ИмяРеквизита) + " ";
КонецЕсли;
Выражение = СтрШаблон(ШаблонВыражения(ВыражениеПредиката.ВидСравнения), ВыражениеПредиката.Значение);
@ -146,14 +146,26 @@
КонецФункции
Функция ЭтоВыраженияОтрицания(Выражение) Экспорт
Возврат СтрНачинаетсяС(Выражение, "Не");
КонецФункции
Функция ВыраженияБезОтрицания(Выражение) Экспорт
Возврат Сред(Выражение, 3);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, БазовыеПараметрыПроверки, ПараметрыСравнения)
Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
Попытка
ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, БазовыеПараметрыПроверки, ПараметрыСравнения);
ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
Исключение
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(СтатусПроверки, ИнформацияОбОшибке());
КонецПопытки;
@ -166,15 +178,19 @@
// Значение - Произвольный - Значение
// Выражение - см. ЮТФабрика.ВыражениеПредиката
// СтатусПроверки - см. ЮТФабрика.ОписаниеРезультатаПроверки
// БазовыеПараметрыПроверки - см. ПараметрыПроверки
// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке
// ПараметрыСравнения - Неопределено
// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры
Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, БазовыеПараметрыПроверки, ПараметрыСравнения)
Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
// BSLLS:CognitiveComplexity-off
ВидыСравнения = ЮТПредикаты.Выражения();
ПараметрыПроверки = ЮТСравнениеКлиентСервер.ПараметрыПроверки(Выражение.ВидСравнения, Значение, Выражение.ИмяРеквизита, Выражение.Значение, Ложь);
ЗаполнитьЗначенияСвойств(ПараметрыПроверки, БазовыеПараметрыПроверки, "ОписаниеПроверки, ОбъектПроверки, ПредставлениеПроверяемогоЗначения");
ПараметрыПроверки.ОписаниеПроверки = ПараметрыСообщенийОбОшибке.ОписаниеПроверки;
ПараметрыПроверки.ТекстПроверяемоеЗначение = ПараметрыСообщенийОбОшибке.ТекстПроверяемоеЗначение;
ПараметрыПроверки.ОбъектПроверки.Представление = ПараметрыСообщенийОбОшибке.ПредставлениеПроверяемогоЗначения;
Если СтрНачинаетсяС(Выражение.ВидСравнения, "Не") И ВидыСравнения.Свойство(Сред(Выражение.ВидСравнения, 3)) Тогда
ПараметрыПроверки.Реверс = Истина;
@ -236,21 +252,21 @@
//
// Параметры:
// ОписаниеПроверки - Строка - Описание конкретной проверки
// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
// ТекстПроверяемоеЗначение - Строка - Человекочитаемое описание проверяемого значения
// ПредставлениеПроверяемогоЗначения - Неопределено - Представление проверяемого значения
//
// Возвращаемое значение:
// Структура - Параметры сообщений об ошибке:
// * ОписаниеПроверки - Строка - Описание конкретной проверки
// * ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
// * ПредставлениеПроверяемогоЗначения - Неопределено -
// * ОписаниеПроверки - Неопределено, Строка - Описание конкретной проверки
// * ТекстПроверяемоеЗначение - Неопределено, Строка - Человекочитаемое описание проверяемого значения
// * ПредставлениеПроверяемогоЗначения - Неопределено, Строка -
Функция ПараметрыСообщенийОбОшибке(ОписаниеПроверки = Неопределено,
ОбъектПроверки = "проверяемое значение",
ТекстПроверяемоеЗначение = "проверяемое значение",
ПредставлениеПроверяемогоЗначения = Неопределено) Экспорт
Возврат Новый Структура("ОписаниеПроверки, ОбъектПроверки, ПредставлениеПроверяемогоЗначения",
Возврат Новый Структура("ОписаниеПроверки, ТекстПроверяемоеЗначение, ПредставлениеПроверяемогоЗначения",
ОписаниеПроверки,
ОбъектПроверки,
ТекстПроверяемоеЗначение,
ПредставлениеПроверяемогоЗначения);
КонецФункции

View File

@ -94,12 +94,13 @@
//
// Параметры:
// ИнформацияОбОшибке - ИнформацияОбОшибке
Процедура СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке) Экспорт
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
Процедура СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке, ОписаниеПроверки = Неопределено) Экспорт
СтруктураОшибки = ЮТКонтекст.КонтекстОшибки();
СтруктураОшибки.ОшибкаУтверждения = Ложь;
ВызватьОшибкуИсполнения(ИнформацияОбОшибке);
ВызватьОшибкуИсполнения(ИнформацияОбОшибке, ОписаниеПроверки);
КонецПроцедуры
@ -107,16 +108,20 @@
// При этом сохраняет в контекст состояние, для дальнейшей обработки
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// Сообщение - Строка
// ПроверяемоеЗначение - Произвольный
// ОжидаемоеЗначение - Произвольный
// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
Процедура СгенерироватьОшибкуСравнения(Сообщение, ПроверяемоеЗначение, ОжидаемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
Процедура СгенерироватьОшибкуСравнения(ОписаниеПроверки,
Сообщение,
ПроверяемоеЗначение,
ОжидаемоеЗначение,
ОбъектПроверки = "проверяемое значение") Экспорт
УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение);
Контекст = ЮТКонтекст.КонтекстПроверки();
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ПроверяемоеЗначение, Сообщение, ОбъектПроверки, Контекст);
ВызватьОшибкуПроверки(ТекстСообщения);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);
КонецПроцедуры
@ -124,15 +129,15 @@
// При этом сохраняет в контекст состояние, для дальнейшей обработки
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// Сообщение - Строка
// ПроверяемоеЗначение - Произвольный
// ОбъектПроверки - Строка - Человекочитаемое описание проверяемого значения
Процедура СгенерироватьОшибкуУтверждения(Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
Процедура СгенерироватьОшибкуУтверждения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение);
Контекст = ЮТКонтекст.КонтекстПроверки();
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ПроверяемоеЗначение, Сообщение, ОбъектПроверки, Контекст);
ВызватьОшибкуПроверки(ТекстСообщения);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);
КонецПроцедуры
@ -160,9 +165,10 @@
// Служебный метод, предварительно нужно самостоятельно настроить контекст (см. ЮТКонтекст.КонтекстОшибки)
// Параметры:
// ТекстСообщения - Строка
Процедура ВызватьОшибкуПроверки(Знач ТекстСообщения) Экспорт
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
Процедура ВызватьОшибкуПроверки(Знач ТекстСообщения, ОписаниеПроверки = Неопределено) Экспорт
СообщениеОбОшибке = СообщениеОбОшибке(ТекстСообщения, ПрефиксОшибкиУтверждений());
СообщениеОбОшибке = СообщениеОбОшибке(ТекстСообщения, ПрефиксОшибкиУтверждений(), ОписаниеПроверки);
ВызватьИсключение СообщениеОбОшибке;
КонецПроцедуры
@ -307,20 +313,27 @@
КонецПроцедуры
Функция ФорматированныйТекстОшибкиУтверждения(Знач ПроверяемоеЗначение, ТекстОжидания, ОбъектПроверки, Контекст) Экспорт
// Форматированный текст ошибки утверждения.
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// ТекстОжидания - Строка - Описание ожидания
// ОбъектПроверки - Строка - Объект проверки
//
// Возвращаемое значение:
// Строка - Форматированный текст ошибки утверждения
Функция ФорматированныйТекстОшибкиУтверждения(Знач ОписаниеПроверки, ТекстОжидания, ОбъектПроверки) Экспорт
ИмяСвойства = Контекст.ИмяСвойства;
Если ЗначениеЗаполнено(ИмяСвойства) Тогда
ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ИмяСвойства);
Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.ИмяСвойства) Тогда
ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ОписаниеПроверки.ОбъектПроверки.ИмяСвойства);
Иначе
ВставкаСвойство = "";
КонецЕсли;
Если ЗначениеЗаполнено(Контекст.ПредставлениеПроверяемогоЗначения) Тогда
ПредставлениеЗначения = Контекст.ПредставлениеПроверяемогоЗначения;
Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.Представление) Тогда
ПредставлениеЗначения = ОписаниеПроверки.ОбъектПроверки.Представление;
Иначе
ПредставлениеЗначения = СтрШаблон("`%1`", Контекст.ПроверяемоеЗначение);
ПредставлениеЗначения = СтрШаблон("`%1`", ОписаниеПроверки.ОбъектПроверки.Значение);
КонецЕсли;
// Заголовок сообщения
@ -336,6 +349,20 @@
КонецФункции
Функция ДобавитьОписания(ТекстОшибки, ОписаниеПроверки = Неопределено) Экспорт
Если ОписаниеПроверки <> Неопределено Тогда
ПрефиксОшибки = ЮТОбщий.ДобавитьСтроку(ОписаниеПроверки.ПрефиксОшибки, ОписаниеПроверки.ОписаниеПроверки, " ");
СообщениеОбОшибке = ЮТОбщий.ДобавитьСтроку(ПрефиксОшибки, ТекстОшибки, ": ");
Иначе
СообщениеОбОшибке = ТекстОшибки;
КонецЕсли;
СообщениеОбОшибке = ВРег(Лев(СообщениеОбОшибке, 1)) + Сред(СообщениеОбОшибке, 2);
Возврат СообщениеОбОшибке;
КонецФункции
Процедура ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, Ошибка) Экспорт
РезультатПроверки.Успешно = Ложь;
@ -517,21 +544,17 @@
КонецПроцедуры
Процедура ВызватьОшибкуИсполнения(Знач ИнформацияОбОшибке)
Процедура ВызватьОшибкуИсполнения(Знач ИнформацияОбОшибке, ОписаниеПроверки)
ТекстОшибки = ИнформациюОбОшибкеВСтроку(ИнформацияОбОшибке);
СообщениеОбОшибке = СообщениеОбОшибке(ТекстОшибки, ПрефиксОшибкиВыполнения());
СообщениеОбОшибке = СообщениеОбОшибке(ТекстОшибки, ПрефиксОшибкиВыполнения(), ОписаниеПроверки);
ВызватьИсключение СообщениеОбОшибке;
КонецПроцедуры
Функция СообщениеОбОшибке(ТекстОшибки, ПрефиксТипаОшибки)
Функция СообщениеОбОшибке(ТекстОшибки, ПрефиксТипаОшибки, ОписаниеПроверки = Неопределено) Экспорт
Контекст = ЮТКонтекст.КонтекстПроверки();
ПрефиксОшибки = ЮТОбщий.ДобавитьСтроку(Контекст.ПрефиксОшибки, Контекст.ОписаниеПроверки, " ");
СообщениеОбОшибке = ЮТОбщий.ДобавитьСтроку(ПрефиксОшибки, ТекстОшибки, ": ");
СообщениеОбОшибке = ВРег(Лев(СообщениеОбОшибке, 1)) + Сред(СообщениеОбОшибке, 2);
СообщениеОбОшибке = ДобавитьОписания(ТекстОшибки, ОписаниеПроверки);
Возврат СтрШаблон("%1 <%2>", ПрефиксТипаОшибки, СообщениеОбОшибке);

View File

@ -249,18 +249,33 @@
КонецПроцедуры
// Параметры проверки.
//
// Параметры:
// ВидСравнения - Строка
// ПроверяемоеЗначение - Произвольный
// ИмяСвойства - Строка
// ОжидаемоеЗначение - Произвольный
// Реверс - Булево
//
// Возвращаемое значение:
// Структура - Параметры проверки:
// * ОбъектПроверки - см. ЮТФабрика.ОписаниеПроверяемогоЗначения
// * ПрефиксОшибки - Строка, Неопределено -
// * ОписаниеПроверки - Строка, Неопределено -
// * ВидСравнения - Строка
// * ОжидаемоеЗначение - Произвольный
// * Реверс - Булево
// * ТекстПроверяемоеЗначение - Строка
Функция ПараметрыПроверки(ВидСравнения, ПроверяемоеЗначение, ИмяСвойства, ОжидаемоеЗначение, Реверс = Ложь) Экспорт
Параметры = Новый Структура();
Параметры = ЮТФабрика.ОписаниеПроверки(ПроверяемоеЗначение);
Параметры.ОбъектПроверки.ИмяСвойства = ИмяСвойства;
Параметры.Вставить("ВидСравнения", ВидСравнения);
Параметры.Вставить("ПроверяемоеЗначение", ПроверяемоеЗначение);
Параметры.Вставить("ОжидаемоеЗначение", ОжидаемоеЗначение);
Параметры.Вставить("ИмяСвойства", ИмяСвойства);
Параметры.Вставить("Реверс", Реверс);
Параметры.Вставить("ОбъектПроверки", Неопределено);
Параметры.Вставить("ОписаниеПроверки", Неопределено);
Параметры.Вставить("ПредставлениеПроверяемогоЗначения", Неопределено);
Параметры.Вставить("ТекстПроверяемоеЗначение", "проверяемое значение");
Возврат Параметры;
@ -503,22 +518,11 @@
Процедура ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ФактическоеЗначение)
ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения);
Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение);
Если ЗначениеЗаполнено(ПараметрыПроверки.ПредставлениеПроверяемогоЗначения) Тогда
ПредставлениеЗначения = ПараметрыПроверки.ПредставлениеПроверяемогоЗначения;
Иначе
ПредставлениеЗначения = СтрШаблон("`%1`", ПараметрыПроверки.ПроверяемоеЗначение);
КонецЕсли;
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки);
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПредставлениеЗначения,
Сообщение,
ПараметрыПроверки.ОбъектПроверки,
ПараметрыПроверки);
ТекстОшибки = ЮТОбщий.ДобавитьСтроку(ПараметрыПроверки.ОписаниеПроверки, ТекстОшибки, ": ");
ТекстОшибки = ВРег(Лев(ТекстОшибки, 1)) + Сред(ТекстОшибки, 2);
ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки,
ТекстОшибки,
ФактическоеЗначение,
@ -535,10 +539,10 @@
// Произвольный
Функция ПроверяемоеЗначение(ПараметрыПроверки)
Если ПараметрыПроверки.ИмяСвойства <> Неопределено Тогда
Значение = ЗначениеСвойства(ПараметрыПроверки.ПроверяемоеЗначение, ПараметрыПроверки.ИмяСвойства);
Если ПараметрыПроверки.ОбъектПроверки.ИмяСвойства <> Неопределено Тогда
Значение = ЗначениеСвойства(ПараметрыПроверки.ОбъектПроверки.Значение, ПараметрыПроверки.ОбъектПроверки.ИмяСвойства);
Иначе
Значение = ПараметрыПроверки.ПроверяемоеЗначение;
Значение = ПараметрыПроверки.ОбъектПроверки.Значение;
КонецЕсли;
Возврат Значение;

View File

@ -0,0 +1,173 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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.
//
//©///////////////////////////////////////////////////////////////////////////©//
///////////////////////////////////////////////////////////////////
// Предоставляет методы для формирования утверждений проверяющих данные информационной базы.
//
// Например:
//
// ```bsl
// ЮТест.ОжидаетЧтоТаблицаБазы("Справочник.Товары")
// .СодержитЗаписи();
// ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.КурсыВалют")
// .СодержитЗаписи(ЮТест.Предикат()
// .Реквизит("Валюта").Равно(ДанныеРегистра.Валюта));
// ```
///////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Инициализирует модуль для проверки утверждений.
//
// * Запоминает/устанавливает имя проверяемой таблицы
// * Запоминает описание.
//
// Параметры:
// ИмяТаблицы - Строка - Имя проверяемой таблицы, например, Справочник.Товары, РегистрНакопления.ТоварыНаСкладах
// ОписаниеПроверки - Строка - Описание проверки, которое будет выведено при возникновении ошибки
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания
// Примеры
// ЮТест.ОжидаетЧтоТаблицаБазы("Справочник.Товары").СодержитЗаписи();
//
Функция ЧтоТаблица(ИмяТаблицы, ОписаниеПроверки = "") Экспорт
Контекст = НовыйКонтекст(ИмяТаблицы);
Контекст.ПрефиксОшибки = ОписаниеПроверки;
ЮТКонтекст.УстановитьЗначениеКонтекста(ИмяКонтекста(), Контекст);
Возврат ЮТУтвержденияИБ;
КонецФункции
// Проверяет наличие в таблице записей удовлетворяющих условиям
//
// Параметры:
// Предикат - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат
// - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
// - см. ЮТФабрика.ВыражениеПредиката
// - Неопределено - Проверит, что таблица не пустая
// ОписаниеУтверждения - Строка - Описание конкретного утверждения
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания
Функция СодержитЗаписи(Знач Предикат = Неопределено, Знач ОписаниеУтверждения = Неопределено) Экспорт
Контекст = Контекст();
УстановитьОписаниеПроверки(Контекст, ОписаниеУтверждения);
Результат = ЮТЗапросы.ТаблицаСодержитЗаписи(Контекст.ОбъектПроверки.Значение, Предикат);
Если Не Результат Тогда
Контекст = Контекст();
СгенерироватьОшибкуУтверждения(Контекст, Предикат, "содержит записи");
КонецЕсли;
Возврат ЮТУтвержденияИБ;
КонецФункции
// Проверяет отсутствие в таблице записей удовлетворяющих условиям
//
// Параметры:
// Предикат - ОбщийМодуль - Условия сформированные с использованием см. ЮТест.Предикат
// - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
// - см. ЮТФабрика.ВыражениеПредиката
// - Неопределено - Проверит, что таблица пустая
// ОписаниеУтверждения - Строка - Описание конкретного утверждения
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания
Функция НеСодержитЗаписи(Знач Предикат = Неопределено, Знач ОписаниеУтверждения = Неопределено) Экспорт
Контекст = Контекст();
УстановитьОписаниеПроверки(Контекст, ОписаниеУтверждения);
Результат = НЕ ЮТЗапросы.ТаблицаСодержитЗаписи(Контекст.ОбъектПроверки.Значение, Предикат);
Если Не Результат Тогда
Контекст = Контекст();
СгенерироватьОшибкуУтверждения(Контекст, Предикат, "не содержит записи");
КонецЕсли;
Возврат ЮТУтвержденияИБ;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Контекст
// Контекст.
//
// Возвращаемое значение:
// см. НовыйКонтекст
Функция Контекст()
//@skip-check constructor-function-return-section
Возврат ЮТКонтекст.ЗначениеКонтекста(ИмяКонтекста());
КонецФункции
// Инициализирует контекст
//
// Параметры:
// ИмяТаблицы - Строка
//
// Возвращаемое значение:
// см. ЮТФабрика.ОписаниеПроверки
Функция НовыйКонтекст(ИмяТаблицы)
Контекст = ЮТФабрика.ОписаниеПроверки(ИмяТаблицы);
Возврат Контекст;
КонецФункции
Функция ИмяКонтекста()
Возврат "КонтекстУтвержденияИБ";
КонецФункции
#КонецОбласти
Процедура СгенерироватьОшибкуУтверждения(Контекст, Предикат, Сообщение)
Если Предикат <> Неопределено Тогда
ПредставлениеПредиката = ЮТПредикатыКлиентСервер.ПредставлениеПредикатов(Предикат, ", ", "`%1`");
КонецЕсли;
Если ЗначениеЗаполнено(ПредставлениеПредиката) Тогда
СообщениеОбОшибке = СтрШаблон("%1 с %2", Сообщение, ПредставлениеПредиката);
Иначе
СообщениеОбОшибке = Сообщение;
КонецЕсли;
ЮТРегистрацияОшибок.СгенерироватьОшибкуУтверждения(Контекст, СообщениеОбОшибке, Неопределено, "проверяемая таблица");
КонецПроцедуры
Процедура УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки)
Контекст.ОписаниеПроверки = ОписаниеПроверки;
КонецПроцедуры
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4cee0d2d-0eb6-484c-9fd3-fcf877979da8">
<name>ЮТУтвержденияИБ</name>
<synonym>
<key>ru</key>
<value>Утверждения ИБ</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -540,6 +540,50 @@
КонецФункции
// Формирует описание проверяемого значения.
// Используется в утверждения для формирования дружелюбного сообщения об ошибке.
//
// Параметры:
// ПроверяемоеЗначение - Произвольный - Проверяемое значение
//
// Возвращаемое значение:
// Структура - Описание проверяемого значения:
// * Значение - Произвольный
// * Представление - Строка - Представление объекта
// - Неопределено - Если не указано тогда используется платформенное предсталение (`Строка(Значение)`)
// * ИмяСвойства - Строка, Число, Неопределено - Имя проверяемого реквизита, индекса
Функция ОписаниеПроверяемогоЗначения(ПроверяемоеЗначение) Экспорт
Описание = Новый Структура();
Описание.Вставить("Значение", ПроверяемоеЗначение);
Описание.Вставить("Представление", Неопределено);
Описание.Вставить("ИмяСвойства", Неопределено);
Возврат Описание;
КонецФункции
// Описание проверки.
//
// Параметры:
// ПроверяемоеЗначение - Произвольный
//
// Возвращаемое значение:
// Структура - Описание проверки:
// * ОбъектПроверки - см. ОписаниеПроверяемогоЗначения
// * ПрефиксОшибки - Строка, Неопределено -
// * ОписаниеПроверки - Строка, Неопределено -
Функция ОписаниеПроверки(ПроверяемоеЗначение) Экспорт
Описание = Новый Структура();
Описание.Вставить("ОбъектПроверки", ОписаниеПроверяемогоЗначения(ПроверяемоеЗначение));
Описание.Вставить("ПрефиксОшибки", Неопределено);
Описание.Вставить("ОписаниеПроверки", Неопределено);
Возврат Описание;
КонецФункции
#КонецОбласти
#Область КонструкторыКонтекстов

View File

@ -24,7 +24,7 @@
// Возвращает API формирования утверждения для проверки теста.
//
// Параметры:
// ПроверяемоеЗначение - Произвольный - Проверяемое фактическое значение
// ПроверяемоеЗначение - Произвольный - Проверяемое фактическое значение
// Сообщение - Строка - Описание проверки, которое будет выведено при возникновении ошибки
//
// Возвращаемое значение:
@ -35,6 +35,20 @@
КонецФункции
// Возвращает API формирования утверждения для проверки данных базы.
//
// Параметры:
// ИмяТаблицы - Произвольный - Имя таблицы базы, например, `Справочник.Пользователи`, `Документ.ПКО`, `РегистрСведений.ИнформацияОбОшибках`
// Сообщение - Строка - Описание проверки, которое будет выведено при возникновении ошибки
//
// Возвращаемое значение:
// ОбщийМодуль - Утверждения для проверки данных базы, см. ЮТУтвержденияИБ
Функция ОжидаетЧтоТаблицаБазы(ИмяТаблицы, Сообщение = "") Экспорт
Возврат ЮТУтвержденияИБ.ЧтоТаблица(ИмяТаблицы, Сообщение);
КонецФункции
// Возвращает API для работы с тестовыми данными.
//
// Возвращаемое значение:
@ -115,6 +129,7 @@
// Неопределено - Если метод вызывается за рамками тестового набора
Функция КонтекстТестовогоНабора() Экспорт
//@skip-check constructor-function-return-section
Возврат ЮТКонтекст.КонтекстНабора();
КонецФункции
@ -126,8 +141,8 @@
//
// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеВсехТестов`.
// Возвращаемое значение:
// Структура - Контекст тестового модуля
// Неопределено - Если метод вызывается за рамками тестового модуля
// - Структура - Контекст тестового модуля
// - Неопределено - Если метод вызывается за рамками тестового модуля
Функция КонтекстМодуля() Экспорт
Возврат ЮТКонтекст.КонтекстМодуля();

View File

@ -40,6 +40,9 @@
<commonModules>CommonModule.МокитоПроверки</commonModules>
<commonModules>CommonModule.МокитоСлужебный</commonModules>
<commonModules>CommonModule.ЮТест</commonModules>
<commonModules>CommonModule.ЮТЗапросы</commonModules>
<commonModules>CommonModule.ЮТЗапросыВызовСервера</commonModules>
<commonModules>CommonModule.ЮТЗапросыКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТИсполнительКлиент</commonModules>
<commonModules>CommonModule.ЮТИсполнительКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТИсполнительСервер</commonModules>
@ -74,6 +77,7 @@
<commonModules>CommonModule.ЮТТестовыеДанныеСлужебный</commonModules>
<commonModules>CommonModule.ЮТТесты</commonModules>
<commonModules>CommonModule.ЮТУтверждения</commonModules>
<commonModules>CommonModule.ЮТУтвержденияИБ</commonModules>
<commonModules>CommonModule.ЮТФабрика</commonModules>
<commonModules>CommonModule.ЮТФайлы</commonModules>
<commonModules>CommonModule.ЮТФильтрация</commonModules>

View File

@ -14,6 +14,10 @@
<content>CommonModule.МокитоПроверки</content>
<content>CommonModule.МокитоСлужебный</content>
<content>CommonModule.ЮТест</content>
<content>CommonModule.ЮТЗапросы</content>
<content>CommonModule.ЮТЗапросыВызовСервера</content>
<content>CommonModule.ЮТЗапросыКлиентСервер</content>
<content>CommonModule.ЮТИсполнительКлиент</content>
<content>CommonModule.ЮТИсполнительКлиентСервер</content>
<content>CommonModule.ЮТИсполнительСервер</content>
<content>CommonModule.ЮТКонструкторВариантов</content>
@ -27,6 +31,7 @@
<content>CommonModule.ЮТМетаданные</content>
<content>CommonModule.ЮТМетаданныеПовтИсп</content>
<content>CommonModule.ЮТМетаданныеСервер</content>
<content>CommonModule.ЮТНастройкиВыполнения</content>
<content>CommonModule.ЮТОбщий</content>
<content>CommonModule.ЮТОбщийВызовСервера</content>
<content>CommonModule.ЮТОтчет</content>
@ -34,15 +39,21 @@
<content>CommonModule.ЮТОтчетJUnit</content>
<content>CommonModule.ЮТПараметрыЗапуска</content>
<content>CommonModule.ЮТПовторногоИспользования</content>
<content>CommonModule.ЮТПредикаты</content>
<content>CommonModule.ЮТПредикатыКлиентСервер</content>
<content>CommonModule.ЮТРасширения</content>
<content>CommonModule.ЮТРегистрацияОшибок</content>
<content>CommonModule.ЮТСобытия</content>
<content>CommonModule.ЮТСравнениеКлиентСервер</content>
<content>CommonModule.ЮТСравнениеСервер</content>
<content>CommonModule.ЮТТестовыеДанные</content>
<content>CommonModule.ЮТТестовыеДанныеВызовСервера</content>
<content>CommonModule.ЮТТестовыеДанныеСлужебный</content>
<content>CommonModule.ЮТТесты</content>
<content>CommonModule.ЮТУтверждения</content>
<content>CommonModule.ЮТУтвержденияИБ</content>
<content>CommonModule.ЮТФабрика</content>
<content>CommonModule.ЮТФайлы</content>
<content>CommonModule.ЮТФильтрация</content>
<content>CommonModule.ЮТЧитатель</content>
<content>CommonModule.ЮТЧитательСервер</content>

View File

@ -0,0 +1,3 @@
addModuleStrictTypesAnnotation=false
createModuleStructure=true
eclipse.preferences.version=1

View File

@ -0,0 +1,58 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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);
;
КонецПроцедуры
#Область События
Процедура ПередВсемиТестами() Экспорт
КонецПроцедуры
Процедура ПередКаждымТестом() Экспорт
КонецПроцедуры
Процедура ПослеКаждогоТеста() Экспорт
КонецПроцедуры
Процедура ПослеВсехТестов() Экспорт
КонецПроцедуры
#КонецОбласти
Процедура ТестовыйМетод() Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,156 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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");
ЮТест.ОжидаетЧто(ЮТЗапросы.РезультатЗапроса(ОписаниеЗапроса))
.ИмеетДлину(1)
.Свойство("[0].Наименование").Равно(ДанныеСправочника.Наименование)
.Свойство("[0].Число").Равно(2);
КонецПроцедуры
Процедура РезультатПустой() Экспорт
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары")
.Фикция("Наименование")
.Фикция("Поставщик");
Ссылка = Конструктор.Записать();
ДанныеСправочника = Конструктор.ДанныеОбъекта();
ОписаниеЗапроса = ЮТЗапросы.ОписаниеЗапроса();
ОписаниеЗапроса.ИмяТаблицы = "Справочник.Товары";
ОписаниеЗапроса.Условия.Добавить("Ссылка = &Ссылка");
ОписаниеЗапроса.ЗначенияПараметров.Вставить("Ссылка", Ссылка);
ЮТест.ОжидаетЧто(ЮТЗапросы.РезультатПустой(ОписаниеЗапроса)).ЭтоЛожь();
ОписаниеЗапроса.Условия.Добавить("ПометкаУдаления");
ЮТест.ОжидаетЧто(ЮТЗапросы.РезультатПустой(ОписаниеЗапроса)).ЭтоИстина();
КонецПроцедуры
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="66558076-11dd-4a76-8135-43dd8071ba62">
<name>ОМ_ЮТЗапросы</name>
<synonym>
<key>ru</key>
<value>О м ЮТЗапросы</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -96,21 +96,21 @@
ДанныеКонтекста = ЮТКонтекст.КонтекстПроверки();
ЮТУтверждения.Что(ДанныеКонтекста, "Свойство не установлено")
.Свойство("ИмяСвойства").Равно(Неопределено);
.Свойство("ОбъектПроверки.ИмяСвойства").Равно(Неопределено);
ЮТУтверждения.Что(Объект)
.Свойство("Примитив");
ДанныеКонтекста = ЮТКонтекст.КонтекстПроверки();
ЮТУтверждения.Что(ДанныеКонтекста, "Свойство установлено")
.Свойство("ИмяСвойства").Равно("Примитив");
.Свойство("ОбъектПроверки.ИмяСвойства").Равно("Примитив");
ЮТУтверждения.Что(Объект)
.Свойство("Объект.Первый");
ДанныеКонтекста = ЮТКонтекст.КонтекстПроверки();
ЮТУтверждения.Что(ДанныеКонтекста, "Составное свойство")
.Свойство("ИмяСвойства").Равно("Объект.Первый");
.Свойство("ОбъектПроверки.ИмяСвойства").Равно("Объект.Первый");
// Негативные тесты
Попытка

View File

@ -0,0 +1,183 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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`, но это не так.", Префикс, Наименование))
.Добавить(ТаблицаБезЗаписей, МетодСодержитЗаписи, Неопределено,
Префикс + "`Справочник.МобильныеУстройства` содержит записи, но это не так.")
.Добавить(ТаблицаБезЗаписей, МетодСодержитЗаписи, Неопределено,
СтрШаблон("Описание проверки: %1`Справочник.МобильныеУстройства` содержит записи, но это не так.", СтрочнаяПерваяБуква(Префикс)), "Описание проверки")
.Добавить(ТаблицаБезЗаписей, МетодСодержитЗаписи, Неопределено,
СтрШаблон("Описание проверки: %1`Справочник.МобильныеУстройства` содержит записи, но это не так.", СтрочнаяПерваяБуква(Префикс)), , "Описание проверки")
.Добавить(ТаблицаБезЗаписей, МетодСодержитЗаписи, Неопределено,
СтрШаблон("Описание проверки: %1`Справочник.МобильныеУстройства` содержит записи, но это не так.", СтрочнаяПерваяБуква(Префикс)), "Описание", "проверки")
;
Индекс = 1;
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
ЮТест.ОжидаетЧтоТаблицаБазы(Вариант.ИмяТаблицы, Вариант.ОписаниеПроверки);
Ошибка = Неопределено;
Попытка
Если Вариант.Метод = МетодНеСодержитЗаписи Тогда
ЮТУтвержденияИБ.НеСодержитЗаписи(Вариант.Предикат, Вариант.ОписаниеУтверждения);
ИначеЕсли Вариант.Метод = МетодСодержитЗаписи Тогда
ЮТУтвержденияИБ.СодержитЗаписи(Вариант.Предикат, Вариант.ОписаниеУтверждения);
КонецЕсли;
Исключение
Ошибка = ИнформацияОбОшибке();
КонецПопытки;
ПроверитьОшибкуУтверждения(Индекс, Ошибка, Вариант.ОжидаемоеСообщение);
Индекс = Индекс + 1;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ПроверитьОшибкуУтверждения(Индекс, ИнформацияОбОшибке, ОжидаемоеОписание) Экспорт
ЮТест.ОжидаетЧто(ИнформацияОбОшибке, "Вариант " + Индекс)
.ЭтоНеНеопределено()
.Свойство("Описание")
.НачинаетсяС("[Failed]")
.Содержит(ОжидаемоеОписание);
КонецПроцедуры
Функция СтрочнаяПерваяБуква(Строка)
Возврат НРег(Лев(Строка, 1)) + Сред(Строка, 2);
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="7cfe3d9e-2406-4cd6-a8da-cfae81d0eef1">
<name>ОМ_ЮТУтвержденияИБ</name>
<synonym>
<key>ru</key>
<value>ЮТУтверждения ИБ</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -93,7 +93,7 @@
Наборы = ЮТЧитатель.ЗагрузитьТесты(ПараметрыЗапуска);
ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests")
.ИмеетДлину(15);
.ИмеетДлину(17);
КонецПроцедуры

View File

@ -29,6 +29,7 @@
<commonModules>CommonModule.ОМ_Общий</commonModules>
<commonModules>CommonModule.ОМ_ОшибкаЗагрузкиСценариев</commonModules>
<commonModules>CommonModule.ОМ_ЮТест</commonModules>
<commonModules>CommonModule.ОМ_ЮТЗапросы</commonModules>
<commonModules>CommonModule.ОМ_ЮТКонструкторТестовыхДанных</commonModules>
<commonModules>CommonModule.ОМ_ЮТПредикатыКлиентСервер</commonModules>
<commonModules>CommonModule.ОМ_ЮТСравнениеКлиентСервер</commonModules>
@ -36,6 +37,7 @@
<commonModules>CommonModule.ОМ_ЮТТестовыеДанныеСлужебный</commonModules>
<commonModules>CommonModule.ОМ_ЮТТесты</commonModules>
<commonModules>CommonModule.ОМ_ЮТУтверждения</commonModules>
<commonModules>CommonModule.ОМ_ЮТУтвержденияИБ</commonModules>
<commonModules>CommonModule.ОМ_ЮТФильтрация</commonModules>
<commonModules>CommonModule.ОМ_ЮТЧитатель</commonModules>
<commonModules>CommonModule.ПомощникТестированияВызовСервера</commonModules>