2013-07-18 3 views
0

Я создаю DSL в Groovy для выполнения тестирования конечных точек Http, я хочу, чтобы он был естественным языком, и у меня есть объекты, которые имеют метод «с». Когда я связываю команды, которые мой метод правильно вызывается, но если метод «с» вызывается при компиляции сценария переменной, то при использовании существующего Groovy с (Closure) ». Файлы сценариев DSL считываются и выполняются с помощью GroovyShell.Методы Groovy DSL не найдены в зависимости от доступа

Это работает:

request = http GET to "${url}" with headers, [ 'Cookie': 'monster' ] 

Но это не делает:

request = http GET to "${url}" 
request with headers, [ 'Cookie': 'monster' ] 

Объект, называемый написан на Java, но могут быть перемещены в Groovy. Это метод подпись:.

<returns this> with(HttpMethodElement eml, Object value); 

Из ошибки возвращается, кажется, его не найти Java с помощью метода и жалуясь, что закрытие не передается в случае, если я добавить явную скобку я получаю метод не найдено исключения. Что сбивает с толку, как это было установлено, прежде чем он был назначен переменной ...

expecting EOF, found ',' @ line 6, column 31. 
request = request with headers, [ 'Cookie': 'monster' ] 
          ^

Я думаю, что Groovy может делать некоторые преобразования или обертку объекта Java в Groovy объекта в сценарии, но оба метода имеют отличные подписи и должны быть законными.

ответ

0

Это анализатор

Groovy видит

request = http GET to "${url}" with headers, [ 'Cookie': 'monster' ] 

Как

request = http(GET).to("${url}").with(headers, [ 'Cookie': 'monster' ]) 

который, как вы видели, это хорошо, но когда он пытается разобрать

request with headers, [ 'Cookie': 'monster' ] 

ли просмотренные как

request(with headers, [ 'Cookie': 'monster' ]) 

Таким образом, с параметром становится, а затем вам не хватает запятой, и это вызывает вашу проблему. В основном парсер теряется

+0

Да, и я думаю, что на самом деле правильная форма потребует нескольких проходов по линии. Жесткая проблема. –

Смежные вопросы