Мы используем Perl для автоматизации тестирования GUI. Это было очень успешно. Мы написали очень легкий язык DSL для тестирования графического интерфейса. DSL очень похож на объектную модель.
Например, у нас есть объект Application в корне. Каждая панель свойств в приложении представляет собой объект View. Каждая страница под страницей называется самим объектом страницы. Из Perl мы отправляем команды в приложение GUI, и графический интерфейс интерпретирует эту команду и прекрасно реагирует на эту команду. Чтобы отправить команду, мы делаем следующее:
socket_object->send_command("App.View2.Page2.Activate()")
socket_object->send_command("App.View1.Page3.OKBtn.Click()")
Это не очень читаемо. Вместо этого я хочу написать Perl DSL для App, View и Page. Предоставляет ли Perl некоторую структуру DSL, где я могу сделать следующее?
App.View2.Page2.Activate();
App.View1.Page2.Click();
Где приложение должно быть экземпляром класса Application. Я должен получить объект View2 во время выполнения.
Как использовать такие вещи?