/******************************************************************************* * Copyright (c) 2005, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.internal; import org.eclipse.core.runtime.Assert; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPersistableElement; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPart2; public class PartTester { private PartTester() { } /** * Sanity-check the public interface of the editor. This is called on every editor after it * is fully initiallized, but before it is actually connected to the editor reference or the * layout. Calls as much of the editor's public interface as possible to test for exceptions, * and tests the return values for glaring faults. This does not need to be an exhaustive conformance * test, as it is called every time an editor is opened and it needs to be efficient. * The part should be unmodified when the method exits. * * @param part */ public static void testEditor(IEditorPart part) throws Exception { testWorkbenchPart(part); Assert.isTrue(part.getEditorSite() == part.getSite(), "The part's editor site must be the same as the part's site"); //$NON-NLS-1$ IEditorInput input = part.getEditorInput(); Assert.isNotNull(input, "The editor input must be non-null"); //$NON-NLS-1$ testEditorInput(input); part.isDirty(); part.isSaveAsAllowed(); part.isSaveOnCloseNeeded(); } public static void testEditorInput(IEditorInput input) throws Exception { input.getAdapter(Object.class); // Don't test input.getImageDescriptor() -- the workbench never uses that // method and most editor inputs would fail the test. It should really be // deprecated. Assert.isNotNull(input.getName(), "The editor input must have a non-null name"); //$NON-NLS-1$ Assert.isNotNull(input.getToolTipText(), "The editor input must have a non-null tool tip"); //$NON-NLS-1$ // Persistable element may be null IPersistableElement persistableElement = input.getPersistable(); if (persistableElement != null) { Assert .isNotNull(persistableElement.getFactoryId(), "The persistable element for the editor input must have a non-null factory id"); //$NON-NLS-1$ } } /** * Sanity-checks a workbench part. Excercises the public interface and tests for any * obviously bogus return values. The part should be unmodified when the method exits. * * @param part * @throws Exception */ private static void testWorkbenchPart(IWorkbenchPart part) throws Exception { IPropertyListener testListener = new IPropertyListener() { public void propertyChanged(Object source, int propId) { } }; // Test addPropertyListener part.addPropertyListener(testListener); // Test removePropertyListener part.removePropertyListener(testListener); // Test equals Assert.isTrue(part.equals(part), "A part must be equal to itself"); //$NON-NLS-1$ Assert.isTrue(!part.equals(new Integer(32)), "A part must have a meaningful equals method"); //$NON-NLS-1$ // Test getAdapter Object partAdapter = part.getAdapter(part.getClass()); Assert.isTrue(partAdapter == null || partAdapter == part, "A part must adapter to itself or return null"); //$NON-NLS-1$ // Test getTitle Assert.isNotNull(part.getTitle(), "A part's title must be non-null"); //$NON-NLS-1$ // Test getTitleImage Assert.isNotNull(part.getTitleImage(), "A part's title image must be non-null"); //$NON-NLS-1$ // Test getTitleToolTip Assert.isNotNull(part.getTitleToolTip(), "A part's title tool tip must be non-null"); //$NON-NLS-1$ // Test toString Assert.isNotNull(part.toString(), "A part's toString method must return a non-null value"); //$NON-NLS-1$ // Compute hashCode part.hashCode(); if (part instanceof IWorkbenchPart2) { testWorkbenchPart2((IWorkbenchPart2)part); } } private static void testWorkbenchPart2(IWorkbenchPart2 part) throws Exception { Assert.isNotNull(part.getContentDescription(), "A part must return a non-null content description"); //$NON-NLS-1$ Assert.isNotNull(part.getPartName(), "A part must return a non-null part name"); //$NON-NLS-1$ } /** * Sanity-check the public interface of a view. This is called on every view after it * is fully initiallized, but before it is actually connected to the part reference or the * layout. Calls as much of the part's public interface as possible without modifying the part * to test for exceptions and check the return values for glaring faults. This does not need * to be an exhaustive conformance test, as it is called every time an editor is opened and * it needs to be efficient. * * @param part */ public static void testView(IViewPart part) throws Exception { Assert.isTrue(part.getSite() == part.getViewSite(), "A part's site must be the same as a part's view site"); //$NON-NLS-1$ testWorkbenchPart(part); } }