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

Java tutorial

Introduction

Here is the source code for org.eclipse.equinox.p2.tests.ui.dialogs.InstallWizardTest.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.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
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.*;
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!", null) });
        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() {
        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();
        }
    }

    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 (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();
        }
    }
}