예제 #1
0
  public void testRestriction() {
    boolean temporarilyDisabled = true;
    if (temporarilyDisabled) return;

    IWorkbenchWindow window = openTestWindow();
    IEvaluationService evaluationService =
        (IEvaluationService) window.getService(IEvaluationService.class);
    assertNotNull(evaluationService);
    IContextService contextService = (IContextService) window.getService(IContextService.class);
    assertNotNull(contextService);

    Expression expression =
        new ActiveContextExpression(CONTEXT_ID1, new String[] {ISources.ACTIVE_CONTEXT_NAME});

    final boolean[] propertyChanged = new boolean[1];
    final boolean[] propertyShouldChange = new boolean[1];

    IPropertyChangeListener propertyChangeListener =
        new IPropertyChangeListener() {

          public void propertyChange(PropertyChangeEvent event) {
            if (event.getProperty().equals("foo")) propertyChanged[0] = true;
          }
        };
    IEvaluationReference ref =
        evaluationService.addEvaluationListener(expression, propertyChangeListener, "foo");
    ((WorkbenchWindow) window).getMenuRestrictions().add(ref);

    IPropertyChangeListener propertyShouldChangeListener =
        new IPropertyChangeListener() {

          public void propertyChange(PropertyChangeEvent event) {
            if (event.getProperty().equals("foo")) propertyShouldChange[0] = true;
          }
        };
    evaluationService.addEvaluationListener(expression, propertyShouldChangeListener, "foo");

    propertyChanged[0] = false;
    propertyShouldChange[0] = false;

    assertFalse(contextService.getActiveContextIds().contains(CONTEXT_ID1));
    IContextActivation activation = contextService.activateContext(CONTEXT_ID1);

    assertTrue(propertyChanged[0]);
    assertTrue(propertyShouldChange[0]);
    propertyChanged[0] = false;
    propertyShouldChange[0] = false;

    contextService.deactivateContext(activation);
    assertTrue(propertyChanged[0]);
    assertTrue(propertyShouldChange[0]);
    assertFalse(contextService.getActiveContextIds().contains(CONTEXT_ID1));
    activation = contextService.activateContext(CONTEXT_ID1);
    propertyChanged[0] = false;
    propertyShouldChange[0] = false;
    assertTrue(contextService.getActiveContextIds().contains(CONTEXT_ID1));

    // open second window
    IWorkbenchWindow window2 = openTestWindow();
    assertFalse(propertyChanged[0]);
    assertTrue(propertyShouldChange[0]);
    assertFalse(contextService.getActiveContextIds().contains(CONTEXT_ID1));
    propertyChanged[0] = false;
    propertyShouldChange[0] = false;

    window2.close();
    processEvents();

    assertTrue(contextService.getActiveContextIds().contains(CONTEXT_ID1));
    assertFalse(propertyChanged[0]);
    assertTrue(propertyShouldChange[0]);
  }