Skip to content

Commit e41a2b9

Browse files
committed
fix: #39 Получение опций и аргументов родителя команды в методах команды
1 parent a0b5c4d commit e41a2b9

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

src/core/Классы/КомандаПриложения.os

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,30 @@
101101
// Значение - Произвольный - полученное значение в результате чтения строки использования или переменных окружения
102102
Функция ЗначениеОпции(Знач ИмяОпции) Экспорт
103103

104-
ОпцииИндекса = ОпцияИзИндекса(ИмяОпции);
105-
Если ОпцииИндекса = Неопределено Тогда
104+
ОпцияИндекса = ОпцияИзИндекса(ИмяОпции);
105+
106+
Если ОпцияИндекса = Неопределено Тогда
107+
108+
ЗначениеОпцииРодителя = ЗначениеОпцииКомандыРодителя(ИмяОпции);
109+
110+
Если Не ЗначениеОпцииРодителя = Неопределено Тогда
111+
Возврат ЗначениеОпцииРодителя;
112+
КонецЕсли;
113+
114+
КонецЕсли;
115+
116+
Если ОпцияИндекса = Неопределено Тогда
117+
106118
ВызватьИсключение СтрШаблон("Ошибка получение значения опции <%1>.
107119
|Опция не найдена в индексе опций команды", ИмяОпции);
120+
108121
КонецЕсли;
109122

110-
Возврат ОпцияИзИндекса(ИмяОпции).Значение;
123+
Возврат ОпцияИндекса.Значение;
111124

112125
КонецФункции
113126

114-
// Функция возвращает значение аргумента по переданному имени аргумента
127+
// Функция возвращает значение аргумента по переданному имени аргумента
115128
//
116129
// Параметры:
117130
// ИмяАргумента - строка - имя аргумента
@@ -122,12 +135,21 @@
122135

123136
АргументИндекса = АргументИзИндекса(ИмяАргумента);
124137

138+
Если АргументИндекса = Неопределено Тогда
139+
ЗначениеАргументаРодителя = ЗначениеАргументаКомандыРодителя(ИмяАргумента);
140+
141+
Если Не ЗначениеАргументаРодителя = Неопределено Тогда
142+
Возврат ЗначениеАргументаРодителя;
143+
КонецЕсли;
144+
145+
КонецЕсли;
146+
125147
Если АргументИндекса = Неопределено Тогда
126148
ВызватьИсключение СтрШаблон("Ошибка получение значения аргумента <%1>.
127149
|Аргумент не найден в индексе аргументов команды", ИмяАргумента);
128150
КонецЕсли;
129151

130-
Возврат АргументИзИндекса(ИмяАргумента).Значение;
152+
Возврат АргументИндекса.Значение;
131153

132154
КонецФункции
133155

tests/КомандаПриложения_test.os

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
// ИменаТестов.Добавить("ТестДолжен_ПроверитьВыполнениеОбработчикаПередВыполнениемКоманды");
4949
// ИменаТестов.Добавить("ТестДолжен_ПроверитьВыполнениеОбработчикаПослеВыполненияКоманды");
5050

51+
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКомандыБезВызоваПроцедуры");
5152
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКоманды");
5253
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКомандыПервогоУровня");
5354

@@ -88,6 +89,35 @@
8889
КонецПроцедуры
8990

9091

92+
Процедура ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКомандыБезВызоваПроцедуры () Экспорт
93+
94+
Команда = ПодготовитьТестовуюКоманду();
95+
96+
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
97+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
98+
99+
ВложеннаяКоманда = Команда.ДобавитьПодкоманду("sub s", "", ЭтотОбъект);
100+
ОпцияМассив = ВложеннаяКоманда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
101+
102+
Аргументы = Новый Массив;
103+
104+
Аргументы.Добавить("-e=Знач1");
105+
Аргументы.Добавить("-e=Знач2");
106+
Аргументы.Добавить("-e=Знач3");
107+
Аргументы.Добавить("ЗначениеАргумента");
108+
109+
Аргументы.Добавить("sub");
110+
111+
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
112+
113+
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
114+
115+
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеОпцииКомандыРодителя("e").Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
116+
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеОпции("e").Количество(), 0 , "Результат <ОпцияМассив> должны совпадать");
117+
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеАргумента("ARG"), "ЗначениеАргумента" , "Результат <АргументСтрока> должны совпадать");
118+
119+
КонецПроцедуры
120+
91121
Процедура ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКоманды() Экспорт
92122

93123
Команда = ПодготовитьТестовуюКоманду();

0 commit comments

Comments
 (0)