svn commit: r912281 - in /ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string: FlexibleStringExpander.java test/FlexibleStringExpanderTests.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r912281 - in /ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string: FlexibleStringExpander.java test/FlexibleStringExpanderTests.java

doogie-3
Author: doogie
Date: Sun Feb 21 01:32:00 2010
New Revision: 912281

URL: http://svn.apache.org/viewvc?rev=912281&view=rev
Log:
BUG FIX: Fix parsing of currency when there is no variable, and no
trailing ).

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java?rev=912281&r1=912280&r2=912281&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java Sun Feb 21 01:32:00 2010
@@ -209,16 +209,20 @@
                 if (end == -1) {
                     end = origLen;
                 }
-                String subExpression = expression.substring(start + 2, end);
                 // Evaluation sequence is important - do not change it
                 if (escapedExpression) {
                     strElems.add(new ConstElem(expression.substring(start, end + 1)));
-                } else if (subExpression.contains("?currency(")) {
-                    strElems.add(new CurrElem(subExpression));
-                } else if (subExpression.contains(openBracket)) {
-                    strElems.add(new NestedVarElem(subExpression));
                 } else {
-                    strElems.add(new VarElem(subExpression));
+                    String subExpression = expression.substring(start + 2, end);
+                    int currencyPos = subExpression.indexOf("?currency(");
+                    int closeParen = currencyPos > 0 ? subExpression.indexOf(")", currencyPos + 10) : -1;
+                    if (closeParen != -1) {
+                        strElems.add(new CurrElem(subExpression));
+                    } else if (subExpression.contains(openBracket)) {
+                        strElems.add(new NestedVarElem(subExpression));
+                    } else {
+                        strElems.add(new VarElem(subExpression));
+                    }
                 }
             }
             // reset the current index to after the expression, and the start to the beginning of the next expression

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java?rev=912281&r1=912280&r2=912281&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java Sun Feb 21 01:32:00 2010
@@ -82,14 +82,13 @@
         parserTest("currency", "${?currency(usd)", "${?currency(usd)");
         parserTest("currency", "${price?currency(usd", "${price?currency(usd");
         parserTest("currency", "${price?currency(usd)", "${price?currency(usd)");
-        // CurrElem doesn't protected itself
-        //parserTest("currency", "${?currency(}", "${?currency(}");
+        parserTest("currency", "${?currency(}", "?currency(");
         parserTest("currency", "${?currency()}", "?currency()");
-        //parserTest("currency", "${?currency(usd}", "${?currency(usd}");
+        parserTest("currency", "${?currency(usd}", "?currency(usd");
         parserTest("currency", "${?currency(usd)}", "?currency(usd)");
-        //parserTest("currency", "${price?currency(}", "${price?currency(}");
+        parserTest("currency", "${price?currency(}", "price?currency(");
         parserTest("currency", "${price?currency()}", "price?currency()");
-        //parserTest("currency", "${price?currency(usd}", "${price?currency(usd}");
+        parserTest("currency", "${price?currency(usd}", "price?currency(usd");
         parserTest("currency", "${price?currency(usd)}", "price?currency(usd)");
         parserTest("currency", "a${price?currency(usd)}b", "a${price?currency(usd)}b");
     }