blob: c79520b8768864075539ec6f0f913b8505e67a53 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 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.equinox.p2.tests.ui.dialogs;
import org.eclipse.equinox.internal.p2.metadata.License;
import org.eclipse.equinox.internal.p2.ui.ProvUI;
import org.eclipse.equinox.internal.p2.ui.dialogs.*;
import org.eclipse.equinox.internal.p2.ui.model.IIUElement;
import org.eclipse.equinox.internal.p2.ui.viewers.DeferredQueryContentProvider;
import org.eclipse.equinox.internal.provisional.p2.metadata.*;
import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.InstallableUnitDescription;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.operations.InstallOperation;
import org.eclipse.equinox.p2.operations.ProfileModificationJob;
import org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.statushandlers.StatusManager;
/**
* Tests for the install wizard
*/
public class InstallWizardTest extends WizardTest {
private static final String SELECTION_PAGE = "IUSelectionPage";
private static final String AVAILABLE_SOFTWARE_PAGE = "AvailableSoftwarePage";
private static final String MAIN_IU = "MainIU";
IInstallableUnit toInstall;
protected void setUp() throws Exception {
super.setUp();
InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
iu.setId(MAIN_IU);
iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, "true");
iu.setVersion(Version.createOSGi(1, 0, 0));
iu.setSingleton(true);
iu.setLicenses(new ILicense[] {new License(null, "There is a license to accept!")});
iu.setCapabilities(new IProvidedCapability[] {MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, MAIN_IU, iu.getVersion())});
toInstall = MetadataFactory.createInstallableUnit(iu);
createTestMetdataRepository(new IInstallableUnit[] {toInstall});
}
public void testInstallWizardResolved() {
InstallOperation op = new InstallOperation(getSession(), new IInstallableUnit[] {toInstall});
op.setProfileId(TESTPROFILE);
PreselectedIUInstallWizard wizard = new PreselectedIUInstallWizard(getProvisioningUI(), op, new IInstallableUnit[] {toInstall}, null);
ProvisioningWizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
dialog.setBlockOnOpen(false);
dialog.open();
ProfileModificationJob longOp = null;
try {
SelectableIUsPage page1 = (SelectableIUsPage) wizard.getPage(SELECTION_PAGE);
// should already have a plan
assertTrue("1.0", page1.isPageComplete());
// simulate the next button by getting next page and showing
IWizardPage page = page1.getNextPage();
dialog.showPage(page);
// we should be ok
assertTrue("1.1", page.isPageComplete());
// if another operation is scheduled for this profile, we should not be allowed to proceed
longOp = getLongTestOperation();
getProvisioningUI().schedule(longOp, StatusManager.LOG);
// causes recalculation of plan and status
wizard.recomputePlan(dialog);
// can't move to next page while op is running
assertFalse("1.2", page.isPageComplete());
longOp.cancel();
// op is no longer running, recompute plan
wizard.recomputePlan(dialog);
// license needs approval
assertFalse("1.4", wizard.canFinish());
// finish button should be disabled
while (dialog.getShell().getDisplay().readAndDispatch()) {
// run event loop
}
Button finishButton = dialog.testGetButton(IDialogConstants.FINISH_ID);
assertFalse("1.5", finishButton.isEnabled());
} finally {
dialog.getShell().close();
if (longOp != null)
longOp.cancel();
}
}
/**
* Tests the wizard
*/
public void testInstallWizardUnresolved() {
LoadMetadataRepositoryJob job = new LoadMetadataRepositoryJob(getProvisioningUI());
getPolicy().setGroupByCategory(false);
job.runModal(getMonitor());
InstallWizard wizard = new InstallWizard(getProvisioningUI(), null, null, job);
WizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
dialog.create();
dialog.setBlockOnOpen(false);
dialog.open();
ProfileModificationJob longOp = null;
try {
AvailableIUsPage page1 = (AvailableIUsPage) wizard.getPage(AVAILABLE_SOFTWARE_PAGE);
// test initial wizard state
assertTrue("1.0", page1.getSelectedIUs().length == 0);
assertFalse("1.1", page1.isPageComplete());
// Start reaching in...
AvailableIUGroup group = page1.testGetAvailableIUGroup();
group.setRepositoryFilter(AvailableIUGroup.AVAILABLE_ALL, null);
// Now manipulate the tree itself. we are reaching way in.
// We are trying to select everything in the repo apart from the IU we know is broken
DeferredQueryContentProvider provider = (DeferredQueryContentProvider) group.getCheckboxTreeViewer().getContentProvider();
provider.setSynchronous(true);
group.getCheckboxTreeViewer().refresh();
group.getCheckboxTreeViewer().expandAll();
Tree tree = (Tree) group.getCheckboxTreeViewer().getControl();
TreeItem[] items = tree.getItems();
for (int i = 0; i < items.length; i++) {
Object element = items[i].getData();
if (element != null && element instanceof IIUElement) {
IInstallableUnit iu = ((IIUElement) element).getIU();
if (iu != null && iu.getId().equals(MAIN_IU)) {
group.getCheckboxTreeViewer().setChecked(element, true);
}
}
}
// must be done this way to force notification of listeners
group.setChecked(group.getCheckboxTreeViewer().getCheckedElements());
assertTrue("2.0", group.getCheckedLeafIUs().length > 0);
assertTrue("2.1", page1.isPageComplete());
// simulate the user clicking next
IWizardPage page = wizard.getNextPage(page1);
dialog.showPage(page);
assertTrue("3.0", page.isPageComplete());
// if another operation is scheduled for this profile, we should not be allowed to proceed
longOp = getLongTestOperation();
getProvisioningUI().schedule(longOp, StatusManager.LOG);
// causes recalculation of plan and status
wizard.recomputePlan(dialog);
// can't move to next page while op is running
assertFalse("3.1", page.isPageComplete());
longOp.cancel();
// this doesn't test much, it's just calling group API to flesh out NPE's, etc.
group.getCheckedLeafIUs();
group.getDefaultFocusControl();
group.getSelectedIUElements();
group.getSelectedIUs();
} finally {
dialog.close();
if (longOp != null)
longOp.cancel();
}
}
}