@Test public void testNestedAccessorWithBinding() throws Exception { final String str = "import org.drools.compiler.*;\n" + "global StringBuilder sb\n" + "rule R1 when\n" + " Person( name == \"mark\", cheese.(price == 10, $type : type) )\n" + "then\n" + " sb.append( $type );\n" + "end\n"; final KieBase kbase = loadKnowledgeBaseFromString(str); final KieSession ksession = kbase.newKieSession(); final StringBuilder sb = new StringBuilder(); ksession.setGlobal("sb", sb); final Person mark1 = new Person("mark"); mark1.setCheese(new Cheese("gorgonzola", 10)); ksession.insert(mark1); assertEquals(1, ksession.fireAllRules()); assertEquals("gorgonzola", sb.toString()); ksession.dispose(); }
@Test public void testNestedAccessor() throws Exception { final String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", cheese.(type == \"gorgonzola\", price == 10) )\n" + "then\n" + "end\n"; final KieBase kbase = loadKnowledgeBaseFromString(str); final KieSession ksession = kbase.newKieSession(); final Person mark1 = new Person("mark"); mark1.setCheese(new Cheese("gorgonzola", 10)); ksession.insert(mark1); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testDoubleNestedAccessor() throws Exception { final String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", cheese.(price == 10, type.(length == 10) ) )\n" + "then\n" + "end\n"; final KieBase kbase = loadKnowledgeBaseFromString(str); final KieSession ksession = kbase.newKieSession(); final Person mark1 = new Person("mark"); mark1.setCheese(new Cheese("gorgonzola", 10)); ksession.insert(mark1); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testFactBindings() throws Exception { KnowledgeBase kbase = SerializationHelper.serializeObject( loadKnowledgeBase( "test_FactBindings.drl" ) ); StatefulKnowledgeSession ksession = createKnowledgeSession( kbase ); RuleRuntimeEventListener wmel = mock( RuleRuntimeEventListener.class ); ksession.addEventListener( wmel ); final Person bigCheese = new Person( "big cheese" ); final Cheese cheddar = new Cheese( "cheddar", 15 ); bigCheese.setCheese( cheddar ); final FactHandle bigCheeseHandle = ksession.insert( bigCheese ); final FactHandle cheddarHandle = ksession.insert( cheddar ); ksession.fireAllRules(); ArgumentCaptor<org.kie.api.event.rule.ObjectUpdatedEvent> arg = ArgumentCaptor.forClass( org.kie.api.event.rule.ObjectUpdatedEvent.class ); verify( wmel, times( 2 ) ).objectUpdated( arg.capture() ); org.kie.api.event.rule.ObjectUpdatedEvent event = arg.getAllValues().get( 0 ); assertSame( cheddarHandle, event.getFactHandle() ); assertSame( cheddar, event.getOldObject() ); assertSame( cheddar, event.getObject() ); event = arg.getAllValues().get( 1 ); assertSame( bigCheeseHandle, event.getFactHandle() ); assertSame( bigCheese, event.getOldObject() ); assertSame( bigCheese, event.getObject() ); }
@Test public void testNPEOnMVELAlphaPredicates() throws Exception { KnowledgeBase kbase = SerializationHelper.serializeObject( loadKnowledgeBase( "test_NPEOnMVELPredicate.drl" ) ); StatefulKnowledgeSession session = createKnowledgeSession( kbase ); final List list = new ArrayList(); session.setGlobal( "results", list ); Cheese cheese = new Cheese( "stilton", 10 ); Cheesery cheesery = new Cheesery(); cheesery.addCheese( cheese ); Person bob = new Person( "bob", "stilton" ); Cheese cheese2 = new Cheese(); bob.setCheese( cheese2 ); FactHandle p = session.insert( bob ); FactHandle c = session.insert( cheesery ); session.fireAllRules(); assertEquals( "should not have fired", 0, list.size() ); cheese2.setType( "stilton" ); session.update( p, bob ); session.fireAllRules(); assertEquals( 1, list.size() ); }