Skip to content

Commit

Permalink
JBRULES-3354: fixing descr builder API
Browse files Browse the repository at this point in the history
  • Loading branch information
etirelli committed Jan 19, 2012
1 parent 3d9c7b2 commit fa37381
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 1 deletion.
Expand Up @@ -42,7 +42,7 @@ public interface PatternDescrBuilder<P extends DescrBuilder<?, ?>>
public PatternDescrBuilder<P> constraint( String constraint, boolean positional );
public PatternDescrBuilder<P> bind( String var, String target, boolean isUnification );

public SourceDescrBuilder<?> from();
public SourceDescrBuilder<PatternDescrBuilder<P>> from();

public BehaviorDescrBuilder<PatternDescrBuilder<P>> behavior();

Expand Down
Expand Up @@ -35,6 +35,7 @@
import org.drools.lang.descr.AttributeDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;
import org.junit.Test;

/**
Expand Down Expand Up @@ -247,6 +248,70 @@ public void testDeclareEntryPoint() throws InstantiationException,

}

@Test
public void testRule() throws InstantiationException,
IllegalAccessException {
PackageDescr pkg = DescrFactory.newPackage()
.name( "org.drools" )
.newRule().name( "r1" )
.lhs()
.and()
.or()
.pattern( "StockTick" ).constraint( "price > 100" ).end()
.pattern( "StockTick" ).constraint( "price < 10" ).end()
.end()
.pattern("StockTick").constraint( "company == \"RHT\"" ).end()
.end()
.end()
.rhs( " System.out.println(\"foo\");\n" )
.end()
.getDescr();

KnowledgePackage kpkg = compilePkgDescr( pkg );
assertEquals( "org.drools",
kpkg.getName() );

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( Collections.singletonList( kpkg ) );

StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ksession.insert( new StockTick(1, "RHT", 80, 1 ) );
int rules = ksession.fireAllRules();
assertEquals( 0, rules );

ksession = kbase.newStatefulKnowledgeSession();
ksession.insert( new StockTick(2, "RHT", 150, 1 ) );
rules = ksession.fireAllRules();
assertEquals( 1, rules );
}

@Test
public void testFromEntryPoint() throws InstantiationException,
IllegalAccessException {
PackageDescr pkg = DescrFactory
.newPackage().name("org.drools")
.newRule().name("from rule")
.lhs()
.pattern("String").id("s", false).from().entryPoint("EventStream").end()
.end()
.rhs("//System.out.println(s);")
.end().getDescr();

KnowledgePackage kpkg = compilePkgDescr( pkg );
assertEquals( "org.drools",
kpkg.getName() );

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( Collections.singletonList( kpkg ) );

StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
WorkingMemoryEntryPoint ep = ksession.getWorkingMemoryEntryPoint( "EventStream" );
ep.insert( "Hello World!" );
int rules = ksession.fireAllRules();
assertEquals( 1, rules );

}

private KnowledgePackage compilePkgDescr( PackageDescr pkg ) {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newDescrResource( pkg ),
Expand Down

0 comments on commit fa37381

Please sign in to comment.