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

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

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