private void assertHasNoErrors(KnowledgeBuilder kbuilder) { KnowledgeBuilderErrors errors = kbuilder.getErrors(); assertEquals( "Expected no build errors, but got: " + errors.toString(), 0, errors.size() ); }
public void loadPackages( Resource res, ResourceType type ) { kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( res, type ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error : errors) { System.err.println( error ); } throw new IllegalArgumentException( "Could not parse knowledge." ); } }
private KieBase readKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newInputStreamResource(getClass().getResourceAsStream("strevaluator_test.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()); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); return kbase; }
public KieSession genSession(String[] sources, int numerrors) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); for (String source : sources) kbuilder.add( ResourceFactory.newClassPathResource(source, getClass()), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( kbuilder.getErrors().size() > 0 ) { for ( KnowledgeBuilderError error : kbuilder.getErrors() ) { System.err.println( error ); } } assertEquals(numerrors, errors.size() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); return createKnowledgeSession(kbase); } }
@Test public void testDuplicatePropertyNamesInWatchAnnotation() throws Exception { String rule = "package org.drools.compiler.integrationtests\n" + "dialect \"mvel\"\n" + "declare A\n" + " s : String\n" + "end\n" + "declare B\n" + " @propertyReactive\n" + " on : boolean\n" + " s : String\n" + "end\n" + "rule R1\n" + "when\n" + " A($s : s)\n" + " $b : B(s != $s) @watch( s, !s )\n" + "then\n" + " modify($b) { setS($s) }\n" + "end\n" + "rule R2\n" + "when\n" + " $b : B(on == false)\n" + "then\n" + " modify($b) { setOn(true) }\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL ); assertEquals(1, kbuilder.getErrors().size()); }
@Test public void testWrongPropertyNameInWatchAnnotation() throws Exception { String rule = "package org.drools.compiler.integrationtests\n" + "dialect \"mvel\"\n" + "declare A\n" + " s : String\n" + "end\n" + "declare B\n" + " @propertyReactive\n" + " on : boolean\n" + " s : String\n" + "end\n" + "rule R1\n" + "when\n" + " A($s : s)\n" + " $b : B(s != $s) @watch( !s1, on )\n" + "then\n" + " modify($b) { setS($s) }\n" + "end\n" + "rule R2\n" + "when\n" + " $b : B(on == false)\n" + "then\n" + " modify($b) { setOn(true) }\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL ); assertEquals(1, kbuilder.getErrors().size()); }
@Test public void testJBRULES2872() { final String str = "package org.drools.compiler.test\n" + "import org.drools.compiler.FactA\n" + "rule X\n" + "when\n" + " FactA( enumVal == TestEnum.ONE || == TestEnum.TWO )\n" + "then\n" + "end\n"; final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL); assertTrue(kbuilder.hasErrors()); final KnowledgeBuilderErrors errors = kbuilder.getErrors(); assertEquals(1, errors.size()); final KnowledgeBuilderError error = errors.iterator().next(); assertEquals(5, error.getLines()[0]); }
assertEquals( 1, kbuilder.getErrors().size() ); assertTrue( kbuilder.getErrors().iterator().next().toString().contains("Circular") );
err ); assertEquals(0, kbuilder.getErrors().size());
private void checkDSLExpanderTest(KnowledgeBuilder kbuilder) throws IOException, ClassNotFoundException { assertFalse( kbuilder.hasErrors() ); final String err = kbuilder.getErrors().toString(); assertEquals( "", err ); assertEquals( 0, kbuilder.getErrors().size() ); // the compiled package final Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages(); assertEquals( 2, pkgs.size() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( pkgs ); kbase = SerializationHelper.serializeObject(kbase); KieSession session = createKnowledgeSession(kbase); session.insert( new Person( "Bob", "http://foo.bar" ) ); session.insert( new Cheese( "stilton", 42 ) ); final List messages = new ArrayList(); session.setGlobal( "messages", messages ); session.fireAllRules(); assertEquals( 1, messages.size() ); }
@Test @Ignore("antlr cannot parse correctly if the file ends with a comment without a further line break") public void testEmptyDSL() throws Exception { // FIXME etirelli / mic_hat not sure what to do with this? final String DSL = "# This is an empty dsl file."; // gives antlr <EOF> error KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "test_expander.dsl", getClass() ), ResourceType.DSL ); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( DSL) ) , ResourceType.DSLR ); assertFalse( kbuilder.hasErrors() ); // trying to expand Cheese() pattern // Check errors final String err = kbuilder.getErrors().toString(); assertEquals( "", err ); assertEquals( 0, kbuilder.getErrors().size() ); // the compiled package Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages(); assertEquals( 0, pkgs.size() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( pkgs ); kbase = SerializationHelper.serializeObject(kbase); KieSession session = createKnowledgeSession(kbase); pkgs = SerializationHelper.serializeObject(pkgs); assertNull( pkgs ); }
err ); assertEquals( 0, kbuilder.getErrors().size() );
private static KnowledgeBase readKnowledgeBase(ClassLoader loader) throws Exception { KnowledgeBuilderConfiguration kBuilderConfiguration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null, loader); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kBuilderConfiguration); KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, loader); kbuilder.add(ResourceFactory.newFileResource("./rulefiles/testing.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."); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; }
public KnowledgeBase newKBase(URLClassLoader loader) { KnowledgeBuilderConfiguration kbuilderConfig = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null, loader); // Create the agent using the builder configuration KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration(); KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, loader); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig); KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(knowledgeAgentName, kbase, aconf, kbuilderConfig); kbase = kagent.getKnowledgeBase(); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbuilderConfig); addRules(kbuilder); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error : errors) System.err.println(error); throw new IllegalArgumentException("Could not parse knowledge."); } kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; }
private Collection<KiePackage> buildKnowledgePackage(Resource resource, ResourceType resourceType) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( resource, resourceType ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( errors != null && errors.size() > 0 ) { for ( KnowledgeBuilderError error : errors ) { System.err.println( "Error: " + error.getMessage() ); } Assert.fail( "KnowledgeBase did not build" ); } Collection<KiePackage> packages = kbuilder.getKnowledgePackages(); return packages; }
private KieBase readKnowledgeBase( String resource ) throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); DecisionTableConfiguration config = KnowledgeBuilderFactory.newDecisionTableConfiguration(); config.setInputType( DecisionTableInputType.XLS ); kbuilder.add( ResourceFactory.newClassPathResource( resource, getClass() ), ResourceType.DTABLE, config ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( errors.size() > 0 ) { for ( KnowledgeBuilderError error : errors ) { System.err.println( error ); } throw new IllegalArgumentException( "Could not parse knowledge." ); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); return kbase; }
@Test public void annotationErrorTest() { String drl = "package org.drools.compiler.test;\n " + "" + "declare MissingAnnotationBean \n" + " @IgnoreMissingAnnotation1 \n" + "" + " name : String @IgnoreMissingAnnotation2( noProp = 999 ) \n" + " end \n "; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( new ByteArrayResource( drl.getBytes() ), ResourceType.DRL ); assertEquals( 0, kbuilder.getErrors().size() ); String drl2 = "package org.drools.compiler.test;\n " + "" + "import " + AnnotationsTest.Annot.class.getCanonicalName() + "; \n" + "" + "" + "declare MissingAnnotationBean \n" + " @Annot( wrongProp1 = 1 ) \n" + "" + " name : String @Annot( wrongProp2 = 2, wrongProp3 = 3 ) \n" + " end \n "; KnowledgeBuilder kbuilder2 = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder2.add( new ByteArrayResource( drl2.getBytes() ), ResourceType.DRL ); assertEquals( 4, kbuilder2.getErrors().size() ); }
@Test public void testJBRULES2872() { String str = "package org.drools.compiler.test\n" + "import org.drools.compiler.FactA\n" + "rule X\n" + "when\n" + " FactA( enumVal == TestEnum.ONE || == TestEnum.TWO )\n" + "then\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); assertTrue( kbuilder.hasErrors() ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); logger.info( errors.toString() ); assertEquals( 1, errors.size() ); KnowledgeBuilderError error = errors.iterator().next(); assertEquals( 5, error.getLines()[0] ); }
@Test public void testRHSClone() { // JBRULES-3539 String str = "import java.util.Map;\n" + "dialect \"mvel\"\n" + "rule \"RHSClone\"\n" + "when\n" + " Map($valOne : this['keyOne'] !=null)\n" + "then\n" + " System.out.println( $valOne.clone() );\n" + "end\n"; KnowledgeBuilderConfigurationImpl pkgBuilderCfg = new KnowledgeBuilderConfigurationImpl(); MVELDialectConfiguration mvelConf = (MVELDialectConfiguration) pkgBuilderCfg.getDialectConfiguration( "mvel" ); mvelConf.setStrict( false ); mvelConf.setLangLevel( 5 ); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( pkgBuilderCfg ); kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( errors.size() > 0 ) { for ( KnowledgeBuilderError error : errors ) { System.err.println( error ); } fail( "Could not parse knowledge" ); } }