插件开发工具库,推荐依赖该工具库。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

202 lines
8.1 KiB

package com.fanruan.api.cal;
import com.fanruan.api.Prepare;
import com.fr.base.Parameter;
import com.fr.json.JSON;
import com.fr.json.JSONFactory;
import com.fr.script.Calculator;
import com.fr.stable.ParameterProvider;
import com.fr.stable.UtilEvalError;
import com.fr.stable.script.NameSpace;
import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/**
* @author richie
* @version 10.0
* Created by richie on 2019-08-16
*/
public class ParameterKitTest extends Prepare {
@Test
public void analyze4ParametersFromFormula() {
ParameterProvider[] providers = ParameterKit.analyze4ParametersFromFormula("=sum($p1, $p2) + max($p4 - 1, pow(2, $p5))");
TreeMap<String, Object> map = new TreeMap<>();
for (ParameterProvider provider : providers) {
map.put(provider.getName(), provider.getValue());
}
String[] names = map.keySet().toArray(new String[0]);
Assert.assertArrayEquals(new String[]{"p1", "p2", "p4", "p5"}, names);
}
@Test
public void analyze4Parameters() {
String sql = "SELECT * FROM Equipment where 'Tel' = ${if(true, 1, 2)}";
ParameterProvider[] parameters = ParameterKit.analyze4Parameters(sql, false);
Assert.assertEquals(0, parameters.length);
parameters = ParameterKit.analyze4Parameters(sql, true);
Assert.assertEquals(0, parameters.length);
sql = "SELECT * FROM s订单 where 1=1 ${if(len(aa)==0,\"\",\" and 货主城市 in (\"+\"'\"+treelayer(aa,true,\"\\',\\'\")+\"'\"+\")\")}";
parameters = ParameterKit.analyze4Parameters(sql, false);
Assert.assertEquals(1, parameters.length);
Assert.assertEquals(parameters[0].getName(), "aa");
sql = "SELECT * FROM Equipment where 'Tel' = ${if(false, 1, 2)}";
parameters = ParameterKit.analyze4Parameters(sql, false);
Assert.assertEquals(0, parameters.length);
parameters = ParameterKit.analyze4Parameters(sql, true);
Assert.assertEquals(0, parameters.length);
sql = "SELECT * FROM s订单 where 1=1 ${if(len(aa)==0,\"\",\" and 货主城市 in (\"+\"'\"+treelayer(aa,false,\"\\',\\'\")+\"'\"+\")\")}";
parameters = ParameterKit.analyze4Parameters(sql, false);
Assert.assertEquals(1, parameters.length);
Assert.assertEquals(parameters[0].getName(), "aa");
sql = "SELECT * FROM s订单 where 1=1 ${if(len(aa)==0,\"\",\" and 货主城市 in (\"+\"'\"+treelayer(aa,\"true\",\"\\',\\'\")+\"'\"+\")\")}";
parameters = ParameterKit.analyze4Parameters(sql, false);
Assert.assertEquals(1, parameters.length);
Assert.assertEquals(parameters[0].getName(), "aa");
}
@Test
public void createParameterMapNameSpace() {
Map<String, Object> map = new HashMap<>();
map.put("p1", 100);
map.put("p2", 200);
NameSpace ns = ParameterKit.createParameterMapNameSpace(map);
Calculator calculator = Calculator.createCalculator();
calculator.pushNameSpace(ns);
try {
Object r = calculator.eval("=$p1 + $p2");
Assert.assertEquals(300, r);
} catch (UtilEvalError utilEvalError) {
Assert.fail();
} finally {
calculator.removeNameSpace(ns);
}
}
@Test
public void createParameterMapNameSpace2() {
ParameterProvider[] parameters = new ParameterProvider[]{
ParameterKit.newParameter("p1", 100),
ParameterKit.newParameter("p2", 200)
};
NameSpace ns = ParameterKit.createParameterMapNameSpace(parameters);
Calculator calculator = Calculator.createCalculator();
calculator.pushNameSpace(ns);
try {
Object r = calculator.eval("=$p1 + $p2");
Assert.assertEquals(300, r);
} catch (UtilEvalError utilEvalError) {
Assert.fail();
} finally {
calculator.removeNameSpace(ns);
}
}
@Test
public void newParameter() {
ParameterProvider provider = ParameterKit.newParameter();
Assert.assertTrue(provider instanceof Parameter);
}
@Test
public void newParameter1() {
ParameterProvider provider = ParameterKit.newParameter("p1", "124");
Assert.assertEquals("p1", provider.getName());
Assert.assertEquals("124", provider.getValue());
}
@Test
public void newParameter2() {
ParameterProvider provider = ParameterKit.newParameter("p1");
Assert.assertEquals(provider.getName(), "p1");
Assert.assertEquals("", provider.getValue());
}
@Test
public void analyzeAndUnionSameParameters() {
ParameterProvider p1 = ParameterKit.newParameter("p1", 100);
ParameterProvider p2 = ParameterKit.newParameter("p2", 200);
ParameterProvider[] providers = ParameterKit.analyzeAndUnionSameParameters(
new String[]{"select * from td where name = ${p1} and age = ${p3}"},
new ParameterProvider[]{p1, p2});
for (ParameterProvider provider : providers) {
if ("p1".equals(provider.getName())) {
Assert.assertEquals(100, provider.getValue());
}
}
}
@Test
public void json2Parameter() {
String text = "{\"name\":\"p1\", \"type\":\"Formula\", \"value\":\"=1+1\"}";
ParameterProvider p = ParameterKit.json2Parameter(JSONFactory.createJSON(JSON.OBJECT, text));
Assert.assertEquals("p1", p.getName());
}
@Test
public void parameters2Json() {
ParameterProvider[] providers = new ParameterProvider[]{
ParameterKit.newParameter("p1", 1),
ParameterKit.newParameter("p2", "abc"),
ParameterKit.newParameter("p3", "=sum(1, 2, 4)")
};
Assert.assertEquals(
"[{\"name\":\"p1\",\"value\":1,\"type\":\"Integer\"},{\"name\":\"p2\",\"value\":\"abc\",\"type\":\"String\"},{\"name\":\"p3\",\"value\":\"=sum(1, 2, 4)\",\"type\":\"String\"}]",
ParameterKit.parameters2Json(providers).toString());
}
@Test
public void testAnalyzeAndMergeParameters() {
ParameterProvider param1 = ParameterKit.newParameter("test1", "1");
ParameterProvider param2 = ParameterKit.newParameter("test2", "2");
String text1 = "${a}";
String text2 = "${test1}";
ParameterProvider[] parameters1 = ParameterKit.analyzeAndMergeParameters(
new String[]{text1, text2},
new ParameterProvider[] {param1, param2}
);
ParameterProvider[] parameters2 = ParameterKit.analyzeAndMergeParameters(null, null);
ParameterProvider[] parameters3 = ParameterKit.analyzeAndMergeParameters(
null,
new ParameterProvider[] {param1, param2}
);
ParameterProvider[] parameters4 = ParameterKit.analyzeAndMergeParameters(
new String[] {},
new ParameterProvider[] {param1, param2}
);
ParameterProvider[] parameters5 = ParameterKit.analyzeAndMergeParameters(
new String[]{text1, text2},
new ParameterProvider[] {}
);
Assert.assertEquals(parameters1.length, 3);
Assert.assertEquals(parameters1[0], param1);
Assert.assertEquals(parameters1[1], param2);
Assert.assertEquals(parameters1[2].getName(), "a");
Assert.assertEquals(parameters1[2].getValue(), "");
Assert.assertEquals(parameters2.length, 0);
Assert.assertEquals(parameters3.length, 2);
Assert.assertEquals(parameters3[0], param1);
Assert.assertEquals(parameters3[1], param2);
Assert.assertEquals(parameters4.length, 2);
Assert.assertEquals(parameters4[0], param1);
Assert.assertEquals(parameters4[1], param2);
Assert.assertEquals(parameters5.length, 2);
Assert.assertEquals(parameters5[0].getName(), "a");
Assert.assertEquals(parameters5[0].getValue(), "");
Assert.assertEquals(parameters5[1].getName(), "test1");
Assert.assertEquals(parameters5[1].getValue(), "");
}
}