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

Произвольные обработчики ожидания выполнения процесса #41

Merged
merged 13 commits into from
Mar 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

Процедура Запустить(ВремяВыполнения)

Ожидание = ТекущаяУниверсальнаяДатаВМиллисекундах() + ВремяВыполнения * 1000; // сек

Пока Ожидание > ТекущаяУниверсальнаяДатаВМиллисекундах() Цикл
Сообщить("Полезная работа");
Приостановить(1000);
КонецЦикла;


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

Если АргументыКоманднойСтроки.Количество() Тогда

ВремяВыполнения = АргументыКоманднойСтроки[0];
Запустить(ВремяВыполнения);

КонецЕсли;
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

Перем Счетчик;
Перем ТребуетсяОтказ;

Функция ПолучитьСчетчик() Экспорт
Возврат Счетчик;
КонецФункции

Процедура УстановитьОтказ() Экспорт
ТребуетсяОтказ = Истина;
КонецПроцедуры

Процедура ОбработкаОжиданияПроцесса(Процесс, Отказ, ПериодОпроса, ДополнительныеПараметрыОбработчика, СтандартнаяОбработка) Экспорт

Счетчик = Счетчик + 1;

Если ТребуетсяОтказ Тогда
Отказ = Истина;
КонецЕсли;

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

Счетчик = 0;
ТребуетсяОтказ = Ложь;
85 changes: 85 additions & 0 deletions features/step_definitions/wait-handler.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
#Использовать "../.."

Перем БДД; //контекст фреймворка 1bdd

// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;

ВсеШаги = Новый Массив;

ВсеШаги.Добавить("ЯСоздаюОбработчикОжиданияПроцесса");
ВсеШаги.Добавить("ЯУстанавливаюОтказВОбработчикОжиданияПроцесса");
ВсеШаги.Добавить("ЯУстанавливаюОбработчикОжиданияПроцессаКомандыСИнтервалом");
ВсеШаги.Добавить("СчетчикОбработчикаРавен");

Возврат ВсеШаги;
КонецФункции

// Реализация шагов

// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт

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

// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт

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

//Я создаю обработчик ожидания процесса
Процедура ЯСоздаюОбработчикОжиданияПроцесса() Экспорт

Обработчик = ЗагрузитьСценарий(".\features\step_definitions\fixtures\ОбработчикОжиданияПроцесса.os");

БДД.СохранитьВКонтекст("Обработчик", Обработчик);

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

//Я устанавливаю отказ в обработчик ожидая процесса
Процедура ЯУстанавливаюОтказВОбработчикОжиданияПроцесса() Экспорт

Обработчик = БДД.ПолучитьИзКонтекста("Обработчик");
Обработчик.УстановитьОтказ();

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

//Счетчик обработчика равен "0"
Процедура СчетчикОбработчикаРавен(Знач ЧислоСчетчика) Экспорт

Обработчик = БДД.ПолучитьИзКонтекста("Обработчик");

Ожидаем.Что(Обработчик.ПолучитьСчетчик(), "Счетчик должен быть равен").Равно(Число(ЧислоСчетчика));

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

//Я устанавливаю обработчик ожидания процесса команды "oscript" с интервалом "1000"
Процедура ЯУстанавливаюОбработчикОжиданияПроцессаКомандыСИнтервалом(Знач ИмяКоманды, Знач Интервал) Экспорт

Обработчик = БДД.ПолучитьИзКонтекста("Обработчик");
Команда = ПолучитьКомандуИзКонтекста(ИмяКоманды);
Команда.УстановитьОбработчикОжидания(Обработчик, Число(Интервал));

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

//TODO дубль кода с 1bdd::ВыполнениеКоманд.os
Функция ПолучитьКомандуИзКонтекста(Знач ИмяКоманды)

КлючКонтекста = КлючКоманды(ИмяКоманды);
Команда = БДД.ПолучитьИзКонтекста(КлючКонтекста);

Если Не ЗначениеЗаполнено(Команда) Тогда
Команда = Новый Команда;
Команда.УстановитьСтрокуЗапуска(ИмяКоманды);
БДД.СохранитьВКонтекст(КлючКонтекста, Команда);
КонецЕсли;

Возврат Команда;
КонецФункции

//TODO дубль кода с 1bdd::ВыполнениеКоманд.os
Функция КлючКоманды(Знач ИмяКоманды)
Возврат "Команда-" + ИмяКоманды;
КонецФункции
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
Процедура ЯУстанавливаюОжидаемыйКодВозвратаДляКоманды(Знач ОжидаемыйКодВозврата, Знач ИмяИлиТекстКоманды) Экспорт
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);

Команда.УстановитьПравильныйКодВозврата(ОжидаемыйКодВозврата);
Команда.УстановитьПравильныйКодВозврата(Число(ОжидаемыйКодВозврата));
КонецПроцедуры

//Я устанавливаю ожидаемый диапазон кодов возврата от 0 до 10 для команды "oscript"
Expand Down
39 changes: 39 additions & 0 deletions features/wait-handler.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# language: ru

Функциональность: Выполнение команды

Как разработчик
Я хочу иметь возможность выполнять команды
Чтобы я мог проще автоматизировать больше действий на OneScript

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

Сценарий: Выполнение долгой команды
Когда Я добавляю параметры для команды "oscript"
# | -encoding=utf-8 |
| features/step_definitions/fixtures/ДолгоеВыполнение.os |
| 1 |
# И Я добавляю параметр "features/step_definitions/fixtures/ДолгоеВыполнение.os" для команды "oscript"
# И Я добавляю параметр "5" для команды "oscript"
И Я устанавливаю период опроса завершения команды "oscript" в 1 миллисекунду
И Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит "Полезная работа"
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение долгой команды
Когда Я добавляю параметры для команды "oscript"
# | -encoding=utf-8 |
| features/step_definitions/fixtures/ДолгоеВыполнение.os |
| 1 |
# И Я добавляю параметр "features/step_definitions/fixtures/ДолгоеВыполнение.os" для команды "oscript"
# И Я добавляю параметр "5" для команды "oscript"
И Я создаю обработчик ожидания процесса
И Я устанавливаю отказ в обработчик ожидания процесса
И Я устанавливаю обработчик ожидания процесса команды "oscript" с интервалом "1000"
И Я устанавливаю ожидаемый код возврата -1 для команды "oscript"
И Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит "Полезная работа"
artbear marked this conversation as resolved.
Show resolved Hide resolved
# И Код возврата команды "oscript" равен 1
И Счетчик обработчика равен "1"
1 change: 1 addition & 0 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
.ВерсияСреды("1.0.17")
.ЗависитОт("logos")
.ЗависитОт("asserts")
.ЗависитОт("semver")
.ЗависитОт("tempfiles")
.ВключитьФайл("src")
.ВключитьФайл("features")
Expand Down
Loading