blob: d711e1705138904a1b54911e55450c3ce5636413 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 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.tests.session;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart3;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.tests.api.workbenchpart.TitleTestEditor;
import org.eclipse.ui.tests.harness.util.FileUtil;
/**
* If a view is not activated during a session, it's part is not instantiated.
* This tests that case, and the outcome should be the view has it's last
* session state when it is finally instantiated in the workbench.
*
* @since 3.3
*/
public class ArbitraryPropertiesEditorTest extends TestCase {
/**
*
*/
private static final String USER_PROP = "org.eclipse.ui.tests.users";
private static final String EDITOR_ID = "org.eclipse.ui.tests.TitleTestEditor";
public static TestSuite suite() {
return new TestSuite(ArbitraryPropertiesEditorTest.class);
}
public ArbitraryPropertiesEditorTest(String testName) {
super(testName);
}
/**
* This is the first part of a 3 part tests. First instantiate a view and
* set a state.
*
* @throws Throwable
*/
public void testOpenEditor() throws Throwable {
final IWorkbench workbench = PlatformUI.getWorkbench();
final IWorkbenchPage page = workbench.getActiveWorkbenchWindow()
.getActivePage();
IProject proj = FileUtil.createProject("EditorSessionTest");
IFile file = FileUtil.createFile("state.txt", proj);
TitleTestEditor editor = (TitleTestEditor) page.openEditor(
new FileEditorInput(file), EDITOR_ID);
// this makes the second file active on the first
file = FileUtil.createFile("state_active.txt", proj);
IDE.openEditor(page, file);
editor.setPartProperty(USER_PROP, "pwebster");
}
/**
* The second session doesn't activate the view, so it should not be
* instantiated.
*
* @throws Throwable
*/
public void testSecondOpening() throws Throwable {
final IWorkbench workbench = PlatformUI.getWorkbench();
final IWorkbenchPage page = workbench.getActiveWorkbenchWindow()
.getActivePage();
IEditorReference[] editors = page.getEditorReferences();
for (int i = 0; i < editors.length; i++) {
IEditorReference ref = editors[i];
if (ref.getEditorInput().getName().equals("state.txt")) {
assertNull("The editor should not be instantiated", ref
.getPart(false));
assertEquals("pwebster", ref.getPartProperty(USER_PROP));
}
}
}
static class PropListener implements IPropertyChangeListener {
public int count = 0;
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
public void propertyChange(PropertyChangeEvent event) {
count++;
}
};
/**
* Activate the view and it's state should re-appear.
*
* @throws Throwable
*/
public void testPartInstantiation() throws Throwable {
final IWorkbench workbench = PlatformUI.getWorkbench();
final IWorkbenchPage page = workbench.getActiveWorkbenchWindow()
.getActivePage();
IEditorReference ref = null;
IEditorReference[] editors = page.getEditorReferences();
for (int i = 0; i < editors.length; i++) {
if (editors[i].getEditorInput().getName().equals("state.txt")) {
ref = editors[i];
}
}
assertEquals("pwebster", ref.getPartProperty(USER_PROP));
PropListener listener = new PropListener();
ref.addPartPropertyListener(listener);
try {
IWorkbenchPart3 wp = (IWorkbenchPart3) ref.getPart(true);
assertEquals("pwebster", wp.getPartProperty(USER_PROP));
assertEquals(0, listener.count);
} finally {
ref.removePartPropertyListener(listener);
}
IEditorInput input = ref.getEditorInput();
// the state should not be saved between a close and
// an open in the same session
page.closeEditor((IEditorPart) ref.getPart(true), false);
TitleTestEditor editor = (TitleTestEditor) page.openEditor(input,
EDITOR_ID);
assertNull(editor.getPartProperty(USER_PROP));
}
}