[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