[jboss-svn-commits] JBL Code SVN: r26542 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 14 23:42:44 EDT 2009


Author: tirelli
Date: 2009-05-14 23:42:44 -0400 (Thu, 14 May 2009)
New Revision: 26542

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LatinLocale.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Cheese.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
Log:
JBRULES-1871: fixing locale problem on number constants parsing

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java	2009-05-15 03:41:16 UTC (rev 26541)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java	2009-05-15 03:42:44 UTC (rev 26542)
@@ -2,6 +2,7 @@
 
 import java.text.DecimalFormat;
 import java.text.ParseException;
+import java.util.Locale;
 
 /*
  * Copyright 2005 JBoss Inc
@@ -83,7 +84,8 @@
         switch ( this.type ) {
             case TYPE_NUMBER :
                 try {
-                    return DecimalFormat.getInstance().parse( this.getText() );
+                    // in the DRL, we always use US number formatting 
+                    return DecimalFormat.getInstance(Locale.US).parse( this.getText() );
                 } catch ( ParseException e ) {
                     // return String anyway
                     return this.getText();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Cheese.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Cheese.java	2009-05-15 03:41:16 UTC (rev 26541)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Cheese.java	2009-05-15 03:42:44 UTC (rev 26542)
@@ -33,6 +33,7 @@
     private int               price;
     private int               oldPrice;
     private Date              usedBy;
+    private double            doublePrice;
 
     public Cheese() {
 
@@ -116,6 +117,14 @@
         this.usedBy = usedBy;
     }
 
+    public synchronized double getDoublePrice() {
+        return doublePrice;
+    }
 
+    public synchronized void setDoublePrice(double doublePrice) {
+        this.doublePrice = doublePrice;
+    }
 
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-05-15 03:41:16 UTC (rev 26541)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-05-15 03:42:44 UTC (rev 26542)
@@ -30,6 +30,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -1433,6 +1434,52 @@
 
     }
 
+    public void testLatinLocale() throws Exception {
+        Locale defaultLoc = Locale.getDefault();
+        
+        try {
+            // setting a locale that uses COMMA as decimal separator
+            Locale.setDefault( new Locale("pt","BR") );
+            
+            KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+            kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "test_LatinLocale.drl" ) ), 
+                          ResourceType.DRL );
+
+            assertFalse( kbuilder.getErrors().toString(), 
+                         kbuilder.hasErrors() );
+
+            KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+            kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+            
+            StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+            
+            final List<String> results = new ArrayList<String>();
+            ksession.setGlobal( "results",
+                               results );
+            
+            final Cheese mycheese = new Cheese( "cheddar",
+                                                4 );
+            org.drools.runtime.rule.FactHandle handle = ksession.insert( mycheese );
+            ksession.fireAllRules();
+            
+            assertEquals( 1, results.size() );
+            assertEquals( "1",
+                          results.get( 0 ) );
+
+            mycheese.setPrice( 8 );
+            mycheese.setDoublePrice( 8.50 );
+            
+            ksession.update( handle, mycheese );
+            ksession.fireAllRules();
+            assertEquals( 2, results.size() );
+            assertEquals( "3",
+                          results.get( 1 ) );
+        } finally {
+            Locale.setDefault( defaultLoc );
+        }
+
+    }
+
     public void testLiteral() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "literal_rule_test.drl" ) ) );

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LatinLocale.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LatinLocale.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LatinLocale.drl	2009-05-15 03:42:44 UTC (rev 26542)
@@ -0,0 +1,24 @@
+package org.drools
+
+global java.util.List results
+
+rule "rule 1" 
+    when
+        Cheese( $pr : price <= 6.00)
+    then
+		results.add( "1" );       
+end 
+
+rule "rule 2"
+    when
+        Cheese( $pr : price > 8.49 ) 
+    then
+		results.add( "2" );         
+end 
+
+rule "rule 3"
+    when
+        Cheese( $pr : doublePrice > 8.49 ) 
+    then
+		results.add( "3" );         
+end 




More information about the jboss-svn-commits mailing list