package org.zend.php.zendserver.deployment.core.internal.descriptor; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.zend.php.zendserver.deployment.core.descriptor.ChangeEvent; import org.zend.php.zendserver.deployment.core.descriptor.DeploymentDescriptorFactory; import org.zend.php.zendserver.deployment.core.descriptor.DeploymentDescriptorPackage; import org.zend.php.zendserver.deployment.core.descriptor.IDescriptorChangeListener; import org.zend.php.zendserver.deployment.core.descriptor.IDirectiveDependency; import org.zend.php.zendserver.deployment.core.descriptor.IExtensionDependency; import org.zend.php.zendserver.deployment.core.descriptor.IModelObject; import org.zend.php.zendserver.deployment.core.descriptor.IPHPDependency; import org.zend.php.zendserver.deployment.core.descriptor.IParameter; import org.zend.php.zendserver.deployment.core.descriptor.IVariable; import org.zend.php.zendserver.deployment.core.descriptor.IZendComponentDependency; import org.zend.php.zendserver.deployment.core.descriptor.IZendFrameworkDependency; import org.zend.php.zendserver.deployment.core.descriptor.IZendServerDependency; public class DescriptorNotificationsTests extends TestCase { private EventRecorder events; private DeploymentDescriptor descr; public static class EventRecorder implements IDescriptorChangeListener { private List<ChangeEvent> expected = new ArrayList<ChangeEvent>(); private List<ChangeEvent> actual = new ArrayList<ChangeEvent>(); public void assertEvent(IModelObject expectedTarget, Feature expectedFeature, int expectedType, Object newValue, Object oldValue) { expected.add(new ChangeEvent(expectedTarget, expectedFeature, expectedType, newValue, oldValue)); } public void descriptorChanged(ChangeEvent event) { actual.add(event); } public void assertEquals() { assertSame(expected.size(), actual.size()); for (int i = 0; i < expected.size(); i++) { ChangeEvent e = expected.get(i); ChangeEvent a = actual.get(i); assertSame("Event target should be same for event "+i, e.target, a.target); assertSame("Event feature should be same for event "+i, e.feature, a.feature); assertSame("Event type should be same for event "+i, e.type, a.type); TestCase.assertEquals("Event newValue should be equal for event "+i, e.newValue, a.newValue); TestCase.assertEquals("Event oldValue should be equal for event "+i, e.oldValue, a.oldValue); } } } public void setUp() { events = new EventRecorder(); descr = new DeploymentDescriptor(); descr.addListener(events); } public void testDescriptorSet() { events.assertEvent(descr, DeploymentDescriptorPackage.PKG_NAME, IDescriptorChangeListener.SET, "newName", null); events.assertEvent(descr, DeploymentDescriptorPackage.VERSION_API, IDescriptorChangeListener.SET, "1.2.0", null); events.assertEvent(descr, DeploymentDescriptorPackage.SUMMARY, IDescriptorChangeListener.SET, "new summary", null); descr.setName("newName"); descr.setApiVersion("1.2.0"); descr.set(DeploymentDescriptorPackage.SUMMARY, "new summary"); events.assertEquals(); } public void testDescriptorAdd() { IVariable var = (IVariable) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.VARIABLES); IPHPDependency php = (IPHPDependency) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.DEPENDENCIES_PHP); IParameter param = (IParameter) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.PARAMETERS); IDirectiveDependency dd = (IDirectiveDependency) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.DEPENDENCIES_DIRECTIVE); IExtensionDependency ext = (IExtensionDependency) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.DEPENDENCIES_EXTENSION); IZendFrameworkDependency zf = (IZendFrameworkDependency) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.DEPENDENCIES_ZENDFRAMEWORK); IZendComponentDependency zc = (IZendComponentDependency) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.DEPENDENCIES_ZSCOMPONENT); IZendServerDependency zs = (IZendServerDependency) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.DEPENDENCIES_ZENDSERVER); events.assertEvent(descr, DeploymentDescriptorPackage.VARIABLES, IDescriptorChangeListener.ADD, var, null); events.assertEvent(descr, DeploymentDescriptorPackage.DEPENDENCIES_PHP, IDescriptorChangeListener.ADD, php, null); events.assertEvent(descr, DeploymentDescriptorPackage.PARAMETERS, IDescriptorChangeListener.ADD, param, null); events.assertEvent(param, DeploymentDescriptorPackage.VALIDATION, IDescriptorChangeListener.ADD, "value1", null); events.assertEvent(param, DeploymentDescriptorPackage.VALIDATION, IDescriptorChangeListener.ADD, "value2", null); events.assertEvent(descr, DeploymentDescriptorPackage.PERSISTENT_RESOURCES, IDescriptorChangeListener.ADD, "c:\\Program Files", null); events.assertEvent(descr, DeploymentDescriptorPackage.DEPENDENCIES_DIRECTIVE, IDescriptorChangeListener.ADD, dd, null); events.assertEvent(descr, DeploymentDescriptorPackage.DEPENDENCIES_EXTENSION, IDescriptorChangeListener.ADD, ext, null); events.assertEvent(descr, DeploymentDescriptorPackage.DEPENDENCIES_ZENDFRAMEWORK, IDescriptorChangeListener.ADD, zf, null); events.assertEvent(descr, DeploymentDescriptorPackage.DEPENDENCIES_ZSCOMPONENT, IDescriptorChangeListener.ADD, zc, null); events.assertEvent(descr, DeploymentDescriptorPackage.DEPENDENCIES_ZENDSERVER, IDescriptorChangeListener.ADD, zs, null); descr.getVariables().add(var); descr.getPHPDependencies().add(php); descr.getParameters().add(param); param.getValidValues().add("value1"); param.getValidValues().add("value2"); descr.getPersistentResources().add("c:\\Program Files"); descr.getDirectiveDependencies().add(dd); descr.getExtensionDependencies().add(ext); descr.getZendFrameworkDependencies().add(zf); descr.getZendComponentDependencies().add(zc); descr.getZendServerDependencies().add(zs); events.assertEquals(); } public void testDescriptorEventBubble() { IVariable var = (IVariable) DeploymentDescriptorFactory.createModelElement(DeploymentDescriptorPackage.VARIABLES); events.assertEvent(descr, DeploymentDescriptorPackage.VARIABLES, IDescriptorChangeListener.ADD, var, null); events.assertEvent(var, DeploymentDescriptorPackage.VAR_NAME, IDescriptorChangeListener.SET, "changedName", "newName"); var.setName("newName"); // no event for that in descr descr.getVariables().add(var); // event for that in descr var.setName("changedName"); // event for that in descr events.assertEquals(); } public void testDescriptorNoEventOnNoChange() { events.assertEvent(descr, DeploymentDescriptorPackage.PKG_NAME, IDescriptorChangeListener.SET, "newName", null); events.assertEvent(descr, DeploymentDescriptorPackage.PKG_NAME, IDescriptorChangeListener.SET, null, "newName"); events.assertEvent(descr, DeploymentDescriptorPackage.PKG_NAME, IDescriptorChangeListener.SET, "Magento", null); events.assertEvent(descr, DeploymentDescriptorPackage.PKG_NAME, IDescriptorChangeListener.SET, "Magentissimo", "Magento"); descr.setName("newName"); descr.setName("newName"); descr.setName("newName"); descr.setName("newName"); descr.setName(null); descr.setName(null); descr.setName(null); descr.setName("Magento"); descr.setName("Magentissimo"); events.assertEquals(); } }