[jboss-svn-commits] JBL Code SVN: r16188 - 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
Wed Oct 31 01:28:45 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-10-31 01:28:45 -0400 (Wed, 31 Oct 2007)
New Revision: 16188
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/Scenario.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/FactDataTest.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-31 05:24:55 UTC (rev 16187)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java 2007-10-31 05:28:45 UTC (rev 16188)
@@ -20,11 +20,6 @@
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;
/**
@@ -33,14 +28,11 @@
public boolean isModify;
public FactData() {}
- 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.");
- }
+ public FactData(String type, String name, FieldData[] fieldData, boolean modify) {
+
this.type = type;
this.name = name;
this.fieldData = fieldData;
- this.isGlobal = global;
this.isModify = modify;
}
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-31 05:24:55 UTC (rev 16187)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java 2007-10-31 05:28:45 UTC (rev 16188)
@@ -19,6 +19,11 @@
*/
public int maxRuleFirings = 100000;
+ /**
+ * global data which must be setup before hand.
+ * @gwt.typeArgs <org.drools.brms.client.modeldriven.testing.FactData>
+ */
+ public List globals = new ArrayList();
/**
* Fixtures are parts of the test. They may be assertions, globals, data, execution runs etc.
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-31 05:24:55 UTC (rev 16187)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java 2007-10-31 05:28:45 UTC (rev 16188)
@@ -11,10 +11,9 @@
import java.util.Map;
import org.drools.FactHandle;
-import org.drools.WorkingMemory;
import org.drools.base.TypeResolver;
+import org.drools.brms.client.modeldriven.testing.ExecutionTrace;
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;
@@ -63,6 +62,14 @@
TestingEventListener listener = null;
+ for (Iterator iterator = scenario.globals.iterator(); iterator.hasNext();) {
+ FactData fact = (FactData) iterator.next();
+ Object f = eval("new " + resolver.getFullTypeName(fact.type) + "()");
+ populateFields(fact, globalData, f);
+ globalData.put(fact.name, f);
+ wm.setGlobal(fact.name, f);
+ }
+
for (Iterator<Fixture> iterator = scenario.fixtures.iterator(); iterator.hasNext();) {
Fixture fx = iterator.next();
@@ -70,11 +77,7 @@
//deal with facts and globals
FactData fact = (FactData)fx;
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 if (fact.isModify) {
+ if (fact.isModify) {
if (!this.factHandles.containsKey(fact.name)) {
throw new IllegalArgumentException("Was not a previously inserted fact. [" + fact.name + "]");
}
@@ -174,21 +177,23 @@
}
}
- private Object populateFields(FactData fact, Map<String, Object> factData, Object factObject) {
+ 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
- val = eval(field.value, factData);
- } else {
- val = field.value;
+ if (field.value != null && !field.value.equals("")) {
+ if (field.isExpression) {
+ // eval the val into existence
+ val = eval(field.value, factData);
+ } else {
+ val = field.value;
+ }
+ Map<String, Object> vars = new HashMap<String, Object>();
+ vars.putAll(factData);
+ vars.put("__val__", val);
+ vars.put("__fact__", factObject);
+ eval("__fact__." + field.name + " = __val__", vars);
}
- Map<String, Object> vars = new HashMap<String, Object>();
- vars.putAll(factData);
- vars.put("__val__", val);
- vars.put("__fact__", factObject);
- eval("__fact__." + field.name + " = __val__", vars);
}
return factObject;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java 2007-10-31 05:24:55 UTC (rev 16187)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java 2007-10-31 05:28:45 UTC (rev 16188)
@@ -7,7 +7,7 @@
public class FactDataTest extends TestCase {
public void testAdd() {
- FactData fd = new FactData("x", "y", new FieldData[0], false, false );
+ FactData fd = new FactData("x", "y", new FieldData[0], false );
assertEquals(0, fd.fieldData.length);
fd.addFieldData(new FieldData("x", "y", false));
assertEquals(1, fd.fieldData.length);
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-31 05:24:55 UTC (rev 16187)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2007-10-31 05:28:45 UTC (rev 16188)
@@ -1,7 +1,5 @@
package org.drools.testframework;
-import java.io.IOException;
-import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -12,14 +10,11 @@
import org.drools.Cheese;
import org.drools.Person;
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
import org.drools.WorkingMemory;
import org.drools.base.ClassTypeResolver;
import org.drools.base.TypeResolver;
+import org.drools.brms.client.modeldriven.testing.ExecutionTrace;
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.RetractFact;
@@ -28,14 +23,10 @@
import org.drools.brms.client.modeldriven.testing.VerifyField;
import org.drools.brms.client.modeldriven.testing.VerifyRuleFired;
import org.drools.common.InternalWorkingMemory;
-import org.drools.compiler.DroolsParserException;
-import org.drools.compiler.PackageBuilder;
import org.drools.rule.TimeMachine;
import com.thoughtworks.xstream.XStream;
-import junit.framework.TestCase;
-
public class ScenarioRunnerTest extends RuleUnit {
public void testPopulateFacts() throws Exception {
@@ -43,10 +34,10 @@
FactData[] facts = new FactData[] {
new FactData("Cheese", "c1", new FieldData[] {
new FieldData("type", "cheddar", false),
- new FieldData("price", "42", false) }, false, 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, false) };
+ new FieldData("age", "30 + 3", true) }, false) };
sc.fixtures.addAll(Arrays.asList(facts));
TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
@@ -69,6 +60,26 @@
}
+ public void testPopulateNoData() throws Exception {
+ TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
+ Thread.currentThread().getContextClassLoader());
+ resolver.addImport("org.drools.Cheese");
+ ScenarioRunner run = new ScenarioRunner(new Scenario(), resolver, new MockWorkingMemory());
+ run.populatedData.clear();
+ Cheese c = new Cheese();
+ c.setType("whee");
+ c.setPrice(1);
+ run.populatedData.put("x", c);
+
+ assertEquals(1, c.getPrice());
+
+ FactData fd = new FactData("Cheese", "x", new FieldData[] {new FieldData("type", "", false), new FieldData("price", "42", false)}, false);
+
+ run.populateFields(fd, run.populatedData, c);
+ assertEquals("whee", c.getType());
+ assertEquals(42, c.getPrice());
+ }
+
public void testDumpXStream() throws Exception {
XStream x = new XStream();
@@ -158,7 +169,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, false) };
+ new FieldData("price", "42", false) }, false) };
VerifyFact[] assertions = new VerifyFact[] { new VerifyFact("c1",
new VerifyField[] { new VerifyField("type", "cheddar"),
@@ -238,10 +249,10 @@
public void testWithGlobals() throws Exception {
Scenario sc = new Scenario();
FactData[] facts = new FactData[] {
- new FactData("Cheese", "c", new FieldData[] { new FieldData(
- "type", "cheddar", false) }, true, false),
new FactData("Cheese", "c2", new FieldData[] { new FieldData(
- "type", "stilton", false) }, false, false) };
+ "type", "stilton", false) }, false) };
+ sc.globals.add(new FactData("Cheese", "c", new FieldData[] { new FieldData(
+ "type", "cheddar", false) }, false));
sc.fixtures.addAll(Arrays.asList(facts));
TypeResolver resolver = new ClassTypeResolver(new HashSet<Object>(),
@@ -299,9 +310,10 @@
FactData[] facts = new FactData[] {
new FactData("Cheese", "c1", new FieldData[] {
new FieldData("type", "cheddar", false),
- new FieldData("price", "42", false) }, false, false),
- new FactData("Person", "p", new FieldData[0] , true, false)
+ new FieldData("price", "42", false) }, false)
+
};
+ sc.globals.add(new FactData("Person", "p", new FieldData[0] , false));
sc.fixtures.addAll(Arrays.asList(facts));
ExecutionTrace executionTrace = new ExecutionTrace();
@@ -355,10 +367,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, false));
+ 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, false));
+ 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);
@@ -385,13 +397,13 @@
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 FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "1", 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 FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "42", false)}, true));
sc.fixtures.add(new ExecutionTrace());
sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "rule3")}));
@@ -417,8 +429,8 @@
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 FactData("Cheese", "c1", new FieldData[] {new FieldData("price", "46", false), new FieldData("type", "XXX", false)}, false));
+ sc.fixtures.add(new FactData("Cheese", "c2", new FieldData[] {new FieldData("price", "42", false)}, false));
sc.fixtures.add(new ExecutionTrace());
sc.fixtures.add(new VerifyFact("c1", new VerifyField[] {new VerifyField("type", "XXX")}));
@@ -451,10 +463,11 @@
FactData[] facts = new FactData[] {
new FactData("Cheese", "c1", new FieldData[] {
new FieldData("type", "cheddar", false),
- new FieldData("price", "42", false) }, false, false),
- new FactData("Person", "p", new FieldData[0] , true, false)
+ new FieldData("price", "42", false) }, false)
+
};
sc.fixtures.addAll(Arrays.asList(facts));
+ sc.globals.add(new FactData("Person", "p", new FieldData[0] , false));
ExecutionTrace executionTrace = new ExecutionTrace();
executionTrace.rules = new String[] {"rule1", "rule2" };
More information about the jboss-svn-commits
mailing list