Skip to content

Commit 0254764

Browse files
committed
Merge branch 'release/0.5'
2 parents 7b7c0cb + 835462b commit 0254764

9 files changed

+373
-37
lines changed

features/step_definitions/ВыполнениеКоманды.os

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
ВсеШаги.Добавить("ЯВыключаюОтладкуБиблиотеки");
1919
ВсеШаги.Добавить("ЯДобавляюПараметрДляКоманды");
2020
ВсеШаги.Добавить("ЯСообщаюВыводКоманды");
21-
ВсеШаги.Добавить("КодВозвратаРавен");
21+
ВсеШаги.Добавить("КодВозвратаКомандыРавен");
2222

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

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

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

9493
Ожидаем.Что(Команда.ПолучитьКодВозврата(), "Код возврата").Равно(ОжидаемыйКодВозврата);
9594
КонецПроцедуры
96-
97-
98-
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
2+
#Использовать "../.."
3+
4+
Перем БДД; //контекст фреймворка 1bdd
5+
6+
// Метод выдает список шагов, реализованных в данном файле-шагов
7+
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
8+
БДД = КонтекстФреймворкаBDD;
9+
10+
ВсеШаги = Новый Массив;
11+
12+
ВсеШаги.Добавить("ЯСоздаюКомандныйФайл");
13+
ВсеШаги.Добавить("ЯДобавляюСтрокуВКомандныйФайл");
14+
ВсеШаги.Добавить("ЯСообщаюСодержимоеКомандногоФайла");
15+
ВсеШаги.Добавить("ЯВыполняюКомандныйФайл");
16+
ВсеШаги.Добавить("ВыводКомандногоФайлаСодержит");
17+
ВсеШаги.Добавить("КодВозвратаКомандногоФайлаРавен");
18+
19+
Возврат ВсеШаги;
20+
КонецФункции
21+
22+
// Реализация шагов
23+
24+
// Процедура выполняется перед запуском каждого сценария
25+
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
26+
27+
КонецПроцедуры
28+
29+
// Процедура выполняется после завершения каждого сценария
30+
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
31+
32+
КонецПроцедуры
33+
34+
//Я создаю командный файл
35+
Процедура ЯСоздаюКомандныйФайл() Экспорт
36+
КомандныйФайл = Новый КомандныйФайл;
37+
КомандныйФайл.Создать();
38+
БДД.СохранитьВКонтекст("КомандныйФайл", КомандныйФайл);
39+
КонецПроцедуры
40+
41+
//я добавляю строку "echo командный файл" в командный файл
42+
Процедура ЯДобавляюСтрокуВКомандныйФайл(Знач СтрокаКоманды) Экспорт
43+
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");
44+
45+
КомандныйФайл.ДобавитьКоманду(СтрокаКоманды);
46+
КонецПроцедуры
47+
48+
//Я выполняю командный файл
49+
Процедура ЯВыполняюКомандныйФайл() Экспорт
50+
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");
51+
52+
КомандныйФайл.Выполнить();
53+
КонецПроцедуры
54+
55+
//Я сообщаю содержимое файла "ИмяФайла"
56+
Процедура ЯСообщаюСодержимоеФайла(Знач ИмяФайла) Экспорт
57+
ВывестиТекстФайла(ИмяФайла);
58+
КонецПроцедуры
59+
60+
//Я сообщаю содержимое командного файла
61+
Процедура ЯСообщаюСодержимоеКомандногоФайла() Экспорт
62+
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");
63+
64+
ТекстФайла = КомандныйФайл.ПолучитьТекстФайла();
65+
Сообщить(ТекстФайла);
66+
КонецПроцедуры
67+
68+
//Вывод командного файла содержит "командный файл"
69+
Процедура ВыводКомандногоФайлаСодержит(Знач ОжидаемыйВыводКоманды) Экспорт
70+
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");
71+
72+
ВыводКоманды = КомандныйФайл.ПолучитьВывод();
73+
Ожидаем.Что(ВыводКоманды).Содержит(ОжидаемыйВыводКоманды);
74+
КонецПроцедуры
75+
76+
//Код возврата командного файла равен 0
77+
Процедура КодВозвратаКомандногоФайлаРавен(Знач ОжидаемыйКодВозврата) Экспорт
78+
КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");
79+
80+
Ожидаем.Что(КомандныйФайл.ПолучитьКодВозврата(), "Код возврата").Равно(ОжидаемыйКодВозврата);
81+
КонецПроцедуры
82+
83+
84+
Процедура ВывестиТекстФайла(Знач ИмяФайла, Знач Кодировка = Неопределено)
85+
86+
Файл = Новый Файл(ИмяФайла);
87+
Если НЕ Файл.Существует() Тогда
88+
Возврат;
89+
КонецЕсли;
90+
91+
Если Кодировка = Неопределено Тогда
92+
Кодировка = "utf-8";
93+
КонецЕсли;
94+
95+
ЧТ = Новый ЧтениеТекста(ИмяФайла, Кодировка);
96+
СтрокаФайла = ЧТ.Прочитать();
97+
ЧТ.Закрыть();
98+
99+
Сообщить(СтрокаФайла);
100+
101+
КонецПроцедуры

features/ВыполнениеКоманды.feature

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
Чтобы я мог проще автоматизировать больше действий на OneScript
88

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

1515
Сценарий: Выполнение команды с параметрами
1616
Допустим я выключаю отладку библиотеки "commands"
1717
Когда Я добавляю параметр "--version" для команды
1818
И Я выполняю команду "git"
1919
Тогда Я сообщаю вывод команды
2020
И Вывод команды содержит "version"
21-
И Код возврата равен 0
21+
И Код возврата команды равен 0
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# language: ru
2+
3+
Функциональность: Выполнение командных файлов
4+
5+
Как разработчик
6+
Я хочу иметь возможность создавать и выполнять командные файлы
7+
Чтобы я мог проще автоматизировать больше действий на OneScript
8+
9+
Сценарий: Выполнение простого командного файла
10+
Допустим Я включаю отладку библиотеки "commands"
11+
Когда Я создаю командный файл
12+
И Я добавляю строку "chcp 1251" в командный файл
13+
И Я добавляю строку "echo командный файл" в командный файл
14+
И Я сообщаю содержимое командного файла
15+
И Я выполняю командный файл
16+
Тогда Вывод командного файла содержит "командный файл"
17+
И Код возврата командного файла равен 0

lib.config

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
<package-def>
2-
<class name="Команда" file="src/Классы/Команда.os"/>
1+
<package-def>
2+
<class name="Команда" file="src/Команда.os"/>
3+
<class name="КомандныйФайл" file="src/КомандныйФайл.os"/>
34
</package-def>

packagedef

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11

22
Описание.Имя("commands")
3-
.Версия("0.1")
3+
.Версия("0.5")
44
.ЗависитОт("logos")
55
.ЗависитОт("asserts")
6-
.ЗависитОт("cmdline")
76
.ЗависитОт("tempfiles")
87
.ВключитьФайл("src")
9-
.ВключитьФайл("tests");
108
.ВключитьФайл("features");

readme.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# commands
2+
3+
## Библиотека для упрощения работы c запуском различных приложений и командных файлов (cmd, bat, bash) из oscript.
4+
5+
Позволяет выполнять рутинные операции по запуску приложений и командных файлов системы.
6+
7+
Пример работы:
8+
```bsl
9+
Команда = Новый Команда;
10+
Команда.УстановитьКоманду("oscript");
11+
12+
Команда.ДобавитьПараметр("-version");
13+
14+
КодВозврата = Команда.Выполнить();
15+
Сообщить(КодВозврата);
16+
17+
Сообщить(Команда.ПолучитьВывод());
18+
```
19+
20+
или запуск командного файла
21+
```bsl
22+
КомандныйФайл = Новый КомандныйФайл;
23+
КомандныйФайл.Создать();
24+
25+
КомандныйФайл.ДобавитьКоманду("@echo off");
26+
КомандныйФайл.ДобавитьКоманду("oscript -version");
27+
28+
Сообщить(КомандныйФайл.ПолучитьСодержимоеФайла());
29+
30+
КодВозврата = КомандныйФайл.Выполнить();
31+
Сообщить(КодВозврата);
32+
33+
Сообщить(КомандныйФайл.ПолучитьВывод());
34+
```
35+
36+
Так же описание функциональности содержится в папке `features`. В прилагающихся `step_definitions` можно подсмотреть больше примеров.

src/Классы/Команда.os renamed to src/Команда.os

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
Перем мПараметры;
99
Перем мРабочийКаталог;
1010
Перем мВыводКоманды;
11+
Перем мКодировкаВывода;
1112
Перем мКодВозврата;
1213

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

77+
// Установить кодировку вывода для выполнения команды.
78+
//
79+
// Параметры:
80+
// Строка - кодировка вывода
81+
//
82+
Процедура УстановитьКодировкуВывода(Знач НоваяКодировкаВывода) Экспорт
83+
мКодировкаВывода = НоваяКодировкаВывода;
84+
КонецПроцедуры
85+
86+
// Получить кодировка вывода выполняемой команды.
87+
//
88+
// Возвращаемое значение:
89+
// Строка - кодировка вывода команды
90+
//
91+
Функция ПолучитьКодировкуВывода() Экспорт
92+
Возврат мКодировкаВывода;
93+
КонецФункции
7694

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

104+
// Оборачивает переданную строку в кавычки, если она еще не обернута.
105+
//
106+
// Параметры:
107+
// Строка - Строка - Входящая строка
108+
//
109+
// Возвращаемое значение:
110+
// Строка - Строка, обернутая в кавычки
111+
//
112+
Функция ОбернутьВКавычки(Знач Строка) Экспорт
113+
114+
Если Лев(Строка, 1) = """" и Прав(Строка, 1) = """" Тогда
115+
Возврат Строка;
116+
Иначе
117+
Возврат """" + Строка + """";
118+
КонецЕсли;
119+
120+
КонецФункции
121+
86122
//////////////////////////////////////////////////////////////////////////
87123
// Служебные процедуры и функции
88124

@@ -128,8 +164,11 @@
128164

129165
КонецЦикла;
130166

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

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

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

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

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

158-
// Оборачивает переданную строку в кавычки, если она еще не обернута.
159-
//
160-
// Параметры:
161-
// Строка - Строка - Входящая строка
162-
//
163-
// Возвращаемое значение:
164-
// Строка - Строка, обернутая в кавычки
165-
//
166-
Функция ОбернутьВКавычки(Знач Строка)
167-
168-
Если Лев(Строка, 1) = """" и Прав(Строка, 1) = """" Тогда
169-
Возврат Строка;
170-
Иначе
171-
Возврат """" + Строка + """";
172-
КонецЕсли;
173-
174-
КонецФункции
175-
176197
// Инициализация работы библиотеки.
177198
// Задает минимальные настройки.
178199
//
@@ -185,9 +206,9 @@
185206

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

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

192214
Инициализация();
193-

0 commit comments

Comments
 (0)