blob: 81260cd656206bf8add6daeb654262cb138bbe03 [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.actions;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
import org.eclipse.equinox.internal.p2.ui.model.ElementUtils;
import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement;
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
import org.eclipse.equinox.internal.provisional.p2.repository.IRepository;
import org.eclipse.equinox.internal.provisional.p2.repository.IRepositoryManager;
import org.eclipse.equinox.internal.provisional.p2.ui.model.MetadataRepositories;
import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil;
import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
/**
* @since 3.5
*
*/
public class ElementUtilsTest extends ProfileModificationActionTest {
public void testEmpty() {
assertEquals(getEmptySelection().length, ElementUtils.elementsToIUs(getEmptySelection()).length);
}
public void testInvalid() {
assertTrue(ElementUtils.elementsToIUs(getInvalidSelection()).length == 0);
}
public void testIUs() {
assertEquals(getTopLevelIUs().length, ElementUtils.elementsToIUs(getTopLevelIUs()).length);
}
public void testElements() {
assertEquals(getTopLevelIUElements().length, ElementUtils.elementsToIUs(getTopLevelIUElements()).length);
}
public void testMixedIUsAndNonIUs() {
assertTrue(getMixedIUsAndNonIUs().length != ElementUtils.elementsToIUs(getMixedIUsAndNonIUs()).length);
}
public void testMixedIUsAndElements() {
assertEquals(getMixedIUsAndElements().length, ElementUtils.elementsToIUs(getMixedIUsAndElements()).length);
}
public void testUpdateUsingElements() throws ProvisionException, URISyntaxException {
// Two visible repos, one is added, the other is not
URI known1 = new URI("http://example.com/known1");
URI known2 = new URI("http://example.com/known2");
ProvisioningUtil.addMetadataRepository(known1, false);
// Add system repos that should not be known or affected by ElementUtils
// One is an enabled system repo, one is disabled system repo
URI uri = new URI("http://example.com/1");
URI uri2 = new URI("http://example.com/2");
ProvisioningUtil.addMetadataRepository(uri, false);
ProvisioningUtil.setMetadataRepositoryProperty(uri, IRepository.PROP_SYSTEM, Boolean.toString(true));
ProvisioningUtil.addMetadataRepository(uri2, false);
ProvisioningUtil.addArtifactRepository(uri2, false);
ProvisioningUtil.setMetadataRepositoryProperty(uri2, IRepository.PROP_SYSTEM, Boolean.toString(true));
ProvisioningUtil.setColocatedRepositoryEnablement(uri2, false);
// The elements reflect all visible sites, but not system sites
MetadataRepositories root = new MetadataRepositories(Policy.getDefault());
List children = new ArrayList();
children.addAll(Arrays.asList(root.getChildren(root)));
// Add known2, this is as if a user added it in the pref page
children.add(new MetadataRepositoryElement(null, known2, true));
MetadataRepositoryElement[] elements = (MetadataRepositoryElement[]) children.toArray(new MetadataRepositoryElement[children.size()]);
// Add a visible repo not known by the elements
URI uri3 = new URI("http://example.com/3");
ProvisioningUtil.addMetadataRepository(uri3, false);
// Now update the repo using the elements.
// We expect known2 to get added because it was in the elements
// We expect uri3 to get removed (as if it had been removed from a pref page)
// System repos shouldn't be touched
// All this happens asynchronously so we have to install a listener to know
// that it has completed.
// The repo update happens in a job, so we need to ensure it finished
final boolean[] done = new boolean[1];
done[0] = false;
Platform.getJobManager().addJobChangeListener(new IJobChangeListener() {
public void aboutToRun(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
public void awake(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
public void done(IJobChangeEvent event) {
if (event.getJob().getName().equals(ProvUIMessages.ElementUtils_UpdateJobTitle))
done[0] = true;
}
public void running(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
public void scheduled(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
public void sleeping(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
});
ElementUtils.updateRepositoryUsingElements(elements, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
// spin event loop until job is done
Display display = PlatformUI.getWorkbench().getDisplay();
while (!done[0]) {
if (!display.readAndDispatch())
display.sleep();
}
URI[] enabled = ProvisioningUtil.getMetadataRepositories(IRepositoryManager.REPOSITORIES_ALL);
URI[] disabled = ProvisioningUtil.getMetadataRepositories(IRepositoryManager.REPOSITORIES_DISABLED);
boolean foundKnown1 = false;
boolean foundKnown2 = false;
boolean found1 = false;
boolean found2 = false;
boolean found3 = false;
for (int i = 0; i < enabled.length; i++) {
if (enabled[i].equals(known1))
foundKnown1 = true;
if (enabled[i].equals(known2))
foundKnown2 = true;
if (enabled[i].equals(uri))
found1 = true;
if (enabled[i].equals(uri2))
found2 = true;
if (enabled[i].equals(uri3))
found3 = true;
}
for (int i = 0; i < disabled.length; i++) {
if (disabled[i].equals(known1))
foundKnown1 = true;
if (disabled[i].equals(known2))
foundKnown2 = true;
if (disabled[i].equals(uri))
found1 = true;
if (disabled[i].equals(uri2))
found2 = true;
if (disabled[i].equals(uri3))
found3 = true;
}
assertTrue("1.0", found1); // Enabled system repo still exists
assertTrue("1.1", found2); // Disabled system repo still exists
assertFalse("1.2", found3); // Enabled repo not known by elements was deleted
assertTrue("1.3", foundKnown1); // Enabled visible repo still exists
assertTrue("1.4", foundKnown2); // Enabled visible repo in elements was added
// cleanup
ProvisioningUtil.removeMetadataRepository(known1);
ProvisioningUtil.removeMetadataRepository(known2);
ProvisioningUtil.removeMetadataRepository(uri);
ProvisioningUtil.removeMetadataRepository(uri2);
ProvisioningUtil.removeArtifactRepository(uri2);
ProvisioningUtil.removeMetadataRepository(uri3);
}
}