Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
c695d00d
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c695d00d
编写于
4月 04, 2009
作者:
A
Andy Clement
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
More test coverage for the expression AST
上级
c4de2ba0
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
84 addition
and
51 deletion
+84
-51
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/OperatorGreaterThan.java
...ingframework/expression/spel/ast/OperatorGreaterThan.java
+8
-13
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/OperatorLessThan.java
...springframework/expression/spel/ast/OperatorLessThan.java
+9
-13
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/OperatorLessThanOrEqual.java
...ramework/expression/spel/ast/OperatorLessThanOrEqual.java
+8
-13
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/Ternary.java
...java/org/springframework/expression/spel/ast/Ternary.java
+4
-11
org.springframework.expression/src/test/java/org/springframework/expression/spel/EvaluationTests.java
.../org/springframework/expression/spel/EvaluationTests.java
+15
-0
org.springframework.expression/src/test/java/org/springframework/expression/spel/OperatorTests.java
...va/org/springframework/expression/spel/OperatorTests.java
+34
-1
org.springframework.expression/src/test/java/org/springframework/expression/spel/ParsingTests.java
...ava/org/springframework/expression/spel/ParsingTests.java
+6
-0
未找到文件。
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/OperatorGreaterThan.java
浏览文件 @
c695d00d
...
@@ -43,19 +43,14 @@ public class OperatorGreaterThan extends Operator {
...
@@ -43,19 +43,14 @@ public class OperatorGreaterThan extends Operator {
Object
left
=
getLeftOperand
().
getValueInternal
(
state
).
getValue
();
Object
left
=
getLeftOperand
().
getValueInternal
(
state
).
getValue
();
Object
right
=
getRightOperand
().
getValueInternal
(
state
).
getValue
();
Object
right
=
getRightOperand
().
getValueInternal
(
state
).
getValue
();
if
(
left
instanceof
Number
&&
right
instanceof
Number
)
{
if
(
left
instanceof
Number
&&
right
instanceof
Number
)
{
Number
op1
=
(
Number
)
left
;
Number
leftNumber
=
(
Number
)
left
;
Number
op2
=
(
Number
)
right
;
Number
rightNumber
=
(
Number
)
right
;
if
(
op1
instanceof
Double
||
op2
instanceof
Double
)
{
if
(
leftNumber
instanceof
Double
||
rightNumber
instanceof
Double
)
{
return
BooleanTypedValue
.
forValue
(
op1
.
doubleValue
()
>
op2
.
doubleValue
());
return
BooleanTypedValue
.
forValue
(
leftNumber
.
doubleValue
()
>
rightNumber
.
doubleValue
());
}
}
else
if
(
leftNumber
instanceof
Long
||
rightNumber
instanceof
Long
)
{
else
if
(
op1
instanceof
Float
||
op2
instanceof
Float
)
{
return
BooleanTypedValue
.
forValue
(
leftNumber
.
longValue
()
>
rightNumber
.
longValue
());
return
BooleanTypedValue
.
forValue
(
op1
.
floatValue
()
>
op2
.
floatValue
());
}
else
{
}
return
BooleanTypedValue
.
forValue
(
leftNumber
.
intValue
()
>
rightNumber
.
intValue
());
else
if
(
op1
instanceof
Long
||
op2
instanceof
Long
)
{
return
BooleanTypedValue
.
forValue
(
op1
.
longValue
()
>
op2
.
longValue
());
}
else
{
return
BooleanTypedValue
.
forValue
(
op1
.
intValue
()
>
op2
.
intValue
());
}
}
}
}
return
BooleanTypedValue
.
forValue
(
state
.
getTypeComparator
().
compare
(
left
,
right
)
>
0
);
return
BooleanTypedValue
.
forValue
(
state
.
getTypeComparator
().
compare
(
left
,
right
)
>
0
);
...
...
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/OperatorLessThan.java
浏览文件 @
c695d00d
...
@@ -42,20 +42,16 @@ public class OperatorLessThan extends Operator {
...
@@ -42,20 +42,16 @@ public class OperatorLessThan extends Operator {
public
BooleanTypedValue
getValueInternal
(
ExpressionState
state
)
throws
EvaluationException
{
public
BooleanTypedValue
getValueInternal
(
ExpressionState
state
)
throws
EvaluationException
{
Object
left
=
getLeftOperand
().
getValueInternal
(
state
).
getValue
();
Object
left
=
getLeftOperand
().
getValueInternal
(
state
).
getValue
();
Object
right
=
getRightOperand
().
getValueInternal
(
state
).
getValue
();
Object
right
=
getRightOperand
().
getValueInternal
(
state
).
getValue
();
// TODO could leave all of these to the comparator - just seems quicker to do some here
if
(
left
instanceof
Number
&&
right
instanceof
Number
)
{
if
(
left
instanceof
Number
&&
right
instanceof
Number
)
{
Number
op1
=
(
Number
)
left
;
Number
leftNumber
=
(
Number
)
left
;
Number
op2
=
(
Number
)
right
;
Number
rightNumber
=
(
Number
)
right
;
if
(
op1
instanceof
Double
||
op2
instanceof
Double
)
{
if
(
leftNumber
instanceof
Double
||
rightNumber
instanceof
Double
)
{
return
BooleanTypedValue
.
forValue
(
op1
.
doubleValue
()
<
op2
.
doubleValue
());
return
BooleanTypedValue
.
forValue
(
leftNumber
.
doubleValue
()
<
rightNumber
.
doubleValue
());
}
}
else
if
(
leftNumber
instanceof
Long
||
rightNumber
instanceof
Long
)
{
else
if
(
op1
instanceof
Float
||
op2
instanceof
Float
)
{
return
BooleanTypedValue
.
forValue
(
leftNumber
.
longValue
()
<
rightNumber
.
longValue
());
return
BooleanTypedValue
.
forValue
(
op1
.
floatValue
()
<
op2
.
floatValue
());
}
else
{
}
return
BooleanTypedValue
.
forValue
(
leftNumber
.
intValue
()
<
rightNumber
.
intValue
());
else
if
(
op1
instanceof
Long
||
op2
instanceof
Long
)
{
return
BooleanTypedValue
.
forValue
(
op1
.
longValue
()
<
op2
.
longValue
());
}
else
{
return
BooleanTypedValue
.
forValue
(
op1
.
intValue
()
<
op2
.
intValue
());
}
}
}
}
return
BooleanTypedValue
.
forValue
(
state
.
getTypeComparator
().
compare
(
left
,
right
)
<
0
);
return
BooleanTypedValue
.
forValue
(
state
.
getTypeComparator
().
compare
(
left
,
right
)
<
0
);
...
...
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/OperatorLessThanOrEqual.java
浏览文件 @
c695d00d
...
@@ -38,19 +38,14 @@ public class OperatorLessThanOrEqual extends Operator {
...
@@ -38,19 +38,14 @@ public class OperatorLessThanOrEqual extends Operator {
Object
left
=
getLeftOperand
().
getValueInternal
(
state
).
getValue
();
Object
left
=
getLeftOperand
().
getValueInternal
(
state
).
getValue
();
Object
right
=
getRightOperand
().
getValueInternal
(
state
).
getValue
();
Object
right
=
getRightOperand
().
getValueInternal
(
state
).
getValue
();
if
(
left
instanceof
Number
&&
right
instanceof
Number
)
{
if
(
left
instanceof
Number
&&
right
instanceof
Number
)
{
Number
op1
=
(
Number
)
left
;
Number
leftNumber
=
(
Number
)
left
;
Number
op2
=
(
Number
)
right
;
Number
rightNumber
=
(
Number
)
right
;
if
(
op1
instanceof
Double
||
op2
instanceof
Double
)
{
if
(
leftNumber
instanceof
Double
||
rightNumber
instanceof
Double
)
{
return
BooleanTypedValue
.
forValue
(
op1
.
doubleValue
()
<=
op2
.
doubleValue
());
return
BooleanTypedValue
.
forValue
(
leftNumber
.
doubleValue
()
<=
rightNumber
.
doubleValue
());
}
}
else
if
(
leftNumber
instanceof
Long
||
rightNumber
instanceof
Long
)
{
else
if
(
op1
instanceof
Float
||
op2
instanceof
Float
)
{
return
BooleanTypedValue
.
forValue
(
leftNumber
.
longValue
()
<=
rightNumber
.
longValue
());
return
BooleanTypedValue
.
forValue
(
op1
.
floatValue
()
<=
op2
.
floatValue
());
}
else
{
}
return
BooleanTypedValue
.
forValue
(
leftNumber
.
intValue
()
<=
rightNumber
.
intValue
());
else
if
(
op1
instanceof
Long
||
op2
instanceof
Long
)
{
return
BooleanTypedValue
.
forValue
(
op1
.
longValue
()
<=
op2
.
longValue
());
}
else
{
return
BooleanTypedValue
.
forValue
(
op1
.
intValue
()
<=
op2
.
intValue
());
}
}
}
}
return
BooleanTypedValue
.
forValue
(
state
.
getTypeComparator
().
compare
(
left
,
right
)
<=
0
);
return
BooleanTypedValue
.
forValue
(
state
.
getTypeComparator
().
compare
(
left
,
right
)
<=
0
);
...
...
org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/Ternary.java
浏览文件 @
c695d00d
...
@@ -44,19 +44,12 @@ public class Ternary extends SpelNodeImpl {
...
@@ -44,19 +44,12 @@ public class Ternary extends SpelNodeImpl {
@Override
@Override
public
TypedValue
getValueInternal
(
ExpressionState
state
)
throws
EvaluationException
{
public
TypedValue
getValueInternal
(
ExpressionState
state
)
throws
EvaluationException
{
Boolean
value
=
getChild
(
0
).
getValue
(
state
,
Boolean
.
class
);
Boolean
value
=
getChild
(
0
).
getValue
(
state
,
Boolean
.
class
);
try
{
if
(
value
.
booleanValue
())
{
if
(
Boolean
.
TRUE
.
equals
(
value
))
{
return
getChild
(
1
).
getValueInternal
(
state
);
return
getChild
(
1
).
getValueInternal
(
state
);
}
}
else
{
else
{
return
getChild
(
2
).
getValueInternal
(
state
);
return
getChild
(
2
).
getValueInternal
(
state
);
}
}
}
}
catch
(
SpelException
ex
)
{
ex
.
setPosition
(
getChild
(
0
).
getCharPositionInLine
());
throw
ex
;
}
}
@Override
@Override
public
String
toStringAST
()
{
public
String
toStringAST
()
{
...
...
org.springframework.expression/src/test/java/org/springframework/expression/spel/EvaluationTests.java
浏览文件 @
c695d00d
...
@@ -16,6 +16,8 @@
...
@@ -16,6 +16,8 @@
package
org.springframework.expression.spel
;
package
org.springframework.expression.spel
;
import
org.springframework.expression.Expression
;
/**
/**
* Tests the evaluation of real expressions in a real context.
* Tests the evaluation of real expressions in a real context.
*
*
...
@@ -323,10 +325,23 @@ public class EvaluationTests extends ExpressionTestCase {
...
@@ -323,10 +325,23 @@ public class EvaluationTests extends ExpressionTestCase {
// evaluate("{2}.#isEven(#this[0]) == 'y'?'it is even':'it is odd'", "it is even", String.class);
// evaluate("{2}.#isEven(#this[0]) == 'y'?'it is even':'it is odd'", "it is even", String.class);
// }
// }
public
void
testTernaryOperator01
()
{
evaluate
(
"2>4?1:2"
,
2
,
Integer
.
class
);
}
public
void
testTernaryOperator02
()
{
evaluate
(
"'abc'=='abc'?1:2"
,
1
,
Integer
.
class
);
}
public
void
testTernaryOperator03
()
{
public
void
testTernaryOperator03
()
{
evaluateAndCheckError
(
"'hello'?1:2"
,
SpelMessages
.
TYPE_CONVERSION_ERROR
);
// cannot convert String to boolean
evaluateAndCheckError
(
"'hello'?1:2"
,
SpelMessages
.
TYPE_CONVERSION_ERROR
);
// cannot convert String to boolean
}
}
public
void
testTernaryOperator04
()
throws
Exception
{
Expression
expr
=
parser
.
parseExpression
(
"1>2?3:4"
);
assertFalse
(
expr
.
isWritable
(
eContext
));
}
// Indexer
// Indexer
// public void testCutProcessor01() {
// public void testCutProcessor01() {
// evaluate("{1,2,3,4,5}.cut(1,3)", "[2, 3, 4]", ArrayList.class);
// evaluate("{1,2,3,4,5}.cut(1,3)", "[2, 3, 4]", ArrayList.class);
...
...
org.springframework.expression/src/test/java/org/springframework/expression/spel/OperatorTests.java
浏览文件 @
c695d00d
...
@@ -36,12 +36,27 @@ public class OperatorTests extends ExpressionTestCase {
...
@@ -36,12 +36,27 @@ public class OperatorTests extends ExpressionTestCase {
public
void
testLessThan
()
{
public
void
testLessThan
()
{
evaluate
(
"3 < 5"
,
true
,
Boolean
.
class
);
evaluate
(
"3 < 5"
,
true
,
Boolean
.
class
);
evaluate
(
"5 < 3"
,
false
,
Boolean
.
class
);
evaluate
(
"5 < 3"
,
false
,
Boolean
.
class
);
evaluate
(
"3L < 5L"
,
true
,
Boolean
.
class
);
evaluate
(
"5L < 3L"
,
false
,
Boolean
.
class
);
evaluate
(
"3.0d < 5.0d"
,
true
,
Boolean
.
class
);
evaluate
(
"5.0d < 3.0d"
,
false
,
Boolean
.
class
);
evaluate
(
"'abc' < 'def'"
,
true
,
Boolean
.
class
);
evaluate
(
"'def' < 'abc'"
,
false
,
Boolean
.
class
);
}
}
public
void
testLessThanOrEqual
()
{
public
void
testLessThanOrEqual
()
{
evaluate
(
"3 <= 5"
,
true
,
Boolean
.
class
);
evaluate
(
"3 <= 5"
,
true
,
Boolean
.
class
);
evaluate
(
"5 <= 3"
,
false
,
Boolean
.
class
);
evaluate
(
"5 <= 3"
,
false
,
Boolean
.
class
);
evaluate
(
"6 <= 6"
,
true
,
Boolean
.
class
);
evaluate
(
"6 <= 6"
,
true
,
Boolean
.
class
);
evaluate
(
"3L <= 5L"
,
true
,
Boolean
.
class
);
evaluate
(
"5L <= 3L"
,
false
,
Boolean
.
class
);
evaluate
(
"5L <= 5L"
,
true
,
Boolean
.
class
);
evaluate
(
"3.0d < 5.0d"
,
true
,
Boolean
.
class
);
evaluate
(
"5.0d < 3.0d"
,
false
,
Boolean
.
class
);
evaluate
(
"5.0d <= 5.0d"
,
true
,
Boolean
.
class
);
evaluate
(
"'abc' <= 'def'"
,
true
,
Boolean
.
class
);
evaluate
(
"'def' <= 'abc'"
,
false
,
Boolean
.
class
);
evaluate
(
"'abc' <= 'abc'"
,
true
,
Boolean
.
class
);
}
}
public
void
testEqual
()
{
public
void
testEqual
()
{
...
@@ -65,6 +80,12 @@ public class OperatorTests extends ExpressionTestCase {
...
@@ -65,6 +80,12 @@ public class OperatorTests extends ExpressionTestCase {
public
void
testGreaterThan
()
{
public
void
testGreaterThan
()
{
evaluate
(
"3 > 5"
,
false
,
Boolean
.
class
);
evaluate
(
"3 > 5"
,
false
,
Boolean
.
class
);
evaluate
(
"5 > 3"
,
true
,
Boolean
.
class
);
evaluate
(
"5 > 3"
,
true
,
Boolean
.
class
);
evaluate
(
"3L > 5L"
,
false
,
Boolean
.
class
);
evaluate
(
"5L > 3L"
,
true
,
Boolean
.
class
);
evaluate
(
"3.0d > 5.0d"
,
false
,
Boolean
.
class
);
evaluate
(
"5.0d > 3.0d"
,
true
,
Boolean
.
class
);
evaluate
(
"'abc' > 'def'"
,
false
,
Boolean
.
class
);
evaluate
(
"'def' > 'abc'"
,
true
,
Boolean
.
class
);
}
}
public
void
testMultiplyStringInt
()
{
public
void
testMultiplyStringInt
()
{
...
@@ -136,6 +157,18 @@ public class OperatorTests extends ExpressionTestCase {
...
@@ -136,6 +157,18 @@ public class OperatorTests extends ExpressionTestCase {
node
=
getOperatorNode
((
SpelExpression
)
parser
.
parseExpression
(
"3/3"
));
node
=
getOperatorNode
((
SpelExpression
)
parser
.
parseExpression
(
"3/3"
));
assertEquals
(
"/"
,
node
.
getOperatorName
());
assertEquals
(
"/"
,
node
.
getOperatorName
());
node
=
getOperatorNode
((
SpelExpression
)
parser
.
parseExpression
(
"3+3"
));
assertEquals
(
"+"
,
node
.
getOperatorName
());
node
=
getOperatorNode
((
SpelExpression
)
parser
.
parseExpression
(
"3-3"
));
assertEquals
(
"-"
,
node
.
getOperatorName
());
node
=
getOperatorNode
((
SpelExpression
)
parser
.
parseExpression
(
"3<4"
));
assertEquals
(
"<"
,
node
.
getOperatorName
());
node
=
getOperatorNode
((
SpelExpression
)
parser
.
parseExpression
(
"3<=4"
));
assertEquals
(
"<="
,
node
.
getOperatorName
());
}
}
public
void
testMixedOperands_FloatsAndDoubles
()
{
public
void
testMixedOperands_FloatsAndDoubles
()
{
...
...
org.springframework.expression/src/test/java/org/springframework/expression/spel/ParsingTests.java
浏览文件 @
c695d00d
...
@@ -346,7 +346,13 @@ public class ParsingTests extends TestCase {
...
@@ -346,7 +346,13 @@ public class ParsingTests extends TestCase {
parseCheck
(
"#var1='value1'"
);
parseCheck
(
"#var1='value1'"
);
}
}
// ternary operator
// ternary operator
public
void
testTernaryOperator01
()
{
parseCheck
(
"1>2?3:4"
,
"(1 > 2) ? 3 : 4"
);
}
// public void testTernaryOperator01() {
// public void testTernaryOperator01() {
// parseCheck("{1}.#isEven(#this) == 'y'?'it is even':'it is odd'",
// parseCheck("{1}.#isEven(#this) == 'y'?'it is even':'it is odd'",
// "({1}.#isEven(#this) == 'y') ? 'it is even' : 'it is odd'");
// "({1}.#isEven(#this) == 'y') ? 'it is even' : 'it is odd'");
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录