Skip to content

Commit

Permalink
Добавлено управление мгновенным выводом лога fix artbear#21
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Feb 10, 2017
1 parent 7a55def commit 20bcafb
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
ВсеШаги.Добавить("ЯПолучаюИсключениеПриВыполненииКоманды");
ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйДиапазонКодовВозвратаОтДоДляКоманды");
ВсеШаги.Добавить("ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду");
ВсеШаги.Добавить("ЯСнимаюФлагПоказаНемедленногоВыводаКоманды");

Возврат ВсеШаги;
КонецФункции
Expand Down Expand Up @@ -80,6 +81,14 @@
Команда.УстановитьПериодОпросаЗавершения(ТаймаутВМиллисекундах);
КонецПроцедуры

//Я снимаю флаг показа немедленного вывода команды "oscript"
Процедура ЯСнимаюФлагПоказаНемедленногоВыводаКоманды(Знач ИмяИлиТекстКоманды) Экспорт
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);

Команда.ПоказыватьВыводНемедленно(Ложь);
КонецПроцедуры


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

Процедура ВыполнитьКоманду(Знач ИмяИлиТекстКоманды, Знач ИспользуемКомандныйПроцессор = Истина)
Expand Down
17 changes: 11 additions & 6 deletions features/ВыполнениеКоманды.feature
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,19 @@
Когда Я выполняю команду "oscript"
Тогда Код возврата команды "oscript" равен 0

Сценарий: Проверка неправильного диапазона кодов возврата команды
Когда Я устанавливаю ожидаемый диапазон кодов возврата от 1 до 10 для команды "oscript"
Тогда Я получаю исключение при выполнении команды "oscript"
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение команды c установленным периодом опроса завершения команды
Когда Я устанавливаю период опроса завершения команды "oscript" в 1 миллисекунду
# И Я включаю отладку лога с именем "oscript.lib.commands"
И Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит "1Script Execution Engine"
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение команды c запретом немедленного вывода команды команды
Когда Я снимаю флаг показа немедленного вывода команды "oscript"
И Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит "1Script Execution Engine"
И Код возврата команды "oscript" равен 0

Сценарий: Проверка неправильного диапазона кодов возврата команды
Когда Я устанавливаю ожидаемый диапазон кодов возврата от 1 до 10 для команды "oscript"
Тогда Я получаю исключение при выполнении команды "oscript"
И Код возврата команды "oscript" равен 0
42 changes: 30 additions & 12 deletions src/Команда.os
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
Перем МинимальныйОжидаемыйКодВозврата;
Перем МаксимальныйОжидаемыйКодВозврата;
Перем ПериодОпросаВМиллисекундах;
Перем НемедленнныйВывод;

Перем ЭтоWindows;
Перем Лог;
Expand Down Expand Up @@ -117,6 +118,17 @@
Возврат КодВозврата;
КонецФункции

// Управляет мгновенным выводом лога команды
//
// Параметры:
// НемедленныйПоказ - Булевое
// Ложь: показывает вывод после завершения выполнения команды
// Истина: показывает вывод выполняется почти сразу, после появления очередной сообщений от команды
//
Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт
НемедленнныйВывод = НемедленныйПоказ;
КонецПроцедуры

// Установить ожидаемый код возврата
// После исполнения команды будет выброшено исключение, если полученный код возврата не совпадает с ожидаемым
//
Expand Down Expand Up @@ -292,21 +304,26 @@
КонецЕсли;
Процесс.Запустить();

Приостановить(ПериодОпросаВМиллисекундах);
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
Если ПериодОпросаВМиллисекундах <> 0 Тогда
Приостановить(ПериодОпросаВМиллисекундах);
КонецЕсли;
Если НемедленнныйВывод Тогда
Процесс.ОжидатьЗавершения();
УстановитьВывод(Процесс.ПотокВывода.Прочитать());
Иначе
Приостановить(ПериодОпросаВМиллисекундах);
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
Если ПериодОпросаВМиллисекундах <> 0 Тогда
Приостановить(ПериодОпросаВМиллисекундах);
КонецЕсли;

ОчереднаяСтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку();
Лог.Отладка(" %1", ОчереднаяСтрокаВывода);
ОчереднаяСтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку();
Лог.Отладка(" %1", ОчереднаяСтрокаВывода);

СтрокаВывода = "" + ОчереднаяСтрокаВывода + Символы.ПС;
ЗаписьXML.ЗаписатьБезОбработки(СтрокаВывода);
КонецЦикла;
СтрокаВывода = "" + ОчереднаяСтрокаВывода + Символы.ПС;
ЗаписьXML.ЗаписатьБезОбработки(СтрокаВывода);
КонецЦикла;

РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
УстановитьВывод(РезультатРаботыПроцесса);
РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
УстановитьВывод(РезультатРаботыПроцесса);
КонецЕсли;

КодВозврата = Процесс.КодВозврата;
Если ПроверяемКодВозврата Тогда
Expand Down Expand Up @@ -350,6 +367,7 @@
ОжидаемыйКодВозврата = 0;

ПериодОпросаВМиллисекундах = 100;
НемедленнныйВывод = Истина;

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

Expand Down
File renamed without changes.

0 comments on commit 20bcafb

Please sign in to comment.