2011-08-17 14 views

答えて

1

現在のモデルダイアログにアクセスするためのEclipseに対応するインタフェースはありません。最適な近似はDisplay.getActiveShell()です。アクティブなダイアログが存在する場合は、シェルを返します。

[ダイアログは、独自のイベントループを持つことによって実現されているので、あなた自身のコードを実行することがかなり難しいことができます...]

EDITは:下記のコメントに基づいて、ここに小さいです私は常に特定の設定ページの存在をテストするために使用します。私はこれがあなた自身のテストの出発点として使用されると思う... Display.timerExec(...)の使用に注意してください。

public void test(String pageId) { 
    try { 
     final IWorkbench workbench = PlatformUI.getWorkbench(); 
     final Shell[] shells = workbench.getDisplay().getShells(); 
     final ICommandService cs = (ICommandService) workbench.getService(ICommandService.class); 
     final ParameterizedCommand command = cs.deserialize("org.eclipse.ui.window.preferences(preferencePageId=" 
       + pageId + ")"); 
     assertNotNull(command); 

     final IHandlerService hs = (IHandlerService) workbench.getService(IHandlerService.class); 
     // Have to use timerExec to get the runnable executed after the dialog is shown 
     workbench.getDisplay().timerExec(2000, new Runnable() { 
      @Override 
      public void run() { 
       assertEquals(shells.length + 1, workbench.getDisplay().getShells().length); 
       final Shell lastShell = findLastShell(workbench.getDisplay().getShells(), shells); 
       assertNotNull(lastShell); 
       final Object data = lastShell.getData(); 
       assertNotNull(data); 
       assertTrue(data instanceof PreferenceDialog); 
       lastShell.close(); 

       assertEquals(shells.length, workbench.getDisplay().getShells().length); 
      } 

      private Shell findLastShell(Shell[] currentShells, Shell[] oldShells) { 
       CheckNext: for (final Shell cs : currentShells) { 
        for (final Shell os : oldShells) { 
         if (os == cs) { 
          continue CheckNext; 
         } 
        } 
        return cs; 
       } 
       return null; 
      } 
     }); 
     hs.executeCommand(command, null); 
    } catch (final Exception ex) { 
     fail(ex.getMessage()); 
    } 
} 
+0

私はこれを試していましたが、シェルを持っているのは本当に目的を果たしていません。アクティブなエディタを使用すると、入力にアクセスする、プログラムで保存するなどの負荷をかけることができます。しかしシェルだけでは、プログラム的にok/cancelボタンを試すことさえできません。 – codejammer

+0

ダイアログではどうしたいですか? –

+0

私はこれを自動化テストの一部として必要としています。私は非常に簡単な操作をトリガする必要があります(OKをクリックしてキャンセルします) – codejammer

関連する問題