Author: gvanmatre
Date: Sat Oct 21 15:46:02 2006
New Revision: 466600
URL: http://svn.apache.org/viewvc?view=rev&rev=466600
Log:
Added better mock value binding expression support for scoped attribute names
that contain dotted values.
Modified:
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/el/MockValueExpression.java
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/mock/MockValueBinding.java
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/el/MockExpressionFactoryTestCase.java
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/mock/ValueBindingTest.java
Modified:
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/el/MockValueExpression.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/el/MockValueExpression.java?view=diff&rev=466600&r1=466599&r2=466600
==============================================================================
---
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/el/MockValueExpression.java
(original)
+++
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/el/MockValueExpression.java
Sat Oct 21 15:46:02 2006
@@ -264,19 +264,34 @@
}
if (expression.startsWith("${") || expression.startsWith("#{")) {
- if (expression.endsWith("}")) {
- String temp = expression.substring(2, expression.length() -
1).replaceAll(" ", "");
+ if (expression.endsWith("}")) {
List names = new ArrayList();
- while (temp.length() > 0) {
- int period= temp.indexOf(".");
- if (period >= 0) {
- names.add(temp.substring(0, period));
- temp = temp.substring(period + 1);
- } else {
- names.add(temp);
- temp = "";
+ StringBuffer expr = new StringBuffer(expression.substring(2,
expression.length() - 1).replaceAll(" ", ""));
+ boolean isBlockOn = false;
+ next: for (int i = expr.length() - 1; i > -1; i--) {
+ if (expr.charAt(i) == ' ') {
+ expr.deleteCharAt(i);
+ } else if (expr.charAt(i) == ']') {
+ expr.deleteCharAt(i);
+ } else if (expr.charAt(i) == '[') {
+ expr.deleteCharAt(i);
+ } else if (expr.charAt(i) == '\'') {
+ if (!isBlockOn) {
+ expr.deleteCharAt(i);
+ } else {
+ names.add(0, expr.substring(i + 1));
+ expr.delete(i, expr.length());
+ }
+ isBlockOn = !isBlockOn;
+ } else if (expr.charAt(i) == '.' && !isBlockOn) {
+ names.add(0, expr.substring(i + 1));
+ expr.delete(i, expr.length());
}
}
+ if (expr.length() > 0) {
+ names.add(0, expr.toString());
+ }
+
elements = (String[]) names.toArray(new String[names.size()]);
} else {
throw new IllegalArgumentException(expression);
Modified:
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/mock/MockValueBinding.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/mock/MockValueBinding.java?view=diff&rev=466600&r1=466599&r2=466600
==============================================================================
---
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/mock/MockValueBinding.java
(original)
+++
shale/framework/trunk/shale-test/src/main/java/org/apache/shale/test/mock/MockValueBinding.java
Sat Oct 21 15:46:02 2006
@@ -326,27 +326,43 @@
*/
private List parse(String ref) {
- String expr = ref.replaceAll(" ", "");
List names = new ArrayList();
- while (expr.length() > 0) {
- int period = expr.indexOf(".");
- if (period >= 0) {
- names.add(expr.substring(0, period));
- expr = expr.substring(period + 1);
- } else {
- names.add(expr);
- expr = "";
+ StringBuffer expr = new StringBuffer(ref);
+ boolean isBlockOn = false;
+ next: for (int i = expr.length() - 1; i > -1; i--) {
+ if (expr.charAt(i) == ' ') {
+ expr.deleteCharAt(i);
+ } else if (expr.charAt(i) == ']') {
+ expr.deleteCharAt(i);
+ } else if (expr.charAt(i) == '[') {
+ expr.deleteCharAt(i);
+ } else if (expr.charAt(i) == '\'') {
+ if (!isBlockOn) {
+ expr.deleteCharAt(i);
+ } else {
+ names.add(0, expr.substring(i + 1));
+ expr.delete(i, expr.length());
+ }
+ isBlockOn = !isBlockOn;
+ } else if (expr.charAt(i) == '.' && !isBlockOn) {
+ names.add(0, expr.substring(i + 1));
+ expr.delete(i, expr.length());
}
}
+
+ if (expr.length() > 0) {
+ names.add(0, expr.toString());
+ }
+
if (names.size() < 1) {
throw new ReferenceSyntaxException("No expression in '"
- + ref + "'");
+ + ref + "'");
}
for (int i = 0; i < names.size(); i++) {
String name = (String) names.get(i);
if (name.length() < 1) {
throw new ReferenceSyntaxException("Invalid expression '"
- + ref + "'");
+ + ref + "'");
}
}
return (names);
Modified:
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/el/MockExpressionFactoryTestCase.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/el/MockExpressionFactoryTestCase.java?view=diff&rev=466600&r1=466599&r2=466600
==============================================================================
---
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/el/MockExpressionFactoryTestCase.java
(original)
+++
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/el/MockExpressionFactoryTestCase.java
Sat Oct 21 15:46:02 2006
@@ -320,6 +320,19 @@
}
+ // Test ValueExpression
+ public void testValueExpressionString() {
+
+ request.setAttribute("org.apache.shale.test", new Integer(123));
+ ELContext context = facesContext.getELContext();
+
+ ValueExpression expr = factory.createValueExpression(context,
"#{requestScope['org.apache.shale.test']}", String.class);
+ Object ref = expr.getValue(context);
+ assertNotNull(ref);
+ assertTrue(ref instanceof String);
+ assertEquals("123", ref);
+ }
+
public void testPristine() {
assertNotNull(factory);
Modified:
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/mock/ValueBindingTest.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/mock/ValueBindingTest.java?view=diff&rev=466600&r1=466599&r2=466600
==============================================================================
---
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/mock/ValueBindingTest.java
(original)
+++
shale/framework/trunk/shale-test/src/test/java/org/apache/shale/test/mock/ValueBindingTest.java
Sat Oct 21 15:46:02 2006
@@ -59,6 +59,21 @@
assertEquals("Matthias", vb.getValue(facesContext).toString());
+ vb =
facesContext.getApplication().createValueBinding("#{requestScope['bean']}");
+
+ Bean copy = (Bean) vb.getValue(facesContext);
+ assertNotNull(copy);
+ assertTrue(bean == copy);
+
+
facesContext.getExternalContext().getRequestMap().put("org.apache.shale.bean",
+ bean);
+
+ vb =
facesContext.getApplication().createValueBinding("#{requestScope['org.apache.shale.bean']}");
+
+ copy = (Bean) vb.getValue(facesContext);
+ assertNotNull(copy);
+ assertTrue(bean == copy);
+
}