package org.crazycake.formSqlBuilder.utils; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import org.crazycake.formSqlBuilder.model.QueryNode; import org.crazycake.formSqlBuilder.model.Rule; import org.crazycake.formSqlBuilder.model.enums.Operator; import org.crazycake.formSqlBuilder.model.enums.Relation; import org.crazycake.formSqlBuilder.testvo.Person; import org.junit.Test; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; public class RuleMatchUtilsTest { @Test public void testWildcardMatch() throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{ Person tommy = new Person("tommy", 18, "new york", 0); tommy.setAfterThat("2011-12-12"); Rule rule1 = new Rule(); rule1.setField("integer:activeStatus"); rule1.setOp(Operator.EQUAL); rule1.setRel(Relation.AND); //integer QueryNode queryNode = RuleMatchUtils.fullnameMatch(pickField(tommy,"activeStatus"), rule1, tommy); assertThat("activeStatus should be matched!", queryNode, is(notNullValue())); //Integer Rule capitalRule = new Rule("Integer:activeStatus", Operator.EQUAL, Relation.AND); QueryNode capitalQueryNode = RuleMatchUtils.fullnameMatch(pickField(tommy,"activeStatus"), capitalRule, tommy); assertThat("activeStatus should be matched!", capitalQueryNode, is(notNullValue())); //after* -> afterThat Rule wildcardBeginRule = new Rule("*:after*", Operator.EQUAL, Relation.AND); QueryNode afterQueryNode = RuleMatchUtils.wildcardMatch(pickField(tommy,"afterThat"), wildcardBeginRule, tommy); assertThat("afterThat should be matched!", afterQueryNode, is(notNullValue())); //*From -> BirthdayFrom Rule wildcardEndRule = new Rule("*:*From", Operator.EQUAL, Relation.AND); QueryNode wildcardEndQueryNode = RuleMatchUtils.wildcardMatch(pickField(tommy,"birthdayFrom"), wildcardEndRule, tommy); assertThat("birthdayFrom should be matched!", wildcardEndQueryNode, is(notNullValue())); } private Field pickField(Object form,String fieldName){ Field[] fields = form.getClass().getDeclaredFields(); for(Field f:fields){ if(f.getName().equals(fieldName)){ return f; } } return null; } }