/machinelearning/4.0.x/drools-eclipse3.3/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java

https://github.com/etirelli/droolsjbpm-contributed-experiments · Java · 589 lines · 467 code · 83 blank · 39 comment · 23 complexity · faabc11f5d813c5662b38609115c51cb MD5 · raw file

  1. package org.drools.eclipse.editors.completion;
  2. import java.util.List;
  3. import junit.framework.TestCase;
  4. import org.drools.compiler.DrlParser;
  5. import org.drools.compiler.DroolsParserException;
  6. import org.drools.lang.descr.EvalDescr;
  7. import org.drools.lang.descr.FieldBindingDescr;
  8. import org.drools.lang.descr.FieldConstraintDescr;
  9. import org.drools.lang.descr.FromDescr;
  10. import org.drools.lang.descr.LiteralRestrictionDescr;
  11. import org.drools.lang.descr.PackageDescr;
  12. import org.drools.lang.descr.PatternDescr;
  13. import org.drools.lang.descr.RestrictionConnectiveDescr;
  14. import org.drools.lang.descr.RuleDescr;
  15. import org.drools.lang.descr.VariableRestrictionDescr;
  16. /**
  17. * Test to check the results from parsing incomplete rule fragments.
  18. *
  19. * @author <a href="mailto:kris_verlaenen@hotmail.com">kris verlaenen </a>
  20. */
  21. public class IncompleteParsingTest extends TestCase {
  22. private RuleDescr parseRuleString(String s) {
  23. PackageDescr packageDescr = parseString(s);
  24. if (packageDescr != null) {
  25. List rules = packageDescr.getRules();
  26. if (rules != null && rules.size() == 1) {
  27. return (RuleDescr) rules.get(0);
  28. }
  29. }
  30. return null;
  31. }
  32. private PackageDescr parseString(String s) {
  33. DrlParser parser = new DrlParser();
  34. try {
  35. return parser.parse(s);
  36. } catch (DroolsParserException exc) {
  37. exc.printStackTrace();
  38. }
  39. return null;
  40. }
  41. public void testParsingColumn() {
  42. String input =
  43. "rule MyRule \n" +
  44. " when \n" +
  45. " ";
  46. RuleDescr rule = parseRuleString(input);
  47. assertEquals(0, rule.getLhs().getDescrs().size());
  48. /**
  49. * This is how the parsed tree should look like:
  50. *
  51. * RuleDescr
  52. * PatternDescr [objectType = "Class"]
  53. * FieldConstraintDescr [fieldName = "condition"]
  54. * LiteralRestrictionDescr [evaluator = "==", text = "true"]
  55. */
  56. }
  57. public void testParsingColumn1() {
  58. String input =
  59. "rule MyRule \n" +
  60. " when \n" +
  61. " Class( condition == true ) \n" +
  62. " ";
  63. RuleDescr rule = parseRuleString(input);
  64. assertEquals(1, rule.getLhs().getDescrs().size());
  65. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  66. assertEquals("Class", pattern.getObjectType());
  67. assertTrue(pattern.getEndLine() != -1 || pattern.getEndColumn() != -1);
  68. assertEquals(1, pattern.getDescrs().size());
  69. assertEquals(input.indexOf( "Class" ), pattern.getStartCharacter());
  70. assertEquals(input.indexOf( "(" ), pattern.getLeftParentCharacter());
  71. assertEquals(input.indexOf( ")" ), pattern.getRightParentCharacter());
  72. assertEquals(input.indexOf( ")" ), pattern.getEndCharacter());
  73. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  74. assertEquals("condition", field.getFieldName());
  75. assertEquals(1, field.getRestrictions().size());
  76. LiteralRestrictionDescr restriction = (LiteralRestrictionDescr) field.getRestrictions().get(0);
  77. assertEquals("==", restriction.getEvaluator());
  78. assertEquals("true", restriction.getText());
  79. }
  80. public void testParsingColumn2() {
  81. String input =
  82. "rule MyRule \n" +
  83. " when \n" +
  84. " class: Class( condition == true, condition2 == null ) \n" +
  85. " ";
  86. RuleDescr rule = parseRuleString(input);
  87. assertEquals(1, rule.getLhs().getDescrs().size());
  88. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  89. assertTrue(pattern.getEndCharacter() != -1);
  90. }
  91. public void testParsingColumn3() {
  92. String input =
  93. "rule MyRule \n" +
  94. " when \n" +
  95. " Cl";
  96. RuleDescr rule = parseRuleString(input);
  97. assertEquals(0, rule.getLhs().getDescrs().size());
  98. }
  99. public void testParsingColumn4() {
  100. String input =
  101. "rule MyRule \n" +
  102. " when \n" +
  103. " Class( condition == true ) \n" +
  104. " Cl";
  105. RuleDescr rule = parseRuleString(input);
  106. assertEquals(1, rule.getLhs().getDescrs().size());
  107. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  108. assertTrue(pattern.getEndCharacter() != -1);
  109. }
  110. public void testParsingColumn5() {
  111. String input =
  112. "rule MyRule \n" +
  113. " when \n" +
  114. " class:";
  115. RuleDescr rule = parseRuleString(input);
  116. assertEquals(1, rule.getLhs().getDescrs().size());
  117. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  118. assertEquals("class", pattern.getIdentifier());
  119. assertNull(pattern.getObjectType());
  120. assertEquals(-1, pattern.getEndCharacter());
  121. }
  122. public void testParsingColumn6() {
  123. String input =
  124. "rule MyRule \n" +
  125. " when \n" +
  126. " class: Cl";
  127. RuleDescr rule = parseRuleString(input);
  128. assertEquals(1, rule.getLhs().getDescrs().size());
  129. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  130. assertEquals("class", pattern.getIdentifier());
  131. assertEquals("Cl", pattern.getObjectType());
  132. assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
  133. assertEquals(0, pattern.getDescrs().size());
  134. assertEquals(-1, pattern.getEndCharacter());
  135. }
  136. public void testParsingColumn7() {
  137. String input =
  138. "rule MyRule \n" +
  139. " when \n" +
  140. " class:Cl";
  141. RuleDescr rule = parseRuleString(input);
  142. assertEquals(1, rule.getLhs().getDescrs().size());
  143. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  144. assertEquals("class", pattern.getIdentifier());
  145. assertEquals("Cl", pattern.getObjectType());
  146. assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
  147. assertEquals(0, pattern.getDescrs().size());
  148. assertEquals(-1, pattern.getEndCharacter());
  149. }
  150. public void testParsingColumn8() {
  151. /** Inside of condition: start */
  152. String input =
  153. "rule MyRule \n" +
  154. " when \n" +
  155. " Class (";
  156. RuleDescr rule = parseRuleString(input);
  157. assertEquals(1, rule.getLhs().getDescrs().size());
  158. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  159. assertEquals("Class", pattern.getObjectType());
  160. assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
  161. assertEquals(0, pattern.getDescrs().size());
  162. assertEquals(-1, pattern.getEndCharacter());
  163. }
  164. public void testParsingColumn9() {
  165. String input =
  166. "rule MyRule \n" +
  167. " when \n" +
  168. " Class ( na";
  169. RuleDescr rule = parseRuleString(input);
  170. assertEquals(1, rule.getLhs().getDescrs().size());
  171. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  172. assertEquals("Class", pattern.getObjectType());
  173. assertEquals(-1, pattern.getEndCharacter());
  174. assertEquals(1, pattern.getDescrs().size());
  175. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  176. assertEquals( "na", field.getFieldName() );
  177. assertEquals(-1, field.getEndCharacter());
  178. }
  179. public void testParsingColumn10() {
  180. String input =
  181. "rule MyRule \n" +
  182. " when \n" +
  183. " Class ( name['xyz'].subname.subsubn";
  184. RuleDescr rule = parseRuleString(input);
  185. assertEquals(1, rule.getLhs().getDescrs().size());
  186. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  187. assertEquals("Class", pattern.getObjectType());
  188. assertEquals(-1, pattern.getEndCharacter());
  189. assertEquals(1, pattern.getDescrs().size());
  190. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  191. assertEquals( "name['xyz'].subname.subsubn", field.getFieldName() );
  192. assertEquals(-1, field.getEndCharacter());
  193. }
  194. public void testParsingColumn11() {
  195. String input =
  196. "rule MyRule \n" +
  197. " when \n" +
  198. " Class ( condition == true, ";
  199. RuleDescr rule = parseRuleString(input);
  200. assertEquals(1, rule.getLhs().getDescrs().size());
  201. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  202. assertEquals("Class", pattern.getObjectType());
  203. assertEquals(-1, pattern.getEndCharacter());
  204. assertEquals(1, pattern.getDescrs().size());
  205. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  206. assertEquals(-1, field.getEndCharacter());
  207. }
  208. public void testParsingColumn12() {
  209. String input =
  210. "rule MyRule \n" +
  211. " when \n" +
  212. " Class ( c : condition, ";
  213. RuleDescr rule = parseRuleString(input);
  214. assertEquals(1, rule.getLhs().getDescrs().size());
  215. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  216. assertEquals("Class", pattern.getObjectType());
  217. assertEquals(-1, pattern.getEndCharacter());
  218. assertEquals(1, pattern.getDescrs().size());
  219. FieldBindingDescr fieldBinding = (FieldBindingDescr) pattern.getDescrs().get(0);
  220. assertEquals(-1, fieldBinding.getEndCharacter());
  221. }
  222. public void testParsingColumn13() {
  223. String input =
  224. "rule MyRule \n" +
  225. " when \n" +
  226. " Class ( condition == true, na";
  227. RuleDescr rule = parseRuleString(input);
  228. assertEquals(1, rule.getLhs().getDescrs().size());
  229. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  230. assertEquals("Class", pattern.getObjectType());
  231. assertEquals(-1, pattern.getEndCharacter());
  232. assertEquals(2, pattern.getDescrs().size());
  233. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  234. assertEquals(-1, field.getEndCharacter());
  235. assertEquals( "condition", field.getFieldName() );
  236. field = (FieldConstraintDescr) pattern.getDescrs().get(1);
  237. assertEquals( "na", field.getFieldName() );
  238. assertEquals(-1, field.getEndCharacter());
  239. }
  240. public void FAILINGtestParsingColumn14() {
  241. String input =
  242. "rule MyRule \n" +
  243. " when \n" +
  244. " Class ( name:";
  245. RuleDescr rule = parseRuleString(input);
  246. assertEquals(1, rule.getLhs().getDescrs().size());
  247. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  248. assertEquals("Class", pattern.getObjectType());
  249. assertEquals(-1, pattern.getEndCharacter());
  250. assertEquals(1, pattern.getDescrs().size());
  251. FieldBindingDescr binding1 = (FieldBindingDescr) pattern.getDescrs().get(0);
  252. assertEquals("name", binding1.getIdentifier());
  253. assertNull(binding1.getFieldName());
  254. }
  255. public void testParsingColumn15() {
  256. String input =
  257. "rule MyRule \n" +
  258. " when \n" +
  259. " Class ( property ";
  260. RuleDescr rule = parseRuleString(input);
  261. assertEquals(1, rule.getLhs().getDescrs().size());
  262. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  263. assertEquals("Class", pattern.getObjectType());
  264. assertEquals(-1, pattern.getEndCharacter());
  265. assertEquals(1, pattern.getDescrs().size());
  266. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  267. assertEquals("property", field.getFieldName());
  268. assertEquals(0, field.getRestrictions().size());
  269. assertEquals(-1, field.getEndCharacter());
  270. }
  271. public void testParsingColumn16() {
  272. String input =
  273. "rule MyRule \n" +
  274. " when \n" +
  275. " Class ( name: property ";
  276. RuleDescr rule = parseRuleString(input);
  277. assertEquals(1, rule.getLhs().getDescrs().size());
  278. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  279. assertEquals("Class", pattern.getObjectType());
  280. assertEquals(-1, pattern.getEndCharacter());
  281. assertEquals(1, pattern.getDescrs().size());
  282. FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
  283. assertEquals("name", binding.getIdentifier());
  284. assertEquals("property", binding.getFieldName());
  285. }
  286. public void testParsingColumn17() {
  287. String input =
  288. "rule MyRule \n" +
  289. " when \n" +
  290. " Class ( name1: property1 == \"value1\", name2: property2 ";
  291. RuleDescr rule = parseRuleString(input);
  292. assertEquals(1, rule.getLhs().getDescrs().size());
  293. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  294. assertEquals("Class", pattern.getObjectType());
  295. assertEquals(-1, pattern.getEndCharacter());
  296. assertEquals(3, pattern.getDescrs().size());
  297. FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
  298. assertEquals("name1", binding.getIdentifier());
  299. assertEquals("property1", binding.getFieldName());
  300. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(1);
  301. assertEquals("property1", field.getFieldName());
  302. assertEquals(1, field.getRestrictions().size());
  303. LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
  304. assertEquals("==", literal.getEvaluator());
  305. assertEquals("value1", literal.getText());
  306. binding = (FieldBindingDescr) pattern.getDescrs().get(2);
  307. assertEquals("name2", binding.getIdentifier());
  308. assertEquals("property2", binding.getFieldName());
  309. }
  310. public void testParsingColumn18() {
  311. String input =
  312. "rule MyRule \n" +
  313. " when \n" +
  314. " Class(name:property==";
  315. RuleDescr rule = parseRuleString(input);
  316. assertEquals(1, rule.getLhs().getDescrs().size());
  317. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  318. assertEquals("Class", pattern.getObjectType());
  319. assertEquals(-1, pattern.getEndCharacter());
  320. assertEquals(2, pattern.getDescrs().size());
  321. FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
  322. assertEquals("name", binding.getIdentifier());
  323. assertEquals("property", binding.getFieldName());
  324. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(1);
  325. assertEquals("property", field.getFieldName());
  326. assertEquals(1, field.getRestrictions().size());
  327. }
  328. public void testParsingColumn19() {
  329. String input =
  330. "rule MyRule \n" +
  331. " when \n" +
  332. " Class( property == otherPropertyN";
  333. RuleDescr rule = parseRuleString(input);
  334. assertEquals(1, rule.getLhs().getDescrs().size());
  335. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  336. assertEquals("Class", pattern.getObjectType());
  337. assertEquals(-1, pattern.getEndCharacter());
  338. assertEquals(1, pattern.getDescrs().size());
  339. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  340. assertEquals("property", field.getFieldName());
  341. assertEquals(1, field.getRestrictions().size());
  342. VariableRestrictionDescr variable = (VariableRestrictionDescr) field.getRestrictions().get(0);
  343. assertEquals("==", variable.getEvaluator());
  344. assertEquals("otherPropertyN", variable.getIdentifier());
  345. assertEquals(-1, field.getEndCharacter());
  346. }
  347. public void testParsingColumn20() {
  348. String input =
  349. "rule MyRule \n" +
  350. " when \n" +
  351. " Class( property == \"someth";
  352. RuleDescr rule = parseRuleString(input);
  353. assertEquals(1, rule.getLhs().getDescrs().size());
  354. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  355. assertEquals("Class", pattern.getObjectType());
  356. assertEquals(-1, pattern.getEndCharacter());
  357. assertEquals(1, pattern.getDescrs().size());
  358. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  359. assertEquals("property", field.getFieldName());
  360. assertEquals(1, field.getRestrictions().size());
  361. LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
  362. // KRISV: for now, it would be really messy to make this work. String is a
  363. // lexer rule (not parser), and changing that or controling the behavior of it
  364. // is not simple. Can we leave the way it is for now?
  365. //
  366. // TODO literal should be a LiteralRestrictionDescr with filled in evaluator and text, not null
  367. // assertEquals("==", literal.getEvaluator());
  368. // assertEquals("someth", literal.getText());
  369. // TODO this method does not yet exist
  370. // assertEquals(-1, field.getEndCharacter());
  371. }
  372. public void testParsingColumn21() {
  373. String input =
  374. "rule MyRule \n" +
  375. " when \n" +
  376. " Class( property contains ";
  377. RuleDescr rule = parseRuleString(input);
  378. assertEquals(1, rule.getLhs().getDescrs().size());
  379. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  380. assertEquals("Class", pattern.getObjectType());
  381. assertEquals(-1, pattern.getEndCharacter());
  382. assertEquals(1, pattern.getDescrs().size());
  383. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  384. assertEquals("property", field.getFieldName());
  385. assertEquals(1, field.getRestrictions().size());
  386. // KRISV: you are right
  387. //
  388. // now I would like to access the evaluator 'contains', but this seems
  389. // not possible because the parser cannot create this descr yet
  390. // since it does not know what class to create (VariableRestrictionDescr
  391. // or LiteralRestrictionDescr or ?)
  392. // so maybe I should just extract this info myself, based on the
  393. // starting character of this FieldConstraintDescr?
  394. // TODO this method does not yet exist
  395. assertEquals(-1, field.getEndCharacter());
  396. }
  397. public void testParsingColumn22() {
  398. String input =
  399. "rule MyRule \n" +
  400. " when \n" +
  401. " Class( property matches \"someth";
  402. RuleDescr rule = parseRuleString(input);
  403. assertEquals(1, rule.getLhs().getDescrs().size());
  404. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  405. assertEquals("Class", pattern.getObjectType());
  406. assertEquals(-1, pattern.getEndCharacter());
  407. assertEquals(1, pattern.getDescrs().size());
  408. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  409. assertEquals("property", field.getFieldName());
  410. assertEquals(1, field.getRestrictions().size());
  411. LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
  412. // KRISV: see comments above
  413. //
  414. // TODO literal should be a LiteralRestrictionDescr with filled in evaluator and text, not null
  415. // assertEquals("matches", literal.getEvaluator());
  416. // assertEquals("someth", literal.getText());
  417. // TODO this method does not yet exist
  418. // assertEquals(-1, field.getEndCharacter());
  419. }
  420. public void testParsingColumn23() {
  421. String input =
  422. "rule MyRule \n" +
  423. " when \n" +
  424. " eval ( ";
  425. RuleDescr rule = parseRuleString(input);
  426. assertEquals(1, rule.getLhs().getDescrs().size());
  427. EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get(0);
  428. assertEquals(input.indexOf( "eval" ), eval.getStartCharacter());
  429. assertEquals(-1, eval.getEndCharacter());
  430. }
  431. public void testParsingColumn24() {
  432. String input =
  433. "rule MyRule \n" +
  434. " when \n" +
  435. " Class ( property > 0 & ";
  436. RuleDescr rule = parseRuleString(input);
  437. assertEquals(1, rule.getLhs().getDescrs().size());
  438. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  439. assertEquals("Class", pattern.getObjectType());
  440. assertEquals(-1, pattern.getEndCharacter());
  441. assertEquals(1, pattern.getDescrs().size());
  442. FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
  443. assertEquals("property", field.getFieldName());
  444. assertEquals(1, field.getRestrictions().size());
  445. LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
  446. assertEquals(">", literal.getEvaluator());
  447. assertEquals("0", literal.getText());
  448. RestrictionConnectiveDescr connective = (RestrictionConnectiveDescr) field.getRestriction();
  449. assertEquals(RestrictionConnectiveDescr.AND, connective.getConnective());
  450. }
  451. public void testParsingColumn25() {
  452. String input =
  453. "rule MyRule \n" +
  454. " when \n" +
  455. " Class ( ) from a";
  456. RuleDescr rule = parseRuleString(input);
  457. assertEquals(1, rule.getLhs().getDescrs().size());
  458. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  459. assertEquals("Class", pattern.getObjectType());
  460. FromDescr from = (FromDescr) pattern.getSource();
  461. assertEquals(-1, from.getEndCharacter());
  462. assertTrue(pattern.getEndCharacter() != -1);
  463. }
  464. public void testParsingColumn26() {
  465. String input =
  466. "rule MyRule \n" +
  467. " when \n" +
  468. " Class ( property > 0 ) from myGlobal.getList() \n" +
  469. " ";
  470. RuleDescr rule = parseRuleString(input);
  471. assertEquals(1, rule.getLhs().getDescrs().size());
  472. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  473. FromDescr from = (FromDescr) pattern.getSource();
  474. assertTrue(from.getEndCharacter() != -1);
  475. }
  476. public void testParsingColumn27() {
  477. String input =
  478. "rule MyRule \n" +
  479. " when \n" +
  480. " Class ( property > 0 ) from getDroolsFunction() \n" +
  481. " ";
  482. RuleDescr rule = parseRuleString(input);
  483. assertEquals(1, rule.getLhs().getDescrs().size());
  484. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  485. FromDescr from = (FromDescr) pattern.getSource();
  486. assertTrue(from.getEndCharacter() != -1);
  487. }
  488. public void testParsingCharactersStartEnd() {
  489. String input =
  490. "package test; \n" +
  491. "rule MyRule \n" +
  492. " when \n" +
  493. " Class( condition == true ) \n" +
  494. " then \n" +
  495. " System.out.println(\"Done\") \n" +
  496. "end \n";
  497. RuleDescr rule = parseRuleString(input);
  498. assertEquals(input.indexOf( "rule" ), rule.getStartCharacter());
  499. assertEquals(input.indexOf( "end" )+2, rule.getEndCharacter());
  500. PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
  501. assertEquals(input.indexOf( "Class" ), pattern.getStartCharacter());
  502. assertEquals(input.indexOf( "(" ), pattern.getLeftParentCharacter());
  503. assertEquals(input.indexOf( ")" ), pattern.getRightParentCharacter());
  504. assertEquals(input.indexOf( ")" ), pattern.getEndCharacter());
  505. }
  506. }