Хотя Eclipse поставляется с комплексным инструментом Git, кажется, что для определенных задач многие разработчики переключаются на командную строку. Это дало мне и Рюдигеру идею начать проект с открытым исходным кодом, чтобы обеспечить полную интеграцию консоли для IDE. То, что произошло до сих пор в течение недель gonsole, можно прочитать в git init gonsole , интеграции eclipse egit и помощи с содержимым для команд git .
Со времени нашего последнего обновления мы были заняты заменой большинства фрагментов исследовательского кода чистыми реализациями, основанными на модульных тестах. Кроме того, архитектура подверглась тщательному пересмотру, что привело к разделению функциональности ядра многократного использования и специфических реализаций gonsole. Хотя это и не было основной целью, доработка привела к API, который позволяет легко реализовывать другие консоли с такими же характеристиками. В этом посте мы расскажем о нескольких шагах, необходимых для написания вашей собственной консоли.
Предположим, что вы хотите создать калькулятор на основе командной строки, который обеспечивает арифметические операции, такие как sum
, sub
и т. Д. Основной набор функций обеспечивается com.codeaffine.console.core
который предоставляет API для предоставления консоли калькулятора.
Прежде всего нам нужен проект плагина, который объявляет необходимый импорт:
В проекте gonsole мы привыкли к вложенному TDD . Вот почему мы хотим начать с написания приемочного теста. К счастью, com.codeaffine.console.core.pdetest
экспортирует класс ConsoleBot
который позволяет нам удобно создавать такие тесты. Поскольку эти тесты выполняются в среде плагинов, мы поместим их во фрагмент .
С этими двумя проектами мы готовы написать наш первый счастливый тест:
Как вы можете видеть, ConsoleBot
— это Rule
JUnit, которое скрывает детали создания консоли, готовой к тестированию. Кроме того, он позволяет имитировать взаимодействие с пользователем, например вводить команды и открывать помощник по содержимому. Для удобной проверки ожидаемого результата есть специальное утверждение AssertJ .
ConsoleBot#open()
ожидает реализацию ConsoleConfigurer
качестве первого параметра. Просто для того, чтобы получить нашу тестовую компиляцию, следующим шагом является предоставление ее скелетной реализации. Такие конфигурации предоставляют подключаемые части, которые составляют конкретную консольную реализацию. Но прежде чем мы сможем запустить нашу консоль в первый раз, нужно сделать еще одну вещь:
Чтобы подключить консоль к представлению консоли Eclipse, наш плагин должен предоставить расширение для точки расширения org.eclipse.ui.console.consoleFactories
. Последний ожидает реализацию IConsoleFactory
которая предоставляется нашим консольным API-типом ConsoleFactory
. Единственное необходимое кодирование — переопределить ConsoleFactory#getConsoleConfigurer()
как показано выше.
Конечно, имея только скаффолд, консоль времени выполнения не делает ничего полезного, и запуск нашего PDETest приводит к красной полосе:
Теперь мы готовы разработать компоненты интерпретатора, контент-ассистента и подсказок для ввода обычным способом TTD. Мы продолжаем делать это, пока наш сквозной тест не станет зеленым. Мы даже столкнулись с тем, что это может быть хорошей отправной точкой для пробного прорыва в случае, если мы не уверены, каким путем идти. Как только сквозные тесты станут зелеными, и мы обретем достаточную уверенность в нашем решении, мы начнем поэтапно заменять взломанные переходы решениями, основанными на тестировании.
Для примера мы взяли хакерский подход:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class CalculatorConsoleCommandInterpreter implements ConsoleCommandInterpreter { static final String SUM = "sum" ; private static final String SUM_RESULT = "The sum of %s and %s is %s" + LINE_DELIMITER; private final ConsoleOutput consoleOutput; CalculatorConsoleCommandInterpreter( ConsoleOutput consoleOutput ) { this .consoleOutput = consoleOutput; } @Override public boolean isRecognized( String... commandLine ) { return commandLine.length > 0 && SUM.equals( commandLine[ 0 ] ); } @Override public String execute( String... commandLine ) { int sum = parseInt( commandLine[ 1 ] ) + parseInt( commandLine[ 2 ] ); consoleOutput.write( format( SUM_RESULT, commandLine[ 1 ], commandLine[ 2 ], valueOf( sum ) ) ); return null ; } } |
Фрагмент делает наш тест счастливым, предоставляя упрощенный ConsoleCommandInterpreter
который поддерживает команду sum
. Наш калькулятор в действии, дополненный аналогично разработанным ContentProposalProvider
теперь выглядит так:
Хотя о пользовательских реализациях консоли можно сказать гораздо больше, пришло время завершить эту экскурсию. Обратите внимание, что API ядра консоли все еще находится в стадии разработки и может претерпеть существенные изменения. Для тех, кто заинтересован, мы добавили проекты калькулятора в git-репозиторий gonsole и его сборку:
Репозиторий: https://github.com/rherrmann/gonsole
Сборка: https://travis-ci.org/rherrmann/gonsole
Это гарантирует, что пример будет обновляться. И, конечно, для более взрослого решения вы всегда можете взглянуть на реализации gonsole.
Вот и все на сегодня, давайте вернемся к работе. И, может быть, в следующий раз мы действительно сможем показать вам больше функций поддержки контента …
Ссылка: | недели gonssole: ой — это фреймворк от нашего партнера JCG Фрэнка Аппеля в блоге Code Affine . |