From 1bff470adc5760132d3dc4ea3b37e54157eb2f7e Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Wed, 4 Mar 2015 00:45:24 +0100 Subject: [PATCH] fix issue #6: equals and compareTo should be implemented in a consistent way --- .../java/org/easyrules/core/BasicRule.java | 2 +- .../core/test/EasyRulesTestSuite.java | 4 +- .../parameters/DefaultRulesEngineTest.java | 53 +++++++++++++++++++ .../RulePriorityComparisonTest.java | 2 +- .../parameters/RulePriorityThresholdTest.java | 6 +-- 5 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 easyrules-core/src/test/java/org/easyrules/core/test/parameters/DefaultRulesEngineTest.java diff --git a/easyrules-core/src/main/java/org/easyrules/core/BasicRule.java b/easyrules-core/src/main/java/org/easyrules/core/BasicRule.java index 1688150..47ba844 100644 --- a/easyrules-core/src/main/java/org/easyrules/core/BasicRule.java +++ b/easyrules-core/src/main/java/org/easyrules/core/BasicRule.java @@ -136,7 +136,7 @@ public class BasicRule implements Rule, Comparable { if (priority < rule.getPriority()) { return -1; } else if (priority == rule.getPriority()) { - return 0; + return name.compareTo(rule.getName()); } else { return 1; } diff --git a/easyrules-core/src/test/java/org/easyrules/core/test/EasyRulesTestSuite.java b/easyrules-core/src/test/java/org/easyrules/core/test/EasyRulesTestSuite.java index d351abf..7daa453 100644 --- a/easyrules-core/src/test/java/org/easyrules/core/test/EasyRulesTestSuite.java +++ b/easyrules-core/src/test/java/org/easyrules/core/test/EasyRulesTestSuite.java @@ -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 { } diff --git a/easyrules-core/src/test/java/org/easyrules/core/test/parameters/DefaultRulesEngineTest.java b/easyrules-core/src/test/java/org/easyrules/core/test/parameters/DefaultRulesEngineTest.java new file mode 100644 index 0000000..c148412 --- /dev/null +++ b/easyrules-core/src/test/java/org/easyrules/core/test/parameters/DefaultRulesEngineTest.java @@ -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 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 engine = new DefaultRulesEngine(); + engine.registerRule(rule1); + engine.registerRule(rule2); + engine.fireRules(); + + assertTrue(rule1.isExecuted()); + assertFalse(rule2.isExecuted()); + + } +} diff --git a/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityComparisonTest.java b/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityComparisonTest.java index 589a0cb..fac7034 100644 --- a/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityComparisonTest.java +++ b/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityComparisonTest.java @@ -57,7 +57,7 @@ public class RulePriorityComparisonTest { @Test public void testSameRulePriorityComparison() { rule1.setPriority(2); - assertEquals(0, rule1.compareTo(rule2)); + assertEquals(-1, rule1.compareTo(rule2)); } } diff --git a/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityThresholdTest.java b/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityThresholdTest.java index e5e423c..0129c25 100644 --- a/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityThresholdTest.java +++ b/easyrules-core/src/test/java/org/easyrules/core/test/parameters/RulePriorityThresholdTest.java @@ -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