[jboss-svn-commits] JBL Code SVN: r20905 - in labs/jbossrules/trunk/drools-verifier/src: main/java/org/drools/verifier/components and 19 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jul 4 10:40:55 EDT 2008
Author: Rikkola
Date: 2008-07-04 10:40:55 -0400 (Fri, 04 Jul 2008)
New Revision: 20905
Added:
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java
Removed:
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java
Modified:
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java
labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl
labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java
labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java
labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl
labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl
Log:
1. JBRULES-1647
2. Rules that find patterns that are always or never satisfied.
3. HTML report had some problems with layout, fixed them.
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -33,7 +33,7 @@
import org.drools.lang.descr.VariableRestrictionDescr;
import org.drools.verifier.components.VerifierAccessorDescr;
import org.drools.verifier.components.VerifierAccumulateDescr;
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
import org.drools.verifier.components.VerifierCollectDescr;
import org.drools.verifier.components.VerifierComponent;
import org.drools.verifier.components.VerifierComponentType;
@@ -74,7 +74,7 @@
private VerifierRule currentRule = null;
private Pattern currentPattern = null;
private Constraint currentConstraint = null;
- private VerifierClass currentClass = null;
+ private ObjectType currentClass = null;
private Field currentField = null;
/**
@@ -84,9 +84,10 @@
* PackageDescr that will be flattened.
* @param data
* VerifierData where the flattened objects are added.
+ * @throws UnknownDescriptionException
*/
public void addPackageDescrToData(PackageDescr packageDescr,
- VerifierData data) {
+ VerifierData data) throws UnknownDescriptionException {
this.data = data;
@@ -95,7 +96,8 @@
formPossibilities();
}
- private void flatten(Collection<?> descrs, VerifierComponent parent) {
+ private void flatten(Collection<?> descrs, VerifierComponent parent)
+ throws UnknownDescriptionException {
int orderNumber = 0;
@@ -144,20 +146,20 @@
}
private VerifierComponent flatten(PatternSourceDescr descr,
- VerifierComponent parent) {
+ VerifierComponent parent) throws UnknownDescriptionException {
if (descr instanceof AccumulateDescr) {
return flatten((AccumulateDescr) descr, parent);
} else if (descr instanceof CollectDescr) {
return flatten((CollectDescr) descr, parent);
} else if (descr instanceof FromDescr) {
return flatten((FromDescr) descr, parent);
+ }else {
+ throw new UnknownDescriptionException(descr);
}
-
- return null;
}
private VerifierComponent flatten(DeclarativeInvokerDescr descr,
- VerifierComponent parent) {
+ VerifierComponent parent) throws UnknownDescriptionException {
if (descr instanceof AccessorDescr) {
return flatten((AccessorDescr) descr, parent);
} else if (descr instanceof FieldAccessDescr) {
@@ -166,13 +168,15 @@
return flatten((FunctionCallDescr) descr, parent);
} else if (descr instanceof MethodAccessDescr) {
return flatten((MethodAccessDescr) descr, parent);
+ }else {
+ throw new UnknownDescriptionException(descr);
}
-
- return null;
}
private void flatten(ConditionalElementDescr descr,
- VerifierComponent parent, int orderNumber) {
+ VerifierComponent parent, int orderNumber)
+ throws UnknownDescriptionException {
+
if (descr instanceof AndDescr) {
flatten((AndDescr) descr, parent, orderNumber);
} else if (descr instanceof CollectDescr) {
@@ -192,19 +196,22 @@
}
}
- private void flatten(ForallDescr descr, VerifierComponent parent) {
+ private void flatten(ForallDescr descr, VerifierComponent parent)
+ throws UnknownDescriptionException {
solvers.startForall();
flatten(descr.getDescrs(), parent);
solvers.endForall();
}
- private void flatten(ExistsDescr descr, VerifierComponent parent) {
+ private void flatten(ExistsDescr descr, VerifierComponent parent)
+ throws UnknownDescriptionException {
solvers.startExists();
flatten(descr.getDescrs(), parent);
solvers.endExists();
}
- private void flatten(NotDescr descr, VerifierComponent parent) {
+ private void flatten(NotDescr descr, VerifierComponent parent)
+ throws UnknownDescriptionException {
solvers.startNot();
flatten(descr.getDescrs(), parent);
solvers.endNot();
@@ -276,9 +283,9 @@
*
* @param descr
* @return
+ * @throws UnknownDescriptionException
*/
- private VerifierFromDescr flatten(FromDescr descr,
- VerifierComponent parent) {
+ private VerifierFromDescr flatten(FromDescr descr, VerifierComponent parent) throws UnknownDescriptionException {
VerifierFromDescr from = new VerifierFromDescr();
VerifierComponent ds = flatten(descr.getDataSource(), from);
@@ -290,7 +297,7 @@
}
private VerifierAccumulateDescr flatten(AccumulateDescr descr,
- VerifierComponent parent) {
+ VerifierComponent parent) throws UnknownDescriptionException {
VerifierAccumulateDescr accumulate = new VerifierAccumulateDescr();
accumulate.setInputPatternId(flatten(descr.getInputPattern(),
@@ -313,7 +320,7 @@
}
private VerifierCollectDescr flatten(CollectDescr descr,
- VerifierComponent parent) {
+ VerifierComponent parent) throws UnknownDescriptionException {
VerifierCollectDescr collect = new VerifierCollectDescr();
collect.setClassMethodName(descr.getClassMethodName());
collect
@@ -364,7 +371,7 @@
return accessor;
}
- private void flatten(PackageDescr descr) {
+ private void flatten(PackageDescr descr) throws UnknownDescriptionException {
RulePackage rulePackage = data.getRulePackageByName(descr.getName());
if (rulePackage == null) {
@@ -379,7 +386,8 @@
flatten(descr.getRules(), rulePackage);
}
- private void flatten(RuleDescr descr, VerifierComponent parent) {
+ private void flatten(RuleDescr descr, VerifierComponent parent)
+ throws UnknownDescriptionException {
VerifierRule rule = new VerifierRule();
currentRule = rule;
@@ -447,48 +455,48 @@
}
private void flatten(OrDescr descr, VerifierComponent parent,
- int orderNumber) {
+ int orderNumber) throws UnknownDescriptionException {
OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.OR);
operatorDescr.setOrderNumber(orderNumber);
operatorDescr.setParent(parent);
data.add(operatorDescr);
- solvers.startOperator(operatorDescr);
+ solvers.startOperator(OperatorDescr.Type.OR);
flatten(descr.getDescrs(), operatorDescr);
solvers.endOperator();
}
private void flatten(AndDescr descr, VerifierComponent parent,
- int orderNumber) {
+ int orderNumber) throws UnknownDescriptionException {
OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.AND);
operatorDescr.setOrderNumber(orderNumber);
operatorDescr.setParent(parent);
data.add(operatorDescr);
- solvers.startOperator(operatorDescr);
+ solvers.startOperator(OperatorDescr.Type.AND);
flatten(descr.getDescrs(), operatorDescr);
solvers.endOperator();
}
private int flatten(PatternDescr descr, VerifierComponent parent,
- int orderNumber) {
+ int orderNumber) throws UnknownDescriptionException {
- VerifierClass clazz = data.getClassByPackageAndName(descr
+ ObjectType objectType = data.getClassByPackageAndName(descr
.getObjectType());
- if (clazz == null) {
- clazz = new VerifierClass();
- clazz.setName(descr.getObjectType());
- data.add(clazz);
+ if (objectType == null) {
+ objectType = new ObjectType();
+ objectType.setName(descr.getObjectType());
+ data.add(objectType);
}
- currentClass = clazz;
+ currentClass = objectType;
Pattern pattern = new Pattern();
pattern.setRuleId(currentRule.getId());
pattern.setRuleName(currentRule.getRuleName());
- pattern.setClassId(clazz.getId());
- pattern.setName(clazz.getName());
+ pattern.setClassId(objectType.getId());
+ pattern.setName(objectType.getName());
pattern.setPatternNot(solvers.getRuleSolver().isChildNot());
pattern.setPatternExists(solvers.getRuleSolver().isExists());
pattern.setPatternForall(solvers.getRuleSolver().isForall());
@@ -505,7 +513,7 @@
variable.setName(descr.getIdentifier());
variable.setObjectType(VerifierComponentType.CLASS);
- variable.setObjectId(clazz.getId());
+ variable.setObjectId(objectType.getId());
variable.setObjectName(descr.getObjectType());
data.add(variable);
@@ -528,7 +536,7 @@
}
private void flatten(FieldConstraintDescr descr, VerifierComponent parent,
- int orderNumber) {
+ int orderNumber) throws UnknownDescriptionException {
Field field = data.getFieldByClassAndFieldName(currentClass.getName(),
descr.getFieldName());
@@ -558,9 +566,24 @@
}
private void flatten(RestrictionConnectiveDescr descr,
- VerifierComponent parent, int orderNumber) {
- // TODO: check.
- flatten(descr.getRestrictions(), parent);
+ VerifierComponent parent, int orderNumber)
+ throws UnknownDescriptionException {
+
+ if (descr.getConnective() == RestrictionConnectiveDescr.AND) {
+
+ solvers.startOperator(OperatorDescr.Type.AND);
+ flatten(descr.getRestrictions(), parent);
+ solvers.endOperator();
+
+ } else if (descr.getConnective() == RestrictionConnectiveDescr.OR) {
+
+ solvers.startOperator(OperatorDescr.Type.OR);
+ flatten(descr.getRestrictions(), parent);
+ solvers.endOperator();
+
+ } else {
+ throw new UnknownDescriptionException(descr);
+ }
}
/**
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,29 +16,50 @@
public static Collection<Package> loadPackages() {
String[] fileNames = new String[] {
+ // Missing consequence
+ "Consequence.drl",
+ // Always false
+ "alwaysFalse/Patterns.drl",
// Equivalence
"equivalence/Rules.drl",
// Incoherence
"incoherence/Patterns.drl",
"incoherence/Restrictions.drl",
+ // Incompatibility
+ "incompatibility/Patterns.drl",
+ "incompatibility/Restrictions.drl",
// Missing equality
"missingEquality/MissingEquality.drl",
+ // Opposites
+ "opposites/Patterns.drl",
+ "opposites/Restrictions.drl",
+ "opposites/Rules.drl",
// Optimization
+ "optimisation/PatternOrder.drl",
"optimisation/RestrictionOrder.drl",
- "optimisation/PatternOrder.drl",
+ // Overlaps
+ "overlaps/Restrictions.drl",
// Range checks
- "rangeChecks/Dates.drl", "rangeChecks/Doubles.drl",
+ "rangeChecks/Clean.drl",
+ "rangeChecks/Dates.drl",
+ "rangeChecks/Doubles.drl",
"rangeChecks/Integers.drl",
"rangeChecks/NumberPatterns.drl",
"rangeChecks/Variables.drl",
- "rangeChecks/Clean.drl",
// Redundancy
- "redundancy/Restrictions.drl", "redundancy/Notes.drl",
- "redundancy/Consequence.drl", "redundancy/Patterns.drl",
- "redundancy/Possibilities.drl", "redundancy/Rules.drl",
- "redundancy/Warnings.drl", "reports/RangeCheckReports.drl",
- // Missing consequence
- "Consequence.drl", };
+ "redundancy/Consequence.drl",
+ "redundancy/Notes.drl",
+ "redundancy/Patterns.drl",
+ "redundancy/Possibilities.drl",
+ "redundancy/Restrictions.drl",
+ "redundancy/Rules.drl",
+ "redundancy/Warnings.drl",
+ // Reporting
+ "reports/RangeCheckReports.drl",
+ // Subsumption
+ "subsumption/Possibilities.drl",
+ "subsumption/Restrictions.drl"
+ };
Collection<Package> packages = new ArrayList<Package>();
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -8,8 +8,6 @@
import org.drools.verifier.components.VerifierComponent;
import org.drools.verifier.components.OperatorDescr;
-
-
/**
* Takes a list of Constraints and makes possibilities from them.
*
@@ -29,12 +27,28 @@
this.type = type;
}
+ public void addOperator(OperatorDescr.Type type) {
+ if (subSolver != null) {
+ subSolver.addOperator(type);
+ } else {
+ subSolver = new Solver(type);
+ }
+ }
+
+ /**
+ * Add new descr.
+ *
+ * @param descr
+ */
public void add(VerifierComponent descr) {
+
+ if (descr instanceof OperatorDescr) {
+ throw new UnsupportedOperationException(
+ "Operator descrs are not supported.");
+ }
+
if (subSolver != null) {
subSolver.add(descr);
- } else if (descr instanceof OperatorDescr) {
- OperatorDescr operatorDescr = (OperatorDescr) descr;
- subSolver = new Solver(operatorDescr.getType());
} else {
if (type == OperatorDescr.Type.AND) {
if (possibilityLists.isEmpty()) {
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,7 @@
*
* @author Toni Rikkola
*/
- class Solvers {
+class Solvers {
private RuleSolver ruleSolver = null;
private PatternSolver patternSolver = null;
@@ -92,11 +92,11 @@
}
}
- public void startOperator(OperatorDescr operatorDescr) {
+ public void startOperator(OperatorDescr.Type type) {
if (patternSolver != null) {
- patternSolver.add(operatorDescr);
+ patternSolver.addOperator(type);
} else if (ruleSolver != null) {
- ruleSolver.add(operatorDescr);
+ ruleSolver.addOperator(type);
}
}
Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,21 @@
+package org.drools.verifier;
+
+import org.drools.lang.descr.BaseDescr;
+
+/**
+ * This exception is thrown when verifier tries to handle a descr that it is not
+ * familiar with.
+ *
+ * @author trikkola
+ */
+public class UnknownDescriptionException extends Exception {
+ private static final long serialVersionUID = 6636873223159735829L;
+
+ final BaseDescr descr;
+
+ public UnknownDescriptionException(BaseDescr descr) {
+ super("Descr ( " + descr + " ) is unknown to drools verifier.");
+ this.descr = descr;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,104 +0,0 @@
-package org.drools.verifier.components;
-
-import org.drools.verifier.report.components.Cause;
-import org.drools.verifier.report.components.CauseType;
-
-/**
- *
- * @author Toni Rikkola
- */
-public class Field extends VerifierComponent implements Cause {
-
- public static class FieldType {
- public static final FieldType BOOLEAN = new FieldType("boolean");
- public static final FieldType STRING = new FieldType( "String");
- public static final FieldType INT = new FieldType( "int");
- public static final FieldType DOUBLE = new FieldType( "double");
- public static final FieldType DATE = new FieldType( "Date");
- public static final FieldType VARIABLE = new FieldType( "Variable");
- public static final FieldType OBJECT = new FieldType( "Object");
-
- private final String string;
-
- private FieldType(String string) {
- this.string = string;
- }
-
- @Override
- public String toString() {
- return string;
- }
- }
-
- private static int index = 0;
-
- private int classId;
- private String className;
- private String name;
- private FieldType fieldType;
-
- private int lineNumber;
-
- public Field() {
- super(index++);
- }
-
- @Override
- public VerifierComponentType getComponentType() {
- return VerifierComponentType.FIELD;
- }
-
- public CauseType getCauseType() {
- return CauseType.FIELD;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public FieldType getFieldType() {
- return fieldType;
- }
-
- public void setFieldType(FieldType fieldType) {
- // Only set fieldType to variable if there is no other fieldType found.
- if (fieldType == FieldType.VARIABLE && this.fieldType == null) {
- this.fieldType = fieldType;
- } else {
- this.fieldType = fieldType;
- }
- }
-
- public int getClassId() {
- return classId;
- }
-
- public void setClassId(int classId) {
- this.classId = classId;
- }
-
- public int getLineNumber() {
- return lineNumber;
- }
-
- public void setLineNumber(int lineNumber) {
- this.lineNumber = lineNumber;
- }
-
- public String getClassName() {
- return className;
- }
-
- public void setClassName(String className) {
- this.className = className;
- }
-
- @Override
- public String toString() {
- return "Field '" + name + "' from class '" + className + "'";
- }
-}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,104 @@
+package org.drools.verifier.components;
+
+import org.drools.verifier.report.components.Cause;
+import org.drools.verifier.report.components.CauseType;
+
+/**
+ *
+ * @author Toni Rikkola
+ */
+public class Field extends VerifierComponent implements Cause {
+
+ public static class FieldType {
+ public static final FieldType BOOLEAN = new FieldType("boolean");
+ public static final FieldType STRING = new FieldType( "String");
+ public static final FieldType INT = new FieldType( "int");
+ public static final FieldType DOUBLE = new FieldType( "double");
+ public static final FieldType DATE = new FieldType( "Date");
+ public static final FieldType VARIABLE = new FieldType( "Variable");
+ public static final FieldType OBJECT = new FieldType( "Object");
+
+ private final String string;
+
+ private FieldType(String string) {
+ this.string = string;
+ }
+
+ @Override
+ public String toString() {
+ return string;
+ }
+ }
+
+ private static int index = 0;
+
+ private int classId;
+ private String className;
+ private String name;
+ private FieldType fieldType;
+
+ private int lineNumber;
+
+ public Field() {
+ super(index++);
+ }
+
+ @Override
+ public VerifierComponentType getComponentType() {
+ return VerifierComponentType.FIELD;
+ }
+
+ public CauseType getCauseType() {
+ return CauseType.FIELD;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public FieldType getFieldType() {
+ return fieldType;
+ }
+
+ public void setFieldType(FieldType fieldType) {
+ // Only set fieldType to variable if there is no other fieldType found.
+ if (fieldType == FieldType.VARIABLE && this.fieldType == null) {
+ this.fieldType = fieldType;
+ } else {
+ this.fieldType = fieldType;
+ }
+ }
+
+ public int getClassId() {
+ return classId;
+ }
+
+ public void setClassId(int classId) {
+ this.classId = classId;
+ }
+
+ public int getLineNumber() {
+ return lineNumber;
+ }
+
+ public void setLineNumber(int lineNumber) {
+ this.lineNumber = lineNumber;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ @Override
+ public String toString() {
+ return "Field '" + name + "' from class '" + className + "'";
+ }
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java (from rev 20797, labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java)
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,50 @@
+package org.drools.verifier.components;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Toni Rikkola
+ *
+ */
+public class ObjectType implements Serializable {
+ private static final long serialVersionUID = -783733402566313623L;
+
+ private static int index = 0;
+
+ private int id = index++;
+ private int offset =0;
+
+ private String name;
+
+ private Set<Field> fields = new HashSet<Field>();
+
+ public String getName() {
+ return name;
+ }
+
+ public int getOffset(){
+ return offset + id % 2;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Set<Field> getFields() {
+ return fields;
+ }
+
+ public void setFields(Set<Field> fields) {
+ this.fields = fields;
+ }
+}
Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,50 +0,0 @@
-package org.drools.verifier.components;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * @author Toni Rikkola
- *
- */
-public class VerifierClass implements Serializable {
- private static final long serialVersionUID = -783733402566313623L;
-
- private static int index = 0;
-
- private int id = index++;
- private int offset =0;
-
- private String name;
-
- private Set<Field> fields = new HashSet<Field>();
-
- public String getName() {
- return name;
- }
-
- public int getOffset(){
- return offset + id % 2;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public Set<Field> getFields() {
- return fields;
- }
-
- public void setFields(Set<Field> fields) {
- this.fields = fields;
- }
-}
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,12 +9,12 @@
protected String ruleName;
protected int ruleId;
- protected int id;
+ protected final int id;
protected VerifierComponent parent;
-
+
// Order number of this instance under parent.
- protected int orderNumber = 0;
+ protected int orderNumber = 0;
public abstract VerifierComponentType getComponentType();
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -2,7 +2,7 @@
import java.util.Collection;
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
import org.drools.verifier.components.VerifierEvalDescr;
import org.drools.verifier.components.VerifierPredicateDescr;
import org.drools.verifier.components.VerifierRule;
@@ -26,7 +26,7 @@
public void add(Consequence consequence);
- public void add(VerifierClass clazz);
+ public void add(ObjectType objectType);
public void add(Field field);
@@ -48,9 +48,9 @@
public void add(RulePackage rulePackage);
- public VerifierClass getClassByPackageAndName(String name);
+ public ObjectType getClassByPackageAndName(String name);
- public VerifierClass getClassById(int id);
+ public ObjectType getClassById(int id);
public Field getFieldByClassAndFieldName(String className, String fieldName);
@@ -63,9 +63,9 @@
public Collection<VerifierRule> getAllRules();
- public Collection<VerifierClass> getClassesByRuleName(String ruleName);
+ public Collection<ObjectType> getClassesByRuleName(String ruleName);
- public Collection<VerifierClass> getAllClasses();
+ public Collection<ObjectType> getAllClasses();
public Collection<RulePackage> getAllRulePackages();
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -8,7 +8,7 @@
import java.util.Set;
import java.util.TreeMap;
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
import org.drools.verifier.components.VerifierEvalDescr;
import org.drools.verifier.components.VerifierPredicateDescr;
import org.drools.verifier.components.VerifierRule;
@@ -33,8 +33,8 @@
private Map<Integer, RulePackage> packagesById = new TreeMap<Integer, RulePackage>();
private Map<String, RulePackage> packagesByName = new TreeMap<String, RulePackage>();
- private Map<Integer, VerifierClass> classesById = new TreeMap<Integer, VerifierClass>();
- private Map<String, VerifierClass> classesByName = new TreeMap<String, VerifierClass>();
+ private Map<Integer, ObjectType> classesById = new TreeMap<Integer, ObjectType>();
+ private Map<String, ObjectType> classesByName = new TreeMap<String, ObjectType>();
private Map<String, Field> fieldsByClassAndFieldName = new TreeMap<String, Field>();
private Map<Integer, Field> fieldsById = new TreeMap<Integer, Field>();
private DataTree<Integer, Field> fieldsByClassId = new DataTree<Integer, Field>();
@@ -57,15 +57,15 @@
private Map<Integer, PatternPossibility> patternPossibilitiesById = new TreeMap<Integer, PatternPossibility>();
private Map<Integer, RulePossibility> rulePossibilitiesById = new TreeMap<Integer, RulePossibility>();
- public void add(VerifierClass clazz) {
- classesById.put(Integer.valueOf(clazz.getId()), clazz);
- classesByName.put(clazz.getName(), clazz);
+ public void add(ObjectType objectType) {
+ classesById.put(Integer.valueOf(objectType.getId()), objectType);
+ classesByName.put(objectType.getName(), objectType);
}
public void add(Field field) {
- VerifierClass clazz = classesById.get(Integer.valueOf(field
+ ObjectType objectType = classesById.get(Integer.valueOf(field
.getClassId()));
- fieldsByClassAndFieldName.put(clazz.getName() + "." + field.getName(),
+ fieldsByClassAndFieldName.put(objectType.getName() + "." + field.getName(),
field);
fieldsById.put(field.getId(), field);
@@ -104,7 +104,7 @@
link);
}
- public VerifierClass getClassByPackageAndName(String name) {
+ public ObjectType getClassByPackageAndName(String name) {
return classesByName.get(name);
}
@@ -134,18 +134,18 @@
rulePossibilitiesById.put(possibility.getId(), possibility);
}
- public Collection<VerifierClass> getClassesByRuleName(String ruleName) {
- Set<VerifierClass> set = new HashSet<VerifierClass>();
+ public Collection<ObjectType> getClassesByRuleName(String ruleName) {
+ Set<ObjectType> set = new HashSet<ObjectType>();
for (Pattern pattern : patternsByRuleName.getBranch(ruleName)) {
- VerifierClass clazz = getClassById(pattern.getClassId());
- set.add(clazz);
+ ObjectType objectType = getClassById(pattern.getClassId());
+ set.add(objectType);
}
return set;
}
- public VerifierClass getClassById(int id) {
+ public ObjectType getClassById(int id) {
return classesById.get(id);
}
@@ -173,7 +173,7 @@
return objects;
}
- public Collection<VerifierClass> getAllClasses() {
+ public Collection<ObjectType> getAllClasses() {
return classesById.values();
}
Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,37 @@
+package org.drools.verifier.report.components;
+
+/**
+ * Pattern, rule or similar that is always satisfied.
+ *
+ * @author trikkola
+ *
+ */
+public class AlwaysTrue implements Cause {
+
+ private static int index = 0;
+
+ private final int id = index++;
+
+ private final Cause cause;
+
+ /**
+ *
+ * @param cause
+ * Component that is always satisfied.
+ */
+ public AlwaysTrue(Cause cause) {
+ this.cause = cause;
+ }
+
+ public CauseType getCauseType() {
+ return CauseType.ALWAYS_TRUE;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Cause getCause() {
+ return cause;
+ }
+}
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -18,6 +18,7 @@
public static final CauseType SUBSUMPTION = new CauseType(13);
public static final CauseType OPPOSITE = new CauseType(14);
public static final CauseType INCOMPATIBLE = new CauseType(15);
+ public static final CauseType ALWAYS_TRUE = new CauseType(16);
public final int index;
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,6 +1,5 @@
package org.drools.verifier.report.components;
-
public class MessageType {
public static final MessageType NOT_SPECIFIED = new MessageType(0);
public static final MessageType RANGE_CHECK = new MessageType(1);
@@ -11,6 +10,8 @@
public static final MessageType OPTIMISATION = new MessageType(6);
public static final MessageType INCOHERENCE = new MessageType(7);
public static final MessageType OVERLAP = new MessageType(8);
+ public static final MessageType ALWAYS_FALSE = new MessageType(9);
+ public static final MessageType ALWAYS_TRUE = new MessageType(10);
public final int index;
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -3,12 +3,11 @@
import java.io.File;
import java.io.IOException;
-import org.drools.verifier.components.VerifierClass;
-import org.drools.verifier.components.VerifierRule;
import org.drools.verifier.components.Field;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.VerifierRule;
import org.drools.verifier.dao.VerifierData;
import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.report.components.VerifierMessage;
import org.drools.verifier.report.components.Severity;
public class ComponentsReportModeller extends ReportModeller {
@@ -51,7 +50,7 @@
+ File.separator + UrlFactory.OBJECT_TYPE_FOLDER;
File objectTypesFolder = new File(objectTypeFolder);
objectTypesFolder.mkdir();
- for (VerifierClass objectType : data.getAllClasses()) {
+ for (ObjectType objectType : data.getAllClasses()) {
writeToFile(objectTypeFolder + File.separator + objectType.getId()
+ ".htm", formPage(UrlFactory.PREVIOUS_FOLDER,
ComponentsReportVisitor.visitObjectType(
Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -4,7 +4,7 @@
import java.util.HashMap;
import java.util.Map;
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
import org.drools.verifier.components.VerifierRule;
import org.drools.verifier.components.Field;
import org.drools.verifier.components.Restriction;
@@ -36,7 +36,7 @@
}
public static String visitObjectTypeCollection(String sourceFolder,
- Collection<VerifierClass> objectTypes) {
+ Collection<ObjectType> objectTypes) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("sourceFolder", sourceFolder);
map.put("objectTypeFolder", sourceFolder + "/"
@@ -51,7 +51,7 @@
public static String visitRule(String sourceFolder, VerifierRule rule,
VerifierData data) {
- Collection<VerifierClass> objectTypes = data.getClassesByRuleName(rule
+ Collection<ObjectType> objectTypes = data.getClassesByRuleName(rule
.getRuleName());
Map<String, Object> map = new HashMap<String, Object>();
@@ -67,7 +67,7 @@
}
public static String visitObjectType(String sourceFolder,
- VerifierClass objectType, VerifierData data) {
+ ObjectType objectType, VerifierData data) {
Collection<VerifierRule> rules = data.getRulesByClassId(objectType
.getId());
@@ -87,7 +87,7 @@
public static String visitField(String sourceFolder, Field field,
VerifierResult result) {
VerifierData data = result.getVerifierData();
- VerifierClass objectType = data.getClassById(field.getClassId());
+ ObjectType objectType = data.getClassById(field.getClassId());
Collection<VerifierRule> rules = data.getRulesByFieldId(field.getId());
Map<String, Object> map = new HashMap<String, Object>();
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,12 +16,19 @@
import org.drools.verifier.dao.VerifierResult;
-#declare any global variables here
global VerifierResult result;
#
# Finds patterns that are always false.
#
+# Dependencies:
+# Needs at least one of the following packages or rules to fire:
+# package org.drools.verifier.incompatibility;
+# rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
+# rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
+# rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"
+# rule "Incoherent VariableRestrictions in pattern possibility, impossible range"
+#
# Example:
# Pattern( a == b && a != b )
#
@@ -44,8 +51,7 @@
# Report an error
result.add( new VerifierMessage(
Severity.ERROR,
- MessageType.MISSING_COMPONENT,
+ MessageType.ALWAYS_FALSE,
$p,
$p + " can never be satisfied." ) );
- System.out.println( "jee" );
-end
+end
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,54 @@
+#
+# created on: 5.6.2008
+#
+# Rules in this package look for patterns and rules that can never be satisfied.
+#
+#
+package org.drools.verifier.alwaysFalse
+#list any import classes here.
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.components.RulePossibility;
+
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.MessageType;
+import org.drools.verifier.report.components.Incompatibility;
+import org.drools.verifier.report.components.VerifierMessage;
+
+import org.drools.verifier.dao.VerifierResult;
+
+global VerifierResult result;
+
+#
+# Finds rules that are always false.
+#
+# Dependencies:
+# Needs at least one of the following packages or rules to fire:
+# package org.drools.verifier.incompatibility;
+# rule "Incompatible Patterns"
+#
+# Example:
+# Pattern( a == b && a != b )
+#
+rule "Rule that is always false"
+ when
+ $r :VerifierRule()
+
+ # All the rule possibilities for rule need to be in conflict
+ forall(
+ $rp :RulePossibility(
+ ruleId == $r.id
+ )
+
+ Incompatibility(
+ left memberOf $rp.items,
+ right memberOf $rp.items
+ )
+ )
+ then
+ # Report an error
+ result.add( new VerifierMessage(
+ Severity.ERROR,
+ MessageType.ALWAYS_FALSE,
+ $r,
+ $r + " can never be satisfied." ) );
+end
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,95 @@
+#
+# created on: 27.6.2008
+#
+# Rules in this package look for patterns and rules that are always satisfied.
+#
+#
+package org.drools.verifier.alwaysTrue
+
+
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Opposites;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.MessageType;
+
+import org.drools.verifier.dao.VerifierResult;
+
+global VerifierResult result;
+
+#
+# Finds pattern possibilities that are always true.
+#
+# Dependencies: None
+#
+# Example:
+# Pattern( a > 10 && a <= 10 )
+#
+rule "Pattern possibility that is always true"
+ when
+ $p :Pattern()
+
+ $pp :PatternPossibility(
+ patternId == $p.id
+ )
+
+ # For each restriction in pattern possibility
+ # there needs to be an opposite.
+ forall(
+ $r :Restriction(
+ this memberOf $pp.items
+ )
+
+ Opposites(
+ (
+ left == $r
+ &&
+ right memberOf $pp.items
+ ) || (
+ left memberOf $pp.items
+ &&
+ right == $r
+ )
+ )
+ )
+ then
+ insert( new AlwaysTrue( $pp ));
+end
+
+#
+# Finds patterns that are always true.
+#
+# Dependencies:
+# Needs at least one of the following packages or rules to fire:
+# package org.drools.verifier.alwaysTrue;
+# rule "Pattern possibility that is always true"
+#
+# Example:
+# Pattern( a > 10 && a <= 10 )
+#
+rule "Pattern that is always true"
+ when
+ $p :Pattern()
+
+ # For each restriction in each pattern possibility for current pattern,
+ # there needs to be an opposite.
+ forall(
+ $pp :PatternPossibility(
+ patternId == $p.id
+ )
+
+ AlwaysTrue(
+ cause == $pp
+ )
+ )
+ then
+ result.add( new VerifierMessage(
+ Severity.NOTE,
+ MessageType.ALWAYS_TRUE,
+ $p,
+ $p + " is always satisfied." ) );
+end
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,84 @@
+#
+# created on: 27.6.2008
+#
+# Rules in this package look for patterns and rules that are always satisfied.
+#
+#
+package org.drools.verifier.alwaysTrue
+
+
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.VerifierRule;
+
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Opposites;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.MessageType;
+
+import org.drools.verifier.dao.VerifierResult;
+
+global VerifierResult result;
+
+#
+# Finds rule possibilities that are always true.
+#
+# Dependencies:
+# Needs at least one of the following packages or rules to fire:
+# package org.drools.verifier.alwaysTrue;
+# rule "Pattern possibility that is always true"
+#
+#
+rule "Rule possibility that is always true"
+ when
+ $r :VerifierRule()
+
+ $rp :RulePossibility(
+ ruleId == $r.id
+ )
+
+ # Each pattern possibility in rule possibility needs to be always true.
+ forall(
+ $pp :PatternPossibility(
+ this memberOf $rp.items
+ )
+
+ AlwaysTrue(
+ cause == $pp
+ )
+ )
+ then
+ insert( new AlwaysTrue( $rp ));
+end
+
+#
+# Finds rules that are always true.
+#
+# Dependencies:
+# Needs at least one of the following packages or rules to fire:
+# package org.drools.verifier.alwaysTrue;
+# rule "Rule possibility that is always true"
+#
+#
+rule "Rule that is always true"
+ when
+ $r :VerifierRule()
+
+ forall(
+ $rp :RulePossibility(
+ ruleId == $r.id
+ )
+
+ AlwaysTrue(
+ cause == $rp
+ )
+ )
+ then
+ result.add( new VerifierMessage(
+ Severity.WARNING,
+ MessageType.ALWAYS_TRUE,
+ $r,
+ $r + " is always satisfied." ) );
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,7 +9,7 @@
# Only checks for redundant rule specifications where consequences are not redundant,
# does not include actual pattern and restriction checks.
#
-# Depandencies: None
+# Dependencies: None
#
rule "Find equivalent Rules"
when
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -28,7 +28,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# IncorencePattern( a == 1 )
# not IncorencePattern( a == 1 )
@@ -94,7 +94,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# $var :Object()
# IncorencePattern( a == $var )
@@ -160,7 +160,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# IncorencePattern8( a > 11 )
# not IncorencePattern8( a > 1 )
@@ -225,7 +225,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# IncorencePattern( a < 1 )
# not IncorencePattern( a < 11 )
@@ -290,7 +290,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# IncoherencePattern( a >= 1 )
# not IncoherencePattern( a != 1 )
@@ -356,7 +356,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# IncoherencePattern15( a >= $var )
# not IncoherencePattern15( a != $var )
@@ -422,7 +422,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# IncoherencePattern13( a == $var )
# not IncoherencePattern13( a >= $var )
@@ -487,7 +487,7 @@
# If two Patterns are in conflict.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example:
# IncoherencePattern13( a == $var )
# not IncoherencePattern13( a >= $var )
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -25,7 +25,7 @@
# If two LiteralRestrictions are in conflict.
#
# Type: Error
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern1( a == "b", a != "b" )
#
rule "Incoherent LiteralRestrictions in pattern possibility"
@@ -74,7 +74,7 @@
# If two LiteralRestrictions are in conflict.
#
# Type: Error
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a > 10 && a < -10 )
#
rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible ranges"
@@ -120,7 +120,7 @@
# If two LiteralRestrictions are in conflict.
#
# Type: Error
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a < 1 && a == 10 )
#
rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
@@ -166,7 +166,7 @@
# If two LiteralRestrictions are in conflict.
#
# Type: Error
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a > 10 && a == 1 )
#
rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
@@ -212,7 +212,7 @@
# If two LiteralRestrictions are in conflict.
#
# Type: Error
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a < "12-Dec-2007", a > "12-Dec-2007" )
#
rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible range"
@@ -258,7 +258,7 @@
# If two VariableRestrictions are in conflict.
#
# Type: Error
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a contains $o, a not contains $o )
#
rule "Incoherent VariableRestrictions in pattern possibility"
@@ -305,7 +305,7 @@
# If two VariableRestrictions are in conflict.
#
# Type: Error
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a > $var, a < $var )
#
rule "Incoherent VariableRestrictions in pattern possibility, impossible range"
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,13 +9,19 @@
import org.drools.verifier.dao.VerifierResult;
-#declare any global variables here
global VerifierResult result;
#
# Pattern possibilities are incompatible if any of the restrictions are incompatible.
#
-# Depandencies: None
+# Dependencies:
+# Needs at least one of the following packages or rules to fire:
+# package org.drools.verifier.incompatibility;
+# rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
+# rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
+# rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"
+# rule "Incoherent VariableRestrictions in pattern possibility, impossible range"
+#
# Example:
# Pattern( a < b )
# Pattern( a > b )
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -13,7 +13,7 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a < 1 && a == 10 )
#
rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
@@ -23,7 +23,6 @@
)
$r2 :LiteralRestriction(
- patternId == $r1.patternId,
restrictionType == $r1.restrictionType,
fieldId == $r1.fieldId,
valueType == $r1.valueType,
@@ -39,7 +38,7 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a > 10 && a == 1 )
#
rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
@@ -49,7 +48,6 @@
)
$r2 :LiteralRestriction(
- patternId == $r1.patternId,
restrictionType == $r1.restrictionType,
fieldId == $r1.fieldId,
valueType == $r1.valueType,
@@ -65,7 +63,7 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: IncorencePattern( a < "12-Dec-2007", a > "12-Dec-2007" )
#
rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"
@@ -75,7 +73,6 @@
)
$r2 :LiteralRestriction(
- patternId == $r1.patternId,
restrictionType == $r1.restrictionType,
fieldId == $r1.fieldId,
valueType == $r1.valueType,
@@ -91,7 +88,7 @@
#
# If two VariableRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: Pattern( a > $var, a < $var )
#
rule "Incoherent VariableRestrictions in pattern possibility, impossible range"
@@ -101,7 +98,6 @@
)
$r2 :VariableRestriction(
- patternId == $r1.patternId,
fieldId == $r1.fieldId,
operator == Operator.GREATER,
variable.objectId == $r1.variable.objectId,
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,6 @@
#
# Pattern possibilities are opposites if all of the restrictions are opposites.
#
-# Depandencies: None
# Dependencies:
#
# Needs at least one of the following packages or rules to fire:
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -24,8 +24,8 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
-# Example: Pattern1( a == "b", a != "b" )
+# Dependencies: None
+# Example: Pattern( a == "b", a != "b" )
#
rule "Opposite LiteralRestrictions"
when
@@ -61,7 +61,7 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: Pattern( a >= 10 && a < 10 )
#
rule "Opposite LiteralRestrictions with ranges, greater or equal - less"
@@ -96,7 +96,7 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: Pattern( a > 10 && a <= 10 )
#
rule "Opposite LiteralRestrictions with ranges, greater - less or equal"
@@ -132,7 +132,7 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: Pattern( a < 10 && a > 9 )
#
rule "Opposite LiteralRestrictions with ranges, less - greater for ints and dates"
@@ -168,7 +168,7 @@
#
# If two LiteralRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: Pattern( a >= 10 && a <= 9 )
#
rule "Opposite LiteralRestrictions with ranges, less or equal - greater or equal for ints and dates"
@@ -204,15 +204,14 @@
#
# If two VariableRestrictions are in conflict.
#
-# Depandencies: None
+# Dependencies: None
# Example: Pattern( a contains $o, a not contains $o )
#
-rule "Opposite VariableRestrictions in pattern possibility"
+rule "Opposite VariableRestrictions"
when
$r1 :VariableRestriction()
$r2 :VariableRestriction(
- patternId == $r1.patternId,
fieldId == $r1.fieldId,
id != $r1.id,
variable.objectId == $r1.variable.objectId,
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -6,15 +6,7 @@
#declare any global variables here
+#
+#
+#
-
-
-
-rule "Your First Rule"
-
- when
- #conditions
- then
- #actions
-
-end
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -23,7 +23,7 @@
# Fires when two restrictions are overlapping.
# Reports these restrictions as overlapping.
#
-# Depandencies: Needs at least one rule.
+# Dependencies: Needs at least one rule.
#
# package org.drools.verifier.subsumption.patterns
# rule "Find subsumptant restrictions, greater than"
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,7 @@
# Merges existing gaps from working memory. Cleans out the data for actual reporting.
#
# Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
#
# package org.drools.verifier.rangeChecks.patterns;
# rule "Range check for number patterns"
@@ -69,7 +69,7 @@
# Removes existing gaps from working memory. Cleans out the data for actual reporting.
#
# Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
#
# package org.drools.verifier.rangeChecks.integers
# rule "Range check for integers, if smaller than or equal is missing"
@@ -121,7 +121,7 @@
# Removes existing gaps from working memory. Cleans out the data for actual reporting.
#
# Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
#
# package org.drools.verifier.rangeChecks.integers
# rule "Range check for integers, if smaller than or equal is missing"
@@ -173,7 +173,7 @@
# Removes existing gaps from working memory. Cleans out the data for actual reporting.
#
# Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
#
# package org.drools.verifier.rangeChecks.doubles
# rule "Range check for doubles, if smaller than or equal is missing"
@@ -225,7 +225,7 @@
# Removes existing gaps from working memory. Cleans out the data for actual reporting.
#
# Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
#
# package org.drools.verifier.rangeChecks.doubles
# rule "Range check for doubles, if smaller than or equal is missing"
@@ -277,7 +277,7 @@
# Removes existing gaps from working memory. Cleans out the data for actual reporting.
#
# Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
#
# package org.drools.verifier.rangeChecks.dates
# rule "Range check for dates, if smaller than or equal is missing"
@@ -329,7 +329,7 @@
# Removes existing gaps from working memory. Cleans out the data for actual reporting.
#
# Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
#
# package org.drools.verifier.rangeChecks.dates
# rule "Range check for dates, if smaller than or equal is missing"
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -31,7 +31,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar > "27-Oct-2007" )
# and in Foo( <= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
#
@@ -62,7 +62,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar < "27-Oct-2007" )
# and in Foo( >= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
#
@@ -93,7 +93,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == "27-Oct-2007" || bar <= "27-Oct-2007" )
# and no Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" || >= "28-Oct-2007" || == "28-Oct-2007" )
# then Foo( bar > "27-Oct-2007" ) is missing.
@@ -133,7 +133,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == "27-Oct-2007" || bar >= "27-Oct-2007" )
# and no Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" || <= "26-Oct-2007" || == "26-Oct-2007" )
# then Foo( bar < "27-Oct-2007" ) is missing.
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar > 42 )
# and in Foo( <= 42 || == 42 ) is missing.
#
@@ -47,7 +47,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar < 42 )
# and in Foo( >= 42 || == 42 ) is missing.
#
@@ -78,7 +78,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == 42 || bar <= 42 )
# and no Foo( bar > 42 || >= 42 || >= 43 || == 43 )
# then Foo( bar > 42 ) is missing.
@@ -110,7 +110,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == 42 || bar >= 42 )
# and no Foo( bar < 42 || <= 42 || <= 41 || == 41 )
# then Foo( bar < 42 ) is missing.
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -14,7 +14,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar > 42 )
# and Foo( <= 42 || == 42 ) is missing.
#
@@ -45,7 +45,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar < 42 )
# and in Foo( >= 42 || == 42 ) is missing.
#
@@ -76,7 +76,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == 42 || bar <= 42 )
# and no Foo( bar > 42 || >= 42 || >= 43 || == 43 )
# then Foo( bar > 42 ) is missing.
@@ -116,7 +116,7 @@
# If all ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == 42 || bar >= 42 )
# and no Foo( bar < 42 || <= 42 || <= 41 || == 41 )
# then Foo( bar < 42 ) is missing.
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -21,7 +21,7 @@
# If all pattern ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == 10 ) and in "Rule 2" Foo( bar == 20 ) and in "Rule 3" Foo( bar == 40 )
# then Foo( bar == 30 ) is missing.
rule "Range check for number patterns"
@@ -62,7 +62,7 @@
# If all pattern ranges are not checked for a field.
#
# Type: Warning
-# Depandencies: None
+# Dependencies: None
# Example: in "Rule 1" Foo( bar == 10 ) and in "Rule 2" Foo( bar == 20 ) and in "Rule 3" Foo( bar == 40 )
# then Foo( bar == 30 ) is missing.
rule "Range check for number patterns, !="
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,7 +9,7 @@
# Only checks for redundant pattern specifications,
# does not include actual restriction checks.
#
-# Depandencies: None
+# Dependencies: None
#
rule "Find redundant Patterns with restrictions"
when
@@ -48,7 +48,7 @@
#
# Checks for redundant pattern specifications when the patterns have no possibilities.
#
-# Depandencies: None
+# Dependencies: None
#
rule "Find redundant Patterns without restrictions"
when
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -15,7 +15,7 @@
# Fires when two PatternPossibilities are redundant.
# Marks these possibilities as redundant.
#
-# Depandencies: Needs at least one rule from both packages.
+# Dependencies: Needs at least one rule from both packages.
#
# package org.drools.verifier.redundancy.patterns
# rule "Find redundant Patterns with restrictions"
@@ -100,7 +100,7 @@
# Fires when two PatternPossibilities are redundant.
# Marks these possibilities as redundant.
#
-# Depandencies:
+# Dependencies:
#
# Needs at least one rule from these packages:
# package org.drools.verifier.equivalency.rules
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -6,7 +6,7 @@
import org.drools.verifier.report.components.RedundancyType;
#
-# Depandencies: None
+# Dependencies: None
#
rule "Find redundant VariableRestriction"
when
@@ -32,7 +32,7 @@
end
#
-# Depandencies: None
+# Dependencies: None
#
rule "Find redundant LiteralRestriction"
when
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,7 +9,7 @@
# Only checks for redundant rule specifications,
# does not include actual pattern and restriction checks.
#
-# Depandencies:
+# Dependencies:
#
# package org.drools.verifier.redundancy.consequences
# rule "Find redundant TextConsequences"
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm 2008-07-04 14:40:55 UTC (rev 20905)
@@ -3,7 +3,7 @@
<tr>
<th><a href=
"@{sourceFolder}/@{objectTypeFolder}/@{objectType.id}.htm">
- @{objectType.name}</a> <a href=
+ @{objectType.name}</a>.<a href=
"@{sourceFolder}/@{fieldFolder}/@{field.id}.htm">@{field.name}</a></th>
</tr>
<tr>
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -17,7 +17,7 @@
# Fires when two pattern possibilities are subsumptant.
# Creates a Subsumption object.
#
-# Depandencies: Needs at least one rule.
+# Dependencies: Needs at least one rule.
#
# package org.drools.verifier.redundancy.patterns
# rule "Find redundant Patterns with restrictions"
@@ -83,7 +83,7 @@
# Fires when two pattern possibilities are subsumptant.
# Creates a Subsumption object.
#
-# Depandencies: Needs at least one rule from either one of the following packages.
+# Dependencies: Needs at least one rule from either one of the following packages.
#
# package org.drools.verifier.subsumption.patterns
# rule "Find subsumptant pattern possibilities"
Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -13,7 +13,7 @@
# Fires when two restrictions are subsumptant.
# Creates a Subsumption object.
#
-# Depandencies: None
+# Dependencies: None
#
# Example 1: P( x > 10 ) and P( x > 100 )
#
@@ -40,7 +40,7 @@
# Fires when two restrictions are subsumptant.
# Creates a Subsumption object.
#
-# Depandencies: None
+# Dependencies: None
#
# Example 1: P( x < 10 ) and P( x < 100 )
#
Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,50 @@
+package org.drools.verifier;
+
+import java.io.ByteArrayInputStream;
+import java.util.Collection;
+
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+
+/**
+ *
+ * @author Toni Rikkola
+ *
+ */
+public class PatternSolverDRLTest extends TestBase {
+
+ public void testOrInsidePattern() throws Exception {
+
+ StringBuffer rule = new StringBuffer();
+ rule.append("rule \"Test rule\" ");
+ rule.append(" when ");
+ rule.append(" customer : Customer( status > 30 && < 50 ) ");
+ rule
+ .append(" order : OrderHeader( customer == customer , orderPriority == 3 || == 4 ) ");
+ rule.append(" then ");
+ rule.append(" order.setOrderDiscount( 6.0 ); ");
+ rule.append("end");
+
+ VerifierResult result = VerifierResultFactory.createVerifierResult();
+ Collection<? extends Object> testData = getTestData(
+ new ByteArrayInputStream(rule.toString().getBytes()), result
+ .getVerifierData());
+
+ int patternCount = 0;
+
+ // Check that there is three pattern possibilities and that they contain
+ // the right amount of items.
+ for (Object o : testData) {
+ if (o instanceof PatternPossibility) {
+ PatternPossibility pp = (PatternPossibility) o;
+ if (pp.getItems().size() == 2) {
+
+ patternCount++;
+ }
+ }
+ }
+
+ assertEquals(3, patternCount);
+ }
+}
Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -34,10 +34,9 @@
LiteralRestriction literalRestriction = new LiteralRestriction();
LiteralRestriction literalRestriction2 = new LiteralRestriction();
- OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.AND);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(operatorDescr);
+ solver.addOperator(OperatorDescr.Type.AND);
solver.add(literalRestriction);
solver.add(literalRestriction2);
solver.end();
@@ -65,10 +64,9 @@
LiteralRestriction literalRestriction = new LiteralRestriction();
LiteralRestriction literalRestriction2 = new LiteralRestriction();
- OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.OR);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(operatorDescr);
+ solver.addOperator(OperatorDescr.Type.OR);
solver.add(literalRestriction);
solver.add(literalRestriction2);
solver.end();
@@ -100,13 +98,11 @@
LiteralRestriction literalRestriction2 = new LiteralRestriction();
LiteralRestriction literalRestriction3 = new LiteralRestriction();
- OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
- OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(orDescr);
+ solver.addOperator(OperatorDescr.Type.OR);
solver.add(literalRestriction);
- solver.add(andDescr);
+ solver.addOperator(OperatorDescr.Type.AND);
solver.add(literalRestriction2);
solver.add(literalRestriction3);
solver.end();
@@ -144,13 +140,11 @@
LiteralRestriction literalRestriction2 = new LiteralRestriction();
LiteralRestriction literalRestriction3 = new LiteralRestriction();
- OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.AND);
- OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.OR);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(orDescr);
+ solver.addOperator(OperatorDescr.Type.AND);
solver.add(literalRestriction);
- solver.add(andDescr);
+ solver.addOperator(OperatorDescr.Type.OR);
solver.add(literalRestriction2);
solver.add(literalRestriction3);
solver.end();
@@ -194,17 +188,14 @@
LiteralRestriction literalRestriction3 = new LiteralRestriction();
LiteralRestriction literalRestriction4 = new LiteralRestriction();
- OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
- OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
- OperatorDescr orDescr2 = new OperatorDescr(OperatorDescr.Type.OR);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(andDescr);
- solver.add(orDescr);
+ solver.addOperator(OperatorDescr.Type.AND);
+ solver.addOperator(OperatorDescr.Type.OR);
solver.add(literalRestriction);
solver.add(literalRestriction2);
solver.end();
- solver.add(orDescr2);
+ solver.addOperator(OperatorDescr.Type.OR);
solver.add(literalRestriction3);
solver.add(literalRestriction4);
solver.end();
@@ -252,17 +243,14 @@
LiteralRestriction literalRestriction3 = new LiteralRestriction();
LiteralRestriction literalRestriction4 = new LiteralRestriction();
- OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
- OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
- OperatorDescr andDescr2 = new OperatorDescr(OperatorDescr.Type.AND);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(orDescr);
- solver.add(andDescr);
+ solver.addOperator(OperatorDescr.Type.OR);
+ solver.addOperator(OperatorDescr.Type.AND);
solver.add(literalRestriction);
solver.add(literalRestriction2);
solver.end();
- solver.add(andDescr2);
+ solver.addOperator(OperatorDescr.Type.AND);
solver.add(literalRestriction3);
solver.add(literalRestriction4);
solver.end();
@@ -304,17 +292,14 @@
LiteralRestriction literalRestriction3 = new LiteralRestriction();
LiteralRestriction literalRestriction4 = new LiteralRestriction();
- OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
- OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
- OperatorDescr orDescr2 = new OperatorDescr(OperatorDescr.Type.OR);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(orDescr);
- solver.add(andDescr);
+ solver.addOperator(OperatorDescr.Type.OR);
+ solver.addOperator(OperatorDescr.Type.AND);
solver.add(literalRestriction);
solver.add(literalRestriction2);
solver.end();
- solver.add(orDescr2);
+ solver.addOperator(OperatorDescr.Type.OR);
solver.add(literalRestriction3);
solver.add(literalRestriction4);
solver.end();
@@ -357,17 +342,14 @@
LiteralRestriction literalRestriction4 = new LiteralRestriction();
LiteralRestriction literalRestriction5 = new LiteralRestriction();
- OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
- OperatorDescr andDescr2 = new OperatorDescr(OperatorDescr.Type.AND);
- OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
PatternSolver solver = new PatternSolver(pattern);
- solver.add(andDescr);
- solver.add(andDescr2);
+ solver.addOperator(OperatorDescr.Type.AND);
+ solver.addOperator(OperatorDescr.Type.AND);
solver.add(literalRestriction);
solver.add(literalRestriction2);
solver.end();
- solver.add(orDescr);
+ solver.addOperator(OperatorDescr.Type.OR);
solver.add(literalRestriction3);
solver.add(literalRestriction4);
solver.end();
Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -49,9 +49,9 @@
solvers.startRuleSolver(rule);
- solvers.startOperator(andDescr);
+ solvers.startOperator(OperatorDescr.Type.AND);
solvers.startPatternSolver(pattern);
- solvers.startOperator(andDescr);
+ solvers.startOperator(OperatorDescr.Type.AND);
solvers.addRestriction(r);
solvers.addRestriction(r2);
solvers.endOperator();
@@ -59,7 +59,7 @@
solvers.startNot();
solvers.startPatternSolver(pattern);
- solvers.startOperator(andDescr);
+ solvers.startOperator(OperatorDescr.Type.AND);
solvers.addRestriction(r3);
solvers.addRestriction(r4);
solvers.endOperator();
@@ -119,7 +119,7 @@
solvers.startRuleSolver(rule);
solvers.startPatternSolver(pattern);
- solvers.startOperator(andDescr);
+ solvers.startOperator(OperatorDescr.Type.AND);
solvers.addRestriction(r);
solvers.addRestriction(r2);
solvers.endOperator();
Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -28,7 +28,7 @@
assertNotNull(result);
assertEquals(0, result.getBySeverity(Severity.ERROR).size());
assertEquals(10, result.getBySeverity(Severity.WARNING).size());
- assertEquals(1, result.getBySeverity(Severity.NOTE).size());
+ assertEquals(16, result.getBySeverity(Severity.NOTE).size());
//check it again
@@ -46,7 +46,7 @@
assertNotNull(result);
assertEquals(0, result.getBySeverity(Severity.ERROR).size());
assertEquals(10, result.getBySeverity(Severity.WARNING).size());
- assertEquals(1, result.getBySeverity(Severity.NOTE).size());
+ assertEquals(16, result.getBySeverity(Severity.NOTE).size());
Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,18 +9,16 @@
import java.util.Set;
import org.drools.compiler.DrlParser;
-import org.drools.compiler.Dialect.AnalysisResult;
import org.drools.lang.descr.PackageDescr;
-import org.drools.verifier.Verifier;
-import org.drools.verifier.components.VerifierClass;
-import org.drools.verifier.components.VerifierRule;
import org.drools.verifier.components.Field;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.VerifierRule;
import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.report.components.Cause;
+import org.drools.verifier.report.components.Severity;
import org.drools.verifier.report.components.VerifierMessage;
import org.drools.verifier.report.components.VerifierMessageBase;
import org.drools.verifier.report.components.VerifierRangeCheckMessage;
-import org.drools.verifier.report.components.Cause;
-import org.drools.verifier.report.components.Severity;
/**
* This is a sample file to launch a rule package from a rule source file.
@@ -56,9 +54,10 @@
a.fireAnalysis();
// System.out.print(a.getResultAsPlainText());
// System.out.print(a.getResultAsXML());
- // a.writeComponentsHTML("/stash/");
- // a.writeComponentsHTML("/Users/michaelneale/foo.html");
- a.writeComponentsHTML("c:/");
+// a.writeComponentsHTML("/stash/");
+// a.writeComponentsHTML("/Users/michaelneale/foo.html");
+ a.writeComponentsHTML("/home/trikkola/");
+// a.writeComponentsHTML("c:/");
VerifierResult result = a.getResult();
Collection<VerifierMessageBase> msgs = result
@@ -111,10 +110,10 @@
System.out.println("\t" + msg.getFaulty());
}
- Collection<VerifierClass> classes = result.getVerifierData()
+ Collection<ObjectType> classes = result.getVerifierData()
.getAllClasses();
for (Iterator iterator = classes.iterator(); iterator.hasNext();) {
- VerifierClass c = (VerifierClass) iterator.next();
+ ObjectType c = (ObjectType) iterator.next();
Collection<VerifierRule> cr = result.getVerifierData()
.getRulesByClassId(c.getId());
Deleted: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,101 +0,0 @@
-package org.drools.verifier.alwaysFalse;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.drools.StatelessSession;
-import org.drools.StatelessSessionResult;
-import org.drools.base.RuleNameMatchesAgendaFilter;
-import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.Restriction;
-import org.drools.verifier.components.VariableRestriction;
-import org.drools.verifier.components.VerifierComponent;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
-import org.drools.verifier.report.components.Incompatibility;
-import org.drools.verifier.report.components.Severity;
-import org.drools.verifier.report.components.VerifierMessage;
-import org.drools.verifier.report.components.VerifierMessageBase;
-
-/**
- *
- * @author Toni Rikkola
- *
- */
-public class AlwaysFalsePatternsTest extends TestCase {
-
- public void testDummy() {
- // this is needed as eclipse will try to run this and produce a failure
- // if its not here.
- assertTrue(true);
- }
-// public void testPatternsAlwaysFalse() throws Exception {
-// StatelessSession session = getStatelessSession(this.getClass()
-// .getResourceAsStream("Patterns.drl"));
-//
-// session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-// "Pattern that is always false"));
-//
-// VerifierResult result = VerifierResultFactory.createVerifierResult();
-// Collection<Object> data = new ArrayList<Object>();
-//
-// session.setGlobal("result", result);
-//
-// final String ruleName1 = "rule 1";
-// Pattern pattern = new Pattern();
-//
-// Restriction r1 = new LiteralRestriction();
-// Restriction r2 = new LiteralRestriction();
-// Incompatibility i1 = new Incompatibility(r1, r2);
-// PatternPossibility pp1 = new PatternPossibility();
-// pp1.add(r1);
-// pp1.add(r2);
-//
-// Restriction r3 = new VariableRestriction();
-// Restriction r4 = new VariableRestriction();
-// Incompatibility i2 = new Incompatibility(r1, r2);
-// PatternPossibility pp2 = new PatternPossibility();
-// pp2.add(r1);
-// pp2.add(r2);
-//
-// data.add(pattern);
-// data.add(r1);
-// data.add(r2);
-// data.add(r3);
-// data.add(r4);
-// data.add(i1);
-// data.add(i2);
-// data.add(pp1);
-// data.add(pp2);
-//
-// StatelessSessionResult sessionResult = session.executeWithResults(data);
-//
-// Iterator<VerifierMessageBase> iter = result
-// .getBySeverity(Severity.NOTE).iterator();
-//
-// Collection<String> ruleNames = new ArrayList<String>();
-// while (iter.hasNext()) {
-// Object o = (Object) iter.next();
-// if (o instanceof VerifierMessage) {
-// String name = ((VerifierMessage) o).getCauses().toArray(
-// new VerifierComponent[2])[0].getRuleName();
-//
-// ruleNames.add(name);
-// }
-// }
-//
-// assertTrue(ruleNames.remove(ruleName1));
-// // assertFalse(ruleNames.remove(ruleName2));
-//
-// if (!ruleNames.isEmpty()) {
-// for (String string : ruleNames) {
-// fail("Rule " + string + " caused an error.");
-// }
-// }
-// }
-}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java (from rev 20797, labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,214 @@
+package org.drools.verifier.alwaysFalse;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.verifier.TestBase;
+import org.drools.verifier.components.LiteralRestriction;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.VariableRestriction;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.report.components.Incompatibility;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ *
+ * @author Toni Rikkola
+ *
+ */
+public class AlwaysFalseTest extends TestBase {
+
+ public void testPatterns() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Patterns.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Pattern that is always false"));
+
+ VerifierResult result = VerifierResultFactory.createVerifierResult();
+ Collection<Object> data = new ArrayList<Object>();
+
+ session.setGlobal("result", result);
+
+ // This pattern has an error.
+ Pattern pattern1 = new Pattern();
+
+ Restriction r1 = new LiteralRestriction();
+ Restriction r2 = new LiteralRestriction();
+ Incompatibility i1 = new Incompatibility(r1, r2);
+ PatternPossibility pp1 = new PatternPossibility();
+ pp1.setPatternId(pattern1.getId());
+ pp1.add(r1);
+ pp1.add(r2);
+
+ Restriction r3 = new VariableRestriction();
+ Restriction r4 = new VariableRestriction();
+ Incompatibility i2 = new Incompatibility(r1, r2);
+ PatternPossibility pp2 = new PatternPossibility();
+ pp2.setPatternId(pattern1.getId());
+ pp2.add(r1);
+ pp2.add(r2);
+
+ // This pattern does not have an error.
+ Pattern pattern2 = new Pattern();
+
+ Restriction r5 = new LiteralRestriction();
+ Restriction r6 = new LiteralRestriction();
+ PatternPossibility pp3 = new PatternPossibility();
+ pp3.setPatternId(pattern2.getId());
+ pp3.add(r5);
+ pp3.add(r6);
+
+ Restriction r7 = new VariableRestriction();
+ Restriction r8 = new VariableRestriction();
+ Incompatibility i4 = new Incompatibility(r7, r8);
+ PatternPossibility pp4 = new PatternPossibility();
+ pp4.setPatternId(pattern2.getId());
+ pp4.add(r7);
+ pp4.add(r8);
+
+ data.add(pattern1);
+ data.add(r1);
+ data.add(r2);
+ data.add(r3);
+ data.add(r4);
+ data.add(i1);
+ data.add(i2);
+ data.add(pp1);
+ data.add(pp2);
+
+ data.add(pattern2);
+ data.add(r5);
+ data.add(r6);
+ data.add(r7);
+ data.add(r8);
+ data.add(i4);
+ data.add(pp3);
+ data.add(pp4);
+
+ session.executeWithResults(data);
+
+ Iterator<VerifierMessageBase> iter = result.getBySeverity(
+ Severity.ERROR).iterator();
+
+ boolean works = false;
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof VerifierMessage) {
+ VerifierMessage message = (VerifierMessage) o;
+ if (message.getFaulty().equals(pattern1)) {
+ works = true;
+ } else {
+ fail("There can be only one. (And this is not the one)");
+ }
+ }
+ }
+
+ assertEquals(1, result.getBySeverity(Severity.ERROR).size());
+ assertEquals(0, result.getBySeverity(Severity.WARNING).size());
+ assertEquals(0, result.getBySeverity(Severity.NOTE).size());
+ assertTrue(works);
+ }
+
+ public void testRules() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Rules.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Rule that is always false"));
+
+ VerifierResult result = VerifierResultFactory.createVerifierResult();
+ Collection<Object> data = new ArrayList<Object>();
+
+ session.setGlobal("result", result);
+
+ // This rule has an error.
+ VerifierRule rule1 = new VerifierRule();
+
+ PatternPossibility pp1 = new PatternPossibility();
+ PatternPossibility pp2 = new PatternPossibility();
+ Incompatibility i1 = new Incompatibility(pp1, pp2);
+ RulePossibility rp1 = new RulePossibility();
+ rp1.setRuleId(rule1.getId());
+ rp1.add(pp1);
+ rp1.add(pp2);
+
+ PatternPossibility pp3 = new PatternPossibility();
+ PatternPossibility pp4 = new PatternPossibility();
+ Incompatibility i2 = new Incompatibility(pp1, pp2);
+ RulePossibility rp2 = new RulePossibility();
+ rp2.setRuleId(rule1.getId());
+ rp2.add(pp1);
+ rp2.add(pp2);
+
+ // This pattern does not have an error.
+ VerifierRule rule2 = new VerifierRule();
+
+ PatternPossibility pp5 = new PatternPossibility();
+ PatternPossibility pp6 = new PatternPossibility();
+ RulePossibility rp3 = new RulePossibility();
+ rp3.setRuleId(rule2.getId());
+ rp3.add(pp5);
+ rp3.add(pp6);
+
+ PatternPossibility pp7 = new PatternPossibility();
+ PatternPossibility pp8 = new PatternPossibility();
+ Incompatibility i4 = new Incompatibility(pp7, pp8);
+ RulePossibility rp4 = new RulePossibility();
+ rp4.setRuleId(rule2.getId());
+ rp4.add(pp7);
+ rp4.add(pp8);
+
+ data.add(rule1);
+ data.add(pp1);
+ data.add(pp2);
+ data.add(pp3);
+ data.add(pp4);
+ data.add(i1);
+ data.add(i2);
+ data.add(rp1);
+ data.add(rp2);
+
+ data.add(rule2);
+ data.add(pp5);
+ data.add(pp6);
+ data.add(pp7);
+ data.add(pp8);
+ data.add(i4);
+ data.add(rp3);
+ data.add(rp4);
+
+ session.executeWithResults(data);
+
+ Iterator<VerifierMessageBase> iter = result.getBySeverity(
+ Severity.ERROR).iterator();
+
+ boolean works = false;
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof VerifierMessage) {
+ VerifierMessage message = (VerifierMessage) o;
+ if (message.getFaulty().equals(rule1)) {
+ works = true;
+ } else {
+ fail("There can be only one. (And this is not the one)");
+ }
+ }
+ }
+
+ assertEquals(1, result.getBySeverity(Severity.ERROR).size());
+ assertEquals(0, result.getBySeverity(Severity.WARNING).size());
+ assertEquals(0, result.getBySeverity(Severity.NOTE).size());
+ assertTrue(works);
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,198 @@
+package org.drools.verifier.alwaysTrue;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.StatelessSessionResult;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.verifier.TestBase;
+import org.drools.verifier.components.LiteralRestriction;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.VariableRestriction;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Opposites;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ *
+ * @author Toni Rikkola
+ *
+ */
+public class AlwaysTruePatternTest extends TestBase {
+
+ public void testPatternPossibilities() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Patterns.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Pattern possibility that is always true"));
+
+ VerifierResult result = VerifierResultFactory.createVerifierResult();
+ Collection<Object> data = new ArrayList<Object>();
+
+ session.setGlobal("result", result);
+
+ // This pattern is always true.
+ Pattern pattern1 = new Pattern();
+
+ Restriction r1 = new LiteralRestriction();
+ Restriction r2 = new LiteralRestriction();
+ Opposites o1 = new Opposites(r1, r2);
+ PatternPossibility pp1 = new PatternPossibility();
+ pp1.setPatternId(pattern1.getId());
+ pp1.add(r1);
+ pp1.add(r2);
+
+ Restriction r3 = new VariableRestriction();
+ Restriction r4 = new VariableRestriction();
+ Opposites o2 = new Opposites(r1, r2);
+ PatternPossibility pp2 = new PatternPossibility();
+ pp2.setPatternId(pattern1.getId());
+ pp2.add(r1);
+ pp2.add(r2);
+
+ // This pattern is okay.
+ Pattern pattern2 = new Pattern();
+
+ Restriction r5 = new LiteralRestriction();
+ Restriction r6 = new LiteralRestriction();
+ PatternPossibility pp3 = new PatternPossibility();
+ pp3.setPatternId(pattern2.getId());
+ pp3.add(r5);
+ pp3.add(r6);
+
+ Restriction r7 = new VariableRestriction();
+ Restriction r8 = new VariableRestriction();
+ Opposites o4 = new Opposites(r7, r8);
+ PatternPossibility pp4 = new PatternPossibility();
+ pp4.setPatternId(pattern2.getId());
+ pp4.add(r7);
+ pp4.add(r8);
+
+ data.add(pattern1);
+ data.add(r1);
+ data.add(r2);
+ data.add(r3);
+ data.add(r4);
+ data.add(o1);
+ data.add(o2);
+ data.add(pp1);
+ data.add(pp2);
+
+ data.add(pattern2);
+ data.add(r5);
+ data.add(r6);
+ data.add(r7);
+ data.add(r8);
+ data.add(o4);
+ data.add(pp3);
+ data.add(pp4);
+
+ StatelessSessionResult sessionResult = session.executeWithResults(data);
+ Iterator iter = sessionResult.iterateObjects();
+
+ boolean pp1true = false;
+ boolean pp2true = false;
+ boolean pp3true = false;
+ boolean pp4true = false;
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof AlwaysTrue) {
+ AlwaysTrue alwaysTrue = (AlwaysTrue) o;
+ if (!pp1true) {
+ pp1true = alwaysTrue.getCause().equals(pp1);
+ }
+ if (!pp2true) {
+ pp2true = alwaysTrue.getCause().equals(pp2);
+ }
+ if (!pp3true) {
+ pp3true = alwaysTrue.getCause().equals(pp3);
+ }
+ if (!pp4true) {
+ pp4true = alwaysTrue.getCause().equals(pp4);
+ }
+ }
+ }
+
+ assertTrue(pp1true);
+ assertTrue(pp2true);
+ assertFalse(pp3true);
+ assertTrue(pp4true);
+ }
+
+ public void testPatterns() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Patterns.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Pattern that is always true"));
+
+ VerifierResult result = VerifierResultFactory.createVerifierResult();
+ Collection<Object> data = new ArrayList<Object>();
+
+ session.setGlobal("result", result);
+
+ // This pattern is always true.
+ Pattern pattern1 = new Pattern();
+
+ PatternPossibility pp1 = new PatternPossibility();
+ pp1.setPatternId(pattern1.getId());
+ AlwaysTrue alwaysTrue1 = new AlwaysTrue(pp1);
+
+ PatternPossibility pp2 = new PatternPossibility();
+ pp2.setPatternId(pattern1.getId());
+ AlwaysTrue alwaysTrue2 = new AlwaysTrue(pp2);
+
+ // This pattern is okay.
+ Pattern pattern2 = new Pattern();
+
+ PatternPossibility pp3 = new PatternPossibility();
+ pp3.setPatternId(pattern2.getId());
+
+ PatternPossibility pp4 = new PatternPossibility();
+ pp4.setPatternId(pattern2.getId());
+ AlwaysTrue alwaysTrue4 = new AlwaysTrue(pp4);
+
+ data.add(pattern1);
+ data.add(pp1);
+ data.add(pp2);
+ data.add(alwaysTrue1);
+ data.add(alwaysTrue2);
+
+ data.add(pattern2);
+ data.add(pp3);
+ data.add(pp4);
+ data.add(alwaysTrue4);
+
+ session.executeWithResults(data);
+
+ Iterator<VerifierMessageBase> iter = result
+ .getBySeverity(Severity.NOTE).iterator();
+
+ boolean works = false;
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof VerifierMessage) {
+ VerifierMessage message = (VerifierMessage) o;
+ if (message.getFaulty().equals(pattern1)) {
+ works = true;
+ } else {
+ fail("There can be only one. (And this is not the one)");
+ }
+ }
+ }
+
+ assertEquals(0, result.getBySeverity(Severity.ERROR).size());
+ assertEquals(0, result.getBySeverity(Severity.WARNING).size());
+ assertEquals(1, result.getBySeverity(Severity.NOTE).size());
+ assertTrue(works);
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,179 @@
+package org.drools.verifier.alwaysTrue;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.StatelessSessionResult;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.verifier.TestBase;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ *
+ * @author Toni Rikkola
+ *
+ */
+public class AlwaysTrueRuleTest extends TestBase {
+
+ public void testPatternPossibilities() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Rules.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Rule possibility that is always true"));
+
+ VerifierResult result = VerifierResultFactory.createVerifierResult();
+ Collection<Object> data = new ArrayList<Object>();
+
+ session.setGlobal("result", result);
+
+ // This rule is always true.
+ VerifierRule rule1 = new VerifierRule();
+
+ RulePossibility rp1 = new RulePossibility();
+ PatternPossibility pp1 = new PatternPossibility();
+ pp1.setRuleId(rule1.getId());
+ AlwaysTrue alwaysTrue1 = new AlwaysTrue(pp1);
+ PatternPossibility pp2 = new PatternPossibility();
+ pp2.setRuleId(rule1.getId());
+ AlwaysTrue alwaysTrue2 = new AlwaysTrue(pp2);
+
+ rp1.add(pp1);
+ rp1.add(pp2);
+
+ // This rule is okay.
+ VerifierRule rule2 = new VerifierRule();
+
+ RulePossibility rp2 = new RulePossibility();
+ PatternPossibility pp3 = new PatternPossibility();
+ pp3.setRuleId(rule2.getId());
+ PatternPossibility pp4 = new PatternPossibility();
+ pp4.setRuleId(rule2.getId());
+ AlwaysTrue alwaysTrue4 = new AlwaysTrue(pp4);
+
+ rp2.add(pp3);
+ rp2.add(pp4);
+
+ data.add(rule1);
+ data.add(rp1);
+ data.add(pp1);
+ data.add(pp2);
+ data.add(alwaysTrue1);
+ data.add(alwaysTrue2);
+
+ data.add(rule2);
+ data.add(rp2);
+ data.add(pp3);
+ data.add(pp4);
+ data.add(alwaysTrue4);
+
+ StatelessSessionResult sessionResult = session.executeWithResults(data);
+ Iterator iter = sessionResult.iterateObjects();
+
+ boolean rp1true = false;
+ boolean rp2true = false;
+ boolean rp3true = false;
+ boolean rp4true = false;
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof AlwaysTrue) {
+ AlwaysTrue alwaysTrue = (AlwaysTrue) o;
+ if (!rp1true) {
+ rp1true = alwaysTrue.getCause().equals(pp1);
+ }
+ if (!rp2true) {
+ rp2true = alwaysTrue.getCause().equals(pp2);
+ }
+ if (!rp3true) {
+ rp3true = alwaysTrue.getCause().equals(pp3);
+ }
+ if (!rp4true) {
+ rp4true = alwaysTrue.getCause().equals(pp4);
+ }
+ }
+ }
+
+ assertTrue(rp1true);
+ assertTrue(rp2true);
+ assertFalse(rp3true);
+ assertTrue(rp4true);
+ }
+
+ public void testPatterns() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Rules.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Rule that is always true"));
+
+ VerifierResult result = VerifierResultFactory.createVerifierResult();
+ Collection<Object> data = new ArrayList<Object>();
+
+ session.setGlobal("result", result);
+
+ // This rule is always true.
+ VerifierRule rule1 = new VerifierRule();
+
+ RulePossibility rp1 = new RulePossibility();
+ rp1.setRuleId(rule1.getId());
+ AlwaysTrue alwaysTrue1 = new AlwaysTrue(rp1);
+
+ RulePossibility rp2 = new RulePossibility();
+ rp2.setRuleId(rule1.getId());
+ AlwaysTrue alwaysTrue2 = new AlwaysTrue(rp2);
+
+ // This rule is okay.
+ VerifierRule rule2 = new VerifierRule();
+
+ RulePossibility rp3 = new RulePossibility();
+ rp3.setRuleId(rule2.getId());
+
+ RulePossibility rp4 = new RulePossibility();
+ rp4.setRuleId(rule2.getId());
+ AlwaysTrue alwaysTrue4 = new AlwaysTrue(rp4);
+
+ data.add(rule1);
+ data.add(rp1);
+ data.add(rp2);
+ data.add(alwaysTrue1);
+ data.add(alwaysTrue2);
+
+ data.add(rule2);
+ data.add(rp3);
+ data.add(rp4);
+ data.add(alwaysTrue4);
+
+ session.executeWithResults(data);
+
+ Iterator<VerifierMessageBase> iter = result.getBySeverity(
+ Severity.WARNING).iterator();
+
+ boolean works = false;
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof VerifierMessage) {
+ VerifierMessage message = (VerifierMessage) o;
+ if (message.getFaulty().equals(rule1)) {
+ works = true;
+ } else {
+ fail("There can be only one. (And this is not the one)");
+ }
+ }
+ }
+
+ assertEquals(0, result.getBySeverity(Severity.ERROR).size());
+ assertEquals(1, result.getBySeverity(Severity.WARNING).size());
+ assertEquals(0, result.getBySeverity(Severity.NOTE).size());
+ assertTrue(works);
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java 2008-07-04 14:40:55 UTC (rev 20905)
@@ -236,7 +236,7 @@
.getResourceAsStream("Restrictions.drl"));
session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
- "Opposite VariableRestrictions in pattern possibility"));
+ "Opposite VariableRestrictions"));
Collection<Object> data = new ArrayList<Object>();
Modified: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -139,3 +139,19 @@
then
# Test
end
+
+rule "This is not an incoherent pattern 1"
+ when
+ not Something( abc > 1 )
+ Something( abc < 1 )
+ then
+ # Test
+end
+
+rule "This is not an incoherent pattern 2"
+ when
+ not Something( abc == 1 )
+ Something( abc == 2 )
+ then
+ # Test
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl 2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl 2008-07-04 14:40:55 UTC (rev 20905)
@@ -88,3 +88,12 @@
# Test
end
+# no problems in this one
+rule "Gold Discount High Priority"
+ dialect "mvel"
+ when
+ customer : Customer( status > "30" && < "50" )
+ order : OrderHeader( customer == customer , orderPriority == "3" || == "4" )
+ then
+ order.setOrderDiscount( 6.0 );
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list