[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