01: package org.drools.integrationtests;
02:
03: import java.io.ByteArrayInputStream;
04: import java.io.ByteArrayOutputStream;
05: import java.io.IOException;
06: import java.io.InputStreamReader;
07: import java.io.ObjectOutputStream;
08: import java.io.Reader;
09: import java.io.Serializable;
10: import java.util.ArrayList;
11: import java.util.HashMap;
12: import java.util.List;
13:
14: import junit.framework.Assert;
15: import junit.framework.TestCase;
16:
17: import org.drools.Cheese;
18: import org.drools.RuleBase;
19: import org.drools.RuleBaseFactory;
20: import org.drools.WorkingMemory;
21: import org.drools.common.DroolsObjectInputStream;
22: import org.drools.compiler.DrlParser;
23: import org.drools.compiler.DroolsParserException;
24: import org.drools.compiler.PackageBuilder;
25: import org.drools.lang.descr.PackageDescr;
26: import org.drools.rule.Package;
27: import org.mvel.MVEL;
28:
29: public class MVELTest extends TestCase {
30: public void testHelloWorld() throws Exception {
31: // read in the source
32: final Reader reader = new InputStreamReader(getClass()
33: .getResourceAsStream("test_mvel.drl"));
34: RuleBase ruleBase = loadRuleBase(reader);
35:
36: // Bellow lines are a way to make sure serialization is fine
37: // start of serialization block
38: ByteArrayOutputStream out = new ByteArrayOutputStream();
39: ObjectOutputStream obj = new ObjectOutputStream(out);
40: obj.writeObject(ruleBase);
41: obj.close();
42:
43: byte[] buf = out.toByteArray();
44:
45: DroolsObjectInputStream in = new DroolsObjectInputStream(
46: new ByteArrayInputStream(buf));
47: ruleBase = (RuleBase) in.readObject();
48: // end of serialization block
49:
50: final WorkingMemory workingMemory = ruleBase
51: .newStatefulSession();
52:
53: final List list = new ArrayList();
54: workingMemory.setGlobal("list", list);
55:
56: workingMemory.insert(new Cheese("stilton", 10));
57: workingMemory.fireAllRules();
58: assertEquals(2, list.size());
59: assertEquals(new Integer(30), list.get(0));
60: assertEquals(new Integer(22), list.get(1));
61:
62: }
63:
64: public Object compiledExecute(String ex) {
65: Serializable compiled = MVEL.compileExpression(ex);
66: return MVEL.executeExpression(compiled, new Object(),
67: new HashMap());
68: }
69:
70: private RuleBase loadRuleBase(final Reader reader)
71: throws IOException, DroolsParserException, Exception {
72: final DrlParser parser = new DrlParser();
73: final PackageDescr packageDescr = parser.parse(reader);
74: if (parser.hasErrors()) {
75: Assert
76: .fail("Error messages in parser, need to sort this our (or else collect error messages)");
77: }
78: // pre build the package
79: final PackageBuilder builder = new PackageBuilder();
80: builder.addPackage(packageDescr);
81: final Package pkg = builder.getPackage();
82:
83: // add the package to a rulebase
84: final RuleBase ruleBase = getRuleBase();
85: ruleBase.addPackage(pkg);
86: // load up the rulebase
87: return ruleBase;
88: }
89:
90: protected RuleBase getRuleBase() throws Exception {
91:
92: return RuleBaseFactory.newRuleBase(RuleBase.RETEOO, null);
93: }
94: }
|