[jboss-svn-commits] JBL Code SVN: r17149 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/testframework and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Dec 10 02:18:52 EST 2007
Author: michael.neale at jboss.com
Date: 2007-12-10 02:18:51 -0500 (Mon, 10 Dec 2007)
New Revision: 17149
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/RuleCoverageListener.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
Log:
JBRULES-1383 Rule coverage measurement
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/RuleCoverageListener.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/RuleCoverageListener.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/RuleCoverageListener.java 2007-12-10 07:18:51 UTC (rev 17149)
@@ -0,0 +1,73 @@
+package org.drools.testframework;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.event.ActivationCancelledEvent;
+import org.drools.event.ActivationCreatedEvent;
+import org.drools.event.AfterActivationFiredEvent;
+import org.drools.event.AgendaEventListener;
+import org.drools.event.AgendaGroupPoppedEvent;
+import org.drools.event.AgendaGroupPushedEvent;
+import org.drools.event.BeforeActivationFiredEvent;
+
+/**
+ * Measure the rule coverage.
+ * @author Michael Neale
+ */
+public class RuleCoverageListener implements AgendaEventListener {
+
+ private final Set<String> rules;
+ private int totalCount;
+
+ /**
+ * Pass in the expected rules to fire.
+ * @param expectedRuleNames
+ */
+ public RuleCoverageListener(HashSet<String> expectedRuleNames) {
+ this.rules = expectedRuleNames;
+ this.totalCount = expectedRuleNames.size();
+ }
+
+ public void activationCancelled(ActivationCancelledEvent event,
+ WorkingMemory workingMemory) {
+ }
+
+ public void activationCreated(ActivationCreatedEvent event,
+ WorkingMemory workingMemory) {
+ }
+
+ public void afterActivationFired(AfterActivationFiredEvent event,
+ WorkingMemory workingMemory) {
+ rules.remove(event.getActivation().getRule().getName());
+ }
+
+ public void agendaGroupPopped(AgendaGroupPoppedEvent event,
+ WorkingMemory workingMemory) {
+ }
+
+ public void agendaGroupPushed(AgendaGroupPushedEvent event,
+ WorkingMemory workingMemory) {
+ }
+
+ public void beforeActivationFired(BeforeActivationFiredEvent event,
+ WorkingMemory workingMemory) {
+ }
+
+ /**
+ * @return A set of rules that were not fired.
+ */
+ public Set<String> getUnfiredRules() {
+ return this.rules;
+ }
+
+ public int getPercentCovered() {
+ float left = totalCount - rules.size();
+
+ return (int) ((left / totalCount) * 100);
+ }
+
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/RuleCoverageListener.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java 2007-12-10 07:17:52 UTC (rev 17148)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java 2007-12-10 07:18:51 UTC (rev 17149)
@@ -201,29 +201,35 @@
VerifyField fld = (VerifyField) value.fieldValues.get(i);
Map<String, Object> st = new HashMap<String, Object>();
st.put("__fact__", fact);
- st.put("__expected__", fld.expected);
+ if (fld.expected != null) {
+ Object expectedVal = fld.expected.trim();
+ if (fld.expected.startsWith("=")) {
+ expectedVal = eval(fld.expected.substring(1), this.populatedData);
+ }
+ st.put("__expected__", expectedVal);
- fld.successResult = (Boolean) eval("__fact__." + fld.fieldName
- + " " + fld.operator + " __expected__", st);
+ fld.successResult = (Boolean) eval("__fact__." + fld.fieldName
+ + " " + fld.operator + " __expected__", st);
- if (!fld.successResult) {
- Object actual = eval("__fact__." + fld.fieldName, st);
- fld.actualResult = (actual != null) ? actual.toString() : "";
+ if (!fld.successResult) {
+ Object actual = eval("__fact__." + fld.fieldName, st);
+ fld.actualResult = (actual != null) ? actual.toString() : "";
- if (fld.operator.equals("==")) {
- fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.actualResult
- + "] expected [" + fld.expected + "].";
+ if (fld.operator.equals("==")) {
+ fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.actualResult
+ + "] expected [" + fld.expected + "].";
+ } else {
+ fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not expected to be [" + fld.actualResult
+ + "].";
+ }
} else {
- fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not expected to be [" + fld.actualResult
- + "].";
+ if (fld.operator.equals("==")) {
+ fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.expected + "].";
+ } else if (fld.operator.equals("!=")){
+ fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not [" + fld.expected + "].";
+ }
}
- } else {
- if (fld.operator.equals("==")) {
- fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was [" + fld.expected + "].";
- } else if (fld.operator.equals("!=")){
- fld.explanation = "[" + value.name + "] field [" + fld.fieldName + "] was not [" + fld.expected + "].";
- }
}
}
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java 2007-12-10 07:18:51 UTC (rev 17149)
@@ -0,0 +1,129 @@
+package org.drools.testframework;
+
+import java.util.HashSet;
+
+import org.drools.common.ActivationGroupNode;
+import org.drools.common.LogicalDependency;
+import org.drools.common.RuleFlowGroupNode;
+import org.drools.event.AfterActivationFiredEvent;
+import org.drools.rule.GroupElement;
+import org.drools.rule.Rule;
+import org.drools.spi.Activation;
+import org.drools.spi.AgendaGroup;
+import org.drools.spi.PropagationContext;
+import org.drools.spi.Tuple;
+import org.drools.util.LinkedList;
+
+import junit.framework.TestCase;
+
+public class RuleCoverageListenerTest extends TestCase {
+
+ public void testCoverage() throws Exception {
+ HashSet<String> rules = new HashSet<String>();
+ rules.add("rule1");
+ rules.add("rule2");
+ rules.add("rule3");
+
+ RuleCoverageListener ls = new RuleCoverageListener(rules);
+ assertEquals(3, ls.getUnfiredRules().size());
+ assertEquals(0, ls.getPercentCovered());
+
+ ls.afterActivationFired(new AfterActivationFiredEvent(new MockActivation("rule1")), null);
+ assertEquals(2, ls.getUnfiredRules().size());
+ assertTrue(ls.getUnfiredRules().contains("rule2"));
+ assertTrue(ls.getUnfiredRules().contains("rule3"));
+ assertFalse(ls.getUnfiredRules().contains("rule1"));
+ assertEquals(33, ls.getPercentCovered());
+
+ ls.afterActivationFired(new AfterActivationFiredEvent(new MockActivation("rule2")), null);
+ assertEquals(1, ls.getUnfiredRules().size());
+ assertFalse(ls.getUnfiredRules().contains("rule2"));
+ assertFalse(ls.getUnfiredRules().contains("rule1"));
+ assertTrue(ls.getUnfiredRules().contains("rule3"));
+
+ assertEquals(66, ls.getPercentCovered());
+
+
+ ls.afterActivationFired(new AfterActivationFiredEvent(new MockActivation("rule3")), null);
+ assertEquals(0, ls.getUnfiredRules().size());
+ assertFalse(ls.getUnfiredRules().contains("rule2"));
+ assertFalse(ls.getUnfiredRules().contains("rule1"));
+ assertFalse(ls.getUnfiredRules().contains("rule3"));
+
+ assertEquals(100, ls.getPercentCovered());
+
+
+ }
+
+}
+
+class MockActivation implements Activation {
+ private String ruleName;
+
+ public MockActivation(String ruleName) {
+ this.ruleName = ruleName;
+ }
+
+ public void addLogicalDependency(LogicalDependency node) {
+ }
+
+ public ActivationGroupNode getActivationGroupNode() {
+ return null;
+ }
+
+ public long getActivationNumber() {
+ return 0;
+ }
+
+ public AgendaGroup getAgendaGroup() {
+ return null;
+ }
+
+ public LinkedList getLogicalDependencies() {
+ return null;
+ }
+
+ public PropagationContext getPropagationContext() {
+ return null;
+ }
+
+ public Rule getRule() {
+ return new Rule(ruleName);
+ }
+
+ public RuleFlowGroupNode getRuleFlowGroupNode() {
+ return null;
+ }
+
+ public int getSalience() {
+ return 0;
+ }
+
+ public GroupElement getSubRule() {
+ return null;
+ }
+
+ public Tuple getTuple() {
+ return null;
+ }
+
+ public boolean isActivated() {
+ return false;
+ }
+
+ public void remove() {
+ }
+
+ public void setActivated(boolean activated) {
+ }
+
+ public void setActivationGroupNode(ActivationGroupNode activationGroupNode) {
+ }
+
+ public void setLogicalDependencies(LinkedList justified) {
+ }
+
+ public void setRuleFlowGroupNode(RuleFlowGroupNode ruleFlowGroupNode) {
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2007-12-10 07:17:52 UTC (rev 17148)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java 2007-12-10 07:18:51 UTC (rev 17149)
@@ -200,6 +200,22 @@
}
+ public void testVerifyFactsWithExpression() throws Exception {
+ ScenarioRunner runner = new ScenarioRunner(new Scenario(), null,
+ new MockWorkingMemory());
+ Cheese f1 = new Cheese("cheddar", 42);
+ runner.populatedData.put("f1", f1);
+ f1.setPrice(42);
+ // test all true
+ VerifyFact vf = new VerifyFact();
+ vf.name = "f1";
+ vf.fieldValues = ls(
+ new VerifyField("price", "= 40 + 2", "==") );
+ runner.verify(vf);
+
+ assertTrue(((VerifyField)vf.fieldValues.get(0)).successResult);
+ }
+
public void testVerifyFactExplanation() throws Exception {
ScenarioRunner runner = new ScenarioRunner(new Scenario(), null,
new MockWorkingMemory());
More information about the jboss-svn-commits
mailing list