package org.radargun.config;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
/**
* @author Mircea Markus <Mircea.Markus@jboss.com>
* @author Radim Vansa <rvansa@redhat.com>
*/
@Test
public class EvaluatorTest {
public void testWithDefaultNoReplacement() {
assertEvals("${custom.property:aDefaultVal}", "aDefaultVal");
}
public void testWithDefaultAndReplacement() {
System.setProperty("org.radargun.testWithDefaultAndReplacement", "nonDefaultValue");
assertEvals("${org.radargun.testWithDefaultAndReplacement:aDefaultVal}", "nonDefaultValue");
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testFailureOnNonDefault() {
Evaluator.parseString("${org.radargun.testFailureOnNonDefault}");
}
public void testNoDefaultAndExisting() {
System.setProperty("org.radargun.testNoDefaultAndExisting", "nonDefaultValue");
assertEvals("${org.radargun.testNoDefaultAndExisting}", "nonDefaultValue");
}
public void testConcatWithVar() {
System.setProperty("org.radargun.testConcatWithVar", "foo");
assertEvals("${org.radargun.testConcatWithVar}yyy", "fooyyy");
assertEvals("xxx${org.radargun.testConcatWithVar}", "xxxfoo");
assertEvals("xxx${org.radargun.testConcatWithVar}yyy", "xxxfooyyy");
}
public void testSimpleExpression() {
assertEvals("#{1 + 2 * 3 - 1}", "6");
assertEvals("#{ (1+2 )*3}", "9");
assertEvals("#{ 9 / 3 + 1}", "4");
assertEvals("#{7 % 2 + 1}", "2");
assertEvals("#{2,5..8,10}", "2, 5, 6, 7, 8, 10");
}
public void testConcatWithExpression() {
assertEvals("xxx#{1 + 2}yyy", "xxx3yyy");
assertEvals("#{1 + 2}yyy", "3yyy");
assertEvals("xxx#{1 + 2}", "xxx3");
}
public void testExpressionWithVar() {
System.setProperty("org.radargun.testExpressionWithVar", "2");
assertEvals("#{ 1 + ${ org.radargun.testExpressionWithVar } * ${org.radargun.noProperty: 3}}", "7");
}
public void testColons() {
System.setProperty("org.radargun.testColons", "xxx");
assertEvals("fo:o${org.radargun.testColons}bar:${org.radargun.testColons:yyy}bar:${org.radargun.noProperty:zzz}bar:foo",
"fo:oxxxbar:xxxbar:zzzbar:foo");
}
public void testNegative() {
System.setProperty("org.radargun.testNegative", "2");
assertEvals("#{ -1 }", "-1");
assertEvals("#{ - 2 }", "-2");
assertEvals("#{ 0 - 3 }", "-3");
assertEvals("#{ 5+ -4 }", "1");
assertEvals("#{ 6 + (-5) }", "1");
assertEvals("#{${org.radargun.testNegative} - 1}", "1");
}
public void testMinMax() {
assertEvals("#{ max(1, 2, 3) }", "3");
assertEvals("#{ min 2, 1, 3 }", "1");
// warning should be emitted
assertEvals("#{ max 2 }", "2");
}
public void testFunctions() {
assertEvals("#{ ceil(0.6) }", "1");
assertEvals("#{ ceil(double(1) / 2) }", "1");
assertEvals("#{ floor 42.1 }", "42");
assertEvals("#{ abs(-123) }", "123");
assertEvals("#{ 5 * abs(5) }", "25");
assertEvals("#{ 6 * abs(-6.5) }", "39.0");
assertEvals("#{ gcd (6, 21, 27) }", "3");
}
public void testListGetBasic() {
assertEvals("#{ (3).get(0) }", "3");
assertEvals("#{ (1,2,3).get(1) }", "2");
assertEvals("#{ (abc,def,ghi).get(0) }", "abc");
System.setProperty("org.radargun.testListGet", "ghi");
assertEvals("#{ (abc,def,${org.radargun.testListGet}).get(0) }", "abc");
}
public void testListGetComplex() {
assertEvals("#{ (3).get(0) + 2 }", "5");
assertEvals("#{ (1,2,3).get(1) + 2 * 2}", "6");
assertEvals("#{ (1,2,3).get(1) - 2 * 2}", "-2");
assertEvals("#{ (abc,def,ghi).get(0),3 }", "abc, 3");
System.setProperty("org.radargun.testListGetSize", "1, 2, 3, 4");
System.setProperty("org.radargun.testListGetSize.counter", "1");
System.setProperty("org.radargun.testListGet", "ghi");
assertEvals("#{ ${org.radargun.testListGet}.get(0) }", "ghi");
assertEvals("#{ (abc,def,${org.radargun.testListGet}).get(0),cde }", "abc, cde");
assertEvals("#{${org.radargun.testListGetSize}.get(${org.radargun.testListGetSize.counter})}", "2");
}
public void testListSize() {
System.setProperty("org.radargun.testListSize", "1, 2, 3, 4");
assertEvals("#{(1,2,3).size}", "3");
assertEvals("#{(1).size}", "1");
assertEvals("#{(abc,def).size}", "2");
assertEvals("#{(abc,def).size}", "2");
assertEvals("#{${org.radargun.testListSize}.size}", "4");
}
private static void assertEvals(String expression, String expected) {
assertEquals(Evaluator.parseString(expression), expected);
}
}