[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