/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.ide.common.modeldriven.dt; import java.util.Date; import java.util.HashMap; import junit.framework.TestCase; import org.drools.ide.common.client.modeldriven.ModelField; import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine; import org.drools.ide.common.client.modeldriven.ModelField.FIELD_CLASS_TYPE; import org.drools.ide.common.client.modeldriven.brl.BaseSingleFieldConstraint; import org.drools.ide.common.client.modeldriven.dt.ActionInsertFactCol; import org.drools.ide.common.client.modeldriven.dt.ActionSetFieldCol; import org.drools.ide.common.client.modeldriven.dt.AttributeCol; import org.drools.ide.common.client.modeldriven.dt.ConditionCol; import org.drools.ide.common.client.modeldriven.dt.GuidedDecisionTable; public class GuidedDecisionTableTest extends TestCase { // public void testGetCol() { // GuidedDecisionTable dt = new GuidedDecisionTable(); // AttributeCol at1 = new AttributeCol(); // ConditionCol condition1 = new ConditionCol(); // ActionCol action1 = new ActionInsertFactCol(); // dt.attributeCols.add(at1); // dt.conditionCols.add(condition1); // dt.actionCols.add(action1); // // assertEquals(at1, dt.getColumnConfiguration(0)); // assertEquals(condition1, dt.getColumnConfiguration(1)); // assertEquals(action1, dt.getColumnConfiguration(2)); // // // AttributeCol at2 = new AttributeCol(); // dt.attributeCols.add(at2); // assertEquals(at1, dt.getColumnConfiguration(0)); // assertEquals(at2, dt.getColumnConfiguration(1)); // assertEquals(condition1, dt.getColumnConfiguration(2)); // assertEquals(action1, dt.getColumnConfiguration(3)); // // ConditionCol condition2 = new ConditionCol(); // dt.conditionCols.add(condition2); // // assertEquals(at1, dt.getColumnConfiguration(0)); // assertEquals(at2, dt.getColumnConfiguration(1)); // assertEquals(condition1, dt.getColumnConfiguration(2)); // assertEquals(condition2, dt.getColumnConfiguration(3)); // assertEquals(action1, dt.getColumnConfiguration(4)); // // ActionCol action2 = new ActionInsertFactCol(); // dt.actionCols.add(action2); // assertEquals(at1, dt.getColumnConfiguration(0)); // assertEquals(at2, dt.getColumnConfiguration(1)); // assertEquals(condition1, dt.getColumnConfiguration(2)); // assertEquals(condition2, dt.getColumnConfiguration(3)); // assertEquals(action1, dt.getColumnConfiguration(4)); // assertEquals(action2, dt.getColumnConfiguration(5)); // // // // dt.attributeCols = new ArrayList(); // assertEquals(condition1, dt.getColumnConfiguration(0)); // assertEquals(condition2, dt.getColumnConfiguration(1)); // assertEquals(action1, dt.getColumnConfiguration(2)); // assertEquals(action2, dt.getColumnConfiguration(3)); // // dt.conditionCols = new ArrayList(); // assertEquals(action1, dt.getColumnConfiguration(0)); // assertEquals(action2, dt.getColumnConfiguration(1)); // // // // // // // } public void testValueLists() { GuidedDecisionTable dt = new GuidedDecisionTable(); //add cols for LHS ConditionCol c1 = new ConditionCol(); c1.setBoundName( "c1" ); c1.setFactType( "Driver" ); c1.setFactField( "name" ); c1.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(c1); ConditionCol c1_ = new ConditionCol(); c1_.setBoundName( "c1" ); c1_.setFactType( "Driver" ); c1_.setFactField( "name" ); c1_.setConstraintValueType( BaseSingleFieldConstraint.TYPE_RET_VALUE ); dt.getConditionCols().add(c1_); ConditionCol c1__ = new ConditionCol(); c1__.setBoundName( "c1" ); c1__.setFactType( "Driver" ); c1__.setFactField( "name" ); c1__.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); c1__.setValueList( "one,two,three" ); dt.getConditionCols().add(c1__); ConditionCol c2 = new ConditionCol(); c2.setBoundName( "c2" ); c2.setFactType( "Driver" ); c2.setFactField( "nothing" ); c2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(c2); ActionSetFieldCol asf = new ActionSetFieldCol(); asf.setBoundName( "c1" ); asf.setFactField( "name" ); dt.getActionCols().add(asf); ActionInsertFactCol ins = new ActionInsertFactCol(); ins.setBoundName( "x" ); ins.setFactField( "rating" ); ins.setFactType( "Person" ); dt.getActionCols().add(ins); ActionInsertFactCol ins_ = new ActionInsertFactCol(); ins_.setBoundName( "x" ); ins_.setFactField( "rating" ); ins_.setFactType( "Person" ); ins_.setValueList( "one,two,three" ); dt.getActionCols().add(ins_); ActionSetFieldCol asf_ = new ActionSetFieldCol(); asf_.setBoundName( "c1" ); asf_.setFactField( "goo" ); dt.getActionCols().add(asf_); ActionSetFieldCol asf__ = new ActionSetFieldCol(); asf__.setBoundName( "c1" ); asf__.setFactField( "goo" ); asf__.setValueList( "one,two,three" ); dt.getActionCols().add(asf__); SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.putDataEnumList("Driver.name", new String[]{"bob", "michael"}); sce.putDataEnumList("Person.rating", new String[]{"1", "2"}); String[] r = dt.getValueList(c1, sce); assertEquals(2, r.length); assertEquals("bob", r[0]); assertEquals("michael", r[1]); assertEquals(0, dt.getValueList(c1_, sce).length); r = dt.getValueList(c1__, sce); assertEquals(3, r.length); assertEquals("one", r[0]); assertEquals("two", r[1]); assertEquals("three", r[2]); assertEquals(0, dt.getValueList(c2, sce).length); r = dt.getValueList(asf, sce); assertEquals(2, r.length); assertEquals("bob", r[0]); assertEquals("michael", r[1]); r = dt.getValueList(ins, sce); assertEquals(2, r.length); assertEquals("1", r[0]); assertEquals("2", r[1]); r = dt.getValueList(ins_, sce); assertEquals(3, r.length); assertEquals("one", r[0]); assertEquals("two", r[1]); assertEquals("three", r[2]); assertEquals(0, dt.getValueList(asf_, sce).length); r = dt.getValueList(asf__, sce); assertEquals(3, r.length); assertEquals("one", r[0]); assertEquals("two", r[1]); assertEquals("three", r[2]); AttributeCol at = new AttributeCol(); at.attr = "no-loop"; dt.getAttributeCols().add(at); r = dt.getValueList(at, sce); assertEquals(2, r.length); assertEquals("true", r[0]); assertEquals("false", r[1]); at.attr = "enabled"; assertEquals(2, dt.getValueList(at, sce).length); at.attr = "salience"; assertEquals(0, dt.getValueList(at, sce).length); } public void testNumeric() { SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setFieldsForTypes(new HashMap<String, ModelField[]>() { { put("Driver", new ModelField[]{ new ModelField("age", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_NUMERIC), new ModelField("name", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING) }); } }); GuidedDecisionTable dt = new GuidedDecisionTable(); AttributeCol at = new AttributeCol(); at.attr = "salience"; AttributeCol at_ = new AttributeCol(); at_.attr = "enabled"; dt.getAttributeCols().add(at); dt.getAttributeCols().add(at_); ConditionCol c1 = new ConditionCol(); c1.setBoundName( "c1" ); c1.setFactType( "Driver" ); c1.setFactField( "name" ); c1.setOperator( "==" ); c1.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(c1); ConditionCol c1_ = new ConditionCol(); c1_.setBoundName( "c1" ); c1_.setFactType( "Driver" ); c1_.setFactField( "age" ); c1_.setOperator( "==" ); c1_.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(c1_); ConditionCol c2 = new ConditionCol(); c2.setBoundName( "c1" ); c2.setFactType( "Driver" ); c2.setFactField( "age" ); c2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(c2); ActionSetFieldCol a = new ActionSetFieldCol(); a.setBoundName( "c1" ); a.setFactField( "name" ); dt.getActionCols().add(a); ActionSetFieldCol a2 = new ActionSetFieldCol(); a2.setBoundName( "c1" ); a2.setFactField( "age" ); dt.getActionCols().add(a2); ActionInsertFactCol ins = new ActionInsertFactCol(); ins.setBoundName( "x" ); ins.setFactType( "Driver" ); ins.setFactField( "name" ); dt.getActionCols().add(ins); ActionInsertFactCol ins_ = new ActionInsertFactCol(); ins_.setBoundName( "x" ); ins_.setFactType( "Driver" ); ins_.setFactField( "age" ); dt.getActionCols().add(ins_); assertTrue(dt.isNumeric(at, sce)); assertFalse(dt.isNumeric(at_, sce)); assertFalse(dt.isNumeric(c1, sce)); assertTrue(dt.isNumeric(c1_, sce)); assertFalse(dt.isNumeric(a, sce)); assertTrue(dt.isNumeric(a2, sce)); assertFalse(dt.isNumeric(ins, sce)); assertTrue(dt.isNumeric(ins_, sce)); assertFalse(dt.isNumeric(c2, sce)); } public void testGetType() { SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setFieldsForTypes(new HashMap<String, ModelField[]>() { { put("Driver", new ModelField[]{ new ModelField("age", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_NUMERIC), new ModelField("name", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING), new ModelField("date", Date.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_DATE), new ModelField("approved", Boolean.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_BOOLEAN) }); } }); GuidedDecisionTable dt = new GuidedDecisionTable(); AttributeCol salienceAttribute = new AttributeCol(); salienceAttribute.attr = "salience"; AttributeCol enabledAttribute = new AttributeCol(); enabledAttribute.attr = "enabled"; dt.getAttributeCols().add(salienceAttribute); dt.getAttributeCols().add(enabledAttribute); ConditionCol conditionColName = new ConditionCol(); conditionColName.setBoundName( "c1" ); conditionColName.setFactType( "Driver" ); conditionColName.setFactField( "name" ); conditionColName.setOperator( "==" ); conditionColName.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(conditionColName); ConditionCol conditionColAge = new ConditionCol(); conditionColAge.setBoundName( "c1" ); conditionColAge.setFactType( "Driver" ); conditionColAge.setFactField( "age" ); conditionColAge.setOperator( "==" ); conditionColAge.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(conditionColAge); ConditionCol conditionColDate = new ConditionCol(); conditionColDate.setBoundName( "c1" ); conditionColDate.setFactType( "Driver" ); conditionColDate.setFactField( "date" ); conditionColDate.setOperator( "==" ); conditionColDate.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(conditionColDate); ConditionCol conditionColApproved = new ConditionCol(); conditionColApproved.setBoundName( "c1" ); conditionColApproved.setFactType( "Driver" ); conditionColApproved.setFactField( "approved" ); conditionColApproved.setOperator( "==" ); conditionColApproved.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(conditionColApproved); ConditionCol conditionColAge2 = new ConditionCol(); conditionColAge2.setBoundName( "c1" ); conditionColAge2.setFactType( "Driver" ); conditionColAge2.setFactField( "age" ); conditionColAge2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(conditionColAge2); ActionSetFieldCol a = new ActionSetFieldCol(); a.setBoundName( "c1" ); a.setFactField( "name" ); dt.getActionCols().add(a); ActionSetFieldCol a2 = new ActionSetFieldCol(); a2.setBoundName( "c1" ); a2.setFactField( "age" ); dt.getActionCols().add(a2); ActionInsertFactCol ins = new ActionInsertFactCol(); ins.setBoundName( "x" ); ins.setFactType( "Driver" ); ins.setFactField( "name" ); dt.getActionCols().add(ins); ActionInsertFactCol ins_ = new ActionInsertFactCol(); ins_.setBoundName( "x" ); ins_.setFactType( "Driver" ); ins_.setFactField( "age" ); dt.getActionCols().add(ins_); assertEquals("salience", dt.getType(salienceAttribute, sce)); assertEquals("enabled", dt.getType(enabledAttribute, sce)); assertEquals(SuggestionCompletionEngine.TYPE_STRING, dt.getType(conditionColName, sce)); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, dt.getType(conditionColAge, sce)); assertEquals(SuggestionCompletionEngine.TYPE_DATE, dt.getType(conditionColDate, sce)); assertEquals(SuggestionCompletionEngine.TYPE_BOOLEAN, dt.getType(conditionColApproved, sce)); assertEquals(SuggestionCompletionEngine.TYPE_STRING, dt.getType(a, sce)); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, dt.getType(a2, sce)); assertEquals(SuggestionCompletionEngine.TYPE_STRING, dt.getType(ins, sce)); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, dt.getType(ins_, sce)); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, dt.getType(conditionColAge2, sce)); } public void testNoConstraintLists() { GuidedDecisionTable dt = new GuidedDecisionTable(); //add cols for LHS ConditionCol c1 = new ConditionCol(); c1.setBoundName( "c1" ); c1.setFactType( "Driver" ); c1.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(c1); ConditionCol c2 = new ConditionCol(); c2.setBoundName( "c2" ); c2.setFactType( "Driver" ); c2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); c2.setValueList( "a,b,c" ); dt.getConditionCols().add(c2); SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.putDataEnumList("Driver.name", new String[]{"bob", "michael"}); assertEquals(0, dt.getValueList(c1, sce).length); assertEquals(3, dt.getValueList(c2, sce).length); } public void testNoConstraintsNumeric() { GuidedDecisionTable dt = new GuidedDecisionTable(); //add cols for LHS ConditionCol c1 = new ConditionCol(); c1.setBoundName( "c1" ); c1.setFactType( "Driver" ); c1.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL ); dt.getConditionCols().add(c1); SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setFieldsForTypes(new HashMap<String, ModelField[]>() { { put("Driver", new ModelField[]{ new ModelField("age", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_NUMERIC), new ModelField("name", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING) }); } }); assertFalse(dt.isNumeric(c1, sce)); } }