Skip to content

Commit

Permalink
Merge branch 'release/0.5'
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Dec 11, 2016
2 parents 7b7c0cb + 835462b commit 0254764
Show file tree
Hide file tree
Showing 9 changed files with 373 additions and 37 deletions.
10 changes: 3 additions & 7 deletions features/step_definitions/ВыполнениеКоманды.os
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
ВсеШаги.Добавить("ЯВыключаюОтладкуБиблиотеки");
ВсеШаги.Добавить("ЯДобавляюПараметрДляКоманды");
ВсеШаги.Добавить("ЯСообщаюВыводКоманды");
ВсеШаги.Добавить("КодВозвратаРавен");
ВсеШаги.Добавить("КодВозвратаКомандыРавен");

Возврат ВсеШаги;
КонецФункции
Expand Down Expand Up @@ -84,15 +84,11 @@
Команда = БДД.ПолучитьИзКонтекста("Команда");

Команда.ДобавитьПараметр(Параметр);
// ВызватьИсключение Новый ИнформацияОбОшибке("Шаг <ЯДобавляюПараметрДляКоманды> не реализован", "Не реализовано.");
КонецПроцедуры

//Код возврата равен 0
Процедура КодВозвратаРавен(Знач ОжидаемыйКодВозврата) Экспорт
//Код возврата команды равен 0
Процедура КодВозвратаКомандыРавен(Знач ОжидаемыйКодВозврата) Экспорт
Команда = БДД.ПолучитьИзКонтекста("Команда");

Ожидаем.Что(Команда.ПолучитьКодВозврата(), "Код возврата").Равно(ОжидаемыйКодВозврата);
КонецПроцедуры



101 changes: 101 additions & 0 deletions features/step_definitions/КомандныеФайлы.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
#Использовать "../.."

Перем БДД; //контекст фреймворка 1bdd

// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;

ВсеШаги = Новый Массив;

ВсеШаги.Добавить("ЯСоздаюКомандныйФайл");
ВсеШаги.Добавить("ЯДобавляюСтрокуВКомандныйФайл");
ВсеШаги.Добавить("ЯСообщаюСодержимоеКомандногоФайла");
ВсеШаги.Добавить("ЯВыполняюКомандныйФайл");
ВсеШаги.Добавить("ВыводКомандногоФайлаСодержит");
ВсеШаги.Добавить("КодВозвратаКомандногоФайлаРавен");

Возврат ВсеШаги;
КонецФункции

// Реализация шагов

// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт

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

// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт

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

//Я создаю командный файл
Процедура ЯСоздаюКомандныйФайл() Экспорт
КомандныйФайл = Новый КомандныйФайл;
КомандныйФайл.Создать();
БДД.СохранитьВКонтекст("КомандныйФайл", КомандныйФайл);
КонецПроцедуры

//я добавляю строку "echo командный файл" в командный файл
Процедура ЯДобавляюСтрокуВКомандныйФайл(Знач СтрокаКоманды) Экспорт
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");

КомандныйФайл.ДобавитьКоманду(СтрокаКоманды);
КонецПроцедуры

//Я выполняю командный файл
Процедура ЯВыполняюКомандныйФайл() Экспорт
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");

КомандныйФайл.Выполнить();
КонецПроцедуры

//Я сообщаю содержимое файла "ИмяФайла"
Процедура ЯСообщаюСодержимоеФайла(Знач ИмяФайла) Экспорт
ВывестиТекстФайла(ИмяФайла);
КонецПроцедуры

//Я сообщаю содержимое командного файла
Процедура ЯСообщаюСодержимоеКомандногоФайла() Экспорт
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");

ТекстФайла = КомандныйФайл.ПолучитьТекстФайла();
Сообщить(ТекстФайла);
КонецПроцедуры

//Вывод командного файла содержит "командный файл"
Процедура ВыводКомандногоФайлаСодержит(Знач ОжидаемыйВыводКоманды) Экспорт
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");

ВыводКоманды = КомандныйФайл.ПолучитьВывод();
Ожидаем.Что(ВыводКоманды).Содержит(ОжидаемыйВыводКоманды);
КонецПроцедуры

//Код возврата командного файла равен 0
Процедура КодВозвратаКомандногоФайлаРавен(Знач ОжидаемыйКодВозврата) Экспорт
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");

Ожидаем.Что(КомандныйФайл.ПолучитьКодВозврата(), "Код возврата").Равно(ОжидаемыйКодВозврата);
КонецПроцедуры


Процедура ВывестиТекстФайла(Знач ИмяФайла, Знач Кодировка = Неопределено)

Файл = Новый Файл(ИмяФайла);
Если НЕ Файл.Существует() Тогда
Возврат;
КонецЕсли;

Если Кодировка = Неопределено Тогда
Кодировка = "utf-8";
КонецЕсли;

ЧТ = Новый ЧтениеТекста(ИмяФайла, Кодировка);
СтрокаФайла = ЧТ.Прочитать();
ЧТ.Закрыть();

Сообщить(СтрокаФайла);

КонецПроцедуры
6 changes: 3 additions & 3 deletions features/ВыполнениеКоманды.feature
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
Чтобы я мог проще автоматизировать больше действий на OneScript

Сценарий: Выполнение команды без параметров
Допустим я включаю отладку библиотеки "commands"
Допустим я выключаю отладку библиотеки "commands"
Когда Я выполняю команду "git"
Тогда Вывод команды содержит "[--version]"
И Код возврата равен 1
И Код возврата команды равен 1

Сценарий: Выполнение команды с параметрами
Допустим я выключаю отладку библиотеки "commands"
Когда Я добавляю параметр "--version" для команды
И Я выполняю команду "git"
Тогда Я сообщаю вывод команды
И Вывод команды содержит "version"
И Код возврата равен 0
И Код возврата команды равен 0
17 changes: 17 additions & 0 deletions features/КомандныеФайлы.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# language: ru

Функциональность: Выполнение командных файлов

Как разработчик
Я хочу иметь возможность создавать и выполнять командные файлы
Чтобы я мог проще автоматизировать больше действий на OneScript

Сценарий: Выполнение простого командного файла
Допустим Я включаю отладку библиотеки "commands"
Когда Я создаю командный файл
И Я добавляю строку "chcp 1251" в командный файл
И Я добавляю строку "echo командный файл" в командный файл
И Я сообщаю содержимое командного файла
И Я выполняю командный файл
Тогда Вывод командного файла содержит "командный файл"
И Код возврата командного файла равен 0
5 changes: 3 additions & 2 deletions lib.config
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<package-def>
<class name="Команда" file="src/Классы/Команда.os"/>
<package-def>
<class name="Команда" file="src/Команда.os"/>
<class name="КомандныйФайл" file="src/КомандныйФайл.os"/>
</package-def>
4 changes: 1 addition & 3 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@

Описание.Имя("commands")
.Версия("0.1")
.Версия("0.5")
.ЗависитОт("logos")
.ЗависитОт("asserts")
.ЗависитОт("cmdline")
.ЗависитОт("tempfiles")
.ВключитьФайл("src")
.ВключитьФайл("tests");
.ВключитьФайл("features");
36 changes: 36 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# commands

## Библиотека для упрощения работы c запуском различных приложений и командных файлов (cmd, bat, bash) из oscript.

Позволяет выполнять рутинные операции по запуску приложений и командных файлов системы.

Пример работы:
```bsl
Команда = Новый Команда;
Команда.УстановитьКоманду("oscript");
Команда.ДобавитьПараметр("-version");
КодВозврата = Команда.Выполнить();
Сообщить(КодВозврата);
Сообщить(Команда.ПолучитьВывод());
```

или запуск командного файла
```bsl
КомандныйФайл = Новый КомандныйФайл;
КомандныйФайл.Создать();
КомандныйФайл.ДобавитьКоманду("@echo off");
КомандныйФайл.ДобавитьКоманду("oscript -version");
Сообщить(КомандныйФайл.ПолучитьСодержимоеФайла());
КодВозврата = КомандныйФайл.Выполнить();
Сообщить(КодВозврата);
Сообщить(КомандныйФайл.ПолучитьВывод());
```

Так же описание функциональности содержится в папке `features`. В прилагающихся `step_definitions` можно подсмотреть больше примеров.
65 changes: 43 additions & 22 deletions src/Классы/Команда.os → src/Команда.os
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
Перем мПараметры;
Перем мРабочийКаталог;
Перем мВыводКоманды;
Перем мКодировкаВывода;
Перем мКодВозврата;

Перем ЭтоWindows;
Expand Down Expand Up @@ -73,6 +74,23 @@
Возврат мКодВозврата;
КонецФункции

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

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

// Получить текущий рабочий каталог.
//
Expand All @@ -83,6 +101,24 @@
Возврат мРабочийКаталог;
КонецФункции

// Оборачивает переданную строку в кавычки, если она еще не обернута.
//
// Параметры:
// Строка - Строка - Входящая строка
//
// Возвращаемое значение:
// Строка - Строка, обернутая в кавычки
//
Функция ОбернутьВКавычки(Знач Строка) Экспорт

Если Лев(Строка, 1) = """" и Прав(Строка, 1) = """" Тогда
Возврат Строка;
Иначе
Возврат """" + Строка + """";
КонецЕсли;

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

//////////////////////////////////////////////////////////////////////////
// Служебные процедуры и функции

Expand Down Expand Up @@ -128,8 +164,11 @@

КонецЦикла;

Приложение = ОбернутьВКавычки(ПутьПриложения);
Лог.Отладка(Приложение + СтрокаДляЛога);
Приложение = ПутьПриложения;
Если Найти(Приложение, " ") > 0 Тогда
Приложение = ОбернутьВКавычки(Приложение);
КонецЕсли;
Лог.Отладка("СтрокаЗапуска <%1>", Приложение + СтрокаДляЛога);

// Если ЭтоWindows = Ложь Тогда
// СтрокаЗапуска = "sh -c '" + Приложение + СтрокаЗапуска + "'";
Expand All @@ -140,7 +179,7 @@
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();

Процесс = СоздатьПроцесс(СтрокаЗапуска, мРабочийКаталог, Истина, Истина, КодировкаТекста.UTF8);
Процесс = СоздатьПроцесс(СтрокаЗапуска, мРабочийКаталог, Истина, Истина, мКодировкаВывода);
Процесс.Запустить();

Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
Expand All @@ -155,24 +194,6 @@

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

// Оборачивает переданную строку в кавычки, если она еще не обернута.
//
// Параметры:
// Строка - Строка - Входящая строка
//
// Возвращаемое значение:
// Строка - Строка, обернутая в кавычки
//
Функция ОбернутьВКавычки(Знач Строка)

Если Лев(Строка, 1) = """" и Прав(Строка, 1) = """" Тогда
Возврат Строка;
Иначе
Возврат """" + Строка + """";
КонецЕсли;

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

// Инициализация работы библиотеки.
// Задает минимальные настройки.
//
Expand All @@ -185,9 +206,9 @@

мРабочийКаталог = ".";
мВыводКоманды = "";
мКодировкаВывода = КодировкаТекста.UTF8;
мПараметры = Новый Массив;

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

Инициализация();

Loading

0 comments on commit 0254764

Please sign in to comment.