You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2009/09/02 20:27:46 UTC
svn commit: r810652 -
/commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java
Author: henrib
Date: Wed Sep 2 18:27:45 2009
New Revision: 810652
URL: http://svn.apache.org/viewvc?rev=810652&view=rev
Log:
Added more expressions to check; the ';' is necessary only between expressions in a statement (not between block,if,while,for)
Modified:
commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java
Modified: commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java?rev=810652&r1=810651&r2=810652&view=diff
==============================================================================
--- commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java (original)
+++ commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java Wed Sep 2 18:27:45 2009
@@ -14,22 +14,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.commons.jexl;
+
import org.apache.commons.jexl.parser.ParseException;
import java.util.Map;
/**
* Test cases for reported issues
*/
-public class IssuesTest extends JexlTestCase {
-
+public class IssuesTest extends JexlTestCase {
@Override
public void setUp() throws Exception {
// ensure jul logging is only error to avoid warning in silent mode
//java.util.logging.Logger.getLogger(JexlEngine.class.getName()).setLevel(java.util.logging.Level.SEVERE);
}
-
+
// JEXL-49: blocks not parsed (fixed)
public void test49() throws Exception {
JexlContext ctxt = JexlHelper.createContext();
@@ -40,23 +39,26 @@
assertTrue("JEXL-49 is not fixed", vars.get("a").equals("b") && vars.get("c").equals("d"));
}
-
// JEXL-48: bad assignment detection
- public static class Another {
+ public static class Another {
private Boolean foo = Boolean.TRUE;
+
public Boolean foo() {
return foo;
}
+
public int goo() {
return 100;
}
}
- public static class Foo {
+ public static class Foo {
private Another inner;
+
Foo() {
inner = new Another();
}
+
public Another getInner() {
return inner;
}
@@ -67,15 +69,14 @@
// ensure errors will throw
jexl.setSilent(false);
String jexlExp = "(foo.getInner().foo() eq true) and (foo.getInner().goo() = (foo.getInner().goo()+1-1))";
- Expression e = jexl.createExpression( jexlExp );
+ Expression e = jexl.createExpression(jexlExp);
JexlContext jc = JexlHelper.createContext();
- jc.getVars().put("foo", new Foo() );
+ jc.getVars().put("foo", new Foo());
try {
/* Object o = */ e.evaluate(jc);
fail("Should have failed due to invalid assignment");
- }
- catch(JexlException xjexl) {
+ } catch (JexlException xjexl) {
// expected
}
}
@@ -88,15 +89,15 @@
jexl.setSilent(false);
JexlContext ctxt = JexlHelper.createContext();
- Expression expr = jexl.createExpression( "true//false\n" );
+ Expression expr = jexl.createExpression("true//false\n");
Object value = expr.evaluate(ctxt);
assertTrue("should be true", ((Boolean) value).booleanValue());
- expr = jexl.createExpression( "/*true*/false" );
+ expr = jexl.createExpression("/*true*/false");
value = expr.evaluate(ctxt);
assertFalse("should be false", ((Boolean) value).booleanValue());
- expr = jexl.createExpression( "/*\"true\"*/false" );
+ expr = jexl.createExpression("/*\"true\"*/false");
value = expr.evaluate(ctxt);
assertFalse("should be false", ((Boolean) value).booleanValue());
}
@@ -109,9 +110,9 @@
// ensure errors will throw
//jexl.setSilent(false);
JexlContext ctxt = JexlHelper.createContext();
- ctxt.getVars().put("ax", "ok" );
+ ctxt.getVars().put("ax", "ok");
- UnifiedJEXL.Expression expr = uel.parse( "${ax+(bx)}" );
+ UnifiedJEXL.Expression expr = uel.parse("${ax+(bx)}");
Object value = expr.evaluate(ctxt);
assertTrue("should be ok", "ok".equals(value));
}
@@ -119,14 +120,14 @@
// JEXL-40: failed to discover all methods (non public class implements public method)
// fixed in ClassMap by taking newer version of populateCache from Velocity
public static abstract class Base {
- public abstract boolean foo();
+ public abstract boolean foo();
}
class Derived extends Base {
- @Override
- public boolean foo() {
- return true;
- }
+ @Override
+ public boolean foo() {
+ return true;
+ }
}
public void test40() throws Exception {
@@ -134,9 +135,9 @@
// ensure errors will throw
jexl.setSilent(false);
JexlContext ctxt = JexlHelper.createContext();
- ctxt.getVars().put("derived", new Derived() );
+ ctxt.getVars().put("derived", new Derived());
- Expression expr = jexl.createExpression( "derived.foo()" );
+ Expression expr = jexl.createExpression("derived.foo()");
Object value = expr.evaluate(ctxt);
assertTrue("should be true", ((Boolean) value).booleanValue());
}
@@ -148,9 +149,10 @@
String[] names = jexl.uberspect.getIntrospector().getMethodNames(Another.class);
assertTrue("should find methods", names.length > 0);
int found = 0;
- for(String name : names) {
- if ("foo".equals(name) || "goo".equals(name))
+ for (String name : names) {
+ if ("foo".equals(name) || "goo".equals(name)) {
found += 1;
+ }
}
assertTrue("should have foo & goo", found == 2);
}
@@ -162,7 +164,7 @@
jexl.setSilent(false);
jexl.setLenient(false);
JexlContext ctxt = JexlHelper.createContext();
- ctxt.getVars().put("a", null );
+ ctxt.getVars().put("a", null);
String[] exprs = {
"10 + null",
@@ -171,13 +173,12 @@
"a % b",
"1000 / a"
};
- for(int e = 0; e < exprs.length; ++e) {
+ for (int e = 0; e < exprs.length; ++e) {
try {
- Expression expr = jexl.createExpression( exprs[e]);
+ Expression expr = jexl.createExpression(exprs[e]);
/* Object value = */ expr.evaluate(ctxt);
fail(exprs[e] + " : should have failed due to null argument");
- }
- catch(JexlException xjexl) {
+ } catch (JexlException xjexl) {
// expected
}
}
@@ -188,7 +189,7 @@
JexlContext ctxt;
JexlEngine jexl = new JexlEngine();
jexl.setSilent(true); // to avoid throwing JexlException on null method call
-
+
Script jscript;
ctxt = JexlHelper.createContext();
@@ -197,7 +198,7 @@
ctxt.getVars().put("dummy", "abcd");
assertEquals(jscript.getText(), Integer.valueOf("abcd".hashCode()), jscript.execute(ctxt)); // OK
-
+
jscript = jexl.createScript("dummy.hashCode");
assertEquals(jscript.getText(), null, jscript.execute(ctxt)); // OK
@@ -224,7 +225,7 @@
e = jexl.createExpression("c.e");
try {
/* Object o = */ e.evaluate(ctxt);
- } catch(JexlException xjexl) {
+ } catch (JexlException xjexl) {
String msg = xjexl.getMessage();
assertTrue(msg.indexOf("variable c.e") > 0);
}
@@ -233,7 +234,7 @@
ctxt.getVars().put("e", Integer.valueOf(2));
try {
/* Object o = */ e.evaluate(ctxt);
- } catch(JexlException xjexl) {
+ } catch (JexlException xjexl) {
String msg = xjexl.getMessage();
assertTrue(msg.indexOf("variable c.e") > 0);
}
@@ -260,30 +261,47 @@
assertEquals("1", modulo.evaluate(ctxt).toString());
}
- // JEXL-90: ';' is necessary between expressions
+ // JEXL-90
public void test90() throws Exception {
JexlContext ctxt = JexlHelper.createContext();
JexlEngine jexl = new JexlEngine();
jexl.setSilent(false);
jexl.setLenient(false);
- String[] exprs = {
+ jexl.setCache(16);
+ // ';' is necessary between expressions
+ String[] fexprs = {
"a=3 b=4",
"while(a) while(a)",
"1 2",
- "if (true) 2; 3 {}"
+ "if (true) 2; 3 {}",
+ "while (x) 1 if (y) 2 3"
};
- for(int s = 0; s < exprs.length; ++s) {
+ for (int f = 0; f < fexprs.length; ++f) {
boolean fail = true;
try {
- Script e = jexl.createScript(exprs[s]);
- }
- catch(ParseException xany) {
+ Script s = jexl.createScript(fexprs[f]);
+ } catch (ParseException xany) {
// expected to fail in parse
fail = false;
}
if (fail) {
- fail(exprs[s] + ": Should have failed in parse");
+ fail(fexprs[f] + ": Should have failed in parse");
}
}
+ // ';' is necessary between expressions and only expressions
+ String[] exprs = {
+ "if (x) {1} if (y) {2}",
+ "if (x) 1 if (y) 2",
+ "while (x) 1 if (y) 2 else 3",
+ "for(z : [3, 4, 5]) { z } y ? 2 : 1",
+ "for(z : [3, 4, 5]) { z } if (y) 2 else 1"
+ };
+ ctxt.getVars().put("x", false);
+ ctxt.getVars().put("y", true);
+ for (int e = 0; e < exprs.length; ++e) {
+ Script s = jexl.createScript(exprs[e]);
+ assertEquals(2, s.execute(ctxt));
+ }
+ debuggerCheck(jexl);
}
-}
\ No newline at end of file
+}