/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityRestrictionsTest.java

https://github.com/michelpohle/drools · Java · 302 lines · 202 code · 61 blank · 39 comment · 4 complexity · 08371b865df95b70f05a4d4fd5bf8083 MD5 · raw file

  1. /*
  2. * Copyright 2010 JBoss Inc
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.drools.verifier.incompatibility;
  17. import org.drools.StatelessSession;
  18. import org.drools.StatelessSessionResult;
  19. import org.drools.base.RuleNameMatchesAgendaFilter;
  20. import org.drools.base.evaluators.Operator;
  21. import org.drools.lang.descr.PackageDescr;
  22. import org.drools.verifier.TestBaseOld;
  23. import org.drools.verifier.VerifierComponentMockFactory;
  24. import org.drools.verifier.components.*;
  25. import org.drools.verifier.report.components.Cause;
  26. import org.junit.Test;
  27. import java.util.ArrayList;
  28. import java.util.Collection;
  29. import java.util.Map;
  30. import java.util.Set;
  31. import static org.junit.Assert.assertTrue;
  32. import static org.junit.Assert.fail;
  33. public class IncompatibilityRestrictionsTest extends IncompatibilityBase {
  34. @Test
  35. public void testLiteralRestrictionsIncompatibilityLessOrEqual() throws Exception {
  36. StatelessSession session = getStatelessSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  37. session.setAgendaFilter(new RuleNameMatchesAgendaFilter("Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"));
  38. Collection<Object> data = new ArrayList<Object>();
  39. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  40. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  41. /*
  42. * Working pair
  43. */
  44. LiteralRestriction r1 = LiteralRestriction.createRestriction(pattern1,
  45. "10");
  46. r1.setOperator(Operator.EQUAL);
  47. r1.setFieldPath("0");
  48. r1.setOrderNumber(0);
  49. LiteralRestriction r2 = LiteralRestriction.createRestriction(pattern1,
  50. "1");
  51. r2.setOperator(Operator.LESS);
  52. r2.setFieldPath("0");
  53. r2.setOrderNumber(2);
  54. /*
  55. * Pair that doesn't work.
  56. */
  57. LiteralRestriction r3 = LiteralRestriction.createRestriction(pattern2,
  58. "1");
  59. r3.setOperator(Operator.GREATER_OR_EQUAL);
  60. r3.setFieldPath("1");
  61. r3.setOrderNumber(0);
  62. LiteralRestriction r4 = LiteralRestriction.createRestriction(pattern2,
  63. "10");
  64. r4.setOperator(Operator.EQUAL);
  65. r4.setFieldPath("1");
  66. r4.setOrderNumber(1);
  67. data.add(r1);
  68. data.add(r2);
  69. data.add(r3);
  70. data.add(r4);
  71. StatelessSessionResult sessionResult = session.executeWithResults(data);
  72. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  73. sessionResult.iterateObjects());
  74. assertTrue((TestBaseOld.causeMapContains(map,
  75. r1,
  76. r2) ^ TestBaseOld.causeMapContains(map,
  77. r2,
  78. r1)));
  79. if (!map.isEmpty()) {
  80. fail("More incompatibilities than was expected.");
  81. }
  82. }
  83. @Test
  84. public void testLiteralRestrictionsIncompatibilityGreater() throws Exception {
  85. StatelessSession session = getStatelessSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  86. session.setAgendaFilter(new RuleNameMatchesAgendaFilter("Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"));
  87. Collection<Object> data = new ArrayList<Object>();
  88. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  89. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  90. /*
  91. * Working pair
  92. */
  93. LiteralRestriction r1 = LiteralRestriction.createRestriction(pattern1,
  94. "10");
  95. r1.setOperator(Operator.GREATER);
  96. r1.setFieldPath("0");
  97. r1.setOrderNumber(0);
  98. LiteralRestriction r2 = LiteralRestriction.createRestriction(pattern1,
  99. "1");
  100. r2.setOperator(Operator.EQUAL);
  101. r2.setFieldPath("0");
  102. r2.setOrderNumber(1);
  103. /*
  104. * Pair that doesn't work.
  105. */
  106. LiteralRestriction r3 = LiteralRestriction.createRestriction(pattern2,
  107. "1");
  108. r3.setOperator(Operator.GREATER_OR_EQUAL);
  109. r3.setFieldPath("1");
  110. r3.setOrderNumber(0);
  111. LiteralRestriction r4 = LiteralRestriction.createRestriction(pattern2,
  112. "10");
  113. r4.setOperator(Operator.EQUAL);
  114. r4.setFieldPath("1");
  115. r4.setOrderNumber(1);
  116. data.add(r1);
  117. data.add(r2);
  118. data.add(r3);
  119. data.add(r4);
  120. StatelessSessionResult sessionResult = session.executeWithResults(data);
  121. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  122. sessionResult.iterateObjects());
  123. assertTrue((TestBaseOld.causeMapContains(map,
  124. r1,
  125. r2) ^ TestBaseOld.causeMapContains(map,
  126. r2,
  127. r1)));
  128. if (!map.isEmpty()) {
  129. fail("More incompatibilities than was expected.");
  130. }
  131. }
  132. @Test
  133. public void testLiteralRestrictionsIncompatibilityImpossibleRange() throws Exception {
  134. StatelessSession session = getStatelessSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  135. session.setAgendaFilter(new RuleNameMatchesAgendaFilter("Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"));
  136. Collection<Object> data = new ArrayList<Object>();
  137. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  138. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  139. /*
  140. * Working pair
  141. */
  142. LiteralRestriction r1 = LiteralRestriction.createRestriction(pattern1,
  143. "10");
  144. r1.setOperator(Operator.GREATER);
  145. r1.setFieldPath("0");
  146. r1.setOrderNumber(0);
  147. LiteralRestriction r2 = LiteralRestriction.createRestriction(pattern1,
  148. "10");
  149. r2.setOperator(Operator.LESS);
  150. r2.setFieldPath("0");
  151. r2.setOrderNumber(1);
  152. /*
  153. * Pair that doesn't work.
  154. */
  155. LiteralRestriction r3 = LiteralRestriction.createRestriction(pattern2,
  156. "1");
  157. r3.setOperator(Operator.GREATER_OR_EQUAL);
  158. r3.setFieldPath("1");
  159. r3.setOrderNumber(0);
  160. LiteralRestriction r4 = LiteralRestriction.createRestriction(pattern2,
  161. "");
  162. r4.setOperator(Operator.EQUAL);
  163. r4.setFieldPath("1");
  164. r4.setOrderNumber(1);
  165. data.add(r1);
  166. data.add(r2);
  167. data.add(r3);
  168. data.add(r4);
  169. StatelessSessionResult sessionResult = session.executeWithResults(data);
  170. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  171. sessionResult.iterateObjects());
  172. assertTrue((TestBaseOld.causeMapContains(map,
  173. r1,
  174. r2) ^ TestBaseOld.causeMapContains(map,
  175. r2,
  176. r1)));
  177. if (!map.isEmpty()) {
  178. fail("More incompatibilities than was expected.");
  179. }
  180. }
  181. @Test
  182. public void testVariableRestrictionsIncompatibilityImpossibleRange() throws Exception {
  183. StatelessSession session = getStatelessSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  184. session.setAgendaFilter(new RuleNameMatchesAgendaFilter("Incoherent VariableRestrictions in pattern possibility, impossible range"));
  185. Collection<Object> data = new ArrayList<Object>();
  186. VerifierRule rule = VerifierComponentMockFactory.createRule1();
  187. ObjectType objectType = new ObjectType(new PackageDescr("testPackage1"));
  188. objectType.setFullName("org.test.Person");
  189. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  190. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  191. /*
  192. * Working pair
  193. */
  194. PatternVariable variable1 = new PatternVariable(rule);
  195. variable1.setParentPath("0");
  196. variable1.setParentType(VerifierComponentType.FIELD);
  197. variable1.setOrderNumber(11);
  198. VariableRestriction r1 = new VariableRestriction(pattern1);
  199. r1.setOperator(Operator.GREATER);
  200. r1.setFieldPath("0");
  201. r1.setVariable(variable1);
  202. r1.setOrderNumber(0);
  203. VariableRestriction r2 = new VariableRestriction(pattern1);
  204. r2.setOperator(Operator.LESS);
  205. r2.setFieldPath("0");
  206. r2.setVariable(variable1);
  207. r2.setOrderNumber(1);
  208. /*
  209. * Pair that doesn't work.
  210. */
  211. PatternVariable variable2 = new PatternVariable(rule);
  212. variable2.setParentPath("1");
  213. variable2.setParentType(VerifierComponentType.FIELD);
  214. variable2.setOrderNumber(10);
  215. VariableRestriction r3 = new VariableRestriction(pattern2);
  216. r3.setOperator(Operator.GREATER_OR_EQUAL);
  217. r3.setFieldPath("1");
  218. r3.setVariable(variable2);
  219. r3.setOrderNumber(0);
  220. VariableRestriction r4 = new VariableRestriction(pattern2);
  221. r4.setOperator(Operator.EQUAL);
  222. r4.setFieldPath("1");
  223. r4.setVariable(variable2);
  224. r4.setOrderNumber(1);
  225. data.add(r1);
  226. data.add(r2);
  227. data.add(r3);
  228. data.add(r4);
  229. StatelessSessionResult sessionResult = session.executeWithResults(data);
  230. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  231. sessionResult.iterateObjects());
  232. assertTrue((TestBaseOld.causeMapContains(map,
  233. r1,
  234. r2) ^ TestBaseOld.causeMapContains(map,
  235. r2,
  236. r1)));
  237. if (!map.isEmpty()) {
  238. fail("More incompatibilities than was expected.");
  239. }
  240. }
  241. }