package org.drools.decisiontable.parser; import org.drools.decisiontable.parser.LhsBuilder.FieldType; import junit.framework.TestCase; public class LhsBuilderTest extends TestCase { public void testBuildItUp() throws Exception { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "age"); builder.addTemplate(2, "size != $param"); builder.addTemplate(3, "date <"); builder.addCellValue(1, "42"); builder.addCellValue(2, "20"); builder.addCellValue(3, "30"); assertEquals("Person(age == \"42\", size != 20, date < \"30\")", builder.getResult()); builder.clearValues(); builder.addCellValue( 2, "42" ); assertEquals("Person(size != 42)", builder.getResult()); } public void testEmptyCells() { LhsBuilder builder = new LhsBuilder("Person"); assertFalse(builder.hasValues()); } public void testClassicMode() { LhsBuilder builder = new LhsBuilder(""); builder.addTemplate( 1, "Person(age < $param)"); builder.addCellValue( 1, "42" ); assertEquals("Person(age < 42)", builder.getResult()); builder = new LhsBuilder(null); builder.addTemplate( 3, "Foo(bar == $param)"); builder.addTemplate( 4, "eval(true)"); builder.addCellValue( 3, "42" ); builder.addCellValue( 4, "Y" ); assertEquals("Foo(bar == 42)\neval(true)", builder.getResult()); } public void testForAllAndFucntion() { LhsBuilder builder = new LhsBuilder(""); builder.addTemplate(1, "forall(&&){Foo(bar != $)}"); builder.addCellValue(1, "42,43"); assertEquals("Foo(bar != 42) && Foo(bar != 43)", builder.getResult()); } public void testForAllOr() { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "forall(||){age < $}"); builder.addCellValue(1, "42"); assertEquals("Person(age < 42)", builder.getResult()); } public void testForAllOrPrefix() { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "age < 10 && forall(||){age < $}"); builder.addCellValue(1, "42"); assertEquals("Person(age < 10 && age < 42)", builder.getResult()); } public void testForAllOrCSV() { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "forall(||){age < $}"); builder.addCellValue(1, "42, 43, 44"); assertEquals("Person(age < 42 || age < 43 || age < 44)", builder .getResult()); } public void testForAllAnd() { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "forall(&&){age < $}"); builder.addCellValue(1, "42"); assertEquals("Person(age < 42)", builder.getResult()); } public void testForAllAndCSV() { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "forall(&&){age < $}"); builder.addCellValue(1, "42, 43, 44"); assertEquals("Person(age < 42 && age < 43 && age < 44)", builder .getResult()); } public void testForAllAndForAllOrCSVMultiple() { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "forall(&&){age < $ || age == $}"); builder.addCellValue(1, "42, 43, 44"); assertEquals( "Person(age < 42 || age == 42 && age < 43 || age == 43 && age < 44 || age == 44)", builder.getResult()); } public void testForAllsAndForAllOrCSVMultiple() { LhsBuilder builder = new LhsBuilder("Person"); builder.addTemplate(1, "forall(&&){age < $ || age == $} && forall(&&){age < $ || age == $}"); builder.addCellValue(1, "42, 43, 44"); assertEquals( "Person(age < 42 || age == 42 && age < 43 || age == 43 && age < 44 || age == 44 && age < 42 || age == 42 && age < 43 || age == 43 && age < 44 || age == 44)", builder.getResult()); } public void testIdentifyFieldTypes() { LhsBuilder builder = new LhsBuilder(""); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("age")); assertEquals(FieldType.OPERATOR_FIELD, builder.calcFieldType("age <")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("age < $param")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("forall(||){age < $}")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("forall(&&){age < $}")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("forall(,){age < $}")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("forall(){age < $}")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("forall(){age < $} && forall(){age == $}")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("x && forall(){age < $} && forall(){age == $}")); assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("x && forall(){age < $} && forall(){age == $} && y")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("age < $para")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall{||}{age < $}")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall(){}")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall(){age < $")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall(){,")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall({})")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall({}){test})")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall(&&){{}})")); assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("forall(&&){{})")); } public void testIdentifyColumnCorrectly() { LhsBuilder builder = new LhsBuilder(null); assertFalse(builder.isMultipleConstraints()); //will be added to Foo builder = new LhsBuilder("Foo"); assertTrue(builder.isMultipleConstraints()); //will be added to eval builder = new LhsBuilder("f:Foo() eval "); assertTrue(builder.isMultipleConstraints()); //will just be verbatim builder = new LhsBuilder("f: Foo()"); assertFalse(builder.isMultipleConstraints()); } }