package com.googlecode.aviator.runtime.function.custom;
import static org.junit.Assert.*;
import java.util.HashMap;
import org.junit.BeforeClass;
import org.junit.Test;
import com.googlecode.aviator.AviatorEvaluator;
public class CustomFunctionUnitTest {
@BeforeClass
public static void setup() {
AviatorEvaluator.addFunction(new GetFirstNonNullFunction());
}
@Test
public void testGetFirstNonNullFunctionWith20Params() {
testGetFirstNonNull(19);
}
private void testGetFirstNonNull(int n) {
HashMap<String, Object> env = new HashMap<String, Object>();
StringBuilder sb = new StringBuilder("getFirstNonNull(");
boolean wasFirst = true;
for (int i = 0; i < n; i++) {
env.put("i" + i, null);
if (wasFirst) {
sb.append("i" + i);
wasFirst = false;
}
else {
sb.append(",i" + i);
}
}
Object last = new Object();
env.put("last", last);
sb.append(",last)");
assertSame(last, AviatorEvaluator.execute(sb.toString(), env));
}
@Test
public void testGetFirstNonNullFunctionWith21Params() {
testGetFirstNonNull(20);
}
@Test
public void testGetFirstNonNullFunctionWith101Params() {
testGetFirstNonNull(100);
}
@Test
public void testGetFirstNonNullFunctionNestWithManyParams() {
HashMap<String, Object> env = new HashMap<String, Object>();
StringBuilder sb = new StringBuilder("getFirstNonNull(");
boolean wasFirst = true;
for (int i = 0; i < 30; i++) {
env.put("i" + i, null);
if (wasFirst) {
sb.append("i" + i);
wasFirst = false;
}
else {
sb.append(",i" + i);
}
}
sb.append(", getFirstNonNull(");
wasFirst = true;
for (int i = 0; i < 30; i++) {
if (wasFirst) {
sb.append("i" + i);
wasFirst = false;
}
else {
sb.append(",i" + i);
}
}
Object last = new Object();
env.put("last", last);
sb.append(",last))");
System.out.println(sb.toString());
assertSame(last, AviatorEvaluator.execute(sb.toString(), env));
}
@Test
public void testMyAddFunction() {
assertEquals(10, AviatorEvaluator.execute("myadd(3,7)"));
assertEquals(10, AviatorEvaluator.exec("myadd(a,b)", 6, 4));
}
}