/*
* Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org
* Use is subject to license terms. See license.txt.
*/
package org.beanfabrics.context;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import junit.framework.JUnit4TestAdapter;
import org.beanfabrics.model.AbstractPM;
import org.beanfabrics.model.PMManager;
import org.beanfabrics.model.TextPM;
import org.beanfabrics.support.Property;
import org.junit.Test;
/**
* @author Michael Karneim
*/
public class ContextTest {
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(ContextTest.class);
}
public static class TopLevelPM extends AbstractPM {
@Property
LevelOnePM levelOne;
public TopLevelPM() {
PMManager.setup(this);
}
public void setLevelOne(LevelOnePM pModel) {
this.levelOne = pModel;
PMManager.setup(this);
}
}
public static class LevelOnePM extends AbstractPM {
@Property
LevelTwoPM levelTwo = new LevelTwoPM();
public LevelOnePM() {
PMManager.setup(this);
}
}
public static class LevelTwoPM extends AbstractPM {
@Property
LevelThreePM levelThree = new LevelThreePM();
public LevelTwoPM() {
PMManager.setup(this);
}
}
public static class LevelThreePM extends AbstractPM {
@Property
TextPM name = new TextPM();
int countServiceAdded = 0;
int countServiceRemoved = 0;
Object service;
public LevelThreePM() {
PMManager.setup(this);
this.getContext().addContextListener(new ContextListener() {
public void serviceRemoved(ServiceRemovedEvent evt) {
countServiceRemoved++;
service = null;
}
public void serviceAdded(ServiceAddedEvent evt) {
countServiceAdded++;
service = evt.getServiceEntry().getService();
}
public void parentRemoved(ParentRemovedEvent evt) {
}
public void parentAdded(ParentAddedEvent evt) {
}
});
}
}
@Test
public void addService() {
LevelOnePM pModel = new LevelOnePM();
Object service = new Object();
pModel.getContext().addService(Object.class, service);
assertEquals("pModel.levelTwo.levelThree.countServiceAdded", 1, pModel.levelTwo.levelThree.countServiceAdded);
assertEquals("pModel.levelTwo.levelThree.service", service, pModel.levelTwo.levelThree.service);
}
@Test
public void removeService() {
LevelOnePM pModel = new LevelOnePM();
pModel.getContext().addService(Object.class, new Object());
assertEquals("pModel.levelTwo.levelThree.countServiceAdded", 1, pModel.levelTwo.levelThree.countServiceAdded);
pModel.getContext().removeService(Object.class);
assertEquals("pModel.levelTwo.levelThree.countServiceRemoved", 1, pModel.levelTwo.levelThree.countServiceRemoved);
assertNull("pModel.levelTwo.levelThree.service", pModel.levelTwo.levelThree.service);
}
@Test
public void addTopLevelService() {
TopLevelPM topLevelMdl = new TopLevelPM();
Object service = new Object();
topLevelMdl.getContext().addService(Object.class, service);
LevelOnePM pModel = new LevelOnePM();
topLevelMdl.setLevelOne(pModel);
assertEquals("pModel.levelTwo.levelThree.countServiceAdded", 1, pModel.levelTwo.levelThree.countServiceAdded);
assertEquals("pModel.levelTwo.levelThree.service", service, pModel.levelTwo.levelThree.service);
topLevelMdl.setLevelOne(null);
assertEquals("pModel.levelTwo.levelThree.countServiceRemoved", 1, pModel.levelTwo.levelThree.countServiceRemoved);
assertNull("pModel.levelTwo.levelThree.service", pModel.levelTwo.levelThree.service);
}
@Test
public void getService() {
TopLevelPM topLevelMdl = new TopLevelPM();
Object service = new Object();
topLevelMdl.getContext().addService(Object.class, service);
topLevelMdl.setLevelOne(new LevelOnePM());
LevelThreePM levelThree = topLevelMdl.levelOne.levelTwo.levelThree;
Object foundService = levelThree.getContext().getService(Object.class);
assertEquals("foundService", service, foundService);
}
}