public void dispose() { /* * Unregister listeners. */ for (IAttributeEditor editor : this.editors.values()) { editor.removeAttributeListener(forwardListener); } super.dispose(); }
@Test public void testDispose() { final List<Object> disposedWidgets = new ArrayList<Object>(); DisposeListener disposeListener = new DisposeListener() { public void widgetDisposed(DisposeEvent evt) { disposedWidgets.add(evt.getSource()); } }; Display display = new Display(); Composite shell = new Shell(display, SWT.NONE); shell.addDisposeListener(disposeListener); Button button1 = new Button(shell, SWT.PUSH); button1.addDisposeListener(disposeListener); // Ensure that dipose removes a widget from its parent and sets isDisposed() button1.dispose(); assertTrue(button1.isDisposed()); assertFalse(find(shell.getChildren(), button1)); assertSame(button1, disposedWidgets.get(0)); // Ensure that dispose may be called more than once disposedWidgets.clear(); button1.dispose(); assertTrue(button1.isDisposed()); assertEquals(0, disposedWidgets.size()); Button button2 = new Button(shell, SWT.PUSH); button2.addDisposeListener(disposeListener); shell.dispose(); assertEquals(2, disposedWidgets.size()); assertSame(shell, disposedWidgets.get(0)); assertSame(button2, disposedWidgets.get(1)); assertTrue(shell.isDisposed()); assertTrue(button2.isDisposed()); // the assert below may not work in the future since getChildren is // checkWidget()-protected assertEquals(0, ControlHolder.size(shell)); assertEquals(0, Display.getCurrent().getShells().length); // disposedWidgets.clear(); shell.dispose(); assertEquals(0, disposedWidgets.size()); assertTrue(shell.isDisposed()); }