[jboss-svn-commits] JBL Code SVN: r9125 - in labs/jbossrules/trunk/drools-decisiontables/src: test/java/org/drools/decisiontable/parser and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jan 30 06:13:11 EST 2007


Author: stevearoonie
Date: 2007-01-30 06:13:11 -0500 (Tue, 30 Jan 2007)
New Revision: 9125

Added:
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_complex.drl
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid1.drl
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid2.drl
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid3.drl
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid4.drl
Modified:
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java
Log:
Expand on validation for Template Container parsing and improve test

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java	2007-01-30 10:54:43 UTC (rev 9124)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java	2007-01-30 11:13:11 UTC (rev 9125)
@@ -32,15 +32,24 @@
 	private Map templates = new HashMap();
 
 	public DefaultTemplateContainer(final String template) {
-		final InputStream templateStream = this.getClass().getResourceAsStream(
-				template);
-		parseTemplate(templateStream);
+		this(DefaultTemplateContainer.class.getResourceAsStream(template));
 	}
 
 	public DefaultTemplateContainer(final InputStream templateStream) {
 		parseTemplate(templateStream);
+		validateTemplate();
 	}
 
+	private void validateTemplate() {
+		if (columns.size() == 0) {
+			throw new DecisionTableParseException("Missing header columns");
+		}
+		if (templates.size() == 0) {
+			throw new DecisionTableParseException("Missing templates");
+		}
+		
+	}
+
 	private void parseTemplate(final InputStream templateStream) {
 		try {
 			final ColumnFactory cf = new ColumnFactory();
@@ -66,6 +75,10 @@
 						addTemplate(template);
 
 					} else if (line.startsWith("package")) {
+						if (inHeader == false) {
+							throw new DecisionTableParseException(
+									"Missing header");
+						}
 						inHeader = false;
 						header.append(line).append("\n");
 					} else if (inHeader) {
@@ -88,12 +101,16 @@
 				}
 
 			}
+			if (inTemplate) {
+				throw new DecisionTableParseException("Missing end template");
+			}
 			this.header = header.toString();
 
 		} catch (IOException e) {
 			throw new RuntimeException(e);
 		} finally {
-			closeStream(templateStream);
+			if (templateStream != null)
+				closeStream(templateStream);
 		}
 	}
 
@@ -101,7 +118,9 @@
 		templates.put(template.getName(), template);
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.drools.decisiontable.parser.TemplateContainer#getTemplates()
 	 */
 	public Map getTemplates() {
@@ -112,14 +131,18 @@
 		columns.add(c);
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.drools.decisiontable.parser.TemplateContainer#getColumns()
 	 */
 	public Column[] getColumns() {
 		return (Column[]) columns.toArray(new Column[columns.size()]);
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.drools.decisiontable.parser.TemplateContainer#getHeader()
 	 */
 	public String getHeader() {

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java	2007-01-30 10:54:43 UTC (rev 9124)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java	2007-01-30 11:13:11 UTC (rev 9125)
@@ -8,9 +8,12 @@
 
 public class DefaultTemplateContainerTest extends TestCase {
 	public void testParseTemplate() {
-		InputStream is = DefaultTemplateContainerTest.class.getResourceAsStream("/templates/test_template_simple.drl");
+		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 templates = t.getTemplates();
 		assertEquals(1, templates.size());
 		RuleTemplate template = (RuleTemplate) templates.get("template1");
@@ -19,7 +22,105 @@
 		assertEquals(1, columns.size());
 		assertEquals("name", columns.get(0));
 		String contents = template.getContents();
-		assertTrue(contents.startsWith("rule \"How cool is $name$ $row.rowNumber$\""));
+		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());
+		Map templates = t.getTemplates();
+		assertEquals(2, templates.size());
+
+		RuleTemplate template = (RuleTemplate) templates.get("template1");
+		assertNotNull(template);
+		List columns = template.getColumns();
+		assertEquals(1, columns.size());
+		assertEquals("first_name", columns.get(0));
+		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());
+		assertEquals("first_name", columns.get(0));
+		assertEquals("last_name", columns.get(1));
+		contents = template.getContents();
+		assertTrue(contents
+				.startsWith("rule \"How uncool is $first_name$ $row.rowNumber$\""));
+		assertTrue(contents.endsWith("then\nend\n"));
+
+	}
 }

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_complex.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_complex.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_complex.drl	2007-01-30 11:13:11 UTC (rev 9125)
@@ -0,0 +1,27 @@
+template header
+first_name
+last_name
+age
+city
+phone
+
+package This_is_a_ruleset;
+
+template "template1"
+first_name
+rule "How cool is $first_name$ $row.rowNumber$"
+	when
+		user.getName().equals("$first_name$")
+	then
+end
+end template
+
+template "template2"
+first_name
+last_name
+rule "How uncool is $first_name$ $row.rowNumber$"
+	when
+		user.getFirstName().equals("$first_name$")
+	then
+end
+end template

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid1.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid1.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid1.drl	2007-01-30 11:13:11 UTC (rev 9125)
@@ -0,0 +1,11 @@
+package This_is_a_ruleset;
+
+template "template1"
+name
+rule "How cool is $name$ $row.rowNumber$"
+	when
+		user.getName().equals("$name$")
+	then
+end
+end template
+

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid2.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid2.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid2.drl	2007-01-30 11:13:11 UTC (rev 9125)
@@ -0,0 +1,13 @@
+template header
+
+package This_is_a_ruleset;
+
+template "template1"
+name
+rule "How cool is $name$ $row.rowNumber$"
+	when
+		user.getName().equals("$name$")
+	then
+end
+end template
+

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid3.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid3.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid3.drl	2007-01-30 11:13:11 UTC (rev 9125)
@@ -0,0 +1,13 @@
+template header
+name
+
+package This_is_a_ruleset;
+
+name
+rule "How cool is $name$ $row.rowNumber$"
+	when
+		user.getName().equals("$name$")
+	then
+end
+end template
+

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid4.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid4.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_invalid4.drl	2007-01-30 11:13:11 UTC (rev 9125)
@@ -0,0 +1,14 @@
+template header
+name
+
+package This_is_a_ruleset;
+
+template "template1"
+name
+rule "How cool is $name$ $row.rowNumber$"
+	when
+		user.getName().equals("$name$")
+	then
+end
+
+




More information about the jboss-svn-commits mailing list