From a28a3a5bf5aab33a99f3f9f7f41c8502741f02cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Mon, 23 Jan 2023 00:46:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/CommonModules/ЮТОбщий/Module.bsl | 257 ++++++++---------- .../CommonModules/ЮТТестовыеДанные/Module.bsl | 12 + .../CommonModules/ЮТУтверждения/Module.bsl | 13 +- .../src/CommonModules/ОМ_Общий/Module.bsl | 19 ++ 4 files changed, 149 insertions(+), 152 deletions(-) diff --git a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl index e39777bf..2fa1bf55 100644 --- a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl @@ -65,12 +65,9 @@ // Фиксированный - Булево - возвращать фиксированный или обычный массив // // Возвращаемое значение: -// Массив, ФиксированныйМассив - массив строк +// Массив Из Строка - массив строк // -Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Разделитель = ";", УдалятьКонцевыеПробелы = Ложь, - Фиксированный = Ложь) Экспорт - - Результат = Новый Массив; +Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Разделитель = ";", УдалятьКонцевыеПробелы = Ложь) Экспорт КодУниверсальногоРазделителя = 5855; УниверсальныйРазделитель = Символ(КодУниверсальногоРазделителя); @@ -89,17 +86,21 @@ КонецЕсли; - Если Фиксированный Тогда - - Результат = Новый ФиксированныйМассив(МассивСтрок); - - Иначе - - Результат = МассивСтрок; - - КонецЕсли; + Возврат МассивСтрок; - Возврат Результат; +КонецФункции + +// Сформировать строку символов. +// Формирует строку из заданого количества повторяемых символов +// Параметры: +// Символ - Строка - Повторяемый символ +// Количество - Число - Количество повторений +// +// Возвращаемое значение: +// Строка - Строка повторяемых символов +Функция СформироватьСтрокуСимволов(Символ, Количество) Экспорт + + Возврат СтрСоединить(Новый Массив(Количество + 1), Символ); КонецФункции @@ -186,25 +187,21 @@ // Функция, объединяющая две коллекции( с типами Структура или Соответствие) в одну структуру, если это возможно // // Параметры: -// Коллекция1 - Соответствие, Структура - Коллекция с типом структура или соответствие -// Коллекция2 - Соответствие, Структура - Коллекция с типом структура или соответствие -// РезультатВФиксированнуюКоллекцию - Булево - Признак фиксированной коллекции, необязательный, по умолчанию Ложь, -// если Истина, возвращает фиксированная коллекция +// Коллекция1 - Соответствие из Произвольный +// - Структура +// Коллекция2 - Соответствие из Произвольный +// - Структура // // Возвращаемое значение: // Структура - Результат объединения двух коллекций // -Функция ОбъединитьВСтруктуру(Знач Коллекция1, Коллекция2, РезультатВФиксированнуюКоллекцию = Ложь) Экспорт +Функция ОбъединитьВСтруктуру(Знач Коллекция1, Коллекция2) Экспорт Если ТипЗнч(Коллекция1) <> Тип("Структура") Тогда - Коллекция1 = СкопироватьСтруктуру(Коллекция1); - КонецЕсли; - СтруктураРезультат = ДобавитьКлючИЗначениеВКоллекцию(Коллекция1, Коллекция2); - - Возврат ?(РезультатВФиксированнуюКоллекцию, Новый ФиксированнаяСтруктура(СтруктураРезультат), СтруктураРезультат); + Возврат ДобавитьКлючИЗначениеВКоллекцию(Коллекция1, Коллекция2); КонецФункции @@ -214,13 +211,12 @@ // Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.). // // Параметры: -// Источник - Произвольный - объект, который необходимо скопировать. -// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная +// Источник - Произвольный - объект, который необходимо скопировать. // // Возвращаемое значение: // Произвольный - копия объекта, переданного в параметре Источник. // -Функция СкопироватьРекурсивно(Знач Источник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт +Функция СкопироватьРекурсивно(Знач Источник) Экспорт Перем Приемник; @@ -228,23 +224,23 @@ ТипИсточника = ТипЗнч(Источник); Если ТипИсточника = Тип("Структура") Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда - - Приемник = СкопироватьСтруктуру(Источник, ФиксированнаяКоллекцияВОбычную); - + + Приемник = СкопироватьСтруктуру(Источник); + ИначеЕсли ТипИсточника = Тип("Соответствие") Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда - - Приемник = СкопироватьСоответствие(Источник, ФиксированнаяКоллекцияВОбычную); - + + Приемник = СкопироватьСоответствие(Источник); + ИначеЕсли ТипИсточника = Тип("Массив") Или ТипИсточника = Тип("ФиксированныйМассив") Тогда - - Приемник = СкопироватьМассив(Источник, ФиксированнаяКоллекцияВОбычную); - + + Приемник = СкопироватьМассив(Источник); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда - - Приемник = СкопироватьСписокЗначений(Источник, ФиксированнаяКоллекцияВОбычную); - + + Приемник = СкопироватьСписокЗначений(Источник); + Иначе - + СкопироватьПрисвоением = Истина; #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Если ТипИсточника = Тип("ТаблицаЗначений") Или ТипИсточника = Тип("ДеревоЗначений") Тогда @@ -254,7 +250,7 @@ КонецЕсли; #КонецЕсли - + КонецЕсли; Если СкопироватьПрисвоением Тогда @@ -271,29 +267,19 @@ // Создает копию значения типа Структура // // Параметры: -// СтруктураИсточник - Структура - копируемая структура -// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная +// СтруктураИсточник - Структура - копируемая структура // // Возвращаемое значение: // Структура - копия исходной структуры. // -Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт +Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт СтруктураРезультат = Новый Структура; Для Каждого КлючИЗначение Из СтруктураИсточник Цикл - - СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, - ФиксированнаяКоллекцияВОбычную)); - + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); КонецЦикла; - Если ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") И Не ФиксированнаяКоллекцияВОбычную Тогда - - СтруктураРезультат = Новый ФиксированнаяСтруктура(СтруктураРезультат); - - КонецЕсли; - Возврат СтруктураРезультат; КонецФункции @@ -302,59 +288,45 @@ // Создает копию значения типа Соответствие. // // Параметры: -// СоответствиеИсточник - Соответствие - соответствие, копию которого необходимо получить. -// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная +// СоответствиеИсточник - Соответствие из Произвольный - соответствие, копию которого необходимо получить. // // Возвращаемое значение: -// Соответствие - копия исходного соответствия. +// Соответствие Из Произвольный - копия исходного соответствия. // -Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт - +Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт + СоответствиеРезультат = Новый Соответствие; - + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл - - СоответствиеРезультат.Вставить(СкопироватьРекурсивно(КлючИЗначение.Ключ, ФиксированнаяКоллекцияВОбычную), - СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксированнаяКоллекцияВОбычную)); - + + СоответствиеРезультат.Вставить(СкопироватьРекурсивно(КлючИЗначение.Ключ), + СкопироватьРекурсивно(КлючИЗначение.Значение)); + КонецЦикла; - - Если ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") И Не ФиксированнаяКоллекцияВОбычную Тогда - - СоответствиеРезультат = Новый ФиксированноеСоответствие(СоответствиеРезультат); - - КонецЕсли; - + Возврат СоответствиеРезультат; - + КонецФункции // СкопироватьМассив // Создает копию значения типа Массив. // // Параметры: -// МассивИсточник - Массив - массив, копию которого необходимо получить -// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная +// МассивИсточник - Массив Из Произвольный - массив, копию которого необходимо получить // // Возвращаемое значение: -// Массив - копия исходного массива. +// Массив Из Произвольный - копия исходного массива. // -Функция СкопироватьМассив(МассивИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт +Функция СкопироватьМассив(МассивИсточник) Экспорт МассивРезультат = Новый Массив; Для Каждого Элемент Из МассивИсточник Цикл - - МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксированнаяКоллекцияВОбычную)); - + + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент)); + КонецЦикла; - Если ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") И Не ФиксированнаяКоллекцияВОбычную Тогда - - МассивРезультат = Новый ФиксированныйМассив(МассивРезультат); - - КонецЕсли; - Возврат МассивРезультат; КонецФункции @@ -363,22 +335,22 @@ // Создает копию значения типа СписокЗначений. // // Параметры: -// СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить -// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная +// СписокИсточник - СписокЗначений Из Произвольный - список значений, копию которого необходимо получить // // Возвращаемое значение: -// СписокЗначений - копия исходного списка значений +// СписокЗначений Из Произвольный - копия исходного списка значений // -Функция СкопироватьСписокЗначений(СписокИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт +Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт СписокРезультат = Новый СписокЗначений; Для Каждого ЭлементСписка Из СписокИсточник Цикл - - СписокРезультат.Добавить( - СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксированнаяКоллекцияВОбычную), ЭлементСписка.Представление, - ЭлементСписка.Пометка, ЭлементСписка.Картинка); - + + СписокРезультат.Добавить(СкопироватьРекурсивно(ЭлементСписка.Значение), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; Возврат СписокРезультат; @@ -539,7 +511,7 @@ // ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия. // ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции. // Возвращаемое значение: -// Соответствие - полученное соответствие. +// Соответствие Из Произвольный - полученное соответствие. Функция КоллекцияВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт Результат = Новый Соответствие(); @@ -678,6 +650,9 @@ Функция ВыполнитьМетод(ПолноеИмяМетода, Параметры = Неопределено) Экспорт +#Если ВебКлиент Тогда + ВызватьИсключение МетодНеДоступен("ЮТОбщий.ВыполнитьМетод"); +#Иначе Если СтрЗаканчиваетсяНа(ПолноеИмяМетода, ")") Тогда Алгоритм = ПолноеИмяМетода; @@ -700,12 +675,14 @@ КонецЕсли; Попытка + //@skip-check server-execution-safe-mode Выполнить(Алгоритм); Исключение Возврат ИнформацияОбОшибке(); КонецПопытки; Возврат Неопределено; +#КонецЕсли КонецФункции @@ -737,61 +714,30 @@ КонецФункции // СообщитьПользователю -// Формирует и выводит сообщение, которое может быть связано с элементом -// управления формы. +// Формирует и выводит сообщение // // Параметры: // ТекстСообщенияПользователю - Строка - текст сообщения. -// Поле - Строка - наименование реквизита формы -// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы) -// ОбъектИлиСсылка - Объект, Ссылка - Ссылка на объект ИБ или объект -// ИдентификаторНазначения - Строка, УникальныйИдентификатор - Уникальный идентификатор экземпляра формы -// к которой должно быть "привязано" сообщение -// -Процедура СообщитьПользователю(ТекстСообщенияПользователю = "", Поле = "", - ПутьКДанным = "", ОбъектИлиСсылка = Неопределено, - Знач ИдентификаторНазначения = "") Экспорт +Процедура СообщитьПользователю(ТекстСообщенияПользователю) Экспорт Сообщение = Новый СообщениеПользователю; Сообщение.Текст = СокрЛП(ТекстСообщенияПользователю); - Сообщение.Поле = Поле; - - Если ЗначениеЗаполнено(ИдентификаторНазначения) Тогда - - Если ТипЗнч(ИдентификаторНазначения) = Тип("Строка") Тогда - - ИдентификаторНазначения = Новый УникальныйИдентификатор(ИдентификаторНазначения); - - КонецЕсли; - - Сообщение.ИдентификаторНазначения = ИдентификаторНазначения; - - КонецЕсли; - - Если Не ПустаяСтрока(ПутьКДанным) Тогда - - Сообщение.ПутьКДанным = ПутьКДанным; - - КонецЕсли; - - Если ОбъектИлиСсылка <> Неопределено Тогда - - Сообщение.УстановитьДанные(ОбъектИлиСсылка); - - КонецЕсли; - Сообщение.Сообщить(); КонецПроцедуры Функция СтрокаJSON(Значение) Экспорт +#Если ВебКлиент ИЛИ ТонкийКлиент Тогда + ВызватьИсключение МетодНеДоступен("ЮТОбщий.СтрокаJSON", "веб и тонком клиенте"); +#Иначе ЗаписьJSON = Новый ЗаписьJSON(); ЗаписьJSON.УстановитьСтроку(); СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Значение); Возврат ЗаписьJSON.Закрыть(); - +#КонецЕсли + КонецФункции // СтрокаJSON Функция ПредставлениеЗначения(Значение) Экспорт @@ -806,6 +752,9 @@ Функция ПредставлениеТипа(Тип) Экспорт +#Если ВебКлиент ИЛИ ТонкийКлиент Тогда + ВызватьИсключение МетодНеДоступен("ЮТОбщий.ПредставлениеТипа", "веб и тонком клиенте"); +#Иначе ТипXML = СериализаторXDTO.XMLТип(Тип); Если ТипXML = Неопределено Тогда @@ -813,6 +762,13 @@ Иначе Возврат ТипXML.ИмяТипа; КонецЕсли; +#КонецЕсли + +КонецФункции + +Функция МетодНеДоступен(ИмяМетода, ИмяКонтекста = "веб-клиенте") Экспорт + + Возврат СтрШаблон("Метод `%1` не доступен в %2"); КонецФункции @@ -864,6 +820,13 @@ КонецФункции +Функция Модуль(ИмяМодуля) Экспорт + + //@skip-check server-execution-safe-mode + Возврат Вычислить(ИмяМодуля); + +КонецФункции + #КонецОбласти ///////////////////////////////////////////////////////////////////////////////// @@ -873,20 +836,14 @@ #Область СлужебныеПроцедурыИФункции Функция ДобавитьКлючИЗначениеВКоллекцию(КоллекцияРезультат, Коллекция) - - Для Каждого Элемент Из Коллекция Цикл - - КоллекцияРезультат.Вставить(Элемент.Ключ, Элемент.Значение); - - КонецЦикла; - - Возврат КоллекцияРезультат; - -КонецФункции - -Функция Модуль(ИмяМодуля) Экспорт - Возврат Вычислить(ИмяМодуля); + Для Каждого Элемент Из Коллекция Цикл + + КоллекцияРезультат.Вставить(Элемент.Ключ, Элемент.Значение); + + КонецЦикла; + + Возврат КоллекцияРезультат; КонецФункции @@ -899,10 +856,10 @@ ПредставлениеТипа = ТипОбъекта; Если ТипОбъекта = Тип("Структура") ИЛИ ТипОбъекта = Тип("Соответствие") Тогда - СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень * 4); + СформироватьСтрокуСимволов(" ", Уровень * 4); Шаблон = "%2: |%1"; - Представление = СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень * 4) + ПредставлениеСтруктуры(Объект, Уровень); + Представление = СформироватьСтрокуСимволов(" ", Уровень * 4) + ПредставлениеСтруктуры(Объект, Уровень); ИначеЕсли ТипОбъекта = Тип("Массив") Тогда @@ -952,7 +909,7 @@ КонецЦикла; - Возврат СтрСоединить(Строки, Символы.ПС + СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень * 4)); + Возврат СтрСоединить(Строки, Символы.ПС + СформироватьСтрокуСимволов(" ", Уровень * 4)); КонецФункции diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl index 9418ec05..5917cded 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl @@ -63,6 +63,9 @@ // Число - Случайное число Функция СлучайноеЧисло(Минимум = 0, Максимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт +#Если ВебКлиент Тогда + ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТестовыеДанные.СлучайноеЧисло"); +#Иначе Генератор = ЮТКонтекст.ЗначениеКонтекста("ГенераторСлучайныхЧисел"); Если Генератор = Неопределено Тогда @@ -82,6 +85,7 @@ КонецЕсли; Возврат Результат; +#КонецЕсли КонецФункции @@ -228,14 +232,21 @@ // Строка Функция НовоеИмяВременногоФайла(Расширение = Неопределено) Экспорт +#Если ВебКлиент Тогда + ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТестовыеДанные.НовоеИмяВременногоФайла"); +#Иначе Результат = ПолучитьИмяВременногоФайла(Расширение); ЮТКонтекст.КонтекстТеста().ВременныеФайлы.Добавить(Результат); Возврат Результат; +#КонецЕсли КонецФункции Функция ТаблицаMarkDown(Строки) Экспорт +#Если ВебКлиент Тогда + ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТестовыеДанные.ТаблицаMarkDown"); +#Иначе ЗагрузилиЗаголовок = Ложь; Результат = Новый Массив(); Ключи = ""; @@ -294,6 +305,7 @@ Поток.Закрыть(); Возврат Результат; +#КонецЕсли КонецФункции diff --git a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl index 6fd26af6..d9b04618 100644 --- a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl @@ -1159,15 +1159,19 @@ // Возвращаемое значение: // Структура - контекст утверждений: // * ПроверяемоеЗначение - Произвольный -// * ПредставлениеПроверяемогоЗначения - Строка +// - Неопределено +// * ПредставлениеПроверяемогоЗначения - Неопределено +// - Строка // * ПрефиксОшибки - Строка // * ИмяМетода - Строка // * ИмяСвойства - Строка +// - Неопределено // * НормализованныйПутьКСвойству - Неопределено - Не указано свойство // - Массив из Строка, Число // * ПараметрыМетода - Неопределено - Не установлены // - Массив из Произвольный // * ОписаниеПроверки - Строка +// - Неопределено Функция НовыйКонтекстУтверждения() Экспорт Контекст = Новый Структура; @@ -1191,7 +1195,7 @@ // ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт - ЮТУтверждения.СброситьКонтекст(); + СброситьКонтекст(); КонецПроцедуры @@ -1459,6 +1463,9 @@ Функция ВызватьМетод(Модуль, ИмяМетода, ПараметрыМетода) +#Если ВебКлиент Тогда + ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТУтверждения.ВызватьМетод"); +#Иначе Если Не ЗначениеЗаполнено(ИмяМетода) Тогда ВызватьИсключение "ИмяМетода не заполнено в контексте. Воспользуйтесь предварительно методом интерфейса `Метод(ИмяМетода)`"; КонецЕсли; @@ -1482,6 +1489,7 @@ Результат = Новый Структура("ИсключениеВозникло, ТекстИсключения", Ложь); Попытка + //@skip-check server-execution-safe-mode Выполнить(СтрокаДляВыполнения); Исключение Результат.ИсключениеВозникло = Истина; @@ -1489,6 +1497,7 @@ КонецПопытки; Возврат Результат; +#КонецЕсли КонецФункции diff --git a/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl b/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl index 0dc0ffad..d4fe265b 100644 --- a/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl +++ b/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl @@ -29,6 +29,7 @@ ЮТТесты .ДобавитьТест("ДобавитьСтроку") .ДобавитьТест("ОбъединитьВСтруктуру") + .ДобавитьТест("СформироватьСтрокуСимволов") ; КонецПроцедуры @@ -102,6 +103,24 @@ КонецПроцедуры +Процедура СформироватьСтрокуСимволов() Экспорт + + Варианты = ЮТест.Варианты("Символ, Количество, Результат") + .Добавить("1", 1, "1") + .Добавить("12", 0, "") + .Добавить("12", 2, "1212") + .СписокВариантов(); + + Для Каждого Вариант Из Варианты Цикл + + Результат = ЮТОбщий.СформироватьСтрокуСимволов(Вариант.Символ, Вариант.Количество); + ЮТест.ОжидаетЧто(Результат, СтрШаблон("%1 * %2", Вариант.Символ, Вариант.Количество)) + .Равно(Вариант.Результат); + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции