Search in sources :

Example 1 with Pet

use of org.drools.testcoverage.common.model.Pet in project drools by kiegroup.

the class TimerAndCalendarWithPseudoTimeTest method testIntervalTimerExpressionWithOr.

@Test(timeout = 10000)
public void testIntervalTimerExpressionWithOr() {
    final String drl = "package org.kie.test\n" + "global java.util.List list\n" + "import " + FactA.class.getCanonicalName() + "\n" + "import " + FactB.class.getCanonicalName() + "\n" + "import " + Pet.class.getCanonicalName() + "\n" + "rule r1 timer (expr: f1.field2, f1.field2; repeat-limit=3)\n" + "when\n" + "    foo: FactB()\n" + "    ( Pet()  and f1 : FactA( field1 == 'f1') ) or \n" + "    f1 : FactA(field1 == 'f2') \n" + "then\n" + "    list.add( f1 );\n" + "    foo.setF1( 'xxx' );\n" + "end\n" + "\n";
    final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("timer-and-calendar-test", kieBaseTestConfiguration, drl);
    final KieSession ksession = kbase.newKieSession(KieSessionTestConfiguration.STATEFUL_PSEUDO.getKieSessionConfiguration(), null);
    try {
        final PseudoClockScheduler timeService = ksession.getSessionClock();
        timeService.advanceTime(new Date().getTime(), TimeUnit.MILLISECONDS);
        final List list = new ArrayList();
        ksession.setGlobal("list", list);
        ksession.insert(new FactB());
        ksession.insert(new Pet("cinchilla"));
        final FactA fact1 = new FactA();
        fact1.setField1("f1");
        fact1.setField2(250);
        final FactA fact3 = new FactA();
        fact3.setField1("f2");
        fact3.setField2(1000);
        ksession.insert(fact1);
        ksession.insert(fact3);
        ksession.fireAllRules();
        assertEquals(0, list.size());
        timeService.advanceTime(300, TimeUnit.MILLISECONDS);
        ksession.fireAllRules();
        assertEquals(1, list.size());
        Assert.assertEquals(fact1, list.get(0));
        timeService.advanceTime(300, TimeUnit.MILLISECONDS);
        ksession.fireAllRules();
        assertEquals(2, list.size());
        Assert.assertEquals(fact1, list.get(1));
        timeService.advanceTime(300, TimeUnit.MILLISECONDS);
        ksession.fireAllRules();
        // did not change, repeat-limit kicked in
        assertEquals(2, list.size());
        timeService.advanceTime(300, TimeUnit.MILLISECONDS);
        ksession.fireAllRules();
        assertEquals(3, list.size());
        Assert.assertEquals(fact3, list.get(2));
        timeService.advanceTime(1000, TimeUnit.MILLISECONDS);
        ksession.fireAllRules();
        assertEquals(4, list.size());
        Assert.assertEquals(fact3, list.get(3));
        timeService.advanceTime(1000, TimeUnit.MILLISECONDS);
        ksession.fireAllRules();
        // did not change, repeat-limit kicked in
        assertEquals(4, list.size());
    } finally {
        ksession.dispose();
    }
}
Also used : KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) FactA(org.drools.testcoverage.common.model.FactA) FactB(org.drools.testcoverage.common.model.FactB) PseudoClockScheduler(org.drools.core.time.impl.PseudoClockScheduler) Date(java.util.Date) Pet(org.drools.testcoverage.common.model.Pet) Test(org.junit.Test)

Example 2 with Pet

use of org.drools.testcoverage.common.model.Pet in project drools by kiegroup.

the class ConsequenceTest method testMVELConsequenceWithoutSemiColon1.

@Test
public void testMVELConsequenceWithoutSemiColon1() {
    final String drl = "package prg.drools.compiler.integrationtests.drl;\n" + "import " + Person.class.getCanonicalName() + ";\n" + "import " + Pet.class.getCanonicalName() + ";\n" + "rule test dialect 'mvel'\n" + "when\n" + "    $person:Person()\n" + "    $pet:Pet()\n" + "then\n" + "    delete($person) // some comment\n" + "    delete($pet) // another comment\n" + "end\n";
    final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("consequence-test", kieBaseTestConfiguration, drl);
    final KieSession ksession = kbase.newKieSession();
    try {
        // create working memory mock listener
        final RuleRuntimeEventListener wml = Mockito.mock(RuleRuntimeEventListener.class);
        ksession.addEventListener(wml);
        final FactHandle personFH = ksession.insert(new Person("Toni"));
        final FactHandle petFH = ksession.insert(new Pet("Toni"));
        final int fired = ksession.fireAllRules();
        assertEquals(1, fired);
        // capture the arguments and check that the retracts happened
        final ArgumentCaptor<ObjectDeletedEvent> retracts = ArgumentCaptor.forClass(ObjectDeletedEvent.class);
        verify(wml, times(2)).objectDeleted(retracts.capture());
        final List<ObjectDeletedEvent> values = retracts.getAllValues();
        assertThat(values.get(0).getFactHandle(), is(personFH));
        assertThat(values.get(1).getFactHandle(), is(petFH));
    } finally {
        ksession.dispose();
    }
}
Also used : ObjectDeletedEvent(org.kie.api.event.rule.ObjectDeletedEvent) RuleRuntimeEventListener(org.kie.api.event.rule.RuleRuntimeEventListener) FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Person(org.drools.testcoverage.common.model.Person) Pet(org.drools.testcoverage.common.model.Pet) Test(org.junit.Test)

Example 3 with Pet

use of org.drools.testcoverage.common.model.Pet in project drools by kiegroup.

the class JoinNodeRangeIndexingTest method testInsertUpdateDelete.

@Test
public void testInsertUpdateDelete() {
    final String drl = "import " + Person.class.getCanonicalName() + ";\n" + "import " + Pet.class.getCanonicalName() + ";\n" + "global java.util.Set result;\n" + "rule R1\n" + "when\n" + "   $pet : Pet()\n" + "   $person : Person( age > $pet.age )\n" + "then\n" + "   result.add( $person.getName() + \" > \" + $pet.getName() );\n" + "end\n" + "rule R2\n" + "   salience 100\n" + "when\n" + "   String (this == \"trigger R2\")\n" + "   $person : Person( name == \"Paul\" )\n" + "then\n" + "   modify($person) {setAge(20)}\n" + "end\n" + "rule R3\n" + "   salience 100\n" + "when\n" + "   String (this == \"trigger R3\")\n" + "   $pet : Pet( )\n" + "then\n" + "   modify($pet) {setAge($pet.getAge() - 5)}\n" + "end\n" + "rule R4\n" + "   salience 100\n" + "when\n" + "   String (this == \"trigger R4\")\n" + "   $pet : Pet( name == \"Oliver\" )\n" + "then\n" + "   delete($pet);\n" + "end\n";
    final KieBase kbase = getKieBaseWithRangeIndexOption(drl);
    assertIndexedTrue(kbase, Person.class);
    final KieSession ksession = kbase.newKieSession();
    try {
        final Set<String> result = new HashSet<>();
        ksession.setGlobal("result", result);
        ksession.insert(new Pet("Oliver", 5));
        ksession.insert(new Pet("Leo", 10));
        ksession.insert(new Pet("Milo", 20));
        ksession.insert(new Person("John", 10));
        ksession.insert(new Person("Paul", 10));
        assertEquals(2, ksession.fireAllRules());
        Assertions.assertThat(result).containsExactlyInAnyOrder("John > Oliver", "Paul > Oliver");
        // set Paul's age = 20
        ksession.insert("trigger R2");
        assertEquals(3, ksession.fireAllRules());
        Assertions.assertThat(result).containsExactlyInAnyOrder("John > Oliver", "Paul > Oliver", "Paul > Leo");
        // set all Pets' age minus 5
        ksession.insert("trigger R3");
        assertEquals(8, ksession.fireAllRules());
        Assertions.assertThat(result).containsExactlyInAnyOrder("John > Oliver", "John > Leo", "Paul > Oliver", "Paul > Leo", "Paul > Milo");
        // delete Oliver
        ksession.insert("trigger R4");
        ksession.insert(new Person("George", 15));
        assertEquals(2, ksession.fireAllRules());
        Assertions.assertThat(result).containsExactlyInAnyOrder("John > Oliver", "John > Leo", "Paul > Oliver", "Paul > Leo", "Paul > Milo", "George > Leo");
    } finally {
        ksession.dispose();
    }
}
Also used : KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Person(org.drools.testcoverage.common.model.Person) Pet(org.drools.testcoverage.common.model.Pet) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 4 with Pet

use of org.drools.testcoverage.common.model.Pet in project drools by kiegroup.

the class FromTest method testFromExprFollowedByNot.

@Test
public void testFromExprFollowedByNot() {
    final String drl = "package org.drools.compiler.integrationtests.operators;\n" + "import " + Person.class.getCanonicalName() + ";\n" + "import " + Pet.class.getCanonicalName() + ";\n" + "global java.util.List list;\n" + "rule \"Rule 1\"\n" + "    when\n" + "        p : Person ($var: pet )\n" + "        Pet () from $var\n" + "        not Pet ()\n" + "    then\n" + "       list.add( p );\n" + "end\n";
    final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("from-test", kieBaseTestConfiguration, drl);
    final KieSession ksession = kbase.newKieSession();
    try {
        final List list = new ArrayList();
        ksession.setGlobal("list", list);
        final Person p = new Person();
        p.setPet(new Pet(Pet.PetType.PARROT));
        ksession.insert(p);
        ksession.fireAllRules();
        assertEquals(1, list.size());
        assertSame(p, list.get(0));
    } finally {
        ksession.dispose();
    }
}
Also used : KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) List(java.util.List) ArrayList(java.util.ArrayList) Person(org.drools.testcoverage.common.model.Person) Pet(org.drools.testcoverage.common.model.Pet) Test(org.junit.Test)

Example 5 with Pet

use of org.drools.testcoverage.common.model.Pet in project drools by kiegroup.

the class AlphaNetworkModifyTest method testModifyWithLiaToEval.

@Test
public void testModifyWithLiaToEval() {
    final String drl = "package org.simple \n" + "import " + Person.class.getCanonicalName() + "\n" + "import " + Cheese.class.getCanonicalName() + "\n" + "import " + Pet.class.getCanonicalName() + "\n" + "global java.util.List list \n" + "rule x1 \n" + "when \n" + "    $pe : Person() \n" + "    $ch : Cheese() \n" + "    $ca : Pet() \n" + "then \n" + "end  \n" + "rule x2 \n" + "when \n" + "    $ch : Cheese() \n" + "    $ca : Pet() \n" + "    $pe : Person() \n" + "then \n" + "end  \n" + "rule x3 \n" + "when \n" + "    $ch : Cheese() \n" + "then \n" + "end  \n" + "rule x4 \n" + "when \n" + "    $ch : Cheese() \n" + "    eval( $ch != null ) \n" + "then \n" + "end  \n";
    final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("alpha-network-modify-test", kieBaseTestConfiguration, drl);
    final KieSession wm = kbase.newKieSession();
    try {
        final ObjectTypeNode otnPerson = getObjectTypeNode(kbase, "Person");
        final ObjectTypeNode otnCheese = getObjectTypeNode(kbase, "Cheese");
        final ObjectTypeNode otnPet = getObjectTypeNode(kbase, "Pet");
        assertNotNull(otnPerson);
        assertNotNull(otnCheese);
        assertNotNull(otnPet);
        assertEquals(0, otnPerson.getOtnIdCounter());
        assertEquals(0, otnCheese.getOtnIdCounter());
        assertEquals(0, otnPet.getOtnIdCounter());
        wm.insert(new Person());
        wm.insert(new Pet("yyy"));
        wm.insert(new Cheese());
        wm.fireAllRules();
        assertEquals(2, otnPerson.getOtnIdCounter());
        assertEquals(4, otnCheese.getOtnIdCounter());
        assertEquals(2, otnPet.getOtnIdCounter());
    } finally {
        wm.dispose();
    }
}
Also used : KieBase(org.kie.api.KieBase) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) Cheese(org.drools.testcoverage.common.model.Cheese) KieSession(org.kie.api.runtime.KieSession) Person(org.drools.testcoverage.common.model.Person) Pet(org.drools.testcoverage.common.model.Pet) Test(org.junit.Test)

Aggregations

Pet (org.drools.testcoverage.common.model.Pet)8 Test (org.junit.Test)8 KieBase (org.kie.api.KieBase)8 KieSession (org.kie.api.runtime.KieSession)8 Person (org.drools.testcoverage.common.model.Person)7 ArrayList (java.util.ArrayList)3 HashSet (java.util.HashSet)2 List (java.util.List)2 Arrays.asList (java.util.Arrays.asList)1 Date (java.util.Date)1 ObjectTypeNode (org.drools.core.reteoo.ObjectTypeNode)1 PseudoClockScheduler (org.drools.core.time.impl.PseudoClockScheduler)1 Cheese (org.drools.testcoverage.common.model.Cheese)1 FactA (org.drools.testcoverage.common.model.FactA)1 FactB (org.drools.testcoverage.common.model.FactB)1 ObjectDeletedEvent (org.kie.api.event.rule.ObjectDeletedEvent)1 RuleRuntimeEventListener (org.kie.api.event.rule.RuleRuntimeEventListener)1 FactHandle (org.kie.api.runtime.rule.FactHandle)1