Skip to content

Commit e572049

Browse files
committed
#10 Автоматическое формирование строки использования для массивов Аргументов
1 parent 4009836 commit e572049

File tree

2 files changed

+209
-7
lines changed

2 files changed

+209
-7
lines changed

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

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -387,15 +387,23 @@
387387
Если Опции.Количество() > 0 Тогда
388388
Спек = "[ОПЦИИ] ";
389389
КонецЕсли;
390+
391+
Если Аргументы.Количество() > 0 Тогда
392+
Спек = Спек + "-- ";
393+
КонецЕсли;
394+
390395
Лог.Отладка("Количество аргументы строки: %1", Аргументы.Количество());
391396
Для каждого арг Из Аргументы Цикл
392-
Если НЕ арг.Ключ.ПолучитьОбязательностьВвода() Тогда
393-
Спек = Спек + "["+ арг.Ключ.Имя +"]"+ " ";
394-
Продолжить;
395-
КонецЕсли;
397+
398+
ИмяАргумента = арг.Ключ.Имя;
399+
КлассАргумента = арг.Ключ;
396400

397-
Лог.Отладка("Добавляю аргумет <%1> в спек <%2>",арг.Ключ.Имя ,Спек);
398-
Спек = Спек + арг.Ключ.Имя + " ";
401+
ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента);
402+
ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента);
403+
404+
Лог.Отладка("Добавляю аргумет <%1> в спек <%2>", ИмяАргумента, Спек);
405+
Спек = Спек + ИмяАргумента + " ";
406+
399407
КонецЦикла;
400408

401409
КонецЕсли;
@@ -950,6 +958,26 @@
950958

951959
КонецПроцедуры
952960

961+
Процедура ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента) Экспорт
962+
963+
Если НЕ КлассАргумента.ПолучитьОбязательностьВвода() Тогда
964+
965+
ИмяАргумента = СтрШаблон("[%1]", ИмяАргумента);
966+
967+
КонецЕсли;
968+
969+
КонецПроцедуры
970+
971+
Процедура ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента) Экспорт
972+
973+
Если КлассАргумента.ЭтоМассив() Тогда
974+
975+
ИмяАргумента = СтрШаблон("%1...", ИмяАргумента);
976+
977+
КонецЕсли;
978+
979+
КонецПроцедуры
980+
953981
#КонецОбласти
954982

955983
Процедура ПриСозданииОбъекта(ИмяКоманды, ОписаниеКоманды, КлассРеализацииКоманды, ПриложениеКоманды = Неопределено)

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

Lines changed: 175 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@
3636
// ИменаТестов.Добавить("ТестДолжен_ПроверитьСбросОпцийПередАргументами");
3737
// ИменаТестов.Добавить("ТестДолжен_ПроверитьСбросМножественныхОпций");
3838

39-
// ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования");
39+
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования");
40+
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументов");
41+
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументовНесколькоАргументов");
42+
4043
// ИменаТестов.Добавить("ТестДолжен_СложныеСлучаиФормированияСтрокиИспользования");
4144

4245
// ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводСправки");
@@ -112,6 +115,164 @@
112115

113116
КонецПроцедуры
114117

118+
Процедура ТестДолжен_СтандартнуюСтрокуИспользования() Экспорт
119+
120+
Спек = "";
121+
ИмяПроцедурыОбъекта = "КомандаПростыеОпции";
122+
123+
Команда = ПодготовитьТестовуюКоманду(Спек);
124+
125+
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
126+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
127+
128+
Аргументы = Новый Массив;
129+
130+
Аргументы.Добавить("-e=Знач1");
131+
Аргументы.Добавить("-e=Знач2");
132+
Аргументы.Добавить("-e=Знач3");
133+
Аргументы.Добавить("ЗначениеАргумента");
134+
135+
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
136+
137+
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
138+
139+
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
140+
Утверждения.ПроверитьРавенство(АргументСтрока.Значение, "ЗначениеАргумента" , "Результат <АргументСтрока> должны совпадать");
141+
142+
Команда = ПодготовитьТестовуюКоманду(Спек);
143+
144+
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
145+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
146+
147+
Аргументы = Новый Массив;
148+
149+
Аргументы.Добавить("-e=Знач1");
150+
Аргументы.Добавить("-e=Знач2");
151+
Аргументы.Добавить("-e=Знач3");
152+
//Аргументы.Добавить("ЗначениеАргумента");
153+
154+
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
155+
156+
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
157+
158+
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
159+
Утверждения.ПроверитьРавенство(АргументСтрока.Значение, "" , "Результат <АргументСтрока> должны совпадать");
160+
161+
162+
163+
КонецПроцедуры
164+
165+
Процедура ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументов() Экспорт
166+
167+
Спек = "";
168+
ИмяПроцедурыОбъекта = "КомандаПростыеОпции";
169+
170+
Команда = ПодготовитьТестовуюКоманду(Спек);
171+
172+
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
173+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
174+
175+
Аргументы = Новый Массив;
176+
177+
Аргументы.Добавить("-e=Знач1");
178+
Аргументы.Добавить("-e=Знач2");
179+
Аргументы.Добавить("-e=Знач3");
180+
Аргументы.Добавить("ЗначениеАргумента");
181+
Аргументы.Добавить("ЗначениеАргумента");
182+
183+
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
184+
185+
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
186+
187+
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
188+
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 2, "Результат <АргументСтрока> должны совпадать");
189+
190+
// Необязательный массив
191+
// Аргументы не переданы
192+
193+
Команда = ПодготовитьТестовуюКоманду(Спек);
194+
195+
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
196+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
197+
198+
Аргументы = Новый Массив;
199+
200+
Аргументы.Добавить("-e=Знач1");
201+
Аргументы.Добавить("-e=Знач2");
202+
Аргументы.Добавить("-e=Знач3");
203+
204+
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
205+
206+
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
207+
208+
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
209+
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 0, "Результат <АргументСтрока> должны совпадать");
210+
211+
212+
// Просто массив
213+
Команда = ПодготовитьТестовуюКоманду(Спек);
214+
215+
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
216+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
217+
218+
Аргументы = Новый Массив;
219+
220+
Аргументы.Добавить("-e=Знач1");
221+
Аргументы.Добавить("-e=Знач2");
222+
Аргументы.Добавить("-e=Знач3");
223+
Аргументы.Добавить("ЗначениеАргумента");
224+
Аргументы.Добавить("ЗначениеАргумента");
225+
226+
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
227+
228+
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
229+
230+
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
231+
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 2, "Результат <АргументСтрока> должны совпадать");
232+
233+
КонецПроцедуры
234+
235+
Процедура ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументовНесколькоАргументов() Экспорт
236+
237+
Спек = "";
238+
ИмяПроцедурыОбъекта = "КомандаПростыеОпции";
239+
240+
Команда = ПодготовитьТестовуюКоманду(Спек);
241+
242+
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
243+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
244+
АргументСтрока2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").Обязательный();
245+
246+
247+
Аргументы = Новый Массив;
248+
249+
Аргументы.Добавить("-e=Знач1");
250+
Аргументы.Добавить("-e=Знач2");
251+
Аргументы.Добавить("-e=Знач3");
252+
Аргументы.Добавить("ЗначениеАргумента");
253+
Аргументы.Добавить("ЗначениеАргумента2");
254+
255+
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
256+
257+
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
258+
259+
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
260+
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 1, "Результат <АргументСтрока> должны совпадать");
261+
Утверждения.ПроверитьРавенство(АргументСтрока2.Значение, "ЗначениеАргумента2", "Результат <АргументСтрока2> должны совпадать");
262+
263+
КонецПроцедуры
264+
265+
Функция ПодготовитьТестовуюКоманду(Спек = "")
266+
267+
Команда = Новый КомандаПриложения("testapp", "", ЭтотОбъект);
268+
269+
Команда.Спек = Спек;
270+
271+
Возврат Команда;
272+
273+
КонецФункции
274+
275+
115276
Функция АргументыИзСтроки(СтрокаАргументов)
116277

117278
Возврат СтрРазделить(СтрокаАргументов, " ");
@@ -129,6 +290,19 @@
129290
Возврат Тест;
130291
КонецФункции
131292

293+
Функция ВыполнитьКомандуПриложения(Команда, Аргументы)
294+
295+
Команда.НачалоЗапуска();
296+
Попытка
297+
Команда.Запуск(Аргументы);
298+
Исключение
299+
Сообщить(ОписаниеОшибки());
300+
Возврат Ложь;
301+
КонецПопытки;
302+
303+
Возврат Истина;
304+
305+
КонецФункции
132306

133307
Функция ВыполненаКомандаПриложения(Спек, ИмяПроцедурыОбъекта, Аргументы)
134308

0 commit comments

Comments
 (0)