mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-30 08:36:50 +02:00
Merge pull request #230 from bia-technologies/feature/214
214 / Вынес метод ЗначениеСвойства в публичный api
This commit is contained in:
commit
25959f6585
@ -16,6 +16,43 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Возвращает значение свойства объекта.
|
||||
// Возможно получение "глубоко" вложенных свойство и элементов коллекции по индексу
|
||||
//
|
||||
// Параметры:
|
||||
// Объект - Произвольный
|
||||
// ИмяСвойства - Строка - Путь к свойству. Примеры: "ИмяСвойства.ИмяВложенногоСвойства", "[2].ИмяСвойства", "ИмяСвойства[2].ИмяВложенногоСвойства"
|
||||
// - Число - Индекс элемента. Возможен выбор элемента с конца, для этого нужно указывать отрицательный номер элемента с конца,
|
||||
// например: '-1' - последний элемент, '-2' - предпоследний
|
||||
// Возвращаемое значение:
|
||||
// Произвольный
|
||||
Функция ЗначениеСвойства(Объект, ИмяСвойства) Экспорт
|
||||
|
||||
Путь = ЧастиПути(ИмяСвойства);
|
||||
|
||||
Значение = Объект;
|
||||
Для Каждого Часть Из Путь Цикл
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда
|
||||
Значение = Значение.Получить();
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Часть) = Тип("Число") И Часть < 0 И ТипЗнч(Значение) <> Тип("Соответствие") Тогда
|
||||
Часть = Значение.Количество() + Часть;
|
||||
КонецЕсли;
|
||||
|
||||
Значение = Значение[Часть];
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Область Строки
|
||||
@ -1019,4 +1056,65 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЧастиПути(Цепочка)
|
||||
|
||||
ПутьКСвойству = Новый Массив();
|
||||
|
||||
ТипПути = ТипЗнч(Цепочка);
|
||||
|
||||
Если ТипПути = Тип("Строка") Тогда
|
||||
|
||||
Части = СтрРазделить(Цепочка, ".");
|
||||
|
||||
Для Каждого Часть Из Части Цикл
|
||||
|
||||
Если СодержитИндекс(Часть) Тогда
|
||||
|
||||
ИзвлечьИндекс(Часть, ПутьКСвойству);
|
||||
|
||||
Иначе
|
||||
|
||||
ПутьКСвойству.Добавить(Часть);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
ПутьКСвойству.Добавить(Цепочка);
|
||||
|
||||
КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off
|
||||
|
||||
Возврат ПутьКСвойству;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СодержитИндекс(ИмяСвойства)
|
||||
|
||||
Возврат СтрНайти(ИмяСвойства, "[") > 0 И СтрЗаканчиваетсяНа(ИмяСвойства, "]") ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ИзвлечьИндекс(ИмяСвойства, БлокиПути)
|
||||
|
||||
ПозицияИндекса = СтрНайти(ИмяСвойства, "[");
|
||||
|
||||
Если ПозицияИндекса > 1 Тогда
|
||||
БлокиПути.Добавить(Лев(ИмяСвойства, ПозицияИндекса - 1));
|
||||
КонецЕсли;
|
||||
|
||||
Пока ПозицияИндекса > 0 Цикл
|
||||
|
||||
ЗакрывающаяПозиция = СтрНайти(ИмяСвойства, "]", , ПозицияИндекса);
|
||||
ИндексСтрокой = Сред(ИмяСвойства, ПозицияИндекса + 1, ЗакрывающаяПозиция - ПозицияИндекса - 1);
|
||||
Индекс = Число(ИндексСтрокой);
|
||||
БлокиПути.Добавить(Индекс);
|
||||
|
||||
ПозицияИндекса = СтрНайти(ИмяСвойства, "[", , ЗакрывающаяПозиция);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -148,29 +148,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеСвойства(Объект, ИмяСвойства) Экспорт
|
||||
|
||||
Путь = ЧастиПути(ИмяСвойства);
|
||||
|
||||
Значение = Объект;
|
||||
Для Каждого Часть Из Путь Цикл
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда
|
||||
Значение = Значение.Получить();
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Часть) = Тип("Число") И Часть < 0 И ТипЗнч(Значение) <> Тип("Соответствие") Тогда
|
||||
Часть = Значение.Количество() + Часть;
|
||||
КонецЕсли;
|
||||
|
||||
Значение = Значение[Часть];
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
@ -279,67 +256,6 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ЧастиПути(Цепочка)
|
||||
|
||||
ПутьКСвойству = Новый Массив();
|
||||
|
||||
ТипПути = ТипЗнч(Цепочка);
|
||||
|
||||
Если ТипПути = Тип("Строка") Тогда
|
||||
|
||||
Части = СтрРазделить(Цепочка, ".");
|
||||
|
||||
Для Каждого Часть Из Части Цикл
|
||||
|
||||
Если СодержитИндекс(Часть) Тогда
|
||||
|
||||
ИзвлечьИндекс(Часть, ПутьКСвойству);
|
||||
|
||||
Иначе
|
||||
|
||||
ПутьКСвойству.Добавить(Часть);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
ПутьКСвойству.Добавить(Цепочка);
|
||||
|
||||
КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off
|
||||
|
||||
Возврат ПутьКСвойству;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СодержитИндекс(ИмяСвойства)
|
||||
|
||||
Возврат СтрНайти(ИмяСвойства, "[") > 0 И СтрЗаканчиваетсяНа(ИмяСвойства, "]") ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ИзвлечьИндекс(ИмяСвойства, БлокиПути)
|
||||
|
||||
ПозицияИндекса = СтрНайти(ИмяСвойства, "[");
|
||||
|
||||
Если ПозицияИндекса > 1 Тогда
|
||||
БлокиПути.Добавить(Лев(ИмяСвойства, ПозицияИндекса - 1));
|
||||
КонецЕсли;
|
||||
|
||||
Пока ПозицияИндекса > 0 Цикл
|
||||
|
||||
ЗакрывающаяПозиция = СтрНайти(ИмяСвойства, "]", , ПозицияИндекса);
|
||||
ИндексСтрокой = Сред(ИмяСвойства, ПозицияИндекса + 1, ЗакрывающаяПозиция - ПозицияИндекса - 1);
|
||||
Индекс = Число(ИндексСтрокой);
|
||||
БлокиПути.Добавить(Индекс);
|
||||
|
||||
ПозицияИндекса = СтрНайти(ИмяСвойства, "[", , ЗакрывающаяПозиция);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЗначениеИмеетСвойство(Значение, Свойство)
|
||||
|
||||
Результат = Ложь;
|
||||
@ -387,7 +303,7 @@
|
||||
Функция ПроверяемоеЗначение(ПараметрыПроверки)
|
||||
|
||||
Если ПараметрыПроверки.ОбъектПроверки.ИмяСвойства <> Неопределено Тогда
|
||||
Значение = ЗначениеСвойства(ПараметрыПроверки.ОбъектПроверки.Значение, ПараметрыПроверки.ОбъектПроверки.ИмяСвойства);
|
||||
Значение = ЮТОбщий.ЗначениеСвойства(ПараметрыПроверки.ОбъектПроверки.Значение, ПараметрыПроверки.ОбъектПроверки.ИмяСвойства);
|
||||
Иначе
|
||||
Значение = ПараметрыПроверки.ОбъектПроверки.Значение;
|
||||
КонецЕсли;
|
||||
|
@ -28,6 +28,7 @@
|
||||
.ДобавитьТест("Пауза")
|
||||
.ДобавитьТест("ВывестиВКонсоль")
|
||||
.ДобавитьСерверныйТест("Менеджер")
|
||||
.ДобавитьТест("ЗначениеСвойства")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -158,6 +159,21 @@
|
||||
КонецПроцедуры
|
||||
#КонецЕсли
|
||||
|
||||
Процедура ЗначениеСвойства() Экспорт
|
||||
|
||||
Массив = ЮТОбщий.ЗначениеВМассиве(1, 2, 3);
|
||||
Структура = Новый Структура("Число, Массив", 1, Массив);
|
||||
|
||||
Варианты = ЮТест.Варианты("Значение, Свойство, Результат")
|
||||
.Добавить(Массив, 0, 1)
|
||||
.Добавить(Массив, -1, 3)
|
||||
.Добавить(Массив, "[0]", 1)
|
||||
.Добавить(Массив, 1, 2)
|
||||
.Добавить(Структура, "Число", 1)
|
||||
.Добавить(Структура, "Массив[0]", 1);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
Loading…
Reference in New Issue
Block a user