1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-12-09 08:55:53 +02:00
Предикат "ВСписке"
This commit is contained in:
alkoleft 2024-03-24 02:03:03 +03:00
parent a675f37821
commit 7d40a50880
8 changed files with 147 additions and 11 deletions

View File

@ -161,7 +161,7 @@
Строки.Добавить(СтрСоединить(ВыбираемыеПоля, "," + Символы.ПС)); Строки.Добавить(СтрСоединить(ВыбираемыеПоля, "," + Символы.ПС));
Строки.Добавить("ИЗ " + ОписаниеЗапроса.ИмяТаблицы); Строки.Добавить("ИЗ " + ОписаниеЗапроса.ИмяТаблицы);
Условия = СформироватьУсловия(ОписаниеЗапроса.Условия, ОписаниеЗапроса.ИмяТаблицы, Запрос); Условия = СформироватьУсловия(ОписаниеЗапроса.Условия, ОписаниеЗапроса.ИмяТаблицы, Запрос);
Если Условия.Количество() Тогда Если Условия.Количество() Тогда
@ -299,6 +299,8 @@
Шаблон = "ТИПЗНАЧЕНИЯ(%1) = &%2"; Шаблон = "ТИПЗНАЧЕНИЯ(%1) = &%2";
ИначеЕсли Выражение = ВыраженияПредикатов.Содержит Тогда ИначеЕсли Выражение = ВыраженияПредикатов.Содержит Тогда
Шаблон = "%1 ПОДОБНО ""%%"" + &%2 + ""%%"""; Шаблон = "%1 ПОДОБНО ""%%"" + &%2 + ""%%""";
ИначеЕсли Выражение = ВыраженияПредикатов.ВСписке Тогда
Шаблон = "%1 В (&%2)";
ИначеЕсли Выражение = ВыраженияПредикатов.Заполнено Тогда ИначеЕсли Выражение = ВыраженияПредикатов.Заполнено Тогда
// TODO Реализовать // TODO Реализовать
ВызватьИсключение "Проверка заполненности пока не поддерживается"; ВызватьИсключение "Проверка заполненности пока не поддерживается";

View File

@ -41,6 +41,22 @@
КонецФункции КонецФункции
// Устанавливает имя свойства, все последующие проверки будут относится к нему.
// Это алиас для см. Реквизит
//
// Параметры:
// ИмяСвойства - Строка - Имя реквизита
// - Число - Индекс коллекции
// - Произвольный - Ключ соответствия
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания
Функция Свойство(ИмяСвойства) Экспорт
Возврат Реквизит(ИмяСвойства);
КонецФункции
// Добавляет предикат, проверяющий равенство объекта (свойства) указанному значению // Добавляет предикат, проверяющий равенство объекта (свойства) указанному значению
// //
// Параметры: // Параметры:
@ -295,6 +311,21 @@
КонецФункции КонецФункции
// Добавляет условие, что проверяемое значение (или значение его свойства) входит в список значений
//
// Параметры:
// Значения - Массив из Произвольный - Значения для проверки
// - СписокЗначений из Произвольный - Значения для проверки
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания
Функция ВСписке(Значения) Экспорт
ДобавитьПредикат(Выражения().ВСписке, Значения);
Возврат ЮТПредикаты;
КонецФункции
// Возвращает набор сформированных утверждений. // Возвращает набор сформированных утверждений.
// //
// Рекомендуется использовать этот метод, если планируется отложенная проверка предикатов. Например, вы хотите сформировать два набору предикатов // Рекомендуется использовать этот метод, если планируется отложенная проверка предикатов. Например, вы хотите сформировать два набору предикатов
@ -358,6 +389,7 @@
Выражения.Вставить("НеСодержит", "НеСодержит"); Выражения.Вставить("НеСодержит", "НеСодержит");
Выражения.Вставить("СодержитСтрокуПоШаблону", "СодержитСтрокуПоШаблону"); Выражения.Вставить("СодержитСтрокуПоШаблону", "СодержитСтрокуПоШаблону");
Выражения.Вставить("НеСодержитСтрокуПоШаблону", "НеСодержитСтрокуПоШаблону"); Выражения.Вставить("НеСодержитСтрокуПоШаблону", "НеСодержитСтрокуПоШаблону");
Выражения.Вставить("ВСписке", "ВСписке");
Возврат Новый ФиксированнаяСтруктура(Выражения); Возврат Новый ФиксированнаяСтруктура(Выражения);

View File

@ -142,6 +142,8 @@
Шаблон = "содержит %1"; Шаблон = "содержит %1";
ИначеЕсли Выражение = Выражения.СодержитСтрокуПоШаблону Тогда ИначеЕсли Выражение = Выражения.СодержитСтрокуПоШаблону Тогда
Шаблон = "содержит подстроку соответствующую шаблону %1"; Шаблон = "содержит подстроку соответствующую шаблону %1";
ИначеЕсли Выражение = Выражения.ВСписке Тогда
Шаблон = "в списке %1";
Иначе Иначе
ВызватьИсключение "Не описан шаблон сообщения для выражения предиката " + Выражение; ВызватьИсключение "Не описан шаблон сообщения для выражения предиката " + Выражение;
КонецЕсли; КонецЕсли;

View File

@ -109,7 +109,9 @@
// в противном случае, будет возвращен текст шаблона без изменений. // в противном случае, будет возвращен текст шаблона без изменений.
// //
Функция ПодставитьПредставлениеЗначенияВШаблон(ШаблонСтроки, ЗначениеПараметра) Экспорт Функция ПодставитьПредставлениеЗначенияВШаблон(ШаблонСтроки, ЗначениеПараметра) Экспорт
Возврат СтрЗаменить(ШаблонСтроки, "%1", ПредставлениеЗначения(ЗначениеПараметра)); Возврат СтрЗаменить(ШаблонСтроки, "%1", ПредставлениеЗначения(ЗначениеПараметра));
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -481,6 +481,10 @@
Результат = ПроверитьСоответствуетШаблону(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки); Результат = ПроверитьСоответствуетШаблону(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ВСписке Тогда
Результат = ПроверитьВСписке(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки);
Иначе Иначе
ВызватьИсключение СтрШаблон("Неизвестное выражение предиката `%1`", Выражение.ВидСравнения); ВызватьИсключение СтрШаблон("Неизвестное выражение предиката `%1`", Выражение.ВидСравнения);
@ -630,6 +634,24 @@
КонецФункции КонецФункции
Функция ПроверитьВСписке(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки)
ТипыПараметровСоответствуют = ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Массив, ФиксированныйМассив, СписокЗначений");
Если Не ТипыПараметровСоответствуют Тогда
Возврат Неопределено;
КонецЕсли;
ТипСписка = ТипЗнч(ОжидаемоеЗначение);
Если ЮТТипыДанныхСлужебный.ЭтоМассива(ТипСписка) Тогда
Возврат ОжидаемоеЗначение.Найти(ПроверяемоеЗначение) <> Неопределено;
Иначе
Возврат ОжидаемоеЗначение.НайтиПоЗначению(ПроверяемоеЗначение) <> Неопределено;
КонецЕсли;
КонецФункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти

View File

@ -483,6 +483,22 @@
КонецФункции КонецФункции
// Проверяет значение (или его свойство), оно должно входить в указанный список.
//
// Параметры:
// Значения - Массив из Произвольный - Значения для проверки
// - СписокЗначений из Произвольный - Значения для проверки
// ОписаниеПроверки - Строка - Описание конкретной проверки
//
// Возвращаемое значение:
// ОбщийМодуль - Этот модуль для замыкания
Функция ВСписке(Значения, ОписаниеПроверки = Неопределено) Экспорт
ПроверитьПредикат(ЮТПредикаты.Выражения().ВСписке, Значения, ОписаниеПроверки);
Возврат ЮТУтверждения;
КонецФункции
#КонецОбласти #КонецОбласти
// Проверяет наличие свойств и их значения у проверяемого объекта (или его свойства). // Проверяет наличие свойств и их значения у проверяемого объекта (или его свойства).

View File

@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©// //©///////////////////////////////////////////////////////////////////////////©//
// //
// Copyright 2021-2023 BIA-Technologies Limited Liability Company // Copyright 2021-2024 BIA-Technologies Limited Liability Company
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
@ -31,6 +31,7 @@
.ДобавитьТест("ЗначенияРеквизитовЗаписи") .ДобавитьТест("ЗначенияРеквизитовЗаписи")
.ДобавитьТест("ЗначениеРеквизитаЗаписи") .ДобавитьТест("ЗначениеРеквизитаЗаписи")
.ДобавитьТест("ДвиженияДокумента") .ДобавитьТест("ДвиженияДокумента")
.ДобавитьТест("Записи_Условие_ВСписке")
; ;
КонецПроцедуры КонецПроцедуры
@ -117,23 +118,19 @@
Процедура РезультатЗапроса() Экспорт Процедура РезультатЗапроса() Экспорт
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары") Товар = НовыйТовар();
.Фикция("Наименование")
.Фикция("Поставщик");
Ссылка = Конструктор.Записать();
ДанныеСправочника = Конструктор.ДанныеОбъекта();
ОписаниеЗапроса = ЮТЗапросы.ОписаниеЗапроса(); ОписаниеЗапроса = ЮТЗапросы.ОписаниеЗапроса();
ОписаниеЗапроса.ИмяТаблицы = "Справочник.Товары"; ОписаниеЗапроса.ИмяТаблицы = "Справочник.Товары";
ОписаниеЗапроса.Условия.Добавить("Ссылка = &Ссылка"); ОписаниеЗапроса.Условия.Добавить("Ссылка = &Ссылка");
ОписаниеЗапроса.Условия.Добавить("НЕ ПометкаУдаления"); ОписаниеЗапроса.Условия.Добавить("НЕ ПометкаУдаления");
ОписаниеЗапроса.ЗначенияПараметров.Вставить("Ссылка", Ссылка); ОписаниеЗапроса.ЗначенияПараметров.Вставить("Ссылка", Товар);
ОписаниеЗапроса.ВыбираемыеПоля.Добавить("Наименование"); ОписаниеЗапроса.ВыбираемыеПоля.Добавить("Наименование");
ОписаниеЗапроса.ВыбираемыеПоля.Добавить("1+1 КАК Число"); ОписаниеЗапроса.ВыбираемыеПоля.Добавить("1+1 КАК Число");
ЮТест.ОжидаетЧто(ЮТЗапросы.РезультатЗапроса(ОписаниеЗапроса)) ЮТест.ОжидаетЧто(ЮТЗапросы.РезультатЗапроса(ОписаниеЗапроса))
.ИмеетДлину(1) .ИмеетДлину(1)
.Свойство("[0].Наименование").Равно(ДанныеСправочника.Наименование) .Свойство("[0].Наименование").Равно(Товар.Наименование)
.Свойство("[0].Число").Равно(2); .Свойство("[0].Число").Равно(2);
КонецПроцедуры КонецПроцедуры
@ -395,4 +392,49 @@
КонецПроцедуры КонецПроцедуры
Процедура Записи_Условие_ВСписке() Экспорт
ИмяТаблицы = "Справочник.Товары";
ВидТовар = ПредопределенноеЗначение("Перечисление.ВидыТоваров.Товар");
ВидУслуга = ПредопределенноеЗначение("Перечисление.ВидыТоваров.Услуга");
Товар = НовыйТовар(ВидТовар);
Услуга = НовыйТовар(ВидУслуга);
Результат = ЮТЗапросы.Записи(ИмяТаблицы, ЮТест.Предикат()
.Свойство("Вид").ВСписке(ЮТКоллекции.ЗначениеВМассиве(ВидТовар, ВидУслуга)));
ЮТест.ОжидаетЧто(Результат)
.ИмеетДлину(2)
.ЛюбойЭлементСодержитСвойствоСоЗначением("Ссылка", Товар)
.ЛюбойЭлементСодержитСвойствоСоЗначением("Ссылка", Услуга);
Результат = ЮТЗапросы.Записи(ИмяТаблицы, ЮТест.Предикат()
.Свойство("Вид").ВСписке(ЮТКоллекции.ЗначениеВМассиве(ВидТовар)));
ЮТест.ОжидаетЧто(Результат)
.ИмеетДлину(1)
.Свойство("[0].Ссылка", Товар);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция НовыйТовар(ВидТовара = Неопределено)
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары")
.Фикция("Наименование")
.Фикция("Поставщик");
Если ЗначениеЗаполнено(ВидТовара) Тогда
Конструктор.Установить("Вид", ВидТовара);
Иначе
Конструктор.Фикция("Вид");
КонецЕсли;
Возврат Конструктор.Записать();
КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -77,7 +77,15 @@
.ДобавитьТест("ЛюбойЭлементСоответствуетПредикату") .ДобавитьТест("ЛюбойЭлементСоответствуетПредикату")
.ДобавитьТест("СодержитПредикат") .ДобавитьТест("СодержитПредикат")
.ДобавитьТест("НеСодержитПредикат") .ДобавитьТест("НеСодержитПредикат")
.ДобавитьТест("ФорматированныеСтроки") .ДобавитьТест("ФорматированныеСтроки");
Массив = ЮТКоллекции.ЗначениеВМассиве(0, 1, "2");
Список = Новый СписокЗначений();
Список.ЗагрузитьЗначения(Массив);
ЮТТесты.ДобавитьТест("ВСписке")
.СПараметрами(Массив)
.СПараметрами(Список)
; ;
КонецПроцедуры КонецПроцедуры
@ -2375,6 +2383,16 @@
КонецПроцедуры КонецПроцедуры
Процедура ВСписке(Коллекция) Экспорт
ЮТест.ОжидаетЧто(0)
.ВСписке(Коллекция);
Ошибка = ОшибкаУтверждения(-1, "ВСписке", Коллекция);
ПроверитьОшибкуУтверждения(Ошибка, СтрШаблон("проверяемое значение `-1` в списке `%1`, но это не так.", Коллекция));
КонецПроцедуры
Процедура ФорматированныеСтроки() Экспорт Процедура ФорматированныеСтроки() Экспорт
Строка = Новый ФорматированнаяСтрока("Тестовая строка"); Строка = Новый ФорматированнаяСтрока("Тестовая строка");
@ -2399,9 +2417,9 @@
Функция ОшибкаУтверждения(ПроверяемоеЗначение, Утверждение, Параметр) Функция ОшибкаУтверждения(ПроверяемоеЗначение, Утверждение, Параметр)
Параметры = ЮТКоллекции.ЗначениеВМассиве(Параметр); Параметры = ЮТКоллекции.ЗначениеВМассиве(Параметр);
ЮТест.ОжидаетЧто(ПроверяемоеЗначение); ЮТест.ОжидаетЧто(ПроверяемоеЗначение);
Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод("ЮТУтверждения." + Утверждение, Параметры); Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод("ЮТУтверждения." + Утверждение, Параметры);
Возврат Ошибка; Возврат Ошибка;
КонецФункции КонецФункции