mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-02-13 19:42:02 +02:00
parent
ed8603168f
commit
e8ea526b74
@ -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…
x
Reference in New Issue
Block a user