diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl index 6e94f023..5f3ef92b 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl @@ -19,334 +19,334 @@ #Область ПрограммныйИнтерфейс // Создает новый элемент и возвращает его ссылку. -// +// // Параметры: // Менеджер - Произвольный - Менеджер справочника/ПВХ и тд. // Наименование - Строка, Неопределено - Наименование элемента // Реквизиты - Структура, Неопределено - Значения реквизитов элемента -// +// // Возвращаемое значение: // ЛюбаяСсылка - Ссылка на созданный объект Функция СоздатьЭлемент(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено) Экспорт - + Если Реквизиты <> Неопределено Тогда Данные = Реквизиты; Иначе Данные = Новый Структура; КонецЕсли; - + Если ЗначениеЗаполнено(Наименование) Тогда Данные.Вставить("Наименование", Наименование); КонецЕсли; - + Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Менеджер, Данные, Неопределено, Ложь); ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка); - + Возврат Ссылка; - + КонецФункции // Создает новый документ и возвращает его ссылку. -// +// // Параметры: // Менеджер - Произвольный - Менеджер справочника/ПВХ и тд. // Реквизиты - Структура, Неопределено - Значения реквизитов элемента -// +// // Возвращаемое значение: // ДокументСсылка - Ссылка на созданный объект Функция СоздатьДокумент(Менеджер, Реквизиты = Неопределено) Экспорт - + Если Реквизиты <> Неопределено Тогда Данные = Реквизиты; Иначе Данные = Новый Структура; КонецЕсли; - + Если Данные.Свойство("РежимЗаписи") Тогда ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); ПараметрыЗаписи.РежимЗаписи = Данные.РежимЗаписи; Данные.Удалить("РежимЗаписи"); КонецЕсли; - + Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь); ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка); - + Возврат Ссылка; - + КонецФункции // Создает новую группу -// +// // Параметры: // Менеджер - Произвольный - Менеджер справочника/ПВХ и тд. // Наименование - Строка, Неопределено - Наименование элемента // Реквизиты - Структура, Неопределено - Значения реквизитов элемента -// +// // Возвращаемое значение: // ЛюбаяСсылка - Ссылка на созданную группу Функция СоздатьГруппу(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено) Экспорт - + Если Реквизиты <> Неопределено Тогда Данные = Реквизиты; Иначе Данные = Новый Структура; КонецЕсли; - + Данные.Вставить("ЭтоГруппа", Истина); - + Возврат СоздатьЭлемент(Менеджер, Наименование, Данные); - + КонецФункции // Генерирует и возвращает случайное число. -// +// // Параметры: // Минимум - Неопределено, Число - Минимальное значение // Максимум - Неопределено, Число - Максимальное значение // ЗнаковПослеЗапятой - Число - Количество знаков после запятой -// +// // Возвращаемое значение: // Число - Случайное число Функция СлучайноеЧисло(Минимум = 0, Максимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт - + #Если ВебКлиент Тогда ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТестовыеДанные.СлучайноеЧисло"); #Иначе Генератор = ЮТКонтекст.ЗначениеКонтекста("ГенераторСлучайныхЧисел"); - + Если Генератор = Неопределено Тогда Генератор = Новый ГенераторСлучайныхЧисел(); ЮТКонтекст.УстановитьЗначениеКонтекста("ГенераторСлучайныхЧисел", Генератор); КонецЕсли; - + Если Максимум = Неопределено Тогда Результат = Генератор.СлучайноеЧисло(Минимум); Иначе Результат = Генератор.СлучайноеЧисло(Минимум, Максимум); КонецЕсли; - + Если ЗнаковПослеЗапятой > 0 Тогда Множитель = Pow(10, ЗнаковПослеЗапятой); Результат = Результат + Окр(Генератор.СлучайноеЧисло(0, Множитель) / Множитель, ЗнаковПослеЗапятой); КонецЕсли; - + Возврат Результат; #КонецЕсли - + КонецФункции // Генерирует и возвращает случайное положительное число. -// +// // Параметры: // Максимум - Неопределено, Число - Максимальное значение // ЗнаковПослеЗапятой - Число - Знаков после запятой -// +// // Возвращаемое значение: // Число - Случайное положительное число Функция СлучайноеПоложительноеЧисло(Максимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт - + Возврат СлучайноеЧисло(1, Максимум, ЗнаковПослеЗапятой); - + КонецФункции // Генерирует и возвращает случайное отрицательное число. -// +// // Параметры: // Минимум - Неопределено, Число - Минимальное значение // ЗнаковПослеЗапятой - Число - Знаков после запятой -// +// // Возвращаемое значение: // Число - Случайное отрицательное число Функция СлучайноеОтрицательноеЧисло(Минимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт - + Возврат -СлучайноеЧисло(0, -Минимум, ЗнаковПослеЗапятой); - + КонецФункции // Генерирует и возвращает случайную строку указанной длины, строка может содержать цифры, английские и русские буквы в разных регистрах. -// +// // Параметры: // Длина - Число - Длина генерируемой строки, без учета префикса // Префикс - Строка - Префикс строки // ДопустимыеСимволы - Строка - Допустимые символы из которая будет формироваться случайно строка -// +// // Возвращаемое значение: // Строка - Случайная строка Функция СлучайнаяСтрока(Знач Длина = 10, Префикс = "", ДопустимыеСимволы = Неопределено) Экспорт - + Если ДопустимыеСимволы = Неопределено Тогда Строка = "1234567890абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; Иначе Строка = ДопустимыеСимволы; КонецЕсли; - + Результат = ""; КоличествоСимволов = СтрДлина(Строка); - + Длина = Длина - СтрДлина(Префикс); - + Для Инд = 1 По Длина Цикл - + Результат = Результат + Сред(Строка, СлучайноеЧисло(1, КоличествоСимволов), 1); - + КонецЦикла; - + Возврат Префикс + Результат; - + КонецФункции // Генерирует и возвращает случайную дату в указанном интервале (если не указан используется `0001-01-01 - 3999-12-31`). -// +// // Параметры: // Минимум - Дата - Минимальное значение случайной даты // - Неопределено - Если не указано используется `0001-01-01` // Максимум - Дата - Максимальное значение случайной даты // - Неопределено - Если не указано используется `3999-12-31` -// +// // Возвращаемое значение: // Дата - Случайная дата Функция СлучайнаяДата(Знач Минимум = Неопределено, Знач Максимум = Неопределено) Экспорт - + Если Минимум = Неопределено Тогда Минимум = '00010101'; КонецЕсли; - + Если Максимум = Неопределено Тогда Максимум = '39991231'; КонецЕсли; - + СекундВДне = 86400; КоличествоДней = Цел((Максимум - Минимум) / СекундВДне); Возврат Минимум + СлучайноеЧисло(0, КоличествоДней) * СекундВДне + СлучайноеЧисло(0, СекундВДне); - + КонецФункции // Генерирует и возвращает случайный IP адрес. -// +// // Возвращаемое значение: // Строка - Случайный IP адрес Функция СлучайныйIPАдрес() Экспорт - + Части = Новый Массив(); Части.Добавить(СлучайноеЧисло(1, 253)); Части.Добавить(СлучайноеЧисло(1, 253)); Части.Добавить(СлучайноеЧисло(1, 253)); Части.Добавить(СлучайноеЧисло(1, 253)); - + Возврат СтрСоединить(Части, "."); - + КонецФункции // Генерирует и возвращает уникальную строку, формируется из уникального идентификатора. -// +// // Параметры: // Префикс - Строка - Префикс строки -// +// // Возвращаемое значение: // Строка - Уникальная строка Функция УникальнаяСтрока(Префикс = "") Экспорт - + Возврат Префикс + Новый УникальныйИдентификатор(); - + КонецФункции // Возвращает случайный элемент списка. -// +// // Параметры: // Список - Массив из Произвольный - Коллекция возможных значений -// +// // Возвращаемое значение: // Произвольный - случайное значение из списка Функция СлучайноеЗначениеИзСписка(Список) Экспорт - + Индекс = СлучайноеЧисло(0, Список.ВГраница()); - + Возврат Список[Индекс]; - + КонецФункции // Возвращает случайно логическое значение. -// +// // Возвращаемое значение: // Булево - Случайное булево Функция СлучайноеБулево() Экспорт - + Возврат СлучайноеЧисло() %2 = 0; - + КонецФункции // Создает новый файл, который будет удален после теста -// +// // Параметры: // Содержимое - Строка, Неопределено - Содержимое файла // ТолькоЧтение - Булево - Установить атрибут `только чтение` // Расширение - Строка, Неопределено - Расширение нового файла -// +// // Возвращаемое значение: // Строка - Новый файл Функция НовыйФайл(Содержимое = Неопределено, ТолькоЧтение = Ложь, Расширение = Неопределено) Экспорт - + Результат = НовоеИмяВременногоФайла(Расширение); - + ЗаписьДанных = Новый ЗаписьДанных(Результат); - + Если Содержимое <> Неопределено Тогда ЗаписьДанных.ЗаписатьСимволы(Содержимое); КонецЕсли; - + ЗаписьДанных.Закрыть(); - + Если ТолькоЧтение Тогда СозданныйФайл = Новый Файл(Результат); СозданныйФайл.УстановитьТолькоЧтение(Истина); КонецЕсли; - + Возврат Результат; - + КонецФункции // Возвращает имя нового файла. // По окончании выполнения теста этот файл будет удален. -// +// // Параметры: // Расширение - Строка - Расширение нового файла -// +// // Возвращаемое значение: // Строка Функция НовоеИмяВременногоФайла(Расширение = Неопределено) Экспорт - + Возврат ЮТТестовыеДанныеСлужебный.НовоеИмяВременногоФайла(Расширение); - + КонецФункции // Читает таблицу MarkDown в массив структур -// +// // Параметры: // Строки - Строка - Таблица markdown -// +// // Возвращаемое значение: // Массив из Структура - Данные таблицы markdown Функция ТаблицаMarkDown(Строки) Экспорт - + ЗагрузилиЗаголовок = Ложь; Результат = Новый Массив(); Ключи = ""; - + Разделитель = "|"; - + Кодировка = КодировкаТекста.UTF8; Поток = ПолучитьДвоичныеДанныеИзСтроки(Строки, Кодировка).ОткрытьПотокДляЧтения(); Чтение = Новый ЧтениеТекста(Поток, Кодировка); - + Пока Истина Цикл - + Строка = Чтение.ПрочитатьСтроку(); Если Строка = Неопределено Тогда Прервать; КонецЕсли; - + Строка = СокрЛП(Строка); - + Если ПустаяСтрока(Строка) Тогда Продолжить; ИначеЕсли НЕ СтрНачинаетсяС(Строка, Разделитель) Тогда @@ -356,16 +356,16 @@ Продолжить; КонецЕсли; КонецЕсли; - + Блоки = СтрРазделить(Строка, Разделитель); - + Если ЗагрузилиЗаголовок Тогда - + Если Блоки.Количество() <> Ключи.Количество() Тогда ВызватьИсключение СтрШаблон("Количество значений в строке (%1) Markdown не совпадает с количеством заголовков (%2): |%3", Блоки.Количество(), Ключи.Количество(), Строка); КонецЕсли; - + СтрокаРезультата = Новый Структура(); Для Инд = 1 По Блоки.ВГраница() - 1 Цикл СтрокаРезультата.Вставить(Ключи[Инд], СокрЛП(Блоки[Инд])); @@ -379,68 +379,68 @@ Чтение.ПрочитатьСтроку(); // Пропуск строки разделителя ЗагрузилиЗаголовок = Истина; КонецЕсли; - + КонецЦикла; - + Чтение.Закрыть(); Поток.Закрыть(); - + Возврат Результат; - + КонецФункции // Формирует структуру на основании таблицы Markdown -// +// // Параметры: // Ключ - Строка - Имя ключевой колонки // Строки - Строка - Таблица markdown -// +// // Возвращаемое значение: // Структура Функция СтруктураMarkDown(Ключ, Строки) Экспорт - + Таблица = ТаблицаMarkDown(Строки); - + Результат = Новый Структура(); - + Для Каждого Строка Из Таблица Цикл Результат.Вставить(Строка[Ключ], Строка); КонецЦикла; - + Возврат Результат; - + КонецФункции // Формирует массив различных комбиначий параметров -// +// // Предназначено для формирования таблицы возможных значений параметров для краш теста метода. -// +// // Параметры: // ЗначенияПоУмолчанию - Структура - Значения параметров по умолчанию. // ЗначенияПараметров - Структура - Массивы значений для каждого параметра. -// +// // Возвращаемое значение: // Массив из Структура - Варианты параметров. Функция ВариантыПараметров(ЗначенияПоУмолчанию, ЗначенияПараметров) Экспорт - + Варианты = Новый Массив; Варианты.Добавить(ЗначенияПоУмолчанию); - + Ключи = ЮТОбщий.ВыгрузитьЗначения(ЗначенияПараметров, "Ключ"); - + ДобавитьВарианты(Варианты, ЗначенияПоУмолчанию, ЗначенияПараметров, Ключи, 0); - + Возврат Варианты; - + КонецФункции // Возвращает конструктор создания тестовых данных -// +// // Конструктор имеет ряд особенностей: -// -// * Нельзя использовать параллельно несколько конструкторов. +// +// * Нельзя использовать параллельно несколько конструкторов. // Например -// +// // ```bsl // Пользователь = КонструкторОбъекта(Справочники.Пользователи); // Документ = КонструкторОбъекта(Документы.Приход); @@ -448,34 +448,34 @@ // Пользователь.Записать(); // Документ.Провести(); // ``` -// +// // * Создание объекта происходит при вызове методов `Записать` и `Провести`, а создание реквизитов происходит во время вызова методов установки. // * При использовании на клиенте все значения должны быть сериализуемыми. -// +// // Параметры: // Менеджер - Строка - Имя менеджера. Примеры: Справочники.Товары, Документы.ПриходТоваров -// +// // Возвращаемое значение: // ОбработкаОбъект.ЮТКонструкторТестовыхДанных Функция КонструкторОбъекта(Менеджер) Экспорт - + Возврат ЮТКонструкторТестовыхДанныхСлужебный.Инициализировать(Менеджер); - + КонецФункции // Удаляет переданные объекта -// +// // Параметры: // Ссылки - Массив из ЛюбаяСсылка Процедура Удалить(Ссылки) Экспорт - + Если ЗначениеЗаполнено(Ссылки) Тогда ЮТТестовыеДанныеВызовСервера.Удалить(Ссылки); КонецЕсли; - + КонецПроцедуры -// Возвращает подражатель для формирования осмысленных значений. +// Возвращает объект подражателя для формирования осмысленных тестовых данных // // Возвращаемое значение: // ОбщийМодуль - Подражатель @@ -485,13 +485,13 @@ #Если Сервер Тогда // Возвращает мок для `HTTPСервисЗапрос`. -// +// // Возвращаемое значение: // ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок Функция HTTPСервисЗапрос() Экспорт - + Возврат Обработки.ЮТHTTPСервисЗапрос.Создать(); - + КонецФункции #КонецЕсли @@ -500,20 +500,20 @@ #Область СлужебныеПроцедурыИФункции Процедура ДобавитьВарианты(Варианты, БазоваяСтруктура, ЗначенияПараметров, Ключи, Инд) - + Если Инд > Ключи.ВГраница() Тогда Возврат; КонецЕсли; - + Ключ = Ключи[Инд]; Для Каждого Значение Из ЗначенияПараметров[Ключ] Цикл - + Вариант = ЮТОбщий.СкопироватьСтруктуру(БазоваяСтруктура); Вариант[Ключ] = Значение; Варианты.Добавить(Вариант); - + ДобавитьВарианты(Варианты, Вариант, ЗначенияПараметров, Ключи, Инд + 1); - + КонецЦикла; КонецПроцедуры diff --git a/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl b/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl index d4df8d2d..c7dd2e97 100644 --- a/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl @@ -19,7 +19,7 @@ #Область СлужебныйПрограммныйИнтерфейс Процедура ИсполняемыеСценарии() Экспорт - + ЮТТесты .ДобавитьТест("ИсполняемыеСценарииМодуля") .ДобавитьТестовыйНабор("ЭтоТестовыйМодуль", "Параметризированный, 1,2") @@ -31,27 +31,27 @@ .ДобавитьТестовыйНабор("ЗагрузкаТестов") .ДобавитьКлиентскийТест("ЗагрузитьТесты") ; - + КонецПроцедуры Процедура ЗагрузитьТесты() Экспорт - + ПараметрыЗапуска = ЮТФабрика.ПараметрыЗапуска(); ПараметрыЗапуска.filter.extensions = Неопределено; ПараметрыЗапуска.filter.modules = ЮТОбщий.ЗначениеВМассиве("ОМ_ЮТЧитатель"); - + Наборы = ЮТЧитатель.ЗагрузитьТесты(ПараметрыЗапуска); ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы") .ИмеетТип("Массив") .ИмеетДлину(1); - + НаборМодуля = Наборы[0]; - + ЮТест.ОжидаетЧто(НаборМодуля, "Набор тестов ОМ_ЮТЧитатель") .ИмеетТип("Структура") .Свойство("МетаданныеМодуля").ИмеетТип("Структура") .Свойство("НаборыТестов").ИмеетТип("Массив"); - + МетаданныеМодуля = НаборМодуля.МетаданныеМодуля; ЮТест.ОжидаетЧто(МетаданныеМодуля, "Метаданные модуля") .Заполнено() @@ -62,13 +62,13 @@ .Свойство("ВызовСервера").Равно(Ложь) .Свойство("ПолноеИмя").Равно("tests.ОМ_ЮТЧитатель") .Свойство("Сервер").Равно(Ложь); - + НаборыТестов = НаборМодуля.НаборыТестов; - + ЮТест.ОжидаетЧто(НаборыТестов, "Наборы тестов модуля") .ИмеетТип("Массив") .ИмеетДлину(3); - + ЮТест.ОжидаетЧто(НаборыТестов[0], "Набор тестов по умолчанию") .ИмеетТип("Структура") .Свойство("Имя").Равно("ОМ_ЮТЧитатель") @@ -76,29 +76,29 @@ .Свойство("Ошибки").ИмеетТип("Массив").НеЗаполнено() .Свойство("Теги").ИмеетТип("Массив").НеЗаполнено() .Свойство("Тесты").ИмеетТип("Массив").ИмеетДлину(1); - + Тесты = НаборыТестов[0].Тесты; - + ЮТест.ОжидаетЧто(Тесты.Количество(), "Количество тестов модуля") .БольшеИлиРавно(1); - + ЮТест.ОжидаетЧто(Тесты[0], "Первый тест") .Свойство("Имя").Равно("ИсполняемыеСценарииМодуля") .Свойство("Представление").НеЗаполнено() .Свойство("Теги").Равно(Новый Массив()) .Свойство("КонтекстВызова").Равно(ЮТОбщий.ЗначениеВМассиве("КлиентУправляемоеПриложение")); - + ПараметрыЗапуска = ЮТФабрика.ПараметрыЗапуска(); ПараметрыЗапуска.filter.extensions = ЮТОбщий.ЗначениеВМассиве("tests"); - + Наборы = ЮТЧитатель.ЗагрузитьТесты(ПараметрыЗапуска); ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests") .ИмеетДлину(18); - + КонецПроцедуры Процедура ИсполняемыеСценарииМодуля() Экспорт - + МетаданныеМодуля = Новый Структура; МетаданныеМодуля.Вставить("Имя", "ОМ_ЮТЧитатель"); МетаданныеМодуля.Вставить("КлиентУправляемоеПриложение", Истина); @@ -106,10 +106,10 @@ МетаданныеМодуля.Вставить("Клиент", Ложь); МетаданныеМодуля.Вставить("Сервер", Истина); МетаданныеМодуля.Вставить("ВызовСервера", Ложь); - + ЮТФильтрация.УстановитьКонтекст(Новый Структура("filter", Новый Структура)); ОписаниеМодуля = ЮТЧитатель.ИсполняемыеСценарииМодуля(МетаданныеМодуля); - + ЮТест.ОжидаетЧто(ОписаниеМодуля, "ОписаниеМодуля") .ИмеетТип("Структура") .Свойство("НаборыТестов") @@ -119,11 +119,11 @@ .Элемент("НаборыТестов[2]").ИмеетТип("Структура") ; Сценарии = ОписаниеМодуля.НаборыТестов; - + НаборПоУмолчанию = Сценарии[0]; НаборЭтоТестовыйМодуль = Сценарии[1]; НаборЗагрузкаТестов = Сценарии[2]; - + ЮТест.ОжидаетЧто(НаборПоУмолчанию, "Набор по умолчанию") .Свойство("Имя").Равно("ОМ_ЮТЧитатель") .Свойство("Представление").Равно("ОМ_ЮТЧитатель") @@ -134,28 +134,28 @@ .Свойство("Тесты[0].Теги").ИмеетДлину(0) .Свойство("Тесты[0].КонтекстВызова").Равно(ЮТОбщий.ЗначениеВМассиве("Сервер", "КлиентУправляемоеПриложение")) ; - + ЮТест.ОжидаетЧто(НаборЗагрузкаТестов, "Набор 'ЗагрузкаТестов'") .Свойство("Имя").Равно("ЗагрузкаТестов") .Свойство("Тесты").ИмеетДлину(1) .Свойство("Тесты[0].Имя").Равно("ЗагрузитьТесты") .Свойство("Тесты[0].КонтекстВызова").Равно(ЮТОбщий.ЗначениеВМассиве("КлиентУправляемоеПриложение")) ; - + ЮТест.ОжидаетЧто(НаборЭтоТестовыйМодуль, "Набор 'ЭтоТестовыйМодуль'") .Свойство("Имя").Равно("ЭтоТестовыйМодуль") .Свойство("Тесты").ИмеетДлину(4) .Свойство("Теги").ИмеетДлину(3) ; - + КонецПроцедуры Процедура ЭтоТестовыйМодуль(ИмяМодуля, ЭтоТестовый) Экспорт - + ОписаниеМодуля = ЮТМетаданныеСервер.МетаданныеМодуля(ИмяМодуля); ЮТест.ОжидаетЧто(ЮТЧитатель.ЭтоТестовыйМодуль(ОписаниеМодуля), "Проверка модуля " + ИмяМодуля) .Равно(ЭтоТестовый); - + КонецПроцедуры #КонецОбласти \ No newline at end of file