# HG changeset patch # User Chris DeLashmutt <cdelashmutt@spectrumk12.com> # Date 1301370273 14400 # Node ID fb37bb94d9c3b576864da6da90c223cfcf9176cd # Parent 96b1916f0b549840bfb94abcba923316ca71d0fb Adding test case for failing serialize/deserialize of Collect after OR CE. diff -r 96b1916f0b54 -r fb37bb94d9c3 drools-compiler/src/test/java/org/drools/integrationtests/CollectTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drools-compiler/src/test/java/org/drools/integrationtests/CollectTest.java Mon Mar 28 23:44:33 2011 -0400 @@ -0,0 +1,71 @@ +package org.drools.integrationtests; + +import static org.junit.Assert.assertTrue; + +import java.io.InputStreamReader; +import java.util.ArrayList; + +import org.drools.Cheese; +import org.drools.Cheesery; +import org.drools.RuleBase; +import org.drools.RuleBaseFactory; +import org.drools.StatefulSession; +import org.drools.compiler.PackageBuilder; +import org.drools.rule.Package; +import org.junit.Test; + +public class CollectTest +{ + @Test + public void testCollectAfterOrCE() + throws Exception + { + //Set up facts + final Cheesery bonFromage = new Cheesery(); + bonFromage.addCheese(new Cheese("cheddar")); + bonFromage.addCheese(new Cheese("cheddar")); + + //Test in memory compile of DRL + final PackageBuilder builder = new PackageBuilder(); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_OrCEFollowedByCollect.drl" ) ) ); + Package pkg = builder.getPackage(); + RuleBase ruleBase = getRuleBase(); + + ruleBase.addPackage( pkg ); + + StatefulSession session = ruleBase.newStatefulSession(); + ArrayList<Boolean> results = new ArrayList<Boolean>(); + session.setGlobal("results", results); + + session.insert(bonFromage); + + session.fireAllRules(); + + assertTrue(true == results.get(0)); + + //Serialize and test again + pkg = SerializationHelper.serializeObject(pkg); + + ruleBase = getRuleBase(); + + ruleBase.addPackage( pkg ); + + session = ruleBase.newStatefulSession(); + results = new ArrayList<Boolean>(); + session.setGlobal("results", results); + + session.insert(bonFromage); + + session.fireAllRules(); + + assertTrue(true == results.get(0)); + + } + + private RuleBase getRuleBase() + { + RuleBase ruleBase = RuleBaseFactory.newRuleBase( RuleBase.RETEOO, + null ); + return ruleBase; + } +} diff -r 96b1916f0b54 -r fb37bb94d9c3 drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCEFollowedByCollect.drl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCEFollowedByCollect.drl Mon Mar 28 23:44:33 2011 -0400 @@ -0,0 +1,14 @@ +package org.drools; + +import java.util.ArrayList; + +global java.util.List results; + +rule "collect after or'd evals" + when + $bonFromage : Cheesery() + (eval(true) || eval(true)) + ArrayList( size > 1 ) from collect(Cheese( type == "cheddar") from $bonFromage.cheeses) + then + results.add(true); +end \ No newline at end of file