/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.guvnor.server.builder;
/*
* Copyright 2005 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.jar.JarInputStream;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.dsl.DSLTokenizedMappingFile;
import org.drools.rule.Package;
import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
import org.drools.builder.conf.DefaultPackageNameOption;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class BRMSPackageBuilderTest {
// Added this empty test so this class doesn't fail
public void testEmpty() {
}
@Before
public void setUp() {
System.getProperties().remove( "drools.dialect.java.compiler" );
}
@After
public void tearDown() {
System.getProperties().remove( "drools.dialect.java.compiler" );
}
// @FIXME rule "abc" is null and the Packge has no namespace
@Test
public void testPartialPackage() throws Exception {
JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
Properties ps = new Properties();
ps.setProperty( DefaultPackageNameOption.PROPERTY_NAME, "foo.bar" );
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l, ps );
//PackageDescr pc = new PackageDescr("foo.bar");
//builder.addPackage( pc );
String header = "import com.billasurf.Person\n import com.billasurf.Board";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf.getCompiler());
String ruleAtom = "rule foo \n when \n Person() \n then \n System.out.println(42); end";
builder.addPackageFromDrl( new StringReader(ruleAtom) );
if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
ruleAtom = "rule foo2 \n when \n Person() \n then \n System.out.println(42); end";
builder.addPackageFromDrl( new StringReader(ruleAtom) );
if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
assertEquals("foo.bar", builder.getPackage().getName());
String functionAtom = "function int fooBar(String x) { return 42; }";
builder.addPackageFromDrl( new StringReader(functionAtom) );
if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
Package p = builder.getPackage();
assertEquals(2, p.getRules().length);
assertEquals(1, p.getFunctions().size());
assertNotNull(p.getRule( "foo2" ));
functionAtom = "xxx";
builder.addPackageFromDrl( new StringReader(functionAtom) );
assertTrue(builder.hasErrors());
builder.clearErrors();
assertFalse(builder.hasErrors());
}
@Test
public void testGeneratedBeans() throws Exception {
JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l, new Properties() );
PackageDescr pc = new PackageDescr("foo.bar");
builder.addPackage( pc );
String header = "import com.billasurf.Person\n import com.billasurf.Board\n declare GenBean \n name: String \n end";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf.getCompiler());
String ruleAtom = "rule foo \n when \n Person() \n GenBean(name=='mike')\n then \n System.out.println(42); end";
builder.addPackageFromDrl( new StringReader(ruleAtom) );
if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
ruleAtom = "rule foo2 \n when \n Person() \n then \n System.out.println(42); end";
builder.addPackageFromDrl( new StringReader(ruleAtom) );
if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
assertEquals("foo.bar", builder.getPackage().getName());
}
@Test
public void testHasDSL() {
BRMSPackageBuilder builder = new BRMSPackageBuilder();
assertFalse(builder.hasDSL());
}
@Test
public void testGetExpander() {
BRMSPackageBuilder builder = new BRMSPackageBuilder();
List<DSLTokenizedMappingFile> files = new ArrayList<DSLTokenizedMappingFile>();
files.add( new DSLTokenizedMappingFile() );
builder.setDSLFiles( files );
assertTrue(builder.hasDSL());
assertNotNull(builder.getDSLExpander());
}
@Test
public void testDefaultCompiler() throws Exception {
JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
Properties p = new Properties();
p.setProperty("drools.accumulate.function.groupCount", "org.drools.base.accumulators.MaxAccumulateFunction");
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l, p );
assertEquals("org.drools.base.accumulators.MaxAccumulateFunction", builder.getPackageBuilderConfiguration().getAccumulateFunction("groupCount").getClass().getName());
PackageDescr pc = new PackageDescr("foo.bar");
builder.addPackage( pc );
String header = "import com.billasurf.Person\n import com.billasurf.Board";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf.getCompiler());
}
@Test
public void testEclipseCompiler() throws Exception {
System.setProperty( "drools.dialect.java.compiler", "ECLIPSE" );
JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l, new Properties() );
PackageDescr pc = new PackageDescr("foo.bar");
builder.addPackage( pc );
String header = "import com.billasurf.Person\n import com.billasurf.Board";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf.getCompiler());
}
@Test
public void testNamespaceSingle() throws Exception {
System.setProperty( "drools.dialect.java.compiler", "ECLIPSE" );
JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l, new Properties() );
assertFalse(builder.getPackageBuilderConfiguration().isAllowMultipleNamespaces());
}
@Test
public void testRuleFlow() throws Exception {
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( new ArrayList<JarInputStream>(), new Properties() );
builder.addProcessFromXml( new InputStreamReader( this.getClass().getResourceAsStream( "evaluation.rf" ) ) );
assertFalse(builder.hasErrors());
}
@Test
public void testBPMN2Process() throws Exception {
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( new ArrayList<JarInputStream>(), new Properties() );
builder.addProcessFromXml( new InputStreamReader( this.getClass().getResourceAsStream( "Hello.bpmn" ) ) );
assertFalse(builder.hasErrors());
}
}