001: package org.drools.integrationtests;
002:
003: import java.io.InputStreamReader;
004: import java.io.Reader;
005: import java.io.StringReader;
006: import java.util.ArrayList;
007: import java.util.List;
008:
009: import junit.framework.TestCase;
010:
011: import org.drools.Cheese;
012: import org.drools.Person;
013: import org.drools.RuleBase;
014: import org.drools.RuleBaseConfiguration;
015: import org.drools.RuleBaseFactory;
016: import org.drools.WorkingMemory;
017: import org.drools.compiler.PackageBuilder;
018: import org.drools.rule.Package;
019:
020: public class DslTest extends TestCase {
021: protected RuleBase getRuleBase() throws Exception {
022:
023: return RuleBaseFactory.newRuleBase(RuleBase.RETEOO, null);
024: }
025:
026: protected RuleBase getRuleBase(final RuleBaseConfiguration config)
027: throws Exception {
028:
029: return RuleBaseFactory.newRuleBase(RuleBase.RETEOO, config);
030: }
031:
032: public void testWithExpanderDSL() throws Exception {
033: final PackageBuilder builder = new PackageBuilder();
034: final Reader source = new InputStreamReader(getClass()
035: .getResourceAsStream("rule_with_expander_dsl.dslr"));
036: final Reader dsl = new InputStreamReader(getClass()
037: .getResourceAsStream("test_expander.dsl"));
038: builder.addPackageFromDrl(source, dsl);
039:
040: // the compiled package
041: final Package pkg = builder.getPackage();
042: assertTrue(pkg.isValid());
043: assertEquals(null, pkg.getErrorSummary());
044: // Check errors
045: final String err = builder.getErrors().toString();
046: assertEquals("", err);
047:
048: assertEquals(0, builder.getErrors().getErrors().length);
049:
050: final RuleBase ruleBase = getRuleBase();
051: ruleBase.addPackage(pkg);
052:
053: final WorkingMemory wm = ruleBase.newStatefulSession();
054: wm.insert(new Person("Bob", "http://foo.bar"));
055: wm.insert(new Cheese("stilton", 42));
056:
057: final List messages = new ArrayList();
058: wm.setGlobal("messages", messages);
059: wm.fireAllRules();
060:
061: // should have fired
062: assertEquals(1, messages.size());
063:
064: }
065:
066: public void testWithExpanderMore() throws Exception {
067: final PackageBuilder builder = new PackageBuilder();
068: final Reader source = new InputStreamReader(
069: getClass().getResourceAsStream(
070: "rule_with_expander_dsl_more.dslr"));
071: final Reader dsl = new InputStreamReader(getClass()
072: .getResourceAsStream("test_expander.dsl"));
073: builder.addPackageFromDrl(source, dsl);
074:
075: // the compiled package
076: final Package pkg = builder.getPackage();
077: assertTrue(pkg.isValid());
078: assertEquals(null, pkg.getErrorSummary());
079: // Check errors
080: final String err = builder.getErrors().toString();
081: assertEquals("", err);
082: assertEquals(0, builder.getErrors().getErrors().length);
083:
084: final RuleBase ruleBase = getRuleBase();
085: ruleBase.addPackage(pkg);
086:
087: final WorkingMemory wm = ruleBase.newStatefulSession();
088: wm.insert(new Person("rage"));
089: wm.insert(new Cheese("cheddar", 15));
090:
091: final List messages = new ArrayList();
092: wm.setGlobal("messages", messages);
093: wm.fireAllRules();
094:
095: // should have NONE, as both conditions should be false.
096: assertEquals(0, messages.size());
097:
098: wm.insert(new Person("fire"));
099: wm.fireAllRules();
100:
101: // still no firings
102: assertEquals(0, messages.size());
103:
104: wm.insert(new Cheese("brie", 15));
105:
106: wm.fireAllRules();
107:
108: // YOUR FIRED
109: assertEquals(1, messages.size());
110: }
111:
112: public void testEmptyDSL() throws Exception {
113: final String DSL = "# This is an empty dsl file.";
114: final PackageBuilder builder = new PackageBuilder();
115: final Reader drlReader = new InputStreamReader(getClass()
116: .getResourceAsStream("literal_rule.drl"));
117: final Reader dslReader = new StringReader(DSL);
118:
119: builder.addPackageFromDrl(drlReader, dslReader);
120: final Package pkg = builder.getPackage();
121:
122: assertFalse(pkg.isValid());
123: }
124:
125: public void testDSLWithIndividualConstraintMappings()
126: throws Exception {
127: final PackageBuilder builder = new PackageBuilder();
128: final Reader source = new InputStreamReader(getClass()
129: .getResourceAsStream(
130: "test_dslWithIndividualConstraints.dslr"));
131: final Reader dsl = new InputStreamReader(getClass()
132: .getResourceAsStream(
133: "test_dslWithIndividualConstraints.dsl"));
134: builder.addPackageFromDrl(source, dsl);
135:
136: // the compiled package
137: final Package pkg = builder.getPackage();
138: assertTrue(pkg.getErrorSummary(), pkg.isValid());
139: assertEquals(pkg.getErrorSummary(), null, pkg.getErrorSummary());
140: // Check errors
141: assertEquals(0, builder.getErrors().getErrors().length);
142:
143: final RuleBase ruleBase = getRuleBase();
144: ruleBase.addPackage(pkg);
145:
146: final WorkingMemory wm = ruleBase.newStatefulSession();
147: List results = new ArrayList();
148: wm.setGlobal("results", results);
149: Cheese cheese = new Cheese("stilton", 42);
150: wm.insert(cheese);
151:
152: wm.fireAllRules();
153:
154: // should have fired
155: assertEquals(1, results.size());
156: assertEquals(cheese, results.get(0));
157:
158: }
159:
160: }
|