package com.alibaba.tamper.script; import java.util.HashMap; import java.util.Map; import junit.framework.Assert; import junit.framework.TestCase; import org.junit.Before; import com.alibaba.tamper.TestUtils; import com.alibaba.tamper.process.script.ScriptExecutor; import com.alibaba.tamper.process.script.ScriptHelper; import com.alibaba.tamper.process.script.jexl.JexlScriptExecutor; /** * @author jianghang 2011-5-24 下午04:43:01 */ public class ScriptExecutorTest extends TestCase { @Before public void setUp() { try { // 清空下repository下的数据 TestUtils.setField(ScriptHelper.getInstance(), "executor", null); } catch (Exception e) { Assert.fail(); } } public void testJexlScript() { ScriptExecutor executor = new JexlScriptExecutor(); doTest(executor); } public void test_system() { System.setProperty("BeanMapping.Script.Executor", "com.alibaba.tamper.process.script.jexl.JexlScriptExecutor"); doTest(ScriptHelper.getInstance().getScriptExecutor()); System.setProperty("BeanMapping.Script.Executor", ""); } public void test_service() { System.setProperty("BeanMapping.Script.Executor", ""); doTest(ScriptHelper.getInstance().getScriptExecutor()); } private void doTest(ScriptExecutor executor) { Map param = new HashMap(); // bean数据 ModelA a = new ModelA(); ModelB b = new ModelB(); a.setData(b); a.setName("modelA"); b.setName("modelB"); param.put("modelA", a); // data数据 Map<String, Object> ds = new HashMap<String, Object>(); ds.put("table$name", "ljh"); Map<String, Object> data = new HashMap<String, Object>(); data.put("oracle$datasource", ds); // convert数据 Map<String, Object> converts = new HashMap<String, Object>(); converts.put("convert", new Convert()); param.putAll(data); param.putAll(converts); String expr = "modelA.data.name = convert.convert(oracle$datasource.table$name)"; Object obj = executor.evaluate(param, expr); assertEquals(obj, "convert"); assertEquals(a.getData().getName(), "convert"); } public static class Convert { public Object convert(Object source) { return "convert"; } } public static class ModelA { private ModelB data; private String name; public ModelB getData() { return data; } public void setData(ModelB data) { this.data = data; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public static class ModelB { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } }