01: package org.drools.rule.builder.dialect.java;
02:
03: import java.util.Set;
04:
05: import junit.framework.TestCase;
06:
07: import org.drools.compiler.Dialect;
08: import org.drools.compiler.DialectRegistry;
09: import org.drools.compiler.PackageBuilder;
10: import org.drools.compiler.PackageBuilderConfiguration;
11: import org.drools.lang.descr.AccumulateDescr;
12: import org.drools.lang.descr.DescrFactory;
13: import org.drools.lang.descr.FieldBindingDescr;
14: import org.drools.lang.descr.PatternDescr;
15: import org.drools.lang.descr.RuleDescr;
16: import org.drools.rule.Accumulate;
17: import org.drools.rule.builder.RuleBuildContext;
18:
19: public class JavaAccumulateBuilderTest extends TestCase {
20:
21: private JavaAccumulateBuilder builder;
22:
23: protected void setUp() throws Exception {
24: super .setUp();
25: builder = new JavaAccumulateBuilder();
26: }
27:
28: protected void tearDown() throws Exception {
29: super .tearDown();
30: }
31:
32: public void testBuildRuleBuildContextBaseDescr() {
33: // $total : Integer() from accumulate( Cheese( $price : price ) init( int x = 0; ) action( x += $price ) result( new Integer( x ) ) )
34: AccumulateDescr accumDescr = new DescrFactory()
35: .createAccumulate();
36:
37: FieldBindingDescr price = new FieldBindingDescr("price",
38: "$price");
39: PatternDescr cheeseDescr = new PatternDescr("org.drools.Cheese");
40: cheeseDescr.addConstraint(price);
41: accumDescr.setInputPattern(cheeseDescr);
42:
43: accumDescr.setInitCode("int x = 0;");
44: accumDescr.setActionCode("x += $price;");
45: accumDescr.setResultCode("new Integer( x )");
46:
47: org.drools.rule.Package pkg = new org.drools.rule.Package(
48: "org.drools");
49: final PackageBuilder pkgBulider = new PackageBuilder(pkg);
50: final PackageBuilderConfiguration conf = pkgBulider
51: .getPackageBuilderConfiguration();
52: Dialect dialect = pkgBulider.getPackageBuilderConfiguration()
53: .getDialectRegistry().getDialectConfiguration("java")
54: .getDialect();
55:
56: RuleDescr ruleDescr = new RuleDescr("test rule");
57: RuleBuildContext context = new RuleBuildContext(conf, pkg,
58: ruleDescr, conf.getDialectRegistry(), dialect);
59:
60: Accumulate accumulate = (Accumulate) builder.build(context,
61: accumDescr);
62:
63: assertTrue(context.getErrors().toString(), context.getErrors()
64: .isEmpty());
65: // System.out.println( context.getInvokers() );
66: // System.out.println( context.getMethods() );
67: }
68:
69: public void testFixInitCode() throws Exception {
70: JavaExprAnalyzer analyzer = new JavaExprAnalyzer();
71: JavaAccumulateBuilder builder = new JavaAccumulateBuilder();
72:
73: String code = "int x = 0;";
74: String expected = "x = 0;";
75: JavaAnalysisResult analysis = analyzer.analyzeBlock(code,
76: new Set[0]);
77: String result = builder.fixInitCode(analysis, code);
78: assertEquals(expected, result);
79:
80: code = "$anExternalVar.method(); \nint aVar = 0, anotherVar=10 ;Integer bla = new Integer( 25);functionCall();\n";
81: expected = "$anExternalVar.method(); \naVar = 0;anotherVar=10;bla = new Integer( 25);functionCall();\n";
82: ;
83: analysis = analyzer.analyzeBlock(code, new Set[0]);
84: result = builder.fixInitCode(analysis, code);
85: assertEquals(expected, result);
86:
87: code = "$anExternalVar.method(); String[] aVar = new String[] { \"a\", \"b\" }, anotherVar=new String[] { someStringVar } ;final Integer bla = new Integer( 25);functionCall();\n";
88: expected = "$anExternalVar.method(); aVar = new String[] { \"a\", \"b\" };anotherVar=new String[] { someStringVar };bla = new Integer( 25);functionCall();\n";
89: analysis = analyzer.analyzeBlock(code, new Set[0]);
90: result = builder.fixInitCode(analysis, code);
91: assertEquals(expected, result);
92:
93: }
94:
95: }
|