fix issue #6: equals and compareTo should be implemented in a consistent way

pull/5/head^2
Mahmoud Ben Hassine 10 years ago
parent 07af8dc138
commit 1bff470adc

@ -136,7 +136,7 @@ public class BasicRule implements Rule, Comparable<Rule> {
if (priority < rule.getPriority()) {
return -1;
} else if (priority == rule.getPriority()) {
return 0;
return name.compareTo(rule.getName());
} else {
return 1;
}

@ -3,6 +3,7 @@ package org.easyrules.core.test;
import org.easyrules.core.test.annotation.EasyRulesAnnotationTestSuite;
import org.easyrules.core.test.composite.CompositeRuleTest;
import org.easyrules.core.test.jmx.JmxRuleRegistrationTest;
import org.easyrules.core.test.parameters.DefaultRulesEngineTest;
import org.easyrules.core.test.parameters.RulePriorityComparisonTest;
import org.easyrules.core.test.parameters.RulePriorityThresholdTest;
import org.easyrules.core.test.parameters.SkipOnFirstAppliedRuleTest;
@ -23,7 +24,8 @@ import org.junit.runners.Suite;
SkipOnFirstAppliedRuleTest.class,
JmxRuleRegistrationTest.class,
CompositeRuleTest.class,
EasyRulesAnnotationTestSuite.class})
EasyRulesAnnotationTestSuite.class,
DefaultRulesEngineTest.class})
public class EasyRulesTestSuite extends TestSuite {
}

@ -0,0 +1,53 @@
package org.easyrules.core.test.parameters;
import org.easyrules.api.Rule;
import org.easyrules.api.RulesEngine;
import org.easyrules.core.DefaultRulesEngine;
import org.easyrules.core.test.SimpleRule;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* Test class for {@link org.easyrules.core.DefaultRulesEngine}.
*
* @author Mahmoud Ben Hassine (mahmoud@benhassine.fr)
*/
public class DefaultRulesEngineTest {
@Test
public void testRulesWithDifferentNameAndDescriptionButWithSamePriority() throws Exception {
SimpleRule rule1 = new SimpleRule("rule 1", "description 1", 0);
SimpleRule rule2 = new SimpleRule("rule 2", "description 2", 0);
SimpleRule rule3 = new SimpleRule("rule 3", "description 3", 1);
RulesEngine<Rule> engine = new DefaultRulesEngine();
engine.registerRule(rule1);
engine.registerRule(rule2);
engine.registerRule(rule3);
engine.fireRules();
assertTrue(rule1.isExecuted());
assertTrue(rule2.isExecuted());
assertTrue(rule3.isExecuted());
}
@Test
public void testRulesWithSameNameAndDescriptionAndPriority() throws Exception {
SimpleRule rule1 = new SimpleRule("rule 1", "description 1", 0);
SimpleRule rule2 = new SimpleRule("rule 1", "description 1", 0);
RulesEngine<Rule> engine = new DefaultRulesEngine();
engine.registerRule(rule1);
engine.registerRule(rule2);
engine.fireRules();
assertTrue(rule1.isExecuted());
assertFalse(rule2.isExecuted());
}
}

@ -57,7 +57,7 @@ public class RulePriorityComparisonTest {
@Test
public void testSameRulePriorityComparison() {
rule1.setPriority(2);
assertEquals(0, rule1.compareTo(rule2));
assertEquals(-1, rule1.compareTo(rule2));
}
}

@ -47,10 +47,10 @@ public class RulePriorityThresholdTest {
@Before
public void setup(){
rule1 = new SimpleRule("r1","d1");
rule2 = new SimpleRule("r2","d2");
rule1 = new SimpleRule("r1","d1",1);
rule2 = new SimpleRule("r2","d2",2);
defaultRulesEngine = new DefaultRulesEngine();
defaultRulesEngine = new DefaultRulesEngine(1);
}
@Test

Loading…
Cancel
Save