Skip to content

Commit 4e1bcff

Browse files
committed
Merge branch 'release/0.9'
2 parents 1a36ce2 + 77228ff commit 4e1bcff

12 files changed

+176
-16
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
exec.log
1+
exec.log
2+
bdd-log.xml

.vscode/tasks.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,18 @@
5656
}
5757
}
5858
},
59+
{
60+
"taskName": "Opm: package build",
61+
"args": [
62+
"opm",
63+
"build",
64+
"${workspaceRoot}"
65+
],
66+
"echoCommand": true,
67+
"showOutput": "always",
68+
"suppressTaskName": true,
69+
"isBuildCommand": false
70+
},
5971
{
6072
"taskName": "Exec all features",
6173
"args": [

appveyor-runtests.cmd

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@ set OSCRIPT=%ProgramFiles(x86)%\OneScript
88
@echo .
99
@echo .
1010

11-
call 1bdd features -junit-out ./bdd-log.xml
11+
@rem call 1bdd features -junit-out ./bdd-log.xml
12+
@call opm test
1213

1314
@if %ERRORLEVEL%==2 GOTO good_exit_bdd
1415
@if %ERRORLEVEL%==0 GOTO good_exit_bdd
1516

16-
dir .\tests\
17+
dir .
1718

1819
exit /B 1
1920

2021
:good_exit_bdd
2122

22-
dir .\tests\
23+
dir .
2324

2425
exit /B 0

appveyor.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ install:
4242
4343
opm list
4444
45-
opm install 1testrunner
46-
4745
opm install 1commands
46+
47+
opm install 1testrunner
4848
4949
opm install 1bdd
5050

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйКодВозвратаДляКоманды");
1515
ВсеШаги.Добавить("ЯПолучаюИсключениеПриВыполненииКоманды");
1616
ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйДиапазонКодовВозвратаОтДоДляКоманды");
17+
ВсеШаги.Добавить("ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду");
18+
ВсеШаги.Добавить("ЯСнимаюФлагПоказаНемедленногоВыводаКоманды");
1719

1820
Возврат ВсеШаги;
1921
КонецФункции
@@ -71,6 +73,21 @@
7173
ВызватьИсключение СтрШаблон("Не получили исключение при выполнении команды", ИмяИлиТекстКоманды);
7274
КонецПроцедуры
7375

76+
//Я устанавливаю период опроса завершения команды "oscript" в 1 миллисекунду
77+
Процедура ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду(Знач ИмяИлиТекстКоманды, Знач ТаймаутВМиллисекундах) Экспорт
78+
79+
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);
80+
81+
Команда.УстановитьПериодОпросаЗавершения(ТаймаутВМиллисекундах);
82+
КонецПроцедуры
83+
84+
//Я снимаю флаг показа немедленного вывода команды "oscript"
85+
Процедура ЯСнимаюФлагПоказаНемедленногоВыводаКоманды(Знач ИмяИлиТекстКоманды) Экспорт
86+
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);
87+
88+
Команда.ПоказыватьВыводНемедленно(Ложь);
89+
КонецПроцедуры
90+
7491

7592
// { Служебные функции
7693

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

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

99
Контекст: Отключение отладки в логах
10-
Допустим Я включаю отладку лога с именем "oscript.lib.commands"
10+
Допустим Я выключаю отладку лога с именем "oscript.lib.commands"
11+
И Я очищаю параметры команды "git" в контексте
12+
И Я очищаю параметры команды "oscript" в контексте
1113

1214
Сценарий: Выполнение команды без параметров
1315
Когда Я выполняю команду "git"
@@ -46,6 +48,18 @@
4648
Когда Я выполняю команду "oscript"
4749
Тогда Код возврата команды "oscript" равен 0
4850

51+
Сценарий: Выполнение команды c установленным периодом опроса завершения команды
52+
Когда Я устанавливаю период опроса завершения команды "oscript" в 1 миллисекунду
53+
И Я выполняю команду "oscript"
54+
Тогда Вывод команды "oscript" содержит "1Script Execution Engine"
55+
И Код возврата команды "oscript" равен 0
56+
57+
Сценарий: Выполнение команды c запретом немедленного вывода команды команды
58+
Когда Я снимаю флаг показа немедленного вывода команды "oscript"
59+
И Я выполняю команду "oscript"
60+
Тогда Вывод команды "oscript" содержит "1Script Execution Engine"
61+
И Код возврата команды "oscript" равен 0
62+
4963
Сценарий: Проверка неправильного диапазона кодов возврата команды
5064
Когда Я устанавливаю ожидаемый диапазон кодов возврата от 1 до 10 для команды "oscript"
5165
Тогда Я получаю исключение при выполнении команды "oscript"

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
Описание.Имя("1commands")
3-
.Версия("0.8")
3+
.Версия("0.9")
44
.ЗависитОт("logos")
55
.ЗависитОт("asserts")
66
.ЗависитОт("tempfiles")

readme.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,17 @@
3939
```
4040

4141
Так же описание функциональности содержится в папке `features`. В прилагающихся `step_definitions` можно подсмотреть больше примеров.
42+
43+
## FAQ
44+
45+
Вопрос:
46+
>при использовании классов Команда/Командный файл происходит зависание выполнения команды.
47+
В консоли та же команда выполняется без зависания.
48+
49+
>Например, при использовании `gitsync`. [Описание ошибки и расследование](https://github.com/artbear/1commands/issues/14)
50+
51+
>Что делать?
52+
53+
Ответ:
54+
> Отключить режим использования немедленного вывода лога команды, использовав метод `ПоказыватьВыводНемедленно(Ложь);`
55+
В этом случае вывод команды будет получен после завершения работы команды, а не во время ее выполнения.

src/Команда.os

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
Перем ПроверяемКодВозврата;
1616
Перем МинимальныйОжидаемыйКодВозврата;
1717
Перем МаксимальныйОжидаемыйКодВозврата;
18+
Перем ПериодОпросаВМиллисекундах;
19+
Перем НемедленнныйВывод;
1820

1921
Перем ЭтоWindows;
2022
Перем Лог;
@@ -116,6 +118,17 @@
116118
Возврат КодВозврата;
117119
КонецФункции
118120

121+
// Управляет мгновенным выводом лога команды
122+
//
123+
// Параметры:
124+
// НемедленныйПоказ - Булевое
125+
// Ложь: показывает вывод только после завершения выполнения команды
126+
// Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды
127+
//
128+
Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт
129+
НемедленнныйВывод = НемедленныйПоказ;
130+
КонецПроцедуры
131+
119132
// Установить ожидаемый код возврата
120133
// После исполнения команды будет выброшено исключение, если полученный код возврата не совпадает с ожидаемым
121134
//
@@ -161,6 +174,15 @@
161174
Возврат КодировкаВывода;
162175
КонецФункции
163176

177+
// Установить период опроса завершения.
178+
//
179+
// Параметры:
180+
// ПериодОпросаВМиллисекундах - период опроса, в миллисекундах
181+
//
182+
Процедура УстановитьПериодОпросаЗавершения(Знач ПарамПериодОпросаВМиллисекундах) Экспорт
183+
ПериодОпросаВМиллисекундах = ПарамПериодОпросаВМиллисекундах;
184+
КонецПроцедуры
185+
164186
// Установить новый рабочий каталог.
165187
//
166188
// Параметры:
@@ -282,16 +304,35 @@
282304
КонецЕсли;
283305
Процесс.Запустить();
284306

285-
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
286-
ОчереднаяСтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку();
287-
Лог.Отладка(" %1", ОчереднаяСтрокаВывода);
307+
Если Не НемедленнныйВывод Тогда
308+
Процесс.ОжидатьЗавершения();
309+
ЗаписьXML.ЗаписатьБезОбработки(Процесс.ПотокВывода.Прочитать());
310+
Иначе
311+
Если ПериодОпросаВМиллисекундах <> 0 Тогда
312+
Приостановить(ПериодОпросаВМиллисекундах);
313+
КонецЕсли;
314+
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
315+
Если ПериодОпросаВМиллисекундах <> 0 Тогда
316+
Приостановить(ПериодОпросаВМиллисекундах);
317+
КонецЕсли;
288318

289-
СтрокаВывода = "" + ОчереднаяСтрокаВывода + Символы.ПС;
290-
ЗаписьXML.ЗаписатьБезОбработки(СтрокаВывода);
291-
КонецЦикла;
319+
ОчереднаяСтрокаВывода = Процесс.ПотокВывода.Прочитать();
320+
ОчереднаяСтрокаВывода = СтрЗаменить(ОчереднаяСтрокаВывода, Символы.ВК, "");
321+
Лог.Отладка("%2%1", ОчереднаяСтрокаВывода, Символы.ПС);
292322

293-
РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
294-
УстановитьВывод(РезультатРаботыПроцесса);
323+
ЗаписьXML.ЗаписатьБезОбработки(ОчереднаяСтрокаВывода);
324+
КонецЦикла;
325+
326+
КонецЕсли;
327+
328+
РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
329+
Если Не НемедленнныйВывод Тогда
330+
Лог.Отладка("%2%1", РезультатРаботыПроцесса, Символы.ПС);
331+
КонецЕсли;
332+
333+
Лог.Отладка("Длина вывода %1, количество строк %2", СтрДлина(РезультатРаботыПроцесса), СтрЧислоСтрок(РезультатРаботыПроцесса));
334+
335+
УстановитьВывод(РезультатРаботыПроцесса);
295336

296337
КодВозврата = Процесс.КодВозврата;
297338
Если ПроверяемКодВозврата Тогда
@@ -333,6 +374,9 @@
333374

334375
ПроверяемКодВозврата = Ложь;
335376
ОжидаемыйКодВозврата = 0;
377+
378+
ПериодОпросаВМиллисекундах = 100;
379+
НемедленнныйВывод = Истина;
336380

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

src/КомандныйФайл.os

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
Перем ЭтоWindows;
1212
Перем Лог;
13+
Перем НемедленнныйВывод;
1314

1415
// Получить имя лога продукта
1516
//
@@ -102,6 +103,7 @@
102103

103104
Команда = Новый Команда;
104105
Команда.УстановитьКодировкуВывода(КодировкаТекста.OEM);
106+
Команда.ПоказыватьВыводНемедленно(НемедленнныйВывод);
105107

106108
Если ЭтоWindows Тогда
107109
Приложение = "cmd.exe";
@@ -144,6 +146,17 @@
144146
Возврат ТекстФайла;
145147
КонецФункции
146148

149+
// Управляет мгновенным выводом лога команды
150+
//
151+
// Параметры:
152+
// НемедленныйПоказ - Булевое
153+
// Ложь: показывает вывод только после завершения выполнения команды
154+
// Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды
155+
//
156+
Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт
157+
НемедленнныйВывод = НемедленныйПоказ;
158+
КонецПроцедуры
159+
147160
// Получить строку перенаправления ввода-вывода "> файл"
148161
//
149162
// Параметры:
@@ -183,6 +196,7 @@
183196
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
184197

185198
ТекстФайла = "";
199+
НемедленнныйВывод = Истина;
186200

187201
Создать();
188202
КонецПроцедуры

tasks/test-feature.os

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#Использовать ".."
2+
#Использовать 1bdd
3+
4+
КаталогФич = ОбъединитьПути(".", "features");
5+
ПутьФичи = ОбъединитьПути(".", "features", АргументыКоманднойСтроки[0]);
6+
Файл_КаталогФич = Новый Файл(КаталогФич);
7+
ФайлФичи = Новый Файл(ПутьФичи);
8+
9+
ИсполнительБДД = Новый ИсполнительБДД;
10+
РезультатВыполнения = ИсполнительБДД.ВыполнитьФичу(ФайлФичи, Файл_КаталогФич);
11+
ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатВыполнения);
12+
13+
Сообщить(ИтоговыйРезультатВыполнения);
14+
Если ИтоговыйРезультатВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался Тогда
15+
ВызватьИсключение 1;
16+
КонецЕсли;

tasks/test.os

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#Использовать ".."
2+
#Использовать 1bdd
3+
4+
ПутьОтчетаJUnit = "./bdd-log.xml";
5+
6+
КаталогФич = ОбъединитьПути(".", "features");
7+
8+
Файл_КаталогФич = Новый Файл(КаталогФич);
9+
10+
ИсполнительБДД = Новый ИсполнительБДД;
11+
РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич);
12+
ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
13+
14+
СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся;
15+
Если РезультатыВыполнения.Строки.Количество() > 0 Тогда
16+
СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
17+
18+
// ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, ФайлФичи.ЭтоКаталог());
19+
КонецЕсли;
20+
21+
ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
22+
ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit);
23+
24+
Сообщить(ИтоговыйРезультатВыполнения);
25+
Если ИтоговыйРезультатВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался Тогда
26+
ВызватьИсключение 1;
27+
КонецЕсли;

0 commit comments

Comments
 (0)