У меня проблемы с пониманием синтаксиса, с которым страницы описаны (определены) в Geb. Ниже приведен пример класса страницы, который работает нормально, но я не понимаю, как он работает.
import geb.Page
class GebHomePage extends Page{
static url = "http://gebish.org"
static at = { title == "Geb - Very Groovy Browser Automation" }
static content = {
seeGuideButton { $('div', class:'ui huge primary button') }
uiHeader { $('h1', class:'ui header', 0)}
}
}
Меня интересует синтаксис внутри замыкания, на который ссылается контент. Geb описывает синтаксис для содержимого DSL как
«name»(«options map») { «definition» }
Я не понимаю этот синтаксис. Часть name выглядит как переменная, но она не объявлена (я пропускаю def или что-то подобное), а последняя часть выглядит как замыкание. Но где связь между именем и закрытием. Там нет знака равенства, соединяющего два. В стандартном классном классе синтаксис
«name» { «definition» }
не компилируется. Что происходит в одной строке контента DSL? Что такое uiHeader
и seeGuideButton
и как они связаны со следующими замыканиями? Как именно работает этот синтаксис?