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()) { if (priority < rule.getPriority()) {
return -1; return -1;
} else if (priority == rule.getPriority()) { } else if (priority == rule.getPriority()) {
return 0; return name.compareTo(rule.getName());
} else { } else {
return 1; return 1;
} }

@ -3,6 +3,7 @@ package org.easyrules.core.test;
import org.easyrules.core.test.annotation.EasyRulesAnnotationTestSuite; import org.easyrules.core.test.annotation.EasyRulesAnnotationTestSuite;
import org.easyrules.core.test.composite.CompositeRuleTest; import org.easyrules.core.test.composite.CompositeRuleTest;
import org.easyrules.core.test.jmx.JmxRuleRegistrationTest; 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.RulePriorityComparisonTest;
import org.easyrules.core.test.parameters.RulePriorityThresholdTest; import org.easyrules.core.test.parameters.RulePriorityThresholdTest;
import org.easyrules.core.test.parameters.SkipOnFirstAppliedRuleTest; import org.easyrules.core.test.parameters.SkipOnFirstAppliedRuleTest;
@ -23,7 +24,8 @@ import org.junit.runners.Suite;
SkipOnFirstAppliedRuleTest.class, SkipOnFirstAppliedRuleTest.class,
JmxRuleRegistrationTest.class, JmxRuleRegistrationTest.class,
CompositeRuleTest.class, CompositeRuleTest.class,
EasyRulesAnnotationTestSuite.class}) EasyRulesAnnotationTestSuite.class,
DefaultRulesEngineTest.class})
public class EasyRulesTestSuite extends TestSuite { 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 @Test
public void testSameRulePriorityComparison() { public void testSameRulePriorityComparison() {
rule1.setPriority(2); rule1.setPriority(2);
assertEquals(0, rule1.compareTo(rule2)); assertEquals(-1, rule1.compareTo(rule2));
} }
} }

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

Loading…
Cancel
Save