package org.drools.informer.presentation; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.informer.MultipleChoiceQuestion; import org.drools.informer.Note; import org.drools.io.ResourceFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.ConsequenceException; import org.drools.runtime.rule.QueryResults; import org.drools.runtime.rule.Variable; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.PrintStream; import java.util.Arrays; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertFalse; public class GUIAdapterTest { private KnowledgeBase knowledgeBase; private static final Logger logger = LoggerFactory.getLogger( GUIAdapterTest.class ); @Before public void setUp() throws Exception { KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); knowledgeBuilder.add(ResourceFactory.newClassPathResource( "org/drools/informer/informer-changeset.xml" ), ResourceType.CHANGE_SET); knowledgeBuilder.add(ResourceFactory.newClassPathResource( "org/drools/informer/dynamicMCQ_test.drl" ), ResourceType.DRL); if (knowledgeBuilder.hasErrors()) { System.out.println( knowledgeBuilder.getErrors().toString() ); logger.debug( Arrays.toString( knowledgeBuilder.getErrors().toArray() ) ); } assertFalse(knowledgeBuilder.hasErrors()); knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages()); } @Test public void testUpdateMCQ() { MultipleChoiceQuestion mcq; StatefulKnowledgeSession knowledgeSession = knowledgeBase.newStatefulKnowledgeSession(); knowledgeSession.fireAllRules(); mcq = getMCQ( knowledgeSession, "kwestion", "id1" ); assertEquals( 1, mcq.getNumOfPossibleAnswers() ); assertEquals( "OldValue", mcq.getPossibleAnswers()[0].getValue() ); knowledgeSession.insert( "change" ); knowledgeSession.fireAllRules(); mcq = getMCQ( knowledgeSession, "kwestion", "id1" ); assertEquals( 2, mcq.getNumOfPossibleAnswers() ); assertEquals( "NewValue1", mcq.getPossibleAnswers()[0].getValue() ); assertEquals( "NewValue2", mcq.getPossibleAnswers()[1].getValue() ); report(knowledgeSession, System.err); knowledgeSession.dispose(); } private MultipleChoiceQuestion getMCQ( StatefulKnowledgeSession knowledgeSession, String qid, String sid ) { QueryResults qr = knowledgeSession.getQueryResults( "getItem", qid, sid, Variable.v ); assertEquals( 1, qr.size() ); Object x = qr.iterator().next().get( "$item" ); assertTrue( x instanceof MultipleChoiceQuestion ); return (MultipleChoiceQuestion) x; } private void report( StatefulKnowledgeSession knowledgeSession, PrintStream out ) { out.println( "---------------------------------------------------" ); out.println( knowledgeSession.getObjects().size() ); out.println( "---------------------------------------------------" ); for ( Object o : knowledgeSession.getObjects() ) { out.println( "\t" + o ); } out.println( "---------------------------------------------------" ); } }