blob: c31889aaba0cb1036c01680ffc6b212bf9ef7913 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2018 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.common.tests.registry.simple;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.runtime.ContributorFactorySimple;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IContributor;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.RegistryFactory;
import org.eclipse.core.runtime.spi.RegistryStrategy;
import org.eclipse.equinox.common.tests.registry.simple.utils.ExeExtensionStrategy;
import org.eclipse.equinox.common.tests.registry.simple.utils.ExecutableRegistryObject;
import org.junit.Test;
/**
* Tests that executable extensions present in the simple registry actually gets
* processed.
*
* @since 3.2
*/
public class XMLExecutableExtensionTest extends BaseExtensionRegistryRun {
/**
* Provide own class loader to the registry executable element strategry
*
* @return - open extension registry
*/
@Override
protected IExtensionRegistry startRegistry() {
// use plugin's metadata directory to save cache data
IPath userDataPath = getStateLocation();
File[] registryLocations = new File[] { new File(userDataPath.toOSString()) };
boolean[] readOnly = new boolean[] { false };
RegistryStrategy registryStrategy = new ExeExtensionStrategy(registryLocations, readOnly);
return RegistryFactory.createRegistry(registryStrategy, masterToken, userToken);
}
@Test
public void testExecutableExtensionCreation() throws IOException, CoreException {
// Test with non-bundle contributor
IContributor nonBundleContributor = ContributorFactorySimple.createContributor("ABC"); //$NON-NLS-1$
assertFalse(ExecutableRegistryObject.createCalled);
fillRegistry(nonBundleContributor);
assertFalse(ExecutableRegistryObject.createCalled);
checkRegistry(nonBundleContributor.getName());
assertTrue(ExecutableRegistryObject.createCalled);
}
private void fillRegistry(IContributor contributor) throws IOException {
processXMLContribution(contributor, getXML("ExecutableExtension.xml")); //$NON-NLS-1$
}
private void checkRegistry(String namespace) throws CoreException {
IConfigurationElement[] elements = simpleRegistry
.getConfigurationElementsFor(qualifiedName(namespace, "XMLExecutableExtPoint")); //$NON-NLS-1$
assertEquals(1, elements.length);
for (IConfigurationElement element : elements) {
Object object = element.createExecutableExtension("class"); //$NON-NLS-1$
assertNotNull(object);
}
}
}