diff --git a/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/Module.bsl new file mode 100644 index 00000000..a2f4bf79 --- /dev/null +++ b/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/Module.bsl @@ -0,0 +1,73 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2023 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПроверитьТипПараметра(Значение, ОжидаемыйТип, ИмяМетода, ИмяПараметра, ЕслиУстановлен = Ложь) Экспорт + + Если ЕслиУстановлен И Значение = Неопределено Тогда + Возврат; + КонецЕсли; + + Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип); + + Если НЕ Соответствует Тогда + ТекстОшибки = СтрШаблон("Некорректный тип параметра `%1` метода `%2`. Метод принимает `%3`, а получили `%4` (%5)", + ИмяПараметра, + ИмяМетода, + ОжидаемыйТип, + ТипЗнч(Значение), + Значение); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип) Экспорт + + ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип); + + Если ТипОжидаемогоТипа = Тип("Строка") Тогда + Если СтрНайти(ОжидаемыйТип, ",") Тогда + ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип); + ТипОжидаемогоТипа = Тип("ОписаниеТипов"); + Иначе + ОжидаемыйТип = Тип(ОжидаемыйТип); + ТипОжидаемогоТипа = Тип("Тип"); + КонецЕсли; + КонецЕсли; + + ТипЗначения = ТипЗнч(Значение); + + Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда + // СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено") + Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено + И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение; + Иначе + Соответствует = ТипЗначения = ОжидаемыйТип; + КонецЕсли; + + Возврат Соответствует; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/ЮТПроверкиСлужебный.mdo b/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/ЮТПроверкиСлужебный.mdo new file mode 100644 index 00000000..895017eb --- /dev/null +++ b/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/ЮТПроверкиСлужебный.mdo @@ -0,0 +1,11 @@ + + + ЮТПроверкиСлужебный + + ru + Проверки служебный + + true + true + true + diff --git a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl index f7e130db..aabd88bf 100644 --- a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl @@ -143,7 +143,7 @@ ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки); - Результат = ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение); + Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение); Реверс(Результат, ПараметрыПроверки); @@ -360,7 +360,7 @@ Возврат Истина; КонецЕсли; - Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип); + Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип); Если НЕ Соответствует Тогда ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4", @@ -375,34 +375,6 @@ КонецФункции -Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип) - - ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип); - - Если ТипОжидаемогоТипа = Тип("Строка") Тогда - Если СтрНайти(ОжидаемыйТип, ",") Тогда - ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип); - ТипОжидаемогоТипа = Тип("ОписаниеТипов"); - Иначе - ОжидаемыйТип = Тип(ОжидаемыйТип); - ТипОжидаемогоТипа = Тип("Тип"); - КонецЕсли; - КонецЕсли; - - ТипЗначения = ТипЗнч(Значение); - - Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда - // СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено") - Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено - И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение; - Иначе - Соответствует = ТипЗначения = ОжидаемыйТип; - КонецЕсли; - - Возврат Соответствует; - -КонецФункции - Функция СравнитьПоЗначению(Значение1, Значение2) Попытка diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl index 326199ff..efe3604d 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl @@ -529,6 +529,16 @@ ТаблицаЗначений = Ложь; #КонецЕсли + Если НЕ ЗначениеЗаполнено(Макет) Тогда + ВызватьИсключение "Укажите источник данных (Макет)"; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ОписанияТипов) Тогда + ВызватьИсключение "Укажите описание загружаемых колонок (ОписанияТипов)"; + КонецЕсли; + + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОписанияТипов, "Структура, Соответствие", "ЮТТестовыеДанные.ЗагрузитьИзМакета", "ОписанияТипов"); + Возврат ЮТТестовыеДанныеСлужебный.ЗагрузитьИзМакета(Макет, ОписанияТипов, КэшЗначений, diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl index 0f22081e..f692100b 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl @@ -257,116 +257,6 @@ КонецФункции -Функция ОписаниеКолонок(КолонкиМакета, ОписанияТипов) - - Колонки = Новый Массив(); - ВсеКолонки = Новый Массив(); - - ОсновныеКолонки = Новый Структура(); - - Для Инд = 0 По КолонкиМакета.ВГраница() Цикл - - ИмяКолонки = КолонкиМакета[Инд]; - ЧастиИмени = СтрРазделить(ИмяКолонки, "."); - - Если ПустаяСтрока(ИмяКолонки) ИЛИ ОписанияТипов[ЧастиИмени[0]] = Неопределено Тогда - Продолжить; - КонецЕсли; - - ЭтоВложенныйРеквизит = ЧастиИмени.Количество() = 2; - ЭтоОсновнойРеквизит = ЧастиИмени.Количество() = 1; - - ОписаниеКолонки = ОписаниеКолонки(Инд); - - Если ЭтоОсновнойРеквизит Тогда - ОписаниеКолонки.Имя = ИмяКолонки; - Иначе - ОписаниеКолонки.Имя = ЧастиИмени[1]; - КонецЕсли; - - ОписаниеКолонки.ОписаниеТипа = ОписанияТипов[ИмяКолонки]; - - Если ОписаниеКолонки.ОписаниеТипа = Неопределено И ЭтоВложенныйРеквизит Тогда - - Родитель = ОсновныеКолонки[ЧастиИмени[0]]; - Реквизиты = Родитель.ОписаниеОбъектаМетаданных.Реквизиты; - - Если Реквизиты.Свойство(ЧастиИмени[1]) Тогда - ОписаниеКолонки.ОписаниеТипа = Реквизиты[ЧастиИмени[1]].Тип; - Иначе - Продолжить; // TODO - КонецЕсли; - - КонецЕсли; - - ДозаполнитьОписаниеКолонки(ОписаниеКолонки); - - ВсеКолонки.Добавить(ОписаниеКолонки); - - Если ЭтоОсновнойРеквизит Тогда - - Колонки.Добавить(ОписаниеКолонки); - ОсновныеКолонки.Вставить(ИмяКолонки, ОписаниеКолонки); - - ИначеЕсли ЭтоВложенныйРеквизит Тогда - - Родитель = ОсновныеКолонки[ЧастиИмени[0]]; - Родитель.ДополнительныеРеквизиты.Добавить(ОписаниеКолонки); - - Иначе - - ВызватьИсключение СтрШаблон("Недопустимо использовать несколько точек в имени колонки, `%1`", ИмяКолонки); - - КонецЕсли; - - КонецЦикла; - - Для Каждого ОписаниеКолонки Из ВсеКолонки Цикл - ОписаниеКолонки.Составное = ЗначениеЗаполнено(ОписаниеКолонки.ДополнительныеРеквизиты); - КонецЦикла; - - Возврат Колонки; - -КонецФункции - -Функция ОписаниеКолонки(Индекс) - - ОписаниеКолонки = Новый Структура; - ОписаниеКолонки.Вставить("Индекс", Индекс); - ОписаниеКолонки.Вставить("Имя", ""); - - ОписаниеКолонки.Вставить("ОписаниеТипа", Неопределено); - ОписаниеКолонки.Вставить("ТипЗначения", Неопределено); - ОписаниеКолонки.Вставить("Ссылочный", Ложь); - ОписаниеКолонки.Вставить("ДополнительныеРеквизиты", Новый Массив()); - ОписаниеКолонки.Вставить("Составное", Ложь); - ОписаниеКолонки.Вставить("Менеджер", Неопределено); - ОписаниеКолонки.Вставить("ОписаниеОбъектаМетаданных", Неопределено); - ОписаниеКолонки.Вставить("ЭтоПеречисление", Ложь); - ОписаниеКолонки.Вставить("ЭтоЧисло", Ложь); - ОписаниеКолонки.Вставить("ЭтоДата", Ложь); - - Возврат ОписаниеКолонки; - -КонецФункции - -Процедура ДозаполнитьОписаниеКолонки(ОписаниеКолонки) - - ТипЗначения = ОписаниеКолонки.ОписаниеТипа.Типы()[0]; - ОписаниеКолонки.ТипЗначения = ТипЗначения; - - ОписаниеКолонки.Ссылочный = ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения); - ОписаниеКолонки.ЭтоЧисло = ТипЗначения = Тип("Число"); - ОписаниеКолонки.ЭтоДата = ТипЗначения = Тип("Дата"); - - Если ОписаниеКолонки.Ссылочный Тогда - ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипЗначения); - ОписаниеКолонки.ЭтоПеречисление = ЮТМетаданные.ЭтоПеречисление(ОписаниеКолонки.ОписаниеОбъектаМетаданных); - ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ОписаниеОбъектаМетаданных); - КонецЕсли; - -КонецПроцедуры - Функция ЗначениеЯчейки(СтрокаДанных, ЗначениеПредставления, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания) Значение = ЗаменяемыеЗначения[ЗначениеПредставления]; @@ -386,11 +276,7 @@ КонецЕсли; ЗначенияРеквизитов = ЗначенияРеквизитов(СтрокаДанных, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания); - Если ОписаниеКолонки.Составное Тогда - Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания); - Иначе - Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания); - КонецЕсли; + Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания); Если КэшироватьЗначение Тогда КэшЗначений[ОписаниеКолонки.Менеджер].Вставить(ЗначениеПредставления, Значение); @@ -520,4 +406,167 @@ КонецФункции +#Область ОписаниеКолонок + +Функция ОписаниеКолонок(КолонкиМакета, ОписанияТипов) + + ОсновныеКолонки = ОсновныеКолонкиМакета(КолонкиМакета); + + Для Каждого Элемент Из ОписанияТипов Цикл + + Если НЕ ОсновныеКолонки.Свойство(Элемент.Ключ) Тогда + + Сообщение = СтрШаблон("Макет не содержит колонку `%1`", Элемент.Ключ); + ВызватьИсключение Сообщение; + + КонецЕсли; + + КонецЦикла; + + ЗагружаемыеКолонки = Новый Массив(); + + Для Каждого Элемент Из ОсновныеКолонки Цикл + + ОписаниеТиповКолонки = ОписаниеТиповКолонки(ОписанияТипов, Элемент.Ключ); + + Если ОписаниеТиповКолонки = Неопределено Тогда + Продолжить; + КонецЕсли; + + ОсновнаяКолонка = Элемент.Значение; + ЗагружаемыеКолонки.Добавить(ОсновнаяКолонка); + + ОсновнаяКолонка.ОписаниеТипа = ОписаниеТиповКолонки; + ДозаполнитьОписаниеКолонки(ОсновнаяКолонка); + + ДополнительныеКолонки = ОсновнаяКолонка.ДополнительныеРеквизиты; + ОсновнаяКолонка.ДополнительныеРеквизиты = Новый Массив(); + + Для Каждого ВложеннаяКолонка Из ДополнительныеКолонки Цикл + + ПолноеИмя = СтрШаблон("%1.%2", ОсновнаяКолонка.Имя, ВложеннаяКолонка.Имя); + ВложеннаяКолонка.ОписаниеТипа = ОписаниеТиповКолонки(ОписанияТипов, ПолноеИмя); + + Если ВложеннаяКолонка.ОписаниеТипа = Неопределено Тогда + Реквизиты = ОсновнаяКолонка.ОписаниеОбъектаМетаданных.Реквизиты; + + Если Реквизиты.Свойство(ВложеннаяКолонка.Имя) Тогда + ВложеннаяКолонка.ОписаниеТипа = Реквизиты[ВложеннаяКолонка.Имя].Тип; + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + + ОсновнаяКолонка.ДополнительныеРеквизиты.Добавить(ВложеннаяКолонка); + ДозаполнитьОписаниеКолонки(ВложеннаяКолонка); + + КонецЦикла; + + ОсновнаяКолонка.Составное = ЗначениеЗаполнено(ОсновнаяКолонка.ДополнительныеРеквизиты); + + КонецЦикла; + + Возврат ЗагружаемыеКолонки; + +КонецФункции + +Функция ОписаниеТиповКолонки(ОписанияТипов, ИмяКолонки) + + Если ТипЗнч(ОписанияТипов) = Тип("Структура") Тогда + Возврат ?(ОписанияТипов.Свойство(ИмяКолонки), ОписанияТипов[ИмяКолонки], Неопределено); + Иначе + Возврат ОписанияТипов[ИмяКолонки]; + КонецЕсли; + +КонецФункции + +Функция ОписаниеКолонки(Индекс) + + ОписаниеКолонки = Новый Структура; + ОписаниеКолонки.Вставить("Индекс", Индекс); + ОписаниеКолонки.Вставить("Имя", ""); + + ОписаниеКолонки.Вставить("ОписаниеТипа", Неопределено); + ОписаниеКолонки.Вставить("ТипЗначения", Неопределено); + ОписаниеКолонки.Вставить("Ссылочный", Ложь); + ОписаниеКолонки.Вставить("ДополнительныеРеквизиты", Новый Массив()); + ОписаниеКолонки.Вставить("Составное", Ложь); + ОписаниеКолонки.Вставить("Менеджер", Неопределено); + ОписаниеКолонки.Вставить("ОписаниеОбъектаМетаданных", Неопределено); + ОписаниеКолонки.Вставить("ЭтоПеречисление", Ложь); + ОписаниеКолонки.Вставить("ЭтоЧисло", Ложь); + ОписаниеКолонки.Вставить("ЭтоДата", Ложь); + + Возврат ОписаниеКолонки; + +КонецФункции + +Функция ОсновныеКолонкиМакета(КолонкиМакета) + + ОсновныеКолонки = Новый Структура(); + + // Сначала соберем основные колонки + Для Инд = 0 По КолонкиМакета.ВГраница() Цикл + + ИмяКолонки = КолонкиМакета[Инд]; + ЧастиИмени = СтрРазделить(ИмяКолонки, "."); + + Если ПустаяСтрока(ИмяКолонки) ИЛИ ЧастиИмени.Количество() = 2 Тогда + Продолжить; + ИначеЕсли ЧастиИмени.Количество() > 2 Тогда + Сообщение = СтрШаблон("Некорреткное имя колонки макета `%1`, доступно использовать максимум 1 уровень вложенности", ИмяКолонки); + ВызватьИсключение Сообщение; + КонецЕсли; + + ОписаниеКолонки = ОписаниеКолонки(Инд); + ОписаниеКолонки.Имя = ИмяКолонки; + + ОсновныеКолонки.Вставить(ИмяКолонки, ОписаниеКолонки); + + КонецЦикла; + + Для Инд = 0 По КолонкиМакета.ВГраница() Цикл + + ЧастиИмени = СтрРазделить(КолонкиМакета[Инд], "."); + + Если ЧастиИмени.Количество() <> 2 Тогда + Продолжить; + КонецЕсли; + + Если НЕ ОсновныеКолонки.Свойство(ЧастиИмени[0]) Тогда + Сообщение = СтрШаблон("Для колонки `%1` не найдена в макете основная колонка с именем `%2`", ИмяКолонки, ЧастиИмени[0]); + ВызватьИсключение Сообщение; + КонецЕсли; + + ОсновнаяКолонка = ОсновныеКолонки[ЧастиИмени[0]]; + ОписаниеКолонки = ОписаниеКолонки(Инд); + ОписаниеКолонки.Имя = ЧастиИмени[1]; + + ОсновнаяКолонка.ДополнительныеРеквизиты.Добавить(ОписаниеКолонки); + + КонецЦикла; + + Возврат ОсновныеКолонки; + +КонецФункции + +Процедура ДозаполнитьОписаниеКолонки(ОписаниеКолонки) + + ТипЗначения = ОписаниеКолонки.ОписаниеТипа.Типы()[0]; + ОписаниеКолонки.ТипЗначения = ТипЗначения; + + ОписаниеКолонки.Ссылочный = ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения); + ОписаниеКолонки.ЭтоЧисло = ТипЗначения = Тип("Число"); + ОписаниеКолонки.ЭтоДата = ТипЗначения = Тип("Дата"); + + Если ОписаниеКолонки.Ссылочный Тогда + ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипЗначения); + ОписаниеКолонки.ЭтоПеречисление = ЮТМетаданные.ЭтоПеречисление(ОписаниеКолонки.ОписаниеОбъектаМетаданных); + ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ОписаниеОбъектаМетаданных); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl index 9b647dbd..eac3846e 100644 --- a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl @@ -1547,6 +1547,10 @@ ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ОжидаемоеЗначение) <> Неопределено; + ИначеЕсли ЮТОбщий.МетодМодуляСуществует(ПроверяемоеЗначение, "Найти", , Ложь) Тогда + + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ОжидаемоеЗначение) <> Неопределено; + КонецЕсли; Возврат ИскомоеЗначениеНайдено; @@ -1622,7 +1626,7 @@ Попытка ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст); ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, Новый ОписаниеТипов("ОписаниеТипов, Тип, Строка")); - Результат = ТипЗначенияСоответствует(ПроверяемоеЗначение, ОжидаемоеЗначение); + Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ОжидаемоеЗначение); Исключение ЮТРегистрацияОшибок.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст); КонецПопытки; @@ -1643,7 +1647,7 @@ Возврат; КонецЕсли; - Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип); + Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип); Если НЕ Соответствует Тогда ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4", @@ -1656,34 +1660,6 @@ КонецПроцедуры -Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип) - - ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип); - - Если ТипОжидаемогоТипа = Тип("Строка") Тогда - Если СтрНайти(ОжидаемыйТип, ",") Тогда - ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип); - ТипОжидаемогоТипа = Тип("ОписаниеТипов"); - Иначе - ОжидаемыйТип = Тип(ОжидаемыйТип); - ТипОжидаемогоТипа = Тип("Тип"); - КонецЕсли; - КонецЕсли; - - ТипЗначения = ТипЗнч(Значение); - - Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда - // СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено") - Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено - И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение; - Иначе - Соответствует = ТипЗначения = ОжидаемыйТип; - КонецЕсли; - - Возврат Соответствует; - -КонецФункции - Функция ЭтоТипМассива(Тип) Возврат Тип = Тип("Массив") Или Тип = Тип("ФиксированныйМассив"); diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo index c31c4831..0f804e87 100644 --- a/exts/yaxunit/src/Configuration/Configuration.mdo +++ b/exts/yaxunit/src/Configuration/Configuration.mdo @@ -88,6 +88,7 @@ CommonModule.ЮТПредикаты CommonModule.ЮТПредикатыКлиентСервер CommonModule.ЮТПреобразования + CommonModule.ЮТПроверкиСлужебный CommonModule.ЮТРасширения CommonModule.ЮТРегистрацияОшибок CommonModule.ЮТСобытия diff --git a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl index d69b0616..497e822a 100644 --- a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl @@ -28,6 +28,8 @@ .ДобавитьТест("СоздатьГруппу") .ДобавитьТест("ЗагрузитьИзМакета_ТабличныйДокумент") .ДобавитьТест("ЗагрузитьИзМакета_MarkDown") + .ДобавитьТест("ЗагрузитьИзМакета_ЧастичнаяЗагрузкаДанных") + .ДобавитьТест("ЗагрузитьИзМакета_Проверки") .ДобавитьТест("СлучайныйИдентификатор") ; @@ -243,4 +245,78 @@ КонецПроцедуры +Процедура ЗагрузитьИзМакета_ЧастичнаяЗагрузкаДанных() Экспорт + + ОписанияТипов = Новый Структура; + ОписанияТипов.Вставить("Период", Новый ОписаниеТипов("Дата")); + ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число")); + + ТаблицаРезультатов = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C11", ОписанияТипов); + +#Если Сервер Тогда + Ютест.ОжидаетЧто(ТаблицаРезультатов) + .ИмеетДлину(3) + .Свойство("Колонки").ИмеетДлину(2) + .Содержит("Период") + .Содержит("Количество") + ; +#Иначе + Ютест.ОжидаетЧто(ТаблицаРезультатов) + .ИмеетТип("Массив") + .ИмеетДлину(3) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .ИмеетДлину(2) + .ИмеетСвойство("Период") + .ИмеетСвойство("Количество") + ) + ; +#КонецЕсли +КонецПроцедуры + +Процедура ЗагрузитьИзМакета_Проверки() Экспорт + + ЮТест.ОжидаетЧто(ЮТест.Данные()) + .Метод("ЗагрузитьИзМакета") + .Параметр(Неопределено) + .Параметр(Новый Массив) + .ВыбрасываетИсключение("Укажите источник данных (Макет)"); + + ЮТест.ОжидаетЧто(ЮТест.Данные()) + .Метод("ЗагрузитьИзМакета") + .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown") + .Параметр(Новый Массив) + .ВыбрасываетИсключение("Укажите описание загружаемых колонок (ОписанияТипов)"); + + ЮТест.ОжидаетЧто(ЮТест.Данные()) + .Метод("ЗагрузитьИзМакета") + .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown") + .Параметр(1) + .ВыбрасываетИсключение("Некорректный тип параметра `ОписанияТипов` метода `ЮТТестовыеДанные.ЗагрузитьИзМакета`. Метод принимает `Соответствие, Структура`, а получили `Число` (1)"); + + ЮТест.ОжидаетЧто(ЮТест.Данные()) + .Метод("ЗагрузитьИзМакета") + .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown") + .Параметр(Новый Структура("Количество, Резерв", Новый ОписаниеТипов("Число"), Новый ОписаниеТипов("Число"))) + .ВыбрасываетИсключение("Макет не содержит колонку `Резерв`"); + + ЮТест.ОжидаетЧто(ЮТест.Данные()) + .Метод("ЗагрузитьИзМакета") + .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown") + .Параметр(Новый Структура("Количество, Резерв", Новый ОписаниеТипов("Число"), Новый ОписаниеТипов("Число"))) + .ВыбрасываетИсключение("Макет не содержит колонку `Резерв`"); + + ЮТест.ОжидаетЧто(ЮТест.Данные()) + .Метод("ЗагрузитьИзМакета") + .Параметр("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C4:R5C5") + .Параметр(Новый Структура("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"))) + .ВыбрасываетИсключение("не найдена в макете основная колонка с именем `Товар`"); + + ЮТест.ОжидаетЧто(ЮТест.Данные()) + .Метод("ЗагрузитьИзМакета") + .Параметр("ОбщийМакет.ЮТ_МакетТестовыхДанных.ОсновнаяТаблица") + .Параметр(Новый Структура("Цена", Новый ОписаниеТипов("Дата"))) + .ВыбрасываетИсключение("Область не найдена: ОсновнаяТаблица"); + +КонецПроцедуры + #КонецОбласти