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; import org.drools.event.RuleFlowGroupActivatedEvent; import org.drools.event.RuleFlowGroupDeactivatedEvent; /** * Measure the rule coverage. * @author Michael Neale */ public class RuleCoverageListener implements AgendaEventListener { 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 String[] getUnfiredRules() { return rules.toArray(new String[rules.size()]); } public int getPercentCovered() { float left = totalCount - rules.size(); return (int) ((left / totalCount) * 100); } public void afterRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event, WorkingMemory workingMemory) { // TODO Auto-generated method stub } public void afterRuleFlowGroupDeactivated( RuleFlowGroupDeactivatedEvent event, WorkingMemory workingMemory) { // TODO Auto-generated method stub } public void beforeRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event, WorkingMemory workingMemory) { // TODO Auto-generated method stub } public void beforeRuleFlowGroupDeactivated( RuleFlowGroupDeactivatedEvent event, WorkingMemory workingMemory) { // TODO Auto-generated method stub } }