added extra test for context events
diff --git a/tests/org.eclipse.e4.core.tests.services/src/org/eclipse/e4/core/services/internal/context/EclipseContextTest.java b/tests/org.eclipse.e4.core.tests.services/src/org/eclipse/e4/core/services/internal/context/EclipseContextTest.java
index aa55ed3..996d157 100644
--- a/tests/org.eclipse.e4.core.tests.services/src/org/eclipse/e4/core/services/internal/context/EclipseContextTest.java
+++ b/tests/org.eclipse.e4.core.tests.services/src/org/eclipse/e4/core/services/internal/context/EclipseContextTest.java
@@ -11,6 +11,7 @@
 package org.eclipse.e4.core.services.internal.context;
 
 import junit.framework.TestCase;
+import org.eclipse.e4.core.services.IDisposable;
 import org.eclipse.e4.core.services.context.ContextChangeEvent;
 import org.eclipse.e4.core.services.context.EclipseContextFactory;
 import org.eclipse.e4.core.services.context.IContextFunction;
@@ -151,6 +152,37 @@
 		assertEquals(11, ((Integer) child.get("sum")).intValue());
 	}
 
+	/**
+	 * Tests that listeners receive appropriate {@link ContextChangeEvent} instances that reflect
+	 * the change in the context.
+	 */
+	public void testContextEvents() {
+		final Object[] value = new Object[1];
+		final int[] eventType = new int[] { 0 };
+		IRunAndTrack runnable = new IRunAndTrack() {
+			public boolean notify(ContextChangeEvent event) {
+				runCounter++;
+				eventType[0] = event.getEventType();
+				value[0] = context.get("foo");
+				return true;
+			}
+		};
+		context.runAndTrack(runnable, null);
+		assertEquals(1, runCounter);
+		assertEquals(ContextChangeEvent.INITIAL, eventType[0]);
+		context.set("foo", "bar");
+		assertEquals(2, runCounter);
+		assertEquals(ContextChangeEvent.ADDED, eventType[0]);
+		assertEquals("bar", value[0]);
+		context.remove("foo");
+		assertEquals(ContextChangeEvent.REMOVED, eventType[0]);
+		assertEquals(3, runCounter);
+		((IDisposable) context).dispose();
+		assertEquals(4, runCounter);
+		assertEquals(ContextChangeEvent.DISPOSE, eventType[0]);
+
+	}
+
 	public void testRunAndTrack() {
 		final Object[] value = new Object[1];
 		context.runAndTrack(new IRunAndTrack() {