From: <cr...@us...> - 2009-02-02 11:01:03
|
Revision: 4979 http://jnode.svn.sourceforge.net/jnode/?rev=4979&view=rev Author: crawley Date: 2009-02-02 11:00:56 +0000 (Mon, 02 Feb 2009) Log Message: ----------- Implemented S{param<op>word} expansions for <op> '?', ':?', '-' and ':-' Modified Paths: -------------- trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneBuiltin.java trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml Modified: trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneBuiltin.java =================================================================== --- trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneBuiltin.java 2009-02-02 09:23:07 UTC (rev 4978) +++ trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneBuiltin.java 2009-02-02 11:00:56 UTC (rev 4979) @@ -20,6 +20,7 @@ package org.jnode.shell.bjorne; +import org.jnode.shell.Command; import org.jnode.shell.CommandLine; import org.jnode.shell.ShellException; @@ -29,7 +30,7 @@ BjorneContext context) throws ShellException; void error(String msg, BjorneContext context) { - context.resolvePrintStream(context.getStream(2)).println(msg); + context.resolvePrintStream(context.getStream(Command.STD_ERR)).println(msg); } } Modified: trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java =================================================================== --- trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java 2009-02-02 09:23:07 UTC (rev 4978) +++ trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java 2009-02-02 11:00:56 UTC (rev 4979) @@ -547,7 +547,7 @@ return sb; } - private String dollarExpansion(CharIterator ci, char quote) throws ShellSyntaxException { + private String dollarExpansion(CharIterator ci, char quote) throws ShellException { int ch = ci.nextCh(); switch (ch) { case -1: @@ -587,7 +587,7 @@ } } - private String dollarBraceExpansion(CharIterator ci) throws ShellSyntaxException { + private String dollarBraceExpansion(CharIterator ci) throws ShellException { // Scan to the '}' that matches the '${' StringBuffer sb = new StringBuffer(); int braceLevel = 1; @@ -722,9 +722,10 @@ case HYPHEN: case HASH: case PERCENT: + i++; break; default: - i++; + i += 2; break; } // Extract the word @@ -739,6 +740,26 @@ return (value != null) ? value : ""; case PREHASH: return (value != null) ? Integer.toString(value.length()) : "0"; + case HYPHEN: + return (value == null) ? word : value; + case COLONHYPHEN: + return (value == null || value.length() == 0) ? word : value; + case QUERY: + if (value == null) { + String msg = word.length() > 0 ? word : (parameter + " is unset"); + resolvePrintStream(getStream(Command.STD_ERR)).println(msg); + throw new BjorneControlException(BjorneInterpreter.BRANCH_EXIT, 1); + } else { + return value; + } + case COLONQUERY: + if (value == null || value.length() == 0) { + String msg = word.length() > 0 ? word : (parameter + " is unset or null"); + resolvePrintStream(getStream(Command.STD_ERR)).println(msg); + throw new BjorneControlException(BjorneInterpreter.BRANCH_EXIT, 1); + } else { + return value; + } default: throw new ShellFailureException("not implemented"); } Modified: trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml =================================================================== --- trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml 2009-02-02 09:23:07 UTC (rev 4978) +++ trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml 2009-02-02 11:00:56 UTC (rev 4979) @@ -141,14 +141,90 @@ <runMode>AS_SCRIPT</runMode> <script>#!bjorne A=cat + B= echo A is $A echo A is ${A} + echo B is $B + echo B is ${B} + echo X is $X + echo X is ${X} echo A length is ${#A} + echo B length is ${#B} + echo X length is ${#X} + echo A :- dog is ${A:-dog} + echo B :- dog is ${B:-dog} + echo X :- dog is ${X:-dog} + echo A - dog is ${A-dog} + echo B - dog is ${B-dog} + echo X - dog is ${X-dog} </script> <output>A is cat A is cat +B is +B is +X is +X is A length is 3 +B length is 0 +X length is 0 +A :- dog is cat +B :- dog is dog +X :- dog is dog +A - dog is cat +B - dog is +X - dog is dog </output> <rc>0</rc> </testSpec> + <testSpec> + <title>${..?..} expansions #1</title> + <command>test</command> + <runMode>AS_SCRIPT</runMode> + <script>#!bjorne + A=cat + B= + echo A :? dog is ${A:?dog} + echo B :? dog is ${B:?dog} + echo X :? dog is ${X:?dog} + </script> + <output>A :? dog is cat +</output> + <error>dog +</error> + <rc>1</rc> + </testSpec> + <testSpec> + <title>${..?..} expansions #2</title> + <command>test</command> + <runMode>AS_SCRIPT</runMode> + <script>#!bjorne + A=cat + B= + echo A :? dog is ${A:?dog} + echo X :? dog is ${X:?dog} + </script> + <output>A :? dog is cat +</output> + <error>dog +</error> + <rc>1</rc> + </testSpec> + <testSpec> + <title>${..?..} expansions #3</title> + <command>test</command> + <runMode>AS_SCRIPT</runMode> + <script>#!bjorne + A=cat + B= + echo A ? dog is ${A?dog} + echo B ? dog is ${B?dog} + echo X ? dog is ${X?dog} + </script> + <output>A ? dog is cat +B ? dog is +</output> + <error>dog +</error> + <rc>1</rc> + </testSpec> </testSpecs> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |