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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 30 01:54:43 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-10-30 01:54:43 -0400 (Tue, 30 Oct 2007)
New Revision: 16149

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.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/testframework/ScenarioRunner.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/testframework/test_stateful.drl
   labs/jbossrules/trunk/drools-jbrms/build.properties
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java
Log:
JBRULES-1271 testing framework - adding modify and retract support

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 04:10:22 UTC (rev 16148)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java	2007-10-30 05:54:43 UTC (rev 16149)
@@ -22,12 +22,22 @@
 
 	public FieldData[] fieldData;
 
+	/**
+	 * If its a modify, obviously we are modifying existing data in working memory.
+	 */
+	public boolean isModify;
+
 	public FactData() {}
-	public FactData(String type, String name, FieldData[] fieldData, boolean global) {
+	public FactData(String type, String name, FieldData[] fieldData, boolean global, boolean modify) {
+		if (isGlobal && modify) {
+			throw new IllegalArgumentException("Not able to be a global modify.");
+		}
 		this.type = type;
 		this.name = name;
 		this.fieldData = fieldData;
 		this.isGlobal = global;
+		this.isModify = modify;
+
 	}
 
 

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java	2007-10-30 05:54:43 UTC (rev 16149)
@@ -0,0 +1,17 @@
+package org.drools.brms.client.modeldriven.testing;
+
+/**
+ * Retract a named fact.
+ * @author Michael Neale
+ *
+ */
+public class RetractFact implements Fixture {
+
+	public RetractFact() {}
+	public RetractFact(String s) {
+		this.name = s;
+	}
+
+	public String name;
+
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java
___________________________________________________________________
Name: svn:eol-style
   + native

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 04:10:22 UTC (rev 16148)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java	2007-10-30 05:54:43 UTC (rev 16149)
@@ -18,6 +18,7 @@
 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.RetractFact;
 import org.drools.brms.client.modeldriven.testing.Scenario;
 import org.drools.brms.client.modeldriven.testing.VerifyFact;
 import org.drools.brms.client.modeldriven.testing.VerifyField;
@@ -68,23 +69,32 @@
 			if (fx instanceof FactData) {
 				//deal with facts and globals
 				FactData fact = (FactData)fx;
-				Object f = eval("new " + resolver.getFullTypeName(fact.type) + "()");
+				Object f = (fact.isModify)? this.populatedData.get(fact.name) : eval("new " + resolver.getFullTypeName(fact.type) + "()");
 				if (fact.isGlobal) {
 					populateFields(fact, globalData, f);
 					globalData.put(fact.name, f);
 					wm.setGlobal(fact.name, f);
-				} else {
+				} else if (fact.isModify) {
+					if (!this.factHandles.containsKey(fact.name)) {
+						throw new IllegalArgumentException("Was not a previously inserted fact. [" + fact.name  + "]");
+					}
 					populateFields(fact, populatedData, f);
+					this.workingMemory.update(this.factHandles.get(fact.name), f);
+				} else /* a new one */ {
+					populateFields(fact, populatedData, f);
 					populatedData.put(fact.name, f);
 					this.factHandles.put(fact.name, wm.insert(f));
 				}
+			} else if (fx instanceof RetractFact) {
+				RetractFact f = (RetractFact)fx;
+				this.workingMemory.retract(this.factHandles.get(f.name));
+				this.populatedData.remove(f.name);
 			} 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);
+				listener = new TestingEventListener(ruleList, wm.getRuleBase(), executionTrace.inclusive);
 				wm.addEventListener(listener);
 
 				//set up the time machine

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 04:10:22 UTC (rev 16148)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	2007-10-30 05:54:43 UTC (rev 16149)
@@ -22,6 +22,7 @@
 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.RetractFact;
 import org.drools.brms.client.modeldriven.testing.Scenario;
 import org.drools.brms.client.modeldriven.testing.VerifyFact;
 import org.drools.brms.client.modeldriven.testing.VerifyField;
@@ -42,10 +43,10 @@
 		FactData[] facts = new FactData[] {
 				new FactData("Cheese", "c1", new FieldData[] {
 						new FieldData("type", "cheddar", false),
-						new FieldData("price", "42", false) }, false),
+						new FieldData("price", "42", false) }, false, false),
 				new FactData("Person", "p1", new FieldData[] {
 						new FieldData("name", "mic", false),
-						new FieldData("age", "30 + 3", true) }, false) };
+						new FieldData("age", "30 + 3", true) }, false, false) };
 
 		sc.fixtures.addAll(Arrays.asList(facts));
 		TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
@@ -157,7 +158,7 @@
 		Scenario sc = new Scenario();
 		FactData[] facts = new FactData[] { new FactData("Cheese", "c1",
 				new FieldData[] { new FieldData("type", "cheddar", false),
-						new FieldData("price", "42", false) }, false) };
+						new FieldData("price", "42", false) }, false, false) };
 
 		VerifyFact[] assertions = new VerifyFact[] { new VerifyFact("c1",
 				new VerifyField[] { new VerifyField("type", "cheddar"),
@@ -238,9 +239,9 @@
 		Scenario sc = new Scenario();
 		FactData[] facts = new FactData[] {
 				new FactData("Cheese", "c", new FieldData[] { new FieldData(
-						"type", "cheddar", false) }, true),
+						"type", "cheddar", false) }, true, false),
 				new FactData("Cheese", "c2", new FieldData[] { new FieldData(
-						"type", "stilton", false) }, false) };
+						"type", "stilton", false) }, false, false) };
 		sc.fixtures.addAll(Arrays.asList(facts));
 
 		TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
@@ -298,8 +299,8 @@
 		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)
+						new FieldData("price", "42", false) }, false, false),
+						new FactData("Person", "p", new FieldData[0] , true, false)
 				};
 		sc.fixtures.addAll(Arrays.asList(facts));
 
@@ -354,10 +355,10 @@
 
 	public void testIntgerationStateful() throws Exception {
 		Scenario sc = new Scenario();
-		sc.fixtures.add(new FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "1", false)}, false));
+		sc.fixtures.add(new FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "1", false)}, 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 FactData("Cheese", "c2", new FieldData[] {new FieldData("price", "2", false)}, false, false));
 		sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "rule1")}));
 		ex = new ExecutionTrace();
 		sc.fixtures.add(ex);
@@ -382,13 +383,76 @@
 
 	}
 
+	public void testIntegrationWithModify() throws Exception {
+		Scenario sc = new Scenario();
+		sc.fixtures.add(new FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "1", false)}, false, false));
+
+		sc.fixtures.add(new ExecutionTrace());
+
+		sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "rule1")}));
+
+		sc.fixtures.add(new FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "42", false)}, false, true));
+		sc.fixtures.add(new ExecutionTrace());
+
+		sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "rule3")}));
+
+
+
+		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");
+
+
+        assertEquals("rule3", c1.getType());
+
+
+        assertTrue(sc.wasSuccessful());
+	}
+
+	public void testIntegrationWithRetract() throws Exception {
+		Scenario sc = new Scenario();
+		sc.fixtures.add(new FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "46", false), new FieldData("type", "XXX", false)}, false, false));
+		sc.fixtures.add(new FactData("Cheese", "c2", new FieldData[] {new FieldData("price", "42", false)}, false, false));
+		sc.fixtures.add(new ExecutionTrace());
+
+		sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "XXX")}));
+
+		sc.fixtures.add(new RetractFact("c2"));
+		sc.fixtures.add(new ExecutionTrace());
+
+		sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "rule4")}));
+
+
+
+		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");
+
+        assertEquals("rule4", c1.getType());
+        assertFalse(run.populatedData.containsKey("c2"));
+
+        assertTrue(sc.wasSuccessful());
+	}
+
 	public void testIntegrationWithFailure() throws Exception {
 		Scenario sc = new Scenario();
 		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)
+						new FieldData("price", "42", false) }, false, false),
+						new FactData("Person", "p", new FieldData[0] , true, false)
 				};
 		sc.fixtures.addAll(Arrays.asList(facts));
 

Modified: 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	2007-10-30 04:10:22 UTC (rev 16148)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/testframework/test_stateful.drl	2007-10-30 05:54:43 UTC (rev 16149)
@@ -19,5 +19,19 @@
 		c2.setType("rule2");
 end
 
+rule "rule3"
+	when
+		c1: Cheese(price == 42)
+    then
+    	c1.setType("rule3");
+end
 
+rule "rule4"
+	when
+		c1 : Cheese(price == 46)
+		not Cheese(price == 42)
+	then
+		c1.setType("rule4");
+end
 
+

Modified: labs/jbossrules/trunk/drools-jbrms/build.properties
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/build.properties	2007-10-30 04:10:22 UTC (rev 16148)
+++ labs/jbossrules/trunk/drools-jbrms/build.properties	2007-10-30 05:54:43 UTC (rev 16149)
@@ -1,2 +1,2 @@
 #this is needed to point to your version of GWT
-gwt.home=/usr/local/share/gwt-mac-1.4.60
+gwt.home=/Users/michaelneale/apps/gwt-mac-1.4.60

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java	2007-10-30 04:10:22 UTC (rev 16148)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java	2007-10-30 05:54:43 UTC (rev 16149)
@@ -31,10 +31,10 @@
 
 		List factData = new ArrayList();
 
-		FactData d1 = new FactData("Driver", "d1", new FieldData[] {new FieldData("age", "42", false), new FieldData("name", "david", false)}, false);
-		FactData d2 = new FactData("Driver", "d2", new FieldData[] {new FieldData("name", "michael", false)}, false);
-		FactData d3 = new FactData("Driver", "d3", new FieldData[] {new FieldData("name", "michael2", false)}, true);
-		FactData d4 = new FactData("Accident", "a1", new FieldData[] {new FieldData("name", "michael2", false)}, true);
+		FactData d1 = new FactData("Driver", "d1", new FieldData[] {new FieldData("age", "42", false), new FieldData("name", "david", false)}, false, false);
+		FactData d2 = new FactData("Driver", "d2", new FieldData[] {new FieldData("name", "michael", false)}, false, false);
+		FactData d3 = new FactData("Driver", "d3", new FieldData[] {new FieldData("name", "michael2", false)}, true, false);
+		FactData d4 = new FactData("Accident", "a1", new FieldData[] {new FieldData("name", "michael2", false)}, true, false);
 
 		factData.addAll(Arrays.asList(new FactData[] {d1, d2, d3,d4}));
 




More information about the jboss-svn-commits mailing list