[jboss-svn-commits] JBL Code SVN: r32693 - in labs/jbossrules/branches/drools_repo_services_diega_baunax: drools-compiler/META-INF and 22 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 30 17:22:05 EDT 2010


Author: diegoll
Date: 2010-04-30 17:22:02 -0400 (Fri, 30 Apr 2010)
New Revision: 32693

Added:
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/DropDownData.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FactTypeFilter.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FieldAccessorsAndMutators.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/ModelField.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/brl/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/dt/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/testing/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/ui/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/package.html
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/converter/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/package.html
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/rules/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/util/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/testframework/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/Alert.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine2Test.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/brl/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionFieldValueTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionSetFieldTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFactPatternTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFieldConstraintTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ConstraintTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DSLSentenceTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DataEnumLoaderTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/FactPatternTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/RuleModelTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource2.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/dt/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/package.html
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/server/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/server/converter/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/server/rules/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/server/util/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/FactDataTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/RuleUnit.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/TestingEventListenerTest.java
Removed:
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/RuleUnit.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioTest.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java
Modified:
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/META-INF/MANIFEST.MF
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/pom.xml
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/pom.xml
Log:
[JBRULES-2499] initial migration (**DOESN'T COMPILE**)

Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/META-INF/MANIFEST.MF	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/META-INF/MANIFEST.MF	2010-04-30 21:22:02 UTC (rev 32693)
@@ -1,84 +1,66 @@
 Manifest-Version: 1.0
-Bundle-Activator: org.drools.osgi.compiler.Activator
-Created-By: 1.5.0_21 (Sun Microsystems Inc.)
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Import-Package: com.thoughtworks.xstream,com.thoughtworks.xstream.io,c
- om.thoughtworks.xstream.io.xml,javax.xml.parsers,javax.xml.transform,
- javax.xml.transform.stream,org.antlr.runtime,org.antlr.runtime.tree,o
- rg.codehaus.janino,org.codehaus.janino.util,org.codehaus.janino.util.
- enumerator,org.codehaus.janino.util.resource,org.eclipse.jdt.core.com
- piler;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler
- ;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler.clas
- sfmt;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler.
- env;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler.p
- roblem;provider=jasper;version="3.3",org.mvel2;version="2.0",org.mvel
- 2.ast;version="2.0",org.mvel2.compiler;version="2.0",org.mvel2.integr
- ation;version="2.0",org.mvel2.integration.impl;version="2.0",org.mvel
- 2.optimizers;version="2.0",org.mvel2.templates;version="2.0",org.mvel
- 2.util;version="2.0",org.osgi.framework;version="1.5",org.osgi.util.t
- racker;version="1.4",org.w3c.dom,org.xml.sax
-Bnd-LastModified: 1267407606512
 Export-Package: org.drools.builder.impl;uses:="org.drools.compiler";ve
- rsion="5.1.0.SNAPSHOT",org.drools.rule.builder;uses:="org.drools.comp
- iler,org.mvel2.compiler,org.mvel2,org.drools.rule.builder.dialect.mve
- l";version="5.1.0.SNAPSHOT",org.drools.guvnor.client.modeldriven.test
- ing;uses:="org.drools.guvnor.client.modeldriven.brl";version="5.1.0.S
- NAPSHOT",org.drools.guvnor.server.util;uses:="org.drools.guvnor.clien
- t.modeldriven.brl,com.thoughtworks.xstream.io,com.thoughtworks.xstrea
- m.io.xml,com.thoughtworks.xstream,org.drools.guvnor.server.rules,org.
- drools.guvnor.client.modeldriven,org.mvel2,org.drools.guvnor.client.m
- odeldriven.dt,org.drools.guvnor.client.modeldriven.testing";version="
- 5.1.0.SNAPSHOT",org.drools.compiler.xml;uses:="org.drools.compiler.xm
- l.processes,org.drools.compiler.xml.rules,org.xml.sax,javax.xml.parse
- rs";version="5.1.0.SNAPSHOT",org.drools.compiler.xml.processes;uses:=
- "org.xml.sax,org.w3c.dom,org.drools.compiler.xml,javax.xml.transform.
- stream,javax.xml.transform";version="5.1.0.SNAPSHOT",org.drools.osgi.
- compiler;uses:="org.osgi.framework,org.osgi.util.tracker,org.drools.c
- ompiler,org.drools.builder.impl";version="5.1.0.SNAPSHOT",org.drools.
- guvnor.client.modeldriven.dt;uses:="org.drools.guvnor.client.modeldri
- ven.brl,org.drools.guvnor.client.modeldriven";version="5.1.0.SNAPSHOT
- ",org.drools.compiler.xml.rules;uses:="org.xml.sax,org.w3c.dom,org.an
- tlr.runtime.tree,org.antlr.runtime";version="5.1.0.SNAPSHOT",org.droo
- ls.process.builder;uses:="org.drools.rule.builder,org.drools.compiler
- ";version="5.1.0.SNAPSHOT",org.drools.testframework;uses:="org.drools
- .guvnor.client.modeldriven.testing,org.mvel2.compiler,org.drools.guvn
- or.server.util,org.mvel2";version="5.1.0.SNAPSHOT",org.drools.guvnor.
- client.modeldriven.ui;version="5.1.0.SNAPSHOT",org.drools.guvnor.clie
- nt.modeldriven;uses:="org.drools.guvnor.client.modeldriven.brl";versi
- on="5.1.0.SNAPSHOT",org.drools.reteoo.compiled;uses:="org.drools.comp
- iler,org.drools.rule.builder.dialect.java";version="5.1.0.SNAPSHOT",o
- rg.drools.rule.builder.dialect.java.parser;uses:="org.antlr.runtime";
- version="5.1.0.SNAPSHOT",org.drools.semantics.java.parser;version="5.
- 1.0.SNAPSHOT",org.drools.rule.builder.dialect.java;uses:="org.drools.
- rule.builder,org.mvel2.integration,org.mvel2.integration.impl,org.mve
- l2.templates,org.mvel2.compiler,org.mvel2.optimizers,org.drools.compi
- ler,org.drools.rule.builder.dialect.mvel,org.drools.rule.builder.dial
- ect.java.parser,org.antlr.runtime,org.mvel2";version="5.1.0.SNAPSHOT"
- ,org.drools.compiler;uses:="org.drools.rule.builder,org.antlr.runtime
- .tree,org.antlr.runtime,org.drools.guvnor.server.util,org.drools.comp
- iler.xml,org.xml.sax,org.drools.guvnor.client.modeldriven.brl,org.mve
- l2,org.drools.process.builder,org.drools.compiler.xml.processes,javax
- .xml.parsers";version="5.1.0.SNAPSHOT",org.drools.rule.builder.dialec
- t.mvel;uses:="org.drools.rule.builder,org.drools.compiler,org.mvel2,o
- rg.mvel2.compiler,org.mvel2.util,org.drools.rule.builder.dialect.java
- ,org.mvel2.ast";version="5.1.0.SNAPSHOT",org.drools.guvnor.server.rul
- es;uses:="org.drools.guvnor.server.util,org.drools.compiler,org.drool
- s.guvnor.client.modeldriven";version="5.1.0.SNAPSHOT",org.drools.guvn
- or.client.modeldriven.brl;version="5.1.0.SNAPSHOT"
-Bundle-Version: 5.1.0.SNAPSHOT
+ rsion="5.1.0.SNAPSHOT",org.drools.osgi.compiler;uses:="org.osgi.util.
+ tracker,org.osgi.framework,org.drools.builder.impl,org.drools.compile
+ r";version="5.1.0.SNAPSHOT",org.drools.compiler.xml.rules;uses:="org.
+ w3c.dom,org.xml.sax,org.antlr.runtime.tree,org.antlr.runtime";version
+ ="5.1.0.SNAPSHOT",org.drools.compiler.xml.processes;uses:="org.drools
+ .compiler.xml,org.w3c.dom,org.xml.sax,javax.xml.transform,javax.xml.t
+ ransform.stream";version="5.1.0.SNAPSHOT",org.drools.compiler.xml;use
+ s:="org.drools.compiler.xml.processes,org.drools.compiler.xml.rules,j
+ avax.xml.parsers,org.xml.sax";version="5.1.0.SNAPSHOT",org.drools.tes
+ tframework;version="5.1.0.SNAPSHOT",org.drools.compiler;uses:="org.dr
+ ools.rule.builder,org.antlr.runtime.tree,org.antlr.runtime,org.drools
+ .compiler.xml,org.drools.process.builder,org.mvel2,org.drools.compile
+ r.xml.processes,javax.xml.parsers";version="5.1.0.SNAPSHOT",org.drool
+ s.process.builder;uses:="org.drools.rule.builder,org.drools.compiler"
+ ;version="5.1.0.SNAPSHOT",org.drools.reteoo.compiled;uses:="org.drool
+ s.rule.builder.dialect.java,org.drools.compiler";version="5.1.0.SNAPS
+ HOT",org.drools.semantics.java.parser;version="5.1.0.SNAPSHOT",org.dr
+ ools.rule.builder.dialect.java;uses:="org.mvel2.templates,org.mvel2.i
+ ntegration,org.mvel2.integration.impl,org.drools.rule.builder,org.dro
+ ols.compiler,org.drools.rule.builder.dialect.mvel,org.mvel2.optimizer
+ s,org.mvel2.compiler,org.drools.rule.builder.dialect.java.parser,org.
+ antlr.runtime,org.mvel2";version="5.1.0.SNAPSHOT",org.drools.rule.bui
+ lder.dialect.mvel;uses:="org.drools.rule.builder,org.drools.compiler,
+ org.mvel2,org.mvel2.util,org.drools.rule.builder.dialect.java,org.mve
+ l2.ast,org.mvel2.compiler";version="5.1.0.SNAPSHOT",org.drools.rule.b
+ uilder.dialect.java.parser;uses:="org.antlr.runtime";version="5.1.0.S
+ NAPSHOT",org.drools.rule.builder;uses:="org.drools.compiler,org.drool
+ s.rule.builder.dialect.mvel,org.mvel2,org.mvel2.compiler";version="5.
+ 1.0.SNAPSHOT"
+Private-Package: org.drools.commons.jci.problems;version="5.1.0.SNAPSH
+ OT",org.drools.lang.descr;version="5.1.0.SNAPSHOT",org.drools.commons
+ .jci.compilers;version="5.1.0.SNAPSHOT",org.drools.commons.jci.reader
+ s;version="5.1.0.SNAPSHOT",org.drools.commons.jci.stores;version="5.1
+ .0.SNAPSHOT",org.drools.lang;version="5.1.0.SNAPSHOT",org.drools.lang
+ .dsl;version="5.1.0.SNAPSHOT"
+Tool: Bnd-0.0.357
 Bundle-Name: Drools :: Compiler
-Bundle-Description: A rule production system
-Private-Package: org.drools.lang.descr;version="5.1.0.SNAPSHOT",org.dr
- ools.lang.dsl;version="5.1.0.SNAPSHOT",org.drools.commons.jci.compile
- rs;version="5.1.0.SNAPSHOT",org.drools.commons.jci.stores;version="5.
- 1.0.SNAPSHOT",org.drools.lang;version="5.1.0.SNAPSHOT",org.drools.com
- mons.jci.problems;version="5.1.0.SNAPSHOT",org.drools.commons.jci.rea
- ders;version="5.1.0.SNAPSHOT"
-Bundle-DocURL: http://www.jboss.org/
+Created-By: 1.6.0_20 (Sun Microsystems Inc.)
+Require-Bundle: org.drools.core;bundle-version="5.1.0.SNAPSHOT"
 Bundle-Vendor: JBoss Inc.
+DynamicImport-Package: *
+Bundle-Version: 5.1.0.SNAPSHOT
+Bnd-LastModified: 1272659408899
+Bundle-Activator: org.drools.osgi.compiler.Activator
 Bundle-ManifestVersion: 2
+Bundle-Description: A rule production system
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
+Import-Package: javax.xml.parsers,javax.xml.transform,javax.xml.transf
+ orm.stream,org.antlr.runtime,org.antlr.runtime.tree,org.codehaus.jani
+ no,org.codehaus.janino.util,org.codehaus.janino.util.enumerator,org.c
+ odehaus.janino.util.resource,org.eclipse.jdt.core.compiler;provider=j
+ asper;version="3.3",org.eclipse.jdt.internal.compiler;provider=jasper
+ ;version="3.3",org.eclipse.jdt.internal.compiler.classfmt;provider=ja
+ sper;version="3.3",org.eclipse.jdt.internal.compiler.env;provider=jas
+ per;version="3.3",org.eclipse.jdt.internal.compiler.problem;provider=
+ jasper;version="3.3",org.mvel2;version="2.0",org.mvel2.ast;version="2
+ .0",org.mvel2.compiler;version="2.0",org.mvel2.integration;version="2
+ .0",org.mvel2.integration.impl;version="2.0",org.mvel2.optimizers;ver
+ sion="2.0",org.mvel2.templates;version="2.0",org.mvel2.util;version="
+ 2.0",org.osgi.framework;version="1.5",org.osgi.util.tracker;version="
+ 1.4",org.w3c.dom,org.xml.sax
 Bundle-SymbolicName: org.drools.compiler;singleton:=true
-Tool: Bnd-0.0.357
-Require-Bundle: org.drools.core;bundle-version="5.1.0.SNAPSHOT"
-DynamicImport-Package: *
+Bundle-DocURL: http://www.jboss.org/
 

Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/pom.xml
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/pom.xml	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/pom.xml	2010-04-30 21:22:02 UTC (rev 32693)
@@ -55,15 +55,15 @@
          <artifactId>janino</artifactId>
       </dependency>
       <dependency>
+         <groupId>org.mvel</groupId>
+         <artifactId>mvel2</artifactId>
+      </dependency>
+      <dependency>
          <groupId>com.thoughtworks.xstream</groupId>
          <artifactId>xstream</artifactId>
-         <optional>true</optional>
+         <scope>test</scope>
       </dependency>
       <dependency>
-         <groupId>org.mvel</groupId>
-         <artifactId>mvel2</artifactId>
-      </dependency>
-      <dependency>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>jetty-embedded</artifactId>
          <version>6.1.15</version>

Deleted: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -1,383 +0,0 @@
-package org.drools.testframework;
-
-import static org.mvel2.MVEL.eval;
-
-import java.util.*;
-
-import org.drools.FactHandle;
-import org.drools.RuleBase;
-import org.drools.base.ClassTypeResolver;
-import org.drools.base.TypeResolver;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.guvnor.client.modeldriven.testing.ActivateRuleFlowGroup;
-import org.drools.guvnor.client.modeldriven.testing.ExecutionTrace;
-import org.drools.guvnor.client.modeldriven.testing.Expectation;
-import org.drools.guvnor.client.modeldriven.testing.FactData;
-import org.drools.guvnor.client.modeldriven.testing.FieldData;
-import org.drools.guvnor.client.modeldriven.testing.Fixture;
-import org.drools.guvnor.client.modeldriven.testing.RetractFact;
-import org.drools.guvnor.client.modeldriven.testing.Scenario;
-import org.drools.guvnor.client.modeldriven.testing.VerifyFact;
-import org.drools.guvnor.client.modeldriven.testing.VerifyField;
-import org.drools.guvnor.client.modeldriven.testing.VerifyRuleFired;
-import org.drools.guvnor.server.util.ScenarioXMLPersistence;
-import org.drools.rule.Package;
-import org.drools.rule.TimeMachine;
-import org.mvel2.MVEL;
-import org.mvel2.ParserContext;
-import org.mvel2.compiler.CompiledExpression;
-import org.mvel2.compiler.ExpressionCompiler;
-
-
-/**
- * This actually runs the test scenarios.
- *
- * @author Michael Neale
- *
- */
-public class ScenarioRunner {
-
-	final Scenario scenario;
-	final Map<String, Object> populatedData = new HashMap<String, Object>();
-	final Map<String, Object> globalData = new HashMap<String, Object>();
-	final Map<String, FactHandle> factHandles = new HashMap<String, FactHandle>();
-
-	final InternalWorkingMemory workingMemory;
-
-
-	/**
-	 * This constructor is normally used by Guvnor for running tests on a users request.
-	 * @param scenario
-	 *            The scenario to run.
-	 * @param resolver
-	 *            A populated type resolved to be used to resolve the types in
-	 *            the scenario.
-	 *
-	 * For info on how to invoke this, see
-	 * ContentPackageAssemblerTest.testPackageWithRuleflow in drools-guvnor This
-	 * requires that the classloader for the thread context be set
-	 * appropriately. The PackageBuilder can provide a suitable TypeResolver for
-	 * a given package header, and the Package config can provide a classloader.
-	 *
-	 */
-	public ScenarioRunner(final Scenario scenario, final TypeResolver resolver,
-			final InternalWorkingMemory wm) throws ClassNotFoundException {
-		this.scenario = scenario;
-		this.workingMemory = wm;
-		runScenario(scenario, resolver, wm);
-	}
-
-	/**
-	 * Use this constructor if you have a scenario in a file, for instance.
-	 * @throws ClassNotFoundException
-	 */
-	public ScenarioRunner(String xml, RuleBase rb) throws ClassNotFoundException {
-		this.scenario = ScenarioXMLPersistence.getInstance().unmarshal(xml);
-		this.workingMemory = (InternalWorkingMemory) rb.newStatefulSession();
-		Package pk = rb.getPackages()[0];
-        ClassLoader cl = ((InternalRuleBase) rb).getRootClassLoader();
-        HashSet<String> imports = new HashSet<String>();
-        imports.add(pk.getName() + ".*");
-        imports.addAll(pk.getImports().keySet());
-        TypeResolver resolver = new ClassTypeResolver( imports, cl );
-        runScenario(scenario, resolver, this.workingMemory);
-	}
-
-    interface Populate {
-        public void go();
-    }
-
-	private void runScenario(final Scenario scenario,
-			final TypeResolver resolver, final InternalWorkingMemory wm)
-			throws ClassNotFoundException {
-		MVEL.COMPILER_OPT_ALLOW_NAKED_METH_CALL = true;
-		scenario.lastRunResult = new Date();
-		//stub out any rules we don't want to have the consequences firing of.
-		HashSet<String> ruleList = new HashSet<String>();
-		ruleList.addAll(scenario.rules);
-		//TestingEventListener.stubOutRules(ruleList, wm.getRuleBase(), scenario.inclusive);
-
-		TestingEventListener listener = null;
-
-        List<Populate> toPopulate = new ArrayList<Populate>();
-
-		for (Iterator iterator = scenario.globals.iterator(); iterator.hasNext();) {
-			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
-				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  + "]");
-					}
-                    toPopulate.add(new Populate() {
-                        public void go() {
-                            populateFields(fact, populatedData, f);
-                            workingMemory.update(factHandles.get(fact.name), f);
-                        }
-                    });
-				} else /* a new one */ {
-                    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 ActivateRuleFlowGroup ) {
-                workingMemory.getAgenda().activateRuleFlowGroup( ((ActivateRuleFlowGroup) fx).name );
-            } else if ( fx instanceof ExecutionTrace ) {
-                doPopulate(toPopulate);
-				ExecutionTrace executionTrace = (ExecutionTrace)fx;
-				//create the listener to trace rules
-
-				if (listener != null) wm.removeEventListener(listener); //remove the old
-				listener = new TestingEventListener();
-
-				wm.addEventListener(listener);
-
-				//set up the time machine
-				applyTimeMachine(wm, executionTrace);
-
-				//love you
-				long time = System.currentTimeMillis();
-				wm.fireAllRules(listener.getAgendaFilter(ruleList, scenario.inclusive),scenario.maxRuleFirings);
-				executionTrace.executionTimeResult = System.currentTimeMillis() - time;
-				executionTrace.numberOfRulesFired = listener.totalFires;
-				executionTrace.rulesFired = listener.getRulesFiredSummary();
-
-
-			} else if (fx instanceof Expectation) {
-                doPopulate(toPopulate);
-					Expectation assertion = (Expectation) fx;
-					if (assertion instanceof VerifyFact) {
-						verify((VerifyFact) assertion);
-					} else if (assertion instanceof VerifyRuleFired) {
-						verify((VerifyRuleFired) assertion,
-								(listener.firingCounts != null) ? listener.firingCounts : new HashMap<String, Integer>());
-					}
-			} else {
-				throw new IllegalArgumentException("Not sure what to do with " + fx);
-			}
-
-
-
-		}
-        
-        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);
-        if (fullName.equals("java.util.List") || fullName.equals("java.util.Collection")) {
-                return "java.util.ArrayList";
-        } else {
-                return fullName;
-        }
-    }
-
-    private void applyTimeMachine(final InternalWorkingMemory wm,
-			ExecutionTrace executionTrace) {
-		if (executionTrace.scenarioSimulatedDate != null) {
-			final Calendar now = Calendar.getInstance();
-			now.setTimeInMillis(executionTrace.scenarioSimulatedDate.getTime());
-			wm.setTimeMachine(new TimeMachine() {
-				@Override
-				public Calendar getNow() {
-					return now;
-				}
-			});
-		} else {
-			//normal time.
-			wm.setTimeMachine(new TimeMachine());
-		}
-	}
-
-	void verify(VerifyRuleFired assertion, Map<String, Integer> firingCounts) {
-
-		assertion.actualResult = firingCounts.containsKey(assertion.ruleName) ? firingCounts
-				.get(assertion.ruleName)
-				: 0;
-		if (assertion.expectedFire != null) {
-			if (assertion.expectedFire) {
-				if (assertion.actualResult > 0) {
-					assertion.successResult = true;
-					assertion.explanation = "Rule [" + assertion.ruleName + "] was actived " + assertion.actualResult + " times.";
-				} else {
-					assertion.successResult = false;
-					assertion.explanation = "Rule [" + assertion.ruleName + "] was not activated. Expected it to be activated.";
-				}
-			} else {
-				if (assertion.actualResult == 0) {
-					assertion.successResult = true;
-					assertion.explanation = "Rule [" + assertion.ruleName + "] was not activated.";
-				} else {
-					assertion.successResult = false;
-					assertion.explanation = "Rule [" + assertion.ruleName + "] was activated " + assertion.actualResult + " times, but expected none.";
-				}
-			}
-		}
-
-		if (assertion.expectedCount != null) {
-			if (assertion.actualResult.equals(assertion.expectedCount)) {
-				assertion.successResult = true;
-				assertion.explanation = "Rule [" + assertion.ruleName + "] activated " + assertion.actualResult + " times.";
-			} else {
-				assertion.successResult = false;
-				assertion.explanation = "Rule [" + assertion.ruleName + "] activated " + assertion.actualResult + " times. Expected " + assertion.expectedCount + " times.";
-			}
-		}
-	}
-
-
-	void verify(VerifyFact value) {
-
-
-		if (!value.anonymous) {
-			Object fact = this.populatedData.get(value.name);
-			if (fact == null) fact = this.globalData.get(value.name);
-			checkFact(value, fact);
-		} else {
-			Iterator obs = this.workingMemory.iterateObjects();
-			while(obs.hasNext()) {
-				Object fact = obs.next();
-				if (fact.getClass().getSimpleName().equals(value.name)) {
-					checkFact(value, fact);
-					if (value.wasSuccessful()) return;
-				}
-			}
-			for (Iterator iterator = value.fieldValues.iterator(); iterator.hasNext();) {
-				VerifyField vfl = (VerifyField) iterator.next();
-				if (vfl.successResult == null) {
-					vfl.successResult = Boolean.FALSE;
-					vfl.actualResult = "No match";
-				}
-			}
- 		}
-	}
-
-	private void checkFact(VerifyFact value, Object fact) {
-		for (int i = 0; i < value.fieldValues.size(); i++) {
-			VerifyField fld = (VerifyField) value.fieldValues.get(i);
-			Map<String, Object> st = new HashMap<String, Object>();
-			st.put("__fact__", fact);
-			if (fld.expected != null) {
-				Object expectedVal = fld.expected.trim();
-				if (fld.expected.startsWith("=")) {
-					expectedVal = eval(fld.expected.substring(1), this.populatedData);
-				}
-				st.put("__expected__", expectedVal);
-				
-				
-				ParserContext ctx = new ParserContext();
-                for ( Map.Entry<String, Object> entry : st.entrySet() ) {
-                    ctx.addInput( entry.getKey(),
-                                  entry.getValue().getClass() );
-                }
-                CompiledExpression expr = new ExpressionCompiler( "__fact__." + fld.fieldName
-                                                                  + " " + fld.operator  + " __expected__" ).compile( ctx );
-
-                fld.successResult = (Boolean) MVEL.executeExpression( expr,
-                                                                      st );
-				
-//				fld.successResult = (Boolean) eval("__fact__." + fld.fieldName
-//						+ " " + fld.operator  + " __expected__", st);
-
-
-				if (!fld.successResult) {
-//					Object actual = eval("__fact__." + fld.fieldName, st);
-
-				    Object actual = MVEL.executeExpression( new ExpressionCompiler( "__fact__." + fld.fieldName ).compile( ctx ),
-                                                            st );
-					
-					
-					fld.actualResult = (actual != null) ? actual.toString() : "";
-
-					if (fld.operator.equals("==")) {
-						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.actualResult
-											+ "] expected [" + fld.expected + "].";
-					} else {
-						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not expected to be [" + fld.actualResult
-						+ "].";
-					}
-				} else {
-					if (fld.operator.equals("==")) {
-						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.expected + "].";
-					} else if (fld.operator.equals("!=")){
-						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not [" + fld.expected + "].";
-					}
-				}
-			}
-
-		}
-	}
-
-
-
-	Object populateFields(FactData fact, Map<String, Object> factData, Object factObject) {
-		for (int i = 0; i < fact.fieldData.size(); i++) {
-			FieldData field = (FieldData) fact.fieldData.get(i);
-			Object val;
-			if (field.value != null && !field.value.equals("")) {
-				if (field.value.startsWith("=")) {
-					// eval the val into existence
-					val = eval(field.value.substring(1), 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);
-			}
-		}
-		return factObject;
-	}
-
-	/**
-	 * True if the scenario was run with 100% success.
-	 */
-	public boolean wasSuccess() {
-		return this.scenario.wasSuccessful();
-	}
-
-	/**
-	 * @return A pretty printed report detailing any failures that occured
-	 * when running the scenario (unmet expectations).
-	 */
-	public String getReport() {
-		return this.scenario.printFailureReport();
-	}
-
-
-}
-

Deleted: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -1,19 +0,0 @@
-package org.drools.testframework;
-
-import java.util.ArrayList;
-
-import junit.framework.TestCase;
-
-import org.drools.guvnor.client.modeldriven.testing.FactData;
-import org.drools.guvnor.client.modeldriven.testing.FieldData;
-
-public class FactDataTest extends TestCase {
-	public void testAdd() {
-		FactData fd = new FactData("x", "y", new ArrayList(), false );
-		assertEquals(0, fd.fieldData.size());
-		fd.fieldData.add(new FieldData("x", "y"));
-		assertEquals(1, fd.fieldData.size());
-		fd.fieldData.add(new FieldData("q", "x"));
-		assertEquals(2, fd.fieldData.size());
-	}
-}

Deleted: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/RuleUnit.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/RuleUnit.java	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/RuleUnit.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -1,35 +0,0 @@
-package org.drools.testframework;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-import junit.framework.TestCase;
-
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
-import org.drools.compiler.DroolsParserException;
-import org.drools.compiler.PackageBuilder;
-
-/**
- * A class with some utilities for testing rules.
- * @author Michael Neale
- *
- */
-public abstract class RuleUnit extends TestCase {
-
-	/**
-	 * Return a wm ready to go based on the rules in a drl at the specified uri (in the classpath).
-	 */
-	public StatefulSession getWorkingMemory(String uri)
-			throws DroolsParserException, IOException, Exception {
-		PackageBuilder builder = new PackageBuilder();
-		builder.addPackageFromDrl(new InputStreamReader(this.getClass()
-				.getResourceAsStream(uri)));
-		assertFalse(builder.getErrors().toString(), builder.hasErrors());
-		RuleBase rb = RuleBaseFactory.newRuleBase();
-		rb.addPackage(builder.getPackage());
-
-		return rb.newStatefulSession();
-	}
-}

Deleted: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -1,1487 +0,0 @@
-package org.drools.testframework;
-
-import static org.mvel2.MVEL.eval;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import org.drools.*;
-import org.drools.base.ClassTypeResolver;
-import org.drools.base.TypeResolver;
-import org.drools.base.mvel.DroolsMVELFactory;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.guvnor.client.modeldriven.testing.ActivateRuleFlowGroup;
-import org.drools.guvnor.client.modeldriven.testing.ExecutionTrace;
-import org.drools.guvnor.client.modeldriven.testing.Expectation;
-import org.drools.guvnor.client.modeldriven.testing.FactData;
-import org.drools.guvnor.client.modeldriven.testing.FieldData;
-import org.drools.guvnor.client.modeldriven.testing.Fixture;
-import org.drools.guvnor.client.modeldriven.testing.RetractFact;
-import org.drools.guvnor.client.modeldriven.testing.Scenario;
-import org.drools.guvnor.client.modeldriven.testing.VerifyFact;
-import org.drools.guvnor.client.modeldriven.testing.VerifyField;
-import org.drools.guvnor.client.modeldriven.testing.VerifyRuleFired;
-import org.drools.guvnor.server.util.ScenarioXMLPersistence;
-import org.drools.rule.TimeMachine;
-import org.mvel2.MVEL;
-
-public class ScenarioRunnerTest extends RuleUnit {
-
-    static {
-        try {
-            Class.forName( "org.drools.base.mvel.MVELCompilationUnit" );
-        } catch ( ClassNotFoundException e ) {
-            e.printStackTrace();
-        }
-    }
-
-    public void setUp() {
-        //needed when running stand alone to make sure the converters get loaded.
-        DroolsMVELFactory d = new DroolsMVELFactory();
-    }
-
-    public void testPopulateFactsWithInterfaces() throws Exception {
-        Scenario sc = new Scenario();
-        List facts = ls( new FactData( "List",
-                                       "ls",
-                                       new ArrayList(),
-                                       false ) );
-
-        List globals = ls( new FactData( "List",
-                                         "ls",
-                                         new ArrayList(),
-                                         false ) );
-        sc.fixtures.addAll( facts );
-        sc.globals.addAll( globals );
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "java.util.List" );
-
-        ScenarioRunner runner = new ScenarioRunner( sc,
-                                                    resolver,
-                                                    new MockWorkingMemory() );
-
-    }
-
-    public void testPopulateFacts() throws Exception {
-        Scenario sc = new Scenario();
-        List facts = ls( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "type",
-                                                          "cheddar" ),
-                                           new FieldData( "price",
-                                                          "42" ) ),
-                                       false ),
-                         new FactData( "Person",
-                                       "p1",
-                                       ls( new FieldData( "name",
-                                                          "mic" ),
-                                           new FieldData( "age",
-                                                          "=30 + 3" ) ),
-                                       false ) );
-
-        sc.fixtures.addAll( facts );
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-        resolver.addImport( "org.drools.Person" );
-        ScenarioRunner runner = new ScenarioRunner( sc,
-                                                    resolver,
-                                                    new MockWorkingMemory() );
-
-        assertTrue( runner.populatedData.containsKey( "c1" ) );
-        assertTrue( runner.populatedData.containsKey( "p1" ) );
-
-        Cheese c = (Cheese) runner.populatedData.get( "c1" );
-        assertEquals( "cheddar",
-                      c.getType() );
-        assertEquals( 42,
-                      c.getPrice() );
-
-        Person p = (Person) runner.populatedData.get( "p1" );
-        assertEquals( "mic",
-                      p.getName() );
-        assertEquals( 33,
-                      p.getAge() );
-
-    }
-
-    public void testPopulateNested() throws Exception {
-        Scenario sc = new Scenario();
-        List facts = ls( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "type",
-                                                          "cheddar" ),
-                                           new FieldData( "price",
-                                                          "42" ) ),
-                                       false ),
-                         new FactData( "OuterFact",
-                                       "p1",
-                                       ls( new FieldData( "name",
-                                                          "mic" ),
-                                           new FieldData( "innerFact",
-                                                          "=c1" ) ),
-                                       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() );
-
-    }
-
-    /**
-     * 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",
-                                       "c1",
-                                       new ArrayList(),
-                                       false ) );
-        sc.fixtures.addAll( facts );
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        sc.fixtures.addAll( facts );
-        resolver.addImport( "org.drools.Cheese" );
-        ScenarioRunner runner = new ScenarioRunner( sc,
-                                                    resolver,
-                                                    new MockWorkingMemory() );
-
-        assertTrue( runner.populatedData.containsKey( "c1" ) );
-        assertTrue( runner.populatedData.get( "c1" ) instanceof Cheese );
-    }
-
-    public void testDateField() throws Exception {
-        Scenario sc = new Scenario();
-        List facts = ls( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "type",
-                                                          "cheddar" ),
-                                           new FieldData( "usedBy",
-                                                          "10-Jul-2008" ) ),
-                                       false ),
-                         new FactData( "OuterFact",
-                                       "p1",
-                                       ls( new FieldData( "name",
-                                                          "mic" ),
-                                           new FieldData( "innerFact",
-                                                          "=c1" ) ),
-                                       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" ) );
-
-        Cheese c = (Cheese) runner.populatedData.get( "c1" );
-        assertNotNull( c.getUsedBy() );
-
-    }
-
-    public void testPopulateFactsWithExpressions() throws Exception {
-        Scenario sc = new Scenario();
-        List facts = ls( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "type",
-                                                          "cheddar" ),
-                                           new FieldData( "price",
-                                                          "42" ) ),
-                                       false ),
-                         new FactData( "Cheese",
-                                       "c2",
-                                       ls( new FieldData( "type",
-                                                          "= c1.type" ) ),
-                                       false ) );
-
-        sc.fixtures.addAll( facts );
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-
-        ScenarioRunner runner = new ScenarioRunner( sc,
-                                                    resolver,
-                                                    new MockWorkingMemory() );
-
-        assertTrue( runner.populatedData.containsKey( "c1" ) );
-        assertTrue( runner.populatedData.containsKey( "c2" ) );
-
-        Cheese c = (Cheese) runner.populatedData.get( "c1" );
-        assertEquals( "cheddar",
-                      c.getType() );
-        assertEquals( 42,
-                      c.getPrice() );
-
-        Cheese c2 = (Cheese) runner.populatedData.get( "c2" );
-        assertEquals( c.getType(),
-                      c2.getType() );
-
-    }
-
-    public void testPopulateNoData() throws Exception {
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       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",
-                                    ls( new FieldData( "type",
-                                                       "" ),
-                                        new FieldData( "price",
-                                                       "42" ) ),
-                                    false );
-
-        run.populateFields( fd,
-                            run.populatedData,
-                            c );
-        assertEquals( "whee",
-                      c.getType() );
-        assertEquals( 42,
-                      c.getPrice() );
-    }
-
-    public void testVerifyFacts() throws Exception {
-
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-        Cheese f1 = new Cheese( "cheddar",
-                                42 );
-        runner.populatedData.put( "f1",
-                                  f1 );
-
-        Person f2 = new Person( "michael",
-                                33 );
-        runner.populatedData.put( "f2",
-                                  f2 );
-
-        // test all true
-        VerifyFact vf = new VerifyFact();
-        vf.name = "f1";
-        vf.fieldValues = ls( new VerifyField( "type",
-                                              "cheddar",
-                                              "==" ),
-                             new VerifyField( "price",
-                                              "42",
-                                              "==" ) );
-
-        runner.verify( vf );
-        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
-            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
-        }
-
-        vf = new VerifyFact();
-        vf.name = "f2";
-        vf.fieldValues = ls( new VerifyField( "name",
-                                              "michael",
-                                              "==" ),
-                             new VerifyField( "age",
-                                              "33",
-                                              "==" ) );
-
-        runner.verify( vf );
-        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
-            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
-        }
-
-        // test one false
-        vf = new VerifyFact();
-        vf.name = "f2";
-        vf.fieldValues = ls( new VerifyField( "name",
-                                              "mark",
-                                              "==" ),
-                             new VerifyField( "age",
-                                              "33",
-                                              "==" ) );
-
-        runner.verify( vf );
-        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
-        assertTrue( ((VerifyField) vf.fieldValues.get( 1 )).successResult );
-
-        assertEquals( "michael",
-                      ((VerifyField) vf.fieldValues.get( 0 )).actualResult );
-        assertEquals( "mark",
-                      ((VerifyField) vf.fieldValues.get( 0 )).expected );
-
-        // test 2 false
-        vf = new VerifyFact();
-        vf.name = "f2";
-        vf.fieldValues = ls( new VerifyField( "name",
-                                              "mark",
-                                              "==" ),
-                             new VerifyField( "age",
-                                              "32",
-                                              "==" ) );
-
-        runner.verify( vf );
-        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
-        assertFalse( ((VerifyField) vf.fieldValues.get( 1 )).successResult );
-
-        assertEquals( "michael",
-                      ((VerifyField) vf.fieldValues.get( 0 )).actualResult );
-        assertEquals( "mark",
-                      ((VerifyField) vf.fieldValues.get( 0 )).expected );
-
-        assertEquals( "33",
-                      ((VerifyField) vf.fieldValues.get( 1 )).actualResult );
-        assertEquals( "32",
-                      ((VerifyField) vf.fieldValues.get( 1 )).expected );
-
-    }
-
-    public void testVerifyAnonymousFacts() throws Exception {
-        MockWorkingMemory wm = new MockWorkingMemory();
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    wm );
-
-        Cheese c = new Cheese();
-        c.setPrice( 42 );
-        c.setType( "stilton" );
-
-        wm.facts.add( c );
-
-        VerifyFact vf = new VerifyFact( "Cheese",
-                                        new ArrayList(),
-                                        true );
-        vf.fieldValues.add( new VerifyField( "price",
-                                             "42",
-                                             "==" ) );
-        vf.fieldValues.add( new VerifyField( "type",
-                                             "stilton",
-                                             "==" ) );
-
-        runner.verify( vf );
-
-        assertTrue( vf.wasSuccessful() );
-
-        vf = new VerifyFact( "Person",
-                             new ArrayList(),
-                             true );
-        vf.fieldValues.add( new VerifyField( "age",
-                                             "42",
-                                             "==" ) );
-
-        runner.verify( vf );
-
-        assertFalse( vf.wasSuccessful() );
-
-        vf = new VerifyFact( "Cheese",
-                             new ArrayList(),
-                             true );
-        vf.fieldValues.add( new VerifyField( "price",
-                                             "43",
-                                             "==" ) );
-        vf.fieldValues.add( new VerifyField( "type",
-                                             "stilton",
-                                             "==" ) );
-
-        runner.verify( vf );
-        assertFalse( vf.wasSuccessful() );
-        assertEquals( Boolean.FALSE,
-                      ((VerifyField) vf.fieldValues.get( 0 )).successResult );
-
-        vf = new VerifyFact( "Cell",
-                             new ArrayList(),
-                             true );
-        vf.fieldValues.add( new VerifyField( "value",
-                                             "43",
-                                             "==" ) );
-
-        runner.verify( vf );
-        assertFalse( vf.wasSuccessful() );
-        assertEquals( Boolean.FALSE,
-                      ((VerifyField) vf.fieldValues.get( 0 )).successResult );
-
-    }
-
-    public void testVerifyFactsWithOperator() throws Exception {
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-        Cheese f1 = new Cheese( "cheddar",
-                                42 );
-        runner.populatedData.put( "f1",
-                                  f1 );
-
-        // test all true
-        VerifyFact vf = new VerifyFact();
-        vf.name = "f1";
-        vf.fieldValues = ls( new VerifyField( "type",
-                                              "cheddar",
-                                              "==" ),
-                             new VerifyField( "price",
-                                              "4777",
-                                              "!=" ) );
-        runner.verify( vf );
-        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
-            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
-        }
-
-        vf = new VerifyFact();
-        vf.name = "f1";
-        vf.fieldValues = ls( new VerifyField( "type",
-                                              "cheddar",
-                                              "!=" ) );
-        runner.verify( vf );
-        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
-
-    }
-
-    public void testVerifyFactsWithExpression() throws Exception {
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-        Cheese f1 = new Cheese( "cheddar",
-                                42 );
-        runner.populatedData.put( "f1",
-                                  f1 );
-        f1.setPrice( 42 );
-        // test all true
-        VerifyFact vf = new VerifyFact();
-        vf.name = "f1";
-        vf.fieldValues = ls( new VerifyField( "price",
-                                              "= 40 + 2",
-                                              "==" ) );
-        runner.verify( vf );
-
-        assertTrue( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
-    }
-
-    public void testVerifyFactExplanation() throws Exception {
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-        Cheese f1 = new Cheese();
-        f1.setType( null );
-        runner.populatedData.put( "f1",
-                                  f1 );
-
-        VerifyFact vf = new VerifyFact();
-        vf.name = "f1";
-        vf.fieldValues.add( new VerifyField( "type",
-                                             "boo",
-                                             "!=" ) );
-
-        runner.verify( vf );
-        VerifyField vfl = (VerifyField) vf.fieldValues.get( 0 );
-        assertEquals( "[f1] field [type] was not [boo].",
-                      vfl.explanation );
-
-    }
-
-    public void testVerifyFieldAndActualIsNull() throws Exception {
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-        Cheese f1 = new Cheese();
-        f1.setType( null );
-        runner.populatedData.put( "f1",
-                                  f1 );
-
-        VerifyFact vf = new VerifyFact();
-        vf.name = "f1";
-        vf.fieldValues.add( new VerifyField( "type",
-                                             "boo",
-                                             "==" ) );
-
-        runner.verify( vf );
-        VerifyField vfl = (VerifyField) vf.fieldValues.get( 0 );
-
-        assertEquals( "[f1] field [type] was [] expected [boo].",
-                      vfl.explanation );
-        assertEquals( "boo",
-                      vfl.expected );
-        assertEquals( "",
-                      vfl.actualResult );
-
-    }
-
-    public void testDummyRunNoRules() throws Exception {
-        Scenario sc = new Scenario();
-        FactData[] facts = new FactData[]{new FactData( "Cheese",
-                                                        "c1",
-                                                        ls( new FieldData( "type",
-                                                                           "cheddar" ),
-                                                            new FieldData( "price",
-                                                                           "42" ) ),
-                                                        false )};
-
-        VerifyFact[] assertions = new VerifyFact[]{new VerifyFact( "c1",
-                                                                   ls( new VerifyField( "type",
-                                                                                        "cheddar",
-                                                                                        "==" ),
-                                                                       new VerifyField( "price",
-                                                                                        "42",
-                                                                                        "==" ) ) )};
-
-        sc.fixtures.addAll( Arrays.asList( facts ) );
-        sc.fixtures.addAll( Arrays.asList( assertions ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-
-        MockWorkingMemory wm = new MockWorkingMemory();
-        ScenarioRunner runner = new ScenarioRunner( sc,
-                                                    resolver,
-                                                    wm );
-        assertEquals( 1,
-                      wm.facts.size() );
-        assertEquals( runner.populatedData.get( "c1" ),
-                      wm.facts.get( 0 ) );
-
-        assertTrue( runner.populatedData.containsKey( "c1" ) );
-        VerifyFact vf = (VerifyFact) assertions[0];
-        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
-            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
-        }
-
-    }
-
-    public void testCountVerification() throws Exception {
-
-        Map<String, Integer> firingCounts = new HashMap<String, Integer>();
-        firingCounts.put( "foo",
-                          2 );
-        firingCounts.put( "bar",
-                          1 );
-        // and baz, we leave out
-
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-        VerifyRuleFired v = new VerifyRuleFired();
-        v.ruleName = "foo";
-        v.expectedFire = true;
-        runner.verify( v,
-                       firingCounts );
-        assertTrue( v.successResult );
-        assertEquals( 2,
-                      v.actualResult.intValue() );
-
-        v = new VerifyRuleFired();
-        v.ruleName = "foo";
-        v.expectedFire = false;
-        runner.verify( v,
-                       firingCounts );
-        assertFalse( v.successResult );
-        assertEquals( 2,
-                      v.actualResult.intValue() );
-        assertNotNull( v.explanation );
-
-        v = new VerifyRuleFired();
-        v.ruleName = "foo";
-        v.expectedCount = 2;
-
-        runner.verify( v,
-                       firingCounts );
-        assertTrue( v.successResult );
-        assertEquals( 2,
-                      v.actualResult.intValue() );
-
-    }
-
-    public void testTestingEventListener() throws Exception {
-        Scenario sc = new Scenario();
-        sc.rules.add( "foo" );
-        sc.rules.add( "bar" );
-        ExecutionTrace ext = new ExecutionTrace();
-
-        sc.fixtures.add( ext );
-
-        MockWorkingMemory wm = new MockWorkingMemory();
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 null,
-                                                 wm );
-        assertEquals( wm,
-                      run.workingMemory );
-        assertNotNull( wm.agendaEventListener );
-        assertTrue( wm.agendaEventListener instanceof TestingEventListener );
-        TestingEventListener lnr = (TestingEventListener) wm.agendaEventListener;
-        assertEquals( 2,
-                      sc.rules.size() );
-        assertTrue( sc.rules.contains( "foo" ) );
-        assertTrue( sc.rules.contains( "bar" ) );
-    }
-
-    public void testWithGlobals() throws Exception {
-        Scenario sc = new Scenario();
-        FactData[] facts = new FactData[]{new FactData( "Cheese",
-                                                        "c2",
-                                                        ls( new FieldData( "type",
-                                                                           "stilton" ) ),
-                                                        false )};
-        sc.globals.add( new FactData( "Cheese",
-                                      "c",
-                                      ls( new FieldData( "type",
-                                                         "cheddar" ) ),
-                                      false ) );
-        sc.fixtures.addAll( Arrays.asList( facts ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-
-        MockWorkingMemory wm = new MockWorkingMemory();
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 wm );
-        assertEquals( 1,
-                      wm.globals.size() );
-        assertEquals( 1,
-                      run.globalData.size() );
-        assertEquals( 1,
-                      run.populatedData.size() );
-        assertEquals( 1,
-                      wm.facts.size() );
-
-        Cheese c = (Cheese) wm.globals.get( "c" );
-        assertEquals( "cheddar",
-                      c.getType() );
-        Cheese c2 = (Cheese) wm.facts.get( 0 );
-        assertEquals( "stilton",
-                      c2.getType() );
-
-    }
-
-    /**
-     * Check if global list is empty.
-     */
-    public void testWithGlobalList() throws Exception {
-        Scenario sc = new Scenario();
-        sc.globals.add( new FactData( "List",
-                                      "testList",
-                                      new ArrayList(),
-                                      false ) );
-
-        Expectation[] assertions = new Expectation[2];
-
-        assertions[0] = new VerifyFact( "testList",
-                                        ls( new VerifyField( "empty",
-                                                             "true",
-                                                             "==" ) ) );
-        assertions[1] = new VerifyFact( "testList",
-                                        ls( new VerifyField( "size",
-                                                             "0",
-                                                             "==" ) ) );
-
-        sc.fixtures.addAll( Arrays.asList( assertions ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "java.util.List" );
-
-        MockWorkingMemory wm = new MockWorkingMemory();
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 wm );
-
-        List testList = (List) wm.globals.get( "testList" );
-        assertTrue( testList.isEmpty() );
-        assertEquals( 0,
-                      testList.size() );
-    }
-
-    @SuppressWarnings("deprecation")
-    // F**** dates in java. What a mess. Someone should die.
-    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 );
-
-        ExecutionTrace ext = new ExecutionTrace();
-        ext.scenarioSimulatedDate = new Date( "10-Jul-1974" );
-        sc.fixtures.add( ext );
-        run = new ScenarioRunner( sc,
-                                  null,
-                                  wm );
-        tm = run.workingMemory.getTimeMachine();
-
-        long expected = ext.scenarioSimulatedDate.getTime();
-        assertEquals( expected,
-                      tm.getNow().getTimeInMillis() );
-        Thread.sleep( 50 );
-        assertEquals( expected,
-                      tm.getNow().getTimeInMillis() );
-
-    }
-
-    public void testVerifyRuleFired() throws Exception {
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-
-        VerifyRuleFired vr = new VerifyRuleFired( "qqq",
-                                                  42,
-                                                  null );
-        Map<String, Integer> f = new HashMap<String, Integer>();
-        f.put( "qqq",
-               42 );
-        f.put( "qaz",
-               1 );
-
-        runner.verify( vr,
-                       f );
-        assertTrue( vr.wasSuccessful() );
-        assertEquals( 42,
-                      vr.actualResult.intValue() );
-
-        vr = new VerifyRuleFired( "qqq",
-                                  41,
-                                  null );
-        runner.verify( vr,
-                       f );
-        assertFalse( vr.wasSuccessful() );
-        assertEquals( 42,
-                      vr.actualResult.intValue() );
-
-        vr = new VerifyRuleFired( "qaz",
-                                  1,
-                                  null );
-        runner.verify( vr,
-                       f );
-        assertTrue( vr.wasSuccessful() );
-        assertEquals( 1,
-                      vr.actualResult.intValue() );
-
-        vr = new VerifyRuleFired( "XXX",
-                                  null,
-                                  false );
-        runner.verify( vr,
-                       f );
-        assertTrue( vr.wasSuccessful() );
-        assertEquals( 0,
-                      vr.actualResult.intValue() );
-
-        vr = new VerifyRuleFired( "qqq",
-                                  null,
-                                  true );
-        runner.verify( vr,
-                       f );
-        assertTrue( vr.wasSuccessful() );
-        assertEquals( 42,
-                      vr.actualResult.intValue() );
-
-        vr = new VerifyRuleFired( "qqq",
-                                  null,
-                                  false );
-        runner.verify( vr,
-                       f );
-        assertFalse( vr.wasSuccessful() );
-        assertEquals( 42,
-                      vr.actualResult.intValue() );
-
-    }
-
-    /**
-     * Do a kind of end to end test with some real rules.
-     */
-    public void testIntegrationWithSuccess() throws Exception {
-
-        Scenario sc = new Scenario();
-        FactData[] facts = new FactData[]{new FactData( "Cheese",
-                                                        "c1",
-                                                        ls( new FieldData( "type",
-                                                                           "cheddar" ),
-                                                            new FieldData( "price",
-                                                                           "42" ) ),
-                                                        false )
-
-        };
-        sc.globals.add( new FactData( "Person",
-                                      "p",
-                                      new ArrayList(),
-                                      false ) );
-        sc.fixtures.addAll( Arrays.asList( facts ) );
-
-        ExecutionTrace executionTrace = new ExecutionTrace();
-
-        sc.rules.add( "rule1" );
-        sc.rules.add( "rule2" );
-        sc.inclusive = true;
-        sc.fixtures.add( executionTrace );
-
-        Expectation[] assertions = new Expectation[5];
-
-        assertions[0] = new VerifyFact( "c1",
-                                        ls( new VerifyField( "type",
-                                                             "cheddar",
-                                                             "==" )
-
-                                        ) );
-
-        assertions[1] = new VerifyFact( "p",
-                                        ls( new VerifyField( "name",
-                                                             "rule1",
-                                                             "==" ),
-                                            new VerifyField( "status",
-                                                             "rule2",
-                                                             "==" ) )
-
-        );
-
-        assertions[2] = new VerifyRuleFired( "rule1",
-                                             1,
-                                             null );
-        assertions[3] = new VerifyRuleFired( "rule2",
-                                             1,
-                                             null );
-        assertions[4] = new VerifyRuleFired( "rule3",
-                                             0,
-                                             null );
-
-        sc.fixtures.addAll( Arrays.asList( assertions ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-        resolver.addImport( "org.drools.Person" );
-
-        WorkingMemory wm = getWorkingMemory( "test_rules2.drl" );
-
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        assertEquals( 2,
-                      executionTrace.numberOfRulesFired.intValue() );
-
-        assertSame( run.scenario,
-                    sc );
-
-        assertTrue( sc.wasSuccessful() );
-
-        Person p = (Person) run.globalData.get( "p" );
-        assertEquals( "rule1",
-                      p.getName() );
-        assertEquals( "rule2",
-                      p.getStatus() );
-        assertEquals( 0,
-                      p.getAge() );
-
-        Thread.sleep( 50 );
-
-        assertTrue( (new Date()).after( sc.lastRunResult ) );
-        assertTrue( executionTrace.executionTimeResult != null );
-
-        assertTrue( executionTrace.rulesFired.length > 0 );
-
-    }
-
-    public void testIntegrationInfiniteLoop() throws Exception {
-
-        Scenario sc = new Scenario();
-        FactData[] facts = new FactData[]{new FactData( "Cheese",
-                                                        "c1",
-                                                        ls( new FieldData( "type",
-                                                                           "cheddar" ),
-                                                            new FieldData( "price",
-                                                                           "42" ) ),
-                                                        false )
-
-        };
-        sc.globals.add( new FactData( "Person",
-                                      "p",
-                                      new ArrayList(),
-                                      false ) );
-        sc.fixtures.addAll( Arrays.asList( facts ) );
-
-        ExecutionTrace executionTrace = new ExecutionTrace();
-
-        sc.rules.add( "rule1" );
-        sc.rules.add( "rule2" );
-        sc.inclusive = true;
-        sc.fixtures.add( executionTrace );
-
-        Expectation[] assertions = new Expectation[5];
-
-        assertions[0] = new VerifyFact( "c1",
-                                        ls( new VerifyField( "type",
-                                                             "cheddar",
-                                                             "==" )
-
-                                        ) );
-
-        assertions[1] = new VerifyFact( "p",
-                                        ls( new VerifyField( "name",
-                                                             "rule1",
-                                                             "==" ),
-                                            new VerifyField( "status",
-                                                             "rule2",
-                                                             "==" ) )
-
-        );
-
-        assertions[2] = new VerifyRuleFired( "rule1",
-                                             1,
-                                             null );
-        assertions[3] = new VerifyRuleFired( "rule2",
-                                             1,
-                                             null );
-        assertions[4] = new VerifyRuleFired( "rule3",
-                                             0,
-                                             null );
-
-        sc.fixtures.addAll( Arrays.asList( assertions ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-        resolver.addImport( "org.drools.Person" );
-
-        WorkingMemory wm = getWorkingMemory( "test_rules_infinite_loop.drl" );
-
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        assertEquals( sc.maxRuleFirings,
-                      executionTrace.numberOfRulesFired.intValue() );
-
-    }
-
-    public void testIntegrationWithDeclaredTypes() throws Exception {
-        Scenario sc = new Scenario();
-        FactData[] facts = new FactData[]{new FactData( "Coolness",
-                                                        "c",
-                                                        ls( new FieldData( "num",
-                                                                           "42" ),
-                                                            new FieldData( "name",
-                                                                           "mic" ) ),
-                                                        false )
-
-        };
-        sc.fixtures.addAll( Arrays.asList( facts ) );
-
-        ExecutionTrace executionTrace = new ExecutionTrace();
-
-        sc.rules.add( "rule1" );
-        sc.inclusive = true;
-        sc.fixtures.add( executionTrace );
-
-        Expectation[] assertions = new Expectation[2];
-
-        assertions[0] = new VerifyFact( "c",
-                                        ls( new VerifyField( "num",
-                                                             "42",
-                                                             "==" )
-
-                                        ) );
-
-        assertions[1] = new VerifyRuleFired( "rule1",
-                                             1,
-                                             null );
-
-        sc.fixtures.addAll( Arrays.asList( assertions ) );
-
-        WorkingMemory wm = getWorkingMemory( "test_rules3.drl" );
-        ClassLoader cl = ((InternalRuleBase) wm.getRuleBase()).getRootClassLoader();
-
-        HashSet<String> imports = new HashSet<String>();
-        imports.add( "foo.bar.*" );
-
-        TypeResolver resolver = new ClassTypeResolver( imports,
-                                                       cl );
-
-        Class cls = cl.loadClass( "foo.bar.Coolness" );
-        assertNotNull( cls );
-
-        ClassLoader cl_ = Thread.currentThread().getContextClassLoader();
-        Thread.currentThread().setContextClassLoader( cl );
-
-        //resolver will need to have generated beans in it - possibly using a composite classloader from the package,
-        //including whatever CL has the generated beans...
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        assertEquals( 1,
-                      executionTrace.numberOfRulesFired.intValue() );
-
-        assertSame( run.scenario,
-                    sc );
-
-        assertTrue( sc.wasSuccessful() );
-
-        Thread.currentThread().setContextClassLoader( cl_ );
-
-    }
-
-    public void testRuleFlowGroupActivation() throws Exception {
-        Scenario sc = new Scenario();
-        Fixture[] given = new Fixture[]{new FactData( "Coolness",
-                                                      "c",
-                                                      ls( new FieldData( "num",
-                                                                         "42" ),
-                                                          new FieldData( "name",
-                                                                         "mic" ) ),
-                                                      false )
-
-        };
-        sc.fixtures.addAll( Arrays.asList( given ) );
-
-        ExecutionTrace executionTrace = new ExecutionTrace();
-
-        sc.rules.add( "rule1" );
-        sc.inclusive = true;
-        sc.fixtures.add( executionTrace );
-
-        Expectation[] assertions = new Expectation[2];
-
-        assertions[0] = new VerifyFact( "c",
-                                        ls( new VerifyField( "num",
-                                                             "42",
-                                                             "==" ) ) );
-
-        assertions[1] = new VerifyRuleFired( "rule1",
-                                             1,
-                                             null );
-
-        sc.fixtures.addAll( Arrays.asList( assertions ) );
-
-        WorkingMemory wm = getWorkingMemory( "rule_flow_actication.drl" );
-        ClassLoader cl = ((InternalRuleBase) wm.getRuleBase()).getRootClassLoader();
-
-        HashSet<String> imports = new HashSet<String>();
-        imports.add( "foo.bar.*" );
-
-        TypeResolver resolver = new ClassTypeResolver( imports,
-                                                       cl );
-
-        Class cls = cl.loadClass( "foo.bar.Coolness" );
-        assertNotNull( cls );
-
-        ClassLoader cl_ = Thread.currentThread().getContextClassLoader();
-        Thread.currentThread().setContextClassLoader( cl );
-
-        //resolver will need to have generated beans in it - possibly using a composite classloader from the package,
-        //including whatever CL has the generated beans...
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        assertEquals( 0,
-                      executionTrace.numberOfRulesFired.intValue() );
-
-        assertSame( run.scenario,
-                    sc );
-
-        assertFalse( sc.wasSuccessful() );
-
-
-        // Activate rule flow
-        sc.fixtures.clear();
-        given = new Fixture[]{new FactData( "Coolness",
-                                            "c",
-                                            ls( new FieldData( "num",
-                                                               "42" ),
-                                                new FieldData( "name",
-                                                               "mic" ) ),
-                                            false ), new ActivateRuleFlowGroup( "asdf" )
-
-        };
-        wm.clearAgenda();
-        sc.fixtures.addAll( Arrays.asList( given ) );
-        sc.fixtures.add( executionTrace );
-        run = new ScenarioRunner( sc,
-                                  resolver,
-                                  (InternalWorkingMemory) wm );
-
-        assertEquals( 1,
-                      executionTrace.numberOfRulesFired.intValue() );
-
-        assertSame( run.scenario,
-                    sc );
-
-        assertTrue( sc.wasSuccessful() );
-        
-        Thread.currentThread().setContextClassLoader( cl_ );
-    }
-
-    public void testIntgerationStateful() throws Exception {
-        Scenario sc = new Scenario();
-        sc.fixtures.add( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "price",
-                                                          "1" ) ),
-                                       false ) );
-        ExecutionTrace ex = new ExecutionTrace();
-        sc.fixtures.add( ex );
-        sc.fixtures.add( new FactData( "Cheese",
-                                       "c2",
-                                       ls( new FieldData( "price",
-                                                          "2" ) ),
-                                       false ) );
-        sc.fixtures.add( new VerifyFact( "c1",
-                                         ls( new VerifyField( "type",
-                                                              "rule1",
-                                                              "==" ) ) ) );
-        ex = new ExecutionTrace();
-        sc.fixtures.add( ex );
-        sc.fixtures.add( new VerifyFact( "c1",
-                                         ls( new VerifyField( "type",
-                                                              "rule2",
-                                                              "==" ) ) ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-
-        WorkingMemory wm = getWorkingMemory( "test_stateful.drl" );
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        Cheese c1 = (Cheese) run.populatedData.get( "c1" );
-        Cheese c2 = (Cheese) run.populatedData.get( "c2" );
-
-        assertEquals( "rule2",
-                      c1.getType() );
-        assertEquals( "rule2",
-                      c2.getType() );
-
-        assertTrue( sc.wasSuccessful() );
-
-    }
-
-    public void testIntegrationWithModify() throws Exception {
-        Scenario sc = new Scenario();
-        sc.fixtures.add( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "price",
-                                                          "1" ) ),
-                                       false ) );
-
-        sc.fixtures.add( new ExecutionTrace() );
-
-        sc.fixtures.add( new VerifyFact( "c1",
-                                         ls( new VerifyField( "type",
-                                                              "rule1",
-                                                              "==" ) ) ) );
-
-        sc.fixtures.add( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "price",
-                                                          "42" ) ),
-                                       true ) );
-        sc.fixtures.add( new ExecutionTrace() );
-
-        sc.fixtures.add( new VerifyFact( "c1",
-                                         ls( new VerifyField( "type",
-                                                              "rule3",
-                                                              "==" ) ) ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-
-        WorkingMemory wm = getWorkingMemory( "test_stateful.drl" );
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        Cheese c1 = (Cheese) run.populatedData.get( "c1" );
-
-        assertEquals( "rule3",
-                      c1.getType() );
-
-        assertTrue( sc.wasSuccessful() );
-    }
-
-    public void testIntegrationWithRetract() throws Exception {
-        Scenario sc = new Scenario();
-        sc.fixtures.add( new FactData( "Cheese",
-                                       "c1",
-                                       ls( new FieldData( "price",
-                                                          "46" ),
-                                           new FieldData( "type",
-                                                          "XXX" ) ),
-                                       false ) );
-        sc.fixtures.add( new FactData( "Cheese",
-                                       "c2",
-                                       ls( new FieldData( "price",
-                                                          "42" ) ),
-                                       false ) );
-        sc.fixtures.add( new ExecutionTrace() );
-
-        sc.fixtures.add( new VerifyFact( "c1",
-                                         ls( new VerifyField( "type",
-                                                              "XXX",
-                                                              "==" ) ) ) );
-
-        sc.fixtures.add( new RetractFact( "c2" ) );
-        sc.fixtures.add( new ExecutionTrace() );
-
-        sc.fixtures.add( new VerifyFact( "c1",
-                                         ls( new VerifyField( "type",
-                                                              "rule4",
-                                                              "==" ) ) ) );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-
-        WorkingMemory wm = getWorkingMemory( "test_stateful.drl" );
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        Cheese c1 = (Cheese) run.populatedData.get( "c1" );
-
-        assertEquals( "rule4",
-                      c1.getType() );
-        assertFalse( run.populatedData.containsKey( "c2" ) );
-
-        assertTrue( sc.wasSuccessful() );
-    }
-
-    public void testIntegrationWithFailure() throws Exception {
-        Scenario sc = new Scenario();
-        Expectation[] assertions = populateScenarioForFailure( sc );
-
-        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
-                                                       Thread.currentThread().getContextClassLoader() );
-        resolver.addImport( "org.drools.Cheese" );
-        resolver.addImport( "org.drools.Person" );
-
-        WorkingMemory wm = getWorkingMemory( "test_rules2.drl" );
-
-        ScenarioRunner run = new ScenarioRunner( sc,
-                                                 resolver,
-                                                 (InternalWorkingMemory) wm );
-
-        assertSame( run.scenario,
-                    sc );
-
-        assertFalse( sc.wasSuccessful() );
-
-        VerifyFact vf = (VerifyFact) assertions[1];
-        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
-        assertEquals( "XXX",
-                      ((VerifyField) vf.fieldValues.get( 0 )).expected );
-        assertEquals( "rule1",
-                      ((VerifyField) vf.fieldValues.get( 0 )).actualResult );
-        assertNotNull( ((VerifyField) vf.fieldValues.get( 0 )).explanation );
-
-        VerifyRuleFired vr = (VerifyRuleFired) assertions[4];
-        assertFalse( vr.successResult );
-
-        assertEquals( 2,
-                      vr.expectedCount.intValue() );
-        assertEquals( 0,
-                      vr.actualResult.intValue() );
-
-    }
-
-    public void testRunAsString() throws Exception {
-        Scenario sc = new Scenario();
-        populateScenarioForFailure( sc );
-        String xml = ScenarioXMLPersistence.getInstance().marshal( sc );
-        WorkingMemory wm = getWorkingMemory( "test_rules2.drl" );
-        ScenarioRunner runner = new ScenarioRunner( xml,
-                                                    wm.getRuleBase() );
-        assertFalse( runner.wasSuccess() );
-
-        String failures = runner.getReport();
-        assertFalse( "".equals( failures ) );
-        System.err.println( failures );
-    }
-
-    private Expectation[] populateScenarioForFailure(Scenario sc) {
-        FactData[] facts = new FactData[]{new FactData( "Cheese",
-                                                        "c1",
-                                                        ls( new FieldData( "type",
-                                                                           "cheddar" ),
-                                                            new FieldData( "price",
-                                                                           "42" ) ),
-                                                        false )
-
-        };
-        sc.fixtures.addAll( Arrays.asList( facts ) );
-        sc.globals.add( new FactData( "Person",
-                                      "p",
-                                      new ArrayList(),
-                                      false ) );
-
-        ExecutionTrace executionTrace = new ExecutionTrace();
-        sc.rules.add( "rule1" );
-        sc.rules.add( "rule2" );
-        sc.inclusive = true;
-        sc.fixtures.add( executionTrace );
-
-        Expectation[] assertions = new Expectation[5];
-
-        assertions[0] = new VerifyFact( "c1",
-                                        ls( new VerifyField( "type",
-                                                             "cheddar",
-                                                             "==" )
-
-                                        ) );
-
-        assertions[1] = new VerifyFact( "p",
-                                        ls( new VerifyField( "name",
-                                                             "XXX",
-                                                             "==" ),
-                                            new VerifyField( "status",
-                                                             "rule2",
-                                                             "==" )
-
-                                        ) );
-
-        assertions[2] = new VerifyRuleFired( "rule1",
-                                             1,
-                                             null );
-        assertions[3] = new VerifyRuleFired( "rule2",
-                                             1,
-                                             null );
-        assertions[4] = new VerifyRuleFired( "rule3",
-                                             2,
-                                             null );
-
-        sc.fixtures.addAll( Arrays.asList( assertions ) );
-        return assertions;
-    }
-
-    private <T> List<T> ls(T... objects) {
-        return Arrays.asList( objects );
-    }
-    public void testCollectionFieldInFacts() throws Exception {
-
-        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
-                                                    null,
-                                                    new MockWorkingMemory() );
-        Cheesery listChesse = new Cheesery();
-        Cheese f1 = new Cheese( "cheddar",
-                                42 );
-        Cheese f2 = new Cheese( "Camembert",
-                                43 );
-        Cheese f3 = new Cheese( "Emmental",
-                                45 );
-        runner.populatedData.put( "f1",
-                                  f1 );
-        runner.populatedData.put( "f2",
-                                  f2 );
-        runner.populatedData.put( "f3",
-                                  f3 );
-        FactData fd1 = new FactData( "Cheese",
-                                    "f1",
-                                    ls( new FieldData( "type",
-                                                       "" ),
-                                        new FieldData( "price",
-                                                       "42" ) ),
-                                    false );
-         FactData fd2 = new FactData( "Cheese",
-                                    "f2",
-                                    ls( new FieldData( "type",
-                                                       "" ),
-                                        new FieldData( "price",
-                                                       "43" ) ),
-                                    false );
-         FactData fd3 = new FactData( "Cheese",
-                                    "f3",
-                                    ls( new FieldData( "type",
-                                                       "" ),
-                                        new FieldData( "price",
-                                                       "45" ) ),
-                                    false );
-         runner.populatedData.put("ACheesery",listChesse);
-         FieldData field = new FieldData();
-         field.name="cheeses";
-         field.collectionType="Cheese";
-         field.nature = FieldData.TYPE_COLLECTION;
-          field.value="=[f1,f2,f3]";
-         List<FieldData> lstField = new ArrayList<FieldData>();
-         lstField.add(field);
-          FactData lst = new FactData( "Cheesery",
-                                    "listChesse",
-                                    lstField,
-                                    false );
-        runner.populateFields(lst,runner.populatedData,listChesse);
-        assertTrue(listChesse.getCheeses().size()==3);
-        assertTrue(listChesse.getCheeses().contains(f1));
-        assertTrue(listChesse.getCheeses().contains(f3));
-        assertTrue(listChesse.getCheeses().contains(f3));
-  
-    }
-}

Deleted: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioTest.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioTest.java	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -1,291 +0,0 @@
-package org.drools.testframework;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.drools.guvnor.client.modeldriven.testing.ExecutionTrace;
-import org.drools.guvnor.client.modeldriven.testing.FactData;
-import org.drools.guvnor.client.modeldriven.testing.RetractFact;
-import org.drools.guvnor.client.modeldriven.testing.Scenario;
-import org.drools.guvnor.client.modeldriven.testing.VerifyFact;
-import org.drools.guvnor.client.modeldriven.testing.VerifyField;
-import org.drools.guvnor.client.modeldriven.testing.VerifyRuleFired;
-
-public class ScenarioTest extends TestCase {
-
-	public void testInsertBetween() {
-		Scenario sc = new Scenario();
-		VerifyRuleFired vf = new VerifyRuleFired();
-		sc.insertBetween(null, vf);
-		assertEquals(1, sc.fixtures.size());
-		assertEquals(vf, sc.fixtures.get(0));
-
-		VerifyRuleFired vf2 = new VerifyRuleFired();
-		sc.fixtures.add(vf2);
-
-		VerifyRuleFired vf3 = new VerifyRuleFired();
-		sc.insertBetween(vf, vf3);
-		assertEquals(3, sc.fixtures.size());
-		assertEquals(vf, sc.fixtures.get(0));
-		assertEquals(vf2, sc.fixtures.get(1));
-		assertEquals(vf3, sc.fixtures.get(2));
-
-		VerifyRuleFired vf4 = new VerifyRuleFired();
-		sc.insertBetween(vf2, vf4);
-		assertEquals(4, sc.fixtures.size());
-		assertEquals(3, sc.fixtures.indexOf(vf4));
-		assertEquals(2, sc.fixtures.indexOf(vf3));
-		//assertEquals(vf4, sc.fixtures.get(3));
-		assertEquals(1, sc.fixtures.indexOf(vf2));
-		//assertEquals(vf2, sc.fixtures.get(2));
-		assertEquals(0, sc.fixtures.indexOf(vf));
-
-
-		VerifyRuleFired vf5 = new VerifyRuleFired();
-		sc.insertBetween(null, vf5);
-		assertEquals(5, sc.fixtures.size());
-		assertEquals(4, sc.fixtures.indexOf(vf5));
-
-
-		sc = new Scenario();
-
-		sc.fixtures.add(vf);
-		ExecutionTrace ex = new ExecutionTrace();
-		sc.fixtures.add(ex);
-		sc.insertBetween(null, vf2);
-		assertEquals(0, sc.fixtures.indexOf(vf));
-		assertEquals(1, sc.fixtures.indexOf(vf2));
-		assertEquals(2, sc.fixtures.indexOf(ex));
-		assertEquals(3, sc.fixtures.size());
-
-		sc.insertBetween(ex, vf3);
-		assertEquals(4, sc.fixtures.size());
-		assertEquals(0, sc.fixtures.indexOf(vf));
-		assertEquals(1, sc.fixtures.indexOf(vf2));
-		assertEquals(2, sc.fixtures.indexOf(ex));
-		assertEquals(3, sc.fixtures.indexOf(vf3));
-
-
-		ExecutionTrace ex2 = new ExecutionTrace();
-		sc.fixtures.add(ex2);
-		sc.insertBetween(ex, vf4);
-		assertEquals(6, sc.fixtures.size());
-		assertEquals(0, sc.fixtures.indexOf(vf));
-		assertEquals(1, sc.fixtures.indexOf(vf2));
-		assertEquals(2, sc.fixtures.indexOf(ex));
-		assertEquals(3, sc.fixtures.indexOf(vf3));
-		assertEquals(4, sc.fixtures.indexOf(vf4));
-		assertEquals(5, sc.fixtures.indexOf(ex2));
-
-
-		sc.insertBetween(ex2, vf5);
-		assertEquals(7, sc.fixtures.size());
-		assertEquals(0, sc.fixtures.indexOf(vf));
-		assertEquals(1, sc.fixtures.indexOf(vf2));
-		assertEquals(2, sc.fixtures.indexOf(ex));
-		assertEquals(3, sc.fixtures.indexOf(vf3));
-		assertEquals(4, sc.fixtures.indexOf(vf4));
-		assertEquals(5, sc.fixtures.indexOf(ex2));
-		assertEquals(6, sc.fixtures.indexOf(vf5));
-
-
-		sc = new Scenario();
-		sc.fixtures.add(ex);
-
-		sc.insertBetween(null, vf);
-		assertEquals(2, sc.fixtures.size());
-		assertEquals(0, sc.fixtures.indexOf(vf));
-		assertEquals(1, sc.fixtures.indexOf(ex));
-
-
-
-
-
-	}
-
-
-
-	public void testExecutionTrace() {
-        Scenario sc = new Scenario();
-
-        sc.globals.add(new FactData("A", "A", new ArrayList(), false));
-        sc.fixtures.add(new FactData("B", "B", new ArrayList(), true));
-        sc.fixtures.add(new FactData("C", "C", new ArrayList(), true));
-        ExecutionTrace ex1 = new ExecutionTrace();
-        sc.fixtures.add(ex1);
-        sc.fixtures.add(new VerifyFact());
-        sc.fixtures.add(new RetractFact());
-        sc.fixtures.add(new FactData("D", "D", new ArrayList(), false));
-        sc.fixtures.add(new FactData("E", "E", new ArrayList(), false));
-        ExecutionTrace ex2 = new ExecutionTrace();
-        sc.fixtures.add(ex2);
-        sc.fixtures.add(new VerifyFact());
-        sc.fixtures.add(new FactData("F", "F", new ArrayList(), false));
-        ExecutionTrace ex3 = new ExecutionTrace();
-        sc.fixtures.add(ex3);
-
-        assertEquals( 11,
-                      sc.fixtures.size() );
-
-        sc.removeExecutionTrace( ex2 );
-
-        assertEquals( 6,
-                      sc.fixtures.size() );
-        assertTrue( sc.isFactNameExisting( "A" ) );
-        assertTrue( sc.isFactNameExisting( "B" ) );
-        assertTrue( sc.isFactNameExisting( "C" ) );
-        assertFalse( sc.isFactNameExisting( "D" ) );
-        assertFalse( sc.isFactNameExisting( "E" ) );
-        assertTrue( sc.isFactNameExisting( "F" ) );
-	}
-
-	public void testRemoveFixture() {
-		Scenario sc = new Scenario();
-
-		VerifyRuleFired vf1 = new VerifyRuleFired();
-		VerifyRuleFired vf2 = new VerifyRuleFired();
-		VerifyRuleFired vf3 = new VerifyRuleFired();
-
-		FactData fd = new FactData();
-
-		sc.fixtures.add(vf1);
-		sc.fixtures.add(vf2);
-		sc.fixtures.add(vf3);
-		sc.globals.add(fd);
-
-
-		sc.removeFixture(vf2);
-		assertEquals(2, sc.fixtures.size());
-		assertEquals(vf1, sc.fixtures.get(0));
-		assertEquals(vf3, sc.fixtures.get(1));
-		assertEquals(1, sc.globals.size());
-
-		sc.removeFixture(fd);
-		assertEquals(0, sc.globals.size());
-		assertEquals(2, sc.fixtures.size());
-
-
-
-
-	}
-
-	public void testMapFactTypes() {
-		Scenario sc = new Scenario();
-		sc.fixtures.add(new FactData("X", "q", null, false));
-		sc.globals.add(new FactData("Q", "x", null, false));
-
-		Map r = sc.getVariableTypes();
-		assertEquals(2, r.size());
-
-		assertEquals("X", r.get("q"));
-		assertEquals("Q", r.get("x"));
-
-	}
-
-	public void testVariablesInScope() {
-		Scenario sc = new Scenario();
-		sc.globals.add(new FactData("X", "x", new ArrayList(), false));
-
-		sc.fixtures.add(new FactData("Q", "q", new ArrayList(), true));
-		sc.fixtures.add(new FactData("Z", "z", new ArrayList(), false));
-		ExecutionTrace ex1 = new ExecutionTrace();
-
-		sc.fixtures.add(ex1);
-		sc.fixtures.add(new RetractFact("z"));
-		sc.fixtures.add(new FactData("Y", "y", new ArrayList(), false));
-
-		ExecutionTrace ex2 = new ExecutionTrace();
-		sc.fixtures.add(ex2);
-
-		List l = sc.getFactNamesInScope(ex1, true);
-
-		assertEquals(3, l.size());
-		assertEquals("q", l.get(0));
-		assertEquals("z", l.get(1));
-		assertEquals("x", l.get(2));
-
-
-		l = sc.getFactNamesInScope(ex1, false);
-		assertEquals(2, l.size());
-		assertFalse(l.contains(sc.globals.get(0)));
-
-		l = sc.getFactNamesInScope(ex2, true);
-		assertEquals(3, l.size());
-		assertEquals("q", l.get(0));
-		assertEquals("y", l.get(1));
-		assertEquals("x", l.get(2));
-
-		l= sc.getFactNamesInScope(null, true);
-		assertEquals(0, l.size());
-
-	}
-
-	public void testAllowRemoveFact() {
-		Scenario sc = new Scenario();
-
-		FactData fd1 = new FactData("X", "x", new ArrayList(), false);
-		sc.fixtures.add(fd1);
-		FactData fd2 = new FactData("Q", "q", new ArrayList(), false);
-		sc.fixtures.add(fd2);
-		FactData fd3 = new FactData("Z", "z", new ArrayList(), false);
-		sc.fixtures.add(fd3);
-		ExecutionTrace ex1 = new ExecutionTrace();
-		FactData fd4 = new FactData("I", "i", new ArrayList(), false);
-		sc.globals.add(fd4);
-
-		sc.fixtures.add(ex1);
-		sc.fixtures.add(new RetractFact("z"));
-		sc.fixtures.add(new FactData("Z", "z", new ArrayList(), true));
-		sc.fixtures.add(new VerifyFact("q", new ArrayList()));
-
-		assertFalse(sc.isFactNameUsed(fd1));
-		assertTrue(sc.isFactNameUsed(fd2));
-		assertTrue(sc.isFactNameUsed(fd3));
-		assertFalse(sc.isFactNameUsed(fd4));
-	}
-
-	public void testIsFactNameUsed() {
-		Scenario sc = new Scenario();
-		sc.globals.add(new FactData("X", "x", null, false));
-		sc.fixtures.add(new FactData("Q", "q", null, false));
-		sc.fixtures.add(new ExecutionTrace());
-
-		assertTrue(sc.isFactNameExisting("x"));
-		assertTrue(sc.isFactNameExisting("q"));
-		assertFalse(sc.isFactNameExisting("w"));
-
-
-		sc = new Scenario();
-		assertFalse(sc.isFactNameExisting("w"));
-	}
-
-	public void testCountSuccessFailures() {
-		Scenario sc = new Scenario();
-		sc.fixtures.add(new FactData());
-		sc.fixtures.add(new ExecutionTrace());
-		VerifyRuleFired vr = new VerifyRuleFired();
-		vr.successResult = false;
-		sc.fixtures.add(vr);
-
-		VerifyField vf = new VerifyField();
-		vf.successResult = true;
-		VerifyField vf2 = new VerifyField();
-		vf2.successResult = false;
-		VerifyFact vfact = new VerifyFact();
-		vfact.fieldValues.add(vf);
-		vfact.fieldValues.add(vf2);
-		sc.fixtures.add(vfact);
-
-
-		int[] totals = sc.countFailuresTotal();
-		assertEquals(2, totals[0]);
-		assertEquals(3, totals[1]);
-
-
-
-	}
-
-}

Deleted: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -1,100 +0,0 @@
-package org.drools.testframework;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
-import org.drools.Cheese;
-import org.drools.StatefulSession;
-
-public class TestingEventListenerTest extends RuleUnit {
-
-	public void testInclusive() throws Exception {
-		HashSet<String> set = new HashSet<String>();
-		set.add("rule1");
-		set.add("rule2");
-
-		StatefulSession session  = getWorkingMemory("test_rules.drl");
-
-        TestingEventListener ls = new TestingEventListener();
-        //TestingEventListener.stubOutRules(set, session.getRuleBase(), true);
-
-        session.addEventListener(ls);
-
-        session.insert(new Cheese());
-        session.fireAllRules(ls.getAgendaFilter(set, true));
-
-        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
-        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
-
-        //assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule3"));
-        assertFalse(ls.firingCounts.containsKey("rule3"));
-        assertFalse(ls.firingCounts.containsKey("rule4"));
-
-        session.insert(new Cheese());
-        session.fireAllRules(ls.getAgendaFilter(set, true));
-        assertEquals(new Integer(2), (Integer) ls.firingCounts.get("rule1"));
-        assertEquals(new Integer(2), (Integer) ls.firingCounts.get("rule2"));
-        assertFalse(ls.firingCounts.containsKey("rule3"));
-        assertEquals(4, ls.totalFires);
-
-	}
-
-
-	public void testExclusive() throws Exception {
-		HashSet<String> set = new HashSet<String>();
-		set.add("rule3");
-
-
-		StatefulSession session  = getWorkingMemory("test_rules.drl");
-
-        TestingEventListener ls = new TestingEventListener();
-        //TestingEventListener.stubOutRules(set, session.getRuleBase(), false);
-
-        session.addEventListener(ls);
-
-        session.insert(new Cheese());
-        session.fireAllRules(ls.getAgendaFilter(set, false));
-
-        //assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
-        //assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
-
-        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
-        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
-        assertFalse(ls.firingCounts.containsKey("rule3"));
-        assertFalse(ls.firingCounts.containsKey("rule4"));
-
-
-	}
-
-	public void testNoFilter() throws Exception {
-		HashSet<String> set = new HashSet<String>();
-
-
-		StatefulSession session  = getWorkingMemory("test_rules.drl");
-
-        TestingEventListener ls = new TestingEventListener();
-        //TestingEventListener.stubOutRules(set, session.getRuleBase(), false);
-
-        session.addEventListener(ls);
-
-        session.insert(new Cheese());
-
-        List<String> list = new ArrayList<String>();
-        session.setGlobal("list", list);
-        session.fireAllRules(ls.getAgendaFilter(set, false));
-
-        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
-        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
-        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule3"));
-
-        String[] summary = ls.getRulesFiredSummary();
-        assertEquals(3, summary.length);
-        assertNotNull(summary[0]);
-        assertFalse(summary[1].equals(""));
-
-        assertEquals(1, list.size());
-	}
-
-
-}

Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/pom.xml
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/pom.xml	2010-04-30 18:51:33 UTC (rev 32692)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/pom.xml	2010-04-30 21:22:02 UTC (rev 32693)
@@ -12,6 +12,15 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+    </dependency>
+    <dependency>
+       <groupId>com.thoughtworks.xstream</groupId>
+       <artifactId>xstream</artifactId>
+       <optional>true</optional>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.7</version>

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/DropDownData.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/DropDownData.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/DropDownData.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/DropDownData.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,48 @@
+package org.drools.guvnor.client.modeldriven;
+
+/**
+ * Used to drive drop downs.
+ * @author Michael Neale
+ *
+ */
+public class DropDownData {
+
+	/**
+	 * If this is non null, just show these items.
+	 */
+	public String[] fixedList = null;
+
+	/**
+	 * this would be something that takes the name/value pairs and interpolates them into an MVEL expression
+	 * that resolves to a list.
+	 */
+	public String queryExpression = null;
+
+	/**
+	 * Something like as list of:
+	 * sex=M, name=Michael etc....
+	 */
+	public String[] valuePairs = null;
+
+	public static DropDownData create(String[] list) {
+		if (list == null) return null;
+		return new DropDownData(list);
+	}
+
+	public static DropDownData create(String queryExpression, String[] valuePairs) {
+		if (queryExpression == null) return null;
+		return new DropDownData(queryExpression, valuePairs);
+	}
+
+	private DropDownData(String[] list) {
+		this.fixedList = list;
+	}
+
+	private DropDownData(String queryExpression, String[] valuePairs) {
+		this.queryExpression = queryExpression;
+		this.valuePairs = valuePairs;
+	}
+
+
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FactTypeFilter.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/FactTypeFilter.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FactTypeFilter.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FactTypeFilter.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,19 @@
+package org.drools.guvnor.client.modeldriven;
+
+import java.io.Serializable;
+
+import org.drools.guvnor.client.modeldriven.brl.PortableObject;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public interface FactTypeFilter extends PortableObject {
+
+    /**
+     * Indicates if a fact should be filtered or not.
+     * @param originalFact the fact.
+     * @return if a fact should be filtered or not.
+     */
+    public boolean filter(String originalFact);
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FieldAccessorsAndMutators.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/FieldAccessorsAndMutators.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FieldAccessorsAndMutators.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/FieldAccessorsAndMutators.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,18 @@
+package org.drools.guvnor.client.modeldriven;
+
+public enum FieldAccessorsAndMutators {
+    MUTATOR, ACCESSOR, BOTH;
+
+    public static boolean compare(FieldAccessorsAndMutators field1,
+                                  FieldAccessorsAndMutators field2) {
+
+        if ( field1 == field2 ) {
+            return true;
+        } else if ( field1 == BOTH || field2 == BOTH ) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,125 @@
+package org.drools.guvnor.client.modeldriven;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.guvnor.client.modeldriven.brl.PortableObject;
+
+/**
+ * 
+ * @author Toni Rikkola
+ * 
+ */
+public class MethodInfo implements PortableObject {
+
+	private String name;
+	private List<String> params;
+	private String returnClassType;
+	private String parametricReturnType;
+	private String genericType;
+
+	public MethodInfo() {
+	}
+
+	/**
+	 * 
+	 * @param name
+	 *            method name
+	 * @param params
+	 *            method params list
+	 * @param returnType
+	 *            method's return type
+	 */
+	public MethodInfo(String name, List<String> params, Class<?> returnType, String parametricReturnType, String genericType) {
+		this.name = name;
+		this.params = params;
+		this.returnClassType = returnType.getName();
+		this.parametricReturnType = parametricReturnType;
+		this.genericType = genericType;
+	}
+
+	public String getNameWithParameters() {
+		if (params.isEmpty()) {
+			return name + "()";
+		}
+		StringBuilder p = new StringBuilder();
+		
+		for (Iterator<String> iterator = params.iterator(); iterator.hasNext();) {
+			p.append(", ").append(iterator.next());
+		}
+
+		return name + "(" + p.substring(2)  + ")";
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public List<String> getParams() {
+		return params;
+	}
+
+	public String getReturnClassType() {
+		return returnClassType;
+	}
+
+	public String getParametricReturnType() {
+		return parametricReturnType;
+	}
+
+	public String getGenericType() {
+		return genericType;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		result = prime
+				* result
+				+ ((parametricReturnType == null) ? 0 : parametricReturnType
+						.hashCode());
+		result = prime * result + ((params == null) ? 0 : params.hashCode());
+		result = prime * result
+				+ ((returnClassType == null) ? 0 : returnClassType.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		MethodInfo other = (MethodInfo) obj;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		if (parametricReturnType == null) {
+			if (other.parametricReturnType != null)
+				return false;
+		} else if (!parametricReturnType.equals(other.parametricReturnType))
+			return false;
+		if (params == null) {
+			if (other.params != null)
+				return false;
+		} else if (!params.equals(other.params))
+			return false;
+		if (returnClassType == null) {
+			if (other.returnClassType != null)
+				return false;
+		} else if (!returnClassType.equals(other.returnClassType))
+			return false;
+		return true;
+	}
+
+	@Override
+	public String toString() {
+		return getNameWithParameters();
+	}
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/ModelField.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/ModelField.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/ModelField.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/ModelField.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,68 @@
+package org.drools.guvnor.client.modeldriven;
+
+import org.drools.guvnor.client.modeldriven.brl.PortableObject;
+
+public class ModelField implements PortableObject {
+
+    public static enum FIELD_CLASS_TYPE implements PortableObject{
+        REGULAR_CLASS,
+        TYPE_DECLARATION_CLASS
+    }
+
+    private String name;
+    private String className;
+    /**
+     * parametrized type of clazz
+     */
+    private String type;
+
+    private FIELD_CLASS_TYPE classType;
+
+    public ModelField() {
+    }
+
+    
+    /**
+     * Creates a new ModelField instance
+     * @param name field's name
+     * @param clazz the class of the field. For fields defined as a type declaration
+     * @param fieldClassType tells if this is a field for a regular POJO class or for a object type declaration
+     * this clazz should be null.
+     * @param type the type of the clazz.
+     */
+    public ModelField(String name,
+                      String clazz,
+                      FIELD_CLASS_TYPE fieldClassType,
+                      String type) {
+        this.name = name;
+        this.classType = fieldClassType;
+        this.className = clazz;
+        this.type = type;
+    }
+
+    public String getClassName() {
+        return this.className;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public FIELD_CLASS_TYPE getClassType() {
+        return classType;
+    }
+
+
+	@Override
+	public String toString() {
+		return "ModelField [classType=" + classType + ", name=" + name
+				+ ", type=" + type + ", className=" + className + "]";
+	}
+
+    
+    
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,830 @@
+package org.drools.guvnor.client.modeldriven;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.guvnor.client.modeldriven.ModelField.FIELD_CLASS_TYPE;
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+import org.drools.guvnor.client.modeldriven.brl.DSLSentence;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.PortableObject;
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+
+/**
+ * An suggestion completion processor. This should be usable in both GWT/Web and
+ * the IDE. The data for this can be loaded into this from simple string lists.
+ * 
+ * @author Michael Neale
+ */
+public class SuggestionCompletionEngine implements PortableObject {
+
+    /** These are the explicit types supported */
+    public static final String            TYPE_COLLECTION        = "Collection";
+    public static final String            TYPE_COMPARABLE        = "Comparable";
+    public static final String            TYPE_STRING            = "String";
+    public static final String            TYPE_NUMERIC           = "Numeric";
+    public static final String            TYPE_BOOLEAN           = "Boolean";
+    public static final String            TYPE_DATE              = "Date";
+    public static final String            TYPE_OBJECT            = "Object";                                                                                                   // for all other unknown
+    // types
+
+    /**
+     * The operators that are used at different times (based on type).
+     */
+    private static final String[]         STANDARD_CONNECTIVES   = new String[]{"|| ==", "|| !=", "&& !="};
+    private static final String[]         STRING_CONNECTIVES     = new String[]{"|| ==", "|| !=", "&& !=", "&& matches", "|| matches"};
+    private static final String[]         COMPARABLE_CONNECTIVES = new String[]{"|| ==", "|| !=", "&& !=", "&& >", "&& <", "|| >", "|| <", "&& >=", "&& <=", "|| <=", "|| >="};
+    private static final String[]         COLLECTION_CONNECTIVES = new String[]{"|| ==", "|| !=", "&& !=", "|| contains", "&& contains", "|| excludes", "&& excludes"};
+
+    private static final String[]         STANDARD_OPERATORS     = new String[]{"==", "!="};
+    private static final String[]         COMPARABLE_OPERATORS   = new String[]{"==", "!=", "<", ">", "<=", ">="};
+    private static final String[]         STRING_OPERATORS       = new String[]{"==", "!=", "matches", "soundslike"};
+    private static final String[]         COLLECTION_OPERATORS   = new String[]{"contains", "excludes", "==", "!="};
+
+    /** The top level conditional elements (first order logic) */
+    private static final String[]         CONDITIONAL_ELEMENTS   = new String[]{"not", "exists", "or"};
+
+   
+    /**
+    * A map of the field that contains the parametrized type of a collection
+    * List<String> name
+    * key = "name"
+    * value = "String"
+    *
+    */
+    private Map<String, String>            fieldParametersType    = new HashMap<String, String>();
+
+    /**
+     * Contains a map of globals (name is key) and their type (value).
+     */
+    private Map<String, String>            globalTypes            = new HashMap<String, String>();
+
+    /**
+     * A map of types to the modifying methods they expose. key is type, value
+     * is (Sting[] of modifying methods)
+     * 
+     **/
+    private Map<String, String[]>            modifiers;
+
+    /**
+     * Contains a map of { TypeName.field : String[] } - where a list is valid
+     * values to display in a drop down for a given Type.field combination.
+     */
+    private Map<String, String[]>          dataEnumLists          = new HashMap<String, String[]>();                                                                            // TODO this is
+    // a PROBLEM as
+    // its not
+    // always
+    // String[]
+
+    /**
+     * This will show the names of globals that are a collection type.
+     */
+    private String[]                       globalCollections;
+
+    /** Operators (from the grammar):
+         *      op=(    '=='
+         |   '>'
+         |   '>='
+         |   '<'
+         |   '<='
+         |   '!='
+         |   'contains'
+         |   'matches'
+         |       'excludes'
+         )
+         * Connectives add "&" and "|" to this.
+         */
+
+    /**
+     * DSL language extensions, if needed, if provided by the package.
+     */
+    public DSLSentence[]                  conditionDSLSentences  = new DSLSentence[0];
+    public DSLSentence[]                  actionDSLSentences     = new DSLSentence[0];
+    public DSLSentence[]                  keywordDSLItems        = new DSLSentence[0];
+    public DSLSentence[]                  anyScopeDSLItems       = new DSLSentence[0];
+
+    /**
+     * This is used to calculate what fields an enum list may depend on.
+     * Optional.
+     */
+    private transient Map<String, Object>                 dataEnumLookupFields;
+
+    // /**
+    // * For bulk loading up the data (from a previous rule save)
+    // *
+    // * @param factToFields A map of "FactType" (key - String) to String[]
+    // (value)
+    // * @param factFieldToOperator A map of "FactType.field" (key - String) to
+    // String[] operators
+    // * @param factFieldToConnectiveOperator A map of "FactType.field" (key
+    // -String) to String[] operators
+    // * that are valid CONNECTIVE operators.
+    // *
+    // * @param globals A map of global variable name to its fields (String[]).
+    // * @param boundFacts A map of bound facts to types.
+    // * @param conditionDSLs a list of DSLSentence suggestions for the LHS
+    // * @param actionDSLs a list of DSLSentence suggestions for the RHS
+    // *
+    // */
+    // public void load(
+    // Map factToFields,
+    // Map factFieldToOperator,
+    // Map factFieldToConnectiveOperator,
+    // Map globals,
+    // List conditionDSLs,
+    // List actionDSLs
+    // ) {
+    // this.factToFields = factToFields;
+    // this.factFieldToOperator = factFieldToOperator;
+    // this.factFieldToConnectiveOperator = factFieldToConnectiveOperator;
+    // this.actionDSLSentences = actionDSLs;
+    // this.conditionDSLSentences = conditionDSLs;
+    // this.globals = globals;
+    //
+    // }
+
+    private Map<String, List<MethodInfo>> methodInfos            = new HashMap<String, List<MethodInfo>>();
+
+    private Map<String, ModelField[]> modelFields = new HashMap<String, ModelField[]>();
+    private Map<String, ModelField[]> filterModelFields = null;
+
+    private Map<String, FieldAccessorsAndMutators> accessorsAndMutators = new HashMap<String, FieldAccessorsAndMutators>();
+	private FactTypeFilter factFilter = null;
+	private boolean filteringFacts = true;
+    
+    public SuggestionCompletionEngine() {
+
+    }
+
+    public String[] getConditionalElements() {
+        return CONDITIONAL_ELEMENTS;
+    }
+
+    public DSLSentence[] getDSLConditions() {
+        return this.conditionDSLSentences;
+    }
+
+    public DSLSentence[] getDSLActions() {
+        return this.actionDSLSentences;
+    }
+
+    public String[] getConnectiveOperatorCompletions(final String factType,
+                                                     final String fieldName) {
+        final String type = this.getFieldType( factType + "." + fieldName );
+        if ( type == null ) {
+            return STANDARD_CONNECTIVES;
+        } else if ( type.equals( TYPE_STRING ) ) {
+            return STRING_CONNECTIVES;
+        } else if ( type.equals( TYPE_COMPARABLE ) || type.equals( TYPE_DATE ) || type.equals( TYPE_NUMERIC ) ) {
+            return COMPARABLE_CONNECTIVES;
+        } else if ( type.equals( TYPE_COLLECTION ) ) {
+            return COLLECTION_CONNECTIVES;
+        } else {
+            return STANDARD_CONNECTIVES;
+        }
+
+    }
+
+    public String[] getFieldCompletions(final String factType) {
+        return this.getModelFields( factType );
+    }
+
+    public String[] getFieldCompletions(FieldAccessorsAndMutators accessorOrMutator,
+                                        String factType) {
+        return this.getModelFields( accessorOrMutator,
+                                    factType );
+    }
+    
+    public String[] getOperatorCompletions(final String factType,
+                                           final String fieldName) {
+        final String type = this.getFieldType( factType, fieldName );
+        if ( type == null ) {
+            return STANDARD_OPERATORS;
+        } else if ( type.equals( TYPE_STRING ) ) {
+            return STRING_OPERATORS;
+        } else if ( type.equals( TYPE_COMPARABLE ) || type.equals( TYPE_DATE ) || type.equals( TYPE_NUMERIC ) ) {
+            return COMPARABLE_OPERATORS;
+        } else if ( type.equals( TYPE_COLLECTION ) ) {
+            return COLLECTION_OPERATORS;
+        } else {
+            return STANDARD_OPERATORS;
+        }
+
+    }
+
+    public String[] getFieldCompletionsForGlobalVariable(final String varName) {
+        final String type = this.getGlobalVariable( varName );
+        return this.getModelFields(type);
+    }
+
+    public List<MethodInfo> getMethodInfosForGlobalVariable(final String varName) {
+        final String type = this.getGlobalVariable( varName );
+        return this.methodInfos.get( type );
+    }
+
+    private String[] toStringArray(final Set<?> set) {
+        final String[] f = new String[set.size()];
+        int i = 0;
+        for ( final Iterator<?> iter = set.iterator(); iter.hasNext(); i++) {
+            f[i] = iter.next().toString();
+        }
+        return f;
+    }
+
+    /**
+     * This returns a list of enums options (values) that can be used for the
+     * given field of the given FactPattern.
+     * 
+     * This also takes into account enums that depend on other fields.
+     * 
+     */
+    public DropDownData getEnums(FactPattern pat,
+                                 String field) {
+
+        Map<String, Object> dataEnumLookupFields = loadDataEnumLookupFields();
+
+        if ( pat.constraintList != null && pat.constraintList.constraints != null ) {
+            // we may need to check for data dependent enums
+            Object _typeFields = dataEnumLookupFields.get( pat.factType + "." + field );
+
+            if ( _typeFields instanceof String ) {
+                String typeFields = (String) _typeFields;
+                FieldConstraint[] cons = pat.constraintList.constraints;
+
+                String key = pat.factType + "." + field;
+
+                boolean addOpeninColumn = true;
+                String[] splitTypeFields = typeFields.split( "," );
+                for ( int j = 0; j < splitTypeFields.length; j++ ) {
+                    String typeField = splitTypeFields[j];
+
+                    for ( int i = 0; i < cons.length; i++ ) {
+                        FieldConstraint con = cons[i];
+                        if ( con instanceof SingleFieldConstraint ) {
+                            SingleFieldConstraint sfc = (SingleFieldConstraint) con;
+
+                            if ( sfc.fieldName.trim().equals( typeField.trim() ) ) {
+                                if ( addOpeninColumn ) {
+                                    key += "[";
+                                    addOpeninColumn = false;
+                                }
+                                key += typeField + "=" + sfc.value;
+
+                                if ( j != (splitTypeFields.length - 1) ) {
+                                    key += ",";
+                                }
+                            }
+                        }
+                    }
+                }
+
+                if ( !addOpeninColumn ) {
+                    key += "]";
+                }
+
+                DropDownData data = DropDownData.create( this.dataEnumLists.get( key ) );
+                if ( data != null ) {
+                    return DropDownData.create( this.dataEnumLists.get( key ) );
+                }
+            } else if ( _typeFields != null ) {
+                // these enums are calculated on demand, server side...
+                String[] fieldsNeeded = (String[]) _typeFields;
+
+                String queryString = getQueryString( pat.factType,
+                                                     field,
+                                                     fieldsNeeded,
+                                                     this.dataEnumLists );
+
+                String[] valuePairs = new String[fieldsNeeded.length];
+
+                // collect all the values of the fields needed, then return it
+                // as a string...
+                for ( int i = 0; i < fieldsNeeded.length; i++ ) {
+                    for ( int j = 0; j < pat.constraintList.constraints.length; j++ ) {
+                        FieldConstraint con = pat.constraintList.constraints[j];
+                        if ( con instanceof SingleFieldConstraint ) {
+                            SingleFieldConstraint sfc = (SingleFieldConstraint) con;
+                            if ( sfc.fieldName.equals( fieldsNeeded[i] ) ) {
+                                valuePairs[i] = fieldsNeeded[i] + "=" + sfc.value;
+                            }
+                        }
+                    }
+                }
+
+                if ( valuePairs.length > 0 && valuePairs[0] != null ) {
+                    return DropDownData.create( queryString,
+                                                valuePairs );
+                }
+            }
+        }
+        return DropDownData.create( getEnumValues( pat.factType,
+                                                   field ) );
+    }
+
+    /**
+     * Similar to the one above - but this one is for RHS.
+     */
+    public DropDownData getEnums(String type,
+                                 ActionFieldValue[] currentValues,
+                                 String field) {
+
+        if ( currentValues != null ) {
+            Map<String, Object> dataEnumLookupFields = loadDataEnumLookupFields();
+            Object _typeField = dataEnumLookupFields.get( type + "." + field );
+
+            if ( _typeField instanceof String ) {
+                String typeField = (String) dataEnumLookupFields.get( type + "." + field );
+                for ( int i = 0; i < currentValues.length; i++ ) {
+                    ActionFieldValue val = currentValues[i];
+                    if ( val.field.equals( typeField ) ) {
+                        String key = type + "." + field + "[" + typeField + "=" + val.value + "]";
+                        return DropDownData.create( this.getDataEnumList( key ) );
+                    }
+                }
+            } else if ( _typeField != null ) {
+                String[] fieldsNeeded = (String[]) _typeField;
+                String queryString = getQueryString( type,
+                                                     field,
+                                                     fieldsNeeded,
+                                                     this.dataEnumLists );
+                String[] valuePairs = new String[fieldsNeeded.length];
+
+                // collect all the values of the fields needed, then return it
+                // as a string...
+                for ( int i = 0; i < fieldsNeeded.length; i++ ) {
+                    for ( int j = 0; j < currentValues.length; j++ ) {
+                        ActionFieldValue con = currentValues[j];
+                        if ( con.field.equals( fieldsNeeded[i] ) ) {
+                            valuePairs[i] = fieldsNeeded[i] + "=" + con.value;
+                        }
+                    }
+                }
+                return DropDownData.create( queryString,
+                                            valuePairs );
+
+            }
+        }
+
+        String[] vals = this.getDataEnumList( type + "." + field );
+        return DropDownData.create( vals );
+
+    }
+
+    /**
+     * Get the query string for a fact.field It will ignore any specified field,
+     * and just look for the string - as there should only be one Fact.field of
+     * this type (it is all determined server side).
+     * @param fieldsNeeded 
+     */
+    String getQueryString(String factType,
+                          String field,
+                          String[] fieldsNeeded,
+                          Map<String, String[]> dataEnumLists) {
+        for ( Iterator<String> iterator = dataEnumLists.keySet().iterator(); iterator.hasNext(); ) {
+            String key = iterator.next();
+            if ( key.startsWith( factType + "." + field ) && fieldsNeeded != null && key.contains( "[" ) ) {
+
+                String[] values = key.substring( key.indexOf( '[' ) + 1,
+                                                 key.lastIndexOf( ']' ) ).split( "," );
+
+                if ( values.length != fieldsNeeded.length ) {
+                    continue;
+                }
+
+                boolean fail = false;
+                for ( int i = 0; i < values.length; i++ ) {
+                    String a = values[i].trim();
+                    String b = fieldsNeeded[i].trim();
+                    if ( !a.equals( b ) ) {
+                        fail = true;
+                        break;
+                    }
+                }
+                if ( fail ) {
+                    continue;
+                }
+
+                String[] qry = getDataEnumList( key );
+                return qry[0];
+            } else if ( key.startsWith( factType + "." + field ) && (fieldsNeeded == null || fieldsNeeded.length == 0) ) {
+                String[] qry = getDataEnumList( key );
+                return qry[0];
+            }
+        }
+        throw new IllegalStateException();
+    }
+
+    /**
+     * For simple cases - where a list of values are known based on a field.
+     */
+    public String[] getEnumValues(String factType,
+                                  String field) {
+        return this.getDataEnumList( factType + "." + field );
+    }
+
+    /**
+     * This is only used by enums that are like Fact.field[something=X] and so
+     * on.
+     */
+    Map<String, Object> loadDataEnumLookupFields() {
+        if ( this.dataEnumLookupFields == null ) {
+            this.dataEnumLookupFields = new HashMap<String, Object>();
+            Set<String> keys = this.dataEnumLists.keySet();
+            for ( Iterator<String> iter = keys.iterator(); iter.hasNext(); ) {
+                String key = iter.next();
+                if ( key.indexOf( '[' ) != -1 ) {
+                    int ix = key.indexOf( '[' );
+                    String factField = key.substring( 0,
+                                                      ix );
+                    String predicate = key.substring( ix + 1,
+                                                      key.indexOf( ']' ) );
+                    if ( predicate.indexOf( '=' ) > -1 ) {
+
+                        String[] bits = predicate.split( "," );
+                        String typeField = "";
+
+                        for ( int i = 0; i < bits.length; i++ ) {
+                            typeField += bits[i].substring( 0,
+                                                            bits[i].indexOf( '=' ) );
+                            if ( i != (bits.length - 1) ) {
+                                typeField += ",";
+                            }
+                        }
+
+                        dataEnumLookupFields.put( factField,
+                                                  typeField );
+                    } else {
+                        String[] fields = predicate.split( "," );
+                        for ( int i = 0; i < fields.length; i++ ) {
+                            fields[i] = fields[i].trim();
+                        }
+                        dataEnumLookupFields.put( factField,
+                                                  fields );
+                    }
+                }
+            }
+        }
+
+        return dataEnumLookupFields;
+    }
+
+    public void addMethodInfo(String factName,
+                              List<MethodInfo> methodInfos) {
+        this.methodInfos.put( factName,
+                              methodInfos );
+    }
+    
+    public List<String> getMethodParams(String factName,
+                                        String methodNameWithParams) {
+        if ( methodInfos.get( factName ) != null ) {
+            List<MethodInfo> infos = methodInfos.get( factName );
+
+            for ( MethodInfo info : infos ) {
+                if ( info.getNameWithParameters().startsWith( methodNameWithParams ) ) {
+                    return info.getParams();
+                }
+            }
+        }
+
+        return null;
+    }
+
+    public List<String> getMethodNames(String factName) {
+        List<MethodInfo> infos = methodInfos.get( factName );
+        List<String> methodList = new ArrayList<String>();
+
+        if ( infos != null ) {
+            for ( MethodInfo info : infos ) {
+                methodList.add( info.getName() );
+            }
+        }
+
+        return methodList;
+    }
+
+    public MethodInfo getMethodinfo(String factName, String methodFullName) {
+    	List<MethodInfo> infos = methodInfos.get( factName );
+
+        if ( infos != null ) {
+            for ( MethodInfo info : infos ) {
+                if (info.getNameWithParameters().equals(methodFullName)) {
+                	return info;
+                }
+            }
+        }
+
+        return null;
+    }
+    
+    public String getMethodClassType(String factName, String methodFullName) {
+    	List<MethodInfo> infos = methodInfos.get( factName );
+
+        if ( infos != null ) {
+            for ( MethodInfo info : infos ) {
+                if (info.getNameWithParameters().equals(methodFullName)) {
+                	return info.getReturnClassType();
+                }
+            }
+        }
+
+        return null;
+    }
+    
+    public List<String> getMethodFullNames(String factName) {
+        return getMethodFullNames(factName, -1);
+    }    
+
+    public List<String> getMethodFullNames(String factName, int paramCount) {
+        List<MethodInfo> infos = methodInfos.get( factName );
+        List<String> methodList = new ArrayList<String>();
+
+        if ( infos != null ) {
+			for (MethodInfo info : infos) {
+				if (paramCount == -1 || info.getParams().size() <= paramCount) {
+					methodList.add(info.getNameWithParameters());
+				}
+			}
+        }
+
+        return methodList;
+    }
+    
+    /**
+     * Returns fact's name from class type
+     *  
+     * @param type
+     * @return
+     */
+    public String getFactNameFromType(String type) {
+    	if (type == null) {
+    		return null;
+    	}
+    	if (getModelFields().containsKey(type)) {
+    		return type;
+    	} 
+    	for (Map.Entry<String, ModelField[]> entry : getModelFields().entrySet()) {
+			for (ModelField mf : entry.getValue()) {
+				if ("this".equals(mf.getName()) && type.equals(mf.getClassName())) {
+					return entry.getKey();
+				}
+			}
+		}
+    	return null;
+    }
+    
+    /**
+     * returns the type of parametric class
+     * List<String> a in a class called Toto
+     * key =   "Toto.a"
+     * value = "String"
+     */
+    public String getParametricFieldType(final String factType,
+                                         final String fieldName) {
+        return this.getParametricFieldType( factType + "." + fieldName );
+    }
+
+    public String getParametricFieldType(String fieldName){
+        return this.fieldParametersType.get(fieldName);
+    }
+
+    public void putParametricFieldType(String fieldName, String type){
+        this.fieldParametersType.put(fieldName, type);
+    }
+    
+    public String getGlobalVariable(String name){
+        return this.globalTypes.get(name);
+    }
+
+    public boolean isGlobalVariable(String name){
+        return this.globalTypes.containsKey(name);
+    }
+
+    public void setGlobalVariables(Map<String, String> globalTypes){
+         this.globalTypes = globalTypes;
+    }
+
+    public String[] getGlobalVariables() {
+        return toStringArray( this.globalTypes.keySet() );
+    }
+
+    public void setModifiers(Map<String,String[]> map){
+        this.modifiers = map;
+    }
+
+    public String[] getModifiers(String name){
+        return this.modifiers.get(name);
+    }
+
+    public void setGlobalCollections(String[] globalCollections){
+        this.globalCollections = globalCollections;
+    }
+
+    public String[] getGlobalCollections() {
+        return this.globalCollections;
+    }
+
+    public String[] getDataEnumList(String type){
+        return this.dataEnumLists.get(type);
+    }
+
+    public void setDataEnumLists(Map<String,String[]> data){
+        this.dataEnumLists = data;
+    }
+
+    public void putDataEnumList(String name,String[] value){
+        this.dataEnumLists.put(name, value);
+    }
+
+    public void putAllDataEnumLists(Map<String,String[]> value){
+        this.dataEnumLists.putAll(value);
+    }
+
+    public int getDataEnumListsSize(){
+        return this.dataEnumLists.size();
+    }
+
+    public boolean hasDataEnumLists(){
+        return this.dataEnumLists != null && this.dataEnumLists.size() > 0;
+    }
+
+
+    ////
+
+    public void setFactTypes(String[] factTypes) {
+        for (String factType : factTypes) {
+            //adds the fact type with no fields.
+            this.getModelFields().put(factType, new ModelField[0]);
+        }
+    }
+
+    public void setFactTypeFilter(FactTypeFilter filter){
+    	this.factFilter = filter;
+    	filterModelFields();
+    }
+
+    public void setFieldsForTypes(Map<String,ModelField[]> fieldsForType){
+    	this.getModelFields().clear();
+        this.getModelFields().putAll(fieldsForType);
+    }
+
+    /**
+     * Returns all the fact types.
+     * @return
+     */
+    public String[] getFactTypes() {
+        String[] types = this.getModelFields().keySet().toArray(new String[this.getModelFields().size()]);
+        Arrays.sort(types);
+		return types;
+    }
+
+    public boolean containsFactType(String modelClassName){
+        if (modelClassName.contains(".")){
+            modelClassName = modelClassName.substring(modelClassName.lastIndexOf(".")+1);
+        }
+        return this.getModelFields().containsKey(modelClassName);
+    }
+
+    private ModelField getField(String modelClassName, String fieldName){
+
+        String shortName = this.getFactNameFromType(modelClassName );
+
+        ModelField[] fields = this.getModelFields().get(shortName);
+
+        if (fields == null){
+            return null;
+        }
+
+        for (ModelField modelField : fields) {
+            if (modelField.getName().equals(fieldName)){
+                return modelField;
+            }
+        }
+
+        return null;
+    }
+
+    public String[] getModelFields(FieldAccessorsAndMutators accessorOrMutator,
+                                   String modelClassName) {
+
+        String shortName = this.getFactNameFromType(modelClassName );
+
+        if ( !this.getModelFields().containsKey( shortName) ) {
+            return new String[0];
+        }
+
+        ModelField[] fields = this.getModelFields().get( shortName );
+
+        List<String> fieldNames = new ArrayList<String>();
+        fieldNames.add( "this" );
+
+        for ( int i = 0; i < fields.length; i++ ) {
+            String fieldName = fields[i].getName();
+            if ( fields[i].getClassType() == FIELD_CLASS_TYPE.TYPE_DECLARATION_CLASS ) {
+                fieldNames.add( fieldName );
+            } else if ( FieldAccessorsAndMutators.compare( accessorOrMutator,
+                                                           this.accessorsAndMutators.get( shortName + "." + fieldName ) ) ) {
+                fieldNames.add( fieldName );
+            }
+        }
+
+        return fieldNames.toArray( new String[fieldNames.size()] );
+    }
+
+    public String[] getModelFields(String modelClassName){
+
+        String shortName = this.getFactNameFromType(modelClassName );
+
+        if (!this.getModelFields().containsKey(shortName)){
+            return new String[0];
+        }
+
+        ModelField[] fields = this.getModelFields().get(shortName);
+
+        String[] fieldNames = new String[fields.length];
+
+        for (int i=0;i<fields.length; i++) {
+            fieldNames[i] = fields[i].getName();
+        }
+
+        return fieldNames;
+    }
+
+    /**
+     *
+     * @param propertyName of the type class.field
+     * @return
+     */
+    public String getFieldClassName(String propertyName){
+        String[] split = propertyName.split("\\.");
+        if (split.length!=2){
+            throw new IllegalArgumentException("Invalid format '"+propertyName+"'. It must be of type className.propertyName");
+        }
+        return this.getFieldClassName(split[0], split[1]);
+    }
+
+    public String getFieldClassName(String modelClassName, String fieldName){
+        ModelField field = this.getField(modelClassName, fieldName);
+        return field==null?null:field.getClassName();
+    }
+
+    public ModelField.FIELD_CLASS_TYPE getFieldClassType(String modelClassName, String fieldName){
+        ModelField field = this.getField(modelClassName, fieldName);
+        return field==null?null:field.getClassType();
+    }
+
+    public String getFieldType(String propertyName){
+        String[] split = propertyName.split("\\.", 3);
+        if (split.length!=2){
+            throw new IllegalArgumentException("Invalid format '"+propertyName+"'. It must be of type className.propertyName");
+        }
+        return this.getFieldType(split[0], split[1]);
+    }
+
+    public String getFieldType(String modelClassName, String fieldName){
+        ModelField field = this.getField(modelClassName, fieldName);
+        return field==null?null:field.getType();
+    }
+
+    public void setAccessorsAndMutators(Map<String, FieldAccessorsAndMutators> accessorsAndMutators) {
+        this.accessorsAndMutators=accessorsAndMutators;
+    }
+
+    
+    
+	public void setModelFields(Map<String, ModelField[]> modelFields) {
+		this.modelFields = modelFields;
+		filterModelFields();
+	}
+
+	private void filterModelFields() {
+		if (factFilter != null) {
+			filterModelFields = new HashMap<String, ModelField[]>();
+			for (Map.Entry<String, ModelField[]> entry : modelFields.entrySet()) {
+				if (!factFilter.filter(entry.getKey())) {
+					filterModelFields.put(entry.getKey(), entry.getValue());
+				}
+			}
+		}
+	}
+	
+	public Map<String, ModelField[]> getModelFields() {
+		if (factFilter != null && isFilteringFacts()) {
+			return filterModelFields;
+		}
+		return modelFields;
+	}
+
+	public boolean isFilteringFacts() {
+		return filteringFacts;
+	}
+
+	public void setFilteringFacts(boolean filterFacts) {
+		this.filteringFacts = filterFacts;
+	}
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/brl (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/dt (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/testing (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/testing)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/modeldriven/ui (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/ui)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/package.html (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/client/package.html)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/package.html	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/client/package.html	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,5 @@
+<body>
+This package and subpackages are for items pertinent to the BRMS, that are kept in this module for re-usability.
+Items in this package and subpackage must be compilable via GWT to Javascript, which means a subset of java. 
+Generally, you won't need to look in this package.
+</body>
\ No newline at end of file

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/converter (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/server/converter)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/package.html (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/server/package.html)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/package.html	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/package.html	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,3 @@
+<body>
+	This package has some server utilities that are used by the BRMS and IDE.
+</body>
\ No newline at end of file

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/rules (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/server/rules)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/guvnor/server/util (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/guvnor/server/util)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java (from rev 32692, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,383 @@
+package org.drools.testframework;
+
+import static org.mvel2.MVEL.eval;
+
+import java.util.*;
+
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.base.ClassTypeResolver;
+import org.drools.base.TypeResolver;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.guvnor.client.modeldriven.testing.ActivateRuleFlowGroup;
+import org.drools.guvnor.client.modeldriven.testing.ExecutionTrace;
+import org.drools.guvnor.client.modeldriven.testing.Expectation;
+import org.drools.guvnor.client.modeldriven.testing.FactData;
+import org.drools.guvnor.client.modeldriven.testing.FieldData;
+import org.drools.guvnor.client.modeldriven.testing.Fixture;
+import org.drools.guvnor.client.modeldriven.testing.RetractFact;
+import org.drools.guvnor.client.modeldriven.testing.Scenario;
+import org.drools.guvnor.client.modeldriven.testing.VerifyFact;
+import org.drools.guvnor.client.modeldriven.testing.VerifyField;
+import org.drools.guvnor.client.modeldriven.testing.VerifyRuleFired;
+import org.drools.guvnor.server.util.ScenarioXMLPersistence;
+import org.drools.rule.Package;
+import org.drools.rule.TimeMachine;
+import org.mvel2.MVEL;
+import org.mvel2.ParserContext;
+import org.mvel2.compiler.CompiledExpression;
+import org.mvel2.compiler.ExpressionCompiler;
+
+
+/**
+ * This actually runs the test scenarios.
+ *
+ * @author Michael Neale
+ *
+ */
+public class ScenarioRunner {
+
+	final Scenario scenario;
+	final Map<String, Object> populatedData = new HashMap<String, Object>();
+	final Map<String, Object> globalData = new HashMap<String, Object>();
+	final Map<String, FactHandle> factHandles = new HashMap<String, FactHandle>();
+
+	final InternalWorkingMemory workingMemory;
+
+
+	/**
+	 * This constructor is normally used by Guvnor for running tests on a users request.
+	 * @param scenario
+	 *            The scenario to run.
+	 * @param resolver
+	 *            A populated type resolved to be used to resolve the types in
+	 *            the scenario.
+	 *
+	 * For info on how to invoke this, see
+	 * ContentPackageAssemblerTest.testPackageWithRuleflow in drools-guvnor This
+	 * requires that the classloader for the thread context be set
+	 * appropriately. The PackageBuilder can provide a suitable TypeResolver for
+	 * a given package header, and the Package config can provide a classloader.
+	 *
+	 */
+	public ScenarioRunner(final Scenario scenario, final TypeResolver resolver,
+			final InternalWorkingMemory wm) throws ClassNotFoundException {
+		this.scenario = scenario;
+		this.workingMemory = wm;
+		runScenario(scenario, resolver, wm);
+	}
+
+	/**
+	 * Use this constructor if you have a scenario in a file, for instance.
+	 * @throws ClassNotFoundException
+	 */
+	public ScenarioRunner(String xml, RuleBase rb) throws ClassNotFoundException {
+		this.scenario = ScenarioXMLPersistence.getInstance().unmarshal(xml);
+		this.workingMemory = (InternalWorkingMemory) rb.newStatefulSession();
+		Package pk = rb.getPackages()[0];
+        ClassLoader cl = ((InternalRuleBase) rb).getRootClassLoader();
+        HashSet<String> imports = new HashSet<String>();
+        imports.add(pk.getName() + ".*");
+        imports.addAll(pk.getImports().keySet());
+        TypeResolver resolver = new ClassTypeResolver( imports, cl );
+        runScenario(scenario, resolver, this.workingMemory);
+	}
+
+    interface Populate {
+        public void go();
+    }
+
+	private void runScenario(final Scenario scenario,
+			final TypeResolver resolver, final InternalWorkingMemory wm)
+			throws ClassNotFoundException {
+		MVEL.COMPILER_OPT_ALLOW_NAKED_METH_CALL = true;
+		scenario.lastRunResult = new Date();
+		//stub out any rules we don't want to have the consequences firing of.
+		HashSet<String> ruleList = new HashSet<String>();
+		ruleList.addAll(scenario.rules);
+		//TestingEventListener.stubOutRules(ruleList, wm.getRuleBase(), scenario.inclusive);
+
+		TestingEventListener listener = null;
+
+        List<Populate> toPopulate = new ArrayList<Populate>();
+
+		for (Iterator iterator = scenario.globals.iterator(); iterator.hasNext();) {
+			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
+				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  + "]");
+					}
+                    toPopulate.add(new Populate() {
+                        public void go() {
+                            populateFields(fact, populatedData, f);
+                            workingMemory.update(factHandles.get(fact.name), f);
+                        }
+                    });
+				} else /* a new one */ {
+                    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 ActivateRuleFlowGroup ) {
+                workingMemory.getAgenda().activateRuleFlowGroup( ((ActivateRuleFlowGroup) fx).name );
+            } else if ( fx instanceof ExecutionTrace ) {
+                doPopulate(toPopulate);
+				ExecutionTrace executionTrace = (ExecutionTrace)fx;
+				//create the listener to trace rules
+
+				if (listener != null) wm.removeEventListener(listener); //remove the old
+				listener = new TestingEventListener();
+
+				wm.addEventListener(listener);
+
+				//set up the time machine
+				applyTimeMachine(wm, executionTrace);
+
+				//love you
+				long time = System.currentTimeMillis();
+				wm.fireAllRules(listener.getAgendaFilter(ruleList, scenario.inclusive),scenario.maxRuleFirings);
+				executionTrace.executionTimeResult = System.currentTimeMillis() - time;
+				executionTrace.numberOfRulesFired = listener.totalFires;
+				executionTrace.rulesFired = listener.getRulesFiredSummary();
+
+
+			} else if (fx instanceof Expectation) {
+                doPopulate(toPopulate);
+					Expectation assertion = (Expectation) fx;
+					if (assertion instanceof VerifyFact) {
+						verify((VerifyFact) assertion);
+					} else if (assertion instanceof VerifyRuleFired) {
+						verify((VerifyRuleFired) assertion,
+								(listener.firingCounts != null) ? listener.firingCounts : new HashMap<String, Integer>());
+					}
+			} else {
+				throw new IllegalArgumentException("Not sure what to do with " + fx);
+			}
+
+
+
+		}
+        
+        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);
+        if (fullName.equals("java.util.List") || fullName.equals("java.util.Collection")) {
+                return "java.util.ArrayList";
+        } else {
+                return fullName;
+        }
+    }
+
+    private void applyTimeMachine(final InternalWorkingMemory wm,
+			ExecutionTrace executionTrace) {
+		if (executionTrace.scenarioSimulatedDate != null) {
+			final Calendar now = Calendar.getInstance();
+			now.setTimeInMillis(executionTrace.scenarioSimulatedDate.getTime());
+			wm.setTimeMachine(new TimeMachine() {
+				@Override
+				public Calendar getNow() {
+					return now;
+				}
+			});
+		} else {
+			//normal time.
+			wm.setTimeMachine(new TimeMachine());
+		}
+	}
+
+	void verify(VerifyRuleFired assertion, Map<String, Integer> firingCounts) {
+
+		assertion.actualResult = firingCounts.containsKey(assertion.ruleName) ? firingCounts
+				.get(assertion.ruleName)
+				: 0;
+		if (assertion.expectedFire != null) {
+			if (assertion.expectedFire) {
+				if (assertion.actualResult > 0) {
+					assertion.successResult = true;
+					assertion.explanation = "Rule [" + assertion.ruleName + "] was actived " + assertion.actualResult + " times.";
+				} else {
+					assertion.successResult = false;
+					assertion.explanation = "Rule [" + assertion.ruleName + "] was not activated. Expected it to be activated.";
+				}
+			} else {
+				if (assertion.actualResult == 0) {
+					assertion.successResult = true;
+					assertion.explanation = "Rule [" + assertion.ruleName + "] was not activated.";
+				} else {
+					assertion.successResult = false;
+					assertion.explanation = "Rule [" + assertion.ruleName + "] was activated " + assertion.actualResult + " times, but expected none.";
+				}
+			}
+		}
+
+		if (assertion.expectedCount != null) {
+			if (assertion.actualResult.equals(assertion.expectedCount)) {
+				assertion.successResult = true;
+				assertion.explanation = "Rule [" + assertion.ruleName + "] activated " + assertion.actualResult + " times.";
+			} else {
+				assertion.successResult = false;
+				assertion.explanation = "Rule [" + assertion.ruleName + "] activated " + assertion.actualResult + " times. Expected " + assertion.expectedCount + " times.";
+			}
+		}
+	}
+
+
+	void verify(VerifyFact value) {
+
+
+		if (!value.anonymous) {
+			Object fact = this.populatedData.get(value.name);
+			if (fact == null) fact = this.globalData.get(value.name);
+			checkFact(value, fact);
+		} else {
+			Iterator obs = this.workingMemory.iterateObjects();
+			while(obs.hasNext()) {
+				Object fact = obs.next();
+				if (fact.getClass().getSimpleName().equals(value.name)) {
+					checkFact(value, fact);
+					if (value.wasSuccessful()) return;
+				}
+			}
+			for (Iterator iterator = value.fieldValues.iterator(); iterator.hasNext();) {
+				VerifyField vfl = (VerifyField) iterator.next();
+				if (vfl.successResult == null) {
+					vfl.successResult = Boolean.FALSE;
+					vfl.actualResult = "No match";
+				}
+			}
+ 		}
+	}
+
+	private void checkFact(VerifyFact value, Object fact) {
+		for (int i = 0; i < value.fieldValues.size(); i++) {
+			VerifyField fld = (VerifyField) value.fieldValues.get(i);
+			Map<String, Object> st = new HashMap<String, Object>();
+			st.put("__fact__", fact);
+			if (fld.expected != null) {
+				Object expectedVal = fld.expected.trim();
+				if (fld.expected.startsWith("=")) {
+					expectedVal = eval(fld.expected.substring(1), this.populatedData);
+				}
+				st.put("__expected__", expectedVal);
+				
+				
+				ParserContext ctx = new ParserContext();
+                for ( Map.Entry<String, Object> entry : st.entrySet() ) {
+                    ctx.addInput( entry.getKey(),
+                                  entry.getValue().getClass() );
+                }
+                CompiledExpression expr = new ExpressionCompiler( "__fact__." + fld.fieldName
+                                                                  + " " + fld.operator  + " __expected__" ).compile( ctx );
+
+                fld.successResult = (Boolean) MVEL.executeExpression( expr,
+                                                                      st );
+				
+//				fld.successResult = (Boolean) eval("__fact__." + fld.fieldName
+//						+ " " + fld.operator  + " __expected__", st);
+
+
+				if (!fld.successResult) {
+//					Object actual = eval("__fact__." + fld.fieldName, st);
+
+				    Object actual = MVEL.executeExpression( new ExpressionCompiler( "__fact__." + fld.fieldName ).compile( ctx ),
+                                                            st );
+					
+					
+					fld.actualResult = (actual != null) ? actual.toString() : "";
+
+					if (fld.operator.equals("==")) {
+						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.actualResult
+											+ "] expected [" + fld.expected + "].";
+					} else {
+						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not expected to be [" + fld.actualResult
+						+ "].";
+					}
+				} else {
+					if (fld.operator.equals("==")) {
+						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.expected + "].";
+					} else if (fld.operator.equals("!=")){
+						fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not [" + fld.expected + "].";
+					}
+				}
+			}
+
+		}
+	}
+
+
+
+	Object populateFields(FactData fact, Map<String, Object> factData, Object factObject) {
+		for (int i = 0; i < fact.fieldData.size(); i++) {
+			FieldData field = (FieldData) fact.fieldData.get(i);
+			Object val;
+			if (field.value != null && !field.value.equals("")) {
+				if (field.value.startsWith("=")) {
+					// eval the val into existence
+					val = eval(field.value.substring(1), 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);
+			}
+		}
+		return factObject;
+	}
+
+	/**
+	 * True if the scenario was run with 100% success.
+	 */
+	public boolean wasSuccess() {
+		return this.scenario.wasSuccessful();
+	}
+
+	/**
+	 * @return A pretty printed report detailing any failures that occured
+	 * when running the scenario (unmet expectations).
+	 */
+	public String getReport() {
+		return this.scenario.printFailureReport();
+	}
+
+
+}
+

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/Alert.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/Alert.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/Alert.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/Alert.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,16 @@
+package org.drools.guvnor.client.modeldriven;
+
+public class Alert {
+
+	public String message;
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine2Test.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine2Test.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine2Test.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine2Test.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,168 @@
+package org.drools.guvnor.client.modeldriven;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.jar.JarInputStream;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.server.rules.SuggestionCompletionLoader;
+import org.drools.lang.dsl.DSLTokenizedMappingFile;
+
+public class SuggestionCompletionEngine2Test extends TestCase {
+
+    public void testAccessorsAndMutatorsDeclaredModel() throws Exception {
+        String pkg = "package org.test\n";
+        pkg += "declare Test\n";
+        pkg += "number: Integer\n";
+        pkg += "end\n";
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>(),
+                                                                        new ArrayList<String>() );
+
+        String[] accessors = engine.getFieldCompletions( FieldAccessorsAndMutators.ACCESSOR,
+                                                         "Test" );
+        assertEquals( 2,
+                      accessors.length );
+
+        String[] mutators = engine.getFieldCompletions( FieldAccessorsAndMutators.MUTATOR,
+                                                        "Test" );
+        assertEquals( 2,
+                      mutators.length );
+
+    }
+    
+    public void testAccessorsAndMutatorsJavaClass() throws Exception {
+        String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine2Test.Person\n";
+        
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>(),
+                                                                        new ArrayList<String>() );
+        
+        String[] accessors = engine.getFieldCompletions( FieldAccessorsAndMutators.ACCESSOR,
+        "SuggestionCompletionEngine2Test$Person" );
+        assertEquals( 3,
+                      accessors.length );
+        
+        String[] mutators = engine.getFieldCompletions( FieldAccessorsAndMutators.MUTATOR,
+        "SuggestionCompletionEngine2Test$Person" );
+        assertEquals( 3,
+                      mutators.length );
+        
+    }
+
+    public void testArrayList() {
+
+        String pkg = "package org.test\n global java.util.ArrayList testList";
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>(),
+                                                                        new ArrayList<String>() );
+
+        List<String> methodNames = engine.getMethodNames( "ArrayList" );
+
+        //        for ( String name : methodNames ) {
+        //            System.out.println( name );
+        //        }
+
+        assertNotNull( methodNames );
+        assertFalse( methodNames.isEmpty() );
+        for ( String s : methodNames ) {
+            assertFalse( "Method " + s + " is not allowed.",
+                         allowedMethod( s ) );
+        }
+
+    }
+
+    public void testJarFileWithSourceFiles() {
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+        // Add jar file
+        String header = "package foo \n import org.test.Person \n import org.test.Banana \n ";
+        List<JarInputStream> jars = new ArrayList<JarInputStream>();
+        JarInputStream jis = null;
+        SuggestionCompletionEngine suggestionCompletionEngine = null;
+
+        try {
+            jis = new JarInputStream( this.getClass().getResourceAsStream( "/JarWithSourceFiles.jar" ) );
+            jars.add( jis );
+        } catch ( IOException e ) {
+            fail( "Could not load jar" );
+        }
+
+        try {
+            suggestionCompletionEngine = loader.getSuggestionEngine( header,
+                                                                     jars,
+                                                                     new ArrayList<DSLTokenizedMappingFile>() );
+        } catch ( ClassFormatError e ) {
+            fail( "Can not load suggestions " + e );
+        }
+
+        // Check that it throws no error and has class files inside.
+        assertNotNull( jis );
+        assertNotNull( suggestionCompletionEngine );
+        assertEquals( 2,
+                      suggestionCompletionEngine.getFactTypes().length );
+
+        List<String> list = Arrays.asList( suggestionCompletionEngine.getFactTypes() );
+
+        assertTrue( list.contains( "Person" ) );
+        assertTrue( list.contains( "Banana" ) );
+
+        assertEquals( "java.util.Collection",
+                      suggestionCompletionEngine.getFieldClassName( "Person",
+                                                                    "bananas" ) );
+        assertEquals( SuggestionCompletionEngine.TYPE_COLLECTION,
+                      suggestionCompletionEngine.getFieldType( "Person",
+                                                               "bananas" ) );
+        assertEquals( "Banana",
+                      suggestionCompletionEngine.getParametricFieldType( "Person",
+                                                                         "bananas" ) );
+
+    }
+
+    private boolean allowedMethod(String methodName) {
+        return ("hashCode".equals( methodName ) || "equals".equals( methodName ) || "listIterator".equals( methodName ) || "lastIndexOf".equals( methodName ) || "indexOf".equals( methodName ) || "subList".equals( methodName )
+                || "get".equals( methodName ) || "isEmpty".equals( methodName ) || "containsKey".equals( methodName ) || "values".equals( methodName ) || "entrySet".equals( methodName ) || "containsValue".equals( methodName )
+                || "keySet".equals( methodName ) || "size".equals( methodName ) || "toArray".equals( methodName ) || "iterator".equals( methodName ) || "contains".equals( methodName ) || "isEmpty".equals( methodName )
+                || "containsAll".equals( methodName ) || "size".equals( methodName ));
+    }
+
+    public static class Person {
+
+        private String name;
+        private int    age;
+        private String something;
+
+        public String getSomething() {
+            return something;
+        }
+
+        public void setSomething(String something) {
+            this.something = something;
+        }
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public void addPet(String petName) {
+
+        }
+    }
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,794 @@
+package org.drools.guvnor.client.modeldriven;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.jar.JarInputStream;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.ModelField.FIELD_CLASS_TYPE;
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+import org.drools.guvnor.server.rules.SuggestionCompletionLoader;
+import org.drools.lang.dsl.DSLTokenizedMappingFile;
+
+public class SuggestionCompletionEngineTest extends TestCase {
+
+    public void testNestedImports() {
+        String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngineTest.NestedClass";
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>() );
+
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$NestedClass",
+                                           "name" ) );
+    }
+
+    public void testStringNonNumeric() {
+        String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.Alert";
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>() );
+
+        assertEquals( SuggestionCompletionEngine.TYPE_STRING,
+                      engine.getFieldType( "Alert",
+                                           "message" ) );
+
+    }
+
+    public void testDataEnums() {
+        String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngineTest.NestedClass";
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+        List<String> enums = new ArrayList<String>();
+
+        enums.add( "'Person.age' : [42, 43] \n 'Person.sex' : ['M', 'F']" );
+        enums.add( "'Driver.sex' : ['M', 'F']" );
+
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>(),
+                                                                        enums );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$NestedClass",
+                                           "name" ) );
+
+        assertEquals( 3,
+                      engine.getDataEnumListsSize());
+        String[] items = engine.getDataEnumList( "Person.age" );
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "42",
+                      items[0] );
+        assertEquals( "43",
+                      items[1] );
+
+        items = engine.getEnums( new FactPattern( "Person" ),
+                                 "age" ).fixedList;
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "42",
+                      items[0] );
+        assertEquals( "43",
+                      items[1] );
+
+        assertNull( engine.getEnums( new FactPattern( "Nothing" ),
+                                     "age" ) );
+
+        assertEquals( null,
+                      engine.getEnums( new FactPattern( "Something" ),
+                                       "else" ) );
+
+    }
+    
+    public void testDataEnums3() {
+        String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngineTest.NestedClass";
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+        List<String> enums = new ArrayList<String>();
+
+        enums.add( "'Fact.f1' : ['a1', 'a2'] \n 'Fact.f2' : ['def1', 'def2', 'def3'] \n 'Fact.f2[f1=a2]' : ['c1', 'c2']" );
+
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>(),
+                                                                        enums );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$NestedClass",
+                                           "name" ) );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint f1 = new SingleFieldConstraint( "f1" );
+        f1.value = "a1";
+        pat.addConstraint( f1 );
+        pat.addConstraint( new SingleFieldConstraint( "f2" ) );
+
+        DropDownData data = engine.getEnums( pat,
+                                             "f2" );
+
+        assertNotNull( data );
+        assertEquals( 3,
+                      data.fixedList.length );
+
+    }
+
+    public void testDataEnums2() {
+        String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngineTest.Fact";
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+        List<String> enums = new ArrayList<String>();
+
+        enums.add( "'Fact.field1' : ['val1', 'val2'] 'Fact.field2' : ['val3', 'val4'] 'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b'] 'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b']" );
+
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList<JarInputStream>(),
+                                                                        new ArrayList<DSLTokenizedMappingFile>(),
+                                                                        enums );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$Fact",
+                                           "field1" ) );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$Fact",
+                                           "field2" ) );
+
+        assertEquals( 4,
+                      engine.getDataEnumListsSize() );
+
+        String[] items = engine.getDataEnumList( "Fact.field2" );
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val3",
+                      items[0] );
+        assertEquals( "val4",
+                      items[1] );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "field2" );
+        pat.addConstraint( sfc );
+        items = engine.getEnums( pat,
+                                 "field2" ).fixedList;
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val3",
+                      items[0] );
+        assertEquals( "val4",
+                      items[1] );
+
+        items = engine.getDataEnumList( "Fact.field1" );
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val1",
+                      items[0] );
+        assertEquals( "val2",
+                      items[1] );
+
+        items = engine.getEnums( new FactPattern( "Fact" ),
+                                 "field1" ).fixedList;
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val1",
+                      items[0] );
+        assertEquals( "val2",
+                      items[1] );
+
+    }
+    
+    public void testCompletions() {
+
+        final SuggestionCompletionEngine com = new SuggestionCompletionEngine();
+
+        com.setFactTypes(new String[]{"Person", "Vehicle"});
+        
+        com.setFieldsForTypes(new HashMap<String,ModelField[]>() {
+            {
+                put( "Person",
+                     new ModelField[]{
+                        new ModelField("age", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_NUMERIC),
+                        new ModelField("rank", Integer.class.getName(),FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_COMPARABLE),
+                        new ModelField("name", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING)
+                } );
+
+                put( "Vehicle",
+                     new ModelField[]{
+                        new ModelField("make", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING),
+                        new ModelField("type", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING)
+                } );
+            }
+        });
+
+        com.setGlobalVariables(new HashMap<String, String>() {
+            {
+                put( "bar",
+                     "Person" );
+                put( "baz",
+                     "Vehicle" );
+            }
+        });
+
+        String[] c = com.getConditionalElements();
+        assertEquals( "not",
+                      c[0] );
+        assertEquals( "exists",
+                      c[1] );
+        assertEquals( "or",
+                      c[2] );
+
+        c = com.getFactTypes();
+        assertEquals( 2,
+                      c.length );
+        assertContains( "Person",
+                        c );
+        assertContains( "Vehicle",
+                        c );
+
+        c = com.getFieldCompletions( "Person" );
+        assertEquals( "age",
+                      c[0] );
+        assertEquals( "rank",
+                      c[1] );
+        assertEquals( "name",
+                      c[2] );
+
+        c = com.getFieldCompletions( "Vehicle" );
+        assertEquals( "type",
+                      c[1] );
+        assertEquals( "make",
+                      c[0] );
+
+        c = com.getOperatorCompletions( "Person",
+                                        "name" );
+        assertEquals( 4,
+                      c.length );
+        assertEquals( "==",
+                      c[0] );
+        assertEquals( "!=",
+                      c[1] );
+        assertEquals( "matches",
+                      c[2] );
+
+        c = com.getOperatorCompletions( "Person",
+                                        "age" );
+        assertEquals( 6,
+                      c.length );
+        assertEquals( c[0],
+                      "==" );
+        assertEquals( c[1],
+                      "!=" );
+        assertEquals( c[2],
+                      "<" );
+        assertEquals( c[3],
+                      ">" );
+
+        c = com.getOperatorCompletions( "Person",
+                                        "rank" );
+        assertEquals( 6,
+                      c.length );
+        assertEquals( c[0],
+                      "==" );
+        assertEquals( c[1],
+                      "!=" );
+        assertEquals( c[2],
+                      "<" );
+        assertEquals( c[3],
+                      ">" );
+
+        c = com.getConnectiveOperatorCompletions( "Vehicle",
+                                                  "make" );
+        assertEquals( 5,
+                      c.length );
+        assertEquals( "|| ==",
+                      c[0] );
+
+        c = com.getGlobalVariables();
+        assertEquals( 2,
+                      c.length );
+        assertEquals( "baz",
+                      c[0] );
+        assertEquals( "bar",
+                      c[1] );
+
+        c = com.getFieldCompletionsForGlobalVariable( "bar" );
+        assertEquals( 3,
+                      c.length );
+        assertEquals( "age",
+                      c[0] );
+        assertEquals( "rank",
+                      c[1] );
+        assertEquals( "name",
+                      c[2] );
+
+        c = com.getFieldCompletionsForGlobalVariable( "baz" );
+        assertEquals( 2,
+                      c.length );
+        assertEquals( "make",
+                      c[0] );
+        assertEquals( "type",
+                      c[1] );
+
+        //check that it has default operators for general objects
+        c = com.getOperatorCompletions( "Person",
+                                        "wankle" );
+        assertEquals( 2,
+                      c.length );
+
+        assertEquals( "Numeric",
+                      com.getFieldType( "Person",
+                                        "age" ) );
+
+    }
+
+    public void testAdd() {
+        final SuggestionCompletionEngine com = new SuggestionCompletionEngine();
+        com.setFactTypes(new String[]{"Foo"});
+        com.setFieldsForTypes(new HashMap<String,ModelField[]>() {
+            {
+                put( "Foo",
+                     new ModelField[]{
+                        new ModelField("a", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, "String")
+                });
+            }
+        });
+
+        assertEquals( 1,
+                      com.getFactTypes().length );
+        assertEquals( "Foo",
+                      com.getFactTypes()[0] );
+
+        assertEquals( 1,
+                      com.getFieldCompletions( "Foo" ).length );
+        assertEquals( "a",
+                      com.getFieldCompletions( "Foo" )[0] );
+
+    }
+
+    public void testSmartEnums() {
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.setDataEnumLists(new HashMap<String, String[]>());
+        sce.putDataEnumList( "Fact.type",
+                               new String[]{"sex", "colour"} );
+        sce.putDataEnumList( "Fact.value[type=sex]",
+                               new String[]{"M", "F"} );
+        sce.putDataEnumList( "Fact.value[type=colour]",
+                               new String[]{"RED", "WHITE", "BLUE"} );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "type" );
+        sfc.value = "sex";
+        pat.addConstraint( sfc );
+        String[] result = sce.getEnums( pat,
+                                        "value" ).fixedList;
+        assertEquals( 2,
+                      result.length );
+        assertEquals( "M",
+                      result[0] );
+        assertEquals( "F",
+                      result[1] );
+
+        pat = new FactPattern( "Fact" );
+        sfc = new SingleFieldConstraint( "type" );
+        sfc.value = "colour";
+        pat.addConstraint( sfc );
+
+        result = sce.getEnums( pat,
+                               "value" ).fixedList;
+        assertEquals( 3,
+                      result.length );
+        assertEquals( "RED",
+                      result[0] );
+        assertEquals( "WHITE",
+                      result[1] );
+        assertEquals( "BLUE",
+                      result[2] );
+
+        result = sce.getEnums( pat,
+                               "type" ).fixedList;
+        assertEquals( 2,
+                      result.length );
+        assertEquals( "sex",
+                      result[0] );
+        assertEquals( "colour",
+                      result[1] );
+
+        ActionFieldValue[] vals = new ActionFieldValue[2];
+        vals[0] = new ActionFieldValue( "type",
+                                        "sex",
+                                        "blah" );
+        vals[1] = new ActionFieldValue( "value",
+                                        null,
+                                        "blah" );
+        result = sce.getEnums( "Fact",
+                               vals,
+                               "value" ).fixedList;
+        assertNotNull( result );
+        assertEquals( 2,
+                      result.length );
+        assertEquals( "M",
+                      result[0] );
+        assertEquals( "F",
+                      result[1] );
+
+        assertNull( sce.getEnums( "Nothing",
+                                  vals,
+                                  "value" ) );
+
+    }
+
+    public void testSmartEnumsDependingOfSeveralFieldsTwo() {
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.setDataEnumLists(new HashMap<String, String[]>());
+        sce.putDataEnumList( "Fact.field1",
+                               new String[]{"a1", "a2"} );
+        sce.putDataEnumList( "Fact.field2",
+                               new String[]{"b1", "b2"} );
+        sce.putDataEnumList( "Fact.field3[field1=a1,field2=b1]",
+                               new String[]{"c1", "c2", "c3"} );
+        sce.putDataEnumList( "Fact.field4[field1=a1]",
+                               new String[]{"d1", "d2"} );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "field1" );
+        sfc.value = "a1";
+        pat.addConstraint( sfc );
+        SingleFieldConstraint sfc2 = new SingleFieldConstraint( "field2" );
+        sfc2.value = "b1";
+        pat.addConstraint( sfc2 );
+
+        String[] result = sce.getEnums( pat,
+                                        "field3" ).fixedList;
+        assertEquals( 3,
+                      result.length );
+        assertEquals( "c1",
+                      result[0] );
+        assertEquals( "c2",
+                      result[1] );
+        assertEquals( "c3",
+                      result[2] );
+
+    }
+
+    public void testSmartEnumsDependingOfSeveralFieldsFive() {
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.setDataEnumLists(new HashMap<String, String[]>());
+        sce.putDataEnumList( "Fact.field1",
+                               new String[]{"a1", "a2"} );
+        sce.putDataEnumList( "Fact.field2",
+                               new String[]{"b1", "b2"} );
+        sce.putDataEnumList( "Fact.field3",
+                               new String[]{"c1", "c2", "c3"} );
+        sce.putDataEnumList( "Fact.longerField4",
+                               new String[]{"d1", "d2"} );
+        sce.putDataEnumList( "Fact.field5",
+                               new String[]{"e1", "e2"} );
+        sce.putDataEnumList( "Fact.field6[field1=a1, field2=b2, field3=c3,longerField4=d1,field5=e2]",
+                               new String[]{"f1", "f2"} );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "field1" );
+        sfc.value = "a1";
+        pat.addConstraint( sfc );
+        SingleFieldConstraint sfc2 = new SingleFieldConstraint( "field2" );
+        sfc2.value = "b2";
+        pat.addConstraint( sfc2 );
+        SingleFieldConstraint sfc3 = new SingleFieldConstraint( "field3" );
+        sfc3.value = "c3";
+        pat.addConstraint( sfc3 );
+        SingleFieldConstraint sfc4 = new SingleFieldConstraint( "longerField4" );
+        sfc4.value = "d1";
+        pat.addConstraint( sfc4 );
+
+        assertNull( sce.getEnums( pat,
+                                  "field6" ) );
+
+        SingleFieldConstraint sfc5 = new SingleFieldConstraint( "field5" );
+        sfc5.value = "e2";
+        pat.addConstraint( sfc5 );
+
+        String[] result2 = sce.getEnums( pat,
+                                         "field6" ).fixedList;
+        assertEquals( 2,
+                      result2.length );
+        assertEquals( "f1",
+                      result2[0] );
+        assertEquals( "f2",
+                      result2[1] );
+    }
+
+    public void testSmarterLookupEnums() {
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.setDataEnumLists(new HashMap<String, String[]>());
+        sce.putDataEnumList( "Fact.type",
+                               new String[]{"sex", "colour"} );
+        sce.putDataEnumList( "Fact.value[f1, f2]",
+                               new String[]{"select something from database where x=@{f1} and y=@{f2}"} );
+
+        FactPattern fp = new FactPattern( "Fact" );
+        String[] drops = sce.getEnums( fp,
+                                       "type" ).fixedList;
+        assertEquals( 2,
+                      drops.length );
+        assertEquals( "sex",
+                      drops[0] );
+        assertEquals( "colour",
+                      drops[1] );
+
+        Map<String, Object> lookupFields = sce.loadDataEnumLookupFields();
+        assertEquals( 1,
+                      lookupFields.size() );
+        String[] flds = (String[]) lookupFields.get( "Fact.value" );
+        assertEquals( 2,
+                      flds.length );
+        assertEquals( "f1",
+                      flds[0] );
+        assertEquals( "f2",
+                      flds[1] );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "f1" );
+        sfc.value = "f1val";
+        pat.addConstraint( sfc );
+        sfc = new SingleFieldConstraint( "f2" );
+        sfc.value = "f2val";
+        pat.addConstraint( sfc );
+
+        DropDownData dd = sce.getEnums( pat,
+                                        "value" );
+        assertNull( dd.fixedList );
+        assertNotNull( dd.queryExpression );
+        assertNotNull( dd.valuePairs );
+
+        assertEquals( 2,
+                      dd.valuePairs.length );
+        assertEquals( "select something from database where x=@{f1} and y=@{f2}",
+                      dd.queryExpression );
+        assertEquals( "f1=f1val",
+                      dd.valuePairs[0] );
+        assertEquals( "f2=f2val",
+                      dd.valuePairs[1] );
+
+        //and now for the RHS
+        ActionFieldValue[] vals = new ActionFieldValue[2];
+        vals[0] = new ActionFieldValue( "f1",
+                                        "f1val",
+                                        "blah" );
+        vals[1] = new ActionFieldValue( "f2",
+                                        "f2val",
+                                        "blah" );
+        dd = sce.getEnums( "Fact",
+                           vals,
+                           "value" );
+        assertNull( dd.fixedList );
+        assertNotNull( dd.queryExpression );
+        assertNotNull( dd.valuePairs );
+        assertEquals( 2,
+                      dd.valuePairs.length );
+        assertEquals( "select something from database where x=@{f1} and y=@{f2}",
+                      dd.queryExpression );
+        assertEquals( "f1=f1val",
+                      dd.valuePairs[0] );
+        assertEquals( "f2=f2val",
+                      dd.valuePairs[1] );
+
+    }
+
+    public void testSmarterLookupEnumsDifferentOrder() {
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.setDataEnumLists(new HashMap<String, String[]>());
+        sce.putDataEnumList( "Fact.type",
+                               new String[]{"sex", "colour"} );
+        sce.putDataEnumList( "Fact.value[e1, e2]",
+                               new String[]{"select something from database where x=@{e1} and y=@{e2}"} );
+        sce.putDataEnumList( "Fact.value[f1, f2]",
+                               new String[]{"select something from database where x=@{f1} and y=@{f2}"} );
+        
+        FactPattern fp = new FactPattern( "Fact" );
+        String[] drops = sce.getEnums( fp,
+            "type" ).fixedList;
+        assertEquals( 2,
+                      drops.length );
+        assertEquals( "sex",
+                      drops[0] );
+        assertEquals( "colour",
+                      drops[1] );
+        
+        Map<String, Object> lookupFields = sce.loadDataEnumLookupFields();
+        assertEquals( 1,
+                      lookupFields.size() );
+        String[] flds = (String[]) lookupFields.get( "Fact.value" );
+        assertEquals( 2,
+                      flds.length );
+        assertEquals( "f1",
+                      flds[0] );
+        assertEquals( "f2",
+                      flds[1] );
+        
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "f1" );
+        sfc.value = "f1val";
+        pat.addConstraint( sfc );
+        sfc = new SingleFieldConstraint( "f2" );
+        sfc.value = "f2val";
+        pat.addConstraint( sfc );
+        
+        DropDownData dd = sce.getEnums( pat,
+        "value" );
+        assertNull( dd.fixedList );
+        assertNotNull( dd.queryExpression );
+        assertNotNull( dd.valuePairs );
+        
+        assertEquals( 2,
+                      dd.valuePairs.length );
+        assertEquals( "select something from database where x=@{f1} and y=@{f2}",
+                      dd.queryExpression );
+        assertEquals( "f1=f1val",
+                      dd.valuePairs[0] );
+        assertEquals( "f2=f2val",
+                      dd.valuePairs[1] );
+        
+        //and now for the RHS
+        ActionFieldValue[] vals = new ActionFieldValue[2];
+        vals[0] = new ActionFieldValue( "f1",
+                                        "f1val",
+        "blah" );
+        vals[1] = new ActionFieldValue( "f2",
+                                        "f2val",
+        "blah" );
+        dd = sce.getEnums( "Fact",
+                           vals,
+        "value" );
+        assertNull( dd.fixedList );
+        assertNotNull( dd.queryExpression );
+        assertNotNull( dd.valuePairs );
+        assertEquals( 2,
+                      dd.valuePairs.length );
+        assertEquals( "select something from database where x=@{f1} and y=@{f2}",
+                      dd.queryExpression );
+        assertEquals( "f1=f1val",
+                      dd.valuePairs[0] );
+        assertEquals( "f2=f2val",
+                      dd.valuePairs[1] );
+        
+    }
+
+    public void testSimpleEnums() {
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.setDataEnumLists(new HashMap<String, String[]>());
+        sce.putDataEnumList( "Fact.type",
+                               new String[]{"sex", "colour"} );
+        assertEquals( 2,
+                      sce.getEnumValues( "Fact",
+                                         "type" ).length );
+        assertEquals( "sex",
+                      sce.getEnumValues( "Fact",
+                                         "type" )[0] );
+        assertEquals( "colour",
+                      sce.getEnumValues( "Fact",
+                                         "type" )[1] );
+
+    }
+
+    private void assertContains(final String string,
+                                final String[] c) {
+
+        for ( int i = 0; i < c.length; i++ ) {
+            if ( string.equals( c[i] ) ) {
+                return;
+            }
+        }
+        fail( "String array did not contain: " + string );
+
+    }
+
+    public void testGlobalAndFacts() {
+        final SuggestionCompletionEngine com = new SuggestionCompletionEngine();
+
+        com.setGlobalVariables(new HashMap<String, String>() {
+            {
+                put( "y", "Foo" );
+            }
+        });
+
+        com.setFieldsForTypes(new HashMap<String,ModelField[]>() {
+            {
+                put( "Foo",
+                     new ModelField[]{
+                        new ModelField("a", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, "String")
+                });
+            }
+        });
+
+        assertFalse( com.isGlobalVariable( "x" ) );
+        assertTrue( com.isGlobalVariable( "y" ) );
+    }
+
+    public void testDataDropDown() {
+        assertNull( DropDownData.create( null ) );
+        assertNull( DropDownData.create( null, null ) );
+        assertNotNull( DropDownData.create( new String[]{"hey"} ));
+        assertNotNull( DropDownData.create( "abc", new String[]{"hey"} ) );
+
+    }
+
+    public void testFilter() {
+
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+
+        sce.setFactTypes(new String[]{"Person", "Vehicle"});
+        
+        sce.setFieldsForTypes(new HashMap<String,ModelField[]>() {
+            {
+                put( "Person",
+                     new ModelField[]{
+                        new ModelField("age", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_NUMERIC),
+                } );
+
+                put( "Vehicle",
+                     new ModelField[]{
+                        new ModelField("make", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING),
+                } );
+            }
+        });
+        
+        assertEquals(2, sce.getFactTypes().length);
+		sce.setFactTypeFilter(new FactTypeFilter() {
+			public boolean filter(String originalFact) {
+				return "Person".equals(originalFact);
+			}
+		});
+		
+		assertEquals(1, sce.getFactTypes().length);
+		sce.setFilteringFacts(false);
+		
+		assertEquals(2, sce.getFactTypes().length);
+		sce.setFilteringFacts(true);
+		assertEquals(1, sce.getFactTypes().length);
+		
+		sce.setFactTypeFilter(null);
+		assertEquals(2, sce.getFactTypes().length);
+		
+    }
+    
+    public static class NestedClass {
+        private String name;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    public static class Fact {
+        private String field1;
+        private String field2;
+
+        public String getField1() {
+            return field1;
+        }
+
+        public void setField1(String field1) {
+            this.field1 = field1;
+        }
+
+        public String getField2() {
+            return field2;
+        }
+
+        public void setField2(String field2) {
+            this.field2 = field2;
+        }
+
+    }
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/client/modeldriven/brl (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/brl)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionFieldValueTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/ActionFieldValueTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionFieldValueTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionFieldValueTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,21 @@
+package org.drools.guvnor.modeldriven;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+
+public class ActionFieldValueTest extends TestCase {
+
+    public void testFormula() {
+        ActionFieldValue val = new ActionFieldValue( "x",
+                                                     "y",
+                                                     SuggestionCompletionEngine.TYPE_NUMERIC );
+        assertFalse( val.isFormula() );
+        val = new ActionFieldValue( "x",
+                                    "=y * 20",
+                                    SuggestionCompletionEngine.TYPE_NUMERIC );
+        assertTrue( val.isFormula() );
+    }
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionSetFieldTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/ActionSetFieldTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionSetFieldTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ActionSetFieldTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,58 @@
+package org.drools.guvnor.modeldriven;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+import org.drools.guvnor.client.modeldriven.brl.ActionSetField;
+
+public class ActionSetFieldTest extends TestCase {
+
+    public void testRemove() {
+        final ActionSetField set = new ActionSetField();
+        set.fieldValues = new ActionFieldValue[2];
+        final ActionFieldValue v0 = new ActionFieldValue( "x",
+                                                          "42",
+                                                          SuggestionCompletionEngine.TYPE_NUMERIC );
+        final ActionFieldValue v1 = new ActionFieldValue( "y",
+                                                          "43",
+                                                          SuggestionCompletionEngine.TYPE_NUMERIC );
+        set.fieldValues[0] = v0;
+        set.fieldValues[1] = v1;
+
+        set.removeField( 1 );
+
+        assertEquals( 1,
+                      set.fieldValues.length );
+        assertEquals( v0,
+                      set.fieldValues[0] );
+
+    }
+
+    public void testAdd() {
+        final ActionSetField set = new ActionSetField();
+        set.fieldValues = new ActionFieldValue[2];
+        final ActionFieldValue v0 = new ActionFieldValue( "x",
+                                                          "42",
+                                                          SuggestionCompletionEngine.TYPE_NUMERIC );
+        final ActionFieldValue v1 = new ActionFieldValue( "y",
+                                                          "43",
+                                                          SuggestionCompletionEngine.TYPE_NUMERIC );
+        set.fieldValues[0] = v0;
+        set.fieldValues[1] = v1;
+
+        final ActionFieldValue q = new ActionFieldValue( "q",
+                                                         "q",
+                                                         SuggestionCompletionEngine.TYPE_NUMERIC );
+        set.addFieldValue( q );
+
+        assertEquals( 3,
+                      set.fieldValues.length );
+        assertEquals( q,
+                      set.fieldValues[2] );
+        assertEquals( v0,
+                      set.fieldValues[0] );
+
+    }
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFactPatternTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/CompositeFactPatternTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFactPatternTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFactPatternTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,27 @@
+package org.drools.guvnor.modeldriven;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.CompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+
+public class CompositeFactPatternTest extends TestCase {
+
+    public void testAddPattern() {
+        final CompositeFactPattern pat = new CompositeFactPattern();
+        final FactPattern x = new FactPattern();
+        pat.addFactPattern( x );
+        assertEquals( 1,
+                      pat.patterns.length );
+
+        final FactPattern y = new FactPattern();
+        pat.addFactPattern( y );
+        assertEquals( 2,
+                      pat.patterns.length );
+        assertEquals( x,
+                      pat.patterns[0] );
+        assertEquals( y,
+                      pat.patterns[1] );
+    }
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFieldConstraintTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/CompositeFieldConstraintTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFieldConstraintTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/CompositeFieldConstraintTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,59 @@
+package org.drools.guvnor.modeldriven;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.CompositeFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+
+public class CompositeFieldConstraintTest extends TestCase {
+
+    public void testCompositeType() {
+        CompositeFieldConstraint con = new CompositeFieldConstraint();
+        assertEquals(null, con.compositeJunctionType);
+    }
+    
+    public void testAddConstraint() {
+        final CompositeFieldConstraint p = new CompositeFieldConstraint();
+        final SingleFieldConstraint x = new SingleFieldConstraint( "x" );
+        p.addConstraint( x );
+
+        assertEquals( 1,
+                      p.constraints.length );
+        assertEquals( x,
+                      p.constraints[0] );
+
+        final SingleFieldConstraint y = new SingleFieldConstraint( "y" );
+
+        p.addConstraint( y );
+        assertEquals( 2,
+                      p.constraints.length );
+        assertEquals( x,
+                      p.constraints[0] );
+        assertEquals( y,
+                      p.constraints[1] );
+
+    }
+
+    public void testRemoveConstraint() {
+        final CompositeFieldConstraint p = new CompositeFieldConstraint();
+        final SingleFieldConstraint x = new SingleFieldConstraint( "x" );
+        p.addConstraint( x );
+        final CompositeFieldConstraint y = new CompositeFieldConstraint(  );
+        p.addConstraint( y );
+
+        assertEquals( 2,
+                      p.constraints.length );
+
+        p.removeConstraint( 1 );
+
+        assertEquals( 1,
+                      p.constraints.length );
+
+        assertEquals( x,
+                      p.constraints[0] );
+
+    }
+    
+    
+    
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ConstraintTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/ConstraintTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ConstraintTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/ConstraintTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,25 @@
+package org.drools.guvnor.modeldriven;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+
+public class ConstraintTest extends TestCase {
+
+    public void testAdd() {
+        final SingleFieldConstraint con = new SingleFieldConstraint();
+        con.addNewConnective();
+
+        assertEquals( 1,
+                      con.connectives.length );
+        assertNotNull( con.connectives[0] );
+
+        con.addNewConnective();
+
+        assertEquals( 2,
+                      con.connectives.length );
+        assertNotNull( con.connectives[1] );
+
+    }
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DSLSentenceTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/DSLSentenceTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DSLSentenceTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DSLSentenceTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,44 @@
+package org.drools.guvnor.modeldriven;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.DSLSentence;
+
+public class DSLSentenceTest extends TestCase {
+
+    public void testSentence() {
+
+        final DSLSentence sen = new DSLSentence();
+        sen.sentence = "this is {something} here and {here}";
+        assertEquals( "this is something here and here",
+                      sen.toString() );
+
+        sen.sentence = "foo bar";
+        assertEquals( "foo bar",
+                      sen.toString() );
+
+        final DSLSentence newOne = sen.copy();
+        assertFalse( newOne == sen );
+        assertEquals( newOne.sentence,
+                      sen.sentence );
+    }
+
+    public void testEnumSentence(){
+        final DSLSentence sen = new DSLSentence();
+        sen.sentence = "this is {variable:ENUM:Value.test} here and {here}";
+        assertEquals( "this is variable here and here",sen.toString() );
+    }
+
+    public void testLogColonSentence(){
+        final DSLSentence sen = new DSLSentence();
+        sen.sentence = "Log : \"{message}\"";
+        assertEquals( "Log : \"message\"",sen.toString() );
+    }
+
+    public void testWithNewLines() {
+    	final DSLSentence sen = new DSLSentence();
+        sen.sentence = "this is {variable}\\n here and {here}";
+        assertEquals( "this is variable\n here and here",sen.toString() );
+
+    }
+}
\ No newline at end of file

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DataEnumLoaderTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/DataEnumLoaderTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DataEnumLoaderTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/DataEnumLoaderTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,128 @@
+package org.drools.guvnor.modeldriven;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.server.util.DataEnumLoader;
+import org.mvel2.MVEL;
+import org.mvel2.templates.TemplateRuntime;
+
+public class DataEnumLoaderTest extends TestCase {
+
+	public void testEnumGeneration() throws Exception {
+
+
+
+		Object result = MVEL.eval("[2, 3, 4, ]", new HashMap());
+		assertTrue(result instanceof List);
+		List l = (List) result;
+		assertEquals(3, l.size());
+
+		result = MVEL.eval("['Person.age' : [2, 3]\n 'Person.name' : ['qqq', \n'ccc']]", new HashMap());
+
+
+
+
+		DataEnumLoader loader = new DataEnumLoader(readLines().toString());
+
+        assertFalse(loader.getErrors().toString(), loader.hasErrors());
+
+		Map enumeration = (Map) loader.getData();
+		assertEquals(loader.getErrors().toString(), 0, loader.getErrors().size());
+		assertEquals(3, enumeration.size());
+
+		String[] list = (String[]) enumeration.get("Person.age");
+		assertEquals(4, list.length);
+		assertEquals("1", list[0]);
+		assertEquals("2", list[1]);
+
+		list = (String[]) enumeration.get("Person.rating");
+		assertEquals(2, list.length);
+		assertEquals("High", list[0]);
+		assertEquals("Low", list[1]);
+
+
+
+
+		loader = new DataEnumLoader("goober poo error");
+		assertEquals(0, loader.getData().size());
+		assertFalse(loader.getErrors().size() == 0);
+		assertTrue(loader.hasErrors());
+
+	}
+
+
+
+    public void testNoOp() {
+        DataEnumLoader loader = new DataEnumLoader(" ");
+        assertFalse(loader.hasErrors());
+        assertEquals(0, loader.getData().size());
+
+        loader = new DataEnumLoader("");
+        assertFalse(loader.hasErrors());
+        assertEquals(0, loader.getData().size());
+
+    }
+
+    public void testLiteralHelperUtilityClass() {
+    	//this shows how you can load it up with a class (which should return a map of keys to List.
+    	DataEnumLoader loader = new DataEnumLoader("=(new org.drools.guvnor.modeldriven.SampleDataSource2()).loadData()");
+
+    	assertFalse(loader.hasErrors());
+
+        assertEquals(1, loader.getData().size());
+        String[] res = (String[]) loader.getData().get("whee");
+    	assertEquals(2, res.length);
+    	assertEquals("hey", res[0]);
+    	assertEquals("ho", res[1]);
+
+    }
+
+
+    public void testNewLines() {
+        String s = "yeah yeah, \nyeah \nyeah";
+        assertEquals("yeah yeah,\nyeah,\nyeah", DataEnumLoader.addCommasForNewLines( s ));
+    }
+
+    public void testLazyString() {
+    	//in this case we are dealing with an expression which will not be resolved at load time.
+    	DataEnumLoader loader = new DataEnumLoader("'Person.type[sex]' : 'something @{sex}'");
+    	assertFalse(loader.hasErrors());
+
+    	Map data = loader.getData();
+    	String[] sl = (String[]) data.get("Person.type[sex]");
+    	String s = sl[0];
+    	assertEquals("something @{sex}", s);
+    	Map context = new HashMap() {{ put("sex", "cool"); }};
+
+    	Object r = TemplateRuntime.eval(s, context);
+
+    	assertEquals("something cool", r);
+
+    	loader = new DataEnumLoader("'Person.type[sex, money]' : '@{sex} @{money}'");
+    	assertFalse(loader.hasErrors());
+
+    	sl = (String[]) loader.getData().get("Person.type[sex, money]");
+    	s = sl[0];
+    	assertEquals("@{sex} @{money}", s);
+
+    }
+
+	private StringBuilder readLines() throws IOException {
+		BufferedReader r = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("Some.enumeration")));
+		String line = "";
+		StringBuilder buf = new StringBuilder();
+		while ((line = r.readLine()) != null) {
+			buf.append(line); buf.append('\n');
+		}
+		return buf;
+	}
+
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/FactPatternTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/FactPatternTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/FactPatternTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/FactPatternTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,101 @@
+package org.drools.guvnor.modeldriven;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.CompositeFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+
+public class FactPatternTest extends TestCase {
+
+    public void testAddConstraint() {
+        final FactPattern p = new FactPattern();
+        final SingleFieldConstraint x = new SingleFieldConstraint( "x" );
+        p.addConstraint( x );
+
+        assertEquals( 1,
+                      p.constraintList.constraints.length );
+        assertEquals( x,
+                      p.constraintList.constraints[0] );
+
+        final SingleFieldConstraint y = new SingleFieldConstraint( "y" );
+
+        p.addConstraint( y );
+        assertEquals( 2,
+                      p.constraintList.constraints.length );
+        assertEquals( x,
+                      p.constraintList.constraints[0] );
+        assertEquals( y,
+                      p.constraintList.constraints[1] );
+
+    }
+    
+    public void testWithCompositeNesting() {
+        final FactPattern p = new FactPattern();
+        final SingleFieldConstraint x = new SingleFieldConstraint( "x" );
+        p.addConstraint( x );
+
+        assertEquals( 1,
+                      p.constraintList.constraints.length );
+        assertEquals( x,
+                      p.constraintList.constraints[0] );
+
+        final CompositeFieldConstraint y = new CompositeFieldConstraint();
+
+        y.addConstraint( new SingleFieldConstraint("y") );
+        y.addConstraint( new SingleFieldConstraint("z") );        
+        p.addConstraint( y );
+        
+        assertEquals( 2,
+                      p.constraintList.constraints.length );
+        assertEquals( x,
+                      p.constraintList.constraints[0] );
+        assertEquals( y,
+                      p.constraintList.constraints[1] );     
+        
+       
+        
+    }
+
+    public void testRemoveConstraint() {
+        final FactPattern p = new FactPattern();
+        final SingleFieldConstraint x = new SingleFieldConstraint( "x" );
+        p.addConstraint( x );
+        final SingleFieldConstraint y = new SingleFieldConstraint( "y" );
+        p.addConstraint( y );
+
+        assertEquals( 2,
+                      p.constraintList.constraints.length );
+
+        p.removeConstraint( 1 );
+
+        assertEquals( 1,
+                      p.constraintList.constraints.length );
+
+        assertEquals( x,
+                      p.constraintList.constraints[0] );
+
+        
+        
+    }
+    
+    public void testIsBound() {
+        FactPattern pat = new FactPattern();
+        pat.boundName = "x";
+        assertTrue(pat.isBound());
+        
+        pat = new FactPattern();
+        assertFalse(pat.isBound());
+    }
+    
+    public void testGetFieldConstraints() {
+        FactPattern pat = new FactPattern();
+        assertEquals(0, pat.getFieldConstraints().length);
+        assertNull(pat.constraintList);
+        
+        pat.addConstraint( new SingleFieldConstraint() );
+        assertNotNull(pat.constraintList);
+        assertEquals(1, pat.getFieldConstraints().length);
+    }
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/RuleModelTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/RuleModelTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/RuleModelTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/RuleModelTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,614 @@
+package org.drools.guvnor.modeldriven;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.ActionRetractFact;
+import org.drools.guvnor.client.modeldriven.brl.ActionSetField;
+import org.drools.guvnor.client.modeldriven.brl.CompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.CompositeFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.ConnectiveConstraint;
+import org.drools.guvnor.client.modeldriven.brl.DSLSentence;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.IAction;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+import org.drools.guvnor.client.modeldriven.brl.ISingleFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.RuleAttribute;
+import org.drools.guvnor.client.modeldriven.brl.RuleMetadata;
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+
+import com.thoughtworks.xstream.XStream;
+
+public class RuleModelTest extends TestCase {
+
+	public void testAddItemLhs() {
+		final RuleModel model = new RuleModel();
+		final FactPattern x = new FactPattern();
+		model.addLhsItem(x);
+		assertEquals(1, model.lhs.length);
+
+		final FactPattern y = new FactPattern();
+		model.addLhsItem(y);
+
+		assertEquals(2, model.lhs.length);
+		assertEquals(x, model.lhs[0]);
+		assertEquals(y, model.lhs[1]);
+
+	}
+
+	public void testAddItemRhs() {
+		final RuleModel model = new RuleModel();
+		final IAction a0 = new ActionSetField();
+		final IAction a1 = new ActionSetField();
+
+		model.addRhsItem(a0);
+
+		assertEquals(1, model.rhs.length);
+		model.addRhsItem(a1);
+
+		assertEquals(2, model.rhs.length);
+
+		assertEquals(a0, model.rhs[0]);
+		assertEquals(a1, model.rhs[1]);
+	}
+
+	public void testAllVariableBindings() {
+		final RuleModel model = new RuleModel();
+		model.lhs = new IPattern[2];
+		final FactPattern x = new FactPattern("Car");
+		model.lhs[0] = x;
+		x.boundName = "boundFact";
+
+		SingleFieldConstraint sfc = new SingleFieldConstraint("q");
+		x.addConstraint(sfc);
+		sfc.fieldBinding = "field1";
+
+		SingleFieldConstraint sfc2 = new SingleFieldConstraint("q");
+		x.addConstraint(sfc2);
+		sfc2.fieldBinding = "field2";
+
+		model.lhs[1] = new CompositeFactPattern();
+
+		List vars = model.getAllVariables();
+		assertEquals(3, vars.size());
+		assertEquals("boundFact", vars.get(0));
+		assertEquals("field1", vars.get(1));
+		assertEquals("field2", vars.get(2));
+
+		assertTrue(model.isVariableNameUsed("field2"));
+
+	}
+
+	public void testAttributes() {
+		final RuleModel m = new RuleModel();
+		final RuleAttribute at = new RuleAttribute("salience", "42");
+		m.addAttribute(at);
+		assertEquals(1, m.attributes.length);
+		assertEquals(at, m.attributes[0]);
+
+		final RuleAttribute at2 = new RuleAttribute("agenda-group", "x");
+		m.addAttribute(at2);
+		assertEquals(2, m.attributes.length);
+		assertEquals(at2, m.attributes[1]);
+
+		m.removeAttribute(0);
+		assertEquals(1, m.attributes.length);
+		assertEquals(at2, m.attributes[0]);
+	}
+
+	public void testBindingList() {
+		final RuleModel model = new RuleModel();
+
+		model.lhs = new IPattern[3];
+		final FactPattern x = new FactPattern("Car");
+		model.lhs[0] = x;
+		x.boundName = "x";
+
+		final FactPattern y = new FactPattern("Car");
+		model.lhs[1] = y;
+		y.boundName = "y";
+
+		final SingleFieldConstraint[] cons = new SingleFieldConstraint[2];
+		y.constraintList = new CompositeFieldConstraint();
+		y.constraintList.constraints = cons;
+		cons[0] = new SingleFieldConstraint("age");
+		cons[0].fieldBinding = "qbc";
+		cons[0].fieldType = "String";
+		cons[0].connectives = new ConnectiveConstraint[1];
+		cons[0].connectives[0] = new ConnectiveConstraint("age", "String", "&", "x");
+		cons[0].connectives[0].constraintValueType = ISingleFieldConstraint.TYPE_LITERAL;
+		cons[1] = new SingleFieldConstraint("make");
+		cons[1].fieldType = "Long";
+		cons[1].connectives = new ConnectiveConstraint[1];
+		cons[1].connectives[0] = new ConnectiveConstraint("make", "Long", "=", "2");
+		cons[1].connectives[0].constraintValueType = ISingleFieldConstraint.TYPE_LITERAL;
+
+
+		final FactPattern other = new FactPattern("House");
+		model.lhs[2] = other;
+
+		final List b = model.getBoundFacts();
+		assertEquals(3, b.size());
+
+		assertEquals("x", b.get(0));
+		assertEquals("y", b.get(1));
+		assertEquals("qbc", b.get(2));
+
+	}
+
+	public void testBoundFactFinder() {
+		final RuleModel model = new RuleModel();
+
+		assertNull(model.getBoundFact("x"));
+		model.lhs = new IPattern[3];
+
+		final FactPattern x = new FactPattern("Car");
+		model.lhs[0] = x;
+		x.boundName = "x";
+
+		assertNotNull(model.getBoundFact("x"));
+		assertEquals(x, model.getBoundFact("x"));
+
+		final FactPattern y = new FactPattern("Car");
+		model.lhs[1] = y;
+		y.boundName = "y";
+
+		final FactPattern other = new FactPattern("House");
+		model.lhs[2] = other;
+
+		assertEquals(y, model.getBoundFact("y"));
+		assertEquals(x, model.getBoundFact("x"));
+
+		model.rhs = new IAction[1];
+		final ActionSetField set = new ActionSetField();
+		set.variable = "x";
+		model.rhs[0] = set;
+
+		assertTrue(model.isBoundFactUsed("x"));
+		assertFalse(model.isBoundFactUsed("y"));
+
+		assertEquals(3, model.lhs.length);
+		assertFalse(model.removeLhsItem(0));
+		assertEquals(3, model.lhs.length);
+
+		final ActionRetractFact fact = new ActionRetractFact("q");
+		model.rhs[0] = fact;
+		assertTrue(model.isBoundFactUsed("q"));
+		assertFalse(model.isBoundFactUsed("x"));
+
+		final XStream xt = new XStream();
+		xt.alias("rule", RuleModel.class);
+		xt.alias("fact", FactPattern.class);
+		xt.alias("retract", ActionRetractFact.class);
+
+		final String brl = xt.toXML(model);
+
+		System.out.println(brl);
+	}
+
+	public void testGetVariableNameForRHS() {
+		RuleModel m = new RuleModel();
+		m.name = "blah";
+
+		FactPattern pat = new FactPattern();
+		pat.boundName = "pat";
+		pat.factType = "Person";
+
+		m.addLhsItem(pat);
+
+		List l = m.getAllVariables();
+		assertEquals(1, l.size());
+		assertEquals("pat", l.get(0));
+
+	}
+
+	public void testIsDSLEnhanced() throws Exception {
+		RuleModel m = new RuleModel();
+
+		assertFalse(m.hasDSLSentences());
+
+		m.addLhsItem(new FactPattern());
+		assertFalse(m.hasDSLSentences());
+
+		m.addRhsItem(new ActionSetField("q"));
+
+		assertFalse(m.hasDSLSentences());
+
+		m.addLhsItem(new DSLSentence());
+		assertTrue(m.hasDSLSentences());
+
+		m.addRhsItem(new DSLSentence());
+		assertTrue(m.hasDSLSentences());
+
+		m = new RuleModel();
+
+		m.addLhsItem(new DSLSentence());
+		assertTrue(m.hasDSLSentences());
+
+		m = new RuleModel();
+		m.addRhsItem(new DSLSentence());
+		assertTrue(m.hasDSLSentences());
+
+	}
+
+	public void testMetaData() {
+		final RuleModel m = new RuleModel();
+
+		final RuleMetadata rm = new RuleMetadata("foo", "bar");
+
+		// test add
+		m.addMetadata(rm);
+		assertEquals(1, m.metadataList.length);
+		assertEquals(rm, m.metadataList[0]);
+
+		// should be able to find it
+		RuleMetadata gm = m.getMetaData("foo");
+		assertNotNull(gm);
+
+		// test add and remove
+		final RuleMetadata rm2 = new RuleMetadata("foo2", "bar2");
+		m.addMetadata(rm2);
+		assertEquals(2, m.metadataList.length);
+		assertEquals(rm2, m.metadataList[1]);
+		assertEquals("@foo(bar)", rm.toString());
+
+		m.removeMetadata(0);
+		assertEquals(1, m.metadataList.length);
+		assertEquals(rm2, m.metadataList[0]);
+		assertEquals("@foo2(bar2)", (m.metadataList[0]).toString());
+
+		// should be able to find it now that it was removed
+		gm = m.getMetaData("foo");
+		assertNull(gm);
+
+		// test add via update method
+		m.updateMetadata(rm);
+		gm = m.getMetaData("foo");
+		assertNotNull(gm);
+
+		// test update of existing element
+		rm.value = "bar2";
+		m.updateMetadata(rm);
+		gm = m.getMetaData("foo");
+		assertNotNull(gm);
+		assertEquals("bar2", gm.value);
+
+	}
+
+	public void testRemoveItemLhs() {
+		final RuleModel model = new RuleModel();
+
+		model.lhs = new IPattern[3];
+		final FactPattern x = new FactPattern("Car");
+		model.lhs[0] = x;
+		x.boundName = "x";
+
+		final FactPattern y = new FactPattern("Car");
+		model.lhs[1] = y;
+		y.boundName = "y";
+
+		final FactPattern other = new FactPattern("House");
+		model.lhs[2] = other;
+
+		assertEquals(3, model.lhs.length);
+		assertEquals(x, model.lhs[0]);
+
+		model.removeLhsItem(0);
+
+		assertEquals(2, model.lhs.length);
+		assertEquals(y, model.lhs[0]);
+	}
+
+	public void testRemoveItemRhs() {
+		final RuleModel model = new RuleModel();
+
+		model.rhs = new IAction[3];
+		final ActionRetractFact r0 = new ActionRetractFact("x");
+		final ActionRetractFact r1 = new ActionRetractFact("y");
+		final ActionRetractFact r2 = new ActionRetractFact("z");
+
+		model.rhs[0] = r0;
+		model.rhs[1] = r1;
+		model.rhs[2] = r2;
+
+		model.removeRhsItem(1);
+
+		assertEquals(2, model.rhs.length);
+		assertEquals(r0, model.rhs[0]);
+		assertEquals(r2, model.rhs[1]);
+	}
+
+	public void testScopedVariables() {
+
+		// setup the data...
+
+		final RuleModel model = new RuleModel();
+		model.lhs = new IPattern[3];
+		final FactPattern x = new FactPattern("Car");
+		model.lhs[0] = x;
+		x.boundName = "x";
+
+		final FactPattern y = new FactPattern("Car");
+		model.lhs[1] = y;
+		y.boundName = "y";
+		final SingleFieldConstraint[] cons = new SingleFieldConstraint[2];
+		y.constraintList = new CompositeFieldConstraint();
+		y.constraintList.constraints = cons;
+		cons[0] = new SingleFieldConstraint("age");
+		cons[1] = new SingleFieldConstraint("make");
+		cons[0].fieldBinding = "qbc";
+		cons[0].connectives = new ConnectiveConstraint[1];
+		cons[0].connectives[0] = new ConnectiveConstraint("age", null, "&", "x");
+		cons[0].connectives[0].constraintValueType = ISingleFieldConstraint.TYPE_LITERAL;
+
+		final FactPattern other = new FactPattern("House");
+		model.lhs[2] = other;
+		other.boundName = "q";
+		final SingleFieldConstraint[] cons2 = new SingleFieldConstraint[1];
+		cons2[0] = new SingleFieldConstraint();
+		other.constraintList = new CompositeFieldConstraint();
+		other.constraintList.constraints = cons2;
+
+		// check the results for correct scope
+		List vars = model.getBoundVariablesInScope(cons[0]);
+		assertEquals(1, vars.size());
+		assertEquals("x", vars.get(0));
+
+		vars = model.getBoundVariablesInScope(cons[0].connectives[0]);
+		assertEquals(1, vars.size());
+		assertEquals("x", vars.get(0));
+
+		vars = model.getBoundVariablesInScope(cons[1]);
+		assertEquals(2, vars.size());
+		assertEquals("x", vars.get(0));
+		assertEquals("qbc", vars.get(1));
+
+		vars = model.getBoundVariablesInScope(cons[0]);
+		assertEquals(1, vars.size());
+		assertEquals("x", vars.get(0));
+
+		vars = model.getBoundVariablesInScope(cons2[0]);
+		assertEquals(3, vars.size());
+		assertEquals("x", vars.get(0));
+		assertEquals("qbc", vars.get(1));
+		assertEquals("y", vars.get(2));
+	}
+
+	public void testScopedVariablesWithCompositeFact() {
+		RuleModel m = new RuleModel();
+		FactPattern p = new FactPattern();
+		CompositeFieldConstraint cf = new CompositeFieldConstraint();
+		cf.addConstraint(new SingleFieldConstraint("x"));
+		p.addConstraint(cf);
+		SingleFieldConstraint sf = new SingleFieldConstraint("q");
+		sf.fieldBinding = "abc";
+
+		p.addConstraint(sf);
+		SingleFieldConstraint sf2 = new SingleFieldConstraint("q");
+		sf2.fieldBinding = "qed";
+		cf.addConstraint(sf2);
+		m.addLhsItem(p);
+
+		List vars = m.getAllVariables();
+		assertEquals(1, vars.size());
+		assertEquals("abc", vars.get(0));
+	}
+
+	public void testGetFieldConstraint() {
+		final RuleModel model = new RuleModel();
+		model.lhs = new IPattern[3];
+		final FactPattern x = new FactPattern("Boat");
+		model.lhs[0] = x;
+		x.boundName = "x";
+
+		final FactPattern y = new FactPattern("Car");
+		model.lhs[1] = y;
+		y.boundName = "y";
+		final SingleFieldConstraint[] cons = new SingleFieldConstraint[2];
+		y.constraintList = new CompositeFieldConstraint();
+		y.constraintList.constraints = cons;
+		cons[0] = new SingleFieldConstraint("age");
+		cons[0].fieldBinding = "qbc";
+		cons[0].fieldType = "String";
+		cons[0].connectives = new ConnectiveConstraint[1];
+		cons[0].connectives[0] = new ConnectiveConstraint("age", "String", "&", "x");
+		cons[0].connectives[0].constraintValueType = ISingleFieldConstraint.TYPE_LITERAL;
+		cons[1] = new SingleFieldConstraint("make");
+		cons[1].fieldType = "Long";
+		cons[1].connectives = new ConnectiveConstraint[1];
+		cons[1].connectives[0] = new ConnectiveConstraint("make", "Long", "=", "2");
+		cons[1].connectives[0].constraintValueType = ISingleFieldConstraint.TYPE_LITERAL;
+
+		final FactPattern other = new FactPattern("House");
+		model.lhs[2] = other;
+		other.boundName = "q";
+		final SingleFieldConstraint[] cons2 = new SingleFieldConstraint[1];
+		cons2[0] = new SingleFieldConstraint();
+		other.constraintList = new CompositeFieldConstraint();
+		other.constraintList.constraints = cons2;
+		String varTypeString = model.getFieldConstraint("qbc");
+		assertEquals("String", varTypeString);
+		String varTypeLong = model.getFieldConstraint("make");
+		assertEquals(null, varTypeLong);
+		FactPattern varTypeBoat = model.getBoundFact("x");
+		assertEquals("Boat", varTypeBoat.factType);
+		FactPattern varTypeCar = model.getBoundFact("y");
+		assertEquals("Car", varTypeCar.factType);
+	}
+
+        public void testAddItemLhsAtSpecificPosition() {
+		final RuleModel model = new RuleModel();
+
+                final FactPattern a = new FactPattern();
+		model.addLhsItem(a);
+
+                assertEquals(1, model.lhs.length);
+
+		final FactPattern b = new FactPattern();
+		model.addLhsItem(b);
+
+		assertEquals(2, model.lhs.length);
+
+                final FactPattern c = new FactPattern();
+		model.addLhsItem(c,true);
+
+		assertEquals(3, model.lhs.length);
+
+		assertEquals(a, model.lhs[0]);
+		assertEquals(b, model.lhs[1]);
+		assertEquals(c, model.lhs[2]);
+
+                final FactPattern d = new FactPattern();
+		model.addLhsItem(d,false);
+
+                assertEquals(4, model.lhs.length);
+
+		assertEquals(d, model.lhs[0]);
+		assertEquals(a, model.lhs[1]);
+		assertEquals(b, model.lhs[2]);
+		assertEquals(c, model.lhs[3]);
+
+                final FactPattern e = new FactPattern();
+		model.addLhsItem(e,2);
+
+                assertEquals(5, model.lhs.length);
+
+		assertEquals(d, model.lhs[0]);
+		assertEquals(a, model.lhs[1]);
+		assertEquals(e, model.lhs[2]);
+		assertEquals(b, model.lhs[3]);
+		assertEquals(c, model.lhs[4]);
+
+                //test auto-bound
+                final FactPattern f = new FactPattern();
+                final FactPattern g = new FactPattern();
+		model.addLhsItem(f,-1);
+		model.addLhsItem(g,100);
+
+                assertEquals(7, model.lhs.length);
+
+		assertEquals(f, model.lhs[0]);
+		assertEquals(d, model.lhs[1]);
+		assertEquals(a, model.lhs[2]);
+		assertEquals(e, model.lhs[3]);
+		assertEquals(b, model.lhs[4]);
+		assertEquals(c, model.lhs[5]);
+		assertEquals(g, model.lhs[6]);
+
+                model.moveLhsItemDown(5);
+                model.moveLhsItemUp(3);
+
+                assertEquals(7, model.lhs.length);
+
+		assertEquals(f, model.lhs[0]);
+		assertEquals(d, model.lhs[1]);
+		assertEquals(e, model.lhs[2]);
+		assertEquals(a, model.lhs[3]);
+		assertEquals(b, model.lhs[4]);
+		assertEquals(g, model.lhs[5]);
+		assertEquals(c, model.lhs[6]);
+
+                model.moveLhsItemUp(0);
+                model.moveLhsItemDown(6);
+
+                assertEquals(7, model.lhs.length);
+
+		assertEquals(f, model.lhs[0]);
+		assertEquals(d, model.lhs[1]);
+		assertEquals(e, model.lhs[2]);
+		assertEquals(a, model.lhs[3]);
+		assertEquals(b, model.lhs[4]);
+		assertEquals(g, model.lhs[5]);
+		assertEquals(c, model.lhs[6]);
+
+	}
+
+        public void testAddItemRhsAtSpecificPosition() {
+		final RuleModel model = new RuleModel();
+
+                final ActionSetField a = new ActionSetField();
+		model.addRhsItem(a);
+
+                assertEquals(1, model.rhs.length);
+
+		final ActionSetField b = new ActionSetField();
+		model.addRhsItem(b);
+
+		assertEquals(2, model.rhs.length);
+
+                final ActionSetField c = new ActionSetField();
+		model.addRhsItem(c,true);
+
+		assertEquals(3, model.rhs.length);
+
+		assertEquals(a, model.rhs[0]);
+		assertEquals(b, model.rhs[1]);
+		assertEquals(c, model.rhs[2]);
+
+                final ActionSetField d = new ActionSetField();
+		model.addRhsItem(d,false);
+
+                assertEquals(4, model.rhs.length);
+
+		assertEquals(d, model.rhs[0]);
+		assertEquals(a, model.rhs[1]);
+		assertEquals(b, model.rhs[2]);
+		assertEquals(c, model.rhs[3]);
+
+                final ActionSetField e = new ActionSetField();
+		model.addRhsItem(e,2);
+
+                assertEquals(5, model.rhs.length);
+
+		assertEquals(d, model.rhs[0]);
+		assertEquals(a, model.rhs[1]);
+		assertEquals(e, model.rhs[2]);
+		assertEquals(b, model.rhs[3]);
+		assertEquals(c, model.rhs[4]);
+
+                //test auto-bound
+                final ActionSetField f = new ActionSetField();
+                final ActionSetField g = new ActionSetField();
+		model.addRhsItem(f,-1);
+		model.addRhsItem(g,100);
+
+                assertEquals(7, model.rhs.length);
+
+		assertEquals(f, model.rhs[0]);
+		assertEquals(d, model.rhs[1]);
+		assertEquals(a, model.rhs[2]);
+		assertEquals(e, model.rhs[3]);
+		assertEquals(b, model.rhs[4]);
+		assertEquals(c, model.rhs[5]);
+		assertEquals(g, model.rhs[6]);
+
+                model.moveRhsItemDown(5);
+                model.moveRhsItemUp(3);
+
+                assertEquals(7, model.rhs.length);
+
+		assertEquals(f, model.rhs[0]);
+		assertEquals(d, model.rhs[1]);
+		assertEquals(e, model.rhs[2]);
+		assertEquals(a, model.rhs[3]);
+		assertEquals(b, model.rhs[4]);
+		assertEquals(g, model.rhs[5]);
+		assertEquals(c, model.rhs[6]);
+
+                model.moveRhsItemUp(0);
+                model.moveRhsItemDown(6);
+
+                assertEquals(7, model.rhs.length);
+
+		assertEquals(f, model.rhs[0]);
+		assertEquals(d, model.rhs[1]);
+		assertEquals(e, model.rhs[2]);
+		assertEquals(a, model.rhs[3]);
+		assertEquals(b, model.rhs[4]);
+		assertEquals(g, model.rhs[5]);
+		assertEquals(c, model.rhs[6]);
+
+	}
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,15 @@
+package org.drools.guvnor.modeldriven;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SampleDataSource {
+
+	public static List getData() {
+		return new ArrayList() {{
+			add("Hello");
+			add("World");
+		}};
+	}
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource2.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource2.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource2.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/SampleDataSource2.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,21 @@
+package org.drools.guvnor.modeldriven;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SampleDataSource2 {
+
+	public Map loadData() {
+		Map data = new HashMap();
+
+		List d = new ArrayList();
+		d.add("hey");
+		d.add("ho");
+		data.put("whee", d);
+
+		return data;
+	}
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/dt (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/dt)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/package.html (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/modeldriven/package.html)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/package.html	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/modeldriven/package.html	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,10 @@
+<body>
+This contains utilities and widgets for the model driven/scorecard style way of
+editing a rule.
+
+This has the interesting feature of being able to work over standard DRL, no special markup needed.
+Its actually a subset of DRL, complex structures and semantics can not be supported.
+
+However, this can be augmented with DSLs which can express any construct needed.
+
+</body>
\ No newline at end of file

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/server/converter (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/server/converter)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/server/rules (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/server/rules)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/guvnor/server/util (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/guvnor/server/util)

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/FactDataTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/FactDataTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/FactDataTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/FactDataTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,19 @@
+package org.drools.testframework;
+
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.testing.FactData;
+import org.drools.guvnor.client.modeldriven.testing.FieldData;
+
+public class FactDataTest extends TestCase {
+	public void testAdd() {
+		FactData fd = new FactData("x", "y", new ArrayList(), false );
+		assertEquals(0, fd.fieldData.size());
+		fd.fieldData.add(new FieldData("x", "y"));
+		assertEquals(1, fd.fieldData.size());
+		fd.fieldData.add(new FieldData("q", "x"));
+		assertEquals(2, fd.fieldData.size());
+	}
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/RuleUnit.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/RuleUnit.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/RuleUnit.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/RuleUnit.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,35 @@
+package org.drools.testframework;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+
+/**
+ * A class with some utilities for testing rules.
+ * @author Michael Neale
+ *
+ */
+public abstract class RuleUnit extends TestCase {
+
+	/**
+	 * Return a wm ready to go based on the rules in a drl at the specified uri (in the classpath).
+	 */
+	public StatefulSession getWorkingMemory(String uri)
+			throws DroolsParserException, IOException, Exception {
+		PackageBuilder builder = new PackageBuilder();
+		builder.addPackageFromDrl(new InputStreamReader(this.getClass()
+				.getResourceAsStream(uri)));
+		assertFalse(builder.getErrors().toString(), builder.hasErrors());
+		RuleBase rb = RuleBaseFactory.newRuleBase();
+		rb.addPackage(builder.getPackage());
+
+		return rb.newStatefulSession();
+	}
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,1487 @@
+package org.drools.testframework;
+
+import static org.mvel2.MVEL.eval;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.*;
+import org.drools.base.ClassTypeResolver;
+import org.drools.base.TypeResolver;
+import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.guvnor.client.modeldriven.testing.ActivateRuleFlowGroup;
+import org.drools.guvnor.client.modeldriven.testing.ExecutionTrace;
+import org.drools.guvnor.client.modeldriven.testing.Expectation;
+import org.drools.guvnor.client.modeldriven.testing.FactData;
+import org.drools.guvnor.client.modeldriven.testing.FieldData;
+import org.drools.guvnor.client.modeldriven.testing.Fixture;
+import org.drools.guvnor.client.modeldriven.testing.RetractFact;
+import org.drools.guvnor.client.modeldriven.testing.Scenario;
+import org.drools.guvnor.client.modeldriven.testing.VerifyFact;
+import org.drools.guvnor.client.modeldriven.testing.VerifyField;
+import org.drools.guvnor.client.modeldriven.testing.VerifyRuleFired;
+import org.drools.guvnor.server.util.ScenarioXMLPersistence;
+import org.drools.rule.TimeMachine;
+import org.mvel2.MVEL;
+
+public class ScenarioRunnerTest extends RuleUnit {
+
+    static {
+        try {
+            Class.forName( "org.drools.base.mvel.MVELCompilationUnit" );
+        } catch ( ClassNotFoundException e ) {
+            e.printStackTrace();
+        }
+    }
+
+    public void setUp() {
+        //needed when running stand alone to make sure the converters get loaded.
+        DroolsMVELFactory d = new DroolsMVELFactory();
+    }
+
+    public void testPopulateFactsWithInterfaces() throws Exception {
+        Scenario sc = new Scenario();
+        List facts = ls( new FactData( "List",
+                                       "ls",
+                                       new ArrayList(),
+                                       false ) );
+
+        List globals = ls( new FactData( "List",
+                                         "ls",
+                                         new ArrayList(),
+                                         false ) );
+        sc.fixtures.addAll( facts );
+        sc.globals.addAll( globals );
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "java.util.List" );
+
+        ScenarioRunner runner = new ScenarioRunner( sc,
+                                                    resolver,
+                                                    new MockWorkingMemory() );
+
+    }
+
+    public void testPopulateFacts() throws Exception {
+        Scenario sc = new Scenario();
+        List facts = ls( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "type",
+                                                          "cheddar" ),
+                                           new FieldData( "price",
+                                                          "42" ) ),
+                                       false ),
+                         new FactData( "Person",
+                                       "p1",
+                                       ls( new FieldData( "name",
+                                                          "mic" ),
+                                           new FieldData( "age",
+                                                          "=30 + 3" ) ),
+                                       false ) );
+
+        sc.fixtures.addAll( facts );
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        resolver.addImport( "org.drools.Person" );
+        ScenarioRunner runner = new ScenarioRunner( sc,
+                                                    resolver,
+                                                    new MockWorkingMemory() );
+
+        assertTrue( runner.populatedData.containsKey( "c1" ) );
+        assertTrue( runner.populatedData.containsKey( "p1" ) );
+
+        Cheese c = (Cheese) runner.populatedData.get( "c1" );
+        assertEquals( "cheddar",
+                      c.getType() );
+        assertEquals( 42,
+                      c.getPrice() );
+
+        Person p = (Person) runner.populatedData.get( "p1" );
+        assertEquals( "mic",
+                      p.getName() );
+        assertEquals( 33,
+                      p.getAge() );
+
+    }
+
+    public void testPopulateNested() throws Exception {
+        Scenario sc = new Scenario();
+        List facts = ls( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "type",
+                                                          "cheddar" ),
+                                           new FieldData( "price",
+                                                          "42" ) ),
+                                       false ),
+                         new FactData( "OuterFact",
+                                       "p1",
+                                       ls( new FieldData( "name",
+                                                          "mic" ),
+                                           new FieldData( "innerFact",
+                                                          "=c1" ) ),
+                                       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() );
+
+    }
+
+    /**
+     * 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",
+                                       "c1",
+                                       new ArrayList(),
+                                       false ) );
+        sc.fixtures.addAll( facts );
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        sc.fixtures.addAll( facts );
+        resolver.addImport( "org.drools.Cheese" );
+        ScenarioRunner runner = new ScenarioRunner( sc,
+                                                    resolver,
+                                                    new MockWorkingMemory() );
+
+        assertTrue( runner.populatedData.containsKey( "c1" ) );
+        assertTrue( runner.populatedData.get( "c1" ) instanceof Cheese );
+    }
+
+    public void testDateField() throws Exception {
+        Scenario sc = new Scenario();
+        List facts = ls( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "type",
+                                                          "cheddar" ),
+                                           new FieldData( "usedBy",
+                                                          "10-Jul-2008" ) ),
+                                       false ),
+                         new FactData( "OuterFact",
+                                       "p1",
+                                       ls( new FieldData( "name",
+                                                          "mic" ),
+                                           new FieldData( "innerFact",
+                                                          "=c1" ) ),
+                                       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" ) );
+
+        Cheese c = (Cheese) runner.populatedData.get( "c1" );
+        assertNotNull( c.getUsedBy() );
+
+    }
+
+    public void testPopulateFactsWithExpressions() throws Exception {
+        Scenario sc = new Scenario();
+        List facts = ls( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "type",
+                                                          "cheddar" ),
+                                           new FieldData( "price",
+                                                          "42" ) ),
+                                       false ),
+                         new FactData( "Cheese",
+                                       "c2",
+                                       ls( new FieldData( "type",
+                                                          "= c1.type" ) ),
+                                       false ) );
+
+        sc.fixtures.addAll( facts );
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+
+        ScenarioRunner runner = new ScenarioRunner( sc,
+                                                    resolver,
+                                                    new MockWorkingMemory() );
+
+        assertTrue( runner.populatedData.containsKey( "c1" ) );
+        assertTrue( runner.populatedData.containsKey( "c2" ) );
+
+        Cheese c = (Cheese) runner.populatedData.get( "c1" );
+        assertEquals( "cheddar",
+                      c.getType() );
+        assertEquals( 42,
+                      c.getPrice() );
+
+        Cheese c2 = (Cheese) runner.populatedData.get( "c2" );
+        assertEquals( c.getType(),
+                      c2.getType() );
+
+    }
+
+    public void testPopulateNoData() throws Exception {
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       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",
+                                    ls( new FieldData( "type",
+                                                       "" ),
+                                        new FieldData( "price",
+                                                       "42" ) ),
+                                    false );
+
+        run.populateFields( fd,
+                            run.populatedData,
+                            c );
+        assertEquals( "whee",
+                      c.getType() );
+        assertEquals( 42,
+                      c.getPrice() );
+    }
+
+    public void testVerifyFacts() throws Exception {
+
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+        Cheese f1 = new Cheese( "cheddar",
+                                42 );
+        runner.populatedData.put( "f1",
+                                  f1 );
+
+        Person f2 = new Person( "michael",
+                                33 );
+        runner.populatedData.put( "f2",
+                                  f2 );
+
+        // test all true
+        VerifyFact vf = new VerifyFact();
+        vf.name = "f1";
+        vf.fieldValues = ls( new VerifyField( "type",
+                                              "cheddar",
+                                              "==" ),
+                             new VerifyField( "price",
+                                              "42",
+                                              "==" ) );
+
+        runner.verify( vf );
+        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
+            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
+        }
+
+        vf = new VerifyFact();
+        vf.name = "f2";
+        vf.fieldValues = ls( new VerifyField( "name",
+                                              "michael",
+                                              "==" ),
+                             new VerifyField( "age",
+                                              "33",
+                                              "==" ) );
+
+        runner.verify( vf );
+        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
+            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
+        }
+
+        // test one false
+        vf = new VerifyFact();
+        vf.name = "f2";
+        vf.fieldValues = ls( new VerifyField( "name",
+                                              "mark",
+                                              "==" ),
+                             new VerifyField( "age",
+                                              "33",
+                                              "==" ) );
+
+        runner.verify( vf );
+        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
+        assertTrue( ((VerifyField) vf.fieldValues.get( 1 )).successResult );
+
+        assertEquals( "michael",
+                      ((VerifyField) vf.fieldValues.get( 0 )).actualResult );
+        assertEquals( "mark",
+                      ((VerifyField) vf.fieldValues.get( 0 )).expected );
+
+        // test 2 false
+        vf = new VerifyFact();
+        vf.name = "f2";
+        vf.fieldValues = ls( new VerifyField( "name",
+                                              "mark",
+                                              "==" ),
+                             new VerifyField( "age",
+                                              "32",
+                                              "==" ) );
+
+        runner.verify( vf );
+        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
+        assertFalse( ((VerifyField) vf.fieldValues.get( 1 )).successResult );
+
+        assertEquals( "michael",
+                      ((VerifyField) vf.fieldValues.get( 0 )).actualResult );
+        assertEquals( "mark",
+                      ((VerifyField) vf.fieldValues.get( 0 )).expected );
+
+        assertEquals( "33",
+                      ((VerifyField) vf.fieldValues.get( 1 )).actualResult );
+        assertEquals( "32",
+                      ((VerifyField) vf.fieldValues.get( 1 )).expected );
+
+    }
+
+    public void testVerifyAnonymousFacts() throws Exception {
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    wm );
+
+        Cheese c = new Cheese();
+        c.setPrice( 42 );
+        c.setType( "stilton" );
+
+        wm.facts.add( c );
+
+        VerifyFact vf = new VerifyFact( "Cheese",
+                                        new ArrayList(),
+                                        true );
+        vf.fieldValues.add( new VerifyField( "price",
+                                             "42",
+                                             "==" ) );
+        vf.fieldValues.add( new VerifyField( "type",
+                                             "stilton",
+                                             "==" ) );
+
+        runner.verify( vf );
+
+        assertTrue( vf.wasSuccessful() );
+
+        vf = new VerifyFact( "Person",
+                             new ArrayList(),
+                             true );
+        vf.fieldValues.add( new VerifyField( "age",
+                                             "42",
+                                             "==" ) );
+
+        runner.verify( vf );
+
+        assertFalse( vf.wasSuccessful() );
+
+        vf = new VerifyFact( "Cheese",
+                             new ArrayList(),
+                             true );
+        vf.fieldValues.add( new VerifyField( "price",
+                                             "43",
+                                             "==" ) );
+        vf.fieldValues.add( new VerifyField( "type",
+                                             "stilton",
+                                             "==" ) );
+
+        runner.verify( vf );
+        assertFalse( vf.wasSuccessful() );
+        assertEquals( Boolean.FALSE,
+                      ((VerifyField) vf.fieldValues.get( 0 )).successResult );
+
+        vf = new VerifyFact( "Cell",
+                             new ArrayList(),
+                             true );
+        vf.fieldValues.add( new VerifyField( "value",
+                                             "43",
+                                             "==" ) );
+
+        runner.verify( vf );
+        assertFalse( vf.wasSuccessful() );
+        assertEquals( Boolean.FALSE,
+                      ((VerifyField) vf.fieldValues.get( 0 )).successResult );
+
+    }
+
+    public void testVerifyFactsWithOperator() throws Exception {
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+        Cheese f1 = new Cheese( "cheddar",
+                                42 );
+        runner.populatedData.put( "f1",
+                                  f1 );
+
+        // test all true
+        VerifyFact vf = new VerifyFact();
+        vf.name = "f1";
+        vf.fieldValues = ls( new VerifyField( "type",
+                                              "cheddar",
+                                              "==" ),
+                             new VerifyField( "price",
+                                              "4777",
+                                              "!=" ) );
+        runner.verify( vf );
+        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
+            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
+        }
+
+        vf = new VerifyFact();
+        vf.name = "f1";
+        vf.fieldValues = ls( new VerifyField( "type",
+                                              "cheddar",
+                                              "!=" ) );
+        runner.verify( vf );
+        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
+
+    }
+
+    public void testVerifyFactsWithExpression() throws Exception {
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+        Cheese f1 = new Cheese( "cheddar",
+                                42 );
+        runner.populatedData.put( "f1",
+                                  f1 );
+        f1.setPrice( 42 );
+        // test all true
+        VerifyFact vf = new VerifyFact();
+        vf.name = "f1";
+        vf.fieldValues = ls( new VerifyField( "price",
+                                              "= 40 + 2",
+                                              "==" ) );
+        runner.verify( vf );
+
+        assertTrue( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
+    }
+
+    public void testVerifyFactExplanation() throws Exception {
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+        Cheese f1 = new Cheese();
+        f1.setType( null );
+        runner.populatedData.put( "f1",
+                                  f1 );
+
+        VerifyFact vf = new VerifyFact();
+        vf.name = "f1";
+        vf.fieldValues.add( new VerifyField( "type",
+                                             "boo",
+                                             "!=" ) );
+
+        runner.verify( vf );
+        VerifyField vfl = (VerifyField) vf.fieldValues.get( 0 );
+        assertEquals( "[f1] field [type] was not [boo].",
+                      vfl.explanation );
+
+    }
+
+    public void testVerifyFieldAndActualIsNull() throws Exception {
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+        Cheese f1 = new Cheese();
+        f1.setType( null );
+        runner.populatedData.put( "f1",
+                                  f1 );
+
+        VerifyFact vf = new VerifyFact();
+        vf.name = "f1";
+        vf.fieldValues.add( new VerifyField( "type",
+                                             "boo",
+                                             "==" ) );
+
+        runner.verify( vf );
+        VerifyField vfl = (VerifyField) vf.fieldValues.get( 0 );
+
+        assertEquals( "[f1] field [type] was [] expected [boo].",
+                      vfl.explanation );
+        assertEquals( "boo",
+                      vfl.expected );
+        assertEquals( "",
+                      vfl.actualResult );
+
+    }
+
+    public void testDummyRunNoRules() throws Exception {
+        Scenario sc = new Scenario();
+        FactData[] facts = new FactData[]{new FactData( "Cheese",
+                                                        "c1",
+                                                        ls( new FieldData( "type",
+                                                                           "cheddar" ),
+                                                            new FieldData( "price",
+                                                                           "42" ) ),
+                                                        false )};
+
+        VerifyFact[] assertions = new VerifyFact[]{new VerifyFact( "c1",
+                                                                   ls( new VerifyField( "type",
+                                                                                        "cheddar",
+                                                                                        "==" ),
+                                                                       new VerifyField( "price",
+                                                                                        "42",
+                                                                                        "==" ) ) )};
+
+        sc.fixtures.addAll( Arrays.asList( facts ) );
+        sc.fixtures.addAll( Arrays.asList( assertions ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner runner = new ScenarioRunner( sc,
+                                                    resolver,
+                                                    wm );
+        assertEquals( 1,
+                      wm.facts.size() );
+        assertEquals( runner.populatedData.get( "c1" ),
+                      wm.facts.get( 0 ) );
+
+        assertTrue( runner.populatedData.containsKey( "c1" ) );
+        VerifyFact vf = (VerifyFact) assertions[0];
+        for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
+            assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
+        }
+
+    }
+
+    public void testCountVerification() throws Exception {
+
+        Map<String, Integer> firingCounts = new HashMap<String, Integer>();
+        firingCounts.put( "foo",
+                          2 );
+        firingCounts.put( "bar",
+                          1 );
+        // and baz, we leave out
+
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+        VerifyRuleFired v = new VerifyRuleFired();
+        v.ruleName = "foo";
+        v.expectedFire = true;
+        runner.verify( v,
+                       firingCounts );
+        assertTrue( v.successResult );
+        assertEquals( 2,
+                      v.actualResult.intValue() );
+
+        v = new VerifyRuleFired();
+        v.ruleName = "foo";
+        v.expectedFire = false;
+        runner.verify( v,
+                       firingCounts );
+        assertFalse( v.successResult );
+        assertEquals( 2,
+                      v.actualResult.intValue() );
+        assertNotNull( v.explanation );
+
+        v = new VerifyRuleFired();
+        v.ruleName = "foo";
+        v.expectedCount = 2;
+
+        runner.verify( v,
+                       firingCounts );
+        assertTrue( v.successResult );
+        assertEquals( 2,
+                      v.actualResult.intValue() );
+
+    }
+
+    public void testTestingEventListener() throws Exception {
+        Scenario sc = new Scenario();
+        sc.rules.add( "foo" );
+        sc.rules.add( "bar" );
+        ExecutionTrace ext = new ExecutionTrace();
+
+        sc.fixtures.add( ext );
+
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 null,
+                                                 wm );
+        assertEquals( wm,
+                      run.workingMemory );
+        assertNotNull( wm.agendaEventListener );
+        assertTrue( wm.agendaEventListener instanceof TestingEventListener );
+        TestingEventListener lnr = (TestingEventListener) wm.agendaEventListener;
+        assertEquals( 2,
+                      sc.rules.size() );
+        assertTrue( sc.rules.contains( "foo" ) );
+        assertTrue( sc.rules.contains( "bar" ) );
+    }
+
+    public void testWithGlobals() throws Exception {
+        Scenario sc = new Scenario();
+        FactData[] facts = new FactData[]{new FactData( "Cheese",
+                                                        "c2",
+                                                        ls( new FieldData( "type",
+                                                                           "stilton" ) ),
+                                                        false )};
+        sc.globals.add( new FactData( "Cheese",
+                                      "c",
+                                      ls( new FieldData( "type",
+                                                         "cheddar" ) ),
+                                      false ) );
+        sc.fixtures.addAll( Arrays.asList( facts ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 wm );
+        assertEquals( 1,
+                      wm.globals.size() );
+        assertEquals( 1,
+                      run.globalData.size() );
+        assertEquals( 1,
+                      run.populatedData.size() );
+        assertEquals( 1,
+                      wm.facts.size() );
+
+        Cheese c = (Cheese) wm.globals.get( "c" );
+        assertEquals( "cheddar",
+                      c.getType() );
+        Cheese c2 = (Cheese) wm.facts.get( 0 );
+        assertEquals( "stilton",
+                      c2.getType() );
+
+    }
+
+    /**
+     * Check if global list is empty.
+     */
+    public void testWithGlobalList() throws Exception {
+        Scenario sc = new Scenario();
+        sc.globals.add( new FactData( "List",
+                                      "testList",
+                                      new ArrayList(),
+                                      false ) );
+
+        Expectation[] assertions = new Expectation[2];
+
+        assertions[0] = new VerifyFact( "testList",
+                                        ls( new VerifyField( "empty",
+                                                             "true",
+                                                             "==" ) ) );
+        assertions[1] = new VerifyFact( "testList",
+                                        ls( new VerifyField( "size",
+                                                             "0",
+                                                             "==" ) ) );
+
+        sc.fixtures.addAll( Arrays.asList( assertions ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "java.util.List" );
+
+        MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 wm );
+
+        List testList = (List) wm.globals.get( "testList" );
+        assertTrue( testList.isEmpty() );
+        assertEquals( 0,
+                      testList.size() );
+    }
+
+    @SuppressWarnings("deprecation")
+    // F**** dates in java. What a mess. Someone should die.
+    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 );
+
+        ExecutionTrace ext = new ExecutionTrace();
+        ext.scenarioSimulatedDate = new Date( "10-Jul-1974" );
+        sc.fixtures.add( ext );
+        run = new ScenarioRunner( sc,
+                                  null,
+                                  wm );
+        tm = run.workingMemory.getTimeMachine();
+
+        long expected = ext.scenarioSimulatedDate.getTime();
+        assertEquals( expected,
+                      tm.getNow().getTimeInMillis() );
+        Thread.sleep( 50 );
+        assertEquals( expected,
+                      tm.getNow().getTimeInMillis() );
+
+    }
+
+    public void testVerifyRuleFired() throws Exception {
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+
+        VerifyRuleFired vr = new VerifyRuleFired( "qqq",
+                                                  42,
+                                                  null );
+        Map<String, Integer> f = new HashMap<String, Integer>();
+        f.put( "qqq",
+               42 );
+        f.put( "qaz",
+               1 );
+
+        runner.verify( vr,
+                       f );
+        assertTrue( vr.wasSuccessful() );
+        assertEquals( 42,
+                      vr.actualResult.intValue() );
+
+        vr = new VerifyRuleFired( "qqq",
+                                  41,
+                                  null );
+        runner.verify( vr,
+                       f );
+        assertFalse( vr.wasSuccessful() );
+        assertEquals( 42,
+                      vr.actualResult.intValue() );
+
+        vr = new VerifyRuleFired( "qaz",
+                                  1,
+                                  null );
+        runner.verify( vr,
+                       f );
+        assertTrue( vr.wasSuccessful() );
+        assertEquals( 1,
+                      vr.actualResult.intValue() );
+
+        vr = new VerifyRuleFired( "XXX",
+                                  null,
+                                  false );
+        runner.verify( vr,
+                       f );
+        assertTrue( vr.wasSuccessful() );
+        assertEquals( 0,
+                      vr.actualResult.intValue() );
+
+        vr = new VerifyRuleFired( "qqq",
+                                  null,
+                                  true );
+        runner.verify( vr,
+                       f );
+        assertTrue( vr.wasSuccessful() );
+        assertEquals( 42,
+                      vr.actualResult.intValue() );
+
+        vr = new VerifyRuleFired( "qqq",
+                                  null,
+                                  false );
+        runner.verify( vr,
+                       f );
+        assertFalse( vr.wasSuccessful() );
+        assertEquals( 42,
+                      vr.actualResult.intValue() );
+
+    }
+
+    /**
+     * Do a kind of end to end test with some real rules.
+     */
+    public void testIntegrationWithSuccess() throws Exception {
+
+        Scenario sc = new Scenario();
+        FactData[] facts = new FactData[]{new FactData( "Cheese",
+                                                        "c1",
+                                                        ls( new FieldData( "type",
+                                                                           "cheddar" ),
+                                                            new FieldData( "price",
+                                                                           "42" ) ),
+                                                        false )
+
+        };
+        sc.globals.add( new FactData( "Person",
+                                      "p",
+                                      new ArrayList(),
+                                      false ) );
+        sc.fixtures.addAll( Arrays.asList( facts ) );
+
+        ExecutionTrace executionTrace = new ExecutionTrace();
+
+        sc.rules.add( "rule1" );
+        sc.rules.add( "rule2" );
+        sc.inclusive = true;
+        sc.fixtures.add( executionTrace );
+
+        Expectation[] assertions = new Expectation[5];
+
+        assertions[0] = new VerifyFact( "c1",
+                                        ls( new VerifyField( "type",
+                                                             "cheddar",
+                                                             "==" )
+
+                                        ) );
+
+        assertions[1] = new VerifyFact( "p",
+                                        ls( new VerifyField( "name",
+                                                             "rule1",
+                                                             "==" ),
+                                            new VerifyField( "status",
+                                                             "rule2",
+                                                             "==" ) )
+
+        );
+
+        assertions[2] = new VerifyRuleFired( "rule1",
+                                             1,
+                                             null );
+        assertions[3] = new VerifyRuleFired( "rule2",
+                                             1,
+                                             null );
+        assertions[4] = new VerifyRuleFired( "rule3",
+                                             0,
+                                             null );
+
+        sc.fixtures.addAll( Arrays.asList( assertions ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        resolver.addImport( "org.drools.Person" );
+
+        WorkingMemory wm = getWorkingMemory( "test_rules2.drl" );
+
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        assertEquals( 2,
+                      executionTrace.numberOfRulesFired.intValue() );
+
+        assertSame( run.scenario,
+                    sc );
+
+        assertTrue( sc.wasSuccessful() );
+
+        Person p = (Person) run.globalData.get( "p" );
+        assertEquals( "rule1",
+                      p.getName() );
+        assertEquals( "rule2",
+                      p.getStatus() );
+        assertEquals( 0,
+                      p.getAge() );
+
+        Thread.sleep( 50 );
+
+        assertTrue( (new Date()).after( sc.lastRunResult ) );
+        assertTrue( executionTrace.executionTimeResult != null );
+
+        assertTrue( executionTrace.rulesFired.length > 0 );
+
+    }
+
+    public void testIntegrationInfiniteLoop() throws Exception {
+
+        Scenario sc = new Scenario();
+        FactData[] facts = new FactData[]{new FactData( "Cheese",
+                                                        "c1",
+                                                        ls( new FieldData( "type",
+                                                                           "cheddar" ),
+                                                            new FieldData( "price",
+                                                                           "42" ) ),
+                                                        false )
+
+        };
+        sc.globals.add( new FactData( "Person",
+                                      "p",
+                                      new ArrayList(),
+                                      false ) );
+        sc.fixtures.addAll( Arrays.asList( facts ) );
+
+        ExecutionTrace executionTrace = new ExecutionTrace();
+
+        sc.rules.add( "rule1" );
+        sc.rules.add( "rule2" );
+        sc.inclusive = true;
+        sc.fixtures.add( executionTrace );
+
+        Expectation[] assertions = new Expectation[5];
+
+        assertions[0] = new VerifyFact( "c1",
+                                        ls( new VerifyField( "type",
+                                                             "cheddar",
+                                                             "==" )
+
+                                        ) );
+
+        assertions[1] = new VerifyFact( "p",
+                                        ls( new VerifyField( "name",
+                                                             "rule1",
+                                                             "==" ),
+                                            new VerifyField( "status",
+                                                             "rule2",
+                                                             "==" ) )
+
+        );
+
+        assertions[2] = new VerifyRuleFired( "rule1",
+                                             1,
+                                             null );
+        assertions[3] = new VerifyRuleFired( "rule2",
+                                             1,
+                                             null );
+        assertions[4] = new VerifyRuleFired( "rule3",
+                                             0,
+                                             null );
+
+        sc.fixtures.addAll( Arrays.asList( assertions ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        resolver.addImport( "org.drools.Person" );
+
+        WorkingMemory wm = getWorkingMemory( "test_rules_infinite_loop.drl" );
+
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        assertEquals( sc.maxRuleFirings,
+                      executionTrace.numberOfRulesFired.intValue() );
+
+    }
+
+    public void testIntegrationWithDeclaredTypes() throws Exception {
+        Scenario sc = new Scenario();
+        FactData[] facts = new FactData[]{new FactData( "Coolness",
+                                                        "c",
+                                                        ls( new FieldData( "num",
+                                                                           "42" ),
+                                                            new FieldData( "name",
+                                                                           "mic" ) ),
+                                                        false )
+
+        };
+        sc.fixtures.addAll( Arrays.asList( facts ) );
+
+        ExecutionTrace executionTrace = new ExecutionTrace();
+
+        sc.rules.add( "rule1" );
+        sc.inclusive = true;
+        sc.fixtures.add( executionTrace );
+
+        Expectation[] assertions = new Expectation[2];
+
+        assertions[0] = new VerifyFact( "c",
+                                        ls( new VerifyField( "num",
+                                                             "42",
+                                                             "==" )
+
+                                        ) );
+
+        assertions[1] = new VerifyRuleFired( "rule1",
+                                             1,
+                                             null );
+
+        sc.fixtures.addAll( Arrays.asList( assertions ) );
+
+        WorkingMemory wm = getWorkingMemory( "test_rules3.drl" );
+        ClassLoader cl = ((InternalRuleBase) wm.getRuleBase()).getRootClassLoader();
+
+        HashSet<String> imports = new HashSet<String>();
+        imports.add( "foo.bar.*" );
+
+        TypeResolver resolver = new ClassTypeResolver( imports,
+                                                       cl );
+
+        Class cls = cl.loadClass( "foo.bar.Coolness" );
+        assertNotNull( cls );
+
+        ClassLoader cl_ = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader( cl );
+
+        //resolver will need to have generated beans in it - possibly using a composite classloader from the package,
+        //including whatever CL has the generated beans...
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        assertEquals( 1,
+                      executionTrace.numberOfRulesFired.intValue() );
+
+        assertSame( run.scenario,
+                    sc );
+
+        assertTrue( sc.wasSuccessful() );
+
+        Thread.currentThread().setContextClassLoader( cl_ );
+
+    }
+
+    public void testRuleFlowGroupActivation() throws Exception {
+        Scenario sc = new Scenario();
+        Fixture[] given = new Fixture[]{new FactData( "Coolness",
+                                                      "c",
+                                                      ls( new FieldData( "num",
+                                                                         "42" ),
+                                                          new FieldData( "name",
+                                                                         "mic" ) ),
+                                                      false )
+
+        };
+        sc.fixtures.addAll( Arrays.asList( given ) );
+
+        ExecutionTrace executionTrace = new ExecutionTrace();
+
+        sc.rules.add( "rule1" );
+        sc.inclusive = true;
+        sc.fixtures.add( executionTrace );
+
+        Expectation[] assertions = new Expectation[2];
+
+        assertions[0] = new VerifyFact( "c",
+                                        ls( new VerifyField( "num",
+                                                             "42",
+                                                             "==" ) ) );
+
+        assertions[1] = new VerifyRuleFired( "rule1",
+                                             1,
+                                             null );
+
+        sc.fixtures.addAll( Arrays.asList( assertions ) );
+
+        WorkingMemory wm = getWorkingMemory( "rule_flow_actication.drl" );
+        ClassLoader cl = ((InternalRuleBase) wm.getRuleBase()).getRootClassLoader();
+
+        HashSet<String> imports = new HashSet<String>();
+        imports.add( "foo.bar.*" );
+
+        TypeResolver resolver = new ClassTypeResolver( imports,
+                                                       cl );
+
+        Class cls = cl.loadClass( "foo.bar.Coolness" );
+        assertNotNull( cls );
+
+        ClassLoader cl_ = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader( cl );
+
+        //resolver will need to have generated beans in it - possibly using a composite classloader from the package,
+        //including whatever CL has the generated beans...
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        assertEquals( 0,
+                      executionTrace.numberOfRulesFired.intValue() );
+
+        assertSame( run.scenario,
+                    sc );
+
+        assertFalse( sc.wasSuccessful() );
+
+
+        // Activate rule flow
+        sc.fixtures.clear();
+        given = new Fixture[]{new FactData( "Coolness",
+                                            "c",
+                                            ls( new FieldData( "num",
+                                                               "42" ),
+                                                new FieldData( "name",
+                                                               "mic" ) ),
+                                            false ), new ActivateRuleFlowGroup( "asdf" )
+
+        };
+        wm.clearAgenda();
+        sc.fixtures.addAll( Arrays.asList( given ) );
+        sc.fixtures.add( executionTrace );
+        run = new ScenarioRunner( sc,
+                                  resolver,
+                                  (InternalWorkingMemory) wm );
+
+        assertEquals( 1,
+                      executionTrace.numberOfRulesFired.intValue() );
+
+        assertSame( run.scenario,
+                    sc );
+
+        assertTrue( sc.wasSuccessful() );
+        
+        Thread.currentThread().setContextClassLoader( cl_ );
+    }
+
+    public void testIntgerationStateful() throws Exception {
+        Scenario sc = new Scenario();
+        sc.fixtures.add( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "price",
+                                                          "1" ) ),
+                                       false ) );
+        ExecutionTrace ex = new ExecutionTrace();
+        sc.fixtures.add( ex );
+        sc.fixtures.add( new FactData( "Cheese",
+                                       "c2",
+                                       ls( new FieldData( "price",
+                                                          "2" ) ),
+                                       false ) );
+        sc.fixtures.add( new VerifyFact( "c1",
+                                         ls( new VerifyField( "type",
+                                                              "rule1",
+                                                              "==" ) ) ) );
+        ex = new ExecutionTrace();
+        sc.fixtures.add( ex );
+        sc.fixtures.add( new VerifyFact( "c1",
+                                         ls( new VerifyField( "type",
+                                                              "rule2",
+                                                              "==" ) ) ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+
+        WorkingMemory wm = getWorkingMemory( "test_stateful.drl" );
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        Cheese c1 = (Cheese) run.populatedData.get( "c1" );
+        Cheese c2 = (Cheese) run.populatedData.get( "c2" );
+
+        assertEquals( "rule2",
+                      c1.getType() );
+        assertEquals( "rule2",
+                      c2.getType() );
+
+        assertTrue( sc.wasSuccessful() );
+
+    }
+
+    public void testIntegrationWithModify() throws Exception {
+        Scenario sc = new Scenario();
+        sc.fixtures.add( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "price",
+                                                          "1" ) ),
+                                       false ) );
+
+        sc.fixtures.add( new ExecutionTrace() );
+
+        sc.fixtures.add( new VerifyFact( "c1",
+                                         ls( new VerifyField( "type",
+                                                              "rule1",
+                                                              "==" ) ) ) );
+
+        sc.fixtures.add( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "price",
+                                                          "42" ) ),
+                                       true ) );
+        sc.fixtures.add( new ExecutionTrace() );
+
+        sc.fixtures.add( new VerifyFact( "c1",
+                                         ls( new VerifyField( "type",
+                                                              "rule3",
+                                                              "==" ) ) ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+
+        WorkingMemory wm = getWorkingMemory( "test_stateful.drl" );
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        Cheese c1 = (Cheese) run.populatedData.get( "c1" );
+
+        assertEquals( "rule3",
+                      c1.getType() );
+
+        assertTrue( sc.wasSuccessful() );
+    }
+
+    public void testIntegrationWithRetract() throws Exception {
+        Scenario sc = new Scenario();
+        sc.fixtures.add( new FactData( "Cheese",
+                                       "c1",
+                                       ls( new FieldData( "price",
+                                                          "46" ),
+                                           new FieldData( "type",
+                                                          "XXX" ) ),
+                                       false ) );
+        sc.fixtures.add( new FactData( "Cheese",
+                                       "c2",
+                                       ls( new FieldData( "price",
+                                                          "42" ) ),
+                                       false ) );
+        sc.fixtures.add( new ExecutionTrace() );
+
+        sc.fixtures.add( new VerifyFact( "c1",
+                                         ls( new VerifyField( "type",
+                                                              "XXX",
+                                                              "==" ) ) ) );
+
+        sc.fixtures.add( new RetractFact( "c2" ) );
+        sc.fixtures.add( new ExecutionTrace() );
+
+        sc.fixtures.add( new VerifyFact( "c1",
+                                         ls( new VerifyField( "type",
+                                                              "rule4",
+                                                              "==" ) ) ) );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+
+        WorkingMemory wm = getWorkingMemory( "test_stateful.drl" );
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        Cheese c1 = (Cheese) run.populatedData.get( "c1" );
+
+        assertEquals( "rule4",
+                      c1.getType() );
+        assertFalse( run.populatedData.containsKey( "c2" ) );
+
+        assertTrue( sc.wasSuccessful() );
+    }
+
+    public void testIntegrationWithFailure() throws Exception {
+        Scenario sc = new Scenario();
+        Expectation[] assertions = populateScenarioForFailure( sc );
+
+        TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+                                                       Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        resolver.addImport( "org.drools.Person" );
+
+        WorkingMemory wm = getWorkingMemory( "test_rules2.drl" );
+
+        ScenarioRunner run = new ScenarioRunner( sc,
+                                                 resolver,
+                                                 (InternalWorkingMemory) wm );
+
+        assertSame( run.scenario,
+                    sc );
+
+        assertFalse( sc.wasSuccessful() );
+
+        VerifyFact vf = (VerifyFact) assertions[1];
+        assertFalse( ((VerifyField) vf.fieldValues.get( 0 )).successResult );
+        assertEquals( "XXX",
+                      ((VerifyField) vf.fieldValues.get( 0 )).expected );
+        assertEquals( "rule1",
+                      ((VerifyField) vf.fieldValues.get( 0 )).actualResult );
+        assertNotNull( ((VerifyField) vf.fieldValues.get( 0 )).explanation );
+
+        VerifyRuleFired vr = (VerifyRuleFired) assertions[4];
+        assertFalse( vr.successResult );
+
+        assertEquals( 2,
+                      vr.expectedCount.intValue() );
+        assertEquals( 0,
+                      vr.actualResult.intValue() );
+
+    }
+
+    public void testRunAsString() throws Exception {
+        Scenario sc = new Scenario();
+        populateScenarioForFailure( sc );
+        String xml = ScenarioXMLPersistence.getInstance().marshal( sc );
+        WorkingMemory wm = getWorkingMemory( "test_rules2.drl" );
+        ScenarioRunner runner = new ScenarioRunner( xml,
+                                                    wm.getRuleBase() );
+        assertFalse( runner.wasSuccess() );
+
+        String failures = runner.getReport();
+        assertFalse( "".equals( failures ) );
+        System.err.println( failures );
+    }
+
+    private Expectation[] populateScenarioForFailure(Scenario sc) {
+        FactData[] facts = new FactData[]{new FactData( "Cheese",
+                                                        "c1",
+                                                        ls( new FieldData( "type",
+                                                                           "cheddar" ),
+                                                            new FieldData( "price",
+                                                                           "42" ) ),
+                                                        false )
+
+        };
+        sc.fixtures.addAll( Arrays.asList( facts ) );
+        sc.globals.add( new FactData( "Person",
+                                      "p",
+                                      new ArrayList(),
+                                      false ) );
+
+        ExecutionTrace executionTrace = new ExecutionTrace();
+        sc.rules.add( "rule1" );
+        sc.rules.add( "rule2" );
+        sc.inclusive = true;
+        sc.fixtures.add( executionTrace );
+
+        Expectation[] assertions = new Expectation[5];
+
+        assertions[0] = new VerifyFact( "c1",
+                                        ls( new VerifyField( "type",
+                                                             "cheddar",
+                                                             "==" )
+
+                                        ) );
+
+        assertions[1] = new VerifyFact( "p",
+                                        ls( new VerifyField( "name",
+                                                             "XXX",
+                                                             "==" ),
+                                            new VerifyField( "status",
+                                                             "rule2",
+                                                             "==" )
+
+                                        ) );
+
+        assertions[2] = new VerifyRuleFired( "rule1",
+                                             1,
+                                             null );
+        assertions[3] = new VerifyRuleFired( "rule2",
+                                             1,
+                                             null );
+        assertions[4] = new VerifyRuleFired( "rule3",
+                                             2,
+                                             null );
+
+        sc.fixtures.addAll( Arrays.asList( assertions ) );
+        return assertions;
+    }
+
+    private <T> List<T> ls(T... objects) {
+        return Arrays.asList( objects );
+    }
+    public void testCollectionFieldInFacts() throws Exception {
+
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                                                    null,
+                                                    new MockWorkingMemory() );
+        Cheesery listChesse = new Cheesery();
+        Cheese f1 = new Cheese( "cheddar",
+                                42 );
+        Cheese f2 = new Cheese( "Camembert",
+                                43 );
+        Cheese f3 = new Cheese( "Emmental",
+                                45 );
+        runner.populatedData.put( "f1",
+                                  f1 );
+        runner.populatedData.put( "f2",
+                                  f2 );
+        runner.populatedData.put( "f3",
+                                  f3 );
+        FactData fd1 = new FactData( "Cheese",
+                                    "f1",
+                                    ls( new FieldData( "type",
+                                                       "" ),
+                                        new FieldData( "price",
+                                                       "42" ) ),
+                                    false );
+         FactData fd2 = new FactData( "Cheese",
+                                    "f2",
+                                    ls( new FieldData( "type",
+                                                       "" ),
+                                        new FieldData( "price",
+                                                       "43" ) ),
+                                    false );
+         FactData fd3 = new FactData( "Cheese",
+                                    "f3",
+                                    ls( new FieldData( "type",
+                                                       "" ),
+                                        new FieldData( "price",
+                                                       "45" ) ),
+                                    false );
+         runner.populatedData.put("ACheesery",listChesse);
+         FieldData field = new FieldData();
+         field.name="cheeses";
+         field.collectionType="Cheese";
+         field.nature = FieldData.TYPE_COLLECTION;
+          field.value="=[f1,f2,f3]";
+         List<FieldData> lstField = new ArrayList<FieldData>();
+         lstField.add(field);
+          FactData lst = new FactData( "Cheesery",
+                                    "listChesse",
+                                    lstField,
+                                    false );
+        runner.populateFields(lst,runner.populatedData,listChesse);
+        assertTrue(listChesse.getCheeses().size()==3);
+        assertTrue(listChesse.getCheeses().contains(f1));
+        assertTrue(listChesse.getCheeses().contains(f3));
+        assertTrue(listChesse.getCheeses().contains(f3));
+  
+    }
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/ScenarioTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/ScenarioTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,291 @@
+package org.drools.testframework;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.testing.ExecutionTrace;
+import org.drools.guvnor.client.modeldriven.testing.FactData;
+import org.drools.guvnor.client.modeldriven.testing.RetractFact;
+import org.drools.guvnor.client.modeldriven.testing.Scenario;
+import org.drools.guvnor.client.modeldriven.testing.VerifyFact;
+import org.drools.guvnor.client.modeldriven.testing.VerifyField;
+import org.drools.guvnor.client.modeldriven.testing.VerifyRuleFired;
+
+public class ScenarioTest extends TestCase {
+
+	public void testInsertBetween() {
+		Scenario sc = new Scenario();
+		VerifyRuleFired vf = new VerifyRuleFired();
+		sc.insertBetween(null, vf);
+		assertEquals(1, sc.fixtures.size());
+		assertEquals(vf, sc.fixtures.get(0));
+
+		VerifyRuleFired vf2 = new VerifyRuleFired();
+		sc.fixtures.add(vf2);
+
+		VerifyRuleFired vf3 = new VerifyRuleFired();
+		sc.insertBetween(vf, vf3);
+		assertEquals(3, sc.fixtures.size());
+		assertEquals(vf, sc.fixtures.get(0));
+		assertEquals(vf2, sc.fixtures.get(1));
+		assertEquals(vf3, sc.fixtures.get(2));
+
+		VerifyRuleFired vf4 = new VerifyRuleFired();
+		sc.insertBetween(vf2, vf4);
+		assertEquals(4, sc.fixtures.size());
+		assertEquals(3, sc.fixtures.indexOf(vf4));
+		assertEquals(2, sc.fixtures.indexOf(vf3));
+		//assertEquals(vf4, sc.fixtures.get(3));
+		assertEquals(1, sc.fixtures.indexOf(vf2));
+		//assertEquals(vf2, sc.fixtures.get(2));
+		assertEquals(0, sc.fixtures.indexOf(vf));
+
+
+		VerifyRuleFired vf5 = new VerifyRuleFired();
+		sc.insertBetween(null, vf5);
+		assertEquals(5, sc.fixtures.size());
+		assertEquals(4, sc.fixtures.indexOf(vf5));
+
+
+		sc = new Scenario();
+
+		sc.fixtures.add(vf);
+		ExecutionTrace ex = new ExecutionTrace();
+		sc.fixtures.add(ex);
+		sc.insertBetween(null, vf2);
+		assertEquals(0, sc.fixtures.indexOf(vf));
+		assertEquals(1, sc.fixtures.indexOf(vf2));
+		assertEquals(2, sc.fixtures.indexOf(ex));
+		assertEquals(3, sc.fixtures.size());
+
+		sc.insertBetween(ex, vf3);
+		assertEquals(4, sc.fixtures.size());
+		assertEquals(0, sc.fixtures.indexOf(vf));
+		assertEquals(1, sc.fixtures.indexOf(vf2));
+		assertEquals(2, sc.fixtures.indexOf(ex));
+		assertEquals(3, sc.fixtures.indexOf(vf3));
+
+
+		ExecutionTrace ex2 = new ExecutionTrace();
+		sc.fixtures.add(ex2);
+		sc.insertBetween(ex, vf4);
+		assertEquals(6, sc.fixtures.size());
+		assertEquals(0, sc.fixtures.indexOf(vf));
+		assertEquals(1, sc.fixtures.indexOf(vf2));
+		assertEquals(2, sc.fixtures.indexOf(ex));
+		assertEquals(3, sc.fixtures.indexOf(vf3));
+		assertEquals(4, sc.fixtures.indexOf(vf4));
+		assertEquals(5, sc.fixtures.indexOf(ex2));
+
+
+		sc.insertBetween(ex2, vf5);
+		assertEquals(7, sc.fixtures.size());
+		assertEquals(0, sc.fixtures.indexOf(vf));
+		assertEquals(1, sc.fixtures.indexOf(vf2));
+		assertEquals(2, sc.fixtures.indexOf(ex));
+		assertEquals(3, sc.fixtures.indexOf(vf3));
+		assertEquals(4, sc.fixtures.indexOf(vf4));
+		assertEquals(5, sc.fixtures.indexOf(ex2));
+		assertEquals(6, sc.fixtures.indexOf(vf5));
+
+
+		sc = new Scenario();
+		sc.fixtures.add(ex);
+
+		sc.insertBetween(null, vf);
+		assertEquals(2, sc.fixtures.size());
+		assertEquals(0, sc.fixtures.indexOf(vf));
+		assertEquals(1, sc.fixtures.indexOf(ex));
+
+
+
+
+
+	}
+
+
+
+	public void testExecutionTrace() {
+        Scenario sc = new Scenario();
+
+        sc.globals.add(new FactData("A", "A", new ArrayList(), false));
+        sc.fixtures.add(new FactData("B", "B", new ArrayList(), true));
+        sc.fixtures.add(new FactData("C", "C", new ArrayList(), true));
+        ExecutionTrace ex1 = new ExecutionTrace();
+        sc.fixtures.add(ex1);
+        sc.fixtures.add(new VerifyFact());
+        sc.fixtures.add(new RetractFact());
+        sc.fixtures.add(new FactData("D", "D", new ArrayList(), false));
+        sc.fixtures.add(new FactData("E", "E", new ArrayList(), false));
+        ExecutionTrace ex2 = new ExecutionTrace();
+        sc.fixtures.add(ex2);
+        sc.fixtures.add(new VerifyFact());
+        sc.fixtures.add(new FactData("F", "F", new ArrayList(), false));
+        ExecutionTrace ex3 = new ExecutionTrace();
+        sc.fixtures.add(ex3);
+
+        assertEquals( 11,
+                      sc.fixtures.size() );
+
+        sc.removeExecutionTrace( ex2 );
+
+        assertEquals( 6,
+                      sc.fixtures.size() );
+        assertTrue( sc.isFactNameExisting( "A" ) );
+        assertTrue( sc.isFactNameExisting( "B" ) );
+        assertTrue( sc.isFactNameExisting( "C" ) );
+        assertFalse( sc.isFactNameExisting( "D" ) );
+        assertFalse( sc.isFactNameExisting( "E" ) );
+        assertTrue( sc.isFactNameExisting( "F" ) );
+	}
+
+	public void testRemoveFixture() {
+		Scenario sc = new Scenario();
+
+		VerifyRuleFired vf1 = new VerifyRuleFired();
+		VerifyRuleFired vf2 = new VerifyRuleFired();
+		VerifyRuleFired vf3 = new VerifyRuleFired();
+
+		FactData fd = new FactData();
+
+		sc.fixtures.add(vf1);
+		sc.fixtures.add(vf2);
+		sc.fixtures.add(vf3);
+		sc.globals.add(fd);
+
+
+		sc.removeFixture(vf2);
+		assertEquals(2, sc.fixtures.size());
+		assertEquals(vf1, sc.fixtures.get(0));
+		assertEquals(vf3, sc.fixtures.get(1));
+		assertEquals(1, sc.globals.size());
+
+		sc.removeFixture(fd);
+		assertEquals(0, sc.globals.size());
+		assertEquals(2, sc.fixtures.size());
+
+
+
+
+	}
+
+	public void testMapFactTypes() {
+		Scenario sc = new Scenario();
+		sc.fixtures.add(new FactData("X", "q", null, false));
+		sc.globals.add(new FactData("Q", "x", null, false));
+
+		Map r = sc.getVariableTypes();
+		assertEquals(2, r.size());
+
+		assertEquals("X", r.get("q"));
+		assertEquals("Q", r.get("x"));
+
+	}
+
+	public void testVariablesInScope() {
+		Scenario sc = new Scenario();
+		sc.globals.add(new FactData("X", "x", new ArrayList(), false));
+
+		sc.fixtures.add(new FactData("Q", "q", new ArrayList(), true));
+		sc.fixtures.add(new FactData("Z", "z", new ArrayList(), false));
+		ExecutionTrace ex1 = new ExecutionTrace();
+
+		sc.fixtures.add(ex1);
+		sc.fixtures.add(new RetractFact("z"));
+		sc.fixtures.add(new FactData("Y", "y", new ArrayList(), false));
+
+		ExecutionTrace ex2 = new ExecutionTrace();
+		sc.fixtures.add(ex2);
+
+		List l = sc.getFactNamesInScope(ex1, true);
+
+		assertEquals(3, l.size());
+		assertEquals("q", l.get(0));
+		assertEquals("z", l.get(1));
+		assertEquals("x", l.get(2));
+
+
+		l = sc.getFactNamesInScope(ex1, false);
+		assertEquals(2, l.size());
+		assertFalse(l.contains(sc.globals.get(0)));
+
+		l = sc.getFactNamesInScope(ex2, true);
+		assertEquals(3, l.size());
+		assertEquals("q", l.get(0));
+		assertEquals("y", l.get(1));
+		assertEquals("x", l.get(2));
+
+		l= sc.getFactNamesInScope(null, true);
+		assertEquals(0, l.size());
+
+	}
+
+	public void testAllowRemoveFact() {
+		Scenario sc = new Scenario();
+
+		FactData fd1 = new FactData("X", "x", new ArrayList(), false);
+		sc.fixtures.add(fd1);
+		FactData fd2 = new FactData("Q", "q", new ArrayList(), false);
+		sc.fixtures.add(fd2);
+		FactData fd3 = new FactData("Z", "z", new ArrayList(), false);
+		sc.fixtures.add(fd3);
+		ExecutionTrace ex1 = new ExecutionTrace();
+		FactData fd4 = new FactData("I", "i", new ArrayList(), false);
+		sc.globals.add(fd4);
+
+		sc.fixtures.add(ex1);
+		sc.fixtures.add(new RetractFact("z"));
+		sc.fixtures.add(new FactData("Z", "z", new ArrayList(), true));
+		sc.fixtures.add(new VerifyFact("q", new ArrayList()));
+
+		assertFalse(sc.isFactNameUsed(fd1));
+		assertTrue(sc.isFactNameUsed(fd2));
+		assertTrue(sc.isFactNameUsed(fd3));
+		assertFalse(sc.isFactNameUsed(fd4));
+	}
+
+	public void testIsFactNameUsed() {
+		Scenario sc = new Scenario();
+		sc.globals.add(new FactData("X", "x", null, false));
+		sc.fixtures.add(new FactData("Q", "q", null, false));
+		sc.fixtures.add(new ExecutionTrace());
+
+		assertTrue(sc.isFactNameExisting("x"));
+		assertTrue(sc.isFactNameExisting("q"));
+		assertFalse(sc.isFactNameExisting("w"));
+
+
+		sc = new Scenario();
+		assertFalse(sc.isFactNameExisting("w"));
+	}
+
+	public void testCountSuccessFailures() {
+		Scenario sc = new Scenario();
+		sc.fixtures.add(new FactData());
+		sc.fixtures.add(new ExecutionTrace());
+		VerifyRuleFired vr = new VerifyRuleFired();
+		vr.successResult = false;
+		sc.fixtures.add(vr);
+
+		VerifyField vf = new VerifyField();
+		vf.successResult = true;
+		VerifyField vf2 = new VerifyField();
+		vf2.successResult = false;
+		VerifyFact vfact = new VerifyFact();
+		vfact.fieldValues.add(vf);
+		vfact.fieldValues.add(vf2);
+		sc.fixtures.add(vfact);
+
+
+		int[] totals = sc.countFailuresTotal();
+		assertEquals(2, totals[0]);
+		assertEquals(3, totals[1]);
+
+
+
+	}
+
+}

Copied: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/TestingEventListenerTest.java (from rev 32690, labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java)
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/TestingEventListenerTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/testframework/TestingEventListenerTest.java	2010-04-30 21:22:02 UTC (rev 32693)
@@ -0,0 +1,100 @@
+package org.drools.testframework;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.Cheese;
+import org.drools.StatefulSession;
+
+public class TestingEventListenerTest extends RuleUnit {
+
+	public void testInclusive() throws Exception {
+		HashSet<String> set = new HashSet<String>();
+		set.add("rule1");
+		set.add("rule2");
+
+		StatefulSession session  = getWorkingMemory("test_rules.drl");
+
+        TestingEventListener ls = new TestingEventListener();
+        //TestingEventListener.stubOutRules(set, session.getRuleBase(), true);
+
+        session.addEventListener(ls);
+
+        session.insert(new Cheese());
+        session.fireAllRules(ls.getAgendaFilter(set, true));
+
+        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
+        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
+
+        //assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule3"));
+        assertFalse(ls.firingCounts.containsKey("rule3"));
+        assertFalse(ls.firingCounts.containsKey("rule4"));
+
+        session.insert(new Cheese());
+        session.fireAllRules(ls.getAgendaFilter(set, true));
+        assertEquals(new Integer(2), (Integer) ls.firingCounts.get("rule1"));
+        assertEquals(new Integer(2), (Integer) ls.firingCounts.get("rule2"));
+        assertFalse(ls.firingCounts.containsKey("rule3"));
+        assertEquals(4, ls.totalFires);
+
+	}
+
+
+	public void testExclusive() throws Exception {
+		HashSet<String> set = new HashSet<String>();
+		set.add("rule3");
+
+
+		StatefulSession session  = getWorkingMemory("test_rules.drl");
+
+        TestingEventListener ls = new TestingEventListener();
+        //TestingEventListener.stubOutRules(set, session.getRuleBase(), false);
+
+        session.addEventListener(ls);
+
+        session.insert(new Cheese());
+        session.fireAllRules(ls.getAgendaFilter(set, false));
+
+        //assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
+        //assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
+
+        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
+        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
+        assertFalse(ls.firingCounts.containsKey("rule3"));
+        assertFalse(ls.firingCounts.containsKey("rule4"));
+
+
+	}
+
+	public void testNoFilter() throws Exception {
+		HashSet<String> set = new HashSet<String>();
+
+
+		StatefulSession session  = getWorkingMemory("test_rules.drl");
+
+        TestingEventListener ls = new TestingEventListener();
+        //TestingEventListener.stubOutRules(set, session.getRuleBase(), false);
+
+        session.addEventListener(ls);
+
+        session.insert(new Cheese());
+
+        List<String> list = new ArrayList<String>();
+        session.setGlobal("list", list);
+        session.fireAllRules(ls.getAgendaFilter(set, false));
+
+        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
+        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
+        assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule3"));
+
+        String[] summary = ls.getRulesFiredSummary();
+        assertEquals(3, summary.length);
+        assertNotNull(summary[0]);
+        assertFalse(summary[1].equals(""));
+
+        assertEquals(1, list.size());
+	}
+
+
+}



More information about the jboss-svn-commits mailing list