/**
* 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.server.util;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine;
import org.drools.ide.common.client.modeldriven.brl.ActionInsertFact;
import org.drools.ide.common.client.modeldriven.brl.ActionRetractFact;
import org.drools.ide.common.client.modeldriven.brl.ActionSetField;
import org.drools.ide.common.client.modeldriven.brl.FactPattern;
import org.drools.ide.common.client.modeldriven.brl.BaseSingleFieldConstraint;
import org.drools.ide.common.client.modeldriven.brl.RuleAttribute;
import org.drools.ide.common.client.modeldriven.brl.RuleMetadata;
import org.drools.ide.common.client.modeldriven.brl.RuleModel;
import org.drools.ide.common.client.modeldriven.brl.SingleFieldConstraint;
import org.drools.ide.common.client.modeldriven.dt.ActionCol;
import org.drools.ide.common.client.modeldriven.dt.ActionInsertFactCol;
import org.drools.ide.common.client.modeldriven.dt.ActionRetractFactCol;
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;
import org.drools.ide.common.client.modeldriven.dt.MetadataCol;
import org.drools.ide.common.server.util.BRDRLPersistence;
import org.drools.ide.common.server.util.GuidedDTDRLPersistence;
public class GuidedDTDRLPersistenceTest extends TestCase {
public void test2Rules() throws Exception {
GuidedDecisionTable dt = new GuidedDecisionTable();
dt.setTableName( "michael" );
AttributeCol attr = new AttributeCol();
attr.attr = "salience";
attr.setDefaultValue( "66" );
dt.getAttributeCols().add(attr);
ConditionCol con = new ConditionCol();
con.setBoundName( "f1" );
con.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
con.setFactField( "age" );
con.setFactType( "Driver" );
con.setHeader( "Driver f1 age" );
con.setOperator( "==" );
dt.getConditionCols().add(con);
ConditionCol con2 = new ConditionCol();
con2.setBoundName( "f1" );
con2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
con2.setFactField( "name" );
con2.setFactType( "Driver" );
con2.setHeader( "Driver f1 name" );
con2.setOperator( "==" );
dt.getConditionCols().add(con2);
ConditionCol con3 = new ConditionCol();
con3.setBoundName( "f1" );
con3.setConstraintValueType( BaseSingleFieldConstraint.TYPE_RET_VALUE );
con3.setFactField( "rating" );
con3.setFactType( "Driver" );
con3.setHeader( "Driver rating" );
con3.setOperator( "==" );
dt.getConditionCols().add(con3);
ConditionCol con4 = new ConditionCol();
con4.setBoundName( "f2" );
con4.setConstraintValueType( BaseSingleFieldConstraint.TYPE_PREDICATE );
con4.setFactType( "Driver" );
con4.setHeader( "Driver 2 pimp" );
con4.setFactField( "(not needed)" );
dt.getConditionCols().add(con4);
ActionInsertFactCol ins = new ActionInsertFactCol();
ins.setBoundName( "ins" );
ins.setFactType( "Cheese" );
ins.setFactField( "price" );
ins.setType( SuggestionCompletionEngine.TYPE_NUMERIC );
dt.getActionCols().add(ins);
ActionRetractFactCol ret = new ActionRetractFactCol();
ret.boundName = "f2";
dt.getActionCols().add(ret);
ActionSetFieldCol set = new ActionSetFieldCol();
set.setBoundName( "f1" );
set.setFactField( "goo1" );
set.setType( SuggestionCompletionEngine.TYPE_STRING );
dt.getActionCols().add(set);
ActionSetFieldCol set2 = new ActionSetFieldCol();
set2.setBoundName( "f1" );
set2.setFactField( "goo2" );
set2.setDefaultValue( "whee" );
set2.setType( SuggestionCompletionEngine.TYPE_STRING );
dt.getActionCols().add(set2);
dt.setData( new String[][] {
new String[] {"1", "desc", "42", "33", "michael", "age * 0.2", "age > 7", "6.60", "true", "gooVal1", null},
new String[] {"2", "desc", "", "39", "bob", "age * 0.3", "age > 7", "6.60", "", "gooVal1", ""}
} );
GuidedDTDRLPersistence p = GuidedDTDRLPersistence.getInstance();
String drl = p.marshal(dt);
assertTrue(drl.indexOf("from row number") > -1);
assertTrue(drl.indexOf("rating == ( age * 0.2 )") > 0);
assertTrue(drl.indexOf("f2 : Driver( eval( age > 7 ))") > 0);
assertTrue(drl.indexOf("rating == ( age * 0.3 )") > drl.indexOf("rating == ( age * 0.2 )"));
assertTrue(drl.indexOf("f1.setGoo2( \"whee\" )") > 0); //for default
assertTrue(drl.indexOf("salience 66") > 0); //for default
}
public void testInterpolate() {
GuidedDecisionTable dt = new GuidedDecisionTable();
dt.setTableName( "michael" );
AttributeCol attr = new AttributeCol();
attr.attr = "salience";
attr.setDefaultValue( "66" );
dt.getAttributeCols().add(attr);
ConditionCol con = new ConditionCol();
con.setBoundName( "f1" );
con.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
con.setFactField( "age" );
con.setFactType( "Driver" );
con.setHeader( "Driver f1 age" );
con.setOperator( "==" );
dt.getConditionCols().add(con);
ConditionCol con2 = new ConditionCol();
con2.setBoundName( "f1" );
con2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
con2.setFactField( "name" );
con2.setFactType( "Driver" );
con2.setHeader( "Driver f1 name" );
con2.setOperator( "==" );
dt.getConditionCols().add(con2);
ConditionCol con3 = new ConditionCol();
con3.setBoundName( "f1" );
con3.setConstraintValueType( BaseSingleFieldConstraint.TYPE_RET_VALUE );
con3.setFactField( "rating" );
con3.setFactType( "Driver" );
con3.setHeader( "Driver rating" );
con3.setOperator( "==" );
dt.getConditionCols().add(con3);
ConditionCol con4 = new ConditionCol();
con4.setBoundName( "f2" );
con4.setConstraintValueType( BaseSingleFieldConstraint.TYPE_PREDICATE );
con4.setFactType( "Driver" );
con4.setHeader( "Driver 2 pimp" );
con4.setFactField( "this.hasSomething($param)" );
dt.getConditionCols().add(con4);
ActionInsertFactCol ins = new ActionInsertFactCol();
ins.setBoundName( "ins" );
ins.setFactType( "Cheese" );
ins.setFactField( "price" );
ins.setType( SuggestionCompletionEngine.TYPE_NUMERIC );
dt.getActionCols().add(ins);
ActionRetractFactCol ret = new ActionRetractFactCol();
ret.boundName = "f2";
dt.getActionCols().add(ret);
ActionSetFieldCol set = new ActionSetFieldCol();
set.setBoundName( "f1" );
set.setFactField( "goo1" );
set.setType( SuggestionCompletionEngine.TYPE_STRING );
dt.getActionCols().add(set);
ActionSetFieldCol set2 = new ActionSetFieldCol();
set2.setBoundName( "f1" );
set2.setFactField( "goo2" );
set2.setDefaultValue( "whee" );
set2.setType( SuggestionCompletionEngine.TYPE_STRING );
dt.getActionCols().add(set2);
dt.setData( new String[][] {
new String[] {"1", "desc", "42", "33", "michael", "age * 0.2", "BAM", "6.60", "true", "gooVal1", null},
new String[] {"2", "desc", "", "39", "bob", "age * 0.3", "BAM", "6.60", "", "gooVal1", ""}
} );
GuidedDTDRLPersistence p = GuidedDTDRLPersistence.getInstance();
String drl = p.marshal(dt);
assertTrue(drl.indexOf("from row number") > -1);
assertTrue(drl.indexOf("rating == ( age * 0.2 )") > 0);
//assertTrue(drl.indexOf("f2 : Driver( eval( age > 7 ))") > 0);
assertTrue(drl.indexOf("f2 : Driver( eval( this.hasSomething(BAM) ))") > 0);
assertTrue(drl.indexOf("rating == ( age * 0.3 )") > drl.indexOf("rating == ( age * 0.2 )"));
assertTrue(drl.indexOf("f1.setGoo2( \"whee\" )") > 0); //for default
assertTrue(drl.indexOf("salience 66") > 0); //for default
}
public void testInOperator() {
GuidedDecisionTable dt = new GuidedDecisionTable();
dt.setTableName( "michael" );
AttributeCol attr = new AttributeCol();
attr.attr = "salience";
attr.setDefaultValue( "66" );
dt.getAttributeCols().add(attr);
ConditionCol con = new ConditionCol();
con.setBoundName( "f1" );
con.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
con.setFactField( "age" );
con.setFactType( "Driver" );
con.setHeader( "Driver f1 age" );
con.setOperator( "==" );
dt.getConditionCols().add(con);
ConditionCol con2 = new ConditionCol();
con2.setBoundName( "f1" );
con2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
con2.setFactField( "name" );
con2.setFactType( "Driver" );
con2.setHeader( "Driver f1 name" );
con2.setOperator( "in" );
dt.getConditionCols().add(con2);
ConditionCol con3 = new ConditionCol();
con3.setBoundName( "f1" );
con3.setConstraintValueType( BaseSingleFieldConstraint.TYPE_RET_VALUE );
con3.setFactField( "rating" );
con3.setFactType( "Driver" );
con3.setHeader( "Driver rating" );
con3.setOperator( "==" );
dt.getConditionCols().add(con3);
ConditionCol con4 = new ConditionCol();
con4.setBoundName( "f2" );
con4.setConstraintValueType( BaseSingleFieldConstraint.TYPE_PREDICATE );
con4.setFactType( "Driver" );
con4.setHeader( "Driver 2 pimp" );
con4.setFactField( "(not needed)" );
dt.getConditionCols().add(con4);
ActionInsertFactCol ins = new ActionInsertFactCol();
ins.setBoundName( "ins" );
ins.setFactType( "Cheese" );
ins.setFactField( "price" );
ins.setType( SuggestionCompletionEngine.TYPE_NUMERIC );
dt.getActionCols().add(ins);
ActionRetractFactCol ret = new ActionRetractFactCol();
ret.boundName = "f2";
dt.getActionCols().add(ret);
ActionSetFieldCol set = new ActionSetFieldCol();
set.setBoundName( "f1" );
set.setFactField( "goo1" );
set.setType( SuggestionCompletionEngine.TYPE_STRING );
dt.getActionCols().add(set);
ActionSetFieldCol set2 = new ActionSetFieldCol();
set2.setBoundName( "f1" );
set2.setFactField( "goo2" );
set2.setDefaultValue( "whee" );
set2.setType( SuggestionCompletionEngine.TYPE_STRING );
dt.getActionCols().add(set2);
dt.setData( new String[][] {
new String[] {"1", "desc", "42", "33", "michael, manik", "age * 0.2", "age > 7", "6.60", "true", "gooVal1", null},
new String[] {"2", "desc", "", "39", "bob, frank", "age * 0.3", "age > 7", "6.60", "", "gooVal1", ""}
} );
GuidedDTDRLPersistence p = GuidedDTDRLPersistence.getInstance();
String drl = p.marshal(dt);
assertTrue(drl.indexOf("name in (\"michael\",") > 0);
}
public void testCellCSV() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
assertEquals("(\"Michael\", \"Mark\", \"Peter\")", p.makeInList("Michael, Mark, Peter"));
assertEquals("(\"Michael\")", p.makeInList("Michael"));
assertEquals("(\"Michael\")", p.makeInList("\"Michael\""));
assertEquals("(\"Michael\", \"Ma rk\", \"Peter\")", p.makeInList("Michael, \"Ma rk\", Peter"));
assertEquals("(WEE WAAH)", p.makeInList("(WEE WAAH)"));
}
public void testCellVal() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
assertFalse(p.validCell(null));
assertFalse(p.validCell(""));
assertFalse(p.validCell(" "));
}
public void testName() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
assertEquals("Row 42 XXX", p.getName("XXX", "42"));
assertEquals("Row 42 YYY", p.getName("YYY", "42"));
}
public void testAttribs() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
String[] row = new String[] {"1", "desc", "a", ""};
List<AttributeCol> attributeCols = new ArrayList<AttributeCol>();
RuleModel rm = new RuleModel();
RuleAttribute[] orig = rm.attributes;
p.doAttribs(0,attributeCols, row, rm);
assertSame(orig, rm.attributes);
AttributeCol col1 = new AttributeCol();
col1.attr = "salience";
AttributeCol col2 = new AttributeCol();
col2.attr = "agenda-group";
attributeCols.add(col1);
attributeCols.add(col2);
p.doAttribs(0, attributeCols, row, rm);
assertEquals(1, rm.attributes.length);
assertEquals("salience", rm.attributes[0].attributeName);
assertEquals("a", rm.attributes[0].value);
row = new String[] {"1", "desc", "a", "b"};
p.doAttribs(0, attributeCols, row, rm);
assertEquals(2, rm.attributes.length);
assertEquals("salience", rm.attributes[0].attributeName);
assertEquals("a", rm.attributes[0].value);
assertEquals("agenda-group", rm.attributes[1].attributeName);
assertEquals("b", rm.attributes[1].value);
}
public void testMetaData() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
String[] row = new String[] {"1", "desc", "bar", ""};
List<MetadataCol> metadataCols = new ArrayList<MetadataCol>();
RuleModel rm = new RuleModel();
RuleMetadata[] orig = rm.metadataList;
// RuleAttribute[] orig = rm.attributes;
p.doMetadata(metadataCols, row, rm);
// p.doAttribs(0,metadataCols, row, rm);
assertSame(orig, rm.metadataList);
MetadataCol col1 = new MetadataCol();
col1.attr = "foo";
MetadataCol col2 = new MetadataCol();
col2.attr = "foo2";
metadataCols.add(col1);
metadataCols.add(col2);
p.doMetadata(metadataCols, row, rm);
// p.doAttribs(0, metadataCols, row, rm);
assertEquals(1, rm.metadataList.length);
assertEquals("foo", rm.metadataList[0].attributeName);
assertEquals("bar", rm.metadataList[0].value);
row = new String[] {"1", "desc", "bar1", "bar2"};
p.doMetadata(metadataCols, row, rm);
assertEquals(2, rm.metadataList.length);
assertEquals("foo", rm.metadataList[0].attributeName);
assertEquals("bar1", rm.metadataList[0].value);
assertEquals("foo2", rm.metadataList[1].attributeName);
assertEquals("bar2", rm.metadataList[1].value);
}
public void testLHS() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
String[] row = new String[] {"1", "desc", "a", "mike", "33 + 1", "age > 6", "stilton"};
List<ConditionCol> cols = new ArrayList<ConditionCol>();
ConditionCol col = new ConditionCol();
col.setBoundName( "p1" );
col.setFactType( "Person" );
col.setFactField( "name" );
col.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
col.setOperator( "==" );
cols.add(col);
ConditionCol col2 = new ConditionCol();
col2.setBoundName( "p1" );
col2.setFactType( "Person" );
col2.setFactField( "age" );
col2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_RET_VALUE );
col2.setOperator( "<" );
cols.add(col2);
ConditionCol col3 = new ConditionCol();
col3.setBoundName( "p1" );
col3.setFactType( "Person" );
col3.setConstraintValueType( BaseSingleFieldConstraint.TYPE_PREDICATE );
cols.add(col3);
ConditionCol col4 = new ConditionCol();
col4.setBoundName( "c" );
col4.setFactType( "Cheese" );
col4.setFactField( "type" );
col4.setOperator( "==" );
col4.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
cols.add(col4);
RuleModel rm = new RuleModel();
p.doConditions(1, cols, row, rm);
assertEquals(2, rm.lhs.length);
assertEquals("Person", ((FactPattern)rm.lhs[0]).factType);
assertEquals("p1", ((FactPattern)rm.lhs[0]).boundName);
assertEquals("Cheese", ((FactPattern)rm.lhs[1]).factType);
assertEquals("c", ((FactPattern)rm.lhs[1]).boundName);
//examine the first pattern
FactPattern person = (FactPattern) rm.lhs[0];
assertEquals(3, person.constraintList.constraints.length);
SingleFieldConstraint cons = (SingleFieldConstraint) person.constraintList.constraints[0];
assertEquals(BaseSingleFieldConstraint.TYPE_LITERAL, cons.getConstraintValueType());
assertEquals("name", cons.getFieldName());
assertEquals("==", cons.getOperator());
assertEquals("mike", cons.getValue());
cons = (SingleFieldConstraint) person.constraintList.constraints[1];
assertEquals(BaseSingleFieldConstraint.TYPE_RET_VALUE, cons.getConstraintValueType());
assertEquals("age", cons.getFieldName());
assertEquals("<", cons.getOperator());
assertEquals("33 + 1", cons.getValue());
cons = (SingleFieldConstraint) person.constraintList.constraints[2];
assertEquals(BaseSingleFieldConstraint.TYPE_PREDICATE, cons.getConstraintValueType());
assertEquals("age > 6", cons.getValue());
//examine the second pattern
FactPattern cheese = (FactPattern) rm.lhs[1];
assertEquals(1, cheese.constraintList.constraints.length);
cons = (SingleFieldConstraint) cheese.constraintList.constraints[0];
assertEquals("type", cons.getFieldName());
assertEquals("==", cons.getOperator());
assertEquals("stilton", cons.getValue());
assertEquals(BaseSingleFieldConstraint.TYPE_LITERAL, cons.getConstraintValueType());
}
public void testRHS() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
String[] row = new String[] {"1", "desc", "a", "a condition", "actionsetfield1", "actionsetfield2", "retract", "actioninsertfact1", "actioninsertfact2"};
List<ActionCol> cols = new ArrayList<ActionCol>();
ActionSetFieldCol asf1 = new ActionSetFieldCol();
asf1.setBoundName( "a" );
asf1.setFactField( "field1" );
asf1.setType( SuggestionCompletionEngine.TYPE_STRING );
cols.add(asf1);
ActionSetFieldCol asf2 = new ActionSetFieldCol();
asf2.setBoundName( "a" );
asf2.setFactField( "field2" );
asf2.setUpdate( true );
asf2.setType( SuggestionCompletionEngine.TYPE_NUMERIC );
cols.add(asf2);
ActionRetractFactCol ret = new ActionRetractFactCol();
ret.boundName = "ret";
cols.add(ret);
ActionInsertFactCol ins1 = new ActionInsertFactCol();
ins1.setBoundName( "ins" );
ins1.setFactType( "Cheese" );
ins1.setFactField( "price" );
ins1.setType( SuggestionCompletionEngine.TYPE_NUMERIC );
cols.add(ins1);
ActionInsertFactCol ins2 = new ActionInsertFactCol();
ins2.setBoundName( "ins" );
ins2.setFactType( "Cheese" );
ins2.setFactField( "type" );
ins2.setType( SuggestionCompletionEngine.TYPE_NUMERIC );
cols.add(ins2);
RuleModel rm = new RuleModel();
p.doActions(2, cols, row, rm);
assertEquals(3, rm.rhs.length);
//examine the set field action that is produced
ActionSetField a1 = (ActionSetField) rm.rhs[0];
assertEquals("a", a1.variable);
assertEquals(2, a1.fieldValues.length);
assertEquals("field1", a1.fieldValues[0].field);
assertEquals("actionsetfield1", a1.fieldValues[0].value);
assertEquals(SuggestionCompletionEngine.TYPE_STRING, a1.fieldValues[0].type);
assertEquals("field2", a1.fieldValues[1].field);
assertEquals("actionsetfield2", a1.fieldValues[1].value);
assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, a1.fieldValues[1].type);
//examine the retract
ActionRetractFact a2 = (ActionRetractFact) rm.rhs[1];
assertEquals("ret", a2.variableName);
//examine the insert
ActionInsertFact a3 = (ActionInsertFact) rm.rhs[2];
assertEquals("Cheese", a3.factType);
assertEquals(2, a3.fieldValues.length);
assertEquals("price", a3.fieldValues[0].field);
assertEquals("actioninsertfact1", a3.fieldValues[0].value);
assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, a3.fieldValues[0].type);
assertEquals("type", a3.fieldValues[1].field);
assertEquals("actioninsertfact2", a3.fieldValues[1].value);
assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, a3.fieldValues[1].type);
}
public void testNoConstraints() {
GuidedDecisionTable dt = new GuidedDecisionTable();
ConditionCol c = new ConditionCol();
c.setBoundName( "x" );
c.setFactType( "Context" );
c.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
dt.getConditionCols().add(c);
ActionSetFieldCol asf = new ActionSetFieldCol();
asf.setBoundName( "x" );
asf.setFactField( "age" );
asf.setType( "String" );
dt.getActionCols().add(asf);
String[][] data = new String[][] {
new String[] {"1", "desc", "y", "old"}
};
dt.setData( data );
String drl = GuidedDTDRLPersistence.getInstance().marshal(dt);
//System.err.println(drl);
assertTrue(drl.indexOf("Context( )") > -1);
assertTrue(drl.indexOf("x.setAge") > drl.indexOf("Context( )"));
assertFalse(drl.indexOf("update( x );") > -1);
dt.setData( new String[][] {
new String[] {"1", "desc", "", "old"}
} );
drl = GuidedDTDRLPersistence.getInstance().marshal(dt);
assertEquals(-1, drl.indexOf("Context( )"));
}
public void testUpdateModify() {
GuidedDecisionTable dt = new GuidedDecisionTable();
ConditionCol c = new ConditionCol();
c.setBoundName( "x" );
c.setFactType( "Context" );
c.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
dt.getConditionCols().add(c);
ActionSetFieldCol asf = new ActionSetFieldCol();
asf.setBoundName( "x" );
asf.setFactField( "age" );
asf.setType( "String" );
asf.setUpdate( true );
dt.getActionCols().add(asf);
String[][] data = new String[][] {
new String[] {"1", "desc", "y", "old"}
};
dt.setData( data );
String drl = GuidedDTDRLPersistence.getInstance().marshal(dt);
System.err.println(drl);
assertTrue(drl.indexOf("Context( )") > -1);
assertTrue(drl.indexOf("x.setAge") > drl.indexOf("Context( )"));
dt.setData( new String[][] {
new String[] {"1", "desc", "", "old"}
} );
drl = GuidedDTDRLPersistence.getInstance().marshal(dt);
assertEquals(-1, drl.indexOf("Context( )"));
assertTrue(drl.indexOf("update( x );") > -1);
}
public void testNoOperator() {
GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
String[] row = new String[] {"1", "desc", "a", "> 42", "33 + 1", "age > 6", "stilton"};
List<ConditionCol> cols = new ArrayList<ConditionCol>();
ConditionCol col2 = new ConditionCol();
col2.setBoundName( "p1" );
col2.setFactType( "Person" );
col2.setFactField( "age" );
col2.setConstraintValueType( BaseSingleFieldConstraint.TYPE_LITERAL );
col2.setOperator( "" );
cols.add(col2);
RuleModel rm = new RuleModel();
p.doConditions(1, cols, row, rm);
String drl = BRDRLPersistence.getInstance().marshal(rm);
assertTrue(drl.indexOf("age > \"42\"") > 0);
}
}