Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
9765d93
Finish 0.9.10
khorevaa Jul 19, 2018
871451b
fix #46 Исправление получения рефлетора для класса проверки
khorevaa Oct 16, 2018
39cbfcd
Исправления в справке
khorevaa Oct 16, 2018
3a0a0ec
fix #47 Убран показ значений по умолчанию для ПО
khorevaa Jan 10, 2019
b574b66
Update sonar-qube.sh
khorevaa Feb 17, 2019
a6ce84c
Update sonar-project.properties
khorevaa Feb 17, 2019
36b577a
Update .travis.yml
khorevaa Feb 17, 2019
1627dc9
Update sonar-qube.sh
khorevaa Feb 17, 2019
c2c8369
Merge pull request #50 from khorevaa/sonar.oscript.ru
khorevaa Feb 17, 2019
f1d109a
Добавил в справку пример кода, чтобы работал запуск приложения без па…
artbear Feb 20, 2019
3cd91cf
Merge pull request #51 from oscript-library/develop
khorevaa Feb 20, 2019
308b959
Update README.md
khorevaa Feb 20, 2019
52be075
Тесты простейшего запуска
artbear Feb 20, 2019
e319e7b
Revert "Добавил в справку пример кода, чтобы работал запуск приложени…
artbear Feb 20, 2019
854f8be
Merge branch 'develop' of https://github.com/oscript-library/cli into…
artbear Feb 20, 2019
14898b5
Доработал по замечаниям
artbear Feb 20, 2019
e43000b
Поправил ошибки
khorevaa Feb 20, 2019
276a498
Merge pull request #52 from oscript-library/develop
khorevaa Feb 20, 2019
80bd83f
Вызов исключения при неверном параметре
thedemoncat Mar 14, 2019
9580b63
Merge pull request #54 from ZhdanovR/develop
khorevaa Mar 14, 2019
5fa4d1a
Актуализация запуска анализа на sonar.oscript.ru
nixel2007 Apr 14, 2019
77759e6
Merge pull request #55 from nixel2007/feature/new-sonar
khorevaa Apr 14, 2019
e9f0fbb
Update .travis.yml
nixel2007 Jul 23, 2019
ebf19aa
Merge pull request #56 from nixel2007/patch-1
khorevaa Jul 26, 2019
9b6a2df
Исправлено ошибочное распознавание опций как аргументов
Morkhe Jan 25, 2020
b42b183
Исправлено формирование спека при наличии обязательных опций
Morkhe Jan 26, 2020
69d43a2
Исправлена ошибка КомандаПриложения.os
theshadowco May 23, 2023
55f3451
Merge pull request #64 from theshadowco/patch-2
khorevaa May 23, 2023
696a732
Merge pull request #61 from Morkhe/bugfix/options-parser
khorevaa May 23, 2023
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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
*.ospx
tests.xml
coverage/*

bdd-log.xml
tests-reports/*
12 changes: 2 additions & 10 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,12 @@ addons:
sonarqube: true

jdk:
- oraclejdk8
- openjdk11

before_install:
# Load cached docker images
- if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi

before_script:
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
- chmod +x ./cc-test-reporter
- ./cc-test-reporter before-build

after_script:
- ./cc-test-reporter after-build --prefix "/home/travis/build/khorevaa/cli/coverage/" --exit-code $TRAVIS_TEST_RESULT

before_cache:
# Save tagged docker images
- >
Expand All @@ -50,7 +42,7 @@ script:
- grep 'Результат прогона тестов <Да>' /tmp/test.log
after_success:
# - bash <(curl -s https://codecov.io/bash)
# - ./sonar-qube.sh
- ./sonar-qube.sh

cache:
directories:
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@

Процедура ВыполнитьПриложение()

Приложение = Новый КонсольноеПриложение("cli", "Помощник генерации приложения на основании шаблона cli");
Приложение = Новый КонсольноеПриложение("cli", "Помощник генерации приложения на основании шаблона cli", ЭтотОбъект);
Приложение.Версия("v version","1.0.0");

Приложение.ДобавитьКоманду("i init", "Инициализация структуры нового приложения", Новый КомандаInit);
Expand All @@ -72,6 +72,10 @@

КонецПроцедуры // ВыполнениеКоманды()

Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
КомандаПриложения.ВывестиСправку();
КонецПроцедуры

///////////////////////////////////////////////////////

Попытка
Expand Down Expand Up @@ -383,7 +387,7 @@ cli поддерживает создание команд и подкоманд

```bsl
Приложение = Новый КонсольноеПриложение("testapp", "Выполняет полезную работу");
КомандаAve = Приложение.ДобавитьПодкоманду("a ave", "Команда ave", КлассРеализацииПодкоманды);
КомандаAve = Приложение.ДобавитьКоманду("a ave", "Команда ave", КлассРеализацииПодкоманды);
```

* Первый аргумент, наименование команды, которое необходимо будет вводить для запуска
Expand All @@ -393,7 +397,7 @@ cli поддерживает создание команд и подкоманд
cli поддерживает указание псевдонимов команд. Для примера:

```bsl
КомандаAve = Приложение.ДобавитьПодкоманду("start run r", "Команда start", КлассРеализацииПодкоманды);
КомандаAve = Приложение.ДобавитьКоманду("start run r", "Команда start", КлассРеализацииПодкоманды);
```

Псевдонимы для команды будут `start`, `run`, и`r` - можно использовать любой из них.
Expand Down
25 changes: 25 additions & 0 deletions features/Запуск без параметров.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# language: ru

Функционал: Создание проекта
Как разработчик
Я хочу запускать приложение

Контекст:
Дано Я очищаю параметры команды "oscript" в контексте

Сценарий: Запуск приложения без параметров

Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/tests/fixtures/ТестовоеПриложение.os"
И я вижу в консоли вывод
"""
Приложение: my-tests
"""
И Код возврата команды "oscript" равен 1

Сценарий: Получение версии приложения
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/tests/fixtures/ТестовоеПриложение.os -v"
И я вижу в консоли вывод
"""
0.1.0
"""
И Код возврата команды "oscript" равен 0
4 changes: 2 additions & 2 deletions sonar-project.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# must be unique in a given SonarQube instance
sonar.projectKey=opensource-cli
sonar.organization=sonar-opensource-add
sonar.projectKey=cli
# sonar.organization=sonar-opensource-add

# this is the name displayed in the SonarQube UI
sonar.projectName=Command Line Interface for OScript
Expand Down
6 changes: 3 additions & 3 deletions sonar-qube.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
temp=`cat packagedef | grep ".Версия(" | sed 's|[^"]*"||' | sed -r 's/".+//'`
version=${temp##*|}

if [ "$TRAVIS_SECURE_ENV_VARS" == "true" ]; then
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then

sonar-scanner \
-Dsonar.host.url=https://sonar.silverbulleters.org \
-Dsonar.analysis.mode=issues \
Expand All @@ -14,9 +14,9 @@ if [ "$TRAVIS_SECURE_ENV_VARS" == "true" ]; then

elif [ "$TRAVIS_BRANCH" == "develop" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
sonar-scanner \
-Dsonar.host.url=https://sonar.silverbulleters.org \
-Dsonar.host.url=https://sonar.oscript.ru \
-Dsonar.login=$SONAR_TOKEN \
-Dsonar.projectVersion=$version\
-Dsonar.scanner.skip=false
fi
fi
fi
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
//
Функция Поиск(Аргументы, КонтекстПоиска) Экспорт

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

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

Возврат Результат;
Expand Down
57 changes: 42 additions & 15 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 @@ -402,7 +413,7 @@
Если ОшибкаЧтения Тогда
Лог.КритичнаяОшибка("Ошибка чтения параметров команды");
ВывестиСправку();
Возврат;
ВызватьИсключение "Ошибка чтения параметров команды";
КонецЕсли;

ВыполнитьДействиеКоманды("ПередВыполнениемКоманды");
Expand Down Expand Up @@ -493,13 +504,7 @@

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

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

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

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

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

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

Expand Down Expand Up @@ -856,7 +861,7 @@

Если Не КлассПроверки = КлассРеализации Тогда

Возврат Новый РефлекторОбъекта(КлассРеализации);
Возврат Новый РефлекторОбъекта(КлассПроверки);

Иначе

Expand Down Expand Up @@ -935,7 +940,7 @@

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

СтрокаНаименования = СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование);
СтрокаНаименования = СтрШаблон(" %2%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 Expand Up @@ -1238,8 +1260,13 @@
НоваяЗапись.ПеременнаяОкружения = ПараметрСправки.ПеременнаяОкружения;
НоваяЗапись.СкрытьЗначение = ПараметрСправки.СкрытьЗначение;
НоваяЗапись.НаименованияПараметров = ПараметрСправки.НаименованияПараметров;
НоваяЗапись.Значение = ПараметрСправки.ЗначениеВСтроку();


Если НЕ ПараметрСправки.УстановленаИзПеременнойОкружения Тогда

НоваяЗапись.Значение = ПараметрСправки.ЗначениеВСтроку();

КонецЕсли;

КонецЦикла;

Возврат ТаблицаДанных;
Expand Down Expand Up @@ -1285,4 +1312,4 @@

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

Лог = Логирование.ПолучитьЛог("oscript.lib.cli_command");
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_command");
14 changes: 7 additions & 7 deletions tasks/test.os
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,13 @@

ФичиПрошли = Истина;

// Попытка
// ФичиПрошли = ПрогнатьФичи();
// Исключение
// ФичиПрошли = Ложь;
// Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно
// |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
// КонецПопытки;
Попытка
ФичиПрошли = ПрогнатьФичи();
Исключение
ФичиПрошли = Ложь;
Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;

Если Не ТестыПрошли Или Не ФичиПрошли Тогда
ВызватьИсключение "Тестирование завершилось неудачно!";
Expand Down
32 changes: 32 additions & 0 deletions tests/fixtures/ТестовоеПриложение.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#Использовать "../../src/core"

Процедура ВыполнитьПриложение()

Приложение = Новый КонсольноеПриложение( "my-tests",
"Мое описание");
Приложение.Версия("v version", "0.1.0");

// Приложение.ДобавитьКоманду(
// "m make", "",
// Новый );

// Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
Приложение.Запустить(АргументыКоманднойСтроки);

КонецПроцедуры // ВыполнениеКоманды()

// Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
// КомандаПриложения.ВывестиСправку();
// КонецПроцедуры

Попытка

ВыполнитьПриложение();
ЗавершитьРаботу(0);

Исключение

Сообщить(ОписаниеОшибки());
ЗавершитьРаботу(1);

КонецПопытки;
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