[jboss-svn-commits] JBL Code SVN: r16002 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/testframework and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 23 02:08:16 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-10-23 02:08:16 -0400 (Tue, 23 Oct 2007)
New Revision: 16002

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
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/VerifyFact.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/MockWorkingMemory.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
Log:
JBRULES-1271 testing framework

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-23 05:19:58 UTC (rev 16001)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java	2007-10-23 06:08:16 UTC (rev 16002)
@@ -15,13 +15,19 @@
 	public String name;
 
 
+	/**
+	 * If its a global, then we will punt it in as a global, not a fact.
+	 */
+	public boolean isGlobal;
+
 	public FieldData[] fieldData;
 
 	public FactData() {}
-	public FactData(String type, String name, FieldData[] fieldData) {
+	public FactData(String type, String name, FieldData[] fieldData, boolean global) {
 		this.type = type;
 		this.name = name;
 		this.fieldData = fieldData;
+		this.isGlobal = global;
 	}
 
 

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-23 05:19:58 UTC (rev 16001)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java	2007-10-23 06:08:16 UTC (rev 16002)
@@ -11,6 +11,7 @@
 	public String factName;
 
 
+
 	public VerifyFact() {}
 	public VerifyFact(String factName, VerifyField[] fieldValues) {
 		this.factName = factName;

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-23 05:19:58 UTC (rev 16001)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java	2007-10-23 06:08:16 UTC (rev 16002)
@@ -3,7 +3,6 @@
 import static org.mvel.MVEL.eval;
 
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -11,13 +10,14 @@
 
 import org.drools.WorkingMemory;
 import org.drools.base.TypeResolver;
-import org.drools.brms.client.modeldriven.testing.VerifyFact;
-import org.drools.brms.client.modeldriven.testing.VerifyField;
 import org.drools.brms.client.modeldriven.testing.Assertion;
 import org.drools.brms.client.modeldriven.testing.FactData;
 import org.drools.brms.client.modeldriven.testing.FieldData;
 import org.drools.brms.client.modeldriven.testing.Scenario;
+import org.drools.brms.client.modeldriven.testing.VerifyFact;
+import org.drools.brms.client.modeldriven.testing.VerifyField;
 import org.drools.brms.client.modeldriven.testing.VerifyRuleFired;
+import org.drools.common.InternalWorkingMemory;
 
 /**
  * This actually runs the test scenarios.
@@ -28,76 +28,88 @@
 public class ScenarioRunner {
 
 	final Scenario scenario;
-	final Map<String, Object> populatedData;
+	final Map<String, Object> populatedData = new HashMap<String, Object>();
+	final Map<String, Object> globalData = new HashMap<String, Object>();
+	final InternalWorkingMemory workingMemory;
 
-
 	/**
-	 * @param scenario The scenario to run.
-	 * @param resolver A populated type resolved to be used to resolve the types in the scenario.
+	 * @param scenario
+	 *            The scenario to run.
+	 * @param resolver
+	 *            A populated type resolved to be used to resolve the types in
+	 *            the scenario.
 	 *
-	 * For info on how to invoke this, see ContentPackageAssemblerTest.testPackageWithRuleflow in drools-jbrms
-	 * This requires that the classloader for the thread context be set appropriately. The PackageBuilder
-	 * can provide a suitable TypeResolver for a given package header, and the Package config can provide
-	 * a classloader.
+	 * For info on how to invoke this, see
+	 * ContentPackageAssemblerTest.testPackageWithRuleflow in drools-jbrms This
+	 * requires that the classloader for the thread context be set
+	 * appropriately. The PackageBuilder can provide a suitable TypeResolver for
+	 * a given package header, and the Package config can provide a classloader.
 	 *
 	 */
-	public ScenarioRunner(Scenario scenario, TypeResolver resolver, WorkingMemory wm) throws ClassNotFoundException {
-		Map<String, Object> factData = new HashMap<String, Object>();
+	public ScenarioRunner(Scenario scenario, TypeResolver resolver,
+			InternalWorkingMemory wm) throws ClassNotFoundException {
 		this.scenario = scenario;
+		this.workingMemory = wm;
 
-		//have to go and create all the facts
+		// 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) + "()");
-			factData.put(fact.name, f);
-			populate(fact, factData);
+			if (fact.isGlobal) {
+				populateFields(fact, globalData, f);
+				globalData.put(fact.name, f);
+			} else {
+				populateFields(fact, populatedData, f);
+				populatedData.put(fact.name, f);
+			}
 		}
-		this.populatedData = factData;
 
 		HashSet<String> ruleList = new HashSet<String>();
 		ruleList.addAll(Arrays.asList(scenario.ruleTrace.rules));
-		TestingEventListener listener = new TestingEventListener(ruleList, wm.getRuleBase(), scenario.ruleTrace.inclusive);
+		TestingEventListener listener = new TestingEventListener(ruleList, wm
+				.getRuleBase(), scenario.ruleTrace.inclusive);
 		wm.addEventListener(listener);
 
-		//now run the rules...
-		insertData(wm, this.populatedData);
+		// now run the rules...
+		applyData(wm, this.populatedData, this.globalData);
 		wm.fireAllRules(scenario.maxRuleFirings);
 		scenario.ruleTrace.firingCounts = listener.firingCounts;
 
-		//now check the results...
+		// 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);
+				verify((VerifyFact) assertion);
 			} else if (assertion instanceof VerifyRuleFired) {
 				verify((VerifyRuleFired) assertion, listener.firingCounts);
 			}
- 		}
+		}
 
 	}
 
-
-
 	void verify(VerifyRuleFired assertion, Map<String, Integer> firingCounts) {
-		assertion.actual = firingCounts.containsKey(assertion.ruleName) ?  firingCounts.get(assertion.ruleName) : 0;
+		assertion.actual = firingCounts.containsKey(assertion.ruleName) ? firingCounts
+				.get(assertion.ruleName)
+				: 0;
 		if (assertion.expectedFire != null) {
-			assertion.success = assertion.expectedFire ? assertion.actual > 0 : assertion.actual == 0;
+			assertion.success = assertion.expectedFire ? assertion.actual > 0
+					: assertion.actual == 0;
 		}
 		if (assertion.expectedCount != null) {
-			assertion.success = assertion.actual.equals(assertion.expectedCount);
+			assertion.success = assertion.actual
+					.equals(assertion.expectedCount);
 		}
 	}
 
-
-
-	private void insertData(WorkingMemory wm, Map<String, Object> data) {
-		for (Iterator<Object> iterator = data.values().iterator(); iterator.hasNext();) {
-			wm.insert(iterator.next());
+	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);
 		for (int i = 0; i < value.fieldValues.length; i++) {
@@ -105,21 +117,20 @@
 			Map<String, Object> st = new HashMap<String, Object>();
 			st.put("__fact__", fact);
 			st.put("__expected__", fld.expected);
-			fld.success =  (Boolean) eval( "__fact__." + fld.fieldName + " == __expected__", st);
- 			if (!fld.success) {
- 				fld.actual = eval("__fact__." + fld.fieldName, st).toString();
- 			}
+			fld.success = (Boolean) eval("__fact__." + fld.fieldName
+					+ " == __expected__", st);
+			if (!fld.success) {
+				fld.actual = eval("__fact__." + fld.fieldName, st).toString();
+			}
 		}
 	}
 
-
-
-	private void populate(FactData fact, Map<String, Object> factData) {
+	private Object populateFields(FactData fact, Map<String, Object> factData, Object factObject) {
 		for (int i = 0; i < fact.fieldData.length; i++) {
 			FieldData field = fact.fieldData[i];
 			Object val;
 			if (field.isExpression) {
-				//eval the val into existence
+				// eval the val into existence
 				val = eval(field.value, factData);
 			} else {
 				val = field.value;
@@ -127,13 +138,10 @@
 			Map<String, Object> vars = new HashMap<String, Object>();
 			vars.putAll(factData);
 			vars.put("__val__", val);
-			eval(fact.name + "." + field.name + " = __val__", vars);
+			vars.put("__fact__", factObject);
+			eval("__fact__." + field.name + " = __val__", vars);
 		}
+		return factObject;
 	}
 
-
-
-
-
-
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java	2007-10-23 06:08:16 UTC (rev 16002)
@@ -0,0 +1,117 @@
+package org.drools.testframework;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import org.drools.RuleBase;
+import org.drools.StatefulSession;
+import org.drools.StatelessSession;
+import org.drools.event.RuleBaseEventListener;
+import org.drools.rule.Package;
+
+public class MockRuleBase implements RuleBase {
+
+	public void addPackage(Package pkg) throws Exception {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getAdditionsSinceLock() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public Package getPackage(String name) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Package[] getPackages() {
+
+		return new Package[0];
+	}
+
+	public int getRemovalsSinceLock() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public StatefulSession[] getStatefulSessions() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void lock() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public StatefulSession newStatefulSession() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public StatefulSession newStatefulSession(boolean keepReference) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public StatefulSession newStatefulSession(InputStream stream)
+			throws IOException, ClassNotFoundException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public StatefulSession newStatefulSession(InputStream stream,
+			boolean keepReference) throws IOException, ClassNotFoundException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public StatelessSession newStatelessSession() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void removeFunction(String packageName, String functionName) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void removePackage(String packageName) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void removeProcess(String id) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void removeRule(String packageName, String ruleName) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void unlock() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void addEventListener(RuleBaseEventListener listener) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public List getRuleBaseEventListeners() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void removeEventListener(RuleBaseEventListener listener) {
+		// TODO Auto-generated method stub
+
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2007-10-23 05:19:58 UTC (rev 16001)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2007-10-23 06:08:16 UTC (rev 16002)
@@ -1,8 +1,10 @@
 package org.drools.testframework;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.drools.Agenda;
 import org.drools.FactException;
@@ -38,6 +40,9 @@
 public class MockWorkingMemory implements InternalWorkingMemory {
 
 	List<Object> facts = new ArrayList<Object>();
+	AgendaEventListener agendaEventListener;
+	TimeMachine timeMachine;
+	Map<String, Object> globals = new HashMap<String, Object>();
 
 	public void addLIANodePropagation(LIANodePropagation liaNodePropagation) {
 		// TODO Auto-generated method stub
@@ -49,6 +54,8 @@
 
 	}
 
+
+
 	public void executeQueuedActions() {
 		// TODO Auto-generated method stub
 
@@ -221,8 +228,7 @@
 	}
 
 	public RuleBase getRuleBase() {
-		// TODO Auto-generated method stub
-		return null;
+		return new MockRuleBase();
 	}
 
 	public void halt() {
@@ -292,7 +298,7 @@
 	}
 
 	public void setGlobal(String identifier, Object value) {
-		// TODO Auto-generated method stub
+		this.globals.put(identifier, value);
 
 	}
 
@@ -317,8 +323,7 @@
 	}
 
 	public void addEventListener(AgendaEventListener listener) {
-		// TODO Auto-generated method stub
-
+		this.agendaEventListener = listener;
 	}
 
 	public void addEventListener(RuleFlowEventListener listener) {
@@ -371,4 +376,9 @@
 
 	}
 
+	public void setTimeMachine(TimeMachine tm) {
+		this.timeMachine = tm;
+
+	}
+
 }

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-23 05:19:58 UTC (rev 16001)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	2007-10-23 06:08:16 UTC (rev 16002)
@@ -19,158 +19,200 @@
 
 public class ScenarioRunnerTest extends TestCase {
 
-	public void testPopulateFacts() throws Exception {
-		Scenario sc = new Scenario();
-		sc.facts = new FactData[] { new FactData("Cheese", "c1", new FieldData[] {
-																			new FieldData("type", "cheddar", false),
-																			new FieldData("price", "42", false)
-																		}),
-									new FactData("Person", "p1", new FieldData[] {
-																			new FieldData("name", "mic", false),
-																			new FieldData("age", "30 + 3", true)
-									})};
+    public void testPopulateFacts() throws Exception {
+        Scenario sc = new Scenario();
+        sc.facts = new FactData[] { new FactData("Cheese", "c1", new FieldData[] {
+                                                                            new FieldData("type", "cheddar", false),
+                                                                            new FieldData("price", "42", false)
+                                                                        }, false),
+                                    new FactData("Person", "p1", new FieldData[] {
+                                                                            new FieldData("name", "mic", false),
+                                                                            new FieldData("age", "30 + 3", true)
+                                    }, false)};
 
-		TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(), Thread.currentThread().getContextClassLoader());
-		resolver.addImport("org.drools.Cheese");
-		resolver.addImport("org.drools.Person");
-		ScenarioRunner runner = new ScenarioRunner(sc, resolver, new MockWorkingMemory());
+        TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(), Thread.currentThread().getContextClassLoader());
+        resolver.addImport("org.drools.Cheese");
+        resolver.addImport("org.drools.Person");
+        ScenarioRunner runner = new ScenarioRunner(sc, resolver, new MockWorkingMemory());
 
-		assertTrue(runner.populatedData.containsKey("c1"));
-		assertTrue(runner.populatedData.containsKey("p1"));
+        assertTrue(runner.populatedData.containsKey("c1"));
+        assertTrue(runner.populatedData.containsKey("p1"));
 
-		Cheese c = (Cheese) runner.populatedData.get("c1");
-		assertEquals("cheddar", c.getType());
-		assertEquals(42, c.getPrice());
+        Cheese c = (Cheese) runner.populatedData.get("c1");
+        assertEquals("cheddar", c.getType());
+        assertEquals(42, c.getPrice());
 
-		Person p = (Person) runner.populatedData.get("p1");
-		assertEquals("mic", p.getName());
-		assertEquals(33, p.getAge());
+        Person p = (Person) runner.populatedData.get("p1");
+        assertEquals("mic", p.getName());
+        assertEquals(33, p.getAge());
 
-	}
+    }
 
-	public void testVerifyFacts() throws Exception {
+    public void testVerifyFacts() throws Exception {
 
-		ScenarioRunner runner = new ScenarioRunner(new Scenario(), null, new MockWorkingMemory());
-		Cheese f1 = new Cheese("cheddar", 42);
-		runner.populatedData.put("f1", f1);
+        ScenarioRunner runner = new ScenarioRunner(new Scenario(), null, new MockWorkingMemory());
+        Cheese f1 = new Cheese("cheddar", 42);
+        runner.populatedData.put("f1", f1);
 
-		Person f2 = new Person("michael", 33);
-		runner.populatedData.put("f2", f2);
+        Person f2 = new Person("michael", 33);
+        runner.populatedData.put("f2", f2);
 
-		//test all true
-		VerifyFact vf = new VerifyFact();
-		vf.factName = "f1";
-		vf.fieldValues = new VerifyField[] { new VerifyField("type", "cheddar"), new VerifyField("price", "42") } ;
+        //test all true
+        VerifyFact vf = new VerifyFact();
+        vf.factName = "f1";
+        vf.fieldValues = new VerifyField[] { new VerifyField("type", "cheddar"), new VerifyField("price", "42") } ;
 
-		runner.verify(vf);
-		for (int i = 0; i < vf.fieldValues.length; i++) {
-			assertTrue(vf.fieldValues[i].success);
-		}
+        runner.verify(vf);
+        for (int i = 0; i < vf.fieldValues.length; i++) {
+            assertTrue(vf.fieldValues[i].success);
+        }
 
-		vf = new VerifyFact();
-		vf.factName = "f2";
-		vf.fieldValues = new VerifyField[] { new VerifyField("name", "michael"), new VerifyField("age", "33") } ;
+        vf = new VerifyFact();
+        vf.factName = "f2";
+        vf.fieldValues = new VerifyField[] { new VerifyField("name", "michael"), new VerifyField("age", "33") } ;
 
-		runner.verify(vf);
-		for (int i = 0; i < vf.fieldValues.length; i++) {
-			assertTrue(vf.fieldValues[i].success);
-		}
+        runner.verify(vf);
+        for (int i = 0; i < vf.fieldValues.length; i++) {
+            assertTrue(vf.fieldValues[i].success);
+        }
 
-		//test one false
-		vf = new VerifyFact();
-		vf.factName = "f2";
-		vf.fieldValues = new VerifyField[] { new VerifyField("name", "mark"), new VerifyField("age", "33") } ;
+        //test one false
+        vf = new VerifyFact();
+        vf.factName = "f2";
+        vf.fieldValues = new VerifyField[] { new VerifyField("name", "mark"), new VerifyField("age", "33") } ;
 
-		runner.verify(vf);
-		assertFalse(vf.fieldValues[0].success);
-		assertTrue(vf.fieldValues[1].success);
+        runner.verify(vf);
+        assertFalse(vf.fieldValues[0].success);
+        assertTrue(vf.fieldValues[1].success);
 
-		assertEquals("michael", vf.fieldValues[0].actual);
-		assertEquals("mark", vf.fieldValues[0].expected);
+        assertEquals("michael", vf.fieldValues[0].actual);
+        assertEquals("mark", vf.fieldValues[0].expected);
 
 
-		//test 2 false
-		vf = new VerifyFact();
-		vf.factName = "f2";
-		vf.fieldValues = new VerifyField[] { new VerifyField("name", "mark"), new VerifyField("age", "32") } ;
+        //test 2 false
+        vf = new VerifyFact();
+        vf.factName = "f2";
+        vf.fieldValues = new VerifyField[] { new VerifyField("name", "mark"), new VerifyField("age", "32") } ;
 
-		runner.verify(vf);
-		assertFalse(vf.fieldValues[0].success);
-		assertFalse(vf.fieldValues[1].success);
+        runner.verify(vf);
+        assertFalse(vf.fieldValues[0].success);
+        assertFalse(vf.fieldValues[1].success);
 
-		assertEquals("michael", vf.fieldValues[0].actual);
-		assertEquals("mark", vf.fieldValues[0].expected);
+        assertEquals("michael", vf.fieldValues[0].actual);
+        assertEquals("mark", vf.fieldValues[0].expected);
 
-		assertEquals("33", vf.fieldValues[1].actual);
-		assertEquals("32", vf.fieldValues[1].expected);
+        assertEquals("33", vf.fieldValues[1].actual);
+        assertEquals("32", vf.fieldValues[1].expected);
 
-	}
+    }
 
-	public void testDummyRunNoRules() throws Exception {
-		Scenario sc = new Scenario();
-		sc.facts = new FactData[] { new FactData("Cheese", "c1", new FieldData[] {
-																			new FieldData("type", "cheddar", false),
-																			new FieldData("price", "42", false)
-																		})};
+    public void testDummyRunNoRules() throws Exception {
+        Scenario sc = new Scenario();
+        sc.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", new VerifyField[] {
-						new VerifyField("type", "cheddar"),
-						new VerifyField("price", "42")
-				})
-		};
+        sc.assertions = new VerifyFact[] {
+                new VerifyFact("c1", new VerifyField[] {
+                        new VerifyField("type", "cheddar"),
+                        new VerifyField("price", "42")
+                })
+        };
 
-		TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(), Thread.currentThread().getContextClassLoader());
-		resolver.addImport("org.drools.Cheese");
+        TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(), Thread.currentThread().getContextClassLoader());
+        resolver.addImport("org.drools.Cheese");
 
-		MockWorkingMemory wm = new MockWorkingMemory();
-		ScenarioRunner runner = new ScenarioRunner(sc, resolver, wm);
-		assertEquals(1, wm.facts.size());
-		assertEquals(runner.populatedData.get("c1"), wm.facts.get(0));
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner runner = new ScenarioRunner(sc, resolver, wm);
+        assertEquals(1, wm.facts.size());
+        assertEquals(runner.populatedData.get("c1"), wm.facts.get(0));
 
-		assertTrue(runner.populatedData.containsKey("c1"));
-		VerifyFact vf = (VerifyFact) sc.assertions[0];
-		for (int i = 0; i < vf.fieldValues.length; i++) {
-			assertTrue(vf.fieldValues[i].success);
-		}
+        assertTrue(runner.populatedData.containsKey("c1"));
+        VerifyFact vf = (VerifyFact) sc.assertions[0];
+        for (int i = 0; i < vf.fieldValues.length; i++) {
+            assertTrue(vf.fieldValues[i].success);
+        }
 
 
-	}
+    }
 
-	public void testCountVerification() throws Exception {
+    public void testCountVerification() throws Exception {
 
-		Map<String, Integer> firingCounts = new HashMap<String, Integer>();
-		firingCounts.put("foo", 2);
-		firingCounts.put("bar", 1);
-		//and baz, we leave out
+        Map<String, Integer> firingCounts = new HashMap<String, Integer>();
+        firingCounts.put("foo", 2);
+        firingCounts.put("bar", 1);
+        //and baz, we leave out
 
-		ScenarioRunner runner = new ScenarioRunner(new Scenario(), null, new MockWorkingMemory());
-		VerifyRuleFired v = new VerifyRuleFired();
-		v.ruleName = "foo";
-		v.expectedFire = true;
-		runner.verify(v, firingCounts);
-		assertTrue(v.success);
-		assertEquals(2, v.actual.intValue());
+        ScenarioRunner runner = new ScenarioRunner(new Scenario(), null, new MockWorkingMemory());
+        VerifyRuleFired v = new VerifyRuleFired();
+        v.ruleName = "foo";
+        v.expectedFire = true;
+        runner.verify(v, firingCounts);
+        assertTrue(v.success);
+        assertEquals(2, v.actual.intValue());
 
-		v = new VerifyRuleFired();
-		v.ruleName = "foo";
-		v.expectedFire = false;
-		runner.verify(v, firingCounts);
-		assertFalse(v.success);
-		assertEquals(2, v.actual.intValue());
+        v = new VerifyRuleFired();
+        v.ruleName = "foo";
+        v.expectedFire = false;
+        runner.verify(v, firingCounts);
+        assertFalse(v.success);
+        assertEquals(2, v.actual.intValue());
 
-		v = new VerifyRuleFired();
-		v.ruleName = "foo";
-		v.expectedCount = 2;
+        v = new VerifyRuleFired();
+        v.ruleName = "foo";
+        v.expectedCount = 2;
 
-		runner.verify(v, firingCounts);
-		assertTrue(v.success);
-		assertEquals(2, v.actual.intValue());
+        runner.verify(v, firingCounts);
+        assertTrue(v.success);
+        assertEquals(2, v.actual.intValue());
 
-	}
+    }
 
+    public void testTestingEventListener() throws Exception {
+        Scenario sc = new Scenario();
+        sc.ruleTrace.rules = new String[] {"foo", "bar"};
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner run = new ScenarioRunner(sc, null, wm);
+        assertEquals(wm, run.workingMemory);
+        assertNotNull(wm.agendaEventListener);
+        assertTrue(wm.agendaEventListener instanceof TestingEventListener);
+        TestingEventListener lnr = (TestingEventListener) wm.agendaEventListener;
+        assertEquals(2, lnr.ruleNames.size());
+        assertTrue(lnr.ruleNames.contains("foo"));
+        assertTrue(lnr.ruleNames.contains("bar"));
+    }
 
+    public void testWithGlobals() throws Exception {
+        Scenario sc = new Scenario();
+        sc.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)
+        };
+        TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(), Thread.currentThread().getContextClassLoader());
+        resolver.addImport("org.drools.Cheese");
 
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner run = new ScenarioRunner(sc, resolver, wm);
+        assertEquals(1, wm.globals.size());
+        assertEquals(1, run.globalData.size());
+        assertEquals(1, run.populatedData.size());
+        assertEquals(1, wm.facts.size());
 
+        Cheese c = (Cheese) wm.globals.get("c");
+        assertEquals("cheddar", c.getType());
+        Cheese c2 = (Cheese) wm.facts.get(0);
+        assertEquals("stilton", c2.getType());
 
+
+    }
+
+
+
+
+
 }




More information about the jboss-svn-commits mailing list