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; + } + } + }
