[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