[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