@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 properties = new Properties();
    properties.setProperty(
        "drools.accumulate.function.groupCount",
        "org.drools.base.accumulators.MaxAccumulateFunction");
    BRMSPackageBuilder builder =
        new BRMSPackageBuilder(properties, new ClassLoaderBuilder(l).buildClassLoader());
    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());
  }
  // @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> jarInputStreams = new ArrayList<JarInputStream>();
    jarInputStreams.add(jis);

    Properties ps = new Properties();
    ps.setProperty(DefaultPackageNameOption.PROPERTY_NAME, "foo.bar");

    BRMSPackageBuilder builder =
        new BRMSPackageBuilder(ps, new ClassLoaderBuilder(jarInputStreams).buildClassLoader());

    // 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 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 =
        new BRMSPackageBuilder(new Properties(), new ClassLoaderBuilder(l).buildClassLoader());

    assertFalse(builder.getPackageBuilderConfiguration().isAllowMultipleNamespaces());
  }
  @Test
  public void testGeneratedBeans() throws Exception {

    JarInputStream jis = new JarInputStream(this.getClass().getResourceAsStream("/billasurf.jar"));
    List<JarInputStream> jarInputStreams = new ArrayList<JarInputStream>();
    jarInputStreams.add(jis);
    BRMSPackageBuilder builder =
        new BRMSPackageBuilder(
            new Properties(), new ClassLoaderBuilder(jarInputStreams).buildClassLoader());

    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 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 =
        new BRMSPackageBuilder(new Properties(), new ClassLoaderBuilder(l).buildClassLoader());

    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());
  }