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]); }