2010-09-14 5 views
2

Я написал a GUI test с использованием SWTBot для проверки рефакторинга метода извлечения. Я использую editor.selectRange(), чтобы выбрать инструкцию для извлечения в метод. Но, когда я запускаю модульный тест, пункт меню рефакторинга метода извлечения отключен. Таким образом, SWTBot не вызывает рефакторинг.Почему пункт меню отключен при использовании SWTBot?

Когда мы меняем org.eclipse.jdt.ui.actions.ExtractMethodAction, так что пункт меню «Извлечь метод ...» всегда включен, наш SWTBot проходит. Но SWTBot должен позволить нам выбрать пункт меню без взлома плагина org.eclipse.jdt.ui.

Весь проект, содержащий вышеуказанный модульный тест, составляет available at github. Я также сообщил о проблеме на the Eclipse forum for SWTBot и SWTBot bug tracking system. Но мы не получили решения с форума.

+0

Вы имеете в виду editor.setSelection()? Потому что getSelection() ничего не выберет ... –

+0

@ Zoltán Ujhelyi, я имел в виду selectRange(). Я исправил проблему. – reprogrammer

ответ

1

Возможно, вы должны сбросить все ожидающие события события, чтобы включить меню. Добавьте эту петлю, прежде чем пытаться нажать на меню:

while(Display.getDefault().readAndDispatch()); 

[EDIT] Я думаю, что проблема в том, что меню доступно через точку расширения или состояние. Проверьте все файлы plugin.xml для меню или основного действия и на каком условии он будет включен.

Чтобы вызвать это условие, вам может потребоваться уведомить рабочее место о новом выборе. Проверьте http://www.eclipse.org/articles/Article-WorkbenchSelections/article.html и http://www.eclipse.org/articles/article.php?file=Article-action-contribution/index.html

+0

@ Аарон Дигулла Спасибо за предложение. Мы попробовали. Но это не сработало для нас, потому что меню рефакторинга метода экстракта не активировано. – reprogrammer

+0

А ... Я думаю, я знаю, откуда это. Смотрите мои правки. –

+0

Ниже описано, как «Рефакторинг метода извлечения» настроен в точке расширения org.eclipse.ui.actionSets 'org.eclipse.jdt.ui/plugin.xml'. '<действие definitionId = "org.eclipse.jdt.ui.edit.text.java.extract.method" метка = "% Refactoring.extractMethodAction.label" Retarget = "истинный" menubarPath =" org.eclipse .jdt.ui.refactoring.menu/codingGroup " id =" org.eclipse.jdt.ui.actions.ExtractMethod "> ' – reprogrammer