@Test
  public void testFromEmptyDrl() throws Exception {
    String drl = "";

    FactModelContentHandler ch = new FactModelContentHandler();
    List<FactMetaModel> list = ch.toModel(drl);
    assertNotNull(list);
  }
  @Test
  public void testFromDrlDeclarationEmpty() throws Exception {

    String drl = "declare FooBar\nend";

    FactModelContentHandler ch = new FactModelContentHandler();
    List<FactMetaModel> list = ch.toModel(drl);
    assertEquals(1, list.size());
    FactMetaModel mm = list.get(0);
    assertEquals("FooBar", mm.getName());
    assertEquals(0, mm.getFields().size());
  }
  @Test
  public void testAdvanced() throws Exception {

    String drl = "#advanced editor \ndeclare FooBar\n\t name: String  \nend";
    try {
      FactModelContentHandler ch = new FactModelContentHandler();
      ch.toModel(drl);
      fail("should not parse this");
    } catch (DroolsParserException e) {
      assertNotNull(e.getMessage());
    }
  }
  @Test
  public void testFromDrlDeclarationWithAnnotations() throws Exception {

    String drl = "declare FooBar\n\t@role(event)\nend";

    FactModelContentHandler ch = new FactModelContentHandler();
    List<FactMetaModel> list = ch.toModel(drl);
    assertEquals(1, list.size());
    FactMetaModel mm = list.get(0);
    assertEquals("FooBar", mm.getName());
    assertEquals(0, mm.getFields().size());
    assertEquals(1, mm.getAnnotations().size());
    assertEquals("event", mm.getAnnotations().get(0).values.get("value"));
  }
  @Test
  public void testFromDrlDeclarationWithFields() throws Exception {
    String drl = "declare FooBar\n\tf1: int\n\tf2: String\nend";

    FactModelContentHandler ch = new FactModelContentHandler();
    List<FactMetaModel> list = ch.toModel(drl);
    assertEquals(1, list.size());
    FactMetaModel mm = list.get(0);
    assertEquals("FooBar", mm.getName());
    assertEquals(2, mm.getFields().size());
    for (int i = 0; i < mm.getFields().size(); i++) {
      FieldMetaModel fm = (FieldMetaModel) mm.getFields().get(1);
      if (fm.name.equals("f1")) {
        assertEquals("f1", fm.name);
        assertEquals("int", fm.type);
      } else {
        assertEquals("f2", fm.name);
        assertEquals("String", fm.type);
      }
    }
  }