[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