[jboss-svn-commits] JBL Code SVN: r25883 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/testframework and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Mar 30 05:50:41 EDT 2009
Author: michael.neale at jboss.com
Date: 2009-03-30 05:50:41 -0400 (Mon, 30 Mar 2009)
New Revision: 25883
Modified:
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
Log:
populating happens lazily
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 2009-03-30 09:47:03 UTC (rev 25882)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java 2009-03-30 09:50:41 UTC (rev 25883)
@@ -2,12 +2,7 @@
import static org.mvel2.MVEL.eval;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
import org.drools.FactHandle;
import org.drools.RuleBase;
@@ -85,6 +80,10 @@
runScenario(scenario, resolver, this.workingMemory);
}
+ interface Populate {
+ public void go();
+ }
+
private void runScenario(final Scenario scenario,
final TypeResolver resolver, final InternalWorkingMemory wm)
throws ClassNotFoundException {
@@ -97,37 +96,54 @@
TestingEventListener listener = null;
+ List<Populate> toPopulate = new ArrayList<Populate>();
+
for (Iterator iterator = scenario.globals.iterator(); iterator.hasNext();) {
- FactData fact = (FactData) iterator.next();
- Object f = eval("new " + getTypeName(resolver, fact) + "()");
- populateFields(fact, globalData, f);
+ final FactData fact = (FactData) iterator.next();
+ final Object f = eval("new " + getTypeName(resolver, fact) + "()");
+ toPopulate.add(new Populate() {
+ public void go() {
+ populateFields(fact, globalData, f);
+ }
+ });
globalData.put(fact.name, f);
wm.setGlobal(fact.name, f);
}
+ doPopulate(toPopulate);
+
for (Iterator<Fixture> iterator = scenario.fixtures.iterator(); iterator.hasNext();) {
Fixture fx = iterator.next();
if (fx instanceof FactData) {
//deal with facts and globals
- FactData fact = (FactData)fx;
- Object f = (fact.isModify)? this.populatedData.get(fact.name) : eval("new " + getTypeName(resolver, fact) + "()");
+ final FactData fact = (FactData)fx;
+ final Object f = (fact.isModify)? this.populatedData.get(fact.name) : eval("new " + getTypeName(resolver, fact) + "()");
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);
+ toPopulate.add(new Populate() {
+ public void go() {
+ populateFields(fact, populatedData, f);
+ workingMemory.update(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));
+ populatedData.put(fact.name, f);
+ toPopulate.add(new Populate() {
+ public void go() {
+ populateFields(fact, populatedData, f);
+ 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) {
+ doPopulate(toPopulate);
ExecutionTrace executionTrace = (ExecutionTrace)fx;
//create the listener to trace rules
@@ -148,6 +164,7 @@
} else if (fx instanceof Expectation) {
+ doPopulate(toPopulate);
Expectation assertion = (Expectation) fx;
if (assertion instanceof VerifyFact) {
verify((VerifyFact) assertion);
@@ -162,8 +179,15 @@
}
+
+ doPopulate(toPopulate);
}
+ private void doPopulate(List<Populate> toPopulate) {
+ for (Populate p : toPopulate) {p.go();}
+ toPopulate.clear();
+ }
+
private String getTypeName(TypeResolver resolver, FactData fact) throws ClassNotFoundException {
String fullName = resolver.getFullTypeName(fact.type);
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 2009-03-30 09:47:03 UTC (rev 25882)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2009-03-30 09:50:41 UTC (rev 25883)
@@ -145,6 +145,45 @@
}
+ /**
+ * to check for re-ordering..
+ * @throws Exception
+ */
+ public void testPopulateNestedWrongOrder() throws Exception {
+ Scenario sc = new Scenario();
+ List facts = ls( new FactData( "OuterFact",
+ "p1",
+ ls( new FieldData( "name",
+ "mic" ),
+ new FieldData( "innerFact",
+ "=c1" ) ),
+ false ),
+ new FactData( "Cheese",
+ "c1",
+ ls( new FieldData( "type",
+ "cheddar" ),
+ new FieldData( "price",
+ "42" ) ),
+ false ) );
+
+ sc.fixtures.addAll( facts );
+ TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+ Thread.currentThread().getContextClassLoader() );
+ resolver.addImport( "org.drools.Cheese" );
+ resolver.addImport( "org.drools.OuterFact" );
+ ScenarioRunner runner = new ScenarioRunner( sc,
+ resolver,
+ new MockWorkingMemory() );
+
+ assertTrue( runner.populatedData.containsKey( "c1" ) );
+ assertTrue( runner.populatedData.containsKey( "p1" ) );
+
+ OuterFact o = (OuterFact) runner.populatedData.get("p1");
+ assertNotNull(o.getInnerFact());
+
+ }
+
+
public void testPopulateEmpty() throws Exception {
Scenario sc = new Scenario();
List facts = ls( new FactData( "Cheese",
More information about the jboss-svn-commits
mailing list