package org.drools.integrationtests;
import java.util.ArrayList;
import java.util.List;
import org.drools.Bin;
import org.drools.BinTask;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.builder.conf.ProcessStringEscapesOption;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import junit.framework.TestCase;
public class ProcessEscapesMvelTest extends TestCase {
public void testProcessStringEscapesOptionOn() throws Exception {
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List list = new ArrayList();
ksession.setGlobal( "list", list );
BinTask bt = new BinTask();
Bin b = new Bin();
b.setName("aa123bb");
bt.setBin(b);
ksession.insert(b);
ksession.insert(bt);
ksession.fireAllRules();
assertEquals(1, list.size());
}
public void testProcessStringEscapesOptionOff() throws Exception {
KnowledgeBase kbase = readKnowledgeBaseWithEscapesOff();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List list = new ArrayList();
ksession.setGlobal( "list", list );
BinTask bt = new BinTask();
Bin b = new Bin();
b.setName("aa123bb");
bt.setBin(b);
ksession.insert(bt);
ksession.insert(b);
ksession.fireAllRules();
assertEquals(1, list.size());
}
private KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "processescapes.drl" ) ),
ResourceType.DRL );
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error: errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge." + errors.toArray());
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
private KnowledgeBase readKnowledgeBaseWithEscapesOff() throws Exception {
KnowledgeBuilderConfiguration kbconf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
kbconf.setProperty("drools.parser.processStringEscapes", "false");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbconf);
//kbuilder.add(ResourceFactory.newClassPathResource("processescapes.drl"), ResourceType.DRL);
kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "processescapesoff.drl" ) ),
ResourceType.DRL );
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error: errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge." + errors.toArray());
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
}