assertNotNull( in ); builder.addPackage( new PackageDescr( "com.sample" ) );
@Test public void testRuleFlow() throws Exception { InputStream in = this.getClass().getResourceAsStream( "/org/jbpm/integrationtests/ruleflow.rfm" ); assertNotNull( in ); builder.addPackage( new PackageDescr( "com.sample" ) ); builder.addRuleFlow( new InputStreamReader( in ) ); InternalKnowledgePackage pkg = builder.getPackage("com.sample"); assertNotNull( pkg ); Map<String, Process> flows = pkg.getRuleFlows(); assertNotNull( flows ); assertEquals( 1, flows.size() ); assertTrue( flows.containsKey( "0" ) ); Process p = (Process) flows.get( "0" ); assertTrue( p instanceof WorkflowProcessImpl ); //now serialization InternalKnowledgePackage pkg2 = (InternalKnowledgePackage) DroolsStreamUtils.streamIn( DroolsStreamUtils.streamOut( pkg ) ); assertNotNull( pkg2 ); flows = pkg2.getRuleFlows(); assertNotNull( flows ); assertEquals( 1, flows.size() ); assertTrue( flows.containsKey( "0" ) ); p = (Process) flows.get( "0" ); assertTrue( p instanceof WorkflowProcessImpl ); }
PackageRegistry pkgRegistry = this.knowledgeBuilder.getOrCreatePackageRegistry(new PackageDescr(process.getPackageName())); if (pkgRegistry != null) { InternalKnowledgePackage p = pkgRegistry.getPackage();
@Test public void testPackageMerge() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); try { builder.addPackage( new PackageDescr( "org.drools" ) ); builder.addPackageFromDrl( new StringReader( "package org.drools\n" + "function boolean testIt() {\n" + " return true;\n" + "}\n" ) ); } catch ( RuntimeException e ) { fail( "Should not raise any exception: " + e.getMessage() ); } }
@Test @Ignore public void testNoPackageName() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); try { builder.addPackage( new PackageDescr( null ) ); fail( "should have errored here." ); } catch ( final RuntimeException e ) { assertNotNull( e.getMessage() ); } try { builder.addPackage( new PackageDescr( "" ) ); fail( "should have errored here." ); } catch ( final RuntimeException e ) { assertNotNull( e.getMessage() ); } builder.addPackageFromDrl( new StringReader( "package foo" ) ); builder.addPackageFromDrl( new StringReader( "rule x then end" ) ); }
@Test public void testSerialization() { PackageDescrBuilder builder = DescrFactory.newPackage().name( "foo" ); String className = Person.class.getName(); builder.newImport().target(className).end(); PackageDescr descr = builder.getDescr(); ImportDescr importDescr = new ImportDescr(className); ImportDescr badImportDescr = new ImportDescr(null); assertTrue(descr.getImports().contains(importDescr)); try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(baos); descr.writeExternal(out); ObjectInput in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); PackageDescr newDescr = new PackageDescr(); newDescr.readExternal(in); assertFalse(newDescr.getImports().contains(badImportDescr)); assertTrue(newDescr.getImports().contains(importDescr)); } catch ( IOException ioe ) { fail( ioe.getMessage() ); } catch ( ClassNotFoundException cnfe ) { fail( cnfe.getMessage() ); } }
@Test public void testEvalMethodCompare() { final KnowledgeBuilderImpl builder1 = new KnowledgeBuilderImpl(); final PackageDescr packageDescr1 = new PackageDescr( "package1" ); createEvalRule( packageDescr1, "1==1" ); builder1.addPackage( packageDescr1 ); final EvalCondition eval1 = (EvalCondition) ((RuleImpl)builder1.getPackage("package1").getRules().iterator().next()).getLhs().getChildren().get( 0 ); final KnowledgeBuilderImpl builder2 = new KnowledgeBuilderImpl(); final PackageDescr packageDescr2 = new PackageDescr( "package2" ); createEvalRule( packageDescr2, "1==1" ); builder2.addPackage( packageDescr2 ); final EvalCondition eval2 = (EvalCondition) ((RuleImpl)builder2.getPackage("package2").getRules().iterator().next()).getLhs().getChildren().get( 0 ); final KnowledgeBuilderImpl builder3 = new KnowledgeBuilderImpl(); final PackageDescr packageDescr3 = new PackageDescr( "package3" ); createEvalRule( packageDescr3, "1==3" ); builder3.addPackage( packageDescr3 ); final EvalCondition eval3 = (EvalCondition) ((RuleImpl)builder3.getPackage("package3").getRules().iterator().next()).getLhs().getChildren().get( 0 ); assertEquals( eval1, eval2 ); assertFalse( eval1.equals( eval3 ) ); assertFalse( eval2.equals( eval3 ) ); }
@Test public void testAttributeOverriding() { PackageDescr desc = new PackageDescr("foo"); AttributeDescr at1 = new AttributeDescr("foo", "bar"); AttributeDescr at2 = new AttributeDescr("foo2", "default"); desc.addAttribute( at1 ); desc.addAttribute( at2 ); RuleDescr rule = new RuleDescr("abc"); rule.addAttribute( new AttributeDescr("foo", "overridden") ); desc.addRule( rule ); List pkgAts = desc.getAttributes(); assertEquals("bar", ((AttributeDescr)pkgAts.get( 0 )).getValue()); assertEquals("default", ((AttributeDescr)pkgAts.get( 1 )).getValue()); desc.afterRuleAdded( rule ); Map<String, AttributeDescr> ruleAts = rule.getAttributes(); assertEquals("overridden", ((AttributeDescr)ruleAts.get( "foo" )).getValue()); assertEquals("default", ((AttributeDescr)ruleAts.get( "foo2" )).getValue()); }
private PackageDescr createBasicPackageWithOneRule(int line, int col) { PackageDescr packageDescr = new PackageDescr( "p1" ); RuleDescr ruleDescr = new RuleDescr( "rule-1" ); ruleDescr.setLocation( line, col ); packageDescr.addRule( ruleDescr ); AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", null ) ); patternDescr.addConstraint( literalDescr ); ruleDescr.setConsequence( "" ); return packageDescr; }
private void createLiteralRule( final BaseDescr descr ) { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Primitives.class.getName() ); lhs.addDescr( pattern ); pattern.addConstraint( descr ); ruleDescr.setConsequence( "" ); builder.addPackage( packageDescr ); assertLength( 0, builder.getErrors().getErrors() ); }
pkgBuilder.addPackage( new PackageDescr( "org.drools" ) ); final KnowledgeBuilderConfigurationImpl conf = pkgBuilder.getBuilderConfiguration(); PackageRegistry pkgReg = pkgBuilder.getPackageRegistry( "org.drools" );
@Test public void testLiteral() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); pattern.addConstraint( new ExprConstraintDescr( "type == 'stilton'" ) ); ruleDescr.setConsequence( "update(stilton);" ); builder.addPackage( packageDescr ); assertLength( 0, builder.getErrors().getErrors() ); }
@Test public void testTypeDeclaration() throws Exception { PackageDescr pkgDescr = new PackageDescr( "org.drools.compiler" ); TypeDeclarationDescr typeDescr = new TypeDeclarationDescr( "StockTick" ); typeDescr.addAnnotation( Role.class.getCanonicalName(), "Event" ); typeDescr.addAnnotation( TypeSafe.class.getCanonicalName(), "true" ); pkgDescr.addTypeDeclaration( typeDescr ); KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); builder.addPackage( pkgDescr ); if ( builder.hasErrors() ) { fail( builder.getErrors().toString() ); } InternalKnowledgePackage pkg = builder.getPackage(pkgDescr.getName()); assertEquals( 1, pkg.getTypeDeclarations().size() ); TypeDeclaration type = pkg.getTypeDeclaration( "StockTick" ); assertTrue( type.isTypesafe() ); assertEquals( Role.Type.EVENT, type.getRole() ); assertEquals( StockTick.class, type.getTypeClass() ); }
@Test public void testInvalidDialect() throws Exception { final PackageDescr pkgDescr = new PackageDescr( "org.drools" ); final RuleDescr ruleDescr = new RuleDescr( "Test Rule" ); ruleDescr.addAttribute( new AttributeDescr( "dialect", "mvl" ) ); ruleDescr.setConsequence( "" ); pkgDescr.addRule( ruleDescr ); final KnowledgeBuilderImpl kBuilder = new KnowledgeBuilderImpl(); kBuilder.addPackage(pkgDescr); assertFalse(kBuilder.getErrors().toString(), kBuilder.getErrors().isEmpty()); }
private RuleImpl createRule( final ConditionalElementDescr ceDescr, final KnowledgeBuilderImpl builder, final String consequence ) throws Exception { final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); lhs.addDescr( (BaseDescr) ceDescr ); final PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); patternDescr.addConstraint( new ExprConstraintDescr( "type == \"stilton\" ") ); ceDescr.addDescr( patternDescr ); ruleDescr.setConsequence( consequence ); builder.addPackage( packageDescr ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); assertEquals( "rule-1", rule.getName() ); return rule; }
@Test public void testNull() { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); final FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", null ) ); patternDescr.addConstraint( literalDescr ); ruleDescr.setConsequence( "" ); builder.addPackage( packageDescr ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); assertLength( 0, builder.getErrors().getErrors() ); }
@Test @Ignore // TODO we now allow bindings on declarations, so update the test for this public void testDuplicateDeclaration() { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern1 = new PatternDescr( Cheese.class.getName() ); lhs.addDescr( pattern1 ); final BindingDescr fieldBindingDescr = new BindingDescr( "$type", "type" ); final FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", "stilton" ) ); pattern1.addConstraint( fieldBindingDescr ); pattern1.addConstraint( literalDescr ); final PatternDescr pattern2 = new PatternDescr( Cheese.class.getName() ); lhs.addDescr( pattern2 ); pattern2.addConstraint( fieldBindingDescr ); ruleDescr.setConsequence( "update(stilton);" ); builder.addPackage( packageDescr ); assertLength( 2, builder.getErrors().getErrors() ); }
@Test public void testTypeDeclarationWithFieldMetadata() throws Exception { PackageDescr pkgDescr = new PackageDescr( "org.drools.compiler.test" ); TypeDeclarationDescr typeDescr = new TypeDeclarationDescr( "TypeWithFieldMeta" ); TypeFieldDescr f1 = new TypeFieldDescr( "field", new PatternDescr( "String" ) ); f1.addAnnotation("custom", null); typeDescr.addField( f1 ); pkgDescr.addTypeDeclaration( typeDescr ); KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); builder.addPackage(pkgDescr); assertFalse(builder.hasErrors()); InternalKnowledgePackage bp = builder.getPackage(pkgDescr.getName()); final FactType factType = bp.getFactType("org.drools.compiler.test.TypeWithFieldMeta"); assertNotNull( factType ); final FactField field = factType.getField( "field" ); assertNotNull( field ); final Map<String, Object> fieldMetaData = field.getMetaData(); assertNotNull("No field-level custom metadata got compiled", fieldMetaData); assertTrue("Field metadata does not include expected value", fieldMetaData.containsKey("custom")); }
@Test public void testPredicate() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); final BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); final BindingDescr fieldBindingDescr2 = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr2 ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); final ExprConstraintDescr predicate = new ExprConstraintDescr( "eval(( ( Integer )map.get( new Integer(x) )).intValue() == y)" ); pattern.addConstraint( predicate ); ruleDescr.setConsequence( "update(stilton);" ); builder.addPackage( packageDescr ); assertLength( 0, builder.getErrors().getErrors() ); }
@Test public void testErrors() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); fieldBindingDescr = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); pattern.addConstraint( new ExprConstraintDescr("price == x") ); // There is no m this should produce errors. ruleDescr.setConsequence( "update(m);" ); builder.addPackage( packageDescr ); assertTrue( builder.getErrors().getErrors().length > 0 ); }