[jboss-svn-commits] JBL Code SVN: r16148 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/testframework and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Oct 30 00:10:23 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-10-30 00:10:22 -0400 (Tue, 30 Oct 2007)
New Revision: 16148
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Expectation.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/testframework/test_stateful.drl
Removed:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Assertion.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
Log:
JBRULES-1271 testing framework - supports stateful rules
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Assertion.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Assertion.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Assertion.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -1,27 +0,0 @@
-package org.drools.brms.client.modeldriven.testing;
-
-import java.io.Serializable;
-
-/**
- * All assertions on results.
- *
- * Types of assertions:
- * - field of a fact expected/actual not null/MVEL
- * - rule fired (n times)
- * - a fact exists (with field values/MVEL)
- * - a fact does not exist (?)
- * - a global value (field - or MVEL script)
- *
- * @author Michael Neale
- */
-public interface Assertion extends Serializable {
-
- /**
- * Return false if the assertion
- * @return
- */
- boolean wasSuccessful();
-
-
-
-}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -10,7 +10,7 @@
* This will be used to filter the rule engines behaviour under test.
* @author Michael Neale
*/
-public class ExecutionTrace implements Serializable {
+public class ExecutionTrace implements Fixture {
/**
* the rules to include or exclude
@@ -24,6 +24,12 @@
public boolean inclusive = false;
/**
+ * This is the simulated date - leaving it as null means it will use
+ * the current time.
+ */
+ public Date scenarioSimulatedDate = null;
+
+ /**
* @gwt.typeArgs <java.lang.String, java.lang.Integer>
*/
public Map firingCounts = new HashMap();
@@ -33,11 +39,8 @@
*/
public long executionTimeResult = -1;
- /**
- * This is the date the last time the scenario was run (and what the results apply to).
- */
- public Date lastRunResult;
+
public ExecutionTrace() {}
public ExecutionTrace(String[] ruleList, boolean inclusive) {
this.rules = ruleList;
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Expectation.java (from rev 16124, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Assertion.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Expectation.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Expectation.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -0,0 +1,20 @@
+package org.drools.brms.client.modeldriven.testing;
+
+
+/**
+ * All assertions on results.
+ *
+ *
+ * @author Michael Neale
+ */
+public interface Expectation extends Fixture {
+
+ /**
+ * Return false if the assertion
+ * @return
+ */
+ boolean wasSuccessful();
+
+
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -2,7 +2,7 @@
import java.io.Serializable;
-public class FactData implements Serializable {
+public class FactData implements Fixture {
/**
* The type (class)
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -1,7 +1,10 @@
package org.drools.brms.client.modeldriven.testing;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
/**
* This represents a test scenario.
@@ -16,38 +19,31 @@
*/
public int maxRuleFirings = 100000;
- /**
- * This is the simulated date - leaving it as null means it will use
- * the current time.
- */
- public Date scenarioSimulatedDate = null;
/**
- * the fact data (and globals) to use
+ * Fixtures are parts of the test. They may be assertions, globals, data, execution runs etc.
+ * Anything really.
*/
- public FactData[] facts = new FactData[0];
+ public List fixtures = new ArrayList();
/**
- * Result assertions/expectations.
+ * This is the date the last time the scenario was run (and what the results apply to).
*/
- public Assertion[] assertions = new Assertion[0];
+ public Date lastRunResult;
-
/**
- * The rules to trace in this scenario.
- */
- public ExecutionTrace executionTrace = new ExecutionTrace();
-
- /**
* Returns true if this was a totally successful scenario, based on the results contained.
*/
public boolean wasSuccessful() {
- for (int i = 0; i < this.assertions.length; i++) {
- Assertion as = this.assertions[i];
- if (!as.wasSuccessful()) {
- return false;
+ for (Iterator iterator = fixtures.iterator(); iterator.hasNext();) {
+ Fixture f= (Fixture) iterator.next();
+ if (f instanceof Expectation) {
+ if (! ((Expectation) f ).wasSuccessful()) {
+ return false;
+ }
}
+
}
return true;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -5,7 +5,7 @@
* @author Michael Neale
*
*/
-public class VerifyFact implements Assertion {
+public class VerifyFact implements Expectation {
public VerifyField[] fieldValues = new VerifyField[0];
public String factName;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -1,6 +1,6 @@
package org.drools.brms.client.modeldriven.testing;
-public class VerifyRuleFired implements Assertion {
+public class VerifyRuleFired implements Expectation {
public String ruleName;
public Integer expectedCount;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -7,13 +7,17 @@
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.Map;
+import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.base.TypeResolver;
-import org.drools.brms.client.modeldriven.testing.Assertion;
+import org.drools.brms.client.modeldriven.testing.Expectation;
+import org.drools.brms.client.modeldriven.testing.ExecutionTrace;
import org.drools.brms.client.modeldriven.testing.FactData;
import org.drools.brms.client.modeldriven.testing.FieldData;
+import org.drools.brms.client.modeldriven.testing.Fixture;
import org.drools.brms.client.modeldriven.testing.Scenario;
import org.drools.brms.client.modeldriven.testing.VerifyFact;
import org.drools.brms.client.modeldriven.testing.VerifyField;
@@ -32,6 +36,8 @@
final Scenario scenario;
final Map<String, Object> populatedData = new HashMap<String, Object>();
final Map<String, Object> globalData = new HashMap<String, Object>();
+ final Map<String, FactHandle> factHandles = new HashMap<String, FactHandle>();
+
final InternalWorkingMemory workingMemory;
/**
@@ -52,34 +58,72 @@
final InternalWorkingMemory wm) throws ClassNotFoundException {
this.scenario = scenario;
this.workingMemory = wm;
- scenario.executionTrace.lastRunResult = new Date();
+ scenario.lastRunResult = new Date();
+ TestingEventListener listener = null;
+ for (Iterator<Fixture> iterator = scenario.fixtures.iterator(); iterator.hasNext();) {
+ Fixture fx = iterator.next();
- // have to go and create all the facts
- for (int i = 0; i < scenario.facts.length; i++) {
- FactData fact = scenario.facts[i];
- Object f = eval("new " + resolver.getFullTypeName(fact.type) + "()");
- if (fact.isGlobal) {
- populateFields(fact, globalData, f);
- globalData.put(fact.name, f);
+ if (fx instanceof FactData) {
+ //deal with facts and globals
+ FactData fact = (FactData)fx;
+ Object f = eval("new " + resolver.getFullTypeName(fact.type) + "()");
+ if (fact.isGlobal) {
+ populateFields(fact, globalData, f);
+ globalData.put(fact.name, f);
+ wm.setGlobal(fact.name, f);
+ } else {
+ populateFields(fact, populatedData, f);
+ populatedData.put(fact.name, f);
+ this.factHandles.put(fact.name, wm.insert(f));
+ }
+ } else if (fx instanceof ExecutionTrace) {
+ ExecutionTrace executionTrace = (ExecutionTrace)fx;
+ //create the listener to trace rules
+ HashSet<String> ruleList = new HashSet<String>();
+ ruleList.addAll(Arrays.asList(executionTrace.rules));
+ listener = new TestingEventListener(ruleList, wm
+ .getRuleBase(), executionTrace.inclusive);
+ wm.addEventListener(listener);
+
+ //set up the time machine
+ applyTimeMachine(wm, executionTrace);
+
+ //love you
+ long time = System.currentTimeMillis();
+ wm.fireAllRules(scenario.maxRuleFirings);
+ executionTrace.executionTimeResult = System.currentTimeMillis() - time;
+ executionTrace.firingCounts = listener.firingCounts;
+ } else if (fx instanceof Expectation) {
+ Expectation assertion = (Expectation) fx;
+ if (assertion instanceof VerifyFact) {
+ verify((VerifyFact) assertion);
+ } else if (assertion instanceof VerifyRuleFired) {
+ verify((VerifyRuleFired) assertion,
+ (listener.firingCounts != null) ? listener.firingCounts : new HashMap<String, Integer>());
+ }
} else {
- populateFields(fact, populatedData, f);
- populatedData.put(fact.name, f);
+ throw new IllegalArgumentException("Not sure what to do with " + fx);
}
+
+
+
}
- //create the listener to trace rules
- HashSet<String> ruleList = new HashSet<String>();
- ruleList.addAll(Arrays.asList(scenario.executionTrace.rules));
- TestingEventListener listener = new TestingEventListener(ruleList, wm
- .getRuleBase(), scenario.executionTrace.inclusive);
- wm.addEventListener(listener);
- //set up the time machine
- if (scenario.scenarioSimulatedDate != null) {
+
+
+
+
+
+ }
+
+ private void applyTimeMachine(final InternalWorkingMemory wm,
+ ExecutionTrace executionTrace) {
+ if (executionTrace.scenarioSimulatedDate != null) {
final Calendar now = Calendar.getInstance();
- now.setTimeInMillis(scenario.scenarioSimulatedDate.getTime());
+ now.setTimeInMillis(executionTrace.scenarioSimulatedDate.getTime());
wm.setTimeMachine(new TimeMachine() {
@Override
public Calendar getNow() {
@@ -87,25 +131,6 @@
}
});
}
-
- // now run the rules...
- applyData(wm, this.populatedData, this.globalData);
- //love you
- long time = System.currentTimeMillis();
- wm.fireAllRules(scenario.maxRuleFirings);
- scenario.executionTrace.executionTimeResult = System.currentTimeMillis() - time;
- scenario.executionTrace.firingCounts = listener.firingCounts;
-
- // now check the results...
- for (int i = 0; i < scenario.assertions.length; i++) {
- Assertion assertion = scenario.assertions[i];
- if (assertion instanceof VerifyFact) {
- verify((VerifyFact) assertion);
- } else if (assertion instanceof VerifyRuleFired) {
- verify((VerifyRuleFired) assertion, listener.firingCounts);
- }
- }
-
}
void verify(VerifyRuleFired assertion, Map<String, Integer> firingCounts) {
@@ -122,14 +147,6 @@
}
}
- private void applyData(WorkingMemory wm, Map<String, Object> facts, Map<String, Object> globals) {
- for (Map.Entry<String, Object> e : globals.entrySet()) {
- wm.setGlobal(e.getKey(), e.getValue());
- }
- for (Object f : facts.values()) {
- wm.insert(f);
- }
- }
void verify(VerifyFact value) {
Object fact = this.populatedData.get(value.factName);
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2007-10-30 02:16:07 UTC (rev 16147)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2007-10-30 04:10:22 UTC (rev 16148)
@@ -3,6 +3,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -17,7 +18,8 @@
import org.drools.WorkingMemory;
import org.drools.base.ClassTypeResolver;
import org.drools.base.TypeResolver;
-import org.drools.brms.client.modeldriven.testing.Assertion;
+import org.drools.brms.client.modeldriven.testing.Expectation;
+import org.drools.brms.client.modeldriven.testing.ExecutionTrace;
import org.drools.brms.client.modeldriven.testing.FactData;
import org.drools.brms.client.modeldriven.testing.FieldData;
import org.drools.brms.client.modeldriven.testing.Scenario;
@@ -37,7 +39,7 @@
public void testPopulateFacts() throws Exception {
Scenario sc = new Scenario();
- sc.facts = new FactData[] {
+ FactData[] facts = new FactData[] {
new FactData("Cheese", "c1", new FieldData[] {
new FieldData("type", "cheddar", false),
new FieldData("price", "42", false) }, false),
@@ -45,6 +47,7 @@
new FieldData("name", "mic", false),
new FieldData("age", "30 + 3", true) }, false) };
+ sc.fixtures.addAll(Arrays.asList(facts));
TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
Thread.currentThread().getContextClassLoader());
resolver.addImport("org.drools.Cheese");
@@ -152,14 +155,17 @@
public void testDummyRunNoRules() throws Exception {
Scenario sc = new Scenario();
- sc.facts = new FactData[] { new FactData("Cheese", "c1",
+ FactData[] facts = new FactData[] { new FactData("Cheese", "c1",
new FieldData[] { new FieldData("type", "cheddar", false),
new FieldData("price", "42", false) }, false) };
- sc.assertions = new VerifyFact[] { new VerifyFact("c1",
+ VerifyFact[] assertions = new VerifyFact[] { new VerifyFact("c1",
new VerifyField[] { new VerifyField("type", "cheddar"),
new VerifyField("price", "42") }) };
+ sc.fixtures.addAll(Arrays.asList(facts));
+ sc.fixtures.addAll(Arrays.asList(assertions));
+
TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
Thread.currentThread().getContextClassLoader());
resolver.addImport("org.drools.Cheese");
@@ -170,7 +176,7 @@
assertEquals(runner.populatedData.get("c1"), wm.facts.get(0));
assertTrue(runner.populatedData.containsKey("c1"));
- VerifyFact vf = (VerifyFact) sc.assertions[0];
+ VerifyFact vf = (VerifyFact) assertions[0];
for (int i = 0; i < vf.fieldValues.length; i++) {
assertTrue(vf.fieldValues[i].successResult);
}
@@ -212,7 +218,11 @@
public void testTestingEventListener() throws Exception {
Scenario sc = new Scenario();
- sc.executionTrace.rules = new String[] { "foo", "bar" };
+ ExecutionTrace ext = new ExecutionTrace();
+
+ ext.rules = new String[] { "foo", "bar" };
+ sc.fixtures.add(ext);
+
MockWorkingMemory wm = new MockWorkingMemory();
ScenarioRunner run = new ScenarioRunner(sc, null, wm);
assertEquals(wm, run.workingMemory);
@@ -226,11 +236,13 @@
public void testWithGlobals() throws Exception {
Scenario sc = new Scenario();
- sc.facts = new FactData[] {
+ FactData[] facts = new FactData[] {
new FactData("Cheese", "c", new FieldData[] { new FieldData(
"type", "cheddar", false) }, true),
new FactData("Cheese", "c2", new FieldData[] { new FieldData(
"type", "stilton", false) }, false) };
+ sc.fixtures.addAll(Arrays.asList(facts));
+
TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
Thread.currentThread().getContextClassLoader());
resolver.addImport("org.drools.Cheese");
@@ -264,11 +276,13 @@
long future = tm.getNow().getTimeInMillis();
assertTrue(future > time);
- sc.scenarioSimulatedDate = new Date("10-Jul-1974");
+ ExecutionTrace ext = new ExecutionTrace();
+ ext.scenarioSimulatedDate = new Date("10-Jul-1974");
+ sc.fixtures.add(ext);
run = new ScenarioRunner(sc, null, wm);
tm = run.workingMemory.getTimeMachine();
- long expected = sc.scenarioSimulatedDate.getTime();
+ long expected = ext.scenarioSimulatedDate.getTime();
assertEquals(expected, tm.getNow().getTimeInMillis());
Thread.sleep(50);
assertEquals(expected, tm.getNow().getTimeInMillis());
@@ -280,37 +294,40 @@
*/
public void testIntegrationWithSuccess() throws Exception {
- Date now = new Date();
-
Scenario sc = new Scenario();
- sc.facts = new FactData[] {
+ FactData[] facts = new FactData[] {
new FactData("Cheese", "c1", new FieldData[] {
new FieldData("type", "cheddar", false),
new FieldData("price", "42", false) }, false),
new FactData("Person", "p", new FieldData[0] , true)
};
+ sc.fixtures.addAll(Arrays.asList(facts));
+ ExecutionTrace executionTrace = new ExecutionTrace();
- sc.executionTrace.rules = new String[] {"rule1", "rule2" };
- sc.executionTrace.inclusive = true;
+ executionTrace.rules = new String[] {"rule1", "rule2" };
+ executionTrace.inclusive = true;
+ sc.fixtures.add(executionTrace);
- sc.assertions = new Assertion[5];
+ Expectation[] assertions = new Expectation[5];
- sc.assertions[0] = new VerifyFact("c1", new VerifyField[] {
+ assertions[0] = new VerifyFact("c1", new VerifyField[] {
new VerifyField("type", "cheddar")
});
- sc.assertions[1] = new VerifyFact("p", new VerifyField[] {
+ assertions[1] = new VerifyFact("p", new VerifyField[] {
new VerifyField("name", "rule1"),
new VerifyField("status", "rule2")
});
- sc.assertions[2] = new VerifyRuleFired("rule1", 1, null);
- sc.assertions[3] = new VerifyRuleFired("rule2", 1, null);
- sc.assertions[4] = new VerifyRuleFired("rule3", 1, null);
+ assertions[2] = new VerifyRuleFired("rule1", 1, null);
+ assertions[3] = new VerifyRuleFired("rule2", 1, null);
+ assertions[4] = new VerifyRuleFired("rule3", 1, null);
+ sc.fixtures.addAll(Arrays.asList(assertions));
+
TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
Thread.currentThread().getContextClassLoader());
resolver.addImport("org.drools.Cheese");
@@ -330,41 +347,75 @@
assertEquals(0, p.getAge());
- assertTrue((new Date()).after(sc.executionTrace.lastRunResult));
- assertTrue(sc.executionTrace.executionTimeResult != -1);
+ assertTrue((new Date()).after(sc.lastRunResult));
+ assertTrue(executionTrace.executionTimeResult != -1);
}
+ public void testIntgerationStateful() throws Exception {
+ Scenario sc = new Scenario();
+ sc.fixtures.add(new FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "1", false)}, false));
+ ExecutionTrace ex = new ExecutionTrace();
+ sc.fixtures.add(ex);
+ sc.fixtures.add(new FactData("Cheese", "c2", new FieldData[] {new FieldData("price", "2", false)}, false));
+ sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "rule1")}));
+ ex = new ExecutionTrace();
+ sc.fixtures.add(ex);
+ sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "rule2")}));
+
+ TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
+ Thread.currentThread().getContextClassLoader());
+ resolver.addImport("org.drools.Cheese");
+
+
+ WorkingMemory wm = getWorkingMemory("test_stateful.drl");
+ ScenarioRunner run = new ScenarioRunner(sc, resolver, (InternalWorkingMemory) wm);
+
+ Cheese c1 = (Cheese) run.populatedData.get("c1");
+ Cheese c2 = (Cheese) run.populatedData.get("c2");
+
+ assertEquals("rule2", c1.getType());
+ assertEquals("rule2", c2.getType());
+
+ assertTrue(sc.wasSuccessful());
+
+
+ }
+
public void testIntegrationWithFailure() throws Exception {
Scenario sc = new Scenario();
- sc.facts = new FactData[] {
+ FactData[] facts = new FactData[] {
new FactData("Cheese", "c1", new FieldData[] {
new FieldData("type", "cheddar", false),
new FieldData("price", "42", false) }, false),
new FactData("Person", "p", new FieldData[0] , true)
};
+ sc.fixtures.addAll(Arrays.asList(facts));
+ ExecutionTrace executionTrace = new ExecutionTrace();
+ executionTrace.rules = new String[] {"rule1", "rule2" };
+ executionTrace.inclusive = true;
+ sc.fixtures.add(executionTrace);
- sc.executionTrace.rules = new String[] {"rule1", "rule2" };
- sc.executionTrace.inclusive = true;
+ Expectation[] assertions = new Expectation[5];
- sc.assertions = new Assertion[5];
-
- sc.assertions[0] = new VerifyFact("c1", new VerifyField[] {
+ assertions[0] = new VerifyFact("c1", new VerifyField[] {
new VerifyField("type", "cheddar")
});
- sc.assertions[1] = new VerifyFact("p", new VerifyField[] {
+ assertions[1] = new VerifyFact("p", new VerifyField[] {
new VerifyField("name", "XXX"),
new VerifyField("status", "rule2")
});
- sc.assertions[2] = new VerifyRuleFired("rule1", 1, null);
- sc.assertions[3] = new VerifyRuleFired("rule2", 1, null);
- sc.assertions[4] = new VerifyRuleFired("rule3", 2, null);
+ assertions[2] = new VerifyRuleFired("rule1", 1, null);
+ assertions[3] = new VerifyRuleFired("rule2", 1, null);
+ assertions[4] = new VerifyRuleFired("rule3", 2, null);
+ sc.fixtures.addAll(Arrays.asList(assertions));
+
TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
Thread.currentThread().getContextClassLoader());
resolver.addImport("org.drools.Cheese");
@@ -378,12 +429,12 @@
assertFalse(sc.wasSuccessful());
- VerifyFact vf = (VerifyFact) sc.assertions[1];
+ VerifyFact vf = (VerifyFact) assertions[1];
assertFalse(vf.fieldValues[0].successResult);
assertEquals("XXX", vf.fieldValues[0].expected);
assertEquals("rule1", vf.fieldValues[0].actualResult);
- VerifyRuleFired vr = (VerifyRuleFired) sc.assertions[4];
+ VerifyRuleFired vr = (VerifyRuleFired) assertions[4];
assertFalse(vr.successResult);
assertEquals(2, vr.expectedCount.intValue());
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/testframework/test_stateful.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/testframework/test_stateful.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/testframework/test_stateful.drl 2007-10-30 04:10:22 UTC (rev 16148)
@@ -0,0 +1,23 @@
+package foo.bar
+
+import org.drools.Cheese
+
+
+rule "rule1"
+ when
+ c1: Cheese(price == 1)
+ then
+ c1.setType("rule1");
+end
+
+rule "rule2"
+ when
+ c1: Cheese(price == 1)
+ c2: Cheese(price == 2)
+ then
+ c1.setType("rule2");
+ c2.setType("rule2");
+end
+
+
+
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/testframework/test_stateful.drl
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list