1   package org.weda.store;
2   
3   import java.util.Arrays;
4   import org.weda.test.WedaTestCase;
5   import org.weda.property.ObjectDescriptorRegistry;
6   import org.weda.converter.ValueTypeConverter;
7   import org.weda.store.QueryFilterElement.OperatorType;
8   import org.weda.store.impl.QueryFilterElementImpl;
9   import org.weda.domain.Company;
10  import org.weda.store.QueryFilterElement.ExpressionType;
11  
12  
13  /**
14   *
15   * @author tim
16   */
17  public class QueryFilterElementTest extends WedaTestCase {
18      QueryFilterElementImpl filterElement;
19      ObjectDescriptorRegistry descReg;
20      
21      public QueryFilterElementTest(String name) throws Exception {
22          super(name);
23      }
24      
25      public void setUp() throws Exception {
26          ValueTypeConverter converter = 
27                  (ValueTypeConverter)registry
28                      .getService(ValueTypeConverter.class);
29          filterElement=new QueryFilterElementImpl();
30          filterElement.setObjectAlias("company");
31          descReg = (ObjectDescriptorRegistry)
32              registry.getService(ObjectDescriptorRegistry.class);        
33      }
34      
35      public void test_operatorExpression1() throws Exception {
36          filterElement.setProperty("id");
37          //filterElement.setParameterName("param1");
38          filterElement.setPropertyDescriptor(
39                  descReg.getPropertyDescriptor(Company.class, "id"));
40          
41          filterElement.setExpression(">5");
42          //assertEquals("company.id > :param1", filterElement.getFilter());
43          assertEquals(">5", filterElement.getExpression());
44          assertEquals(ExpressionType.OPERATOR, filterElement.getExpressionType());
45          assertEquals(OperatorType.SIMPLE, filterElement.getOperatorType());
46          assertEquals(">", filterElement.getOperator());
47          assertEquals(5l, filterElement.getParameterValue());
48          
49          filterElement.setExpression("5");
50          assertEquals(ExpressionType.OPERATOR, filterElement.getExpressionType());
51          assertEquals(OperatorType.SIMPLE, filterElement.getOperatorType());
52          assertEquals("=", filterElement.getOperator());
53          //assertEquals("company.id = :param1", filterElement.getFilter());
54          assertEquals(5l, filterElement.getParameterValue());
55      }
56      
57      public void test_operatorExpression2() throws Exception {
58          filterElement.setProperty("name");
59          //filterElement.setParameterName("param1");
60          filterElement.setPropertyDescriptor(
61                  descReg.getPropertyDescriptor(Company.class, "name"));
62          
63          filterElement.setExpression("%test");
64          //assertEquals("company.name LIKE :param1", filterElement.getFilter());
65          assertEquals(ExpressionType.OPERATOR, filterElement.getExpressionType());
66          assertTrue(filterElement.getOperatorType()==OperatorType.LIKE);
67          assertEquals("%test", filterElement.getParameterValue());
68      }
69      
70      public void test_betweenOperator() throws Exception {
71          filterElement.setProperty("id");
72          filterElement.setPropertyDescriptor(
73                  descReg.getPropertyDescriptor(Company.class, "id"));
74          filterElement.setExpression("[ 5, 10  ]");
75          assertEquals(
76                  ExpressionType.OPERATOR, filterElement.getExpressionType());
77          assertEquals(OperatorType.BETWEEN, filterElement.getOperatorType());
78          Arrays.equals(new Object[]{5,10}, (Object[])filterElement.getValue());
79      }
80      
81      public void test_inOperator() throws Exception {
82          filterElement.setProperty("id");
83          filterElement.setPropertyDescriptor(
84                  descReg.getPropertyDescriptor(Company.class, "id"));
85          filterElement.setExpression("{ 1,  10,2  }");
86          assertEquals(
87                  ExpressionType.OPERATOR, filterElement.getExpressionType());
88          assertEquals(OperatorType.IN, filterElement.getOperatorType());
89          Arrays.equals(new Object[]{1,10,2}, (Object[])filterElement.getValue());
90      }
91      
92      public void test_completeExpression() throws Exception {
93          filterElement.setProperty("id");
94          //filterElement.setParameterName("param1");
95          filterElement.setPropertyDescriptor(
96                  descReg.getPropertyDescriptor(Company.class, "id"));
97          
98          filterElement.setExpression("#between 1 and 5");
99          assertEquals(ExpressionType.COMPLETE, filterElement.getExpressionType());
100         assertEquals("between 1 and 5", filterElement.getValue());
101     }
102     
103 }