org.eclipse.equinox.p2.tests.ui.dialogs.UpdateWizardTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.equinox.p2.tests.ui.dialogs.UpdateWizardTest.java

Source

/*******************************************************************************
 * Copyright (c) 2008, 2010 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 java.util.ArrayList;
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.p2.metadata.*;
import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
import org.eclipse.equinox.p2.operations.ProfileModificationJob;
import org.eclipse.equinox.p2.operations.UpdateOperation;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Button;
import org.eclipse.ui.statushandlers.StatusManager;

/**
 * Tests for the install wizard
 */
public class UpdateWizardTest extends WizardTest {

    private static final String SELECTION_PAGE = "IUSelectionPage";
    private static final String RESOLUTION_PAGE = "ResolutionPage";
    private static final String MAIN_IU = "MainIU";
    IInstallableUnit main, mainUpgrade1, mainUpgrade2, mainUpgradeWithLicense;

    protected void setUp() throws Exception {
        super.setUp();
        InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
        iu.setId(MAIN_IU);
        iu.setVersion(Version.createOSGi(1, 0, 0));
        iu.setSingleton(true);
        iu.setCapabilities(new IProvidedCapability[] { MetadataFactory
                .createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, MAIN_IU, iu.getVersion()) });
        main = MetadataFactory.createInstallableUnit(iu);
        install(main, true, false);
        IUpdateDescriptor update = MetadataFactory.createUpdateDescriptor(MAIN_IU,
                new VersionRange("[1.0.0, 1.0.0]"), 0, "update description");
        mainUpgrade1 = createIU(MAIN_IU, Version.createOSGi(2, 0, 0), null, NO_REQUIRES, NO_PROVIDES, NO_PROPERTIES,
                null, NO_TP_DATA, true, update, NO_REQUIRES);
        update = MetadataFactory.createUpdateDescriptor(MAIN_IU, new VersionRange("[1.0.0, 1.0.0]"), 0,
                "update description");
        mainUpgrade2 = createIU(MAIN_IU, Version.createOSGi(3, 0, 0), null, NO_REQUIRES, NO_PROVIDES, NO_PROPERTIES,
                null, NO_TP_DATA, true, update, NO_REQUIRES);
        iu = new MetadataFactory.InstallableUnitDescription();
        iu.setId(MAIN_IU);
        iu.setVersion(Version.createOSGi(4, 0, 0));
        iu.setSingleton(true);
        iu.setUpdateDescriptor(update);
        iu.setLicenses(new ILicense[] { new License(null, "Update Wizard Test License to Accept", null) });
        iu.setCapabilities(new IProvidedCapability[] { MetadataFactory
                .createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, MAIN_IU, iu.getVersion()) });
        mainUpgradeWithLicense = MetadataFactory.createInstallableUnit(iu);
        createTestMetdataRepository(
                new IInstallableUnit[] { main, mainUpgrade1, mainUpgrade2, mainUpgradeWithLicense });

    }

    /**
     * Tests the wizard when a prior resolution has been done.
     * This is the SDK 
     */
    public void testUpdateWizardResolved() {
        ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
        iusInvolved.add(main);
        UpdateOperation op = getProvisioningUI().getUpdateOperation(iusInvolved, null);
        op.resolveModal(getMonitor());
        UpdateWizard wizard = new UpdateWizard(getProvisioningUI(), op, op.getSelectedUpdates(), null);
        WizardDialog 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(page1.isPageComplete());
            ResolutionResultsWizardPage page2 = (ResolutionResultsWizardPage) wizard.getNextPage(page1);
            dialog.showPage(page2);
            assertTrue(page2.isPageComplete());

            // if another operation is scheduled for this profile, we should not be allowed to proceed
            longOp = getLongTestOperation();
            getProvisioningUI().schedule(longOp, StatusManager.LOG);
            assertTrue(page2.isPageComplete());
            // causes recalculation of plan and status
            wizard.recomputePlan(dialog);
            // can't move to next page while op is running
            assertFalse(page2.isPageComplete());
            longOp.cancel();
        } finally {
            dialog.getShell().close();
            if (longOp != null)
                longOp.cancel();
        }
    }

    public void testUpdateWizardResolvedWithLicense() {
        ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
        iusInvolved.add(main);
        UpdateOperation op = getProvisioningUI().getUpdateOperation(iusInvolved, null);
        op.resolveModal(getMonitor());
        UpdateWizard wizard = new UpdateWizard(getProvisioningUI(), op, op.getSelectedUpdates(), null);
        ProvisioningWizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
        dialog.setBlockOnOpen(false);
        dialog.open();

        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);
            // license needs approval
            assertFalse("1.1", wizard.canFinish());
            // finish button should be disabled
            while (dialog.getShell().getDisplay().readAndDispatch()) {
                // run event loop
            }
            Button finishButton = dialog.testGetButton(IDialogConstants.FINISH_ID);
            assertFalse("1.2", finishButton.isEnabled());
        } finally {
            dialog.getShell().close();
        }
    }

    /**
     * Tests the wizard when a prior resolution has been done, but is in error.
     */
    public void testUpdateWizardResolvedError() {
        ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
        iusInvolved.add(main);
        UpdateOperation op = getProvisioningUI().getUpdateOperation(iusInvolved, null);
        op.resolveModal(getMonitor());
        op.setSelectedUpdates(op.getPossibleUpdates());
        UpdateWizard wizard = new UpdateWizard(getProvisioningUI(), op, op.getSelectedUpdates(), null);
        ProvisioningWizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
        dialog.setBlockOnOpen(false);
        dialog.open();

        try {
            assertNotNull("1.0", wizard.getStartingPage());
        } finally {
            dialog.getShell().close();
        }
    }

    /**
     * Tests the wizard when we have a successful resolution and want to open
     * directly on the resolution page
     */
    public void testUpdateWizardResolvedSkipSelections() {
        ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
        iusInvolved.add(main);
        UpdateOperation op = getProvisioningUI().getUpdateOperation(iusInvolved, null);
        op.resolveModal(getMonitor());
        UpdateWizard wizard = new UpdateWizard(getProvisioningUI(), op, op.getSelectedUpdates(), null);
        wizard.setSkipSelectionsPage(true);
        ProvisioningWizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
        dialog.setBlockOnOpen(false);
        dialog.open();

        try {
            assertNotNull("1.0", wizard.getStartingPage());
            assertEquals("1.1", wizard.getStartingPage(), wizard.getPage(RESOLUTION_PAGE));
        } finally {
            dialog.getShell().close();
        }
    }

    /**
     * Tests the wizard when multiple versions are available.
     */
    public void testBug277554MultipleVersions() {
        ArrayList<IInstallableUnit> iusInvolved = new ArrayList<IInstallableUnit>();
        iusInvolved.add(main);
        UpdateOperation op = getProvisioningUI().getUpdateOperation(iusInvolved, null);
        op.resolveModal(getMonitor());
        UpdateWizard wizard = new UpdateWizard(getProvisioningUI(), op, op.getSelectedUpdates(), null);
        ProvisioningWizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
        dialog.setBlockOnOpen(false);
        dialog.open();

        try {
            SelectableIUsPage page1 = (SelectableIUsPage) wizard.getPage(SELECTION_PAGE);
            // should already have a plan
            assertTrue("1.0", page1.isPageComplete());
            assertEquals("1.1", 1, page1.getCheckedIUElements().length);
            ResolutionResultsWizardPage page2 = (ResolutionResultsWizardPage) wizard.getNextPage(page1);
            dialog.showPage(page2);
            // should only have one root item in the resolution page
            assertEquals("1.2", 1, findTree(page2).getItemCount());
        } finally {
            dialog.getShell().close();
        }
    }
}