spelhelper/src/test/scala/net/abhinavsarkar/spelhelper/SpelHelperSpec.scala

104 lines
3.6 KiB
Scala

package net.abhinavsarkar.spelhelper
import org.scalatest.junit.JUnitRunner
import org.junit.runner.RunWith
import org.scalatest.FlatSpec
import org.scalatest.junit.ShouldMatchersForJUnit
import org.springframework.expression.spel.SpelEvaluationException
@RunWith(classOf[JUnitRunner])
class SpelHelperSpec extends FlatSpec with ShouldMatchersForJUnit {
"SpelHelper" should "register and evaluate functions " in {
new SpelHelper()
.registerFunctionsFromClass(classOf[Functions])
.evalExpression(
"#test('check')", new {}, classOf[String]) should equal ("check")
}
it should "not register non public methods " in {
val spelHelper = new SpelHelper()
.registerFunctionsFromClass(classOf[Functions])
evaluating { spelHelper.evalExpression("#testNonPublic('check')",
new {}, classOf[String]) } should produce [SpelEvaluationException]
}
it should "not register non static methods " in {
val spelHelper = new SpelHelper()
.registerFunctionsFromClass(classOf[Functions])
evaluating { spelHelper.evalExpression("#testNonStatic('check')",
new {}, classOf[String]) } should produce [SpelEvaluationException]
}
it should "not register void methods " in {
val spelHelper = new SpelHelper()
.registerFunctionsFromClass(classOf[Functions])
evaluating { spelHelper.evalExpression("#testVoid('check')",
new {}, classOf[String]) } should produce [SpelEvaluationException]
}
it should "register implicit methods " in {
new SpelHelper()
.registerImplicitMethodsFromClass(classOf[Functions])
.lookupImplicitMethod("java.lang.String.test") should equal(
classOf[Functions].getMethod("test", classOf[String]))
}
it should "not register methods with no args as implicit methods " in {
new SpelHelper()
.registerImplicitMethodsFromClass(classOf[Functions])
.lookupImplicitMethod("java.lang.String.testNoArg") should be (null);
}
it should "register implicit constructors " in {
new SpelHelper()
.registerConstructorsFromClass(classOf[Functions])
.lookupImplicitConstructor("Functions[]") should equal(
classOf[Functions].getConstructor())
}
it should "evaluate implicit methods " in {
new SpelHelper()
.registerImplicitMethodsFromClass(classOf[Functions])
.evalExpression(
"'check'.test()", new {}, classOf[String]) should equal ("check")
}
it should "evaluate implicit constructors " in {
new SpelHelper()
.registerConstructorsFromClass(classOf[Functions])
.evalExpression(
"new Functions()", new {}, classOf[Functions]) should equal (new Functions)
}
it should "evaluate implicit properties " in {
new SpelHelper().evalExpression(
"'abc'.hashCode", new {}, classOf[int]) should equal ("abc".hashCode)
}
it should "evaluate multiple expressions " in {
new SpelHelper().evalExpressions(
Array("#s='check'", "#s"), new {}, classOf[String]) should equal ("check")
}
it should "throw IllegalArgumentException when trying to evaluate " +
"blank multiple expressions " in {
evaluating { new SpelHelper().evalExpressions(
Array[String](), new {}, classOf[String]) } should produce [IllegalArgumentException]
}
it should "return evaluation context inside a method called " +
"from SpEL expression " in {
new SpelHelper()
.registerFunctionsFromClass(classOf[Functions])
.evalExpression(
"#testContext('check')", new {}, classOf[String]) should equal ("check")
}
it should "not return evaluation context outside a method called " +
"from SpEL expression " in {
SpelHelper.getCurrentContext should be (null)
}
}