package org.drools.compiler.xml.rules; import java.io.InputStreamReader; import java.util.List; import junit.framework.TestCase; import org.drools.RuleBase; import org.drools.RuleBaseConfiguration; import org.drools.RuleBaseFactory; import org.drools.compiler.PackageBuilderConfiguration; import org.drools.compiler.xml.XmlPackageReader; import org.drools.lang.descr.AccessorDescr; import org.drools.lang.descr.AccumulateDescr; import org.drools.lang.descr.AndDescr; import org.drools.lang.descr.AttributeDescr; import org.drools.lang.descr.CollectDescr; import org.drools.lang.descr.EvalDescr; import org.drools.lang.descr.ExistsDescr; import org.drools.lang.descr.FieldBindingDescr; import org.drools.lang.descr.FieldConstraintDescr; import org.drools.lang.descr.ForallDescr; import org.drools.lang.descr.FromDescr; import org.drools.lang.descr.FunctionDescr; import org.drools.lang.descr.FunctionImportDescr; import org.drools.lang.descr.GlobalDescr; import org.drools.lang.descr.ImportDescr; import org.drools.lang.descr.LiteralRestrictionDescr; import org.drools.lang.descr.NotDescr; import org.drools.lang.descr.OrDescr; import org.drools.lang.descr.PackageDescr; import org.drools.lang.descr.PatternDescr; import org.drools.lang.descr.PredicateDescr; import org.drools.lang.descr.QueryDescr; import org.drools.lang.descr.ReturnValueRestrictionDescr; import org.drools.lang.descr.RuleDescr; import org.drools.lang.descr.VariableRestrictionDescr; public class XmlPackageReaderTest extends TestCase { protected RuleBase getRuleBase() throws Exception { return RuleBaseFactory.newRuleBase( RuleBase.RETEOO, null ); } protected RuleBase getRuleBase(final RuleBaseConfiguration config) throws Exception { return RuleBaseFactory.newRuleBase( RuleBase.RETEOO, config ); } public void testParseFrom() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFrom.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); PatternDescr patterndescr = (PatternDescr) obj.getLhs().getDescrs().get( 0 ); FromDescr from = (FromDescr) patterndescr.getSource(); AccessorDescr accessordescriptor = (AccessorDescr) from.getDataSource(); assertEquals( accessordescriptor.toString().trim(), "cheesery.getCheeses(i+4)" ); assertEquals( patterndescr.getObjectType(), "Cheese" ); assertEquals( patterndescr.getIdentifier(), "cheese" ); } public void testAccumulate() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseAccumulate.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); Object patternobj = obj.getLhs().getDescrs().get( 0 ); assertTrue( patternobj instanceof PatternDescr ); final PatternDescr patterncheese = (PatternDescr) patternobj; assertEquals( patterncheese.getIdentifier(), "cheese" ); assertEquals( patterncheese.getObjectType(), "Cheese" ); AccumulateDescr accumulatedescr = (AccumulateDescr) patterncheese.getSource(); assertEquals( "total += $cheese.getPrice();", accumulatedescr.getActionCode() ); assertEquals( "int total = 0;", accumulatedescr.getInitCode() ); assertEquals( "new Integer( total ) );", accumulatedescr.getResultCode() ); patternobj = obj.getLhs().getDescrs().get( 1 ); assertTrue( patternobj instanceof PatternDescr ); final PatternDescr patternmax = (PatternDescr) patternobj; assertEquals( patternmax.getIdentifier(), "max" ); assertEquals( patternmax.getObjectType(), "Number" ); accumulatedescr = (AccumulateDescr) patternmax.getSource(); assertTrue( accumulatedescr.isExternalFunction() ); assertEquals( "max", accumulatedescr.getFunctionIdentifier() ); assertNull( accumulatedescr.getInitCode() ); assertNull( accumulatedescr.getActionCode() ); assertNull( accumulatedescr.getResultCode() ); assertNull( accumulatedescr.getReverseCode()); } public void testAccumulateMultiPattern() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseAccumulate.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 1 ); Object patternobj = obj.getLhs().getDescrs().get( 0 ); assertTrue( patternobj instanceof PatternDescr ); final PatternDescr patterncheese = (PatternDescr) patternobj; assertEquals( patterncheese.getIdentifier(), "cheese" ); assertEquals( patterncheese.getObjectType(), "Cheese" ); AccumulateDescr accumulatedescr = (AccumulateDescr) patterncheese.getSource(); assertEquals( "total += $cheese.getPrice();", accumulatedescr.getActionCode() ); assertEquals( "int total = 0;", accumulatedescr.getInitCode() ); assertEquals( "new Integer( total ) );", accumulatedescr.getResultCode() ); AndDescr anddescr = (AndDescr) accumulatedescr.getInput(); List descrlist = anddescr.getDescrs(); PatternDescr[] listpattern = (PatternDescr[]) descrlist.toArray(new PatternDescr[descrlist.size()]); assertEquals(listpattern[0].getObjectType(), "Milk"); assertEquals(listpattern[1].getObjectType(), "Cup"); } public void testParseForall() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseForall.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); ForallDescr forall = (ForallDescr) obj.getLhs().getDescrs().get( 0 ); List forallPaterns = forall.getDescrs(); PatternDescr pattarnState = (PatternDescr) forallPaterns.get( 0 ); PatternDescr personState = (PatternDescr) forallPaterns.get( 1 ); PatternDescr cheeseState = (PatternDescr) forallPaterns.get( 2 ); assertEquals( pattarnState.getObjectType(), "State" ); assertEquals( personState.getObjectType(), "Person" ); assertEquals( cheeseState.getObjectType(), "Cheese" ); } public void testParseExists() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseExists.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); Object existdescr = obj.getLhs().getDescrs().get( 0 ); assertTrue( existdescr instanceof ExistsDescr ); Object patternDescriptor = ((ExistsDescr) existdescr).getDescrs().get( 0 ); assertTrue( patternDescriptor instanceof PatternDescr ); assertEquals( ((PatternDescr) patternDescriptor).getObjectType(), "Person" ); Object notDescr = obj.getLhs().getDescrs().get( 1 ); assertEquals( notDescr.getClass().getName(), NotDescr.class.getName() ); existdescr = ((NotDescr) notDescr).getDescrs().get( 0 ); patternDescriptor = ((ExistsDescr) existdescr).getDescrs().get( 0 ); assertTrue( patternDescriptor instanceof PatternDescr ); assertEquals( ((PatternDescr) patternDescriptor).getObjectType(), "Cheese" ); } public void testParseCollect() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseCollect.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); Object objectpattern = obj.getLhs().getDescrs().get( 0 ); assertTrue( objectpattern instanceof PatternDescr ); PatternDescr patterndescr = (PatternDescr) objectpattern; assertEquals( patterndescr.getObjectType(), "Cheese" ); Object collectobj = patterndescr.getSource(); assertTrue( collectobj instanceof CollectDescr ); CollectDescr collectDescr = (CollectDescr) collectobj; PatternDescr inputpattern = collectDescr.getInputPattern(); assertEquals( inputpattern.getObjectType(), "Person" ); Object fieldContraintObject = inputpattern.getConstraint().getDescrs().get( 0 ); assertTrue( fieldContraintObject instanceof FieldConstraintDescr ); FieldConstraintDescr fieldconstraintdescr = (FieldConstraintDescr) fieldContraintObject; assertEquals( fieldconstraintdescr.getFieldName(), "hair" ); Object literal1 = fieldconstraintdescr.getRestrictions().get( 0 ); assertTrue( literal1 instanceof LiteralRestrictionDescr ); LiteralRestrictionDescr literalDesc = (LiteralRestrictionDescr) literal1; assertEquals( literalDesc.getEvaluator(), "==" ); assertEquals( literalDesc.getText(), "pink" ); fieldContraintObject = patterndescr.getConstraint().getDescrs().get( 0 ); assertTrue( fieldContraintObject instanceof FieldConstraintDescr ); fieldconstraintdescr = (FieldConstraintDescr) fieldContraintObject; assertEquals( fieldconstraintdescr.getFieldName(), "type" ); literal1 = fieldconstraintdescr.getRestrictions().get( 0 ); assertTrue( literal1 instanceof LiteralRestrictionDescr ); literalDesc = (LiteralRestrictionDescr) literal1; assertEquals( literalDesc.getEvaluator(), "==" ); assertEquals( literalDesc.getText(), "1" ); } public void testParsePackageName() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParsePackageName.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); } public void testParseImport() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseImport.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); assertEquals( "java.util.HashMap", ((ImportDescr) imports.get( 0 )).getTarget() ); assertEquals( "org.drools.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List functionImport = packageDescr.getFunctionImports(); assertEquals("org.drools.function", ((FunctionImportDescr) functionImport.get( 0 )).getTarget() ); } public void testParseGlobal() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseGlobal.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); assertEquals( "java.util.HashMap", ((ImportDescr) imports.get( 0 )).getTarget() ); assertEquals( "org.drools.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List globals = packageDescr.getGlobals(); assertEquals( 2, globals.size() ); final GlobalDescr x = (GlobalDescr) globals.get( 0 ); final GlobalDescr yada = (GlobalDescr) globals.get( 1 ); assertEquals( "com.sample.X", x.getType() ); assertEquals( "x", x.getIdentifier() ); assertEquals( "com.sample.Yada", yada.getType() ); assertEquals( "yada", yada.getIdentifier() ); } public void testParseFunction() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFunction.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); assertEquals( "java.util.HashMap", ((ImportDescr) imports.get( 0 )).getTarget() ); assertEquals( "org.drools.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List globals = packageDescr.getGlobals(); assertEquals( 2, globals.size() ); final GlobalDescr x = (GlobalDescr) globals.get( 0 ); final GlobalDescr yada = (GlobalDescr) globals.get( 1 ); assertEquals( "com.sample.X", x.getType() ); assertEquals( "x", x.getIdentifier() ); assertEquals( "com.sample.Yada", yada.getType() ); assertEquals( "yada", yada.getIdentifier() ); final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 ); final List names = functionDescr.getParameterNames(); assertEquals( "foo", names.get( 0 ) ); assertEquals( "bada", names.get( 1 ) ); final List types = functionDescr.getParameterTypes(); assertEquals( "Bar", types.get( 0 ) ); assertEquals( "Bing", types.get( 1 ) ); assertEquals( "System.out.println(\"hello world\");", functionDescr.getText().trim() ); } public void testParseRule() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseRule.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); assertEquals( "java.util.HashMap", ((ImportDescr) imports.get( 0 )).getTarget() ); assertEquals( "org.drools.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List globals = packageDescr.getGlobals(); assertEquals( 2, globals.size() ); final GlobalDescr x = (GlobalDescr) globals.get( 0 ); final GlobalDescr yada = (GlobalDescr) globals.get( 1 ); assertEquals( "com.sample.X", x.getType() ); assertEquals( "x", x.getIdentifier() ); assertEquals( "com.sample.Yada", yada.getType() ); assertEquals( "yada", yada.getIdentifier() ); final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 ); final List names = functionDescr.getParameterNames(); assertEquals( "foo", names.get( 0 ) ); assertEquals( "bada", names.get( 1 ) ); final List types = functionDescr.getParameterTypes(); assertEquals( "Bar", types.get( 0 ) ); assertEquals( "Bing", types.get( 1 ) ); assertEquals( "System.out.println(\"hello world\");", functionDescr.getText().trim() ); final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 ); assertEquals( "simple_rule", ruleDescr.getName() ); assertEquals( 4, ruleDescr.getAttributes().size() ); final AttributeDescr attributeDescr = (AttributeDescr) ruleDescr.getAttributes().get( "salience" ); assertEquals( "salience", attributeDescr.getName() ); assertEquals( "10", attributeDescr.getValue() ); final AndDescr lhs = ruleDescr.getLhs(); assertEquals( 7, lhs.getDescrs().size() ); final PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get( 0 ); assertEquals( "Bar", patternDescr.getObjectType() ); final String consequence = (String) ruleDescr.getConsequence(); assertNotNull( consequence ); } public void testParseLhs() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseLhs.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); assertEquals( "java.util.HashMap", ((ImportDescr) imports.get( 0 )).getTarget() ); assertEquals( "org.drools.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List globals = packageDescr.getGlobals(); assertEquals( 2, globals.size() ); final GlobalDescr x = (GlobalDescr) globals.get( 0 ); final GlobalDescr yada = (GlobalDescr) globals.get( 1 ); assertEquals( "com.sample.X", x.getType() ); assertEquals( "x", x.getIdentifier() ); assertEquals( "com.sample.Yada", yada.getType() ); assertEquals( "yada", yada.getIdentifier() ); final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 ); final List names = functionDescr.getParameterNames(); assertEquals( "foo", names.get( 0 ) ); assertEquals( "bada", names.get( 1 ) ); final List types = functionDescr.getParameterTypes(); assertEquals( "Bar", types.get( 0 ) ); assertEquals( "Bing", types.get( 1 ) ); assertEquals( "System.out.println(\"hello world\");", functionDescr.getText().trim() ); final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 ); assertEquals( "my rule", ruleDescr.getName() ); final AndDescr lhsDescr = ruleDescr.getLhs(); AndDescr andDescr = (AndDescr) lhsDescr.getDescrs().get( 0 ); OrDescr orDescr = (OrDescr) lhsDescr.getDescrs().get( 1 ); final PatternDescr pattern1 = (PatternDescr) lhsDescr.getDescrs().get( 2 ); assertNull( pattern1.getIdentifier() ); assertEquals( "Foo", pattern1.getObjectType() ); final PatternDescr pattern2 = (PatternDescr) lhsDescr.getDescrs().get( 3 ); assertEquals( "Bar", pattern2.getObjectType() ); assertEquals( "bar", pattern2.getIdentifier() ); final PatternDescr pattern3 = (PatternDescr) lhsDescr.getDescrs().get( 4 ); //final LiteralDescr literalDescr = (LiteralDescr) pattern3.getDescrs().get( 0 ); final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) pattern3.getDescrs().get( 0 ); final LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 ); assertEquals( "field1", fieldConstraintDescr.getFieldName() ); assertEquals( "==", literalDescr.getEvaluator() ); assertEquals( "value1", literalDescr.getText() ); final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 1 ); assertEquals( "==", returnValueDescr.getEvaluator() ); assertEquals( "1==1", returnValueDescr.getContent() ); final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 2 ); assertEquals( "==", variableDescr.getEvaluator() ); assertEquals( "var1", variableDescr.getIdentifier() ); final PredicateDescr predicateDescr = (PredicateDescr) pattern3.getDescrs().get( 1 ); assertEquals( "1==1", predicateDescr.getContent() ); final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) pattern3.getDescrs().get( 2 ); assertEquals( "field1", fieldBindingDescr.getFieldName() ); assertEquals( "var1", fieldBindingDescr.getIdentifier() ); final NotDescr notDescr = (NotDescr) lhsDescr.getDescrs().get( 5 ); assertEquals( 1, notDescr.getDescrs().size() ); PatternDescr patternDescr = (PatternDescr) notDescr.getDescrs().get( 0 ); assertEquals( "Bar", patternDescr.getObjectType() ); final ExistsDescr existsDescr = (ExistsDescr) lhsDescr.getDescrs().get( 6 ); assertEquals( 1, existsDescr.getDescrs().size() ); patternDescr = (PatternDescr) existsDescr.getDescrs().get( 0 ); assertEquals( "Bar", patternDescr.getObjectType() ); andDescr = (AndDescr) lhsDescr.getDescrs().get( 7 ); assertEquals( 2, andDescr.getDescrs().size() ); orDescr = (OrDescr) andDescr.getDescrs().get( 1 ); patternDescr = (PatternDescr) orDescr.getDescrs().get( 0 ); assertEquals( "Bar", patternDescr.getObjectType() ); patternDescr = (PatternDescr) andDescr.getDescrs().get( 0 ); assertEquals( "Yada", patternDescr.getObjectType() ); orDescr = (OrDescr) lhsDescr.getDescrs().get( 8 ); assertEquals( 2, orDescr.getDescrs().size() ); andDescr = (AndDescr) orDescr.getDescrs().get( 1 ); patternDescr = (PatternDescr) andDescr.getDescrs().get( 0 ); assertEquals( "Foo", patternDescr.getObjectType() ); patternDescr = (PatternDescr) orDescr.getDescrs().get( 0 ); assertEquals( "Zaa", patternDescr.getObjectType() ); final EvalDescr evalDescr = (EvalDescr) lhsDescr.getDescrs().get( 9 ); assertEquals( "1==1", evalDescr.getContent() ); } public void testParseRhs() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseRhs.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); assertEquals( "java.util.HashMap", ((ImportDescr) imports.get( 0 )).getTarget() ); assertEquals( "org.drools.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List globals = packageDescr.getGlobals(); assertEquals( 2, globals.size() ); final GlobalDescr x = (GlobalDescr) globals.get( 0 ); final GlobalDescr yada = (GlobalDescr) globals.get( 1 ); assertEquals( "com.sample.X", x.getType() ); assertEquals( "x", x.getIdentifier() ); assertEquals( "com.sample.Yada", yada.getType() ); assertEquals( "yada", yada.getIdentifier() ); final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 ); final List names = functionDescr.getParameterNames(); assertEquals( "foo", names.get( 0 ) ); assertEquals( "bada", names.get( 1 ) ); final List types = functionDescr.getParameterTypes(); assertEquals( "Bar", types.get( 0 ) ); assertEquals( "Bing", types.get( 1 ) ); assertEquals( "System.out.println(\"hello world\");", functionDescr.getText().trim() ); final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 ); assertEquals( "my rule", ruleDescr.getName() ); final String consequence = (String) ruleDescr.getConsequence(); assertNotNull( consequence ); assertEquals( "System.out.println( \"hello\" );", consequence.trim() ); } public void testParseQuery() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseQuery.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); assertEquals( "java.util.HashMap", ((ImportDescr) imports.get( 0 )).getTarget() ); assertEquals( "org.drools.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List globals = packageDescr.getGlobals(); assertEquals( 2, globals.size() ); final GlobalDescr x = (GlobalDescr) globals.get( 0 ); final GlobalDescr yada = (GlobalDescr) globals.get( 1 ); assertEquals( "com.sample.X", x.getType() ); assertEquals( "x", x.getIdentifier() ); assertEquals( "com.sample.Yada", yada.getType() ); assertEquals( "yada", yada.getIdentifier() ); final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 ); final List names = functionDescr.getParameterNames(); assertEquals( "foo", names.get( 0 ) ); assertEquals( "bada", names.get( 1 ) ); final List types = functionDescr.getParameterTypes(); assertEquals( "Bar", types.get( 0 ) ); assertEquals( "Bing", types.get( 1 ) ); assertEquals( "System.out.println(\"hello world\");", functionDescr.getText().trim() ); final QueryDescr queryDescr = (QueryDescr) packageDescr.getRules().get( 0 ); assertEquals( "my query", queryDescr.getName() ); final AndDescr lhs = queryDescr.getLhs(); assertEquals( 1, lhs.getDescrs().size() ); final PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get( 0 ); assertEquals( "Foo", patternDescr.getObjectType() ); } private XmlPackageReader getXmReader() { PackageBuilderConfiguration conf = new PackageBuilderConfiguration(); return new XmlPackageReader( conf.getSemanticModules() ); } }