blob: acf2fe1d48a93543ad16e1e937ea980b77c77d44 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Ericsson AB (Hamdan Msheik) - Bypass install license wizard page via plugin_customization
*******************************************************************************/
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.p2.metadata.*;
import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
import org.eclipse.equinox.p2.operations.ProfileModificationJob;
import org.eclipse.equinox.p2.tests.IUDescription;
import org.eclipse.equinox.p2.tests.IULoader;
import org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
/**
* Tests for the install wizard
*/
public class InstallWithRemediationTest 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;
@IUDescription(content = "package: egit \n" + "singleton: true\n" + "version: 1 \n" + "depends: TopLevelIU = 1")
public IInstallableUnit anotherIUToInstall;
@Override
protected void setUp() throws Exception {
super.setUp();
IULoader.loadIUs(this);
InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
iu.setId(TOPLEVELIU);
iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, "true");
iu.setVersion(Version.createOSGi(2, 0, 0));
iu.setSingleton(true);
iu.setLicenses(new ILicense[] {new License(null, "There is a license to accept!", null)});
iu.setCapabilities(new IProvidedCapability[] {MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, TOPLEVELIU, iu.getVersion())});
toInstall = MetadataFactory.createInstallableUnit(iu);
createTestMetdataRepository(new IInstallableUnit[] {toInstall, anotherIUToInstall});
}
//
// public void testInstallWizardResolved() {
// ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
// iusInvolved.add(toInstall);
// InstallOperation op = new InstallOperation(getSession(), iusInvolved);
// op.setProfileId(TESTPROFILE);
// PreselectedIUInstallWizard wizard = new PreselectedIUInstallWizard(getProvisioningUI(), op, iusInvolved, 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
// dialog.updateButtons();
// Button finishButton = dialog.testGetButton(IDialogConstants.FINISH_ID);
// assertFalse("1.5", finishButton.isEnabled());
// } finally {
// dialog.getShell().close();
// if (longOp != null)
// longOp.cancel();
// }
// }
//
// public void testInstallWizard() throws Exception {
// ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
// iusInvolved.add(toInstall);
// InstallOperation op = new MyNewInstallOperation(getSession(), iusInvolved);
// op.setProfileId(TESTPROFILE);
// PreselectedIUInstallWizard wizard = new PreselectedIUInstallWizard(getProvisioningUI(), op, iusInvolved, 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
// InstallWizardPage page = (InstallWizardPage) page1.getNextPage();
//
// // get the operation
// Field opField = ResolutionResultsWizardPage.class.getDeclaredField("resolvedOperation");
// opField.setAccessible(true);
// assertTrue("Expected instance of MyNewInstallOperation", opField.get(page) instanceof MyNewInstallOperation);
// } finally {
// dialog.getShell().close();
// if (longOp != null)
// longOp.cancel();
// }
// }
//
// public void testInstallWizardWithoutLicenceBypass() throws Exception {
// ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
// iusInvolved.add(toInstall);
// InstallOperation op = new MyNewInstallOperation(getSession(), iusInvolved);
// op.setProfileId(TESTPROFILE);
// PreselectedIUInstallWizard wizard = new PreselectedIUInstallWizard(getProvisioningUI(), op, iusInvolved, null);
// wizard.setBypassLicencePage(false);
// ProvisioningWizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
// dialog.setBlockOnOpen(false);
// dialog.open();
// ProfileModificationJob longOp = null;
//
// try {
// SelectableIUsPage selectableIUsPage = (SelectableIUsPage) wizard.getPage(SELECTION_PAGE);
// // should already have a plan
// assertTrue("1.0", selectableIUsPage.isPageComplete());
// // simulate the next button by getting next page and showing
// InstallWizardPage installWizardPage = (InstallWizardPage) selectableIUsPage.getNextPage();
//
// assertFalse("Licence page bypass flag must be false", wizard.isBypassLicencePage());
// IWizardPage licensePage = installWizardPage.getNextPage();
// assertTrue("Expected instance of AcceptLicensesWizardPage", licensePage instanceof AcceptLicensesWizardPage);
//
// } finally {
// dialog.getShell().close();
// if (longOp != null)
// longOp.cancel();
// }
// }
//
// public void testInstallWizardWithLicenceBypass() throws Exception {
// ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
// iusInvolved.add(toInstall);
// InstallOperation op = new MyNewInstallOperation(getSession(), iusInvolved);
// op.setProfileId(TESTPROFILE);
// PreselectedIUInstallWizard wizard = new PreselectedIUInstallWizard(getProvisioningUI(), op, iusInvolved, null);
// wizard.setBypassLicencePage(true);
// ProvisioningWizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
// dialog.setBlockOnOpen(false);
// dialog.open();
// ProfileModificationJob longOp = null;
//
// try {
// SelectableIUsPage selectableIUsPage = (SelectableIUsPage) wizard.getPage(SELECTION_PAGE);
// // should already have a plan
// assertTrue("1.0", selectableIUsPage.isPageComplete());
// // simulate the next button by getting next page and showing
// InstallWizardPage installWizardPage = (InstallWizardPage) selectableIUsPage.getNextPage();
//
// assertTrue("Licence page bypass flag must be true", wizard.isBypassLicencePage());
// IWizardPage licensePage = installWizardPage.getNextPage();
// assertNull("Expected instance of AcceptLicensesWizardPage must be null", licensePage);
//
// } finally {
// dialog.getShell().close();
// if (longOp != null)
// longOp.cancel();
// }
// }
//
// private static class MyNewInstallOperation extends InstallOperation {
// public MyNewInstallOperation(ProvisioningSession session, Collection<IInstallableUnit> toInstall) {
// super(session, toInstall);
// }
// }
/**
* 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().size() == 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 (TreeItem item : items) {
Object element = item.getData();
if (element != null && element instanceof IIUElement) {
IInstallableUnit iu = ((IIUElement) element).getIU();
if (iu != null && iu.getId().equals(TOPLEVELIU)) {
group.getCheckboxTreeViewer().setChecked(element, true);
}
if (iu != null && iu.getId().equals("egit")) {
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 and gets the remediation
IWizardPage remediationPage = wizard.getNextPage(page1);
dialog.showPage(remediationPage);
assertTrue(remediationPage instanceof RemediationPage);
assertTrue("3.0", remediationPage.isPageComplete());
// select click back
IWizardPage previousPage = wizard.getPreviousPage(remediationPage);
dialog.showPage(previousPage);
// select next to continue to the remediation
remediationPage = wizard.getNextPage(page1);
dialog.showPage(remediationPage);
// // 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();
}
}
}