2016-04-28 3 views
2

Я знаю, что у меня самые экзотические случаи использования, но мне очень нравятся тесты, поэтому я хотел бы проверить, работает ли IHandler так, как я предполагаю. Проблема в том, что я не могу понять, как назвать это программно:Вызов обработчика из теста интеграции

IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() 
IWorkbenchWindow site = workbenchPage.getWorkbenchWindow(); 
Command command = ((ICommandService) site.getService(ICommandService.class)).getCommand(commandId); 

final IHandlerService service = (IHandlerService) site.getService(IHandlerService.class); 
final Event trigger = new Event(); // or trigger = null 
ExecutionEvent executionEvent = service.createExecutionEvent(command, trigger); 
command.executeWithChecks(executionEvent); 

обработчик вызывается, но ExecutionEvent правильно не заполнены (например, HandlerUtil.getActiveEditor(ExecutionEvent) возвращает нулевое значение, даже если я только что открыл редактор).

Как правильно называть пользователя IHandler?

ответ

0

Мне также очень нравятся тесты :-) Однако я обычно вручную оборудует контекст оценки теми переменными, которые требуются для выполнения обработчиком.

Например:

EvaluationContext context = new EvaluationContext(null, new Object()) 
context.addVariable(ISources.ACTIVE_PART_NAME, activePart); 
context.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection); 
// add whatever is used by the handler... 

Map<String, String> parameters = new HashMap<>(); 
ExecutionEvent event = new ExecutionEvent(command, parameters, null, context); 

command.executeWithChecks(event); 

Позвольте мне знать, если этот подход является жизнеспособным для вас. В противном случае, я смогу выкопать, как получить реальный оценочный контекст моего тестового вспомогательного кода.

+0

Очевидно, вы можете получить 'IEvaluationContext' из' IHandlerService.getCurrentState() '... или, по крайней мере, сейчас мои тесты работают. –

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