artbear / 1bdd

1BDD для OneScript - консольный фреймворк, реализующий BDD для проекта OneScript. Для Windows и Linux.
Mozilla Public License 2.0
29 stars 18 forks source link

Неверный разбор таблицы данных фичи, если в строка таблицы есть число #115

Closed artbear closed 3 years ago

artbear commented 7 years ago

Для сценария

Сценарий: Проверка вывода последней команды с помощью таблицы подстрок
    Когда Я выполняю команду "oscript"
    И я не вижу в консоли вывод
        | Строка 1 |

в шаг будет передана значение 1, а не Строка 1

khorevaa commented 7 years ago

Баг, потверждаю!

kuntashov commented 3 years ago

Также возникает проблема, если в качестве значения ячейки таблицы есть дата внутри строкового литерала, например:

Сценарий: Дата внутри строкового литерала

  Когда я передаю таблицу
    | Строка с датой внутри: 29.11.2020 |

  Тогда в таблице в ячейке "0,0" значение имеет тип "Строка"
  и в таблице в ячейке "0,0" указано значение "Строка с датой внутри: 29.11.2020"

Такой сценарий падает, т.к. в шаг будет передана дата "29.11.2020", а не строка "Строка с датой внутри: 29.11.2020"

И третий случай с ошибкой, когда число длинное:

Сценарий: Числа, которые ошибочно трактуются как дата

  Когда я передаю таблицу
    | 00000001 |
    | 1234567890 |

  Тогда в таблице в ячейке "0:0" значение имеет тип "Число"
  и в таблице в ячейке "0:0" указано значение 1

  Тогда в таблице в ячейке "1:0" значение имеет тип "Число"
  и в таблице в ячейке "1:0" указано значение 1234567890

Данный сценарий в падает с исключением

ОШИБКА   - {Модуль /usr/share/oscript/lib/1bdd/src/gherkin-read.os / Ошибка в строке: 754 / Преобразование к типу 'Дата' не поддерживается}

Ошибки во всех случаях - в регулярках. Исправляю.

kuntashov commented 3 years ago

@artbear У тебя в есть вот такой сценарий в core/ПередачаПараметров.feature:

Сценарий: Использование параметров ЧислоВнутриСтроки

    Когда я передаю параметр число2
    Тогда я получаю параметр с типом "Строка"

С точки зрения синтаксиса Gherkin'а "число2" - не параметр! Параметром он был бы, если бы был написан как "число2" (в кавычках). А так это слово из утверждения, ниакой не параметр. Как параметры трактуются литералы строки (символы внутри кавычек), числовые литералы и литералы даты.

В целом, мне вот это тоже не понятно:

    //Когда я использую 5 как 5число5
    Рез.Вставить("ЧислоИлиСловоСЧислом", Новый РегулярноеВыражение("([а-яё\w]*\d+[а-яё\w]*)|(-?\d+(,\d)*)+"));

Это активно где-то используется?

Если так можно только префикс/суффикс "число" - то ок, надо именно так и захардкодить в регулярке, но тут у тебя регулярка будет трактовать любую строку, содержащую цифру, как число, отбрасывая символьную часть, это не правильно.

Хотелось бы, чтобы все работало согласно спецификации Gherkin или максимально близко. Прокомментируй, пожалуйста.

artbear commented 3 years ago

@kuntashov я уже не помню, почему был сделан такой отход от стандарта Геркина (

смутно вспоминается, что хотелось универсально сделать отлов параметрах в шагах вида "Когда я добавляю Номенклатура1 в таблицу" - чтобы легче было писать шаги.

не думаю, что такая багофича где-то активно юзается в боевых шагах из 1бдд.

проверю