/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG 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:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.core.injector.extension;
import java.io.IOException;
import org.eclipse.riena.core.injector.Inject;
import org.eclipse.riena.core.test.RienaTestCase;
import org.eclipse.riena.core.test.collect.NonUITestCase;
/**
* Test the {@code ExtensionInjector} with respect to the onceOnly feature.
*/
@NonUITestCase
public class ExtensionInjectorOnceOnlyTest extends RienaTestCase {
public void testOnceOnlyViaStaticOneTarget() throws IOException {
printTestName();
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin.xml");
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin_ext1.xml");
try {
ConfigurableThingMultipleDataOnceOnlyViaStatic.resetUpdateCount();
final ConfigurableThingMultipleDataOnceOnlyViaStatic target = new ConfigurableThingMultipleDataOnceOnlyViaStatic();
final ExtensionInjector injector = Inject.extension("core.test.extpoint").into(target)
.andStart(getContext());
assertEquals(1, target.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaStatic.getUpdateCount());
injector.stop();
assertEquals(0, target.getData().length);
assertEquals(2, ConfigurableThingMultipleDataOnceOnlyViaStatic.getUpdateCount());
} finally {
removeExtension("core.test.extpoint.id1");
removeExtensionPoint("core.test.extpoint");
}
}
public void testOnceOnlyViaStaticTwoTargets() throws IOException {
printTestName();
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin.xml");
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin_ext1.xml");
try {
ConfigurableThingMultipleDataOnceOnlyViaStatic.resetUpdateCount();
final ConfigurableThingMultipleDataOnceOnlyViaStatic target1 = new ConfigurableThingMultipleDataOnceOnlyViaStatic();
final ExtensionInjector injector1 = Inject.extension("core.test.extpoint").into(target1)
.andStart(getContext());
assertEquals(1, target1.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaStatic.getUpdateCount());
final ConfigurableThingMultipleDataOnceOnlyViaStatic target2 = new ConfigurableThingMultipleDataOnceOnlyViaStatic();
final ExtensionInjector injector2 = Inject.extension("core.test.extpoint").into(target2)
.andStart(getContext());
assertEquals(1, target2.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaStatic.getUpdateCount());
injector1.stop();
assertEquals(1, target1.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaStatic.getUpdateCount());
injector2.stop();
assertEquals(0, target1.getData().length);
assertEquals(2, ConfigurableThingMultipleDataOnceOnlyViaStatic.getUpdateCount());
} finally {
removeExtension("core.test.extpoint.id1");
removeExtensionPoint("core.test.extpoint");
}
}
public void testOnceOnlyViaDefinitionOneTarget() throws IOException {
printTestName();
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin.xml");
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin_ext1.xml");
try {
ConfigurableThingMultipleDataOnceOnlyViaDefinition.resetUpdateCount();
final ConfigurableThingMultipleDataOnceOnlyViaDefinition target = new ConfigurableThingMultipleDataOnceOnlyViaDefinition();
final ExtensionInjector injector = Inject.extension("core.test.extpoint").into(target).onceOnly()
.andStart(getContext());
assertEquals(1, target.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaDefinition.getUpdateCount());
injector.stop();
assertEquals(0, target.getData().length);
assertEquals(2, ConfigurableThingMultipleDataOnceOnlyViaDefinition.getUpdateCount());
} finally {
removeExtension("core.test.extpoint.id1");
removeExtensionPoint("core.test.extpoint");
}
}
public void testOnceOnlyViaDefinitionTwoTargets() throws IOException {
printTestName();
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin.xml");
addPluginXml(ExtensionInjectorOnceOnlyTest.class, "plugin_ext1.xml");
try {
ConfigurableThingMultipleDataOnceOnlyViaDefinition.resetUpdateCount();
final ConfigurableThingMultipleDataOnceOnlyViaDefinition target1 = new ConfigurableThingMultipleDataOnceOnlyViaDefinition();
final ExtensionInjector injector1 = Inject.extension("core.test.extpoint").into(target1).onceOnly()
.andStart(getContext());
assertEquals(1, target1.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaDefinition.getUpdateCount());
final ConfigurableThingMultipleDataOnceOnlyViaDefinition target2 = new ConfigurableThingMultipleDataOnceOnlyViaDefinition();
final ExtensionInjector injector2 = Inject.extension("core.test.extpoint").into(target2).onceOnly()
.andStart(getContext());
assertEquals(1, target2.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaDefinition.getUpdateCount());
injector1.stop();
assertEquals(1, target1.getData().length);
assertEquals(1, ConfigurableThingMultipleDataOnceOnlyViaDefinition.getUpdateCount());
injector2.stop();
assertEquals(0, target1.getData().length);
assertEquals(2, ConfigurableThingMultipleDataOnceOnlyViaDefinition.getUpdateCount());
} finally {
removeExtension("core.test.extpoint.id1");
removeExtensionPoint("core.test.extpoint");
}
}
}