Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-1376

OOPath 2+ notifyModification() result only the 1st being effective

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • None
    • 7.0.0.Beta3
    • core engine
    • NEW
    • NEW

    Description

      Reproducible by adding in XPathTest:

          @Test
          public void testDoubleAdd() {
              String drl =
                      "import org.drools.compiler.xpath.*;\n" +
                      "\n" +
                      "rule R2 when\n" +
                      "  Group( $id: name, $p: /members{age >= 20} )\n" +
                      "then\n" +
                      "  System.out.println( $id + \".\" + $p.getName() );\n" +
                      "  insertLogical(      $id + \".\" + $p.getName() );\n" +
                      "end\n";
      
              KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
                                                   .build()
                                                   .newKieSession();
              
              Group x = new Group("X");
              Group y = new Group("Y");
              ksession.insert( x );
              ksession.insert( y );
              ksession.fireAllRules();
              assertFalse (factsCollection(ksession).contains("X.Ada"));
              assertFalse (factsCollection(ksession).contains("X.Bea"));
              assertFalse (factsCollection(ksession).contains("Y.Ada"));
              assertFalse (factsCollection(ksession).contains("Y.Bea"));
              
              Adult ada = new Adult("Ada", 20);
              Adult bea = new Adult("Bea", 20);
              x.addPerson(ada);
              x.addPerson(bea);
              y.addPerson(ada);
              y.addPerson(bea);
              ksession.fireAllRules();
              assertTrue  (factsCollection(ksession).contains("X.Ada"));
              assertTrue  (factsCollection(ksession).contains("X.Bea"));
              assertTrue  (factsCollection(ksession).contains("Y.Ada"));
              assertTrue  (factsCollection(ksession).contains("Y.Bea"));
              
              x.removePerson(ada);
              x.removePerson(bea);
              y.removePerson(ada);
              y.removePerson(bea);  
              ksession.fireAllRules();
              assertFalse (factsCollection(ksession).contains("X.Ada"));
              assertFalse (factsCollection(ksession).contains("X.Bea"));
              assertFalse (factsCollection(ksession).contains("Y.Ada"));
              assertFalse (factsCollection(ksession).contains("Y.Bea"));
          }
          
          @Test
          public void testDoubleRemove() {
              String drl =
                      "import org.drools.compiler.xpath.*;\n" +
                      "\n" +
                      "rule R2 when\n" +
                      "  Group( $id: name, $p: /members{age >= 20} )\n" +
                      "then\n" +
                      "  System.out.println( $id + \".\" + $p.getName() );\n" +
                      "  insertLogical(      $id + \".\" + $p.getName() );\n" +
                      "end\n";
      
              KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
                                                   .build()
                                                   .newKieSession();
              
              Adult ada = new Adult("Ada", 20);
              Adult bea = new Adult("Bea", 20);
              Group x = new Group("X");
              Group y = new Group("Y");
              x.addPerson(ada);
              x.addPerson(bea);
              y.addPerson(ada);
              y.addPerson(bea);
              ksession.insert( x );
              ksession.insert( y );
              ksession.fireAllRules();
              assertTrue  (factsCollection(ksession).contains("X.Ada"));
              assertTrue  (factsCollection(ksession).contains("X.Bea"));
              assertTrue  (factsCollection(ksession).contains("Y.Ada"));
              assertTrue  (factsCollection(ksession).contains("Y.Bea"));
              
              x.removePerson(ada);
              x.removePerson(bea);
              y.removePerson(ada);
              y.removePerson(bea);  
              ksession.fireAllRules();
              assertFalse (factsCollection(ksession).contains("X.Ada"));
              assertFalse (factsCollection(ksession).contains("X.Bea"));
              assertFalse (factsCollection(ksession).contains("Y.Ada"));
              assertFalse (factsCollection(ksession).contains("Y.Bea"));
          }
      

      Attachments

        Activity

          People

            mmortari@redhat.com Matteo Mortari
            mmortari@redhat.com Matteo Mortari
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: