Skip to content

Commit

Permalink
Реализовал использование многострочных строк fix #9
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed May 9, 2016
1 parent 4f7fdc0 commit 6c8b592
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
ВсеШаги.Добавить("ЯПередаюПараметр");
ВсеШаги.Добавить("ЯПолучаюПараметрСТипом");
ВсеШаги.Добавить("ЯИспользуюСтроку_В_Которой_Есть_Минус");
ВсеШаги.Добавить("КоличествоСтрокУПараметраРавно");
ВсеШаги.Добавить("СтрокаУПараметраРавна");

Возврат ВсеШаги;
КонецФункции
Expand All @@ -34,13 +36,28 @@
ДобавитьВЖурнал("ЯИспользуюСтроку_в_которой_есть_минус");
КонецПроцедуры

//количество строк у параметра равно 2
Процедура КоличествоСтрокУПараметраРавно(ЧислоСтрок) Экспорт
Ожидаем.Что(СтрЧислоСтрок(ИсходныйПараметр), "СтрЧислоСтрок(ИсходныйПараметр)").Равно(ЧислоСтрок);
КонецПроцедуры

//1 строка у параметра равна "первая строка"
Процедура СтрокаУПараметраРавна(СтрокаПоНомеру, НомерСтроки) Экспорт
ОжидаемаяСтрока = "первая строка";
Если НомерСтроки = 2 Тогда
ОжидаемаяСтрока = "вторая строка";
КонецЕсли;
Ожидаем.Что(СтрПолучитьСтроку(ИсходныйПараметр, НомерСтроки), "СтрПолучитьСтроку(ИсходныйПараметр, НомерСтроки)").Равно(ОжидаемаяСтрока);
КонецПроцедуры

Процедура ДобавитьВЖурнал(Строка, Параметр = "", Параметр2 = "") Экспорт
Журнал.Вставить(КлючЖурнала, Журнал[КлючЖурнала]+Строка+";");

Представление = СтрШаблон(" нахожусь внутри шага %1 %2, %3", Строка,
ПредставлениеПараметра(Параметр), ПредставлениеПараметра(Параметр2));
КонецПроцедуры


Функция ПредставлениеПараметра(Параметр)
Возврат ?(ПустаяСтрока(Параметр), "", "<"+Параметр+">");
КонецФункции
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

// TODO следующие экспорты нужны для работы соседних скриптов/шагов до появления повторно используемых шагов
Перем ВременныйКаталогФичи Экспорт;
Перем ФайлИсходнойФичи Экспорт;
Перем ФайлФичи Экспорт;
Перем ФайлИсходнойФичи;
Перем ФайлФичи;

Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
Expand Down
62 changes: 50 additions & 12 deletions src/gherkin-read.os
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@
ПредыдущиеПараметрыЛексемы = Неопределено;

Пока Истина Цикл
ОчереднаяСтрока = ПолучитьОчереднуюСтрокуСценария(Фича);
ОчереднаяСтрока = ПолучитьОчереднуюСтрокуФичи(Фича);
Если ОчереднаяСтрока = Неопределено Тогда
Прервать;
КонецЕсли;
Expand Down Expand Up @@ -184,6 +184,7 @@
СтрокаДляПоиска = НРег(Строка);
Для каждого КлючЗначение Из СоответствиеКлючевыеСлова Цикл
Лексема = КлючЗначение.Ключ;
КлючевоеСлово = КлючЗначение.Значение;
Позиция = Найти(СтрокаДляПоиска, Лексема);
Если Позиция = 1 Тогда
ДлинаЛексемы = СтрДлина(Лексема);
Expand All @@ -195,18 +196,25 @@
КонецЕсли;
ПраваяЧасть = СокрЛП(Сред(Строка, ДлинаЛексемы + 1));

Рез = Новый Структура;
Рез.Вставить("Лексема", КлючЗначение.Значение);
ДалееБудутДополнительныеПараметры = Ложь;
Если Прав(ПраваяЧасть, 1) = ":" Тогда
ДалееБудутДополнительныеПараметры = Истина;
ПраваяЧасть = Лев(ПраваяЧасть, СтрДлина(ПраваяЧасть) - 1);
КонецЕсли;

Рез = Новый Структура;
Рез.Вставить("Лексема", КлючевоеСлово);
Рез.Вставить("ПраваяЧасть", ПраваяЧасть);
Рез.Вставить("ДалееБудутДополнительныеПараметры", ДалееБудутДополнительныеПараметры);

лог.Отладка("Нашел лексему <"+Рез.Лексема+">, правая часть <"+ПраваяЧасть+">");
Возврат Рез;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции

Функция ПолучитьОчереднуюСтрокуСценария(Знач Фича)
Функция ПолучитьОчереднуюСтрокуФичи(Знач Фича)
Рез = "";
Пока Истина Цикл
ОчереднаяСтрока = Фича.ПрочитатьСтроку();
Expand Down Expand Up @@ -240,13 +248,13 @@
УровеньЛексемы = УровниЛексем[ОчереднаяЛексема];
Лог.Отладка("Получил Очередная лексема <"+ОчереднаяЛексема+">, Индекс "+Индекс+", уровень <"+УровеньЛексемы+">, тело <"+ПараметрыОчереднойЛексемы.ПраваяЧасть+">");

ПараметрыИзСтроки = Новый Массив;
НоваяПраваяЧасть = ИзвлечьПараметры(ПараметрыОчереднойЛексемы.ПраваяЧасть, ПараметрыИзСтроки);
НайденныеПараметры = Новый Массив;
НоваяПраваяЧасть = ИзвлечьПараметры(ПараметрыОчереднойЛексемы.ПраваяЧасть, ПараметрыОчереднойЛексемы.ДалееБудутДополнительныеПараметры, НайденныеПараметры);
Лог.Отладка("НоваяПраваяЧасть "+НоваяПраваяЧасть);

НоваяСтрока = ЗаполнитьУзелДереваФич(СтрокиДерева, ОчереднаяЛексема, ПараметрыОчереднойЛексемы.ПраваяЧасть); //НоваяПраваяЧасть);
Лог.Отладка("НоваяСтрока.Лексема <"+НоваяСтрока.Лексема+">");
НоваяСтрока.Параметры = ПараметрыИзСтроки;
НоваяСтрока.Параметры = НайденныеПараметры;
НоваяСтрока.ТипШага = НайтиТипШагаПоЛексеме(ОчереднаяЛексема);
НоваяСтрока.АдресШага = СформироватьАдресШага(НоваяПраваяЧасть);

Expand Down Expand Up @@ -280,16 +288,20 @@
Возврат НоваяСтрока;
КонецФункции

Функция ИзвлечьПараметры(Знач Тело, ПараметрыИзСтроки)
Функция ИзвлечьПараметры(Знач Тело, Знач ДалееБудутДополнительныеПараметры, НайденныеПараметры)
НовоеТело = Тело;

НовоеТело = ВыделитьСтроковыеПараметры(НовоеТело, ПараметрыИзСтроки, "'");
НовоеТело = ВыделитьСтроковыеПараметры(НовоеТело, ПараметрыИзСтроки, """");
Если ДалееБудутДополнительныеПараметры Тогда
НовоеТело = ВыделитьПараметрыИзМногострочногоТекста(НовоеТело, НайденныеПараметры);
КонецЕсли;

НовоеТело = ВыделитьСтроковыеПараметры(НовоеТело, НайденныеПараметры, "'");
НовоеТело = ВыделитьСтроковыеПараметры(НовоеТело, НайденныеПараметры, """");
//Лог.Отладка("НовоеТело (после обработки строк) <"+ НовоеТело+">");

НовоеТело = ВыделитьПараметрыДата(НовоеТело, ПараметрыИзСтроки);
НовоеТело = ВыделитьПараметрыДата(НовоеТело, НайденныеПараметры);

НовоеТело = ВыделитьЧисловыеПараметры(НовоеТело, ПараметрыИзСтроки);
НовоеТело = ВыделитьЧисловыеПараметры(НовоеТело, НайденныеПараметры);

Возврат НовоеТело;
КонецФункции
Expand Down Expand Up @@ -330,6 +342,31 @@
Возврат НоваяСтрока;
КонецФункции

Функция ВыделитьПараметрыИзМногострочногоТекста(Знач Тело, Параметры)
РегулярноеВыражение = РегулярныеВыражения.МногострочныйТекст;
КоллекцияГруппСовпадений = РегулярноеВыражение.НайтиСовпадения(Тело);
Если КоллекцияГруппСовпадений.Количество() = 0 Тогда
Возврат Тело;
КонецЕсли;

НовоеТело = Тело;

Группа = КоллекцияГруппСовпадений[0];

ЗначениеПараметра = Группа.Группы[1].Значение;
Если Прав(ЗначениеПараметра, 1) = Символы.ПС Тогда
ЗначениеПараметра = Сред(ЗначениеПараметра, 1, СтрДлина(ЗначениеПараметра) - 1);
КонецЕсли;

ОписаниеПараметра = ВозможныеКлючиПараметров.Строка;
ДобавитьПараметр(Параметры, ВозможныеКлючиПараметров.Строка, ЗначениеПараметра);

Начало = Группа.Индекс;
//Окончание = Группа.Индекс + Группа.Длина;
НовоеТело = СтрШаблон("%1 %2", СтрПолучитьСтроку(Лев(НовоеТело, Начало), 1), ОписаниеПараметра);
Возврат НовоеТело;
КонецФункции // ВыделитьПараметрыИзМногострочногоТекста(НовоеТело, НайденныеПараметры)

Функция ВыделитьЧисловыеПараметры(Знач Тело, Параметры)
РегулярноеВыражение = РегулярныеВыражения.ЧислоИлиСловоСЧислом;
КоллекцияГруппСовпадений = РегулярноеВыражение.НайтиСовпадения(Тело);
Expand Down Expand Up @@ -582,6 +619,7 @@
Рез.Вставить("НеЧисло", Новый РегулярноеВыражение("[^\d]+"));
Рез.Вставить("Дата", Новый РегулярноеВыражение("(\d{2}).(\d{2}).(\d{2,4})"));
Рез.Вставить("ЧислоИлиСловоСЧислом", Новый РегулярноеВыражение("([а-яё\w]*\d+[а-яё\w]*)|(-?\d+(,\d)*)+")); //Когда я использую 5 как 5число5
Рез.Вставить("МногострочныйТекст", Новый РегулярноеВыражение("^\s*""""""\n\r*((.+\n\r*)+)^\s*"""""""));
//РегулярноеВыражение = Новый РегулярноеВыражение("(-?\d+(,\d)*)+");
//РегулярноеВыражение = Новый РегулярноеВыражение("([а-яё\w]*\d+[а-яё\w]*)|(-?\d+(,\d)*)+"); //Когда я использую 5 как 5число5
//РегулярноеВыражение = Новый РегулярноеВыражение("(-{1}\d+)+");
Expand Down
7 changes: 7 additions & 0 deletions tests/steps-generate-tests.os
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
Перем Лог;
Перем ГенераторШагов;
Перем ИсполнительБДД;
Перем ЧитательГеркин;

Функция ПолучитьСписокТестов(Знач ЮнитТестирование) Экспорт

Expand Down Expand Up @@ -141,6 +142,10 @@

ДопЛог = Логирование.ПолучитьЛог(ИсполнительБДД.ИмяЛога());
ДопЛог.УстановитьУровень(НовыйУровеньЛога);

ДопЛог = Логирование.ПолучитьЛог(ЧитательГеркин.ИмяЛога());
ДопЛог.УстановитьУровень(НовыйУровеньЛога);

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

////////////////////////////////////////////////////////////////////
Expand All @@ -150,6 +155,8 @@
Лог = Логирование.ПолучитьЛог("oscript.app.bdd-gen-tests");
Лог.УстановитьУровень(УровниЛога.Отладка);

ЧитательГеркин = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "../src/gherkin-read.os"));

ГенераторШагов = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "../src/bdd-generate.os"));

Контекст = Новый Структура("Контекст", Новый Структура("Журнал", Новый Структура));
Expand Down

0 comments on commit 6c8b592

Please sign in to comment.