blob: 750b5853e238a4910b8e734e9e9c5dbb04286258 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 Code 9 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:
* Code 9 - initial API and implementation
* IBM - ongoing development
******************************************************************************/
package org.eclipse.equinox.p2.tests.publisher.actions;
import org.eclipse.equinox.p2.query.MatchQuery;
import java.io.File;
import java.net.URI;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.equinox.internal.p2.metadata.IRequiredCapability;
import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
import org.eclipse.equinox.p2.publisher.IPublisherResult;
import org.eclipse.equinox.p2.publisher.PublisherInfo;
import org.eclipse.equinox.p2.publisher.actions.QueryableFilterAdvice;
import org.eclipse.equinox.p2.publisher.eclipse.ProductAction;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.equinox.p2.tests.TestData;
@SuppressWarnings({"unchecked"})
/**
* Tests the product action when run on a product file that has a corresponding
* advice file (p2.inf).
*/
public class ProductActionWithAdviceFileTest extends ActionTest {
File executablesFeatureLocation = null;
String productLocation = "";
String source = "";
public void setUp() throws Exception {
setupPublisherResult();
}
class IUQuery extends MatchQuery {
IInstallableUnit iu;
public IUQuery(String id, Version version) {
InstallableUnitDescription iuDescription = new InstallableUnitDescription();
iuDescription.setId(id);
iuDescription.setVersion(version);
iu = MetadataFactory.createInstallableUnit(iuDescription);
}
public boolean isMatch(Object candidate) {
if (iu.equals(candidate))
return true;
return false;
}
}
public void testProductFileWithRepoAdvice() throws Exception {
URI location;
try {
location = TestData.getFile("ProductActionTest", "contextRepos").toURI();
} catch (Exception e) {
fail("0.99", e);
return;
}
ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "platform.product").toString());
IMetadataRepositoryManager metadataRepositoryManager = getMetadataRepositoryManager();
IMetadataRepository repository = metadataRepositoryManager.loadRepository(location, new NullProgressMonitor());
testAction = new ProductAction(source, productFile, flavorArg, executablesFeatureLocation);
PublisherInfo info = new PublisherInfo();
info.setContextMetadataRepository(repository);
info.addAdvice(new QueryableFilterAdvice(info.getContextMetadataRepository()));
testAction.perform(info, publisherResult, null);
IQueryResult results = publisherResult.query(new IUQuery("org.eclipse.platform.ide", Version.create("3.5.0.I20081118")), null);
assertEquals("1.0", 1, queryResultSize(results));
IInstallableUnit unit = (IInstallableUnit) results.iterator().next();
Collection<IRequirement> requiredCapabilities = unit.getRequirements();
IRequiredCapability capability = null;
for (Iterator iterator = requiredCapabilities.iterator(); iterator.hasNext();) {
IRequiredCapability req = (IRequiredCapability) iterator.next();
if (req.getName().equals("org.eclipse.equinox.p2.user.ui.feature.group")) {
capability = req;
break;
}
}
assertTrue("1.1", capability != null);
assertEquals("1.2", InstallableUnit.parseFilter("(org.eclipse.update.install.features=true)"), capability.getFilter());
}
/**
* Tests publishing a product that contains an advice file (p2.inf)
*/
public void testProductWithAdviceFile() throws Exception {
ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest/productWithAdvice", "productWithAdvice.product").toString());
testAction = new ProductAction(source, productFile, flavorArg, executablesFeatureLocation);
testAction.perform(new PublisherInfo(), publisherResult, null);
Collection productIUs = publisherResult.getIUs("productWithAdvice.product", IPublisherResult.NON_ROOT);
assertEquals("1.0", 1, productIUs.size());
IInstallableUnit product = (IInstallableUnit) productIUs.iterator().next();
Collection<ITouchpointData> data = product.getTouchpointData();
assertEquals("1.1", 1, data.size());
String configure = data.iterator().next().getInstruction("configure").getBody();
assertEquals("1.2", "addRepository(type:0,location:http${#58}//download.eclipse.org/releases/fred);addRepository(type:1,location:http${#58}//download.eclipse.org/releases/fred);", configure);
}
}