blob: dbaaac69b15825d9a98db971a7bda0df9ad1ae44 [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 java.lang.reflect.Field;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.*;
import org.eclipse.equinox.internal.p2.ui.ProvUI;
import org.eclipse.equinox.internal.p2.ui.viewers.ProvElementContentProvider;
import org.eclipse.equinox.p2.tests.ui.AbstractProvisioningUITest;
import org.eclipse.equinox.p2.ui.RevertProfilePage;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.AbstractTableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* Tests for the Installation History page.
* If nothing else, this test ensures that installation history can be hosted
* somewhere besides the about dialog
*/
public class InstallationHistoryPageTest extends AbstractProvisioningUITest {
volatile int jobs;
volatile int done;
class TestDialog extends Dialog {
RevertProfilePage page;
TestDialog() {
super(ProvUI.getDefaultParentShell());
}
protected Control createDialogArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
page = new RevertProfilePage();
page.createControl(composite);
return composite;
}
}
/**
* Hammers the background fetch
*/
public void disabledtestDialogBackgroundFetch() {
TestDialog dialog = new TestDialog();
dialog.setBlockOnOpen(false);
dialog.open();
try {
Field viewerField = RevertProfilePage.class.getDeclaredField("configsViewer");
viewerField.setAccessible(true);
AbstractTableViewer viewer = (AbstractTableViewer) viewerField.get(dialog.page);
ProvElementContentProvider provider = (ProvElementContentProvider) viewer.getContentProvider();
Object input = viewer.getInput();
Field jobField = ProvElementContentProvider.class.getDeclaredField("fetchJob");
jobField.setAccessible(true);
Field jobFamily = ProvElementContentProvider.class.getDeclaredField("fetchFamily");
jobFamily.setAccessible(true);
jobs = 0;
done = 0;
final Object family = jobFamily.get(provider);
Job.getJobManager().addJobChangeListener(new JobChangeAdapter() {
public void done(IJobChangeEvent e) {
if (e.getJob().belongsTo(family)) {
done++;
int status = e.getResult().getSeverity();
if (status != IStatus.CANCEL && status != IStatus.OK) {
// something unexpected happened.
fail("Fetch job failed unexpectedly " + e.getResult().getMessage());
}
}
}
});
// hammer the elements repetitively to start multiple fast running fetch jobs
for (int i = 0; i < 5; i++) {
provider.getElements(input);
Job job = (Job) jobField.get(provider);
if (job != null) {
jobs++;
}
}
// We need to wait for all the fetch jobs to finish and then verify that they did
Job.getJobManager().join(family, null);
assertTrue("Something's wrong. No fetch occurred", jobs > 0);
assertEquals("Not all jobs finished as expected", jobs, done);
} catch (Exception e) {
fail("Failure during reflection", e);
} finally {
dialog.close();
}
}
/**
* Tests the dialog - just launches it for now
*/
public void testDialog() {
TestDialog dialog = new TestDialog();
dialog.setBlockOnOpen(false);
dialog.open();
dialog.close();
}
}