[jboss-svn-commits] JBL Code SVN: r16469 - in labs/jbossrules/branches/4.0.x: drools-compiler/src/test/java/org/drools/integrationtests and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Nov 9 11:07:51 EST 2007
Author: tirelli
Date: 2007-11-09 11:07:51 -0500 (Fri, 09 Nov 2007)
New Revision: 16469
Added:
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion2.drl
Modified:
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Primitives.java
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion.drl
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
Log:
JBRULES-1284: applying fixes to 4.0.x branch
Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Primitives.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Primitives.java 2007-11-09 15:47:05 UTC (rev 16468)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Primitives.java 2007-11-09 16:07:51 UTC (rev 16469)
@@ -34,6 +34,8 @@
private String[] stringArray;
private Boolean booleanWrapper;
+
+ private Object object;
public boolean isBooleanPrimitive() {
return this.booleanPrimitive;
@@ -145,4 +147,12 @@
this.booleanWrapper = booleanWrapper;
}
+ public Object getObject() {
+ return object;
+ }
+
+ public void setObject(Object object) {
+ this.object = object;
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-11-09 15:47:05 UTC (rev 16468)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-11-09 16:07:51 UTC (rev 16469)
@@ -4487,8 +4487,69 @@
assertEquals( 1, list.size() );
assertEquals( fact.getData(), list.get( 0 ) );
+
+ fact.setData( "10" );
+ workingMemory.update( handle, fact );
+ workingMemory.fireAllRules();
+
+ assertEquals( 2, list.size() );
+ assertEquals( fact.getData(), list.get( 1 ) );
+
+ try {
+ fact.setData( new Boolean(true) );
+ workingMemory.update( handle, fact );
+ fail("Should not allow to compare < with a Boolean object");
+ } catch( ClassCastException cce ) {
+ // success, as can't use "<" to compare to a boolean
+ }
+
+ }
+ public void testRuntimeTypeCoercion2() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_RuntimeTypeCoercion2.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "results",
+ list );
+
+ final Primitives fact = new Primitives( );
+ fact.setBooleanPrimitive( true );
+ fact.setBooleanWrapper( new Boolean(true) );
+ fact.setObject( new Boolean(true) );
+ fact.setCharPrimitive( 'X' );
+ final FactHandle handle = workingMemory.insert( fact );
+
+ workingMemory.fireAllRules();
+
+ int index = 0;
+ assertEquals( list.toString(), 4, list.size() );
+ assertEquals( "boolean", list.get( index++ ));
+ assertEquals( "boolean wrapper", list.get( index++ ));
+ assertEquals( "boolean object", list.get( index++ ));
+ assertEquals( "char", list.get( index++ ));
+
+ fact.setBooleanPrimitive( false );
+ fact.setBooleanWrapper( null );
+ fact.setCharPrimitive( '\0' );
+ fact.setObject( new Character('X') );
+ workingMemory.update( handle, fact );
+ workingMemory.fireAllRules();
+ assertEquals( 5, list.size() );
+ assertEquals( "char object", list.get( index++ ) );
+
+ fact.setObject( null );
+ workingMemory.update( handle, fact );
+ workingMemory.fireAllRules();
+ assertEquals( 6, list.size() );
+ assertEquals( "null object", list.get( index++ ) );
+
}
-}
\ No newline at end of file
+}
Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion.drl 2007-11-09 15:47:05 UTC (rev 16468)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion.drl 2007-11-09 16:07:51 UTC (rev 16469)
@@ -3,8 +3,10 @@
global java.util.List results;
rule "Testing coercion"
+ salience 100
when
PolymorphicFact( $value : data < 15 )
then
results.add( $value );
end
+
Copied: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion2.drl (from rev 16439, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion2.drl)
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion2.drl (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuntimeTypeCoercion2.drl 2007-11-09 16:07:51 UTC (rev 16469)
@@ -0,0 +1,53 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "Test boolean coercion"
+ salience 100
+ when
+ Primitives( booleanPrimitive == "true" )
+ then
+ results.add( "boolean" );
+end
+
+rule "Test boolean wrapper coercion"
+ salience 95
+ when
+ Primitives( booleanWrapper == "true" )
+ then
+ results.add( "boolean wrapper" );
+end
+
+rule "Test boolean object coercion"
+ salience 92
+ when
+ Primitives( object == "true" )
+ then
+ results.add( "boolean object" );
+end
+
+rule "Test char coercion"
+ salience 90
+ when
+ Primitives( charPrimitive == "X" )
+ then
+ results.add( "char" );
+end
+
+
+rule "Test object char coercion"
+ salience 85
+ when
+ Primitives( object == "X" )
+ then
+ results.add( "char object" );
+end
+
+
+rule "Test object null coercion"
+ salience 82
+ when
+ Primitives( object == null )
+ then
+ results.add( "null object" );
+end
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java 2007-11-09 15:47:05 UTC (rev 16468)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java 2007-11-09 16:07:51 UTC (rev 16469)
@@ -565,6 +565,16 @@
if( arg0 instanceof String ) {
return arg0.equals( arg1.toString() );
}
+ if( arg0 instanceof Boolean ) {
+ if( arg1 instanceof String ) {
+ return ((Boolean)arg0).booleanValue() == Boolean.valueOf( (String)arg1 ).booleanValue();
+ }
+ }
+ if( arg0 instanceof Character ) {
+ if( arg1 instanceof String && ((String) arg1).length() == 1 ) {
+ return ((Character)arg0).charValue() == ((String)arg1).charAt( 0 );
+ }
+ }
return arg0.equals( arg1 );
}
}
@@ -615,7 +625,11 @@
}
}
- return ((Comparable)arg0).compareTo( arg1 );
+ try {
+ return ((Comparable)arg0).compareTo( arg1 );
+ } catch ( ClassCastException cce ) {
+ throw new ClassCastException( "Not possible to compare a "+arg0.getClass()+" with a "+arg1.getClass());
+ }
}
}
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2007-11-09 15:47:05 UTC (rev 16468)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2007-11-09 16:07:51 UTC (rev 16469)
@@ -62,7 +62,7 @@
final LiteralConstraint literalConstraint = (LiteralConstraint) fieldConstraint;
final Evaluator evaluator = literalConstraint.getEvaluator();
- if ( evaluator.getOperator() == Operator.EQUAL ) {
+ if ( evaluator.getOperator() == Operator.EQUAL && literalConstraint.getFieldExtractor().getValueType() != ValueType.OBJECT_TYPE ) {
final int index = literalConstraint.getFieldExtractor().getIndex();
final FieldIndex fieldIndex = registerFieldIndex( index,
literalConstraint.getFieldExtractor() );
@@ -107,7 +107,7 @@
final Evaluator evaluator = literalConstraint.getEvaluator();
final FieldValue value = literalConstraint.getField();
- if ( evaluator.getOperator() == Operator.EQUAL ) {
+ if ( evaluator.getOperator() == Operator.EQUAL && literalConstraint.getFieldExtractor().getValueType() != ValueType.OBJECT_TYPE ) {
final int index = literalConstraint.getFieldExtractor().getIndex();
final FieldIndex fieldIndex = unregisterFieldIndex( index );
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2007-11-09 15:47:05 UTC (rev 16468)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2007-11-09 16:07:51 UTC (rev 16469)
@@ -357,7 +357,7 @@
public ValueType getValueType() {
// Auto-generated method stub
- return ValueType.OBJECT_TYPE;
+ return ValueType.STRING_TYPE;
}
public int getHashCode(InternalWorkingMemory workingMemory,
More information about the jboss-svn-commits
mailing list