/*******************************************************************************
* 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.wire;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.eclipse.riena.core.test.RienaTestCase;
import org.eclipse.riena.core.test.collect.NonUITestCase;
import org.eclipse.riena.core.util.Literal;
import org.eclipse.riena.internal.tests.Activator;
/**
* Test the {@code Wire} stuff.
*/
@NonUITestCase
public class WireTest extends RienaTestCase {
private final BundleContext context = Activator.getDefault().getContext();
private ServiceRegistration schtonkReg;
private ServiceRegistration stunkReg;
@Override
protected void setUp() throws Exception {
super.setUp();
schtonkReg = context.registerService(Schtonk.class.getName(), new Schtonk(), null);
stunkReg = context.registerService(Stunk.class.getName(), new Stunk(), null);
}
@Override
protected void tearDown() throws Exception {
schtonkReg.unregister();
stunkReg.unregister();
super.tearDown();
}
public void testWiringBean() {
final Bean bean = new Bean();
final WirePuller puller = Wire.instance(bean).andStart(context);
assertTrue(bean.hasSchtonk());
puller.stop();
}
public void testWiringDeeplyAndCheckSequenceConstraint() {
final BeanOnBean beanOnBean = new BeanOnBean();
SequenceUtil.init();
final WirePuller puller = Wire.instance(beanOnBean).andStart(context);
SequenceUtil.assertExpected(BeanWiring.class, BeanOnBeanWiring.class);
assertTrue(beanOnBean.hasSchtonk());
assertTrue(beanOnBean.hasStunk());
SequenceUtil.init();
puller.stop();
SequenceUtil.assertExpected(BeanOnBeanWiring.class, BeanWiring.class);
}
public void testWiringDeeplyAndWithOrderAndCheckSequenceConstraint() {
final BeanOnBeanWithOrder beanOnBean = new BeanOnBeanWithOrder();
SequenceUtil.init();
final WirePuller puller = Wire.instance(beanOnBean).andStart(context);
final List<String> expected = Literal.list("BeanWithOrder+schtonk").list("BeanWithOrder+stunk")
.list("BeanWithOrder+done").list("BeanOnBeanWithOrder+stunk").list("BeanOnBeanWithOrder+schtonk")
.list("BeanOnBeanWithOrder+done");
SequenceUtil.assertExpected(expected);
assertTrue(beanOnBean.hasSchtonk0());
assertTrue(beanOnBean.hasStunk0());
assertTrue(beanOnBean.hasSchtonk1());
assertTrue(beanOnBean.hasStunk1());
SequenceUtil.init();
puller.stop();
expected.remove("BeanWithOrder+done");
expected.remove("BeanOnBeanWithOrder+done");
Collections.reverse(expected);
SequenceUtil.assertExpected(expected);
}
public void testWiringDeeply() {
final NoWirableBean noWirableBean = new NoWirableBean();
SequenceUtil.init();
final WirePuller puller = Wire.instance(noWirableBean).andStart(context);
SequenceUtil.assertExpected(BeanWiring.class);
assertTrue(noWirableBean.hasSchtonk());
puller.stop();
}
public void testWireMocking() {
final Map<Class<?>, Class<? extends IWiring>> wiringMocks = new HashMap<Class<?>, Class<? extends IWiring>>();
wiringMocks.put(Bean.class, BeanWiringMock.class);
WirePuller.injectWiringMocks(wiringMocks);
final Bean bean = new Bean();
final WirePuller puller = Wire.instance(bean).andStart(context);
assertTrue(bean.isSchtonkSchtonk());
puller.stop();
WirePuller.injectWiringMocks(null);
}
public void testAnnotatedServiceWiring() {
final AnnoServiceBeanB beanB = new AnnoServiceBeanB();
SequenceUtil.init();
final WirePuller puller = Wire.instance(beanB).andStart(context);
SequenceUtil.assertExpected(AnnoServiceBeanA.class, AnnoServiceBeanB.class);
SequenceUtil.init();
puller.stop();
SequenceUtil.assertExpected(AnnoServiceBeanB.class, AnnoServiceBeanA.class);
}
public void testAnnotatedExtensionWiring() {
addPluginXml(WireTest.class, "plugin.xml");
addPluginXml(WireTest.class, "plugin_ext.xml");
try {
final AnnoExtBeanB beanB = new AnnoExtBeanB();
SequenceUtil.init();
final WirePuller puller = Wire.instance(beanB).andStart(context);
SequenceUtil.assertExpected("textA", "infoB");
SequenceUtil.init();
puller.stop();
SequenceUtil.assertExpected("-IDataB", "-IDataA");
} finally {
removeExtension("core.test.extpoint.idA");
removeExtension("core.test.extpoint.idB");
}
}
}