diff --git "a/features/lib/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.os" "b/features/lib/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.os" index a673a8e..b498ea2 100644 --- "a/features/lib/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.os" +++ "b/features/lib/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.os" @@ -27,6 +27,7 @@ ВсеШаги.Добавить("ЯВижуВКонсолиСтрокуПодобно"); ВсеШаги.Добавить("ЯНеВижуВКонсолиСтрокуПодобно"); ВсеШаги.Добавить("КодВозвратаРавен"); + ВсеШаги.Добавить("ЯЗавершаюРаботуПриложения"); Возврат ВсеШаги; КонецФункции @@ -182,6 +183,11 @@ Ожидаем.Что(Команда.ПолучитьКодВозврата(), "Код возврата").Равно(ОжидаемыйКодВозврата); КонецПроцедуры +//я завершаю работу приложения "crserver" +Процедура ЯЗавершаюРаботуПриложения(Знач ИмяИсполняемогоФайла) Экспорт + УбитьПриложение(ИмяИсполняемогоФайла); +КонецПроцедуры + // { Служебные функции Функция ПолучитьКомандуИзКонтекста(Знач ИмяКоманды) КлючКонтекста = КлючКоманды(ИмяКоманды); @@ -202,9 +208,12 @@ Процедура ПроверитьВыводКомандыНаВхождение(Знач Команда, Знач ОжидаемыйВыводКомандыИлиТаблицаЗначений) ВыводКоманды = Команда.ПолучитьВывод(); + ВыводКоманды = ЗаменитьШаблоныВПараметрахКоманды(ВыводКоманды); ТипПараметра = ТипЗнч(ОжидаемыйВыводКомандыИлиТаблицаЗначений); Если ТипПараметра = Тип("Строка") Тогда + ОжидаемыйВыводКомандыИлиТаблицаЗначений = ЗаменитьШаблоныВПараметрахКоманды(ОжидаемыйВыводКомандыИлиТаблицаЗначений); + Ожидаем.Что(ВыводКоманды).Содержит(ОжидаемыйВыводКомандыИлиТаблицаЗначений); ИначеЕсли ТипПараметра = Тип("ТаблицаЗначений") Тогда @@ -214,9 +223,12 @@ Процедура ПроверитьВыводКомандыНаОтсутствие(Знач Команда, Знач ОжидаемыйВыводКомандыИлиТаблицаЗначений) ВыводКоманды = Команда.ПолучитьВывод(); + ВыводКоманды = ЗаменитьШаблоныВПараметрахКоманды(ВыводКоманды); ТипПараметра = ТипЗнч(ОжидаемыйВыводКомандыИлиТаблицаЗначений); Если ТипПараметра = Тип("Строка") Тогда + ОжидаемыйВыводКомандыИлиТаблицаЗначений = ЗаменитьШаблоныВПараметрахКоманды(ОжидаемыйВыводКомандыИлиТаблицаЗначений); + Ожидаем.Что(ВыводКоманды).Не_().Содержит(ОжидаемыйВыводКомандыИлиТаблицаЗначений); ИначеЕсли ТипПараметра = Тип("ТаблицаЗначений") Тогда @@ -229,6 +241,8 @@ СтрокаРасхождений = ""; Для каждого ЧтоИщем Из ТаблицаИскомыхПодстрок Цикл СтрокаЧтоИщем = ЧтоИщем[0]; + СтрокаЧтоИщем = ЗаменитьШаблоныВПараметрахКоманды(СтрокаЧтоИщем); + Если Найти(СтрокаГдеИщем, СтрокаЧтоИщем) = 0 Тогда СтрокаРасхождений = СтрШаблон("%1%3 Не найдена подстрока <%2>", СтрокаРасхождений, СтрокаЧтоИщем, Символы.ПС); @@ -246,6 +260,8 @@ СтрокаРасхождений = ""; Для каждого ЧтоИщем Из ТаблицаИскомыхПодстрок Цикл СтрокаЧтоИщем = ЧтоИщем[0]; + СтрокаЧтоИщем = ЗаменитьШаблоныВПараметрахКоманды(СтрокаЧтоИщем); + Если Найти(СтрокаГдеИщем, СтрокаЧтоИщем) <> 0 Тогда СтрокаРасхождений = СтрШаблон("%1%3 Найдена подстрока <%2>", СтрокаРасхождений, СтрокаЧтоИщем, Символы.ПС); @@ -333,6 +349,23 @@ Возврат Ложь; КонецФункции // ЗаданПараметрСтатистикиДляКомандыОСкрипт() +Процедура УбитьПриложение(Знач ИмяИсполняемогоФайла) Экспорт + + Перем ЭтоWindows; + + СистемнаяИнформация = Новый СистемнаяИнформация; + ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; + + Если ЭтоWindows Тогда + СтрокаКоманды = "TASKKILL /F /IM %1"; + Иначе + СтрокаКоманды = "pkill %1"; + КонецЕсли; + СтрокаКоманды = СтрШаблон(СтрокаКоманды, ИмяИсполняемогоФайла); + КодВозврата = -1; + ЗапуститьПриложение(СтрокаКоманды, , Истина, КодВозврата); +КонецПроцедуры + //} Лог = Логирование.ПолучитьЛог("bdd"); diff --git "a/features/lib/step_definitions/\320\237\320\260\321\203\320\267\320\260.os" "b/features/lib/step_definitions/\320\237\320\260\321\203\320\267\320\260.os" new file mode 100644 index 0000000..d82998d --- /dev/null +++ "b/features/lib/step_definitions/\320\237\320\260\321\203\320\267\320\260.os" @@ -0,0 +1,31 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("Пауза"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + +//Пауза 1 +Процедура Пауза(Знач КоличествоСекунд) Экспорт + Приостановить(КоличествоСекунд * 1000); +КонецПроцедуры diff --git "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" index 39f47b1..5d78bd8 100644 --- "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" +++ "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" @@ -41,6 +41,7 @@ ВсеШаги.Добавить("ФайлВРабочемКаталогеНеСодержит"); ВсеШаги.Добавить("ФайлСодержит"); ВсеШаги.Добавить("ФайлНеСодержит"); + ВсеШаги.Добавить("ЯУдаляюФайл"); Возврат ВсеШаги; КонецФункции @@ -193,6 +194,8 @@ ИсходныйКаталог = ТекущийКаталог(); КонецЕсли; Лог.Отладка("Установили ИсходныйКаталог %1", ИсходныйКаталог); + + ПутьФайла = ЗаменитьШаблоныВПараметрахКоманды(ПутьФайла); РегулярноеВыражение = Новый РегулярноеВыражение("[\*,\?]"); ПутьБезРегулярок = Не РегулярноеВыражение.Совпадает(ПутьФайла); @@ -287,28 +290,45 @@ //Файл "folder0/file01.txt" в рабочем каталоге содержит "Текст файла" Процедура ФайлВРабочемКаталогеСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + ПутьФайла = ЗаменитьШаблоныВПараметрахКоманды(ПутьФайла); + Файл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьФайла)); ПроверитьСодержимоеФайла(Файл, ЧтоИщем); КонецПроцедуры //Файл "folder0/file01.txt" в рабочем каталоге не содержит "Не существующий текст" Процедура ФайлВРабочемКаталогеНеСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + ПутьФайла = ЗаменитьШаблоныВПараметрахКоманды(ПутьФайла); + Файл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьФайла)); ПроверитьОтсутствиеВФайле(Файл, ЧтоИщем); КонецПроцедуры //Файл "folder0/file01.txt" содержит "Текст файла" Процедура ФайлСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + ПутьФайла = ЗаменитьШаблоныВПараметрахКоманды(ПутьФайла); + Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); ПроверитьСодержимоеФайла(Файл, ЧтоИщем); КонецПроцедуры //Файл "folder0/file01.txt" не содержит "Не существующий текст" Процедура ФайлНеСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + ПутьФайла = ЗаменитьШаблоныВПараметрахКоманды(ПутьФайла); + Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); ПроверитьОтсутствиеВФайле(Файл, ЧтоИщем); КонецПроцедуры +//я удаляю файл "<КаталогПроекта>/apache/apache_VDC.conf" +Процедура ЯУдаляюФайл(Знач ПутьФайла) Экспорт + ПутьФайла = ЗаменитьШаблоныВПараметрахКоманды(ПутьФайла); + ПутьФайла = ОбъединитьПути(ТекущийКаталог(), ПутьФайла); + Файл = Новый Файл(ПутьФайла); + Если Файл.Существует() Тогда + УдалитьФайлы(ПутьФайла); + КонецЕсли; +КонецПроцедуры //{ Служебные методы Функция РабочийКаталог() @@ -341,16 +361,39 @@ Процедура ПроверитьСодержимоеФайла(Знач Файл, Знач ЧтоИщем) ТекстФайла = ПрочитатьТекстФайла(Файл); + ТекстФайла = ЗаменитьШаблоныВПараметрахКоманды(ТекстФайла); + ЧтоИщем = ЗаменитьШаблоныВПараметрахКоманды(ЧтоИщем); + ОписаниеОшибки = СтрШаблон("Ожидали, что файл <%1> содержит `<%2>`, а это не так!", Файл.ПолноеИмя, ЧтоИщем); Ожидаем.Что(ТекстФайла, ОписаниеОшибки).Содержит(ЧтоИщем); КонецПроцедуры Процедура ПроверитьОтсутствиеВФайле(Знач Файл, Знач ЧтоИщем) ТекстФайла = ПрочитатьТекстФайла(Файл); + ТекстФайла = ЗаменитьШаблоныВПараметрахКоманды(ТекстФайла); + ЧтоИщем = ЗаменитьШаблоныВПараметрахКоманды(ЧтоИщем); + ОписаниеОшибки = СтрШаблон("Ожидали, что файл <%1> не содержит `<%2>`, а это не так!", Файл.ПолноеИмя, ЧтоИщем); Ожидаем.Что(ТекстФайла, ОписаниеОшибки).Не_().Содержит(ЧтоИщем); КонецПроцедуры +// TODO исключить дублирование ЗаменитьШаблоныВПараметрахКоманды из 1bdd +Функция ЗаменитьШаблоныВПараметрахКоманды(Знач ПараметрыКоманды) + КаталогПроекта = БДД.КаталогПроверяемогоПроекта(); + РабочийКаталог = РабочийКаталог(); + + Рез = СтрЗаменить(ПараметрыКоманды, "<КаталогПроекта>", КаталогПроекта); + Рез = СтрЗаменить(Рез, "<РабочийКаталог>", РабочийКаталог); + + Рез = СтрЗаменить(Рез, "<КаталогПроектаДвойныеСлеши>", ЗаменитьСлешиНаДвойныеСлеши(КаталогПроекта)); + Рез = СтрЗаменить(Рез, "<РабочийКаталогДвойныеСлеши>", ЗаменитьСлешиНаДвойныеСлеши(РабочийКаталог)); + Возврат Рез; +КонецФункции + +Функция ЗаменитьСлешиНаДвойныеСлеши(Знач Строка) + Рез = СтрЗаменить(Строка, "\", "\\"); + Возврат Рез; +КонецФункции //} Лог = Логирование.ПолучитьЛог("bdd"); diff --git "a/features/lib/\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.feature" "b/features/lib/\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.feature" index 01a5583..73cca9c 100644 --- "a/features/lib/\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.feature" +++ "b/features/lib/\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.feature" @@ -74,3 +74,6 @@ Сценарий: Получение кода возврата последней команды Когда Я выполняю команду "oscript" Тогда Код возврата равен 0 + +Сценарий: Завершение приложения + Когда я завершаю работу приложения "НесуществующееПриложение13874.exe" \ No newline at end of file diff --git "a/features/lib/\320\237\320\260\321\203\320\267\320\260.feature" "b/features/lib/\320\237\320\260\321\203\320\267\320\260.feature" new file mode 100644 index 0000000..fca9d9d --- /dev/null +++ "b/features/lib/\320\237\320\260\321\203\320\267\320\260.feature" @@ -0,0 +1,9 @@ +# language: ru + +Функционал: Приостановка выполнения + Как Пользователь + Я хочу иметь возможность временно останавливать выполнение фич + Чтобы я мог дождаться выполнения внешних команд/задач + +Сценарий: Приостановка выполнения + Когда Пауза 1 \ No newline at end of file diff --git "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" index 926819f..27aa3ac 100644 --- "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" +++ "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" @@ -77,3 +77,5 @@ Когда Я установил рабочий каталог как текущий каталог Тогда Файл "folder0/file01.txt" содержит "Текст файла" И Файл "folder0/file01.txt" не содержит "Не существующий текст" + И я удаляю файл "folder0/file01.txt" + И Файл "folder0/file01.txt" не существует \ No newline at end of file diff --git a/src/bdd-exec.os b/src/bdd-exec.os index d38e647..4a9456d 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -14,6 +14,7 @@ #Использовать logos #Использовать asserts #Использовать strings +#Использовать fs Перем Лог; Перем ЧитательГеркин; @@ -69,7 +70,7 @@ // Возвращаемое значение: // Строка - // либо каталог, в который входит каталог features, если в полном пути текущего каталога есть features, -// либо текущий каталог, если нету +// либо текущий каталог, если нет // // Например, если файл фичи находится по пути `c:\projects\myproject\features\core\my.feature`, // вернется значение `c:\projects\myproject\` @@ -81,7 +82,8 @@ Если Поз > 0 Тогда Рез = Лев(ПутьКаталога, Поз - 1); КонецЕсли; - Возврат ОбъединитьПути(ПервичныйТекущийКаталог, Рез); + Рез = ФС.ПолныйПуть( ОбъединитьПути(ПервичныйТекущийКаталог, Рез) ); + Возврат Рез; КонецФункции // КаталогПроверяемогоПроекта() //} diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213_1bdd.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213_1bdd.os" index 3f82438..cac44d2 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213_1bdd.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213_1bdd.os" @@ -2,4 +2,4 @@ /////////////////////////////////////////////////////////////// -ВерсияПродукта = "1.6.1"; +ВерсияПродукта = "1.7.0";