|
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.
|