KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > QueryConvertorTest


1 package org.mmbase.util;
2
3 import junit.framework.*;
4 import java.util.*;
5 import org.mmbase.module.core.*;
6 import org.mmbase.module.corebuilders.*;
7 import org.mmbase.storage.search.*;
8 import org.mmbase.storage.search.implementation.*;
9
10 /**
11  * JUnit tests.
12  *
13  * @author Rob van Maris
14  * @version $Revision: 1.5 $
15  */

16 public class QueryConvertorTest extends TestCase {
17
18     private final static String JavaDoc IMAGES = "images";
19
20     private MMBase mmbase = null;
21     private MMObjectBuilder images = null;
22     private FieldDefs imagesNumber = null;
23     private FieldDefs imagesTitle = null;
24     private ClusterBuilder clusterBuilder = null;
25
26     public QueryConvertorTest(java.lang.String JavaDoc testName) {
27         super(testName);
28     }
29
30     public static void main(java.lang.String JavaDoc[] args) {
31         junit.textui.TestRunner.run(suite());
32         System.exit(0);
33     }
34
35     /**
36      * Sets up before each test.
37      */

38     public void setUp() throws Exception JavaDoc {
39         MMBaseContext.init();
40         mmbase = MMBase.getMMBase();
41         images = mmbase.getBuilder(IMAGES);
42         imagesNumber = images.getField("number");
43         imagesTitle = images.getField("title");
44         clusterBuilder = mmbase.getClusterBuilder();
45     }
46
47     /**
48      * Tears down after each test.
49      */

50     public void tearDown() throws Exception JavaDoc {}
51
52     /** Test of setConstraint() method, of class org.mmbase.util.QueryConvertor. */
53     public void testSetConstraint() {
54         List tables = Arrays.asList(
55             new Object JavaDoc[] {"news", "related", "images", "insrel", "news0"});
56         List empty = new ArrayList(0);
57         BasicSearchQuery query = clusterBuilder.getMultiLevelSearchQuery(
58             empty, empty, null, tables, null,
59             empty, empty, ClusterBuilder.SEARCH_ALL);
60
61         // Altavista format.
62
altaVistaSearchQueryTests();
63         QueryConvertor.setConstraint(query,
64             "news.title=E'test1'+related.number=E10+images.number=E10+news0.title=E'test2'");
65         CompositeConstraint composite
66             = (CompositeConstraint) query.getConstraint();
67         assertTrue(composite.getLogicalOperator()
68             == CompositeConstraint.LOGICAL_AND);
69         List constraints = composite.getChilds();
70         assertTrue(constraints.size() == 4);
71         FieldValueConstraint constraint0
72             = (FieldValueConstraint) constraints.get(0);
73         assertTrue(constraint0.toString(),
74             constraint0.getField().getStep().getTableName().equals("news"));
75         assertTrue(constraint0.toString(),
76             constraint0.getField().getStep().getAlias().equals("news"));
77         assertTrue(constraint0.toString(),
78             constraint0.getField().getFieldName().equals("title"));
79         assertTrue(constraint0.getField().toString(),
80             constraint0.getField().getAlias() == null);
81         assertTrue(constraint0.toString(),
82             constraint0.getOperator() == FieldCompareConstraint.LIKE);
83         assertTrue(constraint0.toString(),
84             !constraint0.isCaseSensitive());
85         assertTrue(constraint0.toString(),
86             constraint0.getValue().equals("test1"));
87         FieldValueConstraint constraint1
88             = (FieldValueConstraint) constraints.get(1);
89         assertTrue(constraint1.toString(),
90             constraint1.getField().getStep().getTableName().equals("insrel"));
91         assertTrue(constraint1.toString(),
92             constraint1.getField().getStep().getAlias().equals("related"));
93         assertTrue(constraint1.toString(),
94             constraint1.getField().getFieldName().equals("number"));
95         assertTrue(constraint1.getField().toString(),
96             constraint1.getField().getAlias() == null);
97         assertTrue(constraint1.toString(),
98             constraint1.getOperator() == FieldCompareConstraint.EQUAL);
99         assertTrue(constraint1.toString(),
100             constraint1.getValue().equals(new Double JavaDoc(10)));
101         FieldValueConstraint constraint2
102             = (FieldValueConstraint) constraints.get(2);
103         assertTrue(constraint2.toString(),
104             constraint2.getField().getStep().getTableName().equals("images"));
105         assertTrue(constraint2.toString(),
106             constraint2.getField().getStep().getAlias().equals("images"));
107         assertTrue(constraint2.toString(),
108             constraint2.getField().getFieldName().equals("number"));
109         assertTrue(constraint2.getField().toString(),
110             constraint2.getField().getAlias() == null);
111         assertTrue(constraint2.toString(),
112             constraint2.getOperator() == FieldCompareConstraint.EQUAL);
113         assertTrue(constraint2.toString(),
114             constraint2.getValue().equals(new Double JavaDoc(10)));
115         FieldValueConstraint constraint3
116             = (FieldValueConstraint) constraints.get(3);
117         assertTrue(constraint3.toString(),
118             constraint3.getField().getStep().getTableName().equals("news"));
119         assertTrue(constraint3.toString(),
120             constraint3.getField().getStep().getAlias().equals("news0"));
121         assertTrue(constraint3.toString(),
122             constraint3.getField().getFieldName().equals("title"));
123         assertTrue(constraint3.getField().toString(),
124             constraint3.getField().getAlias() == null);
125         assertTrue(constraint0.getOperator() == FieldCompareConstraint.LIKE);
126         assertTrue(constraint3.toString(),
127             !constraint3.isCaseSensitive());
128         assertTrue(constraint3.toString(),
129             constraint3.getValue().equals("test2"));
130
131         // Where string.
132
QueryConvertor.setConstraint(query,
133             "WHERE LOWER(news.title) LIKE 'test1' AND related.number=10"
134                 + " AND images.number=10 AND LOWER(news0.title) LIKE 'test2'");
135         composite = (CompositeConstraint) query.getConstraint();
136         assertTrue(composite.getLogicalOperator()
137             == CompositeConstraint.LOGICAL_AND);
138         constraints = composite.getChilds();
139         assertTrue(constraints.size() == 4);
140         constraint0 = (FieldValueConstraint) constraints.get(0);
141         assertTrue(constraint0.toString(),
142             constraint0.getField().getStep().getTableName().equals("news"));
143         assertTrue(constraint0.toString(),
144             constraint0.getField().getStep().getAlias().equals("news"));
145         assertTrue(constraint0.toString(),
146             constraint0.getField().getFieldName().equals("title"));
147         assertTrue(constraint0.getField().toString(),
148             constraint0.getField().getAlias() == null);
149         assertTrue(constraint0.toString(),
150             constraint0.getOperator() == FieldCompareConstraint.LIKE);
151         assertTrue(constraint0.toString(),
152             !constraint0.isCaseSensitive());
153         assertTrue(constraint0.toString(),
154             constraint0.getValue().equals("test1"));
155         constraint1 = (FieldValueConstraint) constraints.get(1);
156         assertTrue(constraint1.toString(),
157             constraint1.getField().getStep().getTableName().equals("insrel"));
158         assertTrue(constraint1.toString(),
159             constraint1.getField().getStep().getAlias().equals("related"));
160         assertTrue(constraint1.toString(),
161             constraint1.getField().getFieldName().equals("number"));
162         assertTrue(constraint1.getField().toString(),
163             constraint1.getField().getAlias() == null);
164         assertTrue(constraint1.toString(),
165             constraint1.getOperator() == FieldCompareConstraint.EQUAL);
166         assertTrue(constraint1.toString(),
167             constraint1.getValue().equals(new Double JavaDoc(10)));
168         constraint2 = (FieldValueConstraint) constraints.get(2);
169         assertTrue(constraint2.toString(),
170             constraint2.getField().getStep().getTableName().equals("images"));
171         assertTrue(constraint2.toString(),
172             constraint2.getField().getStep().getAlias().equals("images"));
173         assertTrue(constraint2.toString(),
174             constraint2.getField().getFieldName().equals("number"));
175         assertTrue(constraint2.getField().toString(),
176             constraint2.getField().getAlias() == null);
177         assertTrue(constraint2.toString(),
178             constraint2.getOperator() == FieldCompareConstraint.EQUAL);
179         assertTrue(constraint2.toString(),
180             constraint2.getValue().equals(new Double JavaDoc(10)));
181         constraint3 = (FieldValueConstraint) constraints.get(3);
182         assertTrue(constraint3.toString(),
183             constraint3.getField().getStep().getTableName().equals("news"));
184         assertTrue(constraint3.toString(),
185             constraint3.getField().getStep().getAlias().equals("news0"));
186         assertTrue(constraint3.toString(),
187             constraint3.getField().getFieldName().equals("title"));
188         assertTrue(constraint3.getField().toString(),
189             constraint3.getField().getAlias() == null);
190         assertTrue(constraint0.getOperator() == FieldCompareConstraint.LIKE);
191         assertTrue(constraint3.toString(),
192             !constraint3.isCaseSensitive());
193         assertTrue(constraint3.toString(),
194             constraint3.getValue().equals("test2"));
195
196         // "where(", without space following "where".
197
QueryConvertor.setConstraint(query,
198             "WHERE(LOWER(news.title) LIKE 'test1' AND related.number=10"
199                 + " AND images.number=10 AND LOWER(news0.title) LIKE 'test2'");
200         composite = (CompositeConstraint) query.getConstraint();
201         assertTrue(composite.getLogicalOperator()
202             == CompositeConstraint.LOGICAL_AND);
203         constraints = composite.getChilds();
204         assertTrue(constraints.size() == 4);
205         constraint0 = (FieldValueConstraint) constraints.get(0);
206         assertTrue(constraint0.toString(),
207             constraint0.getField().getStep().getTableName().equals("news"));
208         assertTrue(constraint0.toString(),
209             constraint0.getField().getStep().getAlias().equals("news"));
210         assertTrue(constraint0.toString(),
211             constraint0.getField().getFieldName().equals("title"));
212         assertTrue(constraint0.getField().toString(),
213             constraint0.getField().getAlias() == null);
214         assertTrue(constraint0.toString(),
215             constraint0.getOperator() == FieldCompareConstraint.LIKE);
216         assertTrue(constraint0.toString(),
217             !constraint0.isCaseSensitive());
218         assertTrue(constraint0.toString(),
219             constraint0.getValue().equals("test1"));
220         constraint1 = (FieldValueConstraint) constraints.get(1);
221         assertTrue(constraint1.toString(),
222             constraint1.getField().getStep().getTableName().equals("insrel"));
223         assertTrue(constraint1.toString(),
224             constraint1.getField().getStep().getAlias().equals("related"));
225         assertTrue(constraint1.toString(),
226             constraint1.getField().getFieldName().equals("number"));
227         assertTrue(constraint1.getField().toString(),
228             constraint1.getField().getAlias() == null);
229         assertTrue(constraint1.toString(),
230             constraint1.getOperator() == FieldCompareConstraint.EQUAL);
231         assertTrue(constraint1.toString(),
232             constraint1.getValue().equals(new Double JavaDoc(10)));
233         constraint2 = (FieldValueConstraint) constraints.get(2);
234         assertTrue(constraint2.toString(),
235             constraint2.getField().getStep().getTableName().equals("images"));
236         assertTrue(constraint2.toString(),
237             constraint2.getField().getStep().getAlias().equals("images"));
238         assertTrue(constraint2.toString(),
239             constraint2.getField().getFieldName().equals("number"));
240         assertTrue(constraint2.getField().toString(),
241             constraint2.getField().getAlias() == null);
242         assertTrue(constraint2.toString(),
243             constraint2.getOperator() == FieldCompareConstraint.EQUAL);
244         assertTrue(constraint2.toString(),
245             constraint2.getValue().equals(new Double JavaDoc(10)));
246         constraint3 = (FieldValueConstraint) constraints.get(3);
247         assertTrue(constraint3.toString(),
248             constraint3.getField().getStep().getTableName().equals("news"));
249         assertTrue(constraint3.toString(),
250             constraint3.getField().getStep().getAlias().equals("news0"));
251         assertTrue(constraint3.toString(),
252             constraint3.getField().getFieldName().equals("title"));
253         assertTrue(constraint3.getField().toString(),
254             constraint3.getField().getAlias() == null);
255         assertTrue(constraint0.getOperator() == FieldCompareConstraint.LIKE);
256         assertTrue(constraint3.toString(),
257             !constraint3.isCaseSensitive());
258         assertTrue(constraint3.toString(),
259             constraint3.getValue().equals("test2"));
260     }
261
262     /**
263      * Tests setConstraint() method, of class org.mmbase.util.QueryConvertor,
264      * specifically for constraints in altavista format, with search queries
265      * involving a single step.
266      */

267     private void altaVistaSearchQueryTests() {
268         NodeSearchQuery query1 = new NodeSearchQuery(images);
269         NodeSearchQuery query2 = new NodeSearchQuery(images);
270
271         // Empty constraint.
272
QueryConvertor.setConstraint(query2, "");
273         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
274             query1.equals(query2));
275
276         // Single constraint on textfield with wildcards.
277
BasicFieldValueConstraint constraint1
278             = (BasicFieldValueConstraint)
279             new BasicFieldValueConstraint(query1.getField(imagesTitle), "t_st%")
280                 .setOperator(FieldCompareConstraint.LIKE)
281                 .setCaseSensitive(false);
282         query1.setConstraint(constraint1);
283         QueryConvertor.setConstraint(query2, "title=E't?st*'");
284         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
285             query1.equals(query2));
286
287         // Combined constraints (using AND), field prefixed by step alias.
288
BasicCompositeConstraint composite1 = new BasicCompositeConstraint(
289             CompositeConstraint.LOGICAL_AND);
290         query1.setConstraint(composite1);
291         composite1.addChild(constraint1);
292         BasicFieldValueConstraint constraint2
293             = (BasicFieldValueConstraint)
294             new BasicFieldValueConstraint(
295                     query1.getField(imagesNumber), new Double JavaDoc("1.11"))
296                 .setOperator(FieldCompareConstraint.LESS_EQUAL);
297         composite1.addChild(constraint2);
298         query1.getField(imagesNumber);
299         QueryConvertor.setConstraint(query2,
300             "title=E't?st*'+images.number=s1.11");
301         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
302             query1.equals(query2));
303
304         // Using AND NOT.
305
constraint2.setInverse(true);
306         QueryConvertor.setConstraint(query2,
307             "title=E't?st*'-images.number=s1.11");
308         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
309             query1.equals(query2));
310
311         // Additional subconstraint.
312
BasicFieldValueConstraint constraint3
313             = (BasicFieldValueConstraint)
314             new BasicFieldValueConstraint(query1.getField(imagesNumber), new Double JavaDoc("100"))
315                 .setOperator(FieldCompareConstraint.NOT_EQUAL);
316         composite1.addChild(constraint3);
317         QueryConvertor.setConstraint(query2,
318             "title=E't?st*'-images.number=s1.11+number=N100");
319         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
320             query1.equals(query2));
321
322         // Additional subconstraint (using OR).
323
BasicCompositeConstraint composite2 = new BasicCompositeConstraint(
324             CompositeConstraint.LOGICAL_OR);
325         composite2.addChild(composite1);
326         query1.setConstraint(composite2);
327         BasicFieldValueConstraint constraint4
328             = (BasicFieldValueConstraint)
329             new BasicFieldValueConstraint(query1.getField(imagesNumber), new Double JavaDoc("200"))
330                 .setOperator(FieldCompareConstraint.EQUAL);
331         composite2.addChild(constraint4);
332         QueryConvertor.setConstraint(query2,
333             "title=E't?st*'-images.number=s1.11+number=N100|number=E200");
334         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
335             query1.equals(query2));
336
337         // Additional subconstraint.
338
BasicCompositeConstraint composite3 = new BasicCompositeConstraint(
339             CompositeConstraint.LOGICAL_AND);
340         composite3.addChild(composite2);
341         query1.setConstraint(composite3);
342         BasicFieldValueConstraint constraint5
343             = (BasicFieldValueConstraint)
344             new BasicFieldValueConstraint(query1.getField(imagesNumber), new Double JavaDoc("0"))
345                 .setOperator(FieldCompareConstraint.GREATER)
346                 .setInverse(true);
347         composite3.addChild(constraint5);
348         QueryConvertor.setConstraint(query2,
349             "title=E't?st*'-images.number=s1.11+number=N100|number=E200-number=G0");
350         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
351             query1.equals(query2));
352
353         // Inverse subconstraint.
354
constraint5.setInverse(false);
355         QueryConvertor.setConstraint(query2,
356             "title=E't?st*'-images.number=s1.11+number=N100|number=E200+number=G0");
357         assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(),
358             query1.equals(query2));
359     }
360
361     public static Test suite() {
362         TestSuite suite = new TestSuite(QueryConvertorTest.class);
363
364         return suite;
365     }
366
367 }
368
Popular Tags