From 9b6a2dfecd6beaf7f2789bc8b46ffcd11c528672 Mon Sep 17 00:00:00 2001 From: Albert Ahmetzyanov Date: Sat, 25 Jan 2020 21:35:21 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D1=80=D0=B0=D1=81=D0=BF=D0=BE=D0=B7=D0=BD=D0=B0?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=BA=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" | 2 -- ...273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" index 890a16f..e8f7b2f 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" @@ -11,8 +11,6 @@ // Функция Поиск(Аргументы, КонтекстПоиска) Экспорт - КонтекстПоиска.СбросОпций = Истина; - Результат = Новый Структура("РезультатПоиска, Аргументы", Истина, Аргументы); Возврат Результат; diff --git "a/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" "b/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" index 8b6c10c..8470c93 100644 --- "a/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" +++ "b/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" @@ -383,6 +383,7 @@ Аргументы.Добавить("-e=Знач1"); Аргументы.Добавить("-e=Знач2"); Аргументы.Добавить("-e=Знач3"); + Аргументы.Добавить("--"); Аргументы.Добавить("-v"); Аргументы.Добавить("ARG2"); Аргументы.Добавить("run"); From b42b1838b09984180a003962367e0f181aee63cf Mon Sep 17 00:00:00 2001 From: Albert Ahmetzyanov Date: Sun, 26 Jan 2020 10:19:33 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=B5=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\266\320\265\320\275\320\270\321\217.os" | 40 ++++++++++++++----- ...6\320\265\320\275\320\270\321\217_test.os" | 33 ++++++++++++++- 2 files changed, 63 insertions(+), 10 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index 3272a11..c5baa82 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -117,6 +117,17 @@ Возврат Описание; КонецФункции +// Функция возвращает строку использования (спек) команды +// +// Возвращаемое значение: +// Cтрока - строка использования (спек) текущей команды +// +Функция ПолучитьСтрокуИспользования() Экспорт + + Возврат ?(Не ПустаяСтрока(Спек), Спек, СформироватьСтандартнуюСтрокуИспользования()); + +КонецФункции + // Функция возвращает значение опции по переданному имени/синониму опции // // Параметры: @@ -493,13 +504,7 @@ Лог.Отладка("Входящий спек: %1", Спек); - СтрокаИспользования = Спек; - - Если ПустаяСтрока(СтрокаИспользования) Тогда - - СтрокаИспользования = СформироватьСтандартнуюСтрокуИспользования(); - - КонецЕсли; + СтрокаИспользования = ПолучитьСтрокуИспользования(); Лог.Отладка("Разбираю строку использования с помощью лексера"); @@ -1101,7 +1106,24 @@ СтандартнаяСтрокаИспользования = ""; Лог.Отладка("Количество опций строки: %1", Опции.Количество()); - Если Опции.Количество() > 0 Тогда + ЕстьОбязательнаяОпция = Ложь; + Для каждого Опция Из Опции Цикл + + ИмяОпции = Опция.Ключ.НаименованияПараметров[0]; + КлассОпции = Опция.Ключ; + + Если КлассОпции.ПолучитьОбязательностьВвода() Тогда + ЕстьОбязательнаяОпция = Истина; + КонецЕсли; + + ДополнитьИмяАргументаМассива(ИмяОпции, КлассОпции); + ДополнитьИмяАргументаНеобязательного(ИмяОпции, КлассОпции); + + СтандартнаяСтрокаИспользования = СтандартнаяСтрокаИспользования + ИмяОпции + " "; + + КонецЦикла; + + Если Не ЕстьОбязательнаяОпция И Опции.Количество() > 0 Тогда СтандартнаяСтрокаИспользования = "[ОПЦИИ] "; КонецЕсли; @@ -1118,7 +1140,7 @@ ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента); ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента); - Лог.Отладка("Добавляю аргумет <%1> в спек <%2>", ИмяАргумента, СтандартнаяСтрокаИспользования); + Лог.Отладка("Добавляю аргумент <%1> в спек <%2>", ИмяАргумента, СтандартнаяСтрокаИспользования); СтандартнаяСтрокаИспользования = СтандартнаяСтрокаИспользования + ИмяАргумента + " "; КонецЦикла; diff --git "a/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" "b/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" index 8470c93..6002abb 100644 --- "a/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" +++ "b/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" @@ -39,7 +39,7 @@ ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования"); ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументов"); ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументовНесколькоАргументов"); - + ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция"); // ИменаТестов.Добавить("ТестДолжен_СложныеСлучаиФормированияСтрокиИспользования"); ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводСправки"); @@ -354,6 +354,37 @@ КонецПроцедуры +Процедура ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция() Экспорт + + Команда = ПодготовитьТестовуюКоманду(); + + ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока(); + ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый необязательный массив опций").ТМассивСтрок(); + ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок(); + + СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования()); + Утверждения.ПроверитьРавенство(СтрокаИспользования, "[ОПЦИИ] -- ARG2...", "Результат <СтрокаИспользования> должны совпадать"); + + + Команда = ПодготовитьТестовуюКоманду(); + + ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока(); + ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый обязательный массив опций").ТМассивСтрок().Обязательный(Истина); + ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок(); + + СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования()); + Утверждения.ПроверитьРавенство(СтрокаИспользования, "[-z] -e... -- ARG2...", "Результат <СтрокаИспользования> должны совпадать"); + + + Команда = ПодготовитьТестовуюКоманду(); + + ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок(); + + СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования()); + Утверждения.ПроверитьРавенство(СтрокаИспользования, "-- ARG2...", "Результат <СтрокаИспользования> должны совпадать"); + +КонецПроцедуры + Процедура ТестДолжен_ПроверитьВыводСправки() Экспорт Спек = "";