[jboss-svn-commits] JBL Code SVN: r16004 - 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
Tue Oct 23 02:45:02 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-10-23 02:45:01 -0400 (Tue, 23 Oct 2007)
New Revision: 16004
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/testframework/ScenarioRunner.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
Log:
JBRULES-1271 time machine (for testing framework)
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-23 06:43:02 UTC (rev 16003)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java 2007-10-23 06:45:01 UTC (rev 16004)
@@ -1,6 +1,7 @@
package org.drools.brms.client.modeldriven.testing;
import java.io.Serializable;
+import java.util.Date;
/**
* This represents a test scenario.
@@ -10,9 +11,30 @@
*/
public class Scenario implements Serializable {
+ /**
+ * The maximum number of rules to fire so we don't recurse for ever.
+ */
public int maxRuleFirings = 100000;
+
+ /**
+ * This is the simulated date - leaving it as null means it will use
+ * the current time.
+ */
+ public Date scenarioSimulatedDate = null;
+
+ /**
+ * the fact data (and globals) to use
+ */
public FactData[] facts = new FactData[0];
+
+ /**
+ * Result assertions/expectations.
+ */
public Assertion[] assertions = new Assertion[0];
+
+ /**
+ * The rules to trace in this scenario.
+ */
public ScenarioRules ruleTrace = new ScenarioRules();
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-23 06:43:02 UTC (rev 16003)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java 2007-10-23 06:45:01 UTC (rev 16004)
@@ -3,6 +3,7 @@
import static org.mvel.MVEL.eval;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -18,6 +19,7 @@
import org.drools.brms.client.modeldriven.testing.VerifyField;
import org.drools.brms.client.modeldriven.testing.VerifyRuleFired;
import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.TimeMachine;
/**
* This actually runs the test scenarios.
@@ -46,8 +48,8 @@
* a given package header, and the Package config can provide a classloader.
*
*/
- public ScenarioRunner(Scenario scenario, TypeResolver resolver,
- InternalWorkingMemory wm) throws ClassNotFoundException {
+ public ScenarioRunner(final Scenario scenario, final TypeResolver resolver,
+ final InternalWorkingMemory wm) throws ClassNotFoundException {
this.scenario = scenario;
this.workingMemory = wm;
@@ -64,12 +66,25 @@
}
}
+ //create the listener to trace rules
HashSet<String> ruleList = new HashSet<String>();
ruleList.addAll(Arrays.asList(scenario.ruleTrace.rules));
TestingEventListener listener = new TestingEventListener(ruleList, wm
.getRuleBase(), scenario.ruleTrace.inclusive);
wm.addEventListener(listener);
+ //set up the time machine
+ if (scenario.scenarioSimulatedDate != null) {
+ final Calendar now = Calendar.getInstance();
+ now.setTimeInMillis(scenario.scenarioSimulatedDate.getTime());
+ wm.setTimeMachine(new TimeMachine() {
+ @Override
+ public Calendar getNow() {
+ return now;
+ }
+ });
+ }
+
// now run the rules...
applyData(wm, this.populatedData, this.globalData);
wm.fireAllRules(scenario.maxRuleFirings);
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2007-10-23 06:43:02 UTC (rev 16003)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2007-10-23 06:45:01 UTC (rev 16004)
@@ -41,7 +41,7 @@
List<Object> facts = new ArrayList<Object>();
AgendaEventListener agendaEventListener;
- TimeMachine timeMachine;
+ TimeMachine timeMachine = new TimeMachine();
Map<String, Object> globals = new HashMap<String, Object>();
public void addLIANodePropagation(LIANodePropagation liaNodePropagation) {
@@ -97,8 +97,7 @@
}
public TimeMachine getTimeMachine() {
- // TODO Auto-generated method stub
- return null;
+ return this.timeMachine;
}
public TruthMaintenanceSystem getTruthMaintenanceSystem() {
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-23 06:43:02 UTC (rev 16003)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2007-10-23 06:45:01 UTC (rev 16004)
@@ -1,5 +1,6 @@
package org.drools.testframework;
+import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -14,6 +15,7 @@
import org.drools.brms.client.modeldriven.testing.VerifyFact;
import org.drools.brms.client.modeldriven.testing.VerifyField;
import org.drools.brms.client.modeldriven.testing.VerifyRuleFired;
+import org.drools.rule.TimeMachine;
import junit.framework.TestCase;
@@ -211,8 +213,31 @@
}
+ public void testSimulatedDate() throws Exception {
+ Scenario sc = new Scenario();
+ MockWorkingMemory wm = new MockWorkingMemory();
+ ScenarioRunner run = new ScenarioRunner(sc, null, wm);
+ TimeMachine tm = run.workingMemory.getTimeMachine();
+ //love you
+ long time = tm.getNow().getTimeInMillis();
+ Thread.sleep(100);
+ long future = tm.getNow().getTimeInMillis();
+ assertTrue(future > time);
+ sc.scenarioSimulatedDate = new Date("10-Jul-1974");
+ run = new ScenarioRunner(sc, null, wm);
+ tm = run.workingMemory.getTimeMachine();
+ long expected = sc.scenarioSimulatedDate.getTime();
+ assertEquals(expected, tm.getNow().getTimeInMillis());
+ Thread.sleep(50);
+ assertEquals(expected, tm.getNow().getTimeInMillis());
+
+ }
+
+
+
+
}
More information about the jboss-svn-commits
mailing list