Fix subshell scope variable support

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/80284654
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/80284654
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/80284654

Branch: refs/heads/master
Commit: 802846541117c94b1ef83f9c22346b3921338c16
Parents: c999ac9
Author: Guillaume Nodet <[email protected]>
Authored: Tue Dec 17 12:10:33 2013 +0100
Committer: Guillaume Nodet <[email protected]>
Committed: Tue Dec 17 17:49:23 2013 +0100

----------------------------------------------------------------------
 .../apache/karaf/shell/console/ExitAction.java  |  5 ++--
 .../apache/karaf/shell/commands/Context.java    |  5 ++++
 .../karaf/shell/commands/TestCommands.java      | 30 ++++++++++++++++++++
 3 files changed, 38 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/80284654/shell/console/src/main/java/org/apache/karaf/shell/console/ExitAction.java
----------------------------------------------------------------------
diff --git 
a/shell/console/src/main/java/org/apache/karaf/shell/console/ExitAction.java 
b/shell/console/src/main/java/org/apache/karaf/shell/console/ExitAction.java
index 499720e..1449315 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/ExitAction.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/ExitAction.java
@@ -29,15 +29,16 @@ public class ExitAction extends AbstractAction {
     public Object doExecute() throws Exception {
         // get the current sub-shell
         String currentSubShell = (String) session.get("SUBSHELL");
-        String currentScope = (String) session.get("SCOPE");
         if (!currentSubShell.isEmpty()) {
             if (currentSubShell.contains(":")) {
                 int index = currentSubShell.lastIndexOf(":");
                 session.put("SUBSHELL", currentSubShell.substring(0, index));
-                session.put("SCOPE", currentScope.substring(0, index));
             } else {
                 session.put("SUBSHELL", "");
             }
+            String currentScope = (String) session.get("SCOPE");
+            int index = currentScope.indexOf(":");
+            session.put("SCOPE", currentScope.substring(index + 1));
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/80284654/shell/console/src/test/java/org/apache/karaf/shell/commands/Context.java
----------------------------------------------------------------------
diff --git 
a/shell/console/src/test/java/org/apache/karaf/shell/commands/Context.java 
b/shell/console/src/test/java/org/apache/karaf/shell/commands/Context.java
index 5288142..2ddee05 100644
--- a/shell/console/src/test/java/org/apache/karaf/shell/commands/Context.java
+++ b/shell/console/src/test/java/org/apache/karaf/shell/commands/Context.java
@@ -59,5 +59,10 @@ public class Context extends CommandProcessorImpl
         session.put(name, value);
     }
 
+    public Object get(String name)
+    {
+        return session.get(name);
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/80284654/shell/console/src/test/java/org/apache/karaf/shell/commands/TestCommands.java
----------------------------------------------------------------------
diff --git 
a/shell/console/src/test/java/org/apache/karaf/shell/commands/TestCommands.java 
b/shell/console/src/test/java/org/apache/karaf/shell/commands/TestCommands.java
index 387f301..e43595f 100644
--- 
a/shell/console/src/test/java/org/apache/karaf/shell/commands/TestCommands.java
+++ 
b/shell/console/src/test/java/org/apache/karaf/shell/commands/TestCommands.java
@@ -28,9 +28,24 @@ import java.io.InputStreamReader;
 import junit.framework.TestCase;
 import org.apache.karaf.shell.commands.basic.SimpleCommand;
 import org.apache.felix.service.command.CommandSession;
+import org.apache.karaf.shell.console.ExitAction;
+import org.apache.karaf.shell.console.SubShellAction;
 
 public class TestCommands extends TestCase {
 
+    public void testSubShellScope() throws Exception {
+        Context c = new Context();
+        c.set("SCOPE", "*");
+        c.addCommand("foo", new SimpleSubShell("foo"));
+        c.addCommand("exit", new SimpleCommand(ExitAction.class));
+
+        String scope = (String) c.get("SCOPE");
+        c.execute("foo");
+        assertEquals("foo:" + scope, c.get("SCOPE"));
+        c.execute("exit");
+        assertEquals(scope, c.get("SCOPE"));
+    }
+
     public void testPrompt() throws Exception {
         Context c = new Context();
         c.addCommand("echo", this);
@@ -161,4 +176,19 @@ public class TestCommands extends TestCase {
 
     }
 
+    public static class SimpleSubShell extends SimpleCommand {
+        private final String subshell;
+        public SimpleSubShell(String subshell) {
+            super(SubShellAction.class);
+            this.subshell = subshell;
+        }
+
+        @Override
+        public Action createNewAction() {
+            SubShellAction action = (SubShellAction) super.createNewAction();
+            action.setSubShell(subshell);
+            return action;
+        }
+    }
+
 }

Reply via email to