blob: a6059f302a208ededae3119d7193cc8ed69985d9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2012 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.core.tests.internal.registry.simple;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.internal.registry.ExtensionRegistry;
import org.eclipse.core.internal.registry.spi.ConfigurationElementAttribute;
import org.eclipse.core.internal.registry.spi.ConfigurationElementDescription;
import org.eclipse.core.runtime.*;
/**
* Tests programmatic creation of extension and extension point by using direct
* methods on the ExtensionRegistry.
*
* Note that in present those methods are internal, but might be exposed as
* APIs in the future.
*
* @since 3.2
*/
public class DirectExtensionCreate extends BaseExtensionRegistryRun {
public DirectExtensionCreate() {
super();
}
public DirectExtensionCreate(String name) {
super(name);
}
public void testExtensionPointAddition() {
IContributor contributor = ContributorFactorySimple.createContributor("1"); //$NON-NLS-1$
String extensionPointId = "DirectExtPoint"; //$NON-NLS-1$
String extensionPointLabel = "Direct Extension Point"; //$NON-NLS-1$
String extensionPointSchemaRef = "schema/ExtensionPointTest.exsd"; //$NON-NLS-1$
/**********************************************************************************************
* Add extension point:
*
* <extension-point id="DirectExtPoint"
* name="Direct Extension Point"
* schema="schema/ExtensionPointTest.exsd"/>
*
*********************************************************************************************/
((ExtensionRegistry) simpleRegistry).addExtensionPoint(extensionPointId, contributor, false, extensionPointLabel, extensionPointSchemaRef, userToken);
String namespace = contributor.getName();
IExtensionPoint extensionPoint = simpleRegistry.getExtensionPoint(qualifiedName(namespace, extensionPointId));
assertNotNull(extensionPoint);
assertTrue(extensionPointSchemaRef.equals(extensionPoint.getSchemaReference()));
assertTrue(extensionPointLabel.equals(extensionPoint.getLabel()));
// add second contribution in the same namespace
String extensionPointAltId = "DirectExtPointAlt"; //$NON-NLS-1$
String extensionPointAltLabel = "Second direct extension point"; //$NON-NLS-1$
assertTrue(((ExtensionRegistry) simpleRegistry).addExtensionPoint(extensionPointAltId, contributor, false, extensionPointAltLabel, extensionPointSchemaRef, userToken));
IExtensionPoint extensionPointAlt = simpleRegistry.getExtensionPoint(qualifiedName(namespace, extensionPointAltId));
assertNotNull(extensionPointAlt);
assertTrue(extensionPointSchemaRef.equals(extensionPointAlt.getSchemaReference()));
assertTrue(extensionPointAltLabel.equals(extensionPointAlt.getLabel()));
/**********************************************************************************************
* Add extension:
* <extension id="DirectExtensionID" name="Direct Extension" point="DirectExtPoint">
* <StorageDevice deviceURL="theShienneMountain">
* <BackupDevice backupURL="SkyLab"/>
* <BackupDevice backupURL="OceanFloor"/>
* </StorageDevice>
* </extension>
*********************************************************************************************/
String extensionId = "DirectExtensionID"; //$NON-NLS-1$
String extensionLabel = "Direct Extension"; //$NON-NLS-1$
String nameChildDesc = "BackupDevice"; //$NON-NLS-1$
String propNameChildDesc = "backupURL"; //$NON-NLS-1$
String propValueChildDesc1 = "SkyLab"; //$NON-NLS-1$
String propValueChildDesc2 = "OceanFloor"; //$NON-NLS-1$
ConfigurationElementAttribute propChildDesc1 = new ConfigurationElementAttribute(propNameChildDesc, propValueChildDesc1);
ConfigurationElementDescription childDesc1 = new ConfigurationElementDescription(nameChildDesc, propChildDesc1, null, null);
ConfigurationElementAttribute propChildDesc2 = new ConfigurationElementAttribute(propNameChildDesc, propValueChildDesc2);
ConfigurationElementDescription childDesc2 = new ConfigurationElementDescription(nameChildDesc, propChildDesc2, null, null);
String extensionName = "StorageDevice"; //$NON-NLS-1$
String extensionProrName1 = "deviceURL"; //$NON-NLS-1$
String extensionPropValue1 = "theShienneMountain"; //$NON-NLS-1$
String extensionProrName2 = "primary"; //$NON-NLS-1$
String extensionPropValue2 = "true"; //$NON-NLS-1$
ConfigurationElementAttribute prop1 = new ConfigurationElementAttribute(extensionProrName1, extensionPropValue1);
ConfigurationElementAttribute prop2 = new ConfigurationElementAttribute(extensionProrName2, extensionPropValue2);
String extensionValue = "SomeValue"; //$NON-NLS-1$
ConfigurationElementDescription description = new ConfigurationElementDescription(extensionName, new ConfigurationElementAttribute[] {prop1, prop2}, extensionValue, new ConfigurationElementDescription[] {childDesc1, childDesc2});
assertTrue(((ExtensionRegistry) simpleRegistry).addExtension(extensionId, contributor, false, extensionLabel, extensionPointId, description, userToken));
IExtension[] namespaceExtensions = simpleRegistry.getExtensions(namespace);
assertNotNull(namespaceExtensions);
assertTrue(namespaceExtensions.length == 1);
IExtension[] extensions = extensionPoint.getExtensions();
assertNotNull(extensions);
assertTrue(extensions.length == 1);
for (int i = 0; i < extensions.length; i++) {
IExtension extension = extensions[i];
String storedExtensionId = extension.getUniqueIdentifier();
assertTrue(storedExtensionId.equals(qualifiedName(namespace, extensionId)));
String extensionNamespace = extension.getNamespaceIdentifier();
assertTrue(extensionNamespace.equals(namespace));
String extensionContributor = extension.getContributor().getName();
assertTrue(extensionContributor.equals(namespace));
IConfigurationElement[] configElements = extension.getConfigurationElements();
assertNotNull(configElements);
for (int j = 0; j < configElements.length; j++) {
IConfigurationElement configElement = configElements[j];
String configElementName = configElement.getName();
assertTrue(configElementName.equals(extensionName));
String configElementValue = configElement.getValue();
assertTrue(configElementValue.equals(extensionValue));
String[] attributeNames = configElement.getAttributeNames();
assertTrue(attributeNames.length == 2);
IConfigurationElement[] configElementChildren = configElement.getChildren();
assertTrue(configElementChildren.length == 2);
}
}
}
public static Test suite() {
return new TestSuite(DirectExtensionCreate.class);
}
}