Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Подготовка для выдачи в отдельные логи #18 #30

Merged
merged 8 commits into from
Nov 14, 2017
36 changes: 36 additions & 0 deletions features/step_definitions/ВыполнениеКоманды.os
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйДиапазонКодовВозвратаОтДоДляКоманды");
ВсеШаги.Добавить("ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду");
ВсеШаги.Добавить("ЯСнимаюФлагПоказаНемедленногоВыводаКоманды");
ВсеШаги.Добавить("ЯПодключаюВыводКомандыВЛог");
ВсеШаги.Добавить("ЯПодключаюВыводВФайлДляЛога");
ВсеШаги.Добавить("ЯУстанавливаюФлагПоказаНемедленногоВыводаКоманды");

Возврат ВсеШаги;
КонецФункции
Expand Down Expand Up @@ -89,6 +92,13 @@
Команда.ПоказыватьВыводНемедленно(Ложь);
КонецПроцедуры

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

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

//Я добавляю параметры для команды "oscript"
//| -version |
//| -encoding=utf-8 |
Expand All @@ -101,8 +111,34 @@
Команда.ДобавитьПараметры(МассивПараметров);
КонецПроцедуры

//Я подключаю вывод команды "oscript" в лог "ТестовыйЛог"
Процедура ЯПодключаюВыводКомандыВЛог(Знач ИмяИлиТекстКоманды, Знач ИмяЛога) Экспорт
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);
Команда.ДобавитьЛогВыводаКоманды(ИмяЛога);

НовыйЛог = Логирование.ПолучитьЛог(ИмяЛога);
НовыйЛог.УстановитьРаскладку(ЭтотОбъект);
КонецПроцедуры

//Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог"
Процедура ЯПодключаюВыводВФайлДляЛога(Знач ПутьФайла, Знач ИмяЛога) Экспорт
НовыйЛог = Логирование.ПолучитьЛог(ИмяЛога);

ФайлЖурнала = Новый ВыводЛогаВФайл;
ФайлЖурнала.ОткрытьФайл(ПутьФайла);

НовыйЛог.ДобавитьСпособВывода(ФайлЖурнала);

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

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

Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт

Возврат СтрШаблон("ФИЧА ВыполнениеКоманды: %1 - %2", УровниЛога.НаименованиеУровня(Уровень), Сообщение);

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

Процедура ВыполнитьКоманду(Знач ИмяИлиТекстКоманды, Знач ИспользуемКомандныйПроцессор = Истина)
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);
Команда.УстановитьИсполнениеЧерезКомандыСистемы(ИспользуемКомандныйПроцессор);
Expand Down
50 changes: 50 additions & 0 deletions features/ВыполнениеКоманды.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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" содержит "ФИЧА ВыполнениеКоманды"
52 changes: 44 additions & 8 deletions src/Команда.os
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
Перем МаксимальныйОжидаемыйКодВозврата;
Перем ПериодОпросаВМиллисекундах;
Перем НемедленнныйВывод;
Перем ПодключенныеЛоги;

Перем ЭтоWindows;
Перем Лог;
Expand All @@ -30,7 +31,12 @@

ПроверитьВозможностьВыполненияКоманды();

КодВозврата = ЗапуститьИПодождать();
КодВозврата = ЗапуститьИПодождать();

Для каждого ПодключенныйЛог Из ПодключенныеЛоги Цикл
ПодключенныйЛог.Закрыть();
КонецЦикла;

Лог.Отладка("Код возврата равен %1", КодВозврата);
Возврат КодВозврата;

Expand Down Expand Up @@ -149,6 +155,22 @@
НемедленнныйВывод = НемедленныйПоказ;
КонецПроцедуры

// Устанавливает передачу вывода команды в дополнительный лог
//
// Параметры:
// ИмяЛогаИлиЛог - <Строка, Лог> - имя лога или объект лога
//
Процедура ДобавитьЛогВыводаКоманды(Знач ИмяЛогаИлиЛог) Экспорт

НовыйЛог = ИмяЛогаИлиЛог;
Если ТипЗнч(ИмяЛогаИлиЛог) = Тип("Строка") Тогда
НовыйЛог = Логирование.ПолучитьЛог(ИмяЛогаИлиЛог);
КонецЕсли;

ПодключенныеЛоги.Добавить(НовыйЛог);

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

// Установить ожидаемый код возврата
// После исполнения команды будет выброшено исключение, если полученный код возврата не совпадает с ожидаемым
//
Expand Down Expand Up @@ -353,12 +375,12 @@
КонецЕсли;

ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "В цикле");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "В цикле");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "В цикле", Истина);

КонецЦикла;

ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "После цикла");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "После цикла");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "После цикла", Истина);

РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
Если Не НемедленнныйВывод Тогда
Expand All @@ -370,19 +392,31 @@
УстановитьВывод(РезультатРаботыПроцесса);
КонецПроцедуры

Функция ОбработатьОчереднуюСтрокуВывода(ПотокПроцесса, ЗаписьXML, Знач ПрефиксДляОтладки)
Функция ОбработатьОчереднуюСтрокуВывода(ПотокПроцесса, ЗаписьXML, Знач ПрефиксДляОтладки, Знач ЭтоВыводОшибки = Ложь)
Рез = "";
Если ПотокПроцесса.ЕстьДанные Тогда
Рез = ПотокПроцесса.Прочитать();
КонецЕсли;

Если Рез <> "" Тогда
Лог.Отладка("в цикле %2%1", Рез, Символы.ПС);
ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС);

Если НемедленнныйВывод Тогда
Сообщить(Рез);
Если ЗначениеЗаполнено(ПодключенныеЛоги) Тогда
Лог.Отладка(" Вывожу в отдельные логи");
Для каждого ПодключенныйЛог Из ПодключенныеЛоги Цикл
Если ЭтоВыводОшибки Тогда
ПодключенныйЛог.Ошибка(Рез);
Иначе
ПодключенныйЛог.Информация(Рез);
КонецЕсли;
КонецЦикла;
Иначе
ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС);

Если НемедленнныйВывод Тогда
Сообщить(Рез);
КонецЕсли;
КонецЕсли;

КонецЕсли;

Возврат Рез;
Expand Down Expand Up @@ -433,6 +467,8 @@

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

ПодключенныеЛоги = Новый Массив;

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

Expand Down
2 changes: 1 addition & 1 deletion tasks/test.os
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
Если РезультатыВыполнения.Строки.Количество() > 0 Тогда
СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);

// ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, ФайлФичи.ЭтоКаталог());
ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, Файл_КаталогФич.ЭтоКаталог());
КонецЕсли;

ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
Expand Down