1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-11-30 08:36:50 +02:00

Merge pull request #353 from bia-technologies/feature/61

61 / Фильтрация тестов
This commit is contained in:
Koryakin Aleksey 2024-05-17 21:49:30 +03:00 committed by GitHub
commit 8a207fbfbc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
56 changed files with 1061 additions and 406 deletions

28
.vscode/settings.json vendored
View File

@ -1,8 +1,16 @@
{
"cSpell.words": [
"абвгдеёжзийклмнопрстуфхцчшщъыьэюя",
"алиас",
"валидировать",
"гггг",
"гендером",
"Дозаполнить",
"замокированного",
"Инкрементирует",
"КоллекцияjUnit",
"логирвания",
"МассивjUnit",
"Ментейнер",
"моками",
"моки",
@ -17,20 +25,40 @@
"Мокито",
"моков",
"Неопределено",
"ОКАТО",
"Переиспользование",
"Повт",
"помогаторы",
"пресетов",
"Регистронезависимое",
"релизный",
"Сериализатор",
"сериализацию",
"сериализуемыми",
"сериализуемых",
"СтрокуjUnit",
"СHTTP",
"ТИПЗНАЧЕНИЯ",
"фейкового",
"фейковых",
"фича",
"Человекочитаемое",
"юнит",
"ЮТHTTP",
"Addin",
"autonumber",
"bellerage",
"BSLLS",
"classname",
"consructor",
"dumpjson",
"Functest",
"jUnit",
"mindmap",
"tchk",
"testcase",
"testsuite",
"testsuites",
"Wiremock",
"XDTO",
"yaxunit"

View File

@ -21,11 +21,10 @@
|---------------|---------|-----------------------|------------------------------------------------------------------------------|
| `extensions` | `Array` | `["tests"]` | Список имен расширений, из которых грузятся тесты |
| `modules` | `Array` | `Null` | Список имен модулей, из которых грузятся тесты |
| `tests` | `Array` | `Null` | Список полных путей к исполняемым тестам (`[имя модуля.имя теста]`) |
| `suites` | `Array` | `Null` | **Не реализованно.** Список имен тестовых наборов, которые будут запускаться |
| `tags` | `Array` | `Null` | **Не реализованно.** Список тегов, которые будут запускаться |
| `tests` | `Array` | `Null` | Список полных путей к исполняемым тестам (`[имя модуля.имя теста{.Имя контекста}]`) |
| `suites` | `Array` | `Null` | Список имен тестовых наборов, которые будут запускаться |
| `tags` | `Array` | `Null` | Список тегов, которые будут запускаться |
| `contexts` | `Array` | `Null` | Список имен контекстов исполнения, в которых будут запускаться тесты |
| `paths` | `Array` | `Null` | **Не реализованно.** Список полных путей к исполняемым тестам |
## Параметры логирования
@ -34,7 +33,7 @@
| `file` | `String` | `""` | Путь к файлу лога |
| `enable` | `Boolean` | `Null` | Использование логирвания.<br/>Если не указан, зависит от параметра `file` и `console`, если установлены - вкл, если нет - выкл |
| `console` | `Boolean` | `false` | Вывод лога в stdout (консоль) |
| `level` | `String` | `"debug"` | Уровень детализации лога. Возможные значения: `"debug"`, `"info"`, `"error"` |
| `level` | `String` | `"debug"` | Уровень детализации лога. Возможные значения: `"debug"`, `"info"`, `"warning"`, `"error"` |
Примеры:

View File

@ -1,8 +1,4 @@
{
"version": 1,
"settings": {
"common-module-type": {
"enabled": false
}
}
"settings": {}
}

View File

@ -214,7 +214,7 @@
// BSLLS:NumberOfParams-on
// BSLLS:NumberOfOptionalParams-on
// Возврщает идентификатор значения входного параметра по умолчанию.
// Возвращает идентификатор значения входного параметра по умолчанию.
//
// Возвращаемое значение:
// Строка

View File

@ -37,7 +37,7 @@
// ОбщийМодуль - Этот же модуль, для замыкания
Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова);
ПозиционированиеНаМетоде(ИмяМетода, ПараметрыВызова);
Возврат МокитоПроверки;
@ -53,7 +53,7 @@
// Массив из см. МокитоСлужебный.СтруктураВызоваМетода - Вызовы метода
Функция Вызовы(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова);
ПозиционированиеНаМетоде(ИмяМетода, ПараметрыВызова);
Возврат СтатистикаВызовов();
@ -249,7 +249,7 @@
КонецФункции
Процедура СпозиционироватьсяНаМетоде(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено)
Процедура ПозиционированиеНаМетоде(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено)
Параметры = ПараметрыПроверки();

View File

@ -69,7 +69,7 @@
КонецФункции
// Возвращяет записи результат запроса
// Возвращает записи результат запроса
//
// Параметры:
// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса

View File

@ -70,6 +70,60 @@
КонецПроцедуры
// Создает новый массив путем объединения входных.
//
// Параметры:
// Коллекция1 - Массив Из Произвольный
// Коллекция2 - Массив Из Произвольный
// Коллекция3 - Массив Из Произвольный
// Коллекция4 - Массив Из Произвольный
//
// Возвращаемое значение:
// Массив из Произвольный - Результат объединения
Функция ОбъединитьМассивы(Коллекция1, Коллекция2, Коллекция3 = Неопределено, Коллекция4 = Неопределено) Экспорт
Коллекции = Новый Массив;
Если ЗначениеЗаполнено(Коллекция1) Тогда
Коллекции.Добавить(Коллекция1);
КонецЕсли;
Если ЗначениеЗаполнено(Коллекция2) Тогда
Коллекции.Добавить(Коллекция2);
КонецЕсли;
Если ЗначениеЗаполнено(Коллекция3) Тогда
Коллекции.Добавить(Коллекция3);
КонецЕсли;
Если ЗначениеЗаполнено(Коллекция4) Тогда
Коллекции.Добавить(Коллекция4);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Коллекции) Тогда
Возврат Новый Массив;
КонецЕсли;
Размер = 0;
Для Каждого Коллекция Из Коллекции Цикл
Размер = Размер + Коллекция.Количество();
КонецЦикла;
Результат = Новый Массив(Размер);
Позиция = 0;
Для Каждого Коллекция Из Коллекции Цикл
Размер = Размер + Коллекция.Количество();
Для Инд = 0 По Коллекция.ВГраница() Цикл
Результат[Позиция] = Коллекция[Инд];
Позиция = Позиция + 1;
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
// Создает копию экземпляра указанного объекта.
// Примечание:
// Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.).
@ -215,7 +269,7 @@
//
// Параметры:
// Коллекция - Произвольный - Итерируемая коллекция
// ИмяРеквизита - Строка - Имя реквизата элементов коллекции
// ИмяРеквизита - Строка - Имя реквизита элементов коллекции
//
// Возвращаемое значение:
// Массив из Произвольный
@ -391,6 +445,31 @@
КонецФункции
// Создает структуру из массива.
// Ключами будут элементы массива, а значением каждого элемента структуры - параметр `ЗначениеСтруктуры`
//
// Параметры:
// Значения - Массив из Строка
// ЗначениеСтруктуры - Произвольный
//
// Возвращаемое значение:
// Структура
Функция МассивВСтруктуру(Значения, ЗначениеСтруктуры = Неопределено) Экспорт
Результат = Новый Структура();
Если НЕ ЗначениеЗаполнено(Значения) Тогда
Возврат Результат;
КонецЕсли;
Для Каждого Значение Из Значения Цикл
Результат.Вставить(Значение, ЗначениеСтруктуры);
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -95,7 +95,7 @@
КонецФункции
// Подключает внещнюю компоненту из макета
// Подключает внешнюю компоненту из макета
//
// Параметры:
// ИмяМакета - Строка - Имя макета, в котором хранится компонента

View File

@ -206,7 +206,7 @@
|<registry xmlns=""http://v8.1c.ru/8.2/addin/registry"">
| <component path=""%1"" type=""native""/>
|</registry>", ИмяФайла);
ИначеЕсли СтрНайти(ДанныеРеестра, СтрШаблон("path=""%1""", ИмяФайла)) <> 0 Тогда // Компонента уже зарегистрированна
ИначеЕсли СтрНайти(ДанныеРеестра, СтрШаблон("path=""%1""", ИмяФайла)) <> 0 Тогда // Компонента уже зарегистрирована
Возврат Ложь;
Иначе // Добавляем компоненту
Запись = СтрШаблон(" <component path=""%1"" type=""native""/>", ИмяФайла);

View File

@ -144,10 +144,9 @@
//
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
// ИсполняемыеСценарии - см. ЮТТесты.СценарииМодуля
Процедура ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт
Процедура ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля) Экспорт
ЮТЛогирование.Информация(СтрШаблон("Загрузка сценариев модуля завершена `%1`", МетаданныеМодуля.Имя));
ЮТЛогирование.Информация(СтрШаблон("Загрузка сценариев модуля завершена `%1`", ОписаниеТестовогоМодуля.МетаданныеМодуля.Имя));
КонецПроцедуры

View File

@ -127,7 +127,7 @@
КонецФункции
// Возвращяет набор регистров движений документа
// Возвращает набор регистров движений документа
//
// Параметры:
// Документ - ОбъектМетаданных

View File

@ -76,7 +76,7 @@
// ИмяНастройки - Строка - Имя настройки, см. ЮТФабрика.ПараметрыИсполненияТеста
// ЗначениеПоУмолчанию - Произвольный - Значение по умолчанию
// СтрогийУровеньИсполнения - Булево - Признак, стоит ли проверять наличие настройки у родительских элементов.
// Ложь - По умолчанию, будет выполнен поиск и получение значения для родетелей (набор, модуль), если значения для текущего элемента не установлено.
// Ложь - По умолчанию, будет выполнен поиск и получение значения для родителей (набор, модуль), если значения для текущего элемента не установлено.
// Истина - Получение настройки только для текущего элемента.
//
// Возвращаемое значение:

View File

@ -122,7 +122,7 @@
#Область ДатаВремя
// Человекочитаемое представление продолжительности
// Формирует представление продолжительности в удобном для восприятия виде, с выделением минут секунд и тд.
//
// Параметры:
// Продолжительность - Число - Продолжительность в миллисекундах
@ -335,7 +335,7 @@
КонецПроцедуры
// Преостанавливает поток выполнения на указанное количество секунд
// Приостанавливает поток выполнения на указанное количество секунд
//
// Параметры:
// Время - Число - Продолжительность паузы в секундах, возможно указывать дробное значение
@ -376,7 +376,7 @@
КонецПроцедуры
// Возвращяет макет
// Возвращает макет
//
// Параметры:
// ИмяМакета - Строка - Возможные значения

View File

@ -43,7 +43,8 @@
Для Каждого РезультатТеста Из Набор.Тесты Цикл
Попытка
СохранитьОтчетТеста(РезультатТеста, Набор, Модуль, Каталог);
Описание = ОписаниеТеста(РезультатТеста, Набор, Модуль);
СохранитьОтчетТеста(Описание, Каталог);
Исключение
ЮТЛогирование.Ошибка("Ошибка сохранения отчета в формате Allure. " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
@ -63,9 +64,7 @@
#Область СлужебныеПроцедурыИФункции
#Если НЕ ВебКлиент Тогда
Процедура СохранитьОтчетТеста(РезультатТеста, Набор, Модуль, Каталог)
Описание = ОписаниеТеста(РезультатТеста, Набор, Модуль);
Процедура СохранитьОтчетТеста(Описание, Каталог)
ИмяФайла = ЮТФайлы.ОбъединитьПути(Каталог, Описание.uuid + "-result.json");
Запись = Новый ЗаписьJSON();
@ -81,6 +80,8 @@
ПредставлениеРежима = СтрШаблон(" [%1]", РезультатТеста.Режим);
ПолныйИдентификаторТеста = СтрШаблон("%1_%2_%3", РезультатТеста.НомерВНаборе, РезультатТеста.ПолноеИмяМетода, РезультатТеста.Режим);
Теги = ЮТОтчетСлужебныйКлиентСервер.УникальныеТеги(Модуль, Набор, РезультатТеста);
Описание = НовыйОписаниеТеста();
Описание.fullName = РезультатТеста.ПолноеИмяМетода + ПредставлениеРежима;
Описание.name = РезультатТеста.Метод + ПредставлениеРежима;
@ -115,7 +116,7 @@
ДобавитьМетку(Описание, "tag", РезультатТеста.Режим);
Для Каждого Тег Из РезультатТеста.Теги Цикл
Для Каждого Тег Из Теги Цикл
ДобавитьМетку(Описание, "tag", Тег);
КонецЦикла;

View File

@ -71,7 +71,7 @@
Для Каждого Набор Из Модуль.НаборыТестов Цикл
ЗаписатьНабор(ЗаписьXML, Набор, Номер);
ЗаписатьНабор(ЗаписьXML, Модуль, Набор, Номер);
Номер = Номер + 1;
КонецЦикла;
@ -172,11 +172,14 @@
КонецЕсли;
ЗаписатьСвойства(ЗаписьXML, Новый Структура, РезультатТеста.Теги);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура ЗаписатьОшибку(ЗаписьXML, ОписаниеОшибки)
Сообщение = СообщениеОбОшибке(ОписаниеОшибки);
ЗаписьXML.ЗаписатьНачалоЭлемента("error");
Если Сообщение <> Неопределено Тогда
@ -192,9 +195,10 @@
КонецЕсли;
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура ЗаписатьНабор(ЗаписьXML, Набор, Номер)
Процедура ЗаписатьНабор(ЗаписьXML, Модуль, Набор, Номер)
КоличествоТестов = 0;
КоличествоПропущенных = 0;
@ -234,12 +238,12 @@
КонецЦикла;
Для Каждого РезультатТеста Из Набор.Тесты Цикл
ЗаписатьТест(ЗаписьXML, РезультатТеста);
КонецЦикла;
ЗаписатьСвойства(ЗаписьXML, Новый Структура("context", Набор.Режим));
Теги = ЮТКоллекции.ОбъединитьМассивы(Модуль.Теги, Набор.Теги);
ЗаписатьСвойства(ЗаписьXML, Новый Структура("context", Набор.Режим), Теги);
ЗаписьXML.ЗаписатьКонецЭлемента(); // testsuite
КонецПроцедуры
@ -328,7 +332,11 @@
КонецФункции
Процедура ЗаписатьСвойства(ЗаписьXML, Свойства)
Процедура ЗаписатьСвойства(ЗаписьXML, Свойства, Теги = Неопределено)
Если НЕ ЗначениеЗаполнено(Свойства) И НЕ ЗначениеЗаполнено(Теги) Тогда
Возврат;
КонецЕсли;
ЗаписьXML.ЗаписатьНачалоЭлемента("properties");
@ -339,8 +347,27 @@
ЗаписьXML.ЗаписатьКонецЭлемента(); // property
КонецЦикла;
ЗаписатьТеги(ЗаписьXML, Теги);
ЗаписьXML.ЗаписатьКонецЭлемента(); // properties
КонецПроцедуры
Процедура ЗаписатьТеги(ЗаписьXML, НаборТегов)
Если НЕ ЗначениеЗаполнено(НаборТегов) Тогда
Возврат;
КонецЕсли;
УникальныеТеги = ЮТСтроки.УникальныеСтроки(НаборТегов);
Для Каждого Тег Из УникальныеТеги Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("property");
ЗаписьXML.ЗаписатьАтрибут("name", "tag");
ЗаписьXML.ЗаписатьАтрибут("value", ЗначениеВСтрокуjUnit(Тег));
ЗаписьXML.ЗаписатьКонецЭлемента(); // property
КонецЦикла;
КонецПроцедуры
#КонецОбласти

View File

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

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="1b07b92f-e8b1-4683-af00-493118e65411">
<name>ЮТОтчетСлужебныйКлиентСервер</name>
<synonym>
<key>ru</key>
<value>Отчет служебный клиент сервер</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -24,7 +24,7 @@
// Параметры:
// БИК - Строка - БИК банка
// КодВалюты - Строка - Код валюты
// ЮрЛицо - Булево - Генерация счета юрлица, иначе физ лица
// ЮрЛицо - Булево - Генерация счета юр. лица, иначе физ. лица
//
// Возвращаемое значение:
// Строка - Номер счета

View File

@ -101,7 +101,7 @@
КонецФункции
// Формирует случаный ИНН физического лица
// Формирует случайный ИНН физического лица
//
// Возвращаемое значение:
// Строка
@ -109,16 +109,16 @@
Возврат ЮТТестовыеДанные.Подражатель().Компании().ИНН(, Истина);
КонецФункции
// Формирует случаный СНИЛС.
// Формирует случайный СНИЛС.
// https://ru.wikipedia.org/wiki/Контрольное_число
// Возвращаемое значение:
// Строка
Функция СНИЛС() Экспорт
ЧастиСнилс = Новый Массив();
ФорматаяСтрока = "ЧЦ=3; ЧН=000; ЧВН=;";
ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(100, 999), ФорматаяСтрока));
ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(0, 999), ФорматаяСтрока));
ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(0, 999), ФорматаяСтрока));
ФорматЧисла = "ЧЦ=3; ЧН=000; ЧВН=;";
ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(100, 999), ФорматЧисла));
ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(0, 999), ФорматЧисла));
ЧастиСнилс.Добавить(Формат(ЮТТестовыеДанные.СлучайноеЧисло(0, 999), ФорматЧисла));
ИтогоСтрокой = СтрСоединить(ЧастиСнилс, "");
ДлинаОсновнойЧасти = СтрДлина(ИтогоСтрокой);

View File

@ -42,7 +42,7 @@
КонецФункции
// Устанавливает имя свойства, все последующие проверки будут относится к нему.
// Это алиас для см. Реквизит
// Это псевдоним (алиас) для см. Реквизит
//
// Параметры:
// ИмяСвойства - Строка - Имя реквизита

View File

@ -25,7 +25,7 @@
// Предикаты - Массив Из см. ЮТФабрика.ВыражениеПредиката
// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке
// ПараметрыСравнения - Неопределено
// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры
// - Структура - Параметры сравнения значений, для разных выражений используются свои параметры
//
// Возвращаемое значение:
// см. ЮТФабрикаСлужебный.ОписаниеРезультатаПроверки

View File

@ -18,7 +18,7 @@
#Область ПрограммныйИнтерфейс
// Добавляет пяснение возникшей ошибки, которое будет довлено в отчет.
// Добавляет пояснение возникшей ошибки, которое будет добавлено в отчет.
// Используется перед выбросом исключения, чтобы добавить полезной информации об ошибке, но при этом не ломать стек.
//
// Параметры:

View File

@ -211,11 +211,10 @@
// После чтения сценариев модуля.
// Позволяет настроить/обработать параметры загруженных настроек тестов модуля
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
// ИсполняемыеСценарии - см. ЮТТестыСлужебный.СценарииМодуля
Процедура ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт
// ОписаниеТестовогоМодуля - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Процедура ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля) Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(МетаданныеМодуля, ИсполняемыеСценарии);
Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеТестовогоМодуля);
ВызватьПодключаемыйОбработчикСобытия("ПослеЧтенияСценариевМодуля", "ЗагрузкаТестов", Параметры);
КонецПроцедуры

View File

@ -60,7 +60,7 @@
#Область СлужебныеПроцедурыИФункции
// https://github.com/vanessa-opensource/add
// портирован из Functest
// перенесен из Functest
Функция ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент, УчитыватьТолькоВидимыеКолонки = Ложь, УчитыватьТолькоВидимыеСтроки = Ложь)
ТипТабличногоДокумента = ТипЗнч(ТабличныйДокумент);
@ -79,7 +79,7 @@
Колонки = НоваяТаблицаЗначений.Колонки;
ТипСтрока = Новый ОписаниеТипов("Строка");
// TODO При определении видимости не учитывается наличие нескольких форматов строк, сейчас видимоcть колонки определяется по формату первой строки
// TODO При определении видимости не учитывается наличие нескольких форматов строк, сейчас видимость колонки определяется по формату первой строки
УчитываемыеКолонки = Новый Массив;
Для НомерКолонки = 1 По НомерПоследнейКолонки Цикл
ОбластьКолонки = ТабличныйДокумент.Область(0, НомерКолонки, 1, НомерКолонки);

View File

@ -393,7 +393,7 @@
КонецФункции
#Область РеализацияПредикатор
#Область РеализацияПредикатов
Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения) Экспорт
@ -413,7 +413,7 @@
// СтатусПроверки - см. ЮТФабрикаСлужебный.ОписаниеРезультатаПроверки
// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке
// ПараметрыСравнения - Неопределено
// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры
// - Структура - Параметры сравнения значений, для разных выражений используются свои параметры
Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
// BSLLS:CognitiveComplexity-off

View File

@ -246,6 +246,36 @@
КонецФункции
// Из набора строк формирует набор уникальных строк.
// Сравнение происходит без учета регистра.
//
// Параметры:
// НеУникальныеСтроки - Массив Из Строка
//
// Возвращаемое значение:
// Массив Из Строка - Уникальные строки
Функция УникальныеСтроки(НеУникальныеСтроки) Экспорт
Если НЕ ЗначениеЗаполнено(НеУникальныеСтроки) Тогда
Возврат НеУникальныеСтроки;
КонецЕсли;
Хэш = Новый Соответствие();
Результат = Новый Массив;
Для Каждого Строка Из НеУникальныеСтроки Цикл
Ключ = НРег(Строка);
Если Хэш[Ключ] = Неопределено Тогда
Результат.Добавить(Строка);
Хэш.Вставить(Ключ, 1);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -535,7 +535,7 @@
КонецФункции
// Возвращает случайное предопреленное значения объекта конфигурации.
// Возвращает случайное предопределенное значения объекта конфигурации.
//
// Параметры:
// Менеджер - Строка - Имя менеджера. Примеры: "Справочники.ВидыЦен", "Справочник.ВидыЦен"

View File

@ -40,11 +40,11 @@
ИначеЕсли Тип = Тип("Строка") Тогда
Значение = ФикстивнаяСтрока(ОписаниеТипа);
Значение = ФиктивнаяСтрока(ОписаниеТипа);
ИначеЕсли Тип = Тип("Дата") Тогда
Значение = ФикстивнаяДата(ОписаниеТипа);
Значение = ФиктивнаяДата(ОписаниеТипа);
ИначеЕсли Тип = Тип("Булево") Тогда
@ -227,7 +227,7 @@
КонецФункции
Функция ФикстивнаяСтрока(ОписаниеТипа)
Функция ФиктивнаяСтрока(ОписаниеТипа)
Если ТипЗнч(ОписаниеТипа) <> Тип("ОписаниеТипов") Тогда
Возврат ЮТТестовыеДанные.СлучайнаяСтрока(ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(100));
@ -243,7 +243,7 @@
КонецФункции
Функция ФикстивнаяДата(ОписаниеТипа)
Функция ФиктивнаяДата(ОписаниеТипа)
Интервал = 315360000; // 10 лет
//@skip-check use-non-recommended-method

View File

@ -37,6 +37,21 @@
КонецФункции
// Добавляет тег к тесту/набору/модулю
//
// Параметры:
// Тег - Строка
//
// Возвращаемое значение:
// CommonModule.ЮТТесты - Тег
Функция Тег(Тег) Экспорт
ЮТТестыСлужебный.ДобавитьТег(Тег);
Возврат ЮТТесты;
КонецФункции
// Регистрирует тест, исполняемый в контекстах, в которых доступен тестовый модуль.
// Например
//
@ -105,7 +120,7 @@
// ОбщийМодуль - Этот же модуль
Функция НастройкаИсполнения(ИмяПараметра, Значение) Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ИмяПараметра, Значение);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ИмяПараметра, Значение);
Возврат ЮТТесты;
@ -120,7 +135,7 @@
// ОбщийМодуль - Этот же модуль
Функция ВТранзакции(ВыполнятьВТранзакции = Истина) Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции, ВыполнятьВТранзакции);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции, ВыполнятьВТранзакции);
Возврат ЮТТесты;
@ -141,7 +156,7 @@
// ОбщийМодуль - Этот же модуль
Функция УдалениеТестовыхДанных(УдалятьСозданныеДанные = Истина) Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные);
Возврат ЮТТесты;
@ -156,7 +171,7 @@
// ОбщийМодуль - Этот же модуль
Функция Перед(ВыполнитьПеред = "") Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред);
Возврат ЮТТесты;
@ -171,7 +186,7 @@
// ОбщийМодуль - Этот же модуль
Функция После(ВыполнитьПосле = "") Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле);
Возврат ЮТТесты;
@ -350,15 +365,29 @@
КонецФункции
// Возволяет выполнить настройку зависимостей теста, тестового набора или модуля.
// Позволяет выполнить настройку зависимостей теста, тестового набора или модуля.
// Возвращает модуль установки зависимостей теста.
//
// Возвращаемое значение:
// CommonModule
// CommonModule - Этот же модуль
Функция ЗависитОт() Экспорт
Возврат ЮТЗависимости;
КонецФункции
// Используется для вызова произвольной функции внутри текучего интерфейса
//
// Параметры:
// _ - Произвольный
//
// Возвращаемое значение:
// CommonModule - Этот же модуль
//@skip-check bsl-variable-name-invalid
Функция Вызов(_) Экспорт
Возврат ЮТТесты;
КонецФункции
#КонецОбласти

View File

@ -20,39 +20,35 @@
Процедура ДобавитьТестовыйНабор(Имя, ТегиСтрокой) Экспорт
ИсполняемыеСценарии = СценарииМодуля();
Если НЕ ЭтоИсполняемыеСценарии(ИсполняемыеСценарии) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии";
КонецЕсли;
Если ПустаяСтрока(Имя) Тогда
ВызватьИсключение "Имя тестового набора не может быть пустым";
КонецЕсли;
Контекст = Контекст();
НовыйТестовыйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, ТегиСтрокой);
ИсполняемыеСценарии.ТестовыеНаборы.Добавить(НовыйТестовыйНабор);
Контекст.ТекущийНабор = НовыйТестовыйНабор;
Контекст.ТекущийЭлемент = НовыйТестовыйНабор;
Если Контекст = Неопределено ИЛИ НЕ Контекст.Свойство("ОписаниеМодуля") Тогда
ВызватьИсключение "Не инициализирован контекст регистрации тестов";
КонецЕсли;
ТестовыйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, ТегиСтрокой);
Контекст.ОписаниеМодуля.НаборыТестов.Добавить(ТестовыйНабор);
Контекст.ТекущийНабор = ТестовыйНабор;
Контекст.ТекущийЭлемент = ТестовыйНабор;
КонецПроцедуры
Процедура ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты) Экспорт
Если ПустаяСтрока(ИмяТестовогоМетода) Тогда
ВызватьИсключение "Имя тестового метода не может быть пустым";
КонецЕсли;
Контекст = Контекст();
Набор = Контекст.ТекущийНабор;
ЭтоИсполняемыеСценарии = ЭтоИсполняемыеСценарии(Набор);
ЭтоТестовыйНабор = ЭтоТестовыйНабор(Набор);
Если НЕ (ЭтоИсполняемыеСценарии ИЛИ ЭтоТестовыйНабор) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии или ЮТТесты.ТестовыйНабор";
КонецЕсли;
Если ПустаяСтрока(ИмяТестовогоМетода) Тогда
ВызватьИсключение "Имя тестового метода не может быть пустым";
Если Набор = Неопределено Или НЕ Набор.Свойство("Тесты") Тогда
ВызватьИсключение "Не установлен тестовый набор. Скорее всего проблема в движке";
КонецЕсли;
Тест = ОписаниеТеста(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты);
@ -74,7 +70,7 @@
КонецПроцедуры
Процедура НастройкаИсполнения(ИмяПараметра, Значение) Экспорт
Процедура УстановитьНастройкуИсполнения(ИмяПараметра, Значение) Экспорт
Контекст = Контекст();
@ -150,6 +146,13 @@
КонецПроцедуры
Процедура ДобавитьТег(ИмяТега) Экспорт
ТекущийЭлемент = Контекст().ТекущийЭлемент;
ТекущийЭлемент.Теги.Добавить(ИмяТега);
КонецПроцедуры
Функция КонтекстыВызоваКлиента() Экспорт
Режимы = ЮТФабрика.КонтекстыВызова();
@ -161,28 +164,21 @@
//
// Возвращаемое значение:
// см. ИсполняемыеСценарии
Функция СценарииМодуля() Экспорт
Функция ОписаниеМодуля() Экспорт
СценарииМодуля = Контекст().ИсполняемыеСценарии;
Результат = Новый Структура("ТестовыеНаборы, НастройкиВыполнения, Зависимости");
Результат.ТестовыеНаборы = СценарииМодуля.ТестовыеНаборы;
// TODO Нужен рефакторинг
Результат.НастройкиВыполнения = ЮТКоллекции.СкопироватьРекурсивно(СценарииМодуля.НастройкиВыполнения);
Результат.Зависимости = ЮТКоллекции.СкопироватьРекурсивно(СценарииМодуля.Зависимости);
СценарииМодуля.НастройкиВыполнения.Очистить(); // Костыль. Очистка первого набора, тк перенесено в модуль
СценарииМодуля.Зависимости.Очистить(); // Костыль. Очистка первого набора, тк перенесено в модуль
//@skip-check constructor-function-return-section
Возврат Результат;
Возврат Контекст().ОписаниеМодуля;
КонецФункции
// Контекст.
//
// Возвращаемое значение:
// Структура - Контекст:
// * ОписаниеМодуля - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Функция Контекст() Экспорт
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("КонтекстРегистрацияТестов");
//@skip-check constructor-function-return-section
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекста());
КонецФункции
@ -191,14 +187,12 @@
Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт
ИнициализироватьКонтекст(МетаданныеМодуля);
ЮТСобытияСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
КонецПроцедуры
Процедура ПослеЧтенияСценариевМодуля() Экспорт
Процедура ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля) Экспорт
Контекст = Контекст();
ЮТСобытияСлужебный.ПослеЧтенияСценариевМодуля(Контекст.МетаданныеМодуля, Контекст.ИсполняемыеСценарии);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекста(), Неопределено);
КонецПроцедуры
@ -208,36 +202,27 @@
#Область СлужебныеПроцедурыИФункции
// Исполняемые сценарии.
//
// Новое описание тестового модуля.
//
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
//
//
// Возвращаемое значение:
// Структура - Исполняемые сценарии:
// * ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы модуля
// * НастройкиВыполнения - Структура - Настройки исполнения тестов модуля
// * Зависимости - Массив Из см. ЮТФабрика.НовоеОписаниеЗависимости - Зависимости тестового модуля
Функция ИсполняемыеСценарии(МетаданныеМодуля)
// см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Функция НовоеОписаниеТестовогоМодуля(МетаданныеМодуля)
Структура = Новый Структура;
Структура.Вставить("ТестовыеНаборы", Новый Массив);
Структура.Вставить("НастройкиВыполнения", Новый Структура);
Структура.Вставить("Зависимости", Новый Массив);
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив);
Набор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
Набор.НастройкиВыполнения = Структура.НастройкиВыполнения; // Общие настройки с набором по умолчанию
Набор.Зависимости = Структура.Зависимости; // Общие зависимости с набором по умолчанию
НаборПоУмолчанию = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
ОписаниеМодуля.НаборыТестов.Добавить(НаборПоУмолчанию);
Структура.ТестовыеНаборы.Добавить(Набор);
Возврат Структура;
Возврат ОписаниеМодуля;
КонецФункции
Функция КонтекстыВызоваПоУмолчанию()
Возврат ЮТФабрикаСлужебный.КонтекстыМодуля(Контекст().МетаданныеМодуля);
Возврат ЮТФабрикаСлужебный.КонтекстыМодуля(Контекст().ОписаниеМодуля.МетаданныеМодуля);
КонецФункции
@ -249,20 +234,6 @@
КонецФункции
Функция ЭтоИсполняемыеСценарии(ИсполняемыеСценарии)
Возврат ТипЗнч(ИсполняемыеСценарии) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ИсполняемыеСценарии, "ТестовыеНаборы")) = Тип("Массив");
КонецФункции
Функция ЭтоТестовыйНабор(ТестовыйНабор)
Возврат ТипЗнч(ТестовыйНабор) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты")) = Тип("Массив");
КонецФункции
Функция ЭтоОписаниеТеста(Описание)
Возврат ТипЗнч(Описание) = Тип("Структура")
@ -284,18 +255,17 @@
Процедура ИнициализироватьКонтекст(МетаданныеМодуля)
ИсполняемыеСценарии = ИсполняемыеСценарии(МетаданныеМодуля);
Набор = ИсполняемыеСценарии.ТестовыеНаборы[0];
ОписаниеМодуля = НовоеОписаниеТестовогоМодуля(МетаданныеМодуля);
НаборПоУмолчанию = ОписаниеМодуля.НаборыТестов[0];
Контекст = Новый Структура();
Контекст.Вставить("МетаданныеМодуля", МетаданныеМодуля);
Контекст.Вставить("ИсполняемыеСценарии", ИсполняемыеСценарии);
Контекст.Вставить("ТекущийНабор", Набор);
Контекст.Вставить("ТекущийЭлемент", Набор);
Контекст.Вставить("ОписаниеМодуля", ОписаниеМодуля);
Контекст.Вставить("ТекущийНабор", НаборПоУмолчанию);
Контекст.Вставить("ТекущийЭлемент", ОписаниеМодуля);
Контекст.Вставить("БазовыйТест", Неопределено);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("КонтекстРегистрацияТестов", Контекст);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекста(), Контекст);
КонецПроцедуры
@ -313,4 +283,10 @@
КонецФункции
Функция ИмяКонтекста()
Возврат "КонтекстРегистрацияТестов";
КонецФункции
#КонецОбласти

View File

@ -828,7 +828,7 @@
// Параметры:
// ОжидаемоеЗначение - Строка - Ожидается, что сообщение об ошибке будет содержать(включать) данный текст
// ОписаниеПроверки - Строка - Описание конкретной проверки
// ВТранзакции - Булево - Вызов метода выполняется в трананзакции
// ВТранзакции - Булево - Вызов метода выполняется в транзакции
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания
@ -868,7 +868,7 @@
// ОжидаемоеЗначение - Строка - Ожидается, что метод выбросит исключение, текст которого НЕ будет содержать (включать) данный текст
// - Неопределено - Ожидается, что метод отработает без выбора исключения
// ОписаниеПроверки - Строка - Описание конкретной проверки
// ВТранзакции - Булево - Вызов метода выполняется в трананзакции
// ВТранзакции - Булево - Вызов метода выполняется в транзакции
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания

View File

@ -122,9 +122,12 @@
Описание.Вставить("Имя", Строка(Имя));
Описание.Вставить("Представление", Строка(Имя));
Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь));
Описание.Вставить("Тесты", Новый Массив);
Если ЗначениеЗаполнено(ТегиСтрокой) Тогда
Описание.Теги = ЮТСтроки.РазделитьСтроку(ТегиСтрокой, ",");
КонецЕсли;
Возврат Описание;
КонецФункции
@ -143,7 +146,7 @@
// * Имя - Строка - Имя теста (тестового метода)
// * Представление - Строка - Представление теста
// * Теги - Массив из Строка - Теги теста
// * КонтекстВызова - Массив из Строка - Контексты исполнения теста
// * КонтекстВызова - Массив из Строка - Контексты исполнения теста, см. ЮТФабрика.КонтекстыВызова
// * НастройкиВыполнения- Структура - Настройки исполнения теста
// * Параметры - Неопределено, Массив из Произвольный - Параметры теста
// * НомерВНаборе - Число - Порядковый номер теста в наборе
@ -158,11 +161,14 @@
Описание = БазовоеОписаниеРегистрируемогоОбъекта();
Описание.Вставить("Имя", Строка(Имя));
Описание.Вставить("Представление", Строка(Представление));
Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь));
Описание.Вставить("КонтекстВызова", КонтекстыВызова);
Описание.Вставить("Параметры", Неопределено);
Описание.Вставить("НомерВНаборе", 0);
Если ЗначениеЗаполнено(ТегиСтрокой) Тогда
Описание.Теги = ЮТСтроки.РазделитьСтроку(ТегиСтрокой, ",");
КонецЕсли;
Возврат Описание;
КонецФункции
@ -218,7 +224,6 @@
Описание.Вставить("Имя", НаборТестов.Имя);
Описание.Вставить("Представление", НаборТестов.Представление);
Описание.Вставить("Теги", НаборТестов.Теги);
Описание.Вставить("Режим", "");
Описание.Вставить("ТестовыйМодуль", ТестовыйМодуль);
Описание.Вставить("МетаданныеМодуля", ТестовыйМодуль.МетаданныеМодуля);
@ -264,7 +269,6 @@
Описание.Вставить("Имя", Представление);
Описание.Вставить("Метод", Тест.Имя);
Описание.Вставить("ПолноеИмяМетода", ПолноеИмяМетода);
Описание.Вставить("Теги", Тест.Теги);
Описание.Вставить("Режим", Режим);
Описание.Вставить("ДатаСтарта", 0);
Описание.Вставить("Длительность", 0);
@ -702,8 +706,12 @@
Функция БазовоеОписаниеРегистрируемогоОбъекта()
Описание = Новый Структура();
Описание.Вставить("Теги", Новый Массив);
Описание.Вставить("НастройкиВыполнения", Новый Структура());
Описание.Вставить("Зависимости", Новый Массив());
Описание.Вставить("Ошибки", Новый Массив);
Возврат Описание;
@ -713,10 +721,14 @@
Функция БазовоеОписаниеИсполняемогоОбъекта(РегистрируемыйОбъекта)
Описание = Новый Структура();
Описание.Вставить("Ошибки", ЮТКоллекции.СкопироватьМассив(РегистрируемыйОбъекта.Ошибки));
Описание.Вставить("Теги", ЮТКоллекции.СкопироватьМассив(РегистрируемыйОбъекта.Теги));
Описание.Вставить("НастройкиВыполнения", ЮТКоллекции.СкопироватьСтруктуру(РегистрируемыйОбъекта.НастройкиВыполнения));
Описание.Вставить("Зависимости", ЮТКоллекции.СкопироватьМассив(РегистрируемыйОбъекта.Зависимости));
Описание.Вставить("Ошибки", ЮТКоллекции.СкопироватьМассив(РегистрируемыйОбъекта.Ошибки));
Возврат Описание;
КонецФункции

View File

@ -22,9 +22,9 @@
Контекст = ЮТКонтекстСлужебный.КонтекстЧитателя();
НормализованноеИмяРасширения = УдалитьНедопустимыеСимволыИзСтрокиКакКлючаСтруктуры(ИмяРасширения);
НормализованноеИмяРасширения = НРег(ИмяРасширения);
Возврат НЕ Контекст.Фильтр.ЕстьФильтрРасширений ИЛИ Контекст.Фильтр.Расширения.Свойство(НормализованноеИмяРасширения);
Возврат НЕ Контекст.Фильтр.ЕстьФильтрРасширений ИЛИ Контекст.Фильтр.Расширения[НормализованноеИмяРасширения] <> Неопределено;
КонецФункции
@ -41,88 +41,48 @@
// Отфильтровать тестовые наборы.
//
// Параметры:
// ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы
// ОписаниеМодуля - Структура - Описание модуля, которому принадлежат наборы, см. ЮТФабрикаСлужебный.ОписаниеМодуля
//
// Возвращаемое значение:
// Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Отфильтрованные наборы
Функция ОтфильтроватьТестовыеНаборы(ТестовыеНаборы, ОписаниеМодуля) Экспорт
// ОписаниеТестовогоМодуля - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Процедура ОтфильтроватьТестовыеНаборы(ОписаниеТестовогоМодуля) Экспорт
Контекст = ЮТКонтекстСлужебный.КонтекстЧитателя();
Фильтр = ЮТКонтекстСлужебный.КонтекстЧитателя().Фильтр;
Если НЕ Контекст.Фильтр.ЕстьФильтрТестов И НЕ Контекст.Фильтр.ЕстьФильтрКонтекстов Тогда
Возврат ТестовыеНаборы;
Если НЕ Фильтр.ЕстьФильтрТестов И НЕ Фильтр.ЕстьФильтрКонтекстов И НЕ Фильтр.ЕстьФильтрТегов Тогда
Возврат;
КонецЕсли;
НаборыТестов = ОписаниеТестовогоМодуля.НаборыТестов;
МетаданныеМодуля = ОписаниеТестовогоМодуля.МетаданныеМодуля;
Результат = Новый Массив();
Если Контекст.Фильтр.ЕстьФильтрТестов Тогда
ДоступныеТестовыеМетоды = Новый Соответствие();
Для Каждого ОписаниеИмениТеста Из Контекст.Фильтр.Тесты Цикл
Если СтрСравнить(ОписаниеИмениТеста.ИмяМодуля, ОписаниеМодуля.Имя) = 0 Тогда
ОписаниеИмениТеста.ИмяМетода = ВРег(ОписаниеИмениТеста.ИмяМетода);
СохраненноеОписаниеИмени = ДоступныеТестовыеМетоды[ОписаниеИмениТеста.ИмяМетода];
Если СохраненноеОписаниеИмени = Неопределено И ОписаниеИмениТеста.Контекст = Неопределено Тогда
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли СохраненноеОписаниеИмени = Неопределено Тогда
ОписаниеИмениТеста.Контекст = ЮТКоллекции.ЗначениеВМассиве(ОписаниеИмениТеста.Контекст);
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли ОписаниеИмениТеста.Контекст = Неопределено Тогда
СохраненноеОписаниеИмени.Контекст = Неопределено; // Без фильтрации контекста теста, возьмом из самого теста контексты
ИначеЕсли СохраненноеОписаниеИмени.Контекст <> Неопределено Тогда
СохраненноеОписаниеИмени.Контекст.Добавить(ОписаниеИмениТеста.Контекст);
Иначе
// Если было имя теста без контекста, то будет вызов во всех контекстах
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
СостояниеФильтрации = Новый Структура;
ДоступныеТестовыеМетоды(Фильтр, МетаданныеМодуля, СостояниеФильтрации);
Для Каждого Набор Из ТестовыеНаборы Цикл
Для Каждого Набор Из НаборыТестов Цикл
Если НЕ ЭтоПодходящийНабор(Набор, Фильтр) Тогда
Продолжить;
КонецЕсли;
ОтфильтрованныйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Набор.Имя);
ЗаполнитьЗначенияСвойств(ОтфильтрованныйНабор, Набор, , "Тесты");
ОбработатьТегиНабора(ОписаниеТестовогоМодуля, Набор, Фильтр, СостояниеФильтрации);
Для Каждого Тест Из Набор.Тесты Цикл
КонтекстыТеста = Неопределено;
ТестПодходитПодФильтр = ФильтрТестов(Тест, Фильтр, СостояниеФильтрации)
И ФильтрКонтекста(Тест, Фильтр)
И ФильтрТегов(Тест, Фильтр, СостояниеФильтрации);
Если ДоступныеТестовыеМетоды <> Неопределено Тогда
ОписаниеИмениТеста = ДоступныеТестовыеМетоды[ВРег(Тест.Имя)];
Если ТестПодходитПодФильтр Тогда
Если ОписаниеИмениТеста = Неопределено Тогда
Продолжить;
КонецЕсли;
КонтекстыТеста = ОписаниеИмениТеста.Контекст;
ОтфильтрованныйТест = ЮТФабрикаСлужебный.ОписаниеТеста(Тест.Имя, "", "");
ЗаполнитьЗначенияСвойств(ОтфильтрованныйТест, Тест);
ОтфильтрованныйНабор.Тесты.Добавить(ОтфильтрованныйТест);
КонецЕсли;
Если КонтекстыТеста = Неопределено Тогда
КонтекстыТеста = Тест.КонтекстВызова;
КонецЕсли;
Если Контекст.Фильтр.ЕстьФильтрКонтекстов Тогда
КонтекстыТеста = ЮТКоллекции.ПересечениеМассивов(КонтекстыТеста, Контекст.Фильтр.Контексты);
КонецЕсли;
Если КонтекстыТеста.Количество() = 0 Тогда
// Возможно стоит такие выводить в лог с ошибкой "по переданным параметрам контекст теста не определен"
Продолжить;
КонецЕсли;
ОтфильтрованныйТест = ЮТФабрикаСлужебный.ОписаниеТеста(Тест.Имя, "", "");
ЗаполнитьЗначенияСвойств(ОтфильтрованныйТест, Тест, , "КонтекстВызова");
ОтфильтрованныйТест.КонтекстВызова = КонтекстыТеста;
ОтфильтрованныйНабор.Тесты.Добавить(ОтфильтрованныйТест);
КонецЦикла;
Если ОтфильтрованныйНабор.Тесты.Количество() Тогда
@ -131,33 +91,30 @@
КонецЦикла;
Возврат Результат;
ОписаниеТестовогоМодуля.НаборыТестов = Результат;
КонецФункции
КонецПроцедуры
// Фильтр
// Конструктур фильтра поиска тестовых методов
// Конструктор фильтра поиска тестовых методов
//
// Возвращаемое значение:
// Структура - Фильтр:
// * Расширения - Структура - Имена расширений
// * Модули - Структура - Имена модулей
// * Наборы - Массив из Строка - Имена тестовых наборов
// * Теги - Массив из Строка
// * Наборы - Соответствие из Строка - Имена тестовых наборов
// * Теги - Соответствие из Строка
// * Контексты - Массив из Строка - Контексты вызова тестовых методов
// * Тесты - Массив из см. ОписаниеИмениТеста - Список путей к тестовым методам
// * Пути - Массив из Строка
Функция Фильтр() Экспорт
//@skip-check structure-consructor-too-many-keys
Фильтр = Новый Структура("Расширения, Модули, Наборы, Теги, Контексты, Пути, Тесты");
Фильтр = Новый Структура("Расширения, Модули, Наборы, Теги, Контексты, Тесты");
Фильтр.Расширения = Новый Структура();
Фильтр.Расширения = Новый Соответствие();
Фильтр.Модули = Новый Структура();
Фильтр.Теги = Новый Массив();
Фильтр.Теги = Новый Соответствие();
Фильтр.Контексты = Новый Массив();
Фильтр.Наборы = Новый Массив();
Фильтр.Пути = Новый Массив();
Фильтр.Наборы = Новый Соответствие();
Фильтр.Тесты = Новый Массив();
//@skip-check constructor-function-return-section
@ -173,16 +130,12 @@
Тесты = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "tests", Новый Массив);
Теги = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "tags", Новый Массив);
// TODO: Подумать в каком формате задать наборы - ИмяМодуля.Набор, Набор или другой вариант
Наборы = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "suites", Новый Массив);
// TODO: Обработка путей в формате: Модуль.ИмяТеста, ИмяТеста - метод, параметры, контекст
// ОМ_ЮТУтверждения.Что[0: 1].Сервер, ОМ_ЮТУтверждения.Что[1: Структура].Сервер
Пути = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаТестов.filter, "paths", Новый Массив);
Фильтр = Фильтр();
Фильтр.Расширения = МассивВСтруктуру(Расширения);
Фильтр.Модули = МассивВСтруктуру(Модули);
Фильтр.Расширения = МассивВСоответствие(Расширения);
Фильтр.Модули = ЮТКоллекции.МассивВСтруктуру(Модули);
Если Контексты = Неопределено Тогда
Фильтр.Контексты = ЮТФабрикаСлужебный.КонтекстыПриложения();
@ -191,15 +144,11 @@
КонецЕсли;
Если ЗначениеЗаполнено(Теги) Тогда
Фильтр.Теги = Теги;
Фильтр.Теги = МассивВСоответствие(Теги);
КонецЕсли;
Если ЗначениеЗаполнено(Наборы) Тогда
Фильтр.Наборы = Наборы;
КонецЕсли;
Если ЗначениеЗаполнено(Пути) Тогда
Фильтр.Пути = Пути;
Фильтр.Наборы = МассивВСоответствие(Наборы);
КонецЕсли;
МодулиТестов = Новый Структура();
@ -232,8 +181,10 @@
Фильтр.Вставить("ЕстьФильтрРасширений", Фильтр.Расширения.Количество() > 0);
Фильтр.Вставить("ЕстьФильтрМодулей", МодулиТестов.Количество() ИЛИ Фильтр.Модули.Количество());
Фильтр.Вставить("ЕстьФильтрТестов", Фильтр.Тесты.Количество());
Фильтр.Вставить("ЕстьФильтрНаборов", ЗначениеЗаполнено(Фильтр.Наборы));
Фильтр.Вставить("ЕстьФильтрТестов", Фильтр.Тесты.Количество() > 0 );
Фильтр.Вставить("ЕстьФильтрКонтекстов", ЗначениеЗаполнено(Фильтр.Контексты));
Фильтр.Вставить("ЕстьФильтрТегов", ЗначениеЗаполнено(Фильтр.Теги));
ЮТКонтекстСлужебный.УстановитьКонтекстЧитателя(Новый Структура("Фильтр", Фильтр));
@ -243,30 +194,6 @@
#Область СлужебныеПроцедурыИФункции
Функция МассивВСтруктуру(Значения)
Результат = Новый Структура();
Если НЕ ЗначениеЗаполнено(Значения) Тогда
Возврат Результат;
КонецЕсли;
Для Каждого Значение Из Значения Цикл
НормализованноеЗначение = УдалитьНедопустимыеСимволыИзСтрокиКакКлючаСтруктуры(Значение);
Результат.Вставить(НормализованноеЗначение);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция УдалитьНедопустимыеСимволыИзСтрокиКакКлючаСтруктуры(СтрокаКакКлюч)
// TODO Переработать. Не модифицировать значение
Возврат СтрЗаменить(СтрокаКакКлюч, ".", "");
КонецФункции
Функция ОписаниеИмениТеста(Путь)
Части = СтрРазделить(Путь, ".");
@ -291,4 +218,136 @@
КонецФункции
Процедура ДоступныеТестовыеМетоды(Фильтр, ОписаниеМодуля, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТестов Тогда
Возврат;
КонецЕсли;
ДоступныеТестовыеМетоды = Новый Соответствие();
Для Каждого ОписаниеИмениТеста Из Фильтр.Тесты Цикл
Если СтрСравнить(ОписаниеИмениТеста.ИмяМодуля, ОписаниеМодуля.Имя) = 0 Тогда
ОписаниеИмениТеста.ИмяМетода = ВРег(ОписаниеИмениТеста.ИмяМетода);
СохраненноеОписаниеИмени = ДоступныеТестовыеМетоды[ОписаниеИмениТеста.ИмяМетода];
Если СохраненноеОписаниеИмени = Неопределено И ОписаниеИмениТеста.Контекст = Неопределено Тогда
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли СохраненноеОписаниеИмени = Неопределено Тогда
ОписаниеИмениТеста.Контекст = ЮТКоллекции.ЗначениеВМассиве(ОписаниеИмениТеста.Контекст);
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли ОписаниеИмениТеста.Контекст = Неопределено Тогда
СохраненноеОписаниеИмени.Контекст = Неопределено; // Без фильтрации контекста теста, возьмем из самого теста контексты
ИначеЕсли СохраненноеОписаниеИмени.Контекст <> Неопределено Тогда
СохраненноеОписаниеИмени.Контекст.Добавить(ОписаниеИмениТеста.Контекст);
Иначе
// Если было имя теста без контекста, то будет вызов во всех контекстах
КонецЕсли;
КонецЕсли;
КонецЦикла;
СостояниеФильтрации.Вставить("ДоступныеТестовыеМетоды", ДоступныеТестовыеМетоды);
КонецПроцедуры
Процедура ОбработатьТегиНабора(ОписаниеМодуля, Набор, Фильтр, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТегов Тогда
Возврат;
КонецЕсли;
ПодходитПодФильтрТегов = ПодходитПодФильтрТегов(Фильтр, ОписаниеМодуля.Теги) Или ПодходитПодФильтрТегов(Фильтр, Набор.Теги);
СостояниеФильтрации.Вставить("ПодходитПодФильтрТегов", ПодходитПодФильтрТегов);
КонецПроцедуры
Функция ПодходитПодФильтрТегов(Фильтр, Теги)
Для Каждого Тег Из Теги Цикл
Если Фильтр.Теги[НРег(Тег)] <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Функция ЭтоПодходящийНабор(Набор, Фильтр)
Возврат НЕ Фильтр.ЕстьФильтрНаборов Или Фильтр.Наборы[НРег(Набор.Имя)] <> Неопределено;
КонецФункции
Функция ФильтрТестов(Тест, Фильтр, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТестов Тогда
Возврат Истина;
КонецЕсли;
ФильтрТеста = СостояниеФильтрации.ДоступныеТестовыеМетоды[ВРег(Тест.Имя)];
Если ФильтрТеста = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(ФильтрТеста.Контекст) Тогда
Тест.КонтекстВызова = ЮТКоллекции.ПересечениеМассивов(Тест.КонтекстВызова, ФильтрТеста.Контекст);
КонецЕсли;
Возврат ЗначениеЗаполнено(Тест.КонтекстВызова);
КонецФункции
Функция ФильтрКонтекста(Тест, Фильтр)
Если НЕ Фильтр.ЕстьФильтрКонтекстов Тогда
Возврат Истина;
КонецЕсли;
Тест.КонтекстВызова = ЮТКоллекции.ПересечениеМассивов(Тест.КонтекстВызова, Фильтр.Контексты);
Возврат ЗначениеЗаполнено(Тест.КонтекстВызова);
КонецФункции
Функция ФильтрТегов(Тест, Фильтр, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТегов Или СостояниеФильтрации.ПодходитПодФильтрТегов Тогда
Возврат Истина;
КонецЕсли;
Для Каждого Тег Из Тест.Теги Цикл
Если Фильтр.Теги[НРег(Тег)] <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Функция МассивВСоответствие(Значения)
Результат = Новый Соответствие();
Если НЕ ЗначениеЗаполнено(Значения) Тогда
Возврат Результат;
КонецЕсли;
Для Каждого Значение Из Значения Цикл
Результат.Вставить(НРег(Значение), Истина);
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти

View File

@ -62,9 +62,8 @@
Функция ИсполняемыеСценарииМодуля(Знач МетаданныеМодуля) Экспорт
ЭтоТестовыйМодуль = Истина;
ОписаниеТестовогоМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив);
ЮТТестыСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
ЮТСобытияСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
ПолноеИмяМетода = МетаданныеМодуля.Имя + "." + ИмяМетодаСценариев();
Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода);
@ -88,16 +87,15 @@
НаборПоУмолчанию = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуЧтенияТестов(НаборПоУмолчанию, "Ошибка формирования списка тестовых методов", Ошибка);
ОписаниеТестовогоМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив);
ОписаниеТестовогоМодуля.НаборыТестов.Добавить(НаборПоУмолчанию);
ИначеЕсли ЭтоТестовыйМодуль Тогда
ЮТТестыСлужебный.ПослеЧтенияСценариевМодуля();
Сценарии = ЮТТестыСлужебный.СценарииМодуля();
ОписаниеТестовогоМодуля.НаборыТестов = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Сценарии.ТестовыеНаборы, МетаданныеМодуля);
ОписаниеТестовогоМодуля.НастройкиВыполнения = Сценарии.НастройкиВыполнения;
ОписаниеТестовогоМодуля.Зависимости = Сценарии.Зависимости;
ОписаниеТестовогоМодуля = ЮТТестыСлужебный.ОписаниеМодуля();
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеТестовогоМодуля);
ЮТСобытияСлужебный.ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля);
Иначе

View File

@ -90,7 +90,7 @@
// Умный контекст, в который можно сохранять и получать из него промежуточные данные
// Этот контекст работает с см. КонтекстТеста, см. КонтекстТестовогоНабора и см. КонтекстМодуля.
// При получении значения оно ущется во всех 3 контекста поочереди.
// При получении значения выполняется поиск во всех 3 контекста поочереди.
// При установке значения, оно устанавливается в текущий контекст, например, в событии перед тестовым наборов в м. КонтекстТестовогоНабора
//
// Возвращаемое значение:
@ -163,7 +163,7 @@
КонецФункции
// Преостанавливает поток выполнения на указанное количество секунд
// Приостанавливает поток выполнения на указанное количество секунд
//
// Параметры:
// Время - Число - Продолжительность паузы в секундах, возможно указывать дробное значение

View File

@ -100,6 +100,7 @@
<commonModules>CommonModule.ЮТОтчетJSONСлужебный</commonModules>
<commonModules>CommonModule.ЮТОтчетJUnitСлужебный</commonModules>
<commonModules>CommonModule.ЮТОтчетСлужебный</commonModules>
<commonModules>CommonModule.ЮТОтчетСлужебныйКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТПараметрыЗапускаСлужебный</commonModules>
<commonModules>CommonModule.ЮТПодключаемыеМодулиСлужебный</commonModules>
<commonModules>CommonModule.ЮТПодключаемыеМодулиСлужебныйВызовСервера</commonModules>

View File

@ -355,7 +355,6 @@
<font xsi:type="core:FontDef">
<height>8.0</height>
<bold>true</bold>
<font>Style.NormalTextFont</font>
</font>
</extInfo>
</items>
@ -409,6 +408,59 @@
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ДеревоТестовТеги</name>
<id>147</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ДеревоТестов.Теги</segments>
</dataPath>
<extendedTooltip>
<name>ДеревоТестовТегиРасширеннаяПодсказка</name>
<id>149</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДеревоТестовТегиКонтекстноеМеню</name>
<id>148</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textColor xsi:type="core:ColorRef">
<color>Style.FieldSelectionBackColor</color>
</textColor>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ДеревоТестовГруппаПрогресс</name>
<id>102</id>
@ -1444,7 +1496,6 @@
<verticalStretch>false</verticalStretch>
<font xsi:type="core:FontDef">
<height>12.0</height>
<font>Style.NormalTextFont</font>
</font>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
@ -1689,6 +1740,24 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>Теги</name>
<title>
<key>ru</key>
<value>Теги</value>
</title>
<id>131</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<additionalColumns>
<tablePath xsi:type="form:DataPath">
<segments>ДеревоТестов.Ошибки</segments>
@ -2003,6 +2072,19 @@
<representation>TextPicture</representation>
<currentRowUse>DontUse</currentRowUse>
</formCommands>
<parameters>
<name>АдресХранилища</name>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
</parameters>
<parameters>
<name>ЗагрузитьТесты</name>
<valueType>
<types>Boolean</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>

View File

@ -31,11 +31,11 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АдресХранилища") И ЭтоАдресВременногоХранилища(Параметры.АдресХранилища) Тогда
Если ЭтоАдресВременногоХранилища(Параметры.АдресХранилища) Тогда
АдресОтчета = Параметры.АдресХранилища;
КонецЕсли;
Параметры.Свойство("ЗагрузитьТесты", ЗагрузитьТестыПриОткрытии);
ЗагрузитьТестыПриОткрытии = Параметры.ЗагрузитьТесты;
Для Каждого Формат Из ФорматыВыводаОшибки() Цикл
Элементы.ФорматВыводаОшибки.СписокВыбора.Добавить(Формат.Ключ, Формат.Ключ);
@ -251,7 +251,7 @@
КонецФункции
&НаКлиентеНаСервереБезКонтекста
&НаКлиенте
Процедура ЗаполнитьОшибки(СтрокаДерева, ОписаниеОбъекта)
СтрокаДерева.Ошибки.Очистить();
@ -284,7 +284,7 @@
КонецФункции
&НаКлиентеНаСервереБезКонтекста
&НаКлиенте
Функция НормализоватьКонтекст(Контекст)
Если СтрНачинаетсяС(Контекст, "Клиент") Тогда
@ -295,7 +295,7 @@
КонецФункции
&НаКлиентеНаСервереБезКонтекста
&НаКлиенте
Процедура ИнкрементСтатистики(Статистика, Статус, Знач Статусы = Неопределено)
Если Статусы = Неопределено Тогда
@ -336,7 +336,7 @@
#Область Интерфейсное
&НаСервереБезКонтекста
&НаКлиенте
Функция КартинкаСтатуса(Статус)
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
@ -365,7 +365,7 @@
КонецФункции
&НаСервереБезКонтекста
&НаКлиенте
Функция ПредставлениеСтатистики(Статистика)
БлокиСтатистики = Новый Массив();
@ -410,7 +410,7 @@
КонецФункции
&НаСервереБезКонтекста
&НаКлиенте
Функция ГрафическоеПредставлениеСтатистики(Статистика)
Текст = БлокиСтатистики(Статистика);
@ -419,7 +419,7 @@
КонецФункции
&НаСервереБезКонтекста
&НаКлиенте
Функция БлокиСтатистики(Статистика)
Блоки = Новый Массив();
@ -492,6 +492,7 @@
СтрокаНабора.ПредставлениеВремяВыполнения = ЮТОбщий.ПредставлениеПродолжительности(Набор.Длительность);
СтрокаНабора.ВремяВыполнения = Набор.Длительность;
СтрокаНабора.ТипОбъекта = 2;
СтрокаНабора.Теги = СтрСоединить(Набор.Теги, ", ");
ЗаполнитьОшибки(СтрокаНабора, Набор);
@ -502,6 +503,7 @@
СтрокаТеста = СтрокаНабора.ПолучитьЭлементы().Добавить();
ОтобразитьРезультатТеста(СтрокаТеста, Тест, Набор);
СтрокаТеста.Теги = СтрСоединить(Тест.Теги, ", ");
Тест.Вставить("Идентификатор", СтрокаТеста.ПолучитьИдентификатор());
@ -938,6 +940,7 @@
Блоки.Добавить("</div></div>");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗаменитьСпецСимволы(Знач Стр)

View File

@ -6,5 +6,6 @@
<value>Загрузка тестов</value>
</synonym>
<includeHelpInContents>true</includeHelpInContents>
<content>CommonModule.ЮТТестыСлужебный</content>
<parentSubsystem>Subsystem.ЮТПодключаемыеМодули.Subsystem.ОбработчикиСобытий</parentSubsystem>
</mdclass:Subsystem>

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("Обучение")
.ДобавитьТест("Обучение_ЦепочкаВызовов")
.ДобавитьТест("Проверить")

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("ВыброситьИсключение")
.ДобавитьСерверныйТест("ФормированиеТипыПерехватываемыхОбъектов")
;

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("ДанныеПерехвата")
;

View File

@ -35,6 +35,7 @@
.ДобавитьТест("ВСоответствие")
.ДобавитьТест("ВСтруктуру")
.ДобавитьТест("ПредставлениеМассива")
.ДобавитьТест("ОбъединитьМассивы")
;
КонецПроцедуры
@ -416,6 +417,22 @@
КонецПроцедуры
Процедура ОбъединитьМассивы() Экспорт
Коллекция1 = ЮТКоллекции.ЗначениеВМассиве(1, 2);
Коллекция2 = Новый Массив;
Коллекция3 = ЮТКоллекции.ЗначениеВМассиве(3);
Коллекция4 = ЮТКоллекции.ЗначениеВМассиве(4, 5);
Результат = ЮТКоллекции.ОбъединитьМассивы(Коллекция1, Коллекция2, Коллекция3, Коллекция4);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Массив")
.Заполнено()
.Равно(ЮТКоллекции.ЗначениеВМассиве(1, 2, 3, 4, 5))
.ИмеетДлину(5);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -20,7 +20,8 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.УдалениеТестовыхДанных()
ЮТТесты.Вызов(ТегиТестов.Мокирование())
.УдалениеТестовыхДанных()
.ДобавитьТест("ЗаполнитьСправочник")
.ДобавитьТест("ЗаполнитьДокумент")
.ДобавитьТест("СоздатьЗаписьРегистраСведений")
@ -32,7 +33,7 @@
.ДобавитьТест("СоздатьГруппу")
.ДобавитьТест("УстановитьРеквизиты")
.ДобавитьТест("УстановитьСсылкуНового")
;
;
КонецПроцедуры

View File

@ -24,6 +24,7 @@
.ДобавитьТест("ПараметрыГенерацииОтчета")
.ДобавитьТест("ЗаписатьОтчет")
.ДобавитьТест("ОписаниеТеста")
.ДобавитьТест("ОписаниеТеста_Теги")
;
КонецПроцедуры
@ -42,6 +43,8 @@
Процедура ЗаписатьОтчет() Экспорт
РезультатТестирования = ТестовыеДанные.РезультатТестирования();
РезультатТестирования[0].Теги = ЮТКоллекции.ЗначениеВМассиве("Тестовый модуль");
Каталог = ЮТест.Данные().НовоеИмяВременногоФайла();
СоздатьКаталог(Каталог);
Формат = ЮТОтчетAllureСлужебный.ПараметрыГенерацииОтчета().Форматы.allure;
@ -77,6 +80,23 @@
КонецПроцедуры
Процедура ОписаниеТеста_Теги() Экспорт
Модуль = ТестовыеДанные.ОписаниеТестовогоМодуля();
Набор = ТестовыеДанные.ОписаниеТестовогоНабора(Модуль);
Тест = ТестовыеДанные.ОписаниеТеста(Набор);
Модуль.Теги = ЮТСтроки.РазделитьСтроку("Модуль, Тег1, Тег 2", ",");
Набор.Теги = ЮТСтроки.РазделитьСтроку("Набор, ТЕГ 2, Тег3", ",");
Тест.Теги = СтрРазделить("Тест, тег3, тег4", ", ", Ложь);
ОписаниеТеста = ЮТОтчетAllureСлужебный.ОписаниеТеста(Тест, Набор, Модуль);
Для Каждого Метка Из ЮТСтроки.РазделитьСтроку("Модуль, Набор, Тест, Тег 2, Тег3, тег4", ",") Цикл
СодержитМетку(ОписаниеТеста, "tag", Метка);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -24,6 +24,7 @@
.ДобавитьТест("ДобавитьСтроку")
.ДобавитьТест("СтрокаСимволов")
.ДобавитьТест("СравнитьВерсии")
.ДобавитьТест("УникальныеСтроки")
;
КонецПроцедуры
@ -87,6 +88,19 @@
КонецПроцедуры
Процедура УникальныеСтроки() Экспорт
Вход = СтрРазделить("Раз,раз, раз,проверка", ",");
ЮТест.ОжидаетЧто(ЮТСтроки.УникальныеСтроки(Вход))
.Содержит("Раз")
.НеСодержит("раз")
.Содержит(" раз")
.Содержит("проверка")
.ИмеетДлину(3);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.УдалениеТестовыхДанных()
ЮТТесты.Тег("ТестовыеДанные").УдалениеТестовыхДанных()
.ДобавитьТест("Удалить")
.ДобавитьТест("ВариантыПараметров")
.ДобавитьТест("СоздатьГруппу")

View File

@ -23,7 +23,7 @@
КодТовара = ЮТОбщий.ЧислоВСтроку(ЮТест.Данные().СлучайноеПоложительноеЧисло(999999999));
Период = ТекущаяДата();
ЮТТесты.УдалениеТестовыхДанных()
ЮТТесты.Тег("ТестовыеДанные").УдалениеТестовыхДанных()
.ДобавитьТест("Фикция")
.СПараметрами(Новый ОписаниеТипов("Число"))
.СПараметрами(Новый ОписаниеТипов("Строка"))

View File

@ -24,34 +24,41 @@
.ДобавитьТест("ЭтоПодходящееРасширение")
.ДобавитьТест("ЭтоПодходящийМодуль")
.ДобавитьТест("ОтфильтроватьТестовыеНаборы")
;
.Добавитьтест("Фильтр_ПолноеИмяТеста")
.Добавитьтест("Фильтр_Контексты")
.Добавитьтест("Фильтр_ТегиМодуля")
.Добавитьтест("Фильтр_ТегиНабора")
.Добавитьтест("Фильтр_ТегиТеста")
.Добавитьтест("Фильтр_Наборы")
;
КонецПроцедуры
Процедура ЭтоПодходящееРасширение() Экспорт
Варианты = Новый Массив();
Ключи = "ИмяРасширения, Параметры, Результат, Описание";
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Простой кейс"));
Варианты.Добавить(Новый Структура(Ключи, "TeST", Параметры, Истина, "Изменен регистр"));
Варианты.Добавить(Новый Структура(Ключи, "тесты", Параметры, Истина, "Второе расширение"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Отсутствующее расширение"));
Варианты = ЮТест.Варианты("ИмяРасширения, Параметры, Результат, Описание");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Без фильтр по расширениям 1"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Истина, "Без фильтр по расширениям 2"));
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить("test", Параметры, Истина, "Простой кейс");
Варианты.Добавить("TeST", Параметры, Истина, "Изменен регистр");
Варианты.Добавить("тесты", Параметры, Истина, "Второе расширение");
Варианты.Добавить("_test", Параметры, Ложь, "Отсутствующее расширение");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Варианты.Добавить("test", Параметры, Истина, "Без фильтр по расширениям 1");
Варианты.Добавить("_test", Параметры, Истина, "Без фильтр по расширениям 2");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("test.method");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Фильтр по пути"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Истина, "Фильтр по пути, отпустствующее расширение"));
Варианты.Добавить("test", Параметры, Истина, "Фильтр по пути");
Варианты.Добавить("_test", Параметры, Истина, "Фильтр по пути, отпустствующее расширение");
Для Каждого Вариант Из Варианты Цикл
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
ЮТФильтрацияСлужебный.УстановитьКонтекст(Вариант.Параметры);
УстановитьФильтр(Вариант.Параметры);
Результат = ЮТФильтрацияСлужебный.ЭтоПодходящееРасширение(Вариант.ИмяРасширения);
ЮТест.ОжидаетЧто(Результат, Вариант.Описание).Равно(Вариант.Результат);
КонецЦикла;
@ -60,90 +67,66 @@
Процедура ЭтоПодходящийМодуль() Экспорт
Варианты = Новый Массив();
Ключи = "ИмяМодуля, Параметры, Результат, Описание";
Варианты = ЮТест.Варианты("ИмяМодуля, Параметры, Результат, Описание");
РасширениеПоУмолчанию = "__тесты___";
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Простой кейс"));
Варианты.Добавить(Новый Структура(Ключи, "TeST", Параметры, Истина, "Изменен регистр"));
Варианты.Добавить(Новый Структура(Ключи, "тесты", Параметры, Истина, "Второй модуль"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Отсутствующий модуль"));
Варианты.Добавить("test", Параметры, Истина, "Простой кейс");
Варианты.Добавить("TeST", Параметры, Истина, "Изменен регистр");
Варианты.Добавить("тесты", Параметры, Истина, "Второй модуль");
Варианты.Добавить("_test", Параметры, Ложь, "Отсутствующий модуль");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Без фильтр по `module`"));
Варианты.Добавить(Новый Структура(Ключи, "_module", Параметры, Истина, "Без фильтр по `_module`"));
Варианты.Добавить("module", Параметры, Истина, "Без фильтр по `module`");
Варианты.Добавить("_module", Параметры, Истина, "Без фильтр по `_module`");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("module");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве(РасширениеПоУмолчанию);
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по модулю и по расширению с пересечением"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по модулю и по расширению с пересечением");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("module");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("тесты");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Ложь, "Фильтр по модулю и по расширению без пересечения"));
Варианты.Добавить("module", Параметры, Ложь, "Фильтр по модулю и по расширению без пересечения");
// Фильтрация по именам тестовых методов
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по имени теста"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Фильтр по имени теста, отсутствующему модулю"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по имени теста");
Варианты.Добавить("_test", Параметры, Ложь, "Фильтр по имени теста, отсутствующему модулю");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве(РасширениеПоУмолчанию);
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по имени теста и по расширению с пересечением"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по имени теста и по расширению с пересечением");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("test");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Ложь, "Фильтр по имени теста и по расширению без пересечения"));
Варианты.Добавить("module", Параметры, Ложь, "Фильтр по имени теста и по расширению без пересечения");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("module");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по имени теста и по модулю с пересечением"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по имени теста и по модулю с пересечением");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("test");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Ложь, "Фильтр по имени теста и по модулю без пересечения"));
Варианты.Добавить("module", Параметры, Ложь, "Фильтр по имени теста и по модулю без пересечения");
Для Каждого Вариант Из Варианты Цикл
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
УстановитьФильтр(Вариант.Параметры);
ОписаниеМодуля = МетаданныеМодуля(Вариант.ИмяМодуля, РасширениеПоУмолчанию);
ЮТФильтрацияСлужебный.УстановитьКонтекст(Вариант.Параметры);
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
ОписаниеМодуля.Имя = Вариант.ИмяМодуля;
ОписаниеМодуля.Расширение = РасширениеПоУмолчанию;
Результат = ЮТФильтрацияСлужебный.ЭтоПодходящийМодуль(ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, Вариант.Описание + ". Имя модуля:" + Вариант.ИмяМодуля).Равно(Вариант.Результат);
КонецЦикла;
КонецПроцедуры
Процедура ЭтоПодходящийМетод() Экспорт
Варианты = Новый Массив();
Ключи = "ИмяМодуля, Параметры, Результат, Описание";
РасширениеПоУмолчанию = "__тесты___";
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Простой кейс"));
Варианты.Добавить(Новый Структура(Ключи, "TeST", Параметры, Истина, "Изменен регистр"));
Варианты.Добавить(Новый Структура(Ключи, "тесты", Параметры, Истина, "Второй модуль"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Отсутствующий модуль"));
Для Каждого Вариант Из Варианты Цикл
ЮТФильтрацияСлужебный.УстановитьКонтекст(Вариант.Параметры);
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
ОписаниеМодуля.Имя = Вариант.ИмяМодуля;
ОписаниеМодуля.Расширение = РасширениеПоУмолчанию;
Результат = ЮТФильтрацияСлужебный.ЭтоПодходящийМодуль(ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, Вариант.Описание + ". Имя модуля:" + Вариант.ИмяМодуля).Равно(Вариант.Результат);
КонецЦикла;
@ -155,67 +138,280 @@
// 1
Контексты = ЮТФабрика.КонтекстыВызова();
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
ОписаниеМодуля.Имя = "ТестовыйМодуль";
ОписаниеМодуля.Расширение = "ТестовоеРасширение";
ОписаниеМодуля.Сервер = Истина;
ОписаниеМодуля.КлиентУправляемоеПриложение = Истина;
Наборы = Новый Массив();
Набор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора("Тесты");
Тест = ЮТФабрикаСлужебный.ОписаниеТеста("Тест1", "Тест 1", ЮТКоллекции.ЗначениеВМассиве(Контексты.Сервер, Контексты.КлиентУправляемоеПриложение));
Набор = ОписаниеНабораТестов("Тесты");
Тест = ОписаниеТеста("Тест1","Сервер, КлиентУправляемоеПриложение");
Набор.Тесты.Добавить(Тест);
Наборы.Добавить(Набор);
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1");
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
ОписаниеМодуля = ОписаниеМодуля();
ОписаниеМодуля.МетаданныеМодуля.Сервер = Истина;
ОписаниеМодуля.МетаданныеМодуля.КлиентУправляемоеПриложение = Истина;
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, "Результат фильтрации")
ДобавитьКопиюНабора(ОписаниеМодуля, Набор);
УстановитьНовыйФильтр(, "ТестовыйМодуль.Тест1");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов, "Результат фильтрации")
.Заполнено()
.ИмеетТип("Массив");
НаборРезультата = Результат[0];
ЮТест.ОжидаетЧто(НаборРезультата, "Набор результата")
.Заполнено()
.Свойство("Имя").Равно(Набор.Имя)
.Свойство("Представление").Равно(Набор.Представление)
.Свойство("Тесты").Заполнено();
ТестРезультата = НаборРезультата.Тесты[0];
ЮТест.ОжидаетЧто(ТестРезультата, "Тест результата")
.Свойство("Имя").Равно(Тест.Имя)
.Свойство("КонтекстВызова").ИмеетДлину(2);
.Свойство("[0].Тесты").Заполнено()
.Что(ОписаниеМодуля.НаборыТестов[0].Тесты[0], "Тест результата")
.Свойство("Имя").Равно("Тест1")
.Свойство("КонтекстВызова").ИмеетДлину(2);
// 2
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1.Сервер");
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
ОписаниеМодуля.НаборыТестов.Очистить();
ДобавитьКопиюНабора(ОписаниеМодуля, Набор);
УстановитьНовыйФильтр(, "ТестовыйМодуль.Тест1.Сервер");
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ТестРезультата = Результат[0].Тесты[0];
ЮТест.ОжидаетЧто(ТестРезультата, "Тест с указанием контекста")
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов[0].Тесты[0], "Тест с указанием контекста")
.Свойство("Имя").Равно(Тест.Имя)
.Свойство("КонтекстВызова").ИмеетДлину(1);
// 3
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1.ВызовСервера");
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
ОписаниеМодуля.НаборыТестов.Очистить();
ДобавитьКопиюНабора(ОписаниеМодуля, Набор);
УстановитьНовыйФильтр(, "ТестовыйМодуль.Тест1.ВызовСервера");
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, "Тест с указаниме недоступного контекста")
.ИмеетДлину(1);
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов, "Тест с указаниме недоступного контекста")
.ИмеетДлину(0);
// 4
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1.Сервер");
Параметры.filter.contexts = ЮТКоллекции.ЗначениеВМассиве(Контексты.КлиентУправляемоеПриложение);
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
ОписаниеМодуля.НаборыТестов.Очистить();
ДобавитьКопиюНабора(ОписаниеМодуля, Набор);
УстановитьНовыйФильтр(, "ТестовыйМодуль.Тест1.Сервер", "КлиентУправляемоеПриложение");
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, "Тест с указаниме контекста и фильтра контекстов")
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов, "Тест с указаниме контекста и фильтра контекстов")
.ИмеетДлину(0);
КонецПроцедуры
Процедура Фильтр_ПолноеИмяТеста() Экспорт
ИмяМодуля = "ТестовыйМодуль";
ИмяТеста = "ТестовыйТест";
ОписаниеМодуля = ОписаниеМодуля(ИмяМодуля);
НаборТестов = ОписаниеНабораТестов();
НаборТестов.Тесты.Добавить(ОписаниеТеста(ИмяТеста));
НаборТестов.Тесты.Добавить(ОписаниеТеста(ИмяТеста, "Сервер"));
НаборТестов.Тесты.Добавить(ОписаниеТеста(ИмяТеста + "_"));
НаборТестов.Тесты.Добавить(ОписаниеТеста(ИмяТеста, "НеСервер"));
НаборТестов.Тесты.Добавить(ОписаниеТеста());
ДобавитьКопиюНабора(ОписаниеМодуля, НаборТестов);
УстановитьНовыйФильтр(, СтрШаблон("%1.%2", ИмяМодуля, ИмяТеста));
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(2);
УстановитьНовыйФильтр(, СтрШаблон("%1.%2.КлиентУправляемоеПриложение", ИмяМодуля, ИмяТеста));
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(1);
КонецПроцедуры
Процедура Фильтр_Контексты() Экспорт
ОписаниеМодуля = ОписаниеМодуля();
НаборТестов = ОписаниеНабораТестов();
НаборТестов.Тесты.Добавить(ОписаниеТеста()); // +
НаборТестов.Тесты.Добавить(ОписаниеТеста(, "Сервер")); // +
НаборТестов.Тесты.Добавить(ОписаниеТеста(, "Сервер, Сервер")); // +
НаборТестов.Тесты.Добавить(ОписаниеТеста(, "Клиент"));
ОписаниеМодуля.НаборыТестов.Добавить(НаборТестов);
УстановитьНовыйФильтр(, , "Сервер");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(3);
КонецПроцедуры
Процедура Фильтр_ТегиТеста() Экспорт
ОписаниеМодуля = ОписаниеМодуляДляТестированияФильтрации();
УстановитьНовыйФильтр(, , , "Тег Теста1, ТегТеста2, Т, _, Тег111");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(2)
.Свойство("[0].Тесты").ИмеетДлину(3)
.Свойство("[1].Тесты").ИмеетДлину(1);
КонецПроцедуры
Процедура Фильтр_ТегиНабора() Экспорт
ОписаниеМодуля = ОписаниеМодуляДляТестированияФильтрации();
УстановитьНовыйФильтр(, , , "Тег Набора");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(5);
ОписаниеМодуля = ОписаниеМодуляДляТестированияФильтрации();
УстановитьНовыйФильтр(, , , "Тег Набора, ТегТеста");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(2)
.Свойство("[0].Тесты").ИмеетДлину(5)
.Свойство("[1].Тесты").ИмеетДлину(1);
КонецПроцедуры
Процедура Фильтр_ТегиМодуля() Экспорт
ОписаниеМодуля = ОписаниеМодуляДляТестированияФильтрации();
УстановитьНовыйФильтр(, , , "Тег Модуля");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(0);
ОписаниеМодуля = ОписаниеМодуляДляТестированияФильтрации();
ОписаниеМодуля.Теги.Добавить("Тег Модуля");
УстановитьНовыйФильтр(, , , "Тег Модуля");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(2)
.Свойство("[0].Тесты").ИмеетДлину(5)
.Свойство("[1].Тесты").ИмеетДлину(2);
КонецПроцедуры
Процедура Фильтр_Наборы() Экспорт
ОписаниеМодуля = ОписаниеМодуляДляТестированияФильтрации();
ОписаниеМодуля.НаборыТестов[1].Имя = "ТестовыйНабор2";
УстановитьНовыйФильтр(, , , , "ТестовыйНабор");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(5)
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура УстановитьНовыйФильтр(Модули = Неопределено,
Тесты = Неопределено,
Контексты = Неопределено,
Теги = Неопределено,
Наборы = Неопределено)
Параметры = ЮТФабрика.ПараметрыЗапуска();
Если Наборы <> Неопределено Тогда
Параметры.filter.suites = ЮТСтроки.РазделитьСтроку(Наборы, ",");
КонецЕсли;
Если Тесты <> Неопределено Тогда
Параметры.filter.tests = ЮТСтроки.РазделитьСтроку(Тесты, ",");
КонецЕсли;
Если Модули <> Неопределено Тогда
Параметры.filter.modules = ЮТСтроки.РазделитьСтроку(Модули, ",");
КонецЕсли;
Если Теги <> Неопределено Тогда
Параметры.filter.tags = ЮТСтроки.РазделитьСтроку(Теги, ",");
КонецЕсли;
Если Контексты <> Неопределено Тогда
Параметры.filter.contexts = ЮТСтроки.РазделитьСтроку(Контексты, ",");
КонецЕсли;
УстановитьФильтр(Параметры);
КонецПроцедуры
Процедура УстановитьФильтр(Параметры)
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
КонецПроцедуры
Функция МетаданныеМодуля(ИмяМодуля = "ТестовыйМодуль", Расширение = "ТестовоеРасширение")
МетаданныеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
МетаданныеМодуля.Имя = ИмяМодуля;
МетаданныеМодуля.Расширение = Расширение;
Возврат МетаданныеМодуля;
КонецФункции
Функция ОписаниеМодуля(ИмяМодуля = "ТестовыйМодуль")
Возврат ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля(ИмяМодуля), Новый Массив());
КонецФункции
Функция ОписаниеНабораТестов(Имя = "ТестовыйНабор", Теги = "")
Возврат ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, Теги);
КонецФункции
Функция ОписаниеТеста(ИмяТеста = Неопределено, КонтекстыВызова = "Сервер, КлиентУправляемоеПриложение", Теги = "")
Если ИмяТеста = Неопределено Тогда
ИмяТеста = ЮТест.Данные().СлучайнаяСтрока();
КонецЕсли;
Возврат ЮТФабрикаСлужебный.ОписаниеТеста(ИмяТеста,
ЮТест.Данные().СлучайнаяСтрока(),
ЮТСтроки.РазделитьСтроку(КонтекстыВызова, ","),
Теги);
КонецФункции
Процедура ДобавитьКопиюНабора(ОписаниеМодуля, Набор)
ОписаниеМодуля.НаборыТестов.ДОбавить(ЮТКоллекции.СкопироватьРекурсивно(Набор));
КонецПроцедуры
Функция ОписаниеМодуляДляТестированияФильтрации()
Набор1 = ОписаниеНабораТестов();
Набор1.Теги = ЮТКоллекции.ЗначениеВМассиве("Тег набора");
Набор1.Тесты.Добавить(ОписаниеТеста());
Набор1.Тесты.Добавить(ОписаниеТеста(, , "Тег Теста1"));
Набор1.Тесты.Добавить(ОписаниеТеста(, , "Тег Теста1, ТегТеста2"));
Набор1.Тесты.Добавить(ОписаниеТеста(, , "ТегТеста"));
Набор1.Тесты.Добавить(ОписаниеТеста(, , "ТЕГ Теста1"));
Набор2 = ОписаниеНабораТестов();
Набор2.Тесты.Добавить(ОписаниеТеста(, , "ТегТеста2"));
Набор2.Тесты.Добавить(ОписаниеТеста(, , "ТегТеста"));
ОписаниеМодуля = ОписаниеМодуля();
ОписаниеМодуля.НаборыТестов.Добавить(Набор1);
ОписаниеМодуля.НаборыТестов.Добавить(Набор2);
Возврат ОписаниеМодуля;
КонецФункции
#КонецОбласти

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("Конструктор")
.ДобавитьТест("УстановитьТело")
;

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("Инициализировать")
.ДобавитьТест("Добавить")
.ДобавитьТест("MoveFirst")

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("ТестовыеДанные")
.ДобавитьТест("Установить")
.ДобавитьТест("УстановитьРеквизиты")
.ДобавитьТест("Фикция")

View File

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

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="a92bd232-f801-4337-aae8-5e0ff73cd9fc">
<name>ТегиТестов</name>
<synonym>
<key>ru</key>
<value>Теги тестов</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -39,6 +39,7 @@
Описание.Вставить("НаборыТестов", Новый Массив);
Описание.Вставить("Ошибки", Новый Массив);
Описание.Вставить("НастройкиВыполнения", Новый Структура);
Описание.Вставить("Теги", Новый Массив());
Описание.МетаданныеМодуля.Имя = СлучайнаяСтрокаЕслиНеопределено(ИмяМодуля);
Описание.МетаданныеМодуля.ПолноеИмя = ЮТТестовыеДанные.СлучайнаяСтрока() + "." + Описание.МетаданныеМодуля.Имя;

View File

@ -65,6 +65,7 @@
<commonModules>CommonModule.ПодпискиНаСобытия</commonModules>
<commonModules>CommonModule.Пользователи</commonModules>
<commonModules>CommonModule.ПомощникТестированияВызовСервера</commonModules>
<commonModules>CommonModule.ТегиТестов</commonModules>
<commonModules>CommonModule.ТестовыеДанные</commonModules>
<catalogs>Catalog.Встречи</catalogs>
<catalogs>Catalog.Товары</catalogs>