[jboss-svn-commits] JBL Code SVN: r35931 - in labs/jbossrules/trunk: drools-guvnor/src/main/java/org/drools/guvnor/client/qa/testscenarios and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Nov 10 02:11:13 EST 2010
Author: jervisliu
Date: 2010-11-10 02:11:11 -0500 (Wed, 10 Nov 2010)
New Revision: 35931
Added:
labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/CheeseType.java
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/testscenarios/FieldDataConstraintEditor.java
labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/client/modeldriven/testing/VerifyField.java
labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/server/util/SuggestionCompletionEngineBuilder.java
labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/FactFieldValueVerifier.java
labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java
labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/Cheese.java
labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/ide/common/server/rules/SuggestionCompletionLoaderTest.java
labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
Log:
https://jira.jboss.org/browse/GUVNOR-687: Business Rules may not be handling Java Enums Correctly, DRL Generated does not work and Running Test Scenarios fails.
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -127,6 +127,7 @@
} else {
String[] enums = sce.getDataEnumList( key );
if ( enums != null ) {
+ field.nature = FieldData.TYPE_ENUM;
panel.add( new EnumDropDown( field.expected,
new DropDownValueChanged() {
public void valueChanged(String newText,
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/testscenarios/FieldDataConstraintEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/testscenarios/FieldDataConstraintEditor.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/testscenarios/FieldDataConstraintEditor.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -126,6 +126,7 @@
} else {
String[] enums = sce.getDataEnumList( key );
if ( enums != null ) {
+ field.nature = FieldData.TYPE_ENUM;
panel.add( new EnumDropDown( field.value,
new DropDownValueChanged() {
public void valueChanged(String newText,
Modified: labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/client/modeldriven/testing/VerifyField.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/client/modeldriven/testing/VerifyField.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/client/modeldriven/testing/VerifyField.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -77,4 +77,12 @@
this.operator = operator;
}
+ public long getNature() {
+ return nature;
+ }
+
+ public void setNature(long nature) {
+ this.nature = nature;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/server/util/SuggestionCompletionEngineBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/server/util/SuggestionCompletionEngineBuilder.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/ide/common/server/util/SuggestionCompletionEngineBuilder.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -233,7 +233,8 @@
int i = 0;
for (Field f : flds) {
if (f.isEnumConstant()) {
- listEnum.add(i + "=" + f.getName());
+ String shortName = fieldClass.getName().substring(fieldClass.getName().lastIndexOf(".")+1)+ "."+ f.getName();
+ listEnum.add(shortName + "=" + shortName);
i++;
}
}
Modified: labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/FactFieldValueVerifier.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/FactFieldValueVerifier.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/FactFieldValueVerifier.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -23,6 +23,7 @@
import java.util.List;
import java.util.Map;
+import org.drools.base.TypeResolver;
import org.drools.ide.common.client.modeldriven.testing.VerifyField;
import org.mvel2.MVEL;
import org.mvel2.ParserContext;
@@ -41,13 +42,16 @@
private final Object factObject;
private VerifyField currentField;
-
+ final TypeResolver resolver;
+
public FactFieldValueVerifier(Map<String, Object> populatedData,
String factName,
- Object factObject) {
+ Object factObject,
+ final TypeResolver resolver) {
this.populatedData = populatedData;
this.factName = factName;
this.factObject = factObject;
+ this.resolver = resolver;
}
public void checkFields(List<VerifyField> fieldValues) {
@@ -80,7 +84,21 @@
if ( currentField.expected.startsWith( "=" ) ) {
expectedResult = eval( currentField.expected.substring( 1 ),
this.populatedData );
- }
+ } else if (currentField.getNature() == VerifyField.TYPE_ENUM) {
+ try {
+ // The string representation of enum value is using a
+ // format like CheeseType.CHEDDAR
+ String classNameOfEnum = currentField.expected.substring(0,
+ currentField.expected.indexOf("."));
+ String valueOfEnum = currentField.expected.substring(currentField.expected
+ .indexOf(".") + 1);
+ String fullName = resolver.getFullTypeName(classNameOfEnum);
+
+ expectedResult = eval(fullName + "." + valueOfEnum);
+ } catch (ClassNotFoundException e) {
+ //Do nothing.
+ }
+ }
return expectedResult;
}
Modified: labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-ide-common/src/main/java/org/drools/testframework/ScenarioRunner.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -65,6 +65,7 @@
final Map<String, FactHandle> factHandles = new HashMap<String, FactHandle>();
final InternalWorkingMemory workingMemory;
+ final TypeResolver resolver;
/**
* This constructor is normally used by Guvnor for running tests on a users request.
@@ -86,8 +87,9 @@
final InternalWorkingMemory wm) throws ClassNotFoundException {
this.scenario = scenario;
this.workingMemory = wm;
+ this.resolver = resolver;
runScenario( scenario,
- resolver );
+ this.resolver );
}
/**
@@ -98,12 +100,12 @@
RuleBase rb) throws ClassNotFoundException {
this.scenario = ScenarioXMLPersistence.getInstance().unmarshal( xml );
this.workingMemory = (InternalWorkingMemory) rb.newStatefulSession();
- Package pk = rb.getPackages()[0];
+ 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,
+ this.resolver = new ClassTypeResolver( imports,
cl );
runScenario( scenario,
resolver );
@@ -132,7 +134,8 @@
public void go() {
populateFields( fact,
globalData,
- factObject );
+ factObject,
+ resolver);
}
} );
globalData.put( fact.name,
@@ -159,7 +162,8 @@
public void go() {
populateFields( fact,
populatedData,
- factObject );
+ factObject,
+ resolver);
workingMemory.update( factHandles.get( fact.name ),
factObject );
}
@@ -171,7 +175,8 @@
public void go() {
populateFields( fact,
populatedData,
- factObject );
+ factObject,
+ resolver);
factHandles.put( fact.name,
workingMemory.insert( factObject ) );
}
@@ -306,7 +311,8 @@
if ( factObject == null ) factObject = this.globalData.get( value.name );
FactFieldValueVerifier fieldVerifier = new FactFieldValueVerifier( populatedData,
value.name,
- factObject );
+ factObject,
+ resolver);
fieldVerifier.checkFields( value.fieldValues );
} else {
Iterator obs = this.workingMemory.iterateObjects();
@@ -315,7 +321,8 @@
if ( factObject.getClass().getSimpleName().equals( value.name ) ) {
FactFieldValueVerifier fieldVerifier = new FactFieldValueVerifier( populatedData,
value.name,
- factObject );
+ factObject,
+ resolver );
fieldVerifier.checkFields( value.fieldValues );
if ( value.wasSuccessful() ) return;
}
@@ -331,24 +338,44 @@
Object populateFields(FactData fact,
Map<String, Object> factData,
- Object factObject) {
+ Object factObject,
+ final TypeResolver resolver) {
for ( int i = 0; i < fact.fieldData.size(); i++ ) {
FieldData field = (FieldData) fact.fieldData.get( i );
- Object val;
+ Object val = null;
+
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;
- }
+ } else if (field.getNature() == FieldData.TYPE_ENUM) {
+ try {
+ // The string representation of enum value is using
+ // format like CheeseType.CHEDDAR
+ String classNameOfEnum = field.value.substring(0,
+ field.value.indexOf("."));
+ String valueOfEnum = field.value.substring(field.value
+ .indexOf(".") + 1);
+ String fullName = resolver
+ .getFullTypeName(classNameOfEnum);
+
+ val = eval(fullName + "." + valueOfEnum);
+ } catch (ClassNotFoundException e) {
+ //Do nothing.
+ }
+ } else {
+ val = field.value;
+ }
+
Map<String, Object> vars = new HashMap<String, Object>();
vars.putAll( factData );
vars.put( "__val__",
- val );
+ val );
vars.put( "__fact__",
factObject );
+ //System.out.println("eval: " + "__fact__." + field.name + " = __val__");
eval( "__fact__." + field.name + " = __val__",
vars );
}
Modified: labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/Cheese.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/Cheese.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/Cheese.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -36,6 +36,7 @@
private int oldPrice;
private Date usedBy;
private double doublePrice;
+ private CheeseType cheeseType;
public Cheese() {
@@ -63,7 +64,15 @@
this.oldPrice = oldPrice;
}
- public int getPrice() {
+ public CheeseType getCheeseType() {
+ return cheeseType;
+ }
+
+ public void setCheeseType(CheeseType cheeseType) {
+ this.cheeseType = cheeseType;
+ }
+
+ public int getPrice() {
return this.price;
}
Added: labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/CheeseType.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/CheeseType.java (rev 0)
+++ labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/CheeseType.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -0,0 +1,24 @@
+/**
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools;
+
+public enum CheeseType {
+ BRICK,
+ CHEDDAR,
+ COLBY,
+ MOZZARELLA
+}
Modified: labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/ide/common/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/ide/common/server/rules/SuggestionCompletionLoaderTest.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/ide/common/server/rules/SuggestionCompletionLoaderTest.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -209,9 +209,9 @@
assertTrue(eng.hasDataEnumLists());
assertEquals(eng.getDataEnumList("SomeFact.anEnum").length,3);
String a[] = eng.getDataEnumList("SomeFact.anEnum") ;
- assertEquals(a[0],"0="+EnumClass.v1);
- assertEquals(a[1],"1="+EnumClass.v2);
- assertEquals(a[2],"2="+EnumClass.v3);
+ assertEquals(a[0],"EnumClass.v1=EnumClass.v1");
+ assertEquals(a[1],"EnumClass.v2=EnumClass.v2");
+ assertEquals(a[2],"EnumClass.v3=EnumClass.v3");
}
public void testSortOrderOfFacts() throws Exception {
Modified: labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2010-11-10 06:52:56 UTC (rev 35930)
+++ labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2010-11-10 07:11:11 UTC (rev 35931)
@@ -25,6 +25,7 @@
import java.util.Map;
import org.drools.Cheese;
+import org.drools.CheeseType;
import org.drools.Cheesery;
import org.drools.Cheesery.Maturity;
import org.drools.OuterFact;
@@ -131,7 +132,32 @@
p.getAge() );
}
+
+ public void testPopulateEnum() throws Exception {
+ Scenario sc = new Scenario();
+ FieldData fd = new FieldData( "cheeseType", "CheeseType.CHEDDAR");
+ fd.setNature(FieldData.TYPE_ENUM, null);
+ List facts = ls( new FactData( "Cheese",
+ "c1",
+ ls(fd),
+ false ));
+ sc.fixtures.addAll( facts );
+ TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+ Thread.currentThread().getContextClassLoader() );
+ resolver.addImport( "org.drools.Cheese" );
+ resolver.addImport( "org.drools.CheeseType" );
+ ScenarioRunner runner = new ScenarioRunner( sc,
+ resolver,
+ new MockWorkingMemory() );
+
+ assertTrue( runner.populatedData.containsKey( "c1" ) );
+
+ Cheese c = (Cheese) runner.populatedData.get( "c1" );
+ assertEquals( CheeseType.CHEDDAR,
+ c.getCheeseType() );
+ }
+
public void testPopulateNested() throws Exception {
Scenario sc = new Scenario();
List facts = ls( new FactData( "Cheese",
@@ -323,7 +349,8 @@
run.populateFields( fd,
run.populatedData,
- c );
+ c,
+ resolver);
assertEquals( "whee",
c.getType() );
assertEquals( 42,
@@ -419,6 +446,42 @@
}
+ public void testVerifyFactsWithEnum() throws Exception {
+ FieldData fd = new FieldData( "cheeseType", "CheeseType.CHEDDAR");
+ fd.setNature(FieldData.TYPE_ENUM, null);
+ List facts = ls( new FactData( "Cheese",
+ "c1",
+ ls(fd),
+ false ));
+
+ TypeResolver resolver = new ClassTypeResolver( new HashSet<String>(),
+ Thread.currentThread().getContextClassLoader() );
+ resolver.addImport( "org.drools.Cheese" );
+ resolver.addImport( "org.drools.CheeseType" );
+
+ ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+ resolver,
+ new MockWorkingMemory() );
+ Cheese f1 = new Cheese( "othertype",
+ 42 );
+ f1.setCheeseType(CheeseType.CHEDDAR);
+ runner.populatedData.put( "f1",
+ f1 );
+
+
+ VerifyFact vf = new VerifyFact();
+ vf.name = "f1";
+ VerifyField verifyField = new VerifyField( "cheeseType",
+ "CheeseType.CHEDDAR",
+ "==" );
+ verifyField.setNature(VerifyField.TYPE_ENUM);
+ vf.fieldValues = ls( verifyField );
+ runner.verify( vf );
+ for ( int i = 0; i < vf.fieldValues.size(); i++ ) {
+ assertTrue( ((VerifyField) vf.fieldValues.get( i )).successResult );
+ }
+ }
+
public void testVerifyAnonymousFacts() throws Exception {
MockWorkingMemory wm = new MockWorkingMemory();
ScenarioRunner runner = new ScenarioRunner( new Scenario(),
@@ -672,6 +735,27 @@
}
+ public void testRuleFiredWithEnum() 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() );
+ }
+
public void testTestingEventListener() throws Exception {
Scenario sc = new Scenario();
sc.rules.add( "foo" );
@@ -1498,7 +1582,7 @@
"listChesse",
lstField,
false );
- runner.populateFields(lst,runner.populatedData,listChesse);
+ runner.populateFields(lst,runner.populatedData,listChesse, null);
assertTrue(listChesse.getCheeses().size()==3);
assertTrue(listChesse.getCheeses().contains(f1));
assertTrue(listChesse.getCheeses().contains(f3));
More information about the jboss-svn-commits
mailing list