PageRenderTime 25ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java

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