diff --git a/src/main/java/ognl/ASTChain.java b/src/main/java/ognl/ASTChain.java index c15a5141..fadce07b 100644 --- a/src/main/java/ognl/ASTChain.java +++ b/src/main/java/ognl/ASTChain.java @@ -78,10 +78,15 @@ public void jjtClose() protected Object getValueBody(OgnlContext context, Object source) throws OgnlException { - Object result = source; + // short-circuit the chain only in case if the root is null + if (source == null) { + return null; + } + Object result = source; for(int i = 0, ilast = _children.length - 1; i <= ilast; ++i) { + boolean handled = false; if (i < ilast) { @@ -124,7 +129,7 @@ protected Object getValueBody(OgnlContext context, Object source) + "'"); } } } - if (!handled) + if (!handled) { result = OgnlRuntime.getIndexedProperty(context, result, propertyNode.getProperty(context, result).toString(), diff --git a/src/main/java/ognl/OgnlRuntime.java b/src/main/java/ognl/OgnlRuntime.java index bc30fb35..82968202 100644 --- a/src/main/java/ognl/OgnlRuntime.java +++ b/src/main/java/ognl/OgnlRuntime.java @@ -3239,7 +3239,7 @@ public static PropertyAccessor getPropertyAccessor(Class cls) if (answer != null) return answer; - throw new OgnlException("No property accessor for class " + cls); + throw new OgnlException("No property accessor for " + getTargetClass(cls).getName()); } public static ElementsAccessor getElementsAccessor(Class cls) @@ -3326,32 +3326,23 @@ private static Object getHandler(Class forClass, ClassCache handlers) public static Object getProperty(OgnlContext context, Object source, Object name) throws OgnlException { - PropertyAccessor accessor; - if (source == null) { throw new OgnlException("source is null for getProperty(null, \"" + name + "\")"); } - if ((accessor = getPropertyAccessor(getTargetClass(source))) == null) - { - throw new OgnlException("No property accessor for " + getTargetClass(source).getName()); - } + PropertyAccessor accessor = getPropertyAccessor(getTargetClass(source)); return accessor.getProperty(context, source, name); } public static void setProperty(OgnlContext context, Object target, Object name, Object value) throws OgnlException { - PropertyAccessor accessor; - if (target == null) { throw new OgnlException("target is null for setProperty(null, \"" + name + "\", " + value + ")"); } - if ((accessor = getPropertyAccessor(getTargetClass(target))) == null) { - throw new OgnlException("No property accessor for " + getTargetClass(target).getName()); - } + PropertyAccessor accessor = getPropertyAccessor(getTargetClass(target)); accessor.setProperty(context, target, name, value); } diff --git a/src/test/java/org/ognl/test/ArithmeticAndLogicalOperatorsTest.java b/src/test/java/org/ognl/test/ArithmeticAndLogicalOperatorsTest.java index 3546cdf7..ee8a1b07 100644 --- a/src/test/java/org/ognl/test/ArithmeticAndLogicalOperatorsTest.java +++ b/src/test/java/org/ognl/test/ArithmeticAndLogicalOperatorsTest.java @@ -34,265 +34,270 @@ import java.math.BigDecimal; -public class ArithmeticAndLogicalOperatorsTest extends OgnlTestCase -{ +public class ArithmeticAndLogicalOperatorsTest extends OgnlTestCase { + + // Basic enumeration + public enum EnumNoBody { + ENUM1, ENUM2 + } + + // Enumeration whose elements have (empty) bodies + public enum EnumEmptyBody { + ENUM1 {}, ENUM2 {} + } + + // Enumeration whose elements have bodies + public enum EnumBasicBody { + ENUM1 { + public final Integer value() { + return Integer.valueOf(10); + } + }, + ENUM2 { + public final Integer value() { + return Integer.valueOf(20); + } + } + } - public enum EnumNoBody { ENUM1, ENUM2; }; // Basic enumeration - public enum EnumEmptyBody { ENUM1{}, ENUM2{}; }; // Enumeration whose elements have (empty) bodies - public enum EnumBasicBody { ENUM1{ public final Integer value() { return Integer.valueOf(10);} }, - ENUM2{ public final Integer value() { return Integer.valueOf(20);} }; }; // Enumeration whose elements have bodies protected static final String FULLY_QUALIFIED_CLASSNAME = ArithmeticAndLogicalOperatorsTest.class.getName(); - private static Object[][] TESTS = { + private static final Object[][] TESTS = { // Double-valued arithmetic expressions - { "-1d", new Double(-1) }, - { "+1d", new Double(1) }, - { "--1f", new Double(1) }, - { "2*2.0", new Double(4.0) }, - { "5/2.", new Double(2.5) }, - { "5+2D", new Double(7) }, - { "5f-2F", new Double(3.0) }, - { "5.+2*3", new Double(11) }, - { "(5.+2)*3", new Double(21) }, + {"-1d", (double) -1}, + {"+1d", 1.0}, + {"--1f", 1.0}, + {"2*2.0", 4.0}, + {"5/2.", 2.5}, + {"5+2D", 7.0}, + {"5f-2F", 3.0}, + {"5.+2*3", 11.0}, + {"(5.+2)*3", 21.0}, // BigDecimal-valued arithmetic expressions - { "-1b", new Integer(-1) }, - { "+1b", new Integer(1) }, - { "--1b", new Integer(1) }, - { "2*2.0b", new Double(4.0) }, - { "5/2.B", new Integer(2) }, - { "5.0B/2", new Double(2.5) }, - { "5+2b", new Integer(7) }, - { "5-2B", new Integer(3) }, - { "5.+2b*3", new Double(11) }, - { "(5.+2b)*3", new Double(21) }, + {"-1b", -1}, + {"+1b", 1}, + {"--1b", 1}, + {"2*2.0b", 4.0}, + {"5/2.B", 2}, + {"5.0B/2", 2.5}, + {"5+2b", 7}, + {"5-2B", 3}, + {"5.+2b*3", 11.0}, + {"(5.+2b)*3", 21.0}, // Integer-valued arithmetic expressions - { "-1", new Integer(-1) }, - { "+1", new Integer(1) }, - { "--1", new Integer(1) }, - { "2*2", new Integer(4) }, - { "5/2", new Integer(2) }, - { "5+2", new Integer(7) }, - { "5-2", new Integer(3) }, - { "5+2*3", new Integer(11) }, - { "(5+2)*3", new Integer(21) }, - { "~1", new Integer(~1) }, - { "5%2", new Integer(1) }, - { "5<<2", new Integer(20) }, - { "5>>2", new Integer(1) }, - { "5>>1+1", new Integer(1) }, - { "-5>>>2", new Integer(-5 >>> 2)}, - { "-5L>>>2", new Long(-5L >>> 2) }, - { "5. & 3", new Long(1) }, - { "5 ^3", new Integer(6) }, - { "5l&3|5^3", new Long(7) }, - { "5&(3|5^3)", new Long(5) }, - { "true ? 1 : 1/0", new Integer(1) }, + {"-1", -1}, + {"+1", 1}, + {"--1", 1}, + {"2*2", 4}, + {"5/2", 2}, + {"5+2", 7}, + {"5-2", 3}, + {"5+2*3", 11}, + {"(5+2)*3", 21}, + {"~1", ~1}, + {"5%2", 1}, + {"5<<2", 20}, + {"5>>2", 1}, + {"5>>1+1", 1}, + {"-5>>>2", -5 >>> 2}, + {"-5L>>>2", -5L >>> 2}, + {"5. & 3", 1L}, + {"5 ^3", 6}, + {"5l&3|5^3", 7L}, + {"5&(3|5^3)", 5L}, + {"true ? 1 : 1/0", 1}, // BigInteger-valued arithmetic expressions - { "-1h", Integer.valueOf(-1) }, - { "+1H", Integer.valueOf(1) }, - { "--1h", Integer.valueOf(1) }, - { "2h*2", Integer.valueOf(4) }, - { "5/2h", Integer.valueOf(2) }, - { "5h+2", Integer.valueOf(7) }, - { "5-2h", Integer.valueOf(3) }, - { "5+2H*3", Integer.valueOf(11) }, - { "(5+2H)*3", Integer.valueOf(21) }, - { "~1h", Integer.valueOf(~1) }, - { "5h%2", Integer.valueOf(1) }, - { "5h<<2", Integer.valueOf(20) }, - { "5h>>2", Integer.valueOf(1) }, - { "5h>>1+1", Integer.valueOf(1) }, - { "-5h>>>2", Integer.valueOf(-2) }, - { "5.b & 3", new Long(1) }, - { "5h ^3", Integer.valueOf(6) }, - { "5h&3|5^3", new Long(7) }, - { "5H&(3|5^3)", new Long(5) }, + {"-1h", -1}, + {"+1H", 1}, + {"--1h", 1}, + {"2h*2", 4}, + {"5/2h", 2}, + {"5h+2", 7}, + {"5-2h", 3}, + {"5+2H*3", 11}, + {"(5+2H)*3", 21}, + {"~1h", ~1}, + {"5h%2", 1}, + {"5h<<2", 20}, + {"5h>>2", 1}, + {"5h>>1+1", 1}, + {"-5h>>>2", -2}, + {"5.b & 3", 1L}, + {"5h ^3", 6}, + {"5h&3|5^3", 7L}, + {"5H&(3|5^3)", 5L}, // Logical expressions - { "!1", Boolean.FALSE }, - { "!null", Boolean.TRUE }, - { "5<2", Boolean.FALSE }, - { "5>2", Boolean.TRUE }, - { "5<=5", Boolean.TRUE }, - { "5>=3", Boolean.TRUE }, - { "5<-5>>>2", Boolean.TRUE }, - { "5==5.0", Boolean.TRUE }, - { "5!=5.0", Boolean.FALSE }, - { "null in {true,false,null}", Boolean.TRUE }, - { "null not in {true,false,null}", Boolean.FALSE }, - { "null in {true,false,null}.toArray()", Boolean.TRUE }, - { "5 in {true,false,null}", Boolean.FALSE }, - { "5 not in {true,false,null}", Boolean.TRUE }, - { "5 instanceof java.lang.Integer", Boolean.TRUE }, - { "5. instanceof java.lang.Integer", Boolean.FALSE }, - { "!false || true", Boolean.TRUE}, - { "!(true && true)", Boolean.FALSE}, - { "(1 > 0 && true) || 2 > 0", Boolean.TRUE}, + {"!1", Boolean.FALSE}, + {"!null", Boolean.TRUE}, + {"5<2", Boolean.FALSE}, + {"5>2", Boolean.TRUE}, + {"5<=5", Boolean.TRUE}, + {"5>=3", Boolean.TRUE}, + {"5<-5>>>2", Boolean.TRUE}, + {"5==5.0", Boolean.TRUE}, + {"5!=5.0", Boolean.FALSE}, + {"null in {true,false,null}", Boolean.TRUE}, + {"null not in {true,false,null}", Boolean.FALSE}, + {"null in {true,false,null}.toArray()", Boolean.TRUE, new Object[]{}}, + {"5 in {true,false,null}", Boolean.FALSE}, + {"5 not in {true,false,null}", Boolean.TRUE}, + {"5 instanceof java.lang.Integer", Boolean.TRUE}, + {"5. instanceof java.lang.Integer", Boolean.FALSE}, + {"!false || true", Boolean.TRUE}, + {"!(true && true)", Boolean.FALSE}, + {"(1 > 0 && true) || 2 > 0", Boolean.TRUE}, // Logical expressions (string versions) - { "2 or 0", Integer.valueOf(2)}, - { "1 and 0", Integer.valueOf(0) }, - { "1 bor 0", new Integer(1) }, - { "true && 12", Integer.valueOf(12)}, - { "1 xor 0", new Integer(1) }, { "1 band 0", new Long(0) }, { "1 eq 1", Boolean.TRUE }, - { "1 neq 1", Boolean.FALSE }, { "1 lt 5", Boolean.TRUE }, { "1 lte 5", Boolean.TRUE }, - { "1 gt 5", Boolean.FALSE }, { "1 gte 5", Boolean.FALSE }, { "1 lt 5", Boolean.TRUE }, - { "1 shl 2", new Integer(4) }, { "4 shr 2", new Integer(1) }, { "4 ushr 2", new Integer(1) }, - { "not null", Boolean.TRUE }, { "not 1", Boolean.FALSE }, + {"2 or 0", 2}, + {"1 and 0", 0}, + {"1 bor 0", 1}, + {"true && 12", 12}, + {"1 xor 0", 1}, {"1 band 0", 0L}, {"1 eq 1", Boolean.TRUE}, + {"1 neq 1", Boolean.FALSE}, {"1 lt 5", Boolean.TRUE}, {"1 lte 5", Boolean.TRUE}, + {"1 gt 5", Boolean.FALSE}, {"1 gte 5", Boolean.FALSE}, {"1 lt 5", Boolean.TRUE}, + {"1 shl 2", 4}, {"4 shr 2", 1}, {"4 ushr 2", 1}, + {"not null", Boolean.TRUE}, {"not 1", Boolean.FALSE}, // Equality on identity; Object does not implement Comparable - { "#a = new java.lang.Object(), #a == #a", Boolean.TRUE}, - { "#a = new java.lang.Object(), #b = new java.lang.Object(), #a == #b", Boolean.FALSE}, + {"#a = new java.lang.Object(), #a == #a", Boolean.TRUE}, + {"#a = new java.lang.Object(), #b = new java.lang.Object(), #a == #b", Boolean.FALSE}, // Comparable and non-Comparable - { "#a = new java.lang.Object(), #a == ''", Boolean.FALSE}, - { "#a = new java.lang.Object(), '' == #a", Boolean.FALSE}, + {"#a = new java.lang.Object(), #a == ''", Boolean.FALSE}, + {"#a = new java.lang.Object(), '' == #a", Boolean.FALSE}, - { "#x > 0", Boolean.TRUE }, - { "#x < 0", Boolean.FALSE }, - { "#x == 0", Boolean.FALSE }, - { "#x == 1", Boolean.TRUE }, - { "0 > #x", Boolean.FALSE }, - { "0 < #x", Boolean.TRUE }, - { "0 == #x", Boolean.FALSE }, - { "1 == #x", Boolean.TRUE }, - { "\"1\" > 0", Boolean.TRUE }, - { "\"1\" < 0", Boolean.FALSE }, - { "\"1\" == 0", Boolean.FALSE }, - { "\"1\" == 1", Boolean.TRUE }, - { "0 > \"1\"", Boolean.FALSE }, - { "0 < \"1\"", Boolean.TRUE }, - { "0 == \"1\"", Boolean.FALSE }, - { "1 == \"1\"", Boolean.TRUE }, - { "#x + 1", "11" }, - { "1 + #x", "11" }, - { "#y == 1", Boolean.TRUE }, - { "#y == \"1\"", Boolean.TRUE }, - { "#y + \"1\"", "11" }, - { "\"1\" + #y", "11" }, + {"#x > 0", Boolean.TRUE}, + {"#x < 0", Boolean.FALSE}, + {"#x == 0", Boolean.FALSE}, + {"#x == 1", Boolean.TRUE}, + {"0 > #x", Boolean.FALSE}, + {"0 < #x", Boolean.TRUE}, + {"0 == #x", Boolean.FALSE}, + {"1 == #x", Boolean.TRUE}, + {"\"1\" > 0", Boolean.TRUE}, + {"\"1\" < 0", Boolean.FALSE}, + {"\"1\" == 0", Boolean.FALSE}, + {"\"1\" == 1", Boolean.TRUE}, + {"0 > \"1\"", Boolean.FALSE}, + {"0 < \"1\"", Boolean.TRUE}, + {"0 == \"1\"", Boolean.FALSE}, + {"1 == \"1\"", Boolean.TRUE}, + {"#x + 1", "11"}, + {"1 + #x", "11"}, + {"#y == 1", Boolean.TRUE}, + {"#y == \"1\"", Boolean.TRUE}, + {"#y + \"1\"", "11"}, + {"\"1\" + #y", "11"}, // Enumerated type equality and inequality comparisons (with and without element bodies, reversing order for completeness). - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.FALSE }, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", Boolean.FALSE}, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.FALSE }, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", Boolean.FALSE}, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.FALSE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.TRUE }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.FALSE }, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", Boolean.FALSE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.TRUE}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", Boolean.FALSE}, - // As per JDK JavaDocs it is only possible to compare Enum elements of the same type. Attempting to compare different types + // As per JDK JavaDocs it is only possible to compare Enum elements of the same type. Attempting to compare different types // will normally result in ClassCastExceptions. However, OGNL should avoid that and produce an IllegalArgumentException instead. - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class }, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class}, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class }, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumNoBody@ENUM2", IllegalArgumentException.class}, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class }, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM2", IllegalArgumentException.class}, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class }, - { "@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class } + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM1", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 == @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class}, + {"@" + FULLY_QUALIFIED_CLASSNAME + "$EnumBasicBody@ENUM1 != @" + FULLY_QUALIFIED_CLASSNAME + "$EnumEmptyBody@ENUM2", IllegalArgumentException.class} }; - /* - * =================================================================== Public static methods - * =================================================================== - */ - public static TestSuite suite() - { + public static TestSuite suite() { TestSuite result = new TestSuite(); - for(int i = 0; i < TESTS.length; i++) { - result.addTest(new ArithmeticAndLogicalOperatorsTest((String) TESTS[i][0] + " (" + TESTS[i][1] + ")", null, - (String) TESTS[i][0], TESTS[i][1])); + for (Object[] test : TESTS) { + result.addTest( + new ArithmeticAndLogicalOperatorsTest( + test[0] + " (" + test[1] + ")", + test.length == 3 ? test[2] : null, + (String) test[0], + test[1]) + ); } return result; } - /* - * =================================================================== Constructors - * =================================================================== - */ - public ArithmeticAndLogicalOperatorsTest() - { + public ArithmeticAndLogicalOperatorsTest() { super(); } - public ArithmeticAndLogicalOperatorsTest(String name) - { + public ArithmeticAndLogicalOperatorsTest(String name) { super(name); } public ArithmeticAndLogicalOperatorsTest(String name, Object root, String expressionString, Object expectedResult, - Object setValue, Object expectedAfterSetResult) - { + Object setValue, Object expectedAfterSetResult) { super(name, root, expressionString, expectedResult, setValue, expectedAfterSetResult); } public ArithmeticAndLogicalOperatorsTest(String name, Object root, String expressionString, Object expectedResult, - Object setValue) - { + Object setValue) { super(name, root, expressionString, expectedResult, setValue); } - public ArithmeticAndLogicalOperatorsTest(String name, Object root, String expressionString, Object expectedResult) - { + public ArithmeticAndLogicalOperatorsTest(String name, Object root, String expressionString, Object expectedResult) { super(name, root, expressionString, expectedResult); } - /* - * =================================================================== Overridden methods - * =================================================================== - */ - protected void setUp() - { + protected void setUp() { super.setUp(); _context.put("x", "1"); _context.put("y", new BigDecimal(1)); diff --git a/src/test/java/org/ognl/test/LambdaExpressionTest.java b/src/test/java/org/ognl/test/LambdaExpressionTest.java index 9a35303e..cb315b27 100644 --- a/src/test/java/org/ognl/test/LambdaExpressionTest.java +++ b/src/test/java/org/ognl/test/LambdaExpressionTest.java @@ -33,20 +33,18 @@ import junit.framework.TestSuite; import java.math.BigInteger; -import java.util.ArrayList; import java.util.Arrays; public class LambdaExpressionTest extends OgnlTestCase { - private static Object[][] TESTS = { + private static final Object[][] TESTS = { // Lambda expressions - {null, "#a=:[33](20).longValue().{0}.toArray().length", new Integer(33)}, - {null, "#fact=:[#this<=1? 1 : #fact(#this-1) * #this], #fact(30)", new Integer(1409286144)}, - {null, "#fact=:[#this<=1? 1 : #fact(#this-1) * #this], #fact(30L)", new Long(-8764578968847253504L)}, + {new Object[]{}, "#a=:[33](20).longValue().{0}.toArray().length", 33}, + {null, "#fact=:[#this<=1? 1 : #fact(#this-1) * #this], #fact(30)", 1409286144}, + {null, "#fact=:[#this<=1? 1 : #fact(#this-1) * #this], #fact(30L)", -8764578968847253504L}, {null, "#fact=:[#this<=1? 1 : #fact(#this-1) * #this], #fact(30h)", new BigInteger("265252859812191058636308480000000")}, - {null, "#bump = :[ #this.{ #this + 1 } ], (#bump)({ 1, 2, 3 })", - new ArrayList(Arrays.asList(new Integer[]{new Integer(2), new Integer(3), new Integer(4)}))}, + {null, "#bump = :[ #this.{ #this + 1 } ], (#bump)({ 1, 2, 3 })", Arrays.asList(2, 3, 4)}, {null, "#call = :[ \"calling \" + [0] + \" on \" + [1] ], (#call)({ \"x\", \"y\" })", "calling x on y"}, }; @@ -55,13 +53,18 @@ public class LambdaExpressionTest extends OgnlTestCase { * =================================================================== Public static methods * =================================================================== */ - public static TestSuite suite() - { + public static TestSuite suite() { TestSuite result = new TestSuite(); - for (int i = 0; i < TESTS.length; i++) { - result.addTest(new LambdaExpressionTest((String) TESTS[i][1], TESTS[i][0], (String) TESTS[i][1], - TESTS[i][2])); + for (Object[] test : TESTS) { + result.addTest( + new LambdaExpressionTest( + (String) test[1], + test[0], + (String) test[1], + test[2] + ) + ); } return result; } @@ -70,30 +73,25 @@ public static TestSuite suite() * =================================================================== Constructors * =================================================================== */ - public LambdaExpressionTest() - { + public LambdaExpressionTest() { super(); } - public LambdaExpressionTest(String name) - { + public LambdaExpressionTest(String name) { super(name); } public LambdaExpressionTest(String name, Object root, String expressionString, Object expectedResult, - Object setValue, Object expectedAfterSetResult) - { + Object setValue, Object expectedAfterSetResult) { super(name, root, expressionString, expectedResult, setValue, expectedAfterSetResult); } public LambdaExpressionTest(String name, Object root, String expressionString, Object expectedResult, - Object setValue) - { + Object setValue) { super(name, root, expressionString, expectedResult, setValue); } - public LambdaExpressionTest(String name, Object root, String expressionString, Object expectedResult) - { + public LambdaExpressionTest(String name, Object root, String expressionString, Object expectedResult) { super(name, root, expressionString, expectedResult); } } diff --git a/src/test/java/org/ognl/test/ProjectionSelectionTest.java b/src/test/java/org/ognl/test/ProjectionSelectionTest.java index c1e31cb7..a5321036 100644 --- a/src/test/java/org/ognl/test/ProjectionSelectionTest.java +++ b/src/test/java/org/ognl/test/ProjectionSelectionTest.java @@ -35,66 +35,57 @@ import java.math.BigInteger; import java.util.Arrays; +import java.util.Collections; -public class ProjectionSelectionTest extends OgnlTestCase -{ - private static Root ROOT = new Root(); - - private static Object[][] TESTS = { +public class ProjectionSelectionTest extends OgnlTestCase { + + private static final Root ROOT = new Root(); + + private static final Object[][] TESTS = { // Projection, selection - { ROOT, "array.{class}", - Arrays.asList(new Class[] { Integer.class, Integer.class, Integer.class, Integer.class }) }, - { ROOT, "map.array.{? #this > 2 }", Arrays.asList(new Integer[] { new Integer(3), new Integer(4) }) }, - { ROOT, "map.array.{^ #this > 2 }", Arrays.asList(new Integer[] { new Integer(3) }) }, - { ROOT, "map.array.{$ #this > 2 }", Arrays.asList(new Integer[] { new Integer(4) }) }, - { ROOT, "map.array[*].{?true} instanceof java.util.Collection", Boolean.TRUE }, - { null, "#fact=1, 30H.{? #fact = #fact * (#this+1), false }, #fact", - new BigInteger("265252859812191058636308480000000") }, - }; - - /* - * =================================================================== Public static methods - * =================================================================== - */ - public static TestSuite suite() - { + {ROOT, "array.{class}", Arrays.asList(Integer.class, Integer.class, Integer.class, Integer.class)}, + {ROOT, "map.array.{? #this > 2 }", Arrays.asList(3, 4)}, + {ROOT, "map.array.{^ #this > 2 }", Collections.singletonList(3)}, + {ROOT, "map.array.{$ #this > 2 }", Collections.singletonList(4)}, + {ROOT, "map.array[*].{?true} instanceof java.util.Collection", Boolean.TRUE}, + {ROOT, "#fact=1, 30H.{? #fact = #fact * (#this+1), false }, #fact", new BigInteger("265252859812191058636308480000000")}, + }; + + public static TestSuite suite() { TestSuite result = new TestSuite(); - - for(int i = 0; i < TESTS.length; i++) { - result.addTest(new ProjectionSelectionTest((String) TESTS[i][1], TESTS[i][0], (String) TESTS[i][1], - TESTS[i][2])); + + for (Object[] test : TESTS) { + result.addTest( + new ProjectionSelectionTest( + (String) test[1], + test[0], + (String) test[1], + test[2] + ) + ); } return result; } - /* - * =================================================================== Constructors - * =================================================================== - */ - public ProjectionSelectionTest() - { + public ProjectionSelectionTest() { super(); } - public ProjectionSelectionTest(String name) - { + public ProjectionSelectionTest(String name) { super(name); } public ProjectionSelectionTest(String name, Object root, String expressionString, Object expectedResult, - Object setValue, Object expectedAfterSetResult) - { + Object setValue, Object expectedAfterSetResult) { super(name, root, expressionString, expectedResult, setValue, expectedAfterSetResult); } public ProjectionSelectionTest(String name, Object root, String expressionString, Object expectedResult, - Object setValue) - { + Object setValue) { super(name, root, expressionString, expectedResult, setValue); } - public ProjectionSelectionTest(String name, Object root, String expressionString, Object expectedResult) - { + public ProjectionSelectionTest(String name, Object root, String expressionString, Object expectedResult) { super(name, root, expressionString, expectedResult); } } diff --git a/src/test/java/org/ognl/test/PropertyNotFoundTest.java b/src/test/java/org/ognl/test/PropertyNotFoundTest.java index 2ebfa37a..0c33217e 100644 --- a/src/test/java/org/ognl/test/PropertyNotFoundTest.java +++ b/src/test/java/org/ognl/test/PropertyNotFoundTest.java @@ -31,127 +31,98 @@ package org.ognl.test; import junit.framework.TestSuite; -import ognl.OgnlContext; -import ognl.OgnlException; -import ognl.OgnlRuntime; -import ognl.PropertyAccessor; +import ognl.*; import java.util.Map; public class PropertyNotFoundTest extends OgnlTestCase { + private static final Blah BLAH = new Blah(); - private static Object[][] TESTS = { + private static final Object[][] TESTS = { {BLAH, "webwork.token.name", OgnlException.class, "W value", OgnlException.class}, }; - /*=================================================================== - Public static classes - ===================================================================*/ public static class Blah { String x; String y; - public String getX() - { + public String getX() { return x; } - public void setX(String x) - { + public void setX(String x) { this.x = x; } - public String getY() - { + public String getY() { return y; } - public void setY(String y) - { + public void setY(String y) { this.y = y; } } public static class BlahPropertyAccessor implements PropertyAccessor { - public void setProperty(Map context, Object target, Object name, Object value) throws OgnlException - { + public void setProperty(Map context, Object target, Object name, Object value) throws OgnlException { } - public Object getProperty(Map context, Object target, Object name) throws OgnlException - { + public Object getProperty(Map context, Object target, Object name) throws OgnlException { if ("x".equals(name) || "y".equals(name)) { return OgnlRuntime.getProperty((OgnlContext) context, target, name); } return null; } - public String getSourceAccessor(OgnlContext context, Object target, Object index) - { + public String getSourceAccessor(OgnlContext context, Object target, Object index) { return index.toString(); } - public String getSourceSetter(OgnlContext context, Object target, Object index) - { + public String getSourceSetter(OgnlContext context, Object target, Object index) { return index.toString(); } } - /*=================================================================== - Public static methods - ===================================================================*/ - public static TestSuite suite() - { + public static TestSuite suite() { TestSuite result = new TestSuite(); - for (int i = 0; i < TESTS.length; i++) { - if (TESTS[i].length == 3) { - result.addTest(new PropertyNotFoundTest((String) TESTS[i][1], TESTS[i][0], (String) TESTS[i][1], TESTS[i][2])); - } else { - if (TESTS[i].length == 4) { - result.addTest(new PropertyNotFoundTest((String) TESTS[i][1], TESTS[i][0], (String) TESTS[i][1], TESTS[i][2], TESTS[i][3])); - } else { - if (TESTS[i].length == 5) { - result.addTest(new PropertyNotFoundTest((String) TESTS[i][1], TESTS[i][0], (String) TESTS[i][1], TESTS[i][2], TESTS[i][3], TESTS[i][4])); - } else { - throw new RuntimeException("don't understand TEST format"); - } - } - } + for (Object[] test : TESTS) { + result.addTest( + new PropertyNotFoundTest( + (String) test[1], + test[0], + (String) test[1], + test[2], + test[3], + test[4] + ) + ); } return result; } - /*=================================================================== - Constructors - ===================================================================*/ - public PropertyNotFoundTest() - { + public PropertyNotFoundTest() { super(); } - public PropertyNotFoundTest(String name) - { + public PropertyNotFoundTest(String name) { super(name); } - public PropertyNotFoundTest(String name, Object root, String expressionString, Object expectedResult, Object setValue, Object expectedAfterSetResult) - { + public PropertyNotFoundTest(String name, Object root, String expressionString, Object expectedResult, Object setValue, Object expectedAfterSetResult) { super(name, root, expressionString, expectedResult, setValue, expectedAfterSetResult); } - public PropertyNotFoundTest(String name, Object root, String expressionString, Object expectedResult, Object setValue) - { + public PropertyNotFoundTest(String name, Object root, String expressionString, Object expectedResult, Object setValue) { super(name, root, expressionString, expectedResult, setValue); } - public PropertyNotFoundTest(String name, Object root, String expressionString, Object expectedResult) - { + public PropertyNotFoundTest(String name, Object root, String expressionString, Object expectedResult) { super(name, root, expressionString, expectedResult); } - protected void setUp() - { + protected void setUp() { super.setUp(); OgnlRuntime.setPropertyAccessor(Blah.class, new BlahPropertyAccessor()); } diff --git a/src/test/java/org/ognl/test/ShortCircuitingExpressionTest.java b/src/test/java/org/ognl/test/ShortCircuitingExpressionTest.java index f232d1aa..4afb10ff 100644 --- a/src/test/java/org/ognl/test/ShortCircuitingExpressionTest.java +++ b/src/test/java/org/ognl/test/ShortCircuitingExpressionTest.java @@ -34,57 +34,52 @@ import ognl.NoSuchPropertyException; import ognl.OgnlException; -public class ShortCircuitingExpressionTest extends OgnlTestCase -{ - private static Object[][] TESTS = { - { "#root ? someProperty : 99", new Integer(99) }, - { "#root ? 99 : someProperty", OgnlException.class }, - { "(#x=99)? #x.someProperty : #x", NoSuchPropertyException.class }, - { "#xyzzy.doubleValue()", NullPointerException.class }, - { "#xyzzy && #xyzzy.doubleValue()", null }, - { "(#x=99) && #x.doubleValue()", new Double(99) }, - { "#xyzzy || 101", new Integer(101) }, - { "99 || 101", new Integer(99) }, +public class ShortCircuitingExpressionTest extends OgnlTestCase { + + private static final Object[][] TESTS = { + {"#root ? someProperty : 99", 99}, + {"#root ? 99 : someProperty", OgnlException.class}, + {"(#x=99)? #x.someProperty : #x", NoSuchPropertyException.class, new Object()}, + {"#xyzzy.doubleValue()", NullPointerException.class, new Object()}, + {"#xyzzy && #xyzzy.doubleValue()", null}, + {"(#x=99) && #x.doubleValue()", 99.0}, + {"#xyzzy || 101", 101}, + {"99 || 101", 99}, }; - /*=================================================================== - Public static methods - ===================================================================*/ - public static TestSuite suite() - { - TestSuite result = new TestSuite(); + public static TestSuite suite() { + TestSuite result = new TestSuite(); - for (int i = 0; i < TESTS.length; i++) { - result.addTest(new ShortCircuitingExpressionTest((String)TESTS[i][0] + " (" + TESTS[i][1] + ")", null, (String)TESTS[i][0], TESTS[i][1])); + for (Object[] test : TESTS) { + result.addTest( + new ShortCircuitingExpressionTest( + test[0] + " (" + test[1] + ")", + test.length == 3 ? test[2] : null, + (String) test[0], + test[1] + ) + ); } return result; } - /*=================================================================== - Constructors - ===================================================================*/ - public ShortCircuitingExpressionTest() - { - super(); - } + public ShortCircuitingExpressionTest() { + super(); + } - public ShortCircuitingExpressionTest(String name) - { - super(name); - } + public ShortCircuitingExpressionTest(String name) { + super(name); + } - public ShortCircuitingExpressionTest(String name, Object root, String expressionString, Object expectedResult, Object setValue, Object expectedAfterSetResult) - { + public ShortCircuitingExpressionTest(String name, Object root, String expressionString, Object expectedResult, Object setValue, Object expectedAfterSetResult) { super(name, root, expressionString, expectedResult, setValue, expectedAfterSetResult); } - public ShortCircuitingExpressionTest(String name, Object root, String expressionString, Object expectedResult, Object setValue) - { + public ShortCircuitingExpressionTest(String name, Object root, String expressionString, Object expectedResult, Object setValue) { super(name, root, expressionString, expectedResult, setValue); } - public ShortCircuitingExpressionTest(String name, Object root, String expressionString, Object expectedResult) - { + public ShortCircuitingExpressionTest(String name, Object root, String expressionString, Object expectedResult) { super(name, root, expressionString, expectedResult); } }