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 3bf1b8b..12019bb 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" @@ -17,6 +17,9 @@ ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйДиапазонКодовВозвратаОтДоДляКоманды"); ВсеШаги.Добавить("ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду"); ВсеШаги.Добавить("ЯСнимаюФлагПоказаНемедленногоВыводаКоманды"); + ВсеШаги.Добавить("ЯПодключаюВыводКомандыВЛог"); + ВсеШаги.Добавить("ЯПодключаюВыводВФайлДляЛога"); + ВсеШаги.Добавить("ЯУстанавливаюФлагПоказаНемедленногоВыводаКоманды"); Возврат ВсеШаги; КонецФункции @@ -89,6 +92,13 @@ Команда.ПоказыватьВыводНемедленно(Ложь); КонецПроцедуры +//Я устанавливаю флаг показа немедленного вывода команды "oscript" +Процедура ЯУстанавливаюФлагПоказаНемедленногоВыводаКоманды(Знач ИмяИлиТекстКоманды) Экспорт + Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды); + + Команда.ПоказыватьВыводНемедленно(Истина); +КонецПроцедуры + //Я добавляю параметры для команды "oscript" //| -version | //| -encoding=utf-8 | @@ -101,8 +111,34 @@ Команда.ДобавитьПараметры(МассивПараметров); КонецПроцедуры +//Я подключаю вывод команды "oscript" в лог "ТестовыйЛог" +Процедура ЯПодключаюВыводКомандыВЛог(Знач ИмяИлиТекстКоманды, Знач ИмяЛога) Экспорт + Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды); + Команда.ДобавитьЛогВыводаКоманды(ИмяЛога); + + НовыйЛог = Логирование.ПолучитьЛог(ИмяЛога); + НовыйЛог.УстановитьРаскладку(ЭтотОбъект); +КонецПроцедуры + +//Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог" +Процедура ЯПодключаюВыводВФайлДляЛога(Знач ПутьФайла, Знач ИмяЛога) Экспорт + НовыйЛог = Логирование.ПолучитьЛог(ИмяЛога); + + ФайлЖурнала = Новый ВыводЛогаВФайл; + ФайлЖурнала.ОткрытьФайл(ПутьФайла); + + НовыйЛог.ДобавитьСпособВывода(ФайлЖурнала); + +КонецПроцедуры + // { Служебные функции +Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт + + Возврат СтрШаблон("ФИЧА ВыполнениеКоманды: %1 - %2", УровниЛога.НаименованиеУровня(Уровень), Сообщение); + +КонецФункции + Процедура ВыполнитьКоманду(Знач ИмяИлиТекстКоманды, Знач ИспользуемКомандныйПроцессор = Истина) Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды); Команда.УстановитьИсполнениеЧерезКомандыСистемы(ИспользуемКомандныйПроцессор); 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 09f06e4..d0d5e81 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" @@ -71,3 +71,53 @@ Когда Я устанавливаю ожидаемый диапазон кодов возврата от 1 до 10 для команды "oscript" Тогда Я получаю исключение при выполнении команды "oscript" И Код возврата команды "oscript" равен 0 + +Сценарий: Выполнение команды с выводом в отдельный лог + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + И Я установил рабочий каталог как текущий каталог + + Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог" + И Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог" + И Я добавляю параметр "-version" для команды "oscript" + + Когда Я выполняю команду "oscript" + Тогда я не вижу в консоли строку подобно "(\d+\.){3}\d+" + Тогда я не вижу в консоли вывод "ФИЧА ВыполнениеКоманды" + И Код возврата команды "oscript" равен 0 + И Файл "лог1.Log" содержит "ФИЧА ВыполнениеКоманды" + +Сценарий: Выполнение команды с выводом в отдельные логи + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + И Я установил рабочий каталог как текущий каталог + + Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог" + И Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог" + И Я подключаю вывод в файл "лог2.txt" для лога "ТестовыйЛог2" + Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог2" + И Я добавляю параметр "-version" для команды "oscript" + + Когда Я выполняю команду "oscript" + Тогда я не вижу в консоли строку подобно "(\d+\.){3}\d+" + Тогда я не вижу в консоли вывод "ФИЧА ВыполнениеКоманды" + И Код возврата команды "oscript" равен 0 + И Файл "лог1.Log" содержит "ФИЧА ВыполнениеКоманды" + И Файл "лог2.txt" содержит "ФИЧА ВыполнениеКоманды" + +Сценарий: Выполнение команды с выводом в отдельный лог при включенном немедленном выводом команды + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + И Я установил рабочий каталог как текущий каталог + + Допустим Я устанавливаю флаг показа немедленного вывода команды "oscript" + Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог" + И Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог" + И Я добавляю параметр "-version" для команды "oscript" + + Когда Я выполняю команду "oscript" + Тогда я не вижу в консоли строку подобно "(\d+\.){3}\d+" + Тогда я не вижу в консоли вывод "ФИЧА ВыполнениеКоманды" + И Код возврата команды "oscript" равен 0 + + И Файл "лог1.Log" содержит "ФИЧА ВыполнениеКоманды" 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 552d065..29b8270 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" @@ -17,6 +17,7 @@ Перем МаксимальныйОжидаемыйКодВозврата; Перем ПериодОпросаВМиллисекундах; Перем НемедленнныйВывод; +Перем ПодключенныеЛоги; Перем ЭтоWindows; Перем Лог; @@ -30,7 +31,12 @@ ПроверитьВозможностьВыполненияКоманды(); - КодВозврата = ЗапуститьИПодождать(); + КодВозврата = ЗапуститьИПодождать(); + + Для каждого ПодключенныйЛог Из ПодключенныеЛоги Цикл + ПодключенныйЛог.Закрыть(); + КонецЦикла; + Лог.Отладка("Код возврата равен %1", КодВозврата); Возврат КодВозврата; @@ -149,6 +155,22 @@ НемедленнныйВывод = НемедленныйПоказ; КонецПроцедуры +// Устанавливает передачу вывода команды в дополнительный лог +// +// Параметры: +// ИмяЛогаИлиЛог - <Строка, Лог> - имя лога или объект лога +// +Процедура ДобавитьЛогВыводаКоманды(Знач ИмяЛогаИлиЛог) Экспорт + + НовыйЛог = ИмяЛогаИлиЛог; + Если ТипЗнч(ИмяЛогаИлиЛог) = Тип("Строка") Тогда + НовыйЛог = Логирование.ПолучитьЛог(ИмяЛогаИлиЛог); + КонецЕсли; + + ПодключенныеЛоги.Добавить(НовыйЛог); + +КонецПроцедуры + // Установить ожидаемый код возврата // После исполнения команды будет выброшено исключение, если полученный код возврата не совпадает с ожидаемым // @@ -353,12 +375,12 @@ КонецЕсли; ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "В цикле"); - ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "В цикле"); + ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "В цикле", Истина); КонецЦикла; ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "После цикла"); - ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "После цикла"); + ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "После цикла", Истина); РезультатРаботыПроцесса = ЗаписьXML.Закрыть(); Если Не НемедленнныйВывод Тогда @@ -370,7 +392,7 @@ УстановитьВывод(РезультатРаботыПроцесса); КонецПроцедуры -Функция ОбработатьОчереднуюСтрокуВывода(ПотокПроцесса, ЗаписьXML, Знач ПрефиксДляОтладки) +Функция ОбработатьОчереднуюСтрокуВывода(ПотокПроцесса, ЗаписьXML, Знач ПрефиксДляОтладки, Знач ЭтоВыводОшибки = Ложь) Рез = ""; Если ПотокПроцесса.ЕстьДанные Тогда Рез = ПотокПроцесса.Прочитать(); @@ -378,11 +400,23 @@ Если Рез <> "" Тогда Лог.Отладка("в цикле %2%1", Рез, Символы.ПС); - ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС); - - Если НемедленнныйВывод Тогда - Сообщить(Рез); + Если ЗначениеЗаполнено(ПодключенныеЛоги) Тогда + Лог.Отладка(" Вывожу в отдельные логи"); + Для каждого ПодключенныйЛог Из ПодключенныеЛоги Цикл + Если ЭтоВыводОшибки Тогда + ПодключенныйЛог.Ошибка(Рез); + Иначе + ПодключенныйЛог.Информация(Рез); + КонецЕсли; + КонецЦикла; + Иначе + ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС); + + Если НемедленнныйВывод Тогда + Сообщить(Рез); + КонецЕсли; КонецЕсли; + КонецЕсли; Возврат Рез; @@ -433,6 +467,8 @@ ПериодОпросаВМиллисекундах = 100; НемедленнныйВывод = Ложь; + + ПодключенныеЛоги = Новый Массив; КонецПроцедуры diff --git a/tasks/test.os b/tasks/test.os index 8e7218c..5c8c4a9 100644 --- a/tasks/test.os +++ b/tasks/test.os @@ -15,7 +15,7 @@ Если РезультатыВыполнения.Строки.Количество() > 0 Тогда СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); - // ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, ФайлФичи.ЭтоКаталог()); + ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, Файл_КаталогФич.ЭтоКаталог()); КонецЕсли; ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;