package org.drools.template.parser; import java.io.InputStream; import java.util.List; import java.util.Map; import junit.framework.TestCase; public class DefaultTemplateContainerTest extends TestCase { public void testParseTemplate() { InputStream is = DefaultTemplateContainerTest.class .getResourceAsStream("/templates/test_template_simple.drl"); DefaultTemplateContainer t = new DefaultTemplateContainer(is); assertEquals("package This_is_a_ruleset;\n", t.getHeader()); assertEquals(1, t.getColumns().length); assertEquals("name", t.getColumns()[0].getName()); Map<String, RuleTemplate> templates = t.getTemplates(); assertEquals(1, templates.size()); RuleTemplate template = templates.get("template1"); assertNotNull(template); List<TemplateColumn> columns = template.getColumns(); assertEquals(1, columns.size()); TemplateColumn column = (TemplateColumn) columns.get(0); assertEquals("name", column.getName()); String contents = template.getContents(); assertTrue(contents .startsWith("rule \"How cool is @{name} @{row.rowNumber}\"")); assertTrue(contents.endsWith("then\nend\n")); } public void testParseTemplateConditions() { InputStream is = DefaultTemplateContainerTest.class .getResourceAsStream("/templates/test_template_conditions.drl"); DefaultTemplateContainer t = new DefaultTemplateContainer(is); assertEquals("package This_is_a_ruleset;\n", t.getHeader()); assertEquals(1, t.getColumns().length); assertEquals("name", t.getColumns()[0].getName()); Map<String, RuleTemplate> templates = t.getTemplates(); assertEquals(1, templates.size()); RuleTemplate template = (RuleTemplate) templates.get("template1"); assertNotNull(template); List<TemplateColumn> columns = template.getColumns(); assertEquals(1, columns.size()); TemplateColumn templateColumn = (TemplateColumn) columns.get(0); assertEquals("name", templateColumn.getName()); assertEquals("== \"name1\"", templateColumn.getCondition()); String contents = template.getContents(); assertTrue(contents .startsWith("rule \"How cool is @{name} @{row.rowNumber}\"")); assertTrue(contents.endsWith("then\nend\n")); } public void testParseTemplateNoHeader() { try { InputStream is = DefaultTemplateContainerTest.class .getResourceAsStream("/templates/test_template_invalid1.drl"); new DefaultTemplateContainer(is); fail("DecisionTableParseException expected"); } catch (DecisionTableParseException expected) { assertEquals("Missing header", expected.getMessage()); } } public void testParseTemplateNoHeaderColumns() { try { InputStream is = DefaultTemplateContainerTest.class .getResourceAsStream("/templates/test_template_invalid2.drl"); new DefaultTemplateContainer(is); fail("DecisionTableParseException expected"); } catch (DecisionTableParseException expected) { assertEquals("Missing header columns", expected.getMessage()); } } public void testParseTemplateNoTemplates() { try { InputStream is = DefaultTemplateContainerTest.class .getResourceAsStream("/templates/test_template_invalid3.drl"); new DefaultTemplateContainer(is); fail("DecisionTableParseException expected"); } catch (DecisionTableParseException expected) { assertEquals("Missing templates", expected.getMessage()); } } public void testParseTemplateNoEndTemplate() { try { InputStream is = DefaultTemplateContainerTest.class .getResourceAsStream("/templates/test_template_invalid4.drl"); new DefaultTemplateContainer(is); fail("DecisionTableParseException expected"); } catch (DecisionTableParseException expected) { assertEquals("Missing end template", expected.getMessage()); } } public void testNullInputStream() { try { new DefaultTemplateContainer((InputStream) null); fail("NullPointerException expected"); } catch (NullPointerException expected) { } } public void testInvalidTemplatePath() { try { new DefaultTemplateContainer("invalid path"); fail("NullPointerException expected"); } catch (NullPointerException expected) { } } public void testParseComplexTemplate() { InputStream is = DefaultTemplateContainerTest.class .getResourceAsStream("/templates/test_template_complex.drl"); DefaultTemplateContainer t = new DefaultTemplateContainer(is); assertEquals("package This_is_a_ruleset;\n", t.getHeader()); Column[] columnList = t.getColumns(); assertEquals(5, columnList.length); assertEquals("first_name", columnList[0].getName()); assertEquals("last_name", columnList[1].getName()); assertEquals("age", columnList[2].getName()); assertEquals("city", columnList[3].getName()); assertEquals("phone", columnList[4].getName()); assertEquals(columnList[1], t.getColumn("last_name")); Map<String, RuleTemplate> templates = t.getTemplates(); assertEquals(2, templates.size()); RuleTemplate template = (RuleTemplate) templates.get("template1"); assertNotNull(template); List<TemplateColumn> columns = template.getColumns(); assertEquals(1, columns.size()); TemplateColumn column = (TemplateColumn) columns.get(0); assertEquals("first_name", column.getName()); String contents = template.getContents(); assertTrue(contents .startsWith("rule \"How cool is @{first_name} @{row.rowNumber}\"")); assertTrue(contents.endsWith("then\nend\n")); template = (RuleTemplate) templates.get("template2"); assertNotNull(template); columns = template.getColumns(); assertEquals(2, columns.size()); column = (TemplateColumn) columns.get(0); assertEquals("first_name", column.getName()); TemplateColumn column2 = (TemplateColumn) columns.get(1); assertEquals("last_name", column2.getName()); contents = template.getContents(); assertTrue(contents .startsWith("rule \"How uncool is @{first_name} @{row.rowNumber}\"")); assertTrue(contents.endsWith("then\nend\n")); } }