/******************************************************************************* * 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 * EclipseSource - bug fixing *******************************************************************************/ package org.eclipse.equinox.p2.tests.ui.query; import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.util.*; import org.eclipse.equinox.internal.p2.engine.Profile; import org.eclipse.equinox.internal.p2.metadata.TranslationSupport; import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.metadata.*; import org.eclipse.equinox.p2.query.*; import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager; /** * Tests for {@link TranslationSupport}. */ public class TranslationSupportTests extends AbstractQueryTest { Profile profile; IQueryable oldTranslationSource; protected void setUp() throws Exception { super.setUp(); profile = (Profile) createProfile("testLocalizedLicense"); oldTranslationSource = TranslationSupport.getInstance().setTranslationSource(profile); } protected void tearDown() throws Exception { super.tearDown(); TranslationSupport.getInstance().setTranslationSource(oldTranslationSource); } public void testFeatureProperties() { IMetadataRepositoryManager repoMan = (IMetadataRepositoryManager) getAgent().getService(IMetadataRepositoryManager.SERVICE_NAME); File site = getTestData("0.1", "/testData/metadataRepo/externalized"); URI location = site.toURI(); IMetadataRepository repository; try { repository = repoMan.loadRepository(location, getMonitor()); } catch (ProvisionException e) { fail("1.99", e); return; } IQueryResult result = repository.query(QueryUtil.createIUQuery("test.feature.feature.group"), getMonitor()); assertTrue("1.0", !result.isEmpty()); IInstallableUnit unit = (IInstallableUnit) result.iterator().next(); ICopyright copyright = unit.getCopyright(null); assertEquals("1.1", "Test Copyright", copyright.getBody()); ILicense license = unit.getLicenses(null).iterator().next(); assertEquals("1.2", "Test License", license.getBody()); // assertEquals("1.3", "license.html", license.getURL().toExternalForm()); String name = unit.getProperty(IInstallableUnit.PROP_NAME, null); assertEquals("1.4", "Test Feature Name", name); String description = unit.getProperty(IInstallableUnit.PROP_DESCRIPTION, null); assertEquals("1.5", "Test Description", description); String provider = unit.getProperty(IInstallableUnit.PROP_PROVIDER, null); assertEquals("1.6", "Test Provider Name", provider); } public void testLocalizedLicense() throws URISyntaxException { String germanLicense = "German License"; String canadianFRLicense = "Canadian French License"; // Create a IU that has a license, but the license body is simply %license. This will be filled in by // a fragment org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription iuDescription = new org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription(); iuDescription.setId("some IU"); iuDescription.setVersion(Version.createOSGi(1, 0, 0)); iuDescription.setLicenses(new ILicense[] {MetadataFactory.createLicense(new URI("http://example.com"), "%license")}); iuDescription.addProvidedCapabilities(Collections.singleton(MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, "some IU", Version.createOSGi(1, 0, 0)))); IInstallableUnit iu = MetadataFactory.createInstallableUnit(iuDescription); // Create a bunch of fragments which spec our IU as their host // These fragments don't contribute language information for (int i = 0; i < 10; i++) { org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription installableUnitFragmentDescription = new org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription(); installableUnitFragmentDescription.setId("fragment number: " + i); installableUnitFragmentDescription.setVersion(Version.createOSGi(1, 0, 0)); installableUnitFragmentDescription.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "some IU", ANY_VERSION, null, false, false)}); installableUnitFragmentDescription.setProperty(org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription.PROP_TYPE_FRAGMENT, "true"); IInstallableUnitFragment iuFragment = MetadataFactory.createInstallableUnitFragment(installableUnitFragmentDescription); profile.addInstallableUnit(iuFragment); } // Create fragment with a German license org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription installableUnitFragmentDescription = new org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription(); IProvidedCapability providedCapability = MetadataFactory.createProvidedCapability("org.eclipse.equinox.p2.localization", "de", Version.createOSGi(1, 0, 0)); ArrayList list = new ArrayList(); list.add(providedCapability); installableUnitFragmentDescription.addProvidedCapabilities(list); installableUnitFragmentDescription.setId("german fragment"); installableUnitFragmentDescription.setVersion(Version.createOSGi(1, 0, 0)); installableUnitFragmentDescription.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "some IU", ANY_VERSION, null, false, false)}); installableUnitFragmentDescription.setProperty(org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription.PROP_TYPE_FRAGMENT, "true"); installableUnitFragmentDescription.setProperty("de.license", germanLicense); IInstallableUnitFragment iuFragment = MetadataFactory.createInstallableUnitFragment(installableUnitFragmentDescription); profile.addInstallableUnit(iuFragment); // Create a French fragment with an fr_CA license installableUnitFragmentDescription = new org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription(); providedCapability = MetadataFactory.createProvidedCapability("org.eclipse.equinox.p2.localization", "fr", Version.createOSGi(1, 0, 0)); list = new ArrayList(); list.add(providedCapability); installableUnitFragmentDescription.addProvidedCapabilities(list); installableUnitFragmentDescription.setId("cnd french fragment"); installableUnitFragmentDescription.setVersion(Version.createOSGi(1, 0, 0)); installableUnitFragmentDescription.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "some IU", ANY_VERSION, null, false, false)}); installableUnitFragmentDescription.setProperty(org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription.PROP_TYPE_FRAGMENT, "true"); installableUnitFragmentDescription.setProperty("fr_CA.license", canadianFRLicense); iuFragment = MetadataFactory.createInstallableUnitFragment(installableUnitFragmentDescription); profile.addInstallableUnit(iuFragment); profile.addInstallableUnit(iu); ILicense license = iu.getLicenses(Locale.GERMAN.toString()).iterator().next(); assertEquals("1.0", germanLicense, license.getBody()); license = iu.getLicenses(Locale.CANADA_FRENCH.toString()).iterator().next(); assertEquals("1.1", canadianFRLicense, license.getBody()); } public void testBasicIU() { IInstallableUnit unit = createIU("f1"); assertNull("1.1", unit.getCopyright(null)); assertEquals("1.2", 0, unit.getLicenses(null).size()); assertNull("1.3", unit.getProperty(IInstallableUnit.PROP_NAME, null)); assertNull("1.4", unit.getProperty(IInstallableUnit.PROP_DESCRIPTION, null)); assertNull("1.5", unit.getProperty(IInstallableUnit.PROP_PROVIDER, null)); } }