Bug 371289 - Add "active" context variables
diff --git a/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/internal/tests/contexts/ActivationTest.java b/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/internal/tests/contexts/ActivationTest.java
index 8c12eb4..b33efd4 100644
--- a/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/internal/tests/contexts/ActivationTest.java
+++ b/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/internal/tests/contexts/ActivationTest.java
@@ -11,11 +11,16 @@
 
 package org.eclipse.e4.core.internal.tests.contexts;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+
 import junit.framework.TestCase;
 
 import org.eclipse.e4.core.contexts.ContextFunction;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
 import org.eclipse.e4.core.contexts.EclipseContextFactory;
 import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.contexts.RunAndTrack;
 
 public class ActivationTest extends TestCase {
 
@@ -104,4 +109,82 @@
 		assertEquals(child22, child2.getActiveLeaf());
 		assertEquals("child22", child2.get("testRAT"));
 	}
+	
+	public void testGetActive() {
+		IEclipseContext root = EclipseContextFactory.create("root");
+		
+		IEclipseContext child1 = root.createChild("child1");
+		IEclipseContext child11 = child1.createChild("child11");
+		IEclipseContext child12 = child1.createChild("child12");
+		
+		IEclipseContext child2 = root.createChild("child2");
+		IEclipseContext child21 = child2.createChild("child21");
+		IEclipseContext child22 = child2.createChild("child22");
+		
+		child11.set("var", "1");
+		child12.set("var", "2");
+		child1.set("var", "3");
+		child21.set("var", "4");
+		child22.set("var", "5");
+		child2.set("var", "6");
+		root.set("var", "7");
+		
+		// nothing is active - we get value from the node
+		assertEquals("7", child2.getActive("var"));
+		
+		child11.activateBranch();
+		assertEquals("1", child2.getActive("var"));
+		child12.activateBranch();
+		assertEquals("2", child2.getActive("var"));
+		child22.activateBranch();
+		assertEquals("5", child2.getActive("var"));
+	}
+	
+	public void testGetActiveRAT() {
+		IEclipseContext root = EclipseContextFactory.create("root");
+		
+		IEclipseContext child1 = root.createChild("child1");
+		IEclipseContext child11 = child1.createChild("child11");
+		IEclipseContext child12 = child1.createChild("child12");
+		
+		IEclipseContext child2 = root.createChild("child2");
+		IEclipseContext child21 = child2.createChild("child21");
+		IEclipseContext child22 = child2.createChild("child22");
+		
+		child11.set("var", "1");
+		child12.set("var", "2");
+		child1.set("var", "3");
+		child21.set("var", "4");
+		child22.set("var", "5");
+		child2.set("var", "6");
+		root.set("var", "7");
+		
+		final String[] result = new String[1];
+		
+		child2.runAndTrack(new RunAndTrack() {
+			public boolean changed(IEclipseContext context) {
+				result[0] = (String) context.getActive("var");
+				return true;
+			}});
+		
+		// nothing is active - we get value from the node
+		assertEquals("7", result[0]);
+		
+		child11.activateBranch();
+		assertEquals("1", result[0]);
+		child12.activateBranch();
+		assertEquals("2", result[0]);
+		child22.activateBranch();
+		assertEquals("5", result[0]);
+	}
+	
+	public static class ActiveInject {
+		//@Inject @Named("var")
+		public String value;
+		
+		@Inject
+		public void setValue(@Named("var") String value) {
+			this.value = value;
+		}
+	}
 }