Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,9 @@
Индекс = Индекс + РезультатПоискаКороткойОпции.ПрибавочныйИндекс;

Иначе
Результат.РезультатПоиска = Опция.УстановленаИзПеременнойОкружения;
Возврат Результат;
// Позиционный аргумент - пропускаем и продолжаем поиск опции правее.
// Так опции можно указывать и до, и после позиционных аргументов.
Индекс = Индекс + 1;
КонецЕсли;

КонецЦикла;
Expand Down
6 changes: 4 additions & 2 deletions src/core/Классы/КомандаПриложения.os
Original file line number Diff line number Diff line change
Expand Up @@ -400,9 +400,11 @@
ОшибкаЧтения = Не НачальноеСостояние.Прочитать(МассивАргументовКПарсингу);

Если ОшибкаЧтения Тогда
Лог.КритичнаяОшибка("Ошибка чтения параметров команды");
ОписаниеОшибкиЧтения = СтрШаблон("Ошибка чтения параметров команды: %1",
СтрСоединить(МассивАргументовКПарсингу, " "));
Лог.КритичнаяОшибка(ОписаниеОшибкиЧтения);
ВывестиСправку();
ВызватьИсключение "Ошибка чтения параметров команды";
ВызватьИсключение ОписаниеОшибкиЧтения;
КонецЕсли;

ВыполнитьДействиеКоманды("ПередВыполнениемКоманды");
Expand Down
27 changes: 26 additions & 1 deletion tests/КомандаПриложения_test.os
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

// ИменаТестов.Добавить("ТестДолжен_ПроверитьРаботуСОднимТиреВАргументах");
ИменаТестов.Добавить("ТестДолжен_ПроверитьСбросОпцийПередАргументами");
ИменаТестов.Добавить("ТестДолжен_ПроверитьОпцииПослеПозиционногоАргумента");
// ИменаТестов.Добавить("ТестДолжен_ПроверитьСбросМножественныхОпций");

ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования");
Expand Down Expand Up @@ -395,7 +396,31 @@

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

Функция ПодготовитьТестовуюКоманду(Спек = "")
Процедура ТестДолжен_ПроверитьОпцииПослеПозиционногоАргумента() Экспорт

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

ОпцияОтчет = Команда.Опция("r report", "", "Тестовая опция со значением");
ОпцияФлаг = Команда.Опция("f force", Ложь, "Тестовый флаг").Флаг();
ARG1 = Команда.Аргумент("ARG1", "", "Тестовый аргумент").Обязательный(Ложь);

Аргументы = Новый Массив;

Аргументы.Добавить("ЗначениеАргумента");
Аргументы.Добавить("--report");
Аргументы.Добавить("build/junit.xml");
Аргументы.Добавить("-f");

РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);

Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда с опциями после позиционного аргумента должна выполниться");
Утверждения.ПроверитьРавенство(ОпцияОтчет.Значение, "build/junit.xml", "Значение опции после аргумента должно быть прочитано");
Утверждения.ПроверитьРавенство(ОпцияФлаг.Значение, Истина, "Флаг после аргумента должен быть прочитан");
Утверждения.ПроверитьРавенство(ARG1.Значение, "ЗначениеАргумента", "Значение аргумента должно быть прочитано");

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

Функция ПодготовитьТестовуюКоманду(Спек = "")

Команда = Новый КомандаПриложения("testapp", "Тестовое приложения", ЭтотОбъект);

Expand Down