@Test public void testCollectFromMVELAfterOr() throws Exception { KieBase kbase = loadKnowledgeBase( "test_CollectFromMVELAfterOr.drl"); KieSession wm = createKnowledgeSession(kbase); List results = new ArrayList(); wm.setGlobal( "results", results ); Person jill = new Person( "jill" ); Person bob = new Person( "bob" ); List addresses = new ArrayList(); addresses.add( new Address( "a" ) ); addresses.add( new Address( "b" ) ); addresses.add( new Address( "c" ) ); bob.setAddresses( addresses ); wm.insert( jill ); wm.insert( bob ); wm = SerializationHelper.getSerialisedStatefulKnowledgeSession(wm, true); results = (List) wm.getGlobal( "results" ); wm.fireAllRules(); assertEquals( 2, results.size() ); assertEquals( 3, ((Collection) results.get( 0 )).size() ); }
@Test public void testMapNullConstraint() throws Exception { final KieBase kbase = loadKnowledgeBase("test_mapNullConstraints.drl"); final KieSession ksession = createKnowledgeSession(kbase); final org.kie.api.event.rule.AgendaEventListener ael = mock(org.kie.api.event.rule.AgendaEventListener.class); ksession.addEventListener(ael); new WorkingMemoryConsoleLogger((WorkingMemory) ksession); final Map addresses = new HashMap(); addresses.put("home", new Address("home street")); final Person bob = new Person("Bob"); bob.setNamedAddresses(addresses); ksession.insert(bob); ksession.fireAllRules(); final ArgumentCaptor<AfterMatchFiredEvent> arg = ArgumentCaptor.forClass(org.kie.api.event.rule.AfterMatchFiredEvent.class); verify(ael, times(4)).afterMatchFired(arg.capture()); org.kie.api.event.rule.AfterMatchFiredEvent aaf = arg.getAllValues().get(0); assertThat(aaf.getMatch().getRule().getName(), is("1. home != null")); aaf = arg.getAllValues().get(1); assertThat(aaf.getMatch().getRule().getName(), is("2. not home == null")); aaf = arg.getAllValues().get(2); assertThat(aaf.getMatch().getRule().getName(), is("7. work == null")); aaf = arg.getAllValues().get(3); assertThat(aaf.getMatch().getRule().getName(), is("8. not work != null")); }
@Test public void testFromWithOr() throws Exception { KieBase kbase = loadKnowledgeBase( "test_FromWithOr.drl"); KieSession session = createKnowledgeSession(kbase); final List<Address> results = new ArrayList<Address>(); session.setGlobal( "results", results ); Address a1 = new Address(); a1.setZipCode( "12345" ); Address a2 = new Address(); a2.setZipCode( "54321" ); Address a3 = new Address(); a3.setZipCode( "99999" ); Person p = new Person(); p.addAddress( a1 ); p.addAddress( a2 ); p.addAddress( a3 ); session.insert( p ); session.fireAllRules(); assertEquals( 2, results.size() ); assertTrue( results.contains( a1 ) ); assertTrue( results.contains( a2 ) ); }
@Test public void testModifyBlockWithFrom() throws Exception { final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_ModifyBlockWithFrom.drl")); final KieSession ksession = createKnowledgeSession(kbase); final List results = new ArrayList(); ksession.setGlobal("results", results); final Person bob = new Person("Bob"); final Address addr = new Address("abc"); bob.addAddress(addr); ksession.insert(bob); ksession.insert(addr); ksession.fireAllRules(); // modify worked assertEquals("12345", addr.getZipCode()); // chaining worked assertEquals(1, results.size()); assertEquals(addr, results.get(0)); }
@Test public void testDoubleNullSafe() { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( address!.street!.length > 15 ) \n" + "then\n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); Person alex = new Person("Alex", 34); alex.setAddress(new Address("The Main Very Big Street")); ksession.insert(alex); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testNullSafeBinding() { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( $streetName : address!.street ) \n" + "then\n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); assertEquals(2, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testNullSafeNestedAccessors() { String str = "package org.drools.test; " + "import " + Person.class.getName() + "; " + "global java.util.List list; " + "rule R1 when " + " $street : String() "+ " Person( address!.( street == $street, $zip : zipCode ) ) " + "then " + " list.add( $zip ); " + "end"; KieBase kbase = loadKnowledgeBaseFromString( str ); KieSession ksession = kbase.newKieSession(); List list = new ArrayList(); ksession.setGlobal( "list", list ); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street", "", "123456")); ksession.insert(mark); ksession.insert("Main Street"); assertEquals( 1, ksession.fireAllRules() ); ksession.dispose(); assertEquals( Arrays.asList( "123456" ), list ); }
@Test public void testNullSafeNullComparison() { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( address!.street == null ) \n" + "then\n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testNullSafeNullComparisonReverse() { // DROOLS-82 String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( \"Main Street\".equalsIgnoreCase(address!.street) )\n" + "then\n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testNullSafeNullComparisonReverseComplex() { // DROOLS-82 String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( \"Main\".equalsIgnoreCase(address!.street!.substring(0, address!.street!.indexOf(' '))) )\n" + "then\n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testNullSafeNullComparison2() { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " $street : String()\n"+ " Person( address!.street == $street ) \n" + "then\n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); ksession.insert("Main Street"); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testModifyWithGetter() { final String rule1 = "package foo.bar\n" + "import " + Person.class.getName() + "\n" + "declare Person @propertyReactive end\n" + "rule x\n" + " when\n" + " $p : Person( address != null ) @watch(!address) \n" + " then\n" + " modify($p){getAddress().setStreet(\"foo\");}\n" + "end"; final KieHelper helper = new KieHelper(); helper.addContent(rule1, ResourceType.DRL); final KieSession ksession = helper.build().newKieSession(); final Person p = new Person(); p.setAddress(new Address()); ksession.insert(p); final int fired = ksession.fireAllRules(10); assertEquals(1, fired); assertEquals("foo", p.getAddress().getStreet()); }
@Test public void testGenericsOption() throws Exception { // JBRULES-3579 final String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " $c : Cheese( $type: type )\n" + " $p : Person( $name : name, addressOption.get.street == $type )\n" + "then\n" + "end\n"; final KieBase kbase = loadKnowledgeBaseFromString(str); final KieSession ksession = kbase.newKieSession(); final Person p = new Person("x"); p.setAddress(new Address("x", "x", "x")); ksession.insert(p); ksession.insert(new Cheese("x")); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testInlineCast() throws Exception { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", address#LongAddress.country == \"uk\" )\n" + "then\n" + "end\n"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); Person mark1 = new Person("mark"); mark1.setAddress(new LongAddress("uk")); ksession.insert(mark1); Person mark2 = new Person("mark"); ksession.insert(mark2); Person mark3 = new Person("mark"); mark3.setAddress(new Address()); ksession.insert(mark3); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testInlineCastWithBinding() throws Exception { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", $country : address#LongAddress.country == \"uk\" )\n" + "then\n" + "end\n"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); Person mark1 = new Person("mark"); mark1.setAddress(new LongAddress("uk")); ksession.insert(mark1); Person mark2 = new Person("mark"); ksession.insert(mark2); Person mark3 = new Person("mark"); mark3.setAddress(new Address()); ksession.insert(mark3); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testInlineCastOnlyBinding() throws Exception { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", $country : address#LongAddress.country )\n" + "then\n" + "end\n"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); Person mark1 = new Person("mark"); mark1.setAddress(new LongAddress("uk")); ksession.insert(mark1); Person mark2 = new Person("mark"); ksession.insert(mark2); Person mark3 = new Person("mark"); mark3.setAddress(new Address()); ksession.insert(mark3); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testNestedAccessorWithInlineCast() throws Exception { final String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", address#LongAddress.(country == \"uk\", suburb == \"suburb\") )\n" + "then\n" + "end\n"; final KieBase kbase = loadKnowledgeBaseFromString(str); final KieSession ksession = kbase.newKieSession(); final Person mark1 = new Person("mark"); mark1.setAddress(new LongAddress("street", "suburb", "zipCode", "uk")); ksession.insert(mark1); final Person mark2 = new Person("mark"); ksession.insert(mark2); final Person mark3 = new Person("mark"); mark3.setAddress(new Address("street", "suburb", "zipCode")); ksession.insert(mark3); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testInlineTypeCast() throws Exception { // DROOLS-136 String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", address#LongAddress )\n" + "then\n" + "end\n"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); Person mark1 = new Person("mark"); mark1.setAddress(new LongAddress("uk")); ksession.insert(mark1); Person mark2 = new Person("mark"); ksession.insert(mark2); Person mark3 = new Person("mark"); mark3.setAddress(new Address()); ksession.insert(mark3); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testInferredCast() throws Exception { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", address instanceof LongAddress, address.country == \"uk\" )\n" + "then\n" + "end\n"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); Person mark1 = new Person("mark"); mark1.setAddress(new LongAddress("uk")); ksession.insert(mark1); Person mark2 = new Person("mark"); ksession.insert(mark2); Person mark3 = new Person("mark"); mark3.setAddress(new Address()); ksession.insert(mark3); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testInlineCastWithNestedAccces() throws Exception { // DROOLS-127 String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( name == \"mark\", address#LongAddress.country.length == 2 )\n" + "then\n" + "end\n"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); Person mark1 = new Person("mark"); mark1.setAddress(new LongAddress("uk")); ksession.insert(mark1); Person mark2 = new Person("mark"); ksession.insert(mark2); Person mark3 = new Person("mark"); mark3.setAddress(new Address()); ksession.insert(mark3); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }