PageRenderTime 26ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

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

https://gitlab.com/MichelZuniga/drools
Java | 306 lines | 210 code | 57 blank | 39 comment | 8 complexity | 01ea164f7e2d969c184ba9eae1a1c2c5 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.core.base.RuleNameMatchesAgendaFilter;
  18. import org.drools.core.base.evaluators.Operator;
  19. import org.drools.compiler.lang.descr.PackageDescr;
  20. import org.drools.verifier.TestBaseOld;
  21. import org.drools.verifier.VerifierComponentMockFactory;
  22. import org.drools.verifier.components.*;
  23. import org.drools.verifier.report.components.Cause;
  24. import org.junit.Test;
  25. import org.kie.api.runtime.KieSession;
  26. import java.util.ArrayList;
  27. import java.util.Collection;
  28. import java.util.Iterator;
  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. KieSession session = getStatelessKieSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  37. Collection<Object> data = new ArrayList<Object>();
  38. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  39. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  40. /*
  41. * Working pair
  42. */
  43. LiteralRestriction r1 = LiteralRestriction.createRestriction(pattern1,
  44. "10");
  45. r1.setOperator(Operator.EQUAL);
  46. r1.setFieldPath("0");
  47. r1.setOrderNumber(0);
  48. LiteralRestriction r2 = LiteralRestriction.createRestriction(pattern1,
  49. "1");
  50. r2.setOperator(Operator.LESS);
  51. r2.setFieldPath("0");
  52. r2.setOrderNumber(2);
  53. /*
  54. * Pair that doesn't work.
  55. */
  56. LiteralRestriction r3 = LiteralRestriction.createRestriction(pattern2,
  57. "1");
  58. r3.setOperator(Operator.GREATER_OR_EQUAL);
  59. r3.setFieldPath("1");
  60. r3.setOrderNumber(0);
  61. LiteralRestriction r4 = LiteralRestriction.createRestriction(pattern2,
  62. "10");
  63. r4.setOperator(Operator.EQUAL);
  64. r4.setFieldPath("1");
  65. r4.setOrderNumber(1);
  66. data.add(r1);
  67. data.add(r2);
  68. data.add(r3);
  69. data.add(r4);
  70. for (Object o : data) {
  71. session.insert(o);
  72. }
  73. session.fireAllRules(new RuleNameMatchesAgendaFilter("Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"));
  74. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  75. (Iterator<Object>)session.getObjects().iterator());
  76. assertTrue((TestBaseOld.causeMapContains(map,
  77. r1,
  78. r2) ^ TestBaseOld.causeMapContains(map,
  79. r2,
  80. r1)));
  81. if (!map.isEmpty()) {
  82. fail("More incompatibilities than was expected.");
  83. }
  84. }
  85. @Test
  86. public void testLiteralRestrictionsIncompatibilityGreater() throws Exception {
  87. KieSession session = getStatelessKieSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  88. Collection<Object> data = new ArrayList<Object>();
  89. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  90. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  91. /*
  92. * Working pair
  93. */
  94. LiteralRestriction r1 = LiteralRestriction.createRestriction(pattern1,
  95. "10");
  96. r1.setOperator(Operator.GREATER);
  97. r1.setFieldPath("0");
  98. r1.setOrderNumber(0);
  99. LiteralRestriction r2 = LiteralRestriction.createRestriction(pattern1,
  100. "1");
  101. r2.setOperator(Operator.EQUAL);
  102. r2.setFieldPath("0");
  103. r2.setOrderNumber(1);
  104. /*
  105. * Pair that doesn't work.
  106. */
  107. LiteralRestriction r3 = LiteralRestriction.createRestriction(pattern2,
  108. "1");
  109. r3.setOperator(Operator.GREATER_OR_EQUAL);
  110. r3.setFieldPath("1");
  111. r3.setOrderNumber(0);
  112. LiteralRestriction r4 = LiteralRestriction.createRestriction(pattern2,
  113. "10");
  114. r4.setOperator(Operator.EQUAL);
  115. r4.setFieldPath("1");
  116. r4.setOrderNumber(1);
  117. data.add(r1);
  118. data.add(r2);
  119. data.add(r3);
  120. data.add(r4);
  121. for (Object o : data) {
  122. session.insert(o);
  123. }
  124. session.fireAllRules(new RuleNameMatchesAgendaFilter("Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"));
  125. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  126. (Iterator<Object>)session.getObjects().iterator());
  127. assertTrue((TestBaseOld.causeMapContains(map,
  128. r1,
  129. r2) ^ TestBaseOld.causeMapContains(map,
  130. r2,
  131. r1)));
  132. if (!map.isEmpty()) {
  133. fail("More incompatibilities than was expected.");
  134. }
  135. }
  136. @Test
  137. public void testLiteralRestrictionsIncompatibilityImpossibleRange() throws Exception {
  138. KieSession session = getStatelessKieSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  139. Collection<Object> data = new ArrayList<Object>();
  140. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  141. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  142. /*
  143. * Working pair
  144. */
  145. LiteralRestriction r1 = LiteralRestriction.createRestriction(pattern1,
  146. "10");
  147. r1.setOperator(Operator.GREATER);
  148. r1.setFieldPath("0");
  149. r1.setOrderNumber(0);
  150. LiteralRestriction r2 = LiteralRestriction.createRestriction(pattern1,
  151. "10");
  152. r2.setOperator(Operator.LESS);
  153. r2.setFieldPath("0");
  154. r2.setOrderNumber(1);
  155. /*
  156. * Pair that doesn't work.
  157. */
  158. LiteralRestriction r3 = LiteralRestriction.createRestriction(pattern2,
  159. "1");
  160. r3.setOperator(Operator.GREATER_OR_EQUAL);
  161. r3.setFieldPath("1");
  162. r3.setOrderNumber(0);
  163. LiteralRestriction r4 = LiteralRestriction.createRestriction(pattern2,
  164. "");
  165. r4.setOperator(Operator.EQUAL);
  166. r4.setFieldPath("1");
  167. r4.setOrderNumber(1);
  168. data.add(r1);
  169. data.add(r2);
  170. data.add(r3);
  171. data.add(r4);
  172. for (Object o : data) {
  173. session.insert(o);
  174. }
  175. session.fireAllRules(new RuleNameMatchesAgendaFilter("Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"));
  176. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  177. (Iterator<Object>)session.getObjects().iterator());
  178. assertTrue((TestBaseOld.causeMapContains(map,
  179. r1,
  180. r2) ^ TestBaseOld.causeMapContains(map,
  181. r2,
  182. r1)));
  183. if (!map.isEmpty()) {
  184. fail("More incompatibilities than was expected.");
  185. }
  186. }
  187. @Test
  188. public void testVariableRestrictionsIncompatibilityImpossibleRange() throws Exception {
  189. KieSession session = getStatelessKieSession(this.getClass().getResourceAsStream("Restrictions.drl"));
  190. Collection<Object> data = new ArrayList<Object>();
  191. VerifierRule rule = VerifierComponentMockFactory.createRule1();
  192. ObjectType objectType = new ObjectType(new PackageDescr("testPackage1"));
  193. objectType.setFullName("org.test.Person");
  194. Pattern pattern1 = VerifierComponentMockFactory.createPattern1();
  195. Pattern pattern2 = VerifierComponentMockFactory.createPattern2();
  196. /*
  197. * Working pair
  198. */
  199. PatternVariable variable1 = new PatternVariable(rule);
  200. variable1.setParentPath("0");
  201. variable1.setParentType(VerifierComponentType.FIELD);
  202. variable1.setOrderNumber(11);
  203. VariableRestriction r1 = new VariableRestriction(pattern1);
  204. r1.setOperator(Operator.GREATER);
  205. r1.setFieldPath("0");
  206. r1.setVariable(variable1);
  207. r1.setOrderNumber(0);
  208. VariableRestriction r2 = new VariableRestriction(pattern1);
  209. r2.setOperator(Operator.LESS);
  210. r2.setFieldPath("0");
  211. r2.setVariable(variable1);
  212. r2.setOrderNumber(1);
  213. /*
  214. * Pair that doesn't work.
  215. */
  216. PatternVariable variable2 = new PatternVariable(rule);
  217. variable2.setParentPath("1");
  218. variable2.setParentType(VerifierComponentType.FIELD);
  219. variable2.setOrderNumber(10);
  220. VariableRestriction r3 = new VariableRestriction(pattern2);
  221. r3.setOperator(Operator.GREATER_OR_EQUAL);
  222. r3.setFieldPath("1");
  223. r3.setVariable(variable2);
  224. r3.setOrderNumber(0);
  225. VariableRestriction r4 = new VariableRestriction(pattern2);
  226. r4.setOperator(Operator.EQUAL);
  227. r4.setFieldPath("1");
  228. r4.setVariable(variable2);
  229. r4.setOrderNumber(1);
  230. data.add(r1);
  231. data.add(r2);
  232. data.add(r3);
  233. data.add(r4);
  234. for (Object o : data) {
  235. session.insert(o);
  236. }
  237. session.fireAllRules(new RuleNameMatchesAgendaFilter("Incoherent VariableRestrictions in pattern possibility, impossible range"));
  238. Map<Cause, Set<Cause>> map = createIncompatibilityMap(VerifierComponentType.RESTRICTION,
  239. (Iterator<Object>)session.getObjects().iterator());
  240. assertTrue((TestBaseOld.causeMapContains(map,
  241. r1,
  242. r2) ^ TestBaseOld.causeMapContains(map,
  243. r2,
  244. r1)));
  245. if (!map.isEmpty()) {
  246. fail("More incompatibilities than was expected.");
  247. }
  248. }
  249. }