プラグインのテストコードを書く(コマンド編:v3.3)

TDDをしたいと思っていてもどうしてもできないことってあるじゃないですか。Eclipse Pluginの開発なんて諸にそうなんですが、振る舞いをコードに落とし込めない時はどうしようもありません。例えばツールバーをポチッと押したらアクションがあるアクションが呼ばれてエディタのフォントが大きくなるっていう一連を、コードに落とし込めなかったらTDDのしようがありません。ということでPlugin開発でTDDをするにはどうすればいいかを単発的にとりあげてみようという試み。今回はコマンド編。題材はKenichi Takahashi氏のFontSizeChanger。リポジトリ

https://eclipse-study.svn.sourceforge.net/svnroot/eclipse-study/EasyFontChanger/branches/TRY-Active-View/

です。勝手にテストプラグインを作りつつ、はてダにて取り上げようという作戦。
今回のお題はコマンド-ハンドラ間の実行(Command-Handler)。plugin.xmlに書くこの結びつきを実行できているかどうか確認できれば、後はメニューから呼ぶのもショートカットから呼ぶのもできそうじゃないですか。

plugin.xmlの実体はこんな感じ(必要なところ以外省略)

   <extension
         point="org.eclipse.ui.handlers">
      <handler
            class="net.shu_cream.eclipse.font.ToLargeHandler"
            commandId="net.shu_cream.eclipse.font.large">
      </handler>
   </extension>
   <extension
         point="org.eclipse.ui.commands">
      <command
            categoryId="net.shu-cream.eclipse.font.category1"
            id="net.shu_cream.eclipse.font.large"
            name="Large">
      </command>
   </extension>

commandのid "net.shu_cream.eclipse.font.large"が同じというのを見て確認ができるとおもいます。ここのid名が間違っていた場合、呼び出す事ができなくなるので、それをあらかじめ確かめたい。そこで書くのが次のコード

public class TestToLargeHandler {
	@Before
	public void テスト実行のその前に(){
		Command.DEBUG_COMMAND_EXECUTION = true;
	}
	@Test
	public void このクラスがハンドラサービスに登録されていますか() throws Exception{
		ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
		assertNotNull(commandService);
		Command command = commandService.getCommand("net.shu_cream.eclipse.font.large");
		assertNotNull(command);
		command.executeWithChecks(null);
	}
}

Command.DEBUG_COMMAND_EXECUTIONをtrueにしておくと、どのコマンドが実行されたか確認する事ができます。