blob: e93bdca3ea5d5847220a5456c9c852a8c8f5c379 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}