@Test 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() ); }
@Test public void testEval() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "eval_parsing.drl" ); assertEquals( "org.drools.compiler", pkg.getName() ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule1.getLhs().getDescrs().size() ); }
@Test public void testComment() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "comment.drl" ); assertNotNull( pkg ); assertEquals( "foo.bar", pkg.getName() ); }
@Test public void testPackageWithError() throws Exception { final String source = "package 12 foo.bar.baz"; final DrlParser parser = new DrlParser(LanguageLevelOption.DRL6); final PackageDescr pkg = parser.parse( true, new StringReader( source ) ); assertTrue( parser.hasErrors() ); assertEquals( "foo.bar.baz", pkg.getName() ); }
@Test public void testPackage() throws Exception { final String source = "package foo.bar.baz"; final DrlParser parser = new DrlParser(LanguageLevelOption.DRL6); final PackageDescr pkg = parser.parse( new StringReader( source ) ); assertFalse( parser.hasErrors() ); assertEquals( "foo.bar.baz", pkg.getName() ); }
@Test public void testPackageWithError2() throws Exception { final String source = "package 12 12312 231"; final DrlParser parser = new DrlParser(LanguageLevelOption.DRL6); final PackageDescr pkg = parser.parse( true, new StringReader( source ) ); assertTrue( parser.hasErrors() ); assertEquals( "", pkg.getName() ); }
@Test public void testCompatibleRestriction() throws Exception { String source = "package com.sample rule test when Test( ( text == null || text2 matches \"\" ) ) then end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertEquals( "com.sample", pkg.getName() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "test", rule.getName() ); ExprConstraintDescr expr = (ExprConstraintDescr) ((PatternDescr) rule.getLhs().getDescrs().get( 0 )).getDescrs().get( 0 ); assertEquals( "( text == null || text2 matches \"\" )", expr.getText() ); }
@Test 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.compiler.*", ((ImportDescr) imports.get( 1 )).getTarget() ); final List functionImport = packageDescr.getFunctionImports(); assertEquals( "org.drools.function", ((FunctionImportDescr) functionImport.get( 0 )).getTarget() ); }
@Test public void testStringEscapes() throws Exception { String source = "package com.sample rule test when Cheese( type matches \"\\..*\\\\.\" ) then end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertEquals( "com.sample", pkg.getName() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "test", rule.getName() ); assertEquals( 1, rule.getLhs().getDescrs().size() ); PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); AndDescr constraint = (AndDescr) pattern.getConstraint(); assertEquals( 1, constraint.getDescrs().size() ); assertEquals( "type matches \"\\..*\\\\.\"", constraint.getDescrs().get( 0 ).toString() ); }
@Test public void testSimpleConstraint() throws Exception { String source = "package com.sample rule test when Cheese( type == 'stilton', price > 10 ) then end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertEquals( "com.sample", pkg.getName() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "test", rule.getName() ); assertEquals( 1, rule.getLhs().getDescrs().size() ); PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); AndDescr constraint = (AndDescr) pattern.getConstraint(); assertEquals( 2, constraint.getDescrs().size() ); assertEquals( "type == \"stilton\"", constraint.getDescrs().get( 0 ).toString() ); assertEquals( "price > 10", constraint.getDescrs().get( 1 ).toString() ); }
@Test public void testFunctionWithArrays() throws Exception { PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "function_arrays.drl" ); assertEquals( "foo", pkg.getName() ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEqualsIgnoreWhitespace( "yourFunction(new String[3] {\"a\",\"b\",\"c\"});", (String) rule.getConsequence() ); final FunctionDescr func = (FunctionDescr) pkg.getFunctions().get( 0 ); assertEquals( "String[]", func.getReturnType() ); assertEquals( "args[]", func.getParameterNames().get( 0 ) ); assertEquals( "String", func.getParameterTypes().get( 0 ) ); }
@Test public void testSemicolon() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "semicolon.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( "org.drools.compiler", pkg.getName() ); assertEquals( 1, pkg.getGlobals().size() ); assertEquals( 3, pkg.getRules().size() ); final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 2, rule1.getLhs().getDescrs().size() ); final RuleDescr query1 = (RuleDescr) pkg.getRules().get( 1 ); assertEquals( 3, query1.getLhs().getDescrs().size() ); final RuleDescr rule2 = (RuleDescr) pkg.getRules().get( 2 ); assertEquals( 2, rule2.getLhs().getDescrs().size() ); }
@Test public void testCompilationUnit() throws Exception { final String source = "package foo; import com.foo.Bar; import com.foo.Baz;"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( "foo", pkg.getName() ); assertEquals( 2, pkg.getImports().size() ); ImportDescr impdescr = pkg.getImports().get( 0 ); assertEquals( "com.foo.Bar", impdescr.getTarget() ); assertEquals( source.indexOf( "import " + impdescr.getTarget() ), impdescr.getStartCharacter() ); assertEquals( source.indexOf( "import " + impdescr.getTarget() ) + ("import " + impdescr.getTarget()).length(), impdescr.getEndCharacter() ); impdescr = pkg.getImports().get( 1 ); assertEquals( "com.foo.Baz", impdescr.getTarget() ); assertEquals( source.indexOf( "import " + impdescr.getTarget() ), impdescr.getStartCharacter() ); assertEquals( source.indexOf( "import " + impdescr.getTarget() ) + ("import " + impdescr.getTarget()).length(), impdescr.getEndCharacter() ); }
@Test public void testEntryPointDeclaration() throws Exception { final String text = "package org.drools\n" + "declare entry-point eventStream\n" + " @source(\"jndi://queues/events\")\n" + " @foo( true )\n" + "end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", text ); assertEquals( "org.drools", pkg.getName() ); assertEquals( 1, pkg.getEntryPointDeclarations().size() ); EntryPointDeclarationDescr epd = pkg.getEntryPointDeclarations().iterator().next(); assertEquals( "eventStream", epd.getEntryPointId() ); assertEquals( 2, epd.getAnnotations().size() ); assertEquals( "\"jndi://queues/events\"", epd.getAnnotation( "source" ).getValue() ); assertEquals( "true", epd.getAnnotation( "foo" ).getValue() ); }
@Test public void testWindowUsage() throws Exception { final String text = "package org.drools\n" + "rule X\n" + "when\n" + " StockTick() from window Y\n" + "then\n" + "end\n"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", text ); assertEquals( "org.drools", pkg.getName() ); assertEquals( 1, pkg.getRules().size() ); RuleDescr rd = pkg.getRules().get(0); assertEquals( "X", rd.getName() ); assertEquals( 1, rd.getLhs().getDescrs().size() ); PatternDescr pd = (PatternDescr) rd.getLhs().getDescrs().get(0); assertNotNull( pd ); assertEquals( "StockTick", pd.getObjectType() ); assertEquals( "Y", pd.getSource().getText() ); }
@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() ); }
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 public void testPackage() { PackageDescr pkg = DescrFactory.newPackage() .name( "org.drools" ) .attribute( "dialect" ).value( "mvel" ).end() .getDescr(); assertEquals( "org.drools", pkg.getName() ); assertEquals( "mvel", pkg.getAttribute( "dialect" ).getValue() ); assertNull( pkg.getAttribute( "salience" ) ); KiePackage kpkg = compilePkgDescr( pkg ); assertEquals( "org.drools", kpkg.getName() ); }
@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")); }