Skip to content

Commit 69c49d7

Browse files
author
ivanovEV
committed
Merge remote-tracking branch 'khorevaa/develop' into fix/arrayparams
2 parents da712ee + 4555485 commit 69c49d7

File tree

4 files changed

+71
-18
lines changed

4 files changed

+71
-18
lines changed

packagedef

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
.Автор("Khorev Aleksey")
99
.АдресАвтора("khorevaa@gmail.com")
1010
.Описание("Данный пакет облегчает создание консольных приложений на Oscript")
11-
.ВерсияСреды("1.0.20")
11+
.ВерсияСреды("1.8.3")
1212
.ВключитьФайл("src")
1313
.ВключитьФайл("docs")
1414
//.ВключитьФайл("tests")
@@ -17,13 +17,12 @@
1717
.ЗависитОт("logos", "1.1.1")
1818
.ЗависитОт("delegate", "0.2.0")
1919
.ЗависитОт("reflector", "0.5.1")
20-
.ЗависитОт("fluent", "0.3.1")
20+
.ЗависитОт("fluent", "0.6.0")
2121
.ЗависитОт("datetime", "0.1.0")
2222
//.ЗависитОт("asserts")
2323
//.ЗависитОт("1bdd") // Необходимо установил для тестирования
2424
//.ЗависитОт("1testrunner") // Необходимо установил для тестирования
2525
.ОпределяетКласс("КонсольноеПриложение", "src/core/Классы/КонсольноеПриложение.os")
2626
.ОпределяетКласс("КомандаПриложения", "src/core/Классы/КомандаПриложения.os")
2727
.ОпределяетКласс("ПараметрКоманды", "src/core/Классы/ПараметрКоманды.os")
28-
2928
;

src/core/Классы/internal/parser/Классы/ОпцииЗавершениеПарсера.os

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
//
1212
Функция Поиск(Аргументы, КонтекстПоиска) Экспорт
1313

14-
КонтекстПоиска.СбросОпций = Истина;
15-
1614
Результат = Новый Структура("РезультатПоиска, Аргументы", Истина, Аргументы);
1715

1816
Возврат Результат;

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

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,17 @@
117117
Возврат Описание;
118118
КонецФункции
119119

120+
// Функция возвращает строку использования (спек) команды
121+
//
122+
// Возвращаемое значение:
123+
// Cтрока - строка использования (спек) текущей команды
124+
//
125+
Функция ПолучитьСтрокуИспользования() Экспорт
126+
127+
Возврат ?(Не ПустаяСтрока(Спек), Спек, СформироватьСтандартнуюСтрокуИспользования());
128+
129+
КонецФункции
130+
120131
// Функция возвращает значение опции по переданному имени/синониму опции
121132
//
122133
// Параметры:
@@ -493,13 +504,7 @@
493504

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

496-
СтрокаИспользования = Спек;
497-
498-
Если ПустаяСтрока(СтрокаИспользования) Тогда
499-
500-
СтрокаИспользования = СформироватьСтандартнуюСтрокуИспользования();
501-
502-
КонецЕсли;
507+
СтрокаИспользования = ПолучитьСтрокуИспользования();
503508

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

@@ -935,7 +940,7 @@
935940

936941
Если Не ПустаяСтрока(СтрокаТаблицы.ПодробноеОписание) Тогда
937942

938-
СтрокаНаименования = СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование);
943+
СтрокаНаименования = СтрШаблон(" %2%1", Символы.Таб, СтрокаТаблицы.Наименование);
939944

940945
ДлинаДополнения = СтрДлина(СтрокаНаименования) + ДобавочнаяДлинаДополнения;
941946
МассивСтрок = СтрРазделить(СтрокаТаблицы.ПодробноеОписание, Символы.ПС, Ложь);
@@ -1043,7 +1048,9 @@
10431048
ПроцессорКоллекций = Новый ПроцессорКоллекций;
10441049
ПроцессорКоллекций.УстановитьКоллекцию(НаименованияПараметров);
10451050
СортированныеНаименования = ПроцессорКоллекций
1046-
.Сортировать("Результат = СтрДлина(Элемент1) > СтрДлина(Элемент2)")
1051+
.Сортировать("(Первый, Второй) ->
1052+
| Возврат ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок()
1053+
| .Выполнить(СтрДлина(Первый), СтрДлина(Второй))")
10471054
.Получить(Тип("Массив"));
10481055

10491056
НаименованиеПараметра = СтрСоединить(СортированныеНаименования, ", ");
@@ -1101,7 +1108,24 @@
11011108
СтандартнаяСтрокаИспользования = "";
11021109

11031110
Лог.Отладка("Количество опций строки: %1", Опции.Количество());
1104-
Если Опции.Количество() > 0 Тогда
1111+
ЕстьОбязательнаяОпция = Ложь;
1112+
Для каждого Опция Из Опции Цикл
1113+
1114+
ИмяОпции = Опция.Ключ.НаименованияПараметров[0];
1115+
КлассОпции = Опция.Ключ;
1116+
1117+
Если КлассОпции.ПолучитьОбязательностьВвода() Тогда
1118+
ЕстьОбязательнаяОпция = Истина;
1119+
КонецЕсли;
1120+
1121+
ДополнитьИмяАргументаМассива(ИмяОпции, КлассОпции);
1122+
ДополнитьИмяАргументаНеобязательного(ИмяОпции, КлассОпции);
1123+
1124+
СтандартнаяСтрокаИспользования = СтандартнаяСтрокаИспользования + ИмяОпции + " ";
1125+
1126+
КонецЦикла;
1127+
1128+
Если Не ЕстьОбязательнаяОпция И Опции.Количество() > 0 Тогда
11051129
СтандартнаяСтрокаИспользования = "[ОПЦИИ] ";
11061130
КонецЕсли;
11071131

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

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

11241148
КонецЦикла;
@@ -1290,4 +1314,4 @@
12901314

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

1293-
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_command");
1317+
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_command");

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

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования");
4040
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументов");
4141
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументовНесколькоАргументов");
42-
42+
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция");
4343
// ИменаТестов.Добавить("ТестДолжен_СложныеСлучаиФормированияСтрокиИспользования");
4444

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

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

357+
Процедура ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция() Экспорт
358+
359+
Команда = ПодготовитьТестовуюКоманду();
360+
361+
ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока();
362+
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый необязательный массив опций").ТМассивСтрок();
363+
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
364+
365+
СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
366+
Утверждения.ПроверитьРавенство(СтрокаИспользования, "[ОПЦИИ] -- ARG2...", "Результат <СтрокаИспользования> должны совпадать");
367+
368+
369+
Команда = ПодготовитьТестовуюКоманду();
370+
371+
ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока();
372+
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый обязательный массив опций").ТМассивСтрок().Обязательный(Истина);
373+
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
374+
375+
СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
376+
Утверждения.ПроверитьРавенство(СтрокаИспользования, "[-z] -e... -- ARG2...", "Результат <СтрокаИспользования> должны совпадать");
377+
378+
379+
Команда = ПодготовитьТестовуюКоманду();
380+
381+
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
382+
383+
СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
384+
Утверждения.ПроверитьРавенство(СтрокаИспользования, "-- ARG2...", "Результат <СтрокаИспользования> должны совпадать");
385+
386+
КонецПроцедуры
387+
357388
Процедура ТестДолжен_ПроверитьВыводСправки() Экспорт
358389

359390
Спек = "";
@@ -383,6 +414,7 @@
383414
Аргументы.Добавить("-e=Знач1");
384415
Аргументы.Добавить("-e=Знач2");
385416
Аргументы.Добавить("-e=Знач3");
417+
Аргументы.Добавить("--");
386418
Аргументы.Добавить("-v");
387419
Аргументы.Добавить("ARG2");
388420
Аргументы.Добавить("run");

0 commit comments

Comments
 (0)