[jboss-svn-commits] JBL Code SVN: r31938 - in labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint: src/main/java/org/drools/factconstraint/predefined and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Mar 4 09:15:57 EST 2010


Author: eaa
Date: 2010-03-04 09:15:56 -0500 (Thu, 04 Mar 2010)
New Revision: 31938

Added:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/model/
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/model/Person.java
Modified:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/IntegerConstraintTest.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java
Log:
Added project dependency to drools-verifier
Added test cases that use verifier.
Fixed available constraints to generate well-formed verifier's rules

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml	2010-03-04 14:06:56 UTC (rev 31937)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml	2010-03-04 14:15:56 UTC (rev 31938)
@@ -17,5 +17,11 @@
       <version>4.7</version>
       <scope>test</scope>
     </dependency>
+
+    <dependency>
+        <groupId>org.drools</groupId>
+        <artifactId>drools-verifier</artifactId>
+        <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java	2010-03-04 14:06:56 UTC (rev 31937)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java	2010-03-04 14:15:56 UTC (rev 31938)
@@ -18,7 +18,7 @@
     @Override
     public String getVerifierRule() {
         List<String> constraints = new ArrayList<String>();
-        constraints.add("value == null");
+        constraints.add("valueType == Field.UNKNOWN");
 
         return this.createVerifierRuleTemplate("Not_null_Field_Constraint", constraints, "The value could not be null"); //I18N
     }

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java	2010-03-04 14:06:56 UTC (rev 31937)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java	2010-03-04 14:15:56 UTC (rev 31938)
@@ -15,8 +15,7 @@
     public static final String RANGE_CONSTRAINT_MIN = "Min. value";
     public static final String RANGE_CONSTRAINT_MAX = "Max. value";
 
-
-    public RangeConstraint(){
+    public RangeConstraint() {
         //set default values
         this.setArgumentValue(RANGE_CONSTRAINT_MIN, 0);
         this.setArgumentValue(RANGE_CONSTRAINT_MAX, 0);
@@ -28,9 +27,19 @@
         try {
             double min = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MIN).toString());
             double max = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MAX).toString());
-            List<String> constraints = new ArrayList<String>();
-            constraints.add("value < " + min + " || > " + max);
-            return this.createVerifierRuleTemplate("Range_Field_Constraint", constraints, "The value must be an integer"); //I18N
+
+            this.verifierRestrictiondPatternTemplate = "      ($restriction :LiteralRestriction(\n";
+            this.verifierRestrictiondPatternTemplate += "            fieldGuid == $field.guid,\n";
+            this.verifierRestrictiondPatternTemplate += "            valueType == Field.INT,\n";
+            this.verifierRestrictiondPatternTemplate += "            intValue < " + min + " || > " + max+"\n";
+            this.verifierRestrictiondPatternTemplate += "      ) OR\n";
+            this.verifierRestrictiondPatternTemplate += "      $restriction :LiteralRestriction(\n";
+            this.verifierRestrictiondPatternTemplate += "            fieldGuid == $field.guid,\n";
+            this.verifierRestrictiondPatternTemplate += "            valueType == Field.DOUBLE,\n";
+            this.verifierRestrictiondPatternTemplate += "            doubleValue < " + min + " || > " + max+"\n";
+            this.verifierRestrictiondPatternTemplate += "      ))\n";
+
+            return this.createVerifierRuleTemplate("Range_Field_Constraint", null, "The value must be between " + min + " and " + max); //I18N
         } catch (ArgumentNotSetException ex) {
             throw new IllegalStateException("Some arguments are missing");
         }
@@ -40,24 +49,24 @@
     public ValidationResult validate(Object value) {
         ValidationResult result = new ValidationResult();
 
-        try{
-            if (value == null || !(value instanceof Number || value instanceof String )){
+        try {
+            if (value == null || !(value instanceof Number || value instanceof String)) {
                 result.setSuccess(false);
                 if (value == null) {
                     result.setMessage("The value is null"); //TODO: I18N
-                }else{
-                    result.setMessage("Invalid value type "+value.getClass().getName()); //TODO: I18N
+                } else {
+                    result.setMessage("Invalid value type " + value.getClass().getName()); //TODO: I18N
                 }
-            }else{
+            } else {
                 double min = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MIN).toString());
                 double max = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MAX).toString());
                 double d = Double.parseDouble(value.toString());
                 result.setSuccess((d > min && d < max));
-                if (!result.isSuccess()){
-                    result.setMessage("The value should be between "+min+" and "+max); //TODO: I18N
+                if (!result.isSuccess()) {
+                    result.setMessage("The value should be between " + min + " and " + max); //TODO: I18N
                 }
             }
-        }catch (Throwable t){
+        } catch (Throwable t) {
             result.setSuccess(false);
             result.setMessage(t.getMessage()); //TODO: I18N
         }

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/IntegerConstraintTest.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/IntegerConstraintTest.java	2010-03-04 14:06:56 UTC (rev 31937)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/IntegerConstraintTest.java	2010-03-04 14:15:56 UTC (rev 31938)
@@ -1,7 +1,20 @@
 package org.drools.factconstraint;
 
+import java.util.Collection;
+import org.drools.builder.ResourceType;
 import org.drools.factconstraint.predefined.IntegerConstraint;
+import org.drools.io.ResourceFactory;
+import org.drools.verifier.Verifier;
+import org.drools.verifier.VerifierConfiguration;
+import org.drools.verifier.VerifierConfigurationImpl;
+import org.drools.verifier.VerifierError;
+import org.drools.verifier.builder.VerifierBuilder;
+import org.drools.verifier.builder.VerifierBuilderFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessageBase;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 /**
@@ -10,15 +23,22 @@
  */
 public class IntegerConstraintTest {
 
-    @Test
-    public void testValidConstraint(){
+    private Constraint cons;
 
-        Constraint cons = new IntegerConstraint();
-        cons.setFactType("some.fact.Type");
-        cons.setFieldName("someField");
+    @Before
+    public void setup() {
+        cons = new IntegerConstraint();
+        cons.setFactType("Person");
+        cons.setFieldName("age");
 
-        System.out.println("Validation Rule:\n"+cons.getVerifierRule()+"\n\n");
 
+        System.out.println("Validation Rule:\n" + cons.getVerifierRule() + "\n\n");
+
+    }
+
+    @Test
+    public void testValidConstraint() {
+
         ValidationResult result = cons.validate(12);
         Assert.assertTrue(result.isSuccess());
 
@@ -31,41 +51,108 @@
     }
 
     @Test
-    public void testInvalidConstraint(){
+    public void testInvalidConstraint() {
 
-        Constraint cons = new IntegerConstraint();
-        cons.setFactType("some.fact.Type");
-        cons.setFieldName("someField");
-
         ValidationResult result = cons.validate(new Object());
         Assert.assertFalse(result.isSuccess());
-        System.out.println("Message: "+result.getMessage());
+        System.out.println("Message: " + result.getMessage());
 
         result = cons.validate("");
         Assert.assertFalse(result.isSuccess());
-        System.out.println("Message: "+result.getMessage());
+        System.out.println("Message: " + result.getMessage());
 
         result = cons.validate("ABC");
         Assert.assertFalse(result.isSuccess());
-        System.out.println("Message: "+result.getMessage());
+        System.out.println("Message: " + result.getMessage());
 
         result = cons.validate(null);
         Assert.assertFalse(result.isSuccess());
-        System.out.println("Message: "+result.getMessage());
+        System.out.println("Message: " + result.getMessage());
 
         result = cons.validate(new Long("12"));
         Assert.assertFalse(result.isSuccess());
-        System.out.println("Message: "+result.getMessage());
+        System.out.println("Message: " + result.getMessage());
 
         result = cons.validate(12L);
         Assert.assertFalse(result.isSuccess());
-        System.out.println("Message: "+result.getMessage());
+        System.out.println("Message: " + result.getMessage());
 
         result = cons.validate(12.8);
         Assert.assertFalse(result.isSuccess());
-        System.out.println("Message: "+result.getMessage());
+        System.out.println("Message: " + result.getMessage());
 
 
     }
 
+    @Test
+    public void testUsingVerifier() {
+
+        String ruleToVerify = "";
+
+        //FAIL
+        ruleToVerify += "package org.drools.factconstraint.test\n\n";
+        ruleToVerify += "import org.drools.factconstraint.model.*\n";
+        ruleToVerify += "rule \"rule1\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 'abc')\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n\n";
+
+        //OK
+        ruleToVerify += "rule \"rule2\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 12)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n\n";
+
+        //FAIL
+        ruleToVerify += "rule \"rule3\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == '')\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
+
+        //VerifierConfiguration conf = new DefaultVerifierConfiguration();
+        VerifierConfiguration conf = new VerifierConfigurationImpl();
+
+        conf.getVerifyingResources().put(ResourceFactory.newByteArrayResource(cons.getVerifierRule().getBytes()), ResourceType.DRL);
+
+        Verifier verifier = vBuilder.newVerifier(conf);
+
+        verifier.addResourcesToVerify(ResourceFactory.newByteArrayResource(ruleToVerify.getBytes()),
+                ResourceType.DRL);
+
+        if (verifier.hasErrors()) {
+            for (VerifierError error : verifier.getErrors()) {
+                System.out.println(error.getMessage());
+            }
+            throw new RuntimeException("Error building verifier");
+        }
+
+        Assert.assertFalse(verifier.hasErrors());
+
+        boolean noProblems = verifier.fireAnalysis();
+        Assert.assertTrue(noProblems);
+
+        VerifierReport result = verifier.getResult();
+
+        Collection<VerifierMessageBase> warnings = result.getBySeverity(Severity.ERROR);
+
+        int counter = 0;
+        for (VerifierMessageBase message : warnings) {
+            System.out.println(message);
+            counter++;
+        }
+
+        Assert.assertEquals(2,
+                counter);
+
+        verifier.dispose();
+    }
 }

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java	2010-03-04 14:06:56 UTC (rev 31937)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java	2010-03-04 14:15:56 UTC (rev 31938)
@@ -1,8 +1,20 @@
 package org.drools.factconstraint;
 
-import org.drools.factconstraint.predefined.IntegerConstraint;
+import java.util.Collection;
+import org.drools.builder.ResourceType;
 import org.drools.factconstraint.predefined.NotNullConstraint;
+import org.drools.io.ResourceFactory;
+import org.drools.verifier.Verifier;
+import org.drools.verifier.VerifierConfiguration;
+import org.drools.verifier.VerifierConfigurationImpl;
+import org.drools.verifier.VerifierError;
+import org.drools.verifier.builder.VerifierBuilder;
+import org.drools.verifier.builder.VerifierBuilderFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessageBase;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 /**
@@ -11,15 +23,19 @@
  */
 public class NotNullConstraintTest {
 
-    @Test
-    public void testValidConstraint(){
+    private Constraint cons;
 
-        Constraint cons = new NotNullConstraint();
-        cons.setFactType("some.fact.Type");
-        cons.setFieldName("someField");
+    @Before
+    public void setup() {
+        cons = new NotNullConstraint();
+        cons.setFactType("Person");
+        cons.setFieldName("name");
+        System.out.println("Validation Rule:\n" + cons.getVerifierRule() + "\n\n");
 
-        System.out.println("Validation Rule:\n"+cons.getVerifierRule()+"\n\n");
+    }
 
+    @Test
+    public void testValidConstraint(){
 
         ValidationResult result = cons.validate(new Object());
         Assert.assertTrue(result.isSuccess());
@@ -46,14 +62,82 @@
     @Test
     public void testInvalidConstraint(){
 
-        Constraint cons = new IntegerConstraint();
-        cons.setFactType("some.fact.Type");
-        cons.setFieldName("someField");
-
         ValidationResult result = cons.validate(null);
         Assert.assertFalse(result.isSuccess());
         System.out.println("Message: "+result.getMessage());
 
     }
 
+    @Test
+    public void testUsingVerifier() {
+
+        String ruleToVerify = "";
+
+        //OK
+        ruleToVerify += "package org.drools.factconstraint.test\n\n";
+        ruleToVerify += "import org.drools.factconstraint.model.*\n";
+        ruleToVerify += "rule \"rule1\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(name == 'John McClane')\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n\n";
+
+        //FAIL
+        ruleToVerify += "rule \"rule2\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(name == null)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n\n";
+
+        //OK
+        ruleToVerify += "rule \"rule3\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(name == '')\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
+
+        //VerifierConfiguration conf = new DefaultVerifierConfiguration();
+        VerifierConfiguration conf = new VerifierConfigurationImpl();
+
+        conf.getVerifyingResources().put(ResourceFactory.newByteArrayResource(cons.getVerifierRule().getBytes()), ResourceType.DRL);
+
+        Verifier verifier = vBuilder.newVerifier(conf);
+
+        verifier.addResourcesToVerify(ResourceFactory.newByteArrayResource(ruleToVerify.getBytes()),
+                ResourceType.DRL);
+
+        if (verifier.hasErrors()) {
+            for (VerifierError error : verifier.getErrors()) {
+                System.out.println(error.getMessage());
+            }
+            throw new RuntimeException("Error building verifier");
+        }
+
+        Assert.assertFalse(verifier.hasErrors());
+
+        boolean noProblems = verifier.fireAnalysis();
+        Assert.assertTrue(noProblems);
+
+        VerifierReport result = verifier.getResult();
+
+        Collection<VerifierMessageBase> warnings = result.getBySeverity(Severity.ERROR);
+
+        int counter = 0;
+        for (VerifierMessageBase message : warnings) {
+            System.out.println(message);
+            counter++;
+        }
+
+        Assert.assertEquals(1,
+                counter);
+
+        verifier.dispose();
+    }
+
 }

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java	2010-03-04 14:06:56 UTC (rev 31937)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java	2010-03-04 14:15:56 UTC (rev 31938)
@@ -1,7 +1,20 @@
 package org.drools.factconstraint;
 
+import java.util.Collection;
+import org.drools.builder.ResourceType;
 import org.drools.factconstraint.predefined.RangeConstraint;
+import org.drools.io.ResourceFactory;
+import org.drools.verifier.Verifier;
+import org.drools.verifier.VerifierConfiguration;
+import org.drools.verifier.VerifierConfigurationImpl;
+import org.drools.verifier.VerifierError;
+import org.drools.verifier.builder.VerifierBuilder;
+import org.drools.verifier.builder.VerifierBuilderFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessageBase;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 /**
@@ -10,17 +23,24 @@
  */
 public class RangeConstraintTest {
 
+    private Constraint cons;
+
+    @Before
+    public void setup() {
+        cons = new RangeConstraint();
+        cons.setFactType("Person");
+        cons.setFieldName("age");
+
+        System.out.println("Validation Rule:\n" + cons.getVerifierRule() + "\n\n");
+
+    }
+
     @Test
     public void testValidConstraint(){
 
-        Constraint cons = new RangeConstraint();
-        cons.setFactType("some.fact.Type");
-        cons.setFieldName("someField");
         cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MIN, -0.5);
         cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MAX, 100);
-
-        System.out.println("Validation Rule:\n"+cons.getVerifierRule()+"\n\n");
-
+        
         ValidationResult result = cons.validate(12);
         Assert.assertTrue(result.isSuccess());
 
@@ -44,10 +64,6 @@
     @Test
     public void testInvalidConstraint(){
 
-        Constraint cons = new RangeConstraint();
-        cons.setFactType("some.fact.Type");
-        cons.setFieldName("someField");
-
         cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MIN, -0.5);
         cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MAX, 100);
 
@@ -82,4 +98,165 @@
 
     }
 
+    @Test
+    public void testUsingVerifier() {
+
+        //age constraint
+        cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MIN, 0);
+        cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MAX, 120);
+
+        //salary constraint
+        Constraint salaryCons = new RangeConstraint();
+        salaryCons.setFactType("Person");
+        salaryCons.setFieldName("salary");
+        salaryCons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MIN, 0);
+        salaryCons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MAX, 1000.6);
+
+        System.out.println("Validation Rule:\n" + cons.getVerifierRule() + "\n\n");
+
+
+        String ruleToVerify = "";
+
+        //OK
+        ruleToVerify += "package org.drools.factconstraint.test\n\n";
+        ruleToVerify += "import org.drools.factconstraint.model.*\n";
+        ruleToVerify += "rule \"rule1\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 10)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n\n";
+
+        //FAIL
+        ruleToVerify += "rule \"rule2\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == -5)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n\n";
+
+        //OK
+        ruleToVerify += "rule \"rule3\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 100)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //OK
+        ruleToVerify += "rule \"rule4\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(salary == 100)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //OK
+        ruleToVerify += "rule \"rule5\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(salary == 89.67)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //FAIL
+        ruleToVerify += "rule \"rule6\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(salary == 1000.7)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //FAIL
+        ruleToVerify += "rule \"rule7\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(salary == 1001)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //OK
+        ruleToVerify += "rule \"rule8\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 40, salary == 1000)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //FAIL: age
+        ruleToVerify += "rule \"rule9\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 400, salary == 1000)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //FAIL salary
+        ruleToVerify += "rule \"rule10\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 40, salary == 1003)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //FAIL both (creates 2 warnings)
+        ruleToVerify += "rule \"rule11\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 400, salary == 1003)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+        //FAIL both (creates 2 warnings)
+        ruleToVerify += "rule \"rule11\"\n";
+        ruleToVerify += "   when\n";
+        ruleToVerify += "       Person(age == 400, salary == -0.69)\n";
+        ruleToVerify += "   then\n";
+        ruleToVerify += "       System.out.println(\"Rule fired\");\n";
+        ruleToVerify += "end\n";
+
+
+
+
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
+
+        //VerifierConfiguration conf = new DefaultVerifierConfiguration();
+        VerifierConfiguration conf = new VerifierConfigurationImpl();
+
+        conf.getVerifyingResources().put(ResourceFactory.newByteArrayResource(cons.getVerifierRule().getBytes()), ResourceType.DRL);
+        conf.getVerifyingResources().put(ResourceFactory.newByteArrayResource(salaryCons.getVerifierRule().getBytes()), ResourceType.DRL);
+
+        Verifier verifier = vBuilder.newVerifier(conf);
+
+        verifier.addResourcesToVerify(ResourceFactory.newByteArrayResource(ruleToVerify.getBytes()),
+                ResourceType.DRL);
+
+        if (verifier.hasErrors()) {
+            for (VerifierError error : verifier.getErrors()) {
+                System.out.println(error.getMessage());
+            }
+            throw new RuntimeException("Error building verifier");
+        }
+
+        Assert.assertFalse(verifier.hasErrors());
+
+        boolean noProblems = verifier.fireAnalysis();
+        Assert.assertTrue(noProblems);
+
+        VerifierReport result = verifier.getResult();
+
+        Collection<VerifierMessageBase> warnings = result.getBySeverity(Severity.ERROR);
+
+        int counter = 0;
+        for (VerifierMessageBase message : warnings) {
+            System.out.println(message);
+            counter++;
+        }
+
+        Assert.assertEquals(9,
+                counter);
+
+        verifier.dispose();
+    }
+
 }

Added: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/model/Person.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/model/Person.java	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/model/Person.java	2010-03-04 14:15:56 UTC (rev 31938)
@@ -0,0 +1,45 @@
+package org.drools.factconstraint.model;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public class Person {
+    private String name;
+    private int age;
+    private double salary;
+
+    public Person(String name, int age,double salary) {
+        this.name = name;
+        this.age = age;
+        this.salary = salary;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public double getSalary() {
+        return salary;
+    }
+
+    public void setSalary(double salary) {
+        this.salary = salary;
+    }
+
+    
+
+    
+}



More information about the jboss-svn-commits mailing list