Regression test for Bug 284604 [Compatibility] Working the e4 SDK gets slower and slower
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 d49af37..9c87516 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
@@ -51,6 +51,7 @@
this.parentContext.set(IContextConstants.DEBUG_STRING, getName() + "-parent");
this.context = EclipseContextFactory.create(parentContext, null);
context.set(IContextConstants.DEBUG_STRING, getName());
+ runCounter = 0;
}
public void testContainsKey() {
@@ -170,4 +171,37 @@
assertEquals("bam", value[0]);
}
+ public void testRunAndTrackMultipleValues() {
+ IEclipseContext parent = EclipseContextFactory.create();
+ final IEclipseContext child = EclipseContextFactory.create(parent, null);
+ parent.set("parentValue", "x");
+ parent.set(IContextConstants.DEBUG_STRING, "ParentContext");
+ child.set("childValue", "x");
+ child.set(IContextConstants.DEBUG_STRING, "ChildContext");
+ Runnable runnable = new Runnable() {
+ public void run() {
+ runCounter++;
+ if (runCounter < 2)
+ child.get("childValue");
+ if (runCounter < 3)
+ child.get("parentValue");
+ }
+ };
+ child.runAndTrack(runnable);
+ assertEquals(1, runCounter);
+ child.set("childValue", "z");
+ assertEquals(2, runCounter);
+ parent.set("parentValue", "z");
+ assertEquals(3, runCounter);
+ // at this point we should no longer be listening
+ child.set("childValue", "y");
+ assertEquals(3, runCounter);
+ parent.set("parentValue", "y");
+ assertEquals(3, runCounter);
+ // TODO this shouldn't be required
+ ((EclipseContext) child).removeRunAndTrack(runnable);
+ assertTrue(TestHelper.getListeners(child).isEmpty());
+ assertTrue(TestHelper.getListeners(parent).isEmpty());
+ }
+
}