/**
* Copyright (c) 2002-2007 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 - Initial API and implementation
*/
package org.eclipse.emf.test.core.dynamic;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
public class ModelNotificationTest extends TestCase
{
private EClass valueHolderClass;
public ModelNotificationTest(String name)
{
super(name);
}
public static Test suite()
{
TestSuite ts = new TestSuite("ModelNotificationTest");
ts.addTest(new ModelNotificationTest("testBoolean"));
ts.addTest(new ModelNotificationTest("testByte"));
ts.addTest(new ModelNotificationTest("testChar"));
ts.addTest(new ModelNotificationTest("testDouble"));
ts.addTest(new ModelNotificationTest("testFloat"));
ts.addTest(new ModelNotificationTest("testInt"));
ts.addTest(new ModelNotificationTest("testLong"));
ts.addTest(new ModelNotificationTest("testShort"));
return ts;
}
public static final EDataType[] PRIMITIVE_TYPES =
new EDataType[]
{
EcorePackage.eINSTANCE.getEBoolean(),
EcorePackage.eINSTANCE.getEByte(),
EcorePackage.eINSTANCE.getEChar(),
EcorePackage.eINSTANCE.getEDouble(),
EcorePackage.eINSTANCE.getEFloat(),
EcorePackage.eINSTANCE.getEInt(),
EcorePackage.eINSTANCE.getELong(),
EcorePackage.eINSTANCE.getEShort(),
};
public void testBoolean()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewBooleanValue() != msg.getOldBooleanValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EBooleanValue");
eObject.eSet(eStructuralFeature, true);
eObject.eSet(eStructuralFeature, false);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewBooleanValue() == msg.getOldBooleanValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EBooleanValue");
eObject.eSet(eStructuralFeature, false);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewBooleanValue() == msg.getOldBooleanValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EBooleanValue");
eObject.eSet(eStructuralFeature, false);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewBooleanValue() == msg.getOldBooleanValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EBooleanValueUnsettable");
eObject.eSet(eStructuralFeature, false);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewBooleanValue() == msg.getOldBooleanValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
public void testByte()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewByteValue() != msg.getOldByteValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EByteValue");
eObject.eSet(eStructuralFeature, (byte)1);
eObject.eSet(eStructuralFeature, (byte)0);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewByteValue() == msg.getOldByteValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EByteValue");
eObject.eSet(eStructuralFeature, (byte)0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewByteValue() == msg.getOldByteValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EByteValue");
eObject.eSet(eStructuralFeature, (byte)0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewByteValue() == msg.getOldByteValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EByteValueUnsettable");
eObject.eSet(eStructuralFeature, (byte)0);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewByteValue() == msg.getOldByteValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
public void testChar()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewCharValue() != msg.getOldCharValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ECharValue");
eObject.eSet(eStructuralFeature, (char)1);
eObject.eSet(eStructuralFeature, (char)0);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewCharValue() == msg.getOldCharValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ECharValue");
eObject.eSet(eStructuralFeature, (char)0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewCharValue() == msg.getOldCharValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ECharValue");
eObject.eSet(eStructuralFeature, (char)0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewCharValue() == msg.getOldCharValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ECharValueUnsettable");
eObject.eSet(eStructuralFeature, (char)0);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewCharValue() == msg.getOldCharValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
public void testDouble()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewDoubleValue() != msg.getOldDoubleValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EDoubleValue");
eObject.eSet(eStructuralFeature, 1.0);
eObject.eSet(eStructuralFeature, 0.0);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewDoubleValue() == msg.getOldDoubleValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EDoubleValue");
eObject.eSet(eStructuralFeature, 0.0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewDoubleValue() == msg.getOldDoubleValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EDoubleValue");
eObject.eSet(eStructuralFeature, 0.0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewDoubleValue() == msg.getOldDoubleValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EDoubleValueUnsettable");
eObject.eSet(eStructuralFeature, 0.0);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewDoubleValue() == msg.getOldDoubleValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
public void testFloat()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewFloatValue() != msg.getOldFloatValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EFloatValue");
eObject.eSet(eStructuralFeature, 1.0F);
eObject.eSet(eStructuralFeature, 0.0F);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewFloatValue() == msg.getOldFloatValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EFloatValue");
eObject.eSet(eStructuralFeature, 0.0F);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewFloatValue() == msg.getOldFloatValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EFloatValue");
eObject.eSet(eStructuralFeature, 0.0F);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewFloatValue() == msg.getOldFloatValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EFloatValueUnsettable");
eObject.eSet(eStructuralFeature, 0.0F);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewFloatValue() == msg.getOldFloatValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
public void testInt()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewIntValue() != msg.getOldIntValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EIntValue");
eObject.eSet(eStructuralFeature, 1);
eObject.eSet(eStructuralFeature, 0);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewIntValue() == msg.getOldIntValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EIntValue");
eObject.eSet(eStructuralFeature, 0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewIntValue() == msg.getOldIntValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EIntValue");
eObject.eSet(eStructuralFeature, 0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewIntValue() == msg.getOldIntValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EIntValueUnsettable");
eObject.eSet(eStructuralFeature, 0);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewIntValue() == msg.getOldIntValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
public void testLong()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewLongValue() != msg.getOldLongValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ELongValue");
eObject.eSet(eStructuralFeature, 1L);
eObject.eSet(eStructuralFeature, 0L);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewLongValue() == msg.getOldLongValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ELongValue");
eObject.eSet(eStructuralFeature, 0L);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewLongValue() == msg.getOldLongValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ELongValue");
eObject.eSet(eStructuralFeature, 0L);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewLongValue() == msg.getOldLongValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("ELongValueUnsettable");
eObject.eSet(eStructuralFeature, 0L);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewLongValue() == msg.getOldLongValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
public void testShort()
{
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewShortValue() != msg.getOldShortValue());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EShortValue");
eObject.eSet(eStructuralFeature, (short)1);
eObject.eSet(eStructuralFeature, (short)0);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewShortValue() == msg.getOldShortValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EShortValue");
eObject.eSet(eStructuralFeature, (short)0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewShortValue() == msg.getOldShortValue());
assertFalse(msg.wasSet());
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EShortValue");
eObject.eSet(eStructuralFeature, (short)0);
eObject.eUnset(eStructuralFeature);
}
{
EObject eObject = EcoreUtil.create(valueHolderClass);
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() != Notification.REMOVING_ADAPTER)
{
assertTrue(msg.getNewShortValue() == msg.getOldShortValue());
assertFalse(msg.wasSet());
}
}
});
EStructuralFeature eStructuralFeature = valueHolderClass.getEStructuralFeature("EShortValueUnsettable");
eObject.eSet(eStructuralFeature, (short)0);
eObject.eAdapters().clear();
eObject.eAdapters().add
(new AdapterImpl()
{
@Override
public void notifyChanged(Notification msg)
{
assertTrue(msg.getNewShortValue() == msg.getOldShortValue());
assertTrue(msg.wasSet());
}
});
eObject.eUnset(eStructuralFeature);
}
}
/**
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception
{
EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;
valueHolderClass = ecoreFactory.createEClass();
valueHolderClass.setName("ValueHolder");
EList<EStructuralFeature> valueHolderFeatures = valueHolderClass.getEStructuralFeatures();
for (EDataType eDataType : PRIMITIVE_TYPES)
{
{
EAttribute eAttribute = ecoreFactory.createEAttribute();
eAttribute.setName(eDataType.getName() + "Value");
eAttribute.setEType(eDataType);
valueHolderFeatures.add(eAttribute);
}
{
EAttribute eAttribute = ecoreFactory.createEAttribute();
eAttribute.setName(eDataType.getName() + "ValueUnsettable");
eAttribute.setEType(eDataType);
eAttribute.setUnsettable(true);
valueHolderFeatures.add(eAttribute);
}
}
EPackage testPackage = ecoreFactory.createEPackage();
testPackage.setName("notificationTest");
testPackage.setNsPrefix("notificationTest");
testPackage.setNsURI("http:///com.example.notification.test");
testPackage.getEClassifiers().add(valueHolderClass);
EPackage.Registry.INSTANCE.put(testPackage.getNsURI(), testPackage);
}
/**
* @see junit.framework.TestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception
{
valueHolderClass.getEStructuralFeatures().clear();
valueHolderClass = null;
}
}