[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