use of org.drools.compiler.FactA in project drools by kiegroup.
the class TimerAndCalendarTest method testIntervalTimerExpressionWithOr.
@Test(timeout = 10000)
public void testIntervalTimerExpressionWithOr() throws Exception {
String text = "package org.kie.test\n" + "global java.util.List list\n" + "import " + FactA.class.getCanonicalName() + "\n" + "import " + Foo.class.getCanonicalName() + "\n" + "import " + Pet.class.getCanonicalName() + "\n" + "rule r1 timer (expr: f1.field2, f1.field2; repeat-limit=3)\n" + "when\n" + " foo: Foo()\n" + " ( Pet() and f1 : FactA( field1 == 'f1') ) or \n" + " f1 : FactA(field1 == 'f2') \n" + "then\n" + " list.add( f1 );\n" + " foo.setId( 'xxx' );\n" + "end\n" + "\n";
KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
conf.setOption(ClockTypeOption.get("pseudo"));
KieBase kbase = loadKnowledgeBaseFromString(text);
KieSession ksession = createKnowledgeSession(kbase, conf);
PseudoClockScheduler timeService = (PseudoClockScheduler) ksession.<SessionClock>getSessionClock();
timeService.advanceTime(new Date().getTime(), TimeUnit.MILLISECONDS);
List list = new ArrayList();
ksession.setGlobal("list", list);
ksession.insert(new Foo(null, null));
ksession.insert(new Pet(null));
FactA fact1 = new FactA();
fact1.setField1("f1");
fact1.setField2(250);
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());
assertEquals(fact1, list.get(0));
timeService.advanceTime(300, TimeUnit.MILLISECONDS);
ksession.fireAllRules();
assertEquals(2, list.size());
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());
assertEquals(fact3, list.get(2));
timeService.advanceTime(1000, TimeUnit.MILLISECONDS);
ksession.fireAllRules();
assertEquals(4, list.size());
assertEquals(fact3, list.get(3));
timeService.advanceTime(1000, TimeUnit.MILLISECONDS);
ksession.fireAllRules();
// did not change, repeat-limit kicked in
assertEquals(4, list.size());
}
use of org.drools.compiler.FactA in project drools by kiegroup.
the class ExecutionFlowControlTest method testSalienceExpressionWithOr.
@Test
public void testSalienceExpressionWithOr() throws Exception {
String text = "package org.kie.test\n" + "global java.util.List list\n" + "import " + FactA.class.getCanonicalName() + "\n" + "import " + Foo.class.getCanonicalName() + "\n" + "import " + Pet.class.getCanonicalName() + "\n" + "rule r1 salience (f1.field2)\n" + "when\n" + " foo: Foo()\n" + " ( Pet() and f1 : FactA( field1 == 'f1') ) or \n" + " f1 : FactA(field1 == 'f2') \n" + "then\n" + " list.add( f1 );\n" + " foo.setId( 'xxx' );\n" + "end\n" + "\n";
KieBase kbase = loadKnowledgeBaseFromString(text);
KieSession ksession = kbase.newKieSession();
List list = new ArrayList();
ksession.setGlobal("list", list);
ksession.insert(new Foo(null, null));
ksession.insert(new Pet(null));
FactA fact1 = new FactA();
fact1.setField1("f1");
fact1.setField2(10);
FactA fact2 = new FactA();
fact2.setField1("f1");
fact2.setField2(30);
FactA fact3 = new FactA();
fact3.setField1("f2");
fact3.setField2(20);
ksession.insert(fact1);
ksession.insert(fact2);
ksession.insert(fact3);
ksession.fireAllRules();
System.out.println(list);
assertEquals(3, list.size());
assertEquals(fact2, list.get(0));
assertEquals(fact3, list.get(1));
assertEquals(fact1, list.get(2));
}
use of org.drools.compiler.FactA in project drools by kiegroup.
the class FirstOrderLogicTest method testOrWithVariableResolution2.
// JBRULES-2526
@Test
public void testOrWithVariableResolution2() throws Exception {
// KieBase kbase = loadKnowledgeBase( "test_OrCEFollowedByMultipleEval.drl");
// KieSession workingMemory = createKnowledgeSession(kbase);
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("test_OrCEFollowedByMultipleEval2.drl", FirstOrderLogicTest.class), ResourceType.DRL);
assertFalse(kbuilder.getErrors().toString(), kbuilder.hasErrors());
final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
final KieSession ksession = createKnowledgeSession(kbase);
final AgendaEventListener al = mock(AgendaEventListener.class);
ksession.addEventListener(al);
ksession.insert(new FactA("a"));
ksession.insert(new FactB("b"));
ksession.insert(new FactC("c"));
ksession.fireAllRules();
verify(al, times(8)).afterMatchFired(any(AfterMatchFiredEvent.class));
}
use of org.drools.compiler.FactA in project drools by kiegroup.
the class DynamicRulesTest method testDynamicRules2.
@Test(timeout = 10000)
public void testDynamicRules2() throws Exception {
InternalKnowledgeBase kbase = (InternalKnowledgeBase) loadKnowledgeBase();
KieSession session = createKnowledgeSession(kbase);
// Assert some simple facts
final FactA a = new FactA("hello", new Integer(1), new Float(3.14));
final FactB b = new FactB("hello", new Integer(2), new Float(6.28));
session.insert(a);
session.insert(b);
Collection<KiePackage> kpkgs = SerializationHelper.serializeObject(loadKnowledgePackages("test_DynamicRules2.drl"));
kbase.addPackages(kpkgs);
kbase = SerializationHelper.serializeObject(kbase);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, true);
session.fireAllRules();
}
use of org.drools.compiler.FactA in project drools by kiegroup.
the class JBRULESTest method testJBRules2369.
@Test
public void testJBRules2369() {
final KieBase kbase = loadKnowledgeBase("test_JBRules2369.drl");
final KieSession ksession = createKnowledgeSession(kbase);
final List<String> results = new ArrayList<String>();
ksession.setGlobal("results", results);
final FactA a = new FactA();
final FactB b = new FactB(Integer.valueOf(0));
final FactHandle aHandle = ksession.insert(a);
final FactHandle bHandle = ksession.insert(b);
ksession.fireAllRules();
assertEquals(1, results.size());
ksession.update(aHandle, a);
ksession.fireAllRules();
assertEquals(2, results.size());
}
Aggregations