diff --git "a/features/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" "b/features/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" index 919e0c0..5e22647 100644 --- "a/features/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" +++ "b/features/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" @@ -15,6 +15,7 @@ ВсеШаги.Добавить("ЯПолучаюИсключениеПриВыполненииКоманды"); ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйДиапазонКодовВозвратаОтДоДляКоманды"); ВсеШаги.Добавить("ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду"); + ВсеШаги.Добавить("ЯСнимаюФлагПоказаНемедленногоВыводаКоманды"); Возврат ВсеШаги; КонецФункции @@ -80,6 +81,14 @@ Команда.УстановитьПериодОпросаЗавершения(ТаймаутВМиллисекундах); КонецПроцедуры +//Я снимаю флаг показа немедленного вывода команды "oscript" +Процедура ЯСнимаюФлагПоказаНемедленногоВыводаКоманды(Знач ИмяИлиТекстКоманды) Экспорт + Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды); + + Команда.ПоказыватьВыводНемедленно(Ложь); +КонецПроцедуры + + // { Служебные функции Процедура ВыполнитьКоманду(Знач ИмяИлиТекстКоманды, Знач ИспользуемКомандныйПроцессор = Истина) diff --git "a/features/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" "b/features/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" index ae61a79..757405b 100644 --- "a/features/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" +++ "b/features/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" @@ -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 diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" index c9ef450..282aa6b 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" @@ -16,6 +16,7 @@ Перем МинимальныйОжидаемыйКодВозврата; Перем МаксимальныйОжидаемыйКодВозврата; Перем ПериодОпросаВМиллисекундах; +Перем НемедленнныйВывод; Перем ЭтоWindows; Перем Лог; @@ -117,6 +118,17 @@ Возврат КодВозврата; КонецФункции +// Управляет мгновенным выводом лога команды +// +// Параметры: +// НемедленныйПоказ - Булевое +// Ложь: показывает вывод только после завершения выполнения команды +// Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды +// +Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт + НемедленнныйВывод = НемедленныйПоказ; +КонецПроцедуры + // Установить ожидаемый код возврата // После исполнения команды будет выброшено исключение, если полученный код возврата не совпадает с ожидаемым // @@ -292,21 +304,35 @@ КонецЕсли; Процесс.Запустить(); - Приостановить(ПериодОпросаВМиллисекундах); - Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл + Если Не НемедленнныйВывод Тогда + Процесс.ОжидатьЗавершения(); + ЗаписьXML.ЗаписатьБезОбработки(Процесс.ПотокВывода.Прочитать()); + Иначе Если ПериодОпросаВМиллисекундах <> 0 Тогда Приостановить(ПериодОпросаВМиллисекундах); КонецЕсли; + Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл + Если ПериодОпросаВМиллисекундах <> 0 Тогда + Приостановить(ПериодОпросаВМиллисекундах); + КонецЕсли; - ОчереднаяСтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку(); - Лог.Отладка(" %1", ОчереднаяСтрокаВывода); + ОчереднаяСтрокаВывода = Процесс.ПотокВывода.Прочитать(); + ОчереднаяСтрокаВывода = СтрЗаменить(ОчереднаяСтрокаВывода, Символы.ВК, ""); + Лог.Отладка("%2%1", ОчереднаяСтрокаВывода, Символы.ПС); - СтрокаВывода = "" + ОчереднаяСтрокаВывода + Символы.ПС; - ЗаписьXML.ЗаписатьБезОбработки(СтрокаВывода); - КонецЦикла; + ЗаписьXML.ЗаписатьБезОбработки(ОчереднаяСтрокаВывода); + КонецЦикла; - РезультатРаботыПроцесса = ЗаписьXML.Закрыть(); - УстановитьВывод(РезультатРаботыПроцесса); + КонецЕсли; + + РезультатРаботыПроцесса = ЗаписьXML.Закрыть(); + Если Не НемедленнныйВывод Тогда + Лог.Отладка("%2%1", РезультатРаботыПроцесса, Символы.ПС); + КонецЕсли; + + Лог.Отладка("Длина вывода %1, количество строк %2", СтрДлина(РезультатРаботыПроцесса), СтрЧислоСтрок(РезультатРаботыПроцесса)); + + УстановитьВывод(РезультатРаботыПроцесса); КодВозврата = Процесс.КодВозврата; Если ПроверяемКодВозврата Тогда @@ -350,6 +376,7 @@ ОжидаемыйКодВозврата = 0; ПериодОпросаВМиллисекундах = 100; + НемедленнныйВывод = Истина; КонецПроцедуры diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" index 43428ac..357b04e 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" @@ -10,6 +10,7 @@ Перем ЭтоWindows; Перем Лог; +Перем НемедленнныйВывод; // Получить имя лога продукта // @@ -102,6 +103,7 @@ Команда = Новый Команда; Команда.УстановитьКодировкуВывода(КодировкаТекста.OEM); + Команда.ПоказыватьВыводНемедленно(НемедленнныйВывод); Если ЭтоWindows Тогда Приложение = "cmd.exe"; @@ -144,6 +146,17 @@ Возврат ТекстФайла; КонецФункции +// Управляет мгновенным выводом лога команды +// +// Параметры: +// НемедленныйПоказ - Булевое +// Ложь: показывает вывод только после завершения выполнения команды +// Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды +// +Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт + НемедленнныйВывод = НемедленныйПоказ; +КонецПроцедуры + // Получить строку перенаправления ввода-вывода "> файл" // // Параметры: @@ -183,6 +196,7 @@ ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; ТекстФайла = ""; + НемедленнныйВывод = Истина; Создать(); КонецПроцедуры diff --git a/tasks/exec-feature.os b/tasks/test-feature.os similarity index 100% rename from tasks/exec-feature.os rename to tasks/test-feature.os