Skip to content
Merged
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 @@ -11,8 +11,6 @@
//
Функция Поиск(Аргументы, КонтекстПоиска) Экспорт

КонтекстПоиска.СбросОпций = Истина;

Результат = Новый Структура("РезультатПоиска, Аргументы", Истина, Аргументы);

Возврат Результат;
Expand Down
40 changes: 31 additions & 9 deletions src/core/Классы/КомандаПриложения.os
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,17 @@
Возврат Описание;
КонецФункции

// Функция возвращает строку использования (спек) команды
//
// Возвращаемое значение:
// Cтрока - строка использования (спек) текущей команды
//
Функция ПолучитьСтрокуИспользования() Экспорт

Возврат ?(Не ПустаяСтрока(Спек), Спек, СформироватьСтандартнуюСтрокуИспользования());

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

// Функция возвращает значение опции по переданному имени/синониму опции
//
// Параметры:
Expand Down Expand Up @@ -493,13 +504,7 @@

Лог.Отладка("Входящий спек: %1", Спек);

СтрокаИспользования = Спек;

Если ПустаяСтрока(СтрокаИспользования) Тогда

СтрокаИспользования = СформироватьСтандартнуюСтрокуИспользования();

КонецЕсли;
СтрокаИспользования = ПолучитьСтрокуИспользования();

Лог.Отладка("Разбираю строку использования с помощью лексера");

Expand Down Expand Up @@ -1101,7 +1106,24 @@
СтандартнаяСтрокаИспользования = "";

Лог.Отладка("Количество опций строки: %1", Опции.Количество());
Если Опции.Количество() > 0 Тогда
ЕстьОбязательнаяОпция = Ложь;
Для каждого Опция Из Опции Цикл

ИмяОпции = Опция.Ключ.НаименованияПараметров[0];
КлассОпции = Опция.Ключ;

Если КлассОпции.ПолучитьОбязательностьВвода() Тогда
ЕстьОбязательнаяОпция = Истина;
КонецЕсли;

ДополнитьИмяАргументаМассива(ИмяОпции, КлассОпции);
ДополнитьИмяАргументаНеобязательного(ИмяОпции, КлассОпции);

СтандартнаяСтрокаИспользования = СтандартнаяСтрокаИспользования + ИмяОпции + " ";

КонецЦикла;

Если Не ЕстьОбязательнаяОпция И Опции.Количество() > 0 Тогда
СтандартнаяСтрокаИспользования = "[ОПЦИИ] ";
КонецЕсли;

Expand All @@ -1118,7 +1140,7 @@
ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента);
ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента);

Лог.Отладка("Добавляю аргумет <%1> в спек <%2>", ИмяАргумента, СтандартнаяСтрокаИспользования);
Лог.Отладка("Добавляю аргумент <%1> в спек <%2>", ИмяАргумента, СтандартнаяСтрокаИспользования);
СтандартнаяСтрокаИспользования = СтандартнаяСтрокаИспользования + ИмяАргумента + " ";

КонецЦикла;
Expand Down
34 changes: 33 additions & 1 deletion tests/КомандаПриложения_test.os
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования");
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументов");
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументовНесколькоАргументов");

ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция");
// ИменаТестов.Добавить("ТестДолжен_СложныеСлучаиФормированияСтрокиИспользования");

ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводСправки");
Expand Down Expand Up @@ -354,6 +354,37 @@

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

Процедура ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция() Экспорт

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

ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока();
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый необязательный массив опций").ТМассивСтрок();
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();

СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
Утверждения.ПроверитьРавенство(СтрокаИспользования, "[ОПЦИИ] -- ARG2...", "Результат <СтрокаИспользования> должны совпадать");


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

ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока();
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый обязательный массив опций").ТМассивСтрок().Обязательный(Истина);
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();

СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
Утверждения.ПроверитьРавенство(СтрокаИспользования, "[-z] -e... -- ARG2...", "Результат <СтрокаИспользования> должны совпадать");


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

ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();

СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
Утверждения.ПроверитьРавенство(СтрокаИспользования, "-- ARG2...", "Результат <СтрокаИспользования> должны совпадать");

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

Процедура ТестДолжен_ПроверитьВыводСправки() Экспорт

Спек = "";
Expand Down Expand Up @@ -383,6 +414,7 @@
Аргументы.Добавить("-e=Знач1");
Аргументы.Добавить("-e=Знач2");
Аргументы.Добавить("-e=Знач3");
Аргументы.Добавить("--");
Аргументы.Добавить("-v");
Аргументы.Добавить("ARG2");
Аргументы.Добавить("run");
Expand Down