1   /*
2    * The SmartWeb Framework
3    * Copyright (C) 2004-2006
4    *
5    * This library is free software; you can redistribute it and/or
6    * modify it under the terms of the GNU Lesser General Public
7    * License as published by the Free Software Foundation; either
8    * version 2.1 of the License, or (at your option) any later version.
9    *
10   * This library is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   * Lesser General Public License for more details.
14   *
15   * You should have received a copy of the GNU Lesser General Public
16   * License along with this library; if not, write to the Free Software
17   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18   *
19   * For further informations on the SmartWeb Framework please visit
20   *
21   *                        http://smartweb.sourceforge.net
22   */
23  package net.smartlab.web;
24  
25  import java.util.ArrayList;
26  import java.util.Collection;
27  
28  import junit.framework.TestCase;
29  import net.smartlab.web.DataAccessObject.SearchInfo;
30  
31  
32  /**
33   * @TODO documentation
34   * @author rlogiacco
35   *
36   */
37  public class DataAccessObjectSearchInfoTest extends TestCase {
38  
39  	SearchInfo info;
40  	
41  	/**
42  	 * @see junit.framework.TestCase#setUp()
43  	 */
44  	protected void setUp() throws Exception {
45  		super.setUp();
46  		info = new SearchInfo();
47  	}
48  
49  	/**
50  	 * @see junit.framework.TestCase#tearDown()
51  	 */
52  	protected void tearDown() throws Exception {
53  		super.tearDown();
54  	}
55  	
56  	/**
57  	 * Test method for {@link net.smartlab.web.DataAccessObject.SearchInfo#addFilter(java.lang.String)}.
58  	 */
59  	public void testAddFilterNoValues() {
60  		SearchInfo.Filter filter = null;
61  		info.addFilter("property!\\");
62  		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
63  		super.assertEquals(1, filter.getValues().length);
64  		super.assertEquals("", filter.getValues()[0]);
65  		info.getFilters().clear();
66  		
67  		info.addFilter("property=");
68  		super.assertEquals(0, info.getFilters().size());
69  		info.getFilters().clear();
70  		
71  		info.addFilter("property", SearchInfo.EQUALS, (String)null);
72  		super.assertEquals(0, info.getFilters().size());
73  		info.getFilters().clear();
74  	}
75  
76  	/**
77  	 * Test method for {@link net.smartlab.web.DataAccessObject.SearchInfo#setFilters(java.lang.String[])}.
78  	 */
79  	public void testSetFiltersStringArray() {
80  		Collection filters = new ArrayList();
81  		filters.add("property=name");
82  		filters.add("property!surname");
83  		filters.add("number>1");
84  		filters.add("number>=1");
85  		filters.add("number<100");
86  		filters.add("number<=100");
87  		filters.add("number<100");
88  		filters.add("property%something");
89  		filters.add("property%%something");
90  		filters.add("date|now,end-of-life");
91  		filters.add("property!myname,yourname");
92  		filters.add("property!anyname,");
93  		filters.add("property=NULL");
94  		filters.add("property!NULL,");
95  		info.setFilters((String[])filters.toArray(new String[0]));
96  		super.assertEquals(14, info.getFilters().size());
97  	}
98  
99  	/**
100 	 * Test method for {@link net.smartlab.web.DataAccessObject.SearchInfo#addFilter(java.lang.String)}.
101 	 */
102 	public void testAddFilterString() {
103 		SearchInfo.Filter filter = null;
104 		info.addFilter("property!myname ,your name, ");
105 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
106 		super.assertEquals("property", filter.getProperty());
107 		super.assertEquals(SearchInfo.NOT_EQUALS, filter.getCondition());
108 		super.assertEquals(3, filter.getValues().length);
109 		super.assertEquals("myname ", filter.getValues()[0]);
110 		super.assertEquals("your name", filter.getValues()[1]);
111 		super.assertEquals(" ", filter.getValues()[2]);
112 		info.getFilters().clear();
113 		
114 		info.addFilter("property%\\%myname% ,%yourname%, %");
115 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
116 		super.assertEquals("property", filter.getProperty());
117 		super.assertEquals(SearchInfo.LIKE, filter.getCondition());
118 		super.assertEquals(3, filter.getValues().length);
119 		super.assertEquals("%myname% ", filter.getValues()[0]);
120 		super.assertEquals("%yourname%", filter.getValues()[1]);
121 		super.assertEquals(" %", filter.getValues()[2]);
122 		info.getFilters().clear();
123 		
124 		info.addFilter("property>!=myname\t  \r");
125 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
126 		super.assertEquals("property", filter.getProperty());
127 		super.assertEquals(SearchInfo.GREATER, filter.getCondition());
128 		super.assertEquals(1, filter.getValues().length);
129 		super.assertEquals("!=myname\t  \r", filter.getValues()[0]);
130 		info.getFilters().clear();
131 		
132 		info.addFilter("property>=%!myname%,%yourname%,1");
133 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
134 		super.assertEquals("property", filter.getProperty());
135 		super.assertEquals(SearchInfo.GREATER_EQUALS, filter.getCondition());
136 		super.assertEquals(3, filter.getValues().length);
137 		super.assertEquals("%!myname%", filter.getValues()[0]);
138 		super.assertEquals("%yourname%", filter.getValues()[1]);
139 		super.assertEquals("1", filter.getValues()[2]);
140 		info.getFilters().clear();
141 		
142 		// silently drop unparseable strings
143 		info.addFilter("property^myname,yourname,1");
144 		super.assertEquals(0, info.getFilters().size());
145 
146 		info.addFilter("property=NULL");
147 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
148 		super.assertEquals("property", filter.getProperty());
149 		super.assertEquals(SearchInfo.NULL, filter.getCondition());
150 		super.assertNull(filter.getValues());
151 		info.getFilters().clear();
152 
153 		info.addFilter("property!NULL");
154 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
155 		super.assertEquals("property", filter.getProperty());
156 		super.assertEquals(SearchInfo.NOT_NULL, filter.getCondition());
157 		super.assertNull(filter.getValues());
158 		info.getFilters().clear();
159 		
160 		info.addFilter("property%%myname% ,%yourname%, %");
161 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
162 		super.assertEquals("property", filter.getProperty());
163 		super.assertEquals(SearchInfo.ILIKE, filter.getCondition());
164 		super.assertEquals(3, filter.getValues().length);
165 		super.assertEquals("myname% ", filter.getValues()[0]);
166 		super.assertEquals("%yourname%", filter.getValues()[1]);
167 		super.assertEquals(" %", filter.getValues()[2]);
168 		info.getFilters().clear();
169 		
170 		info.addFilter("property>\\=%!\\myname\\%,%your\\\\name%,1");
171 		filter = (SearchInfo.Filter)info.getFilters().toArray()[0];
172 		super.assertEquals(SearchInfo.GREATER, filter.getCondition());
173 		super.assertEquals(3, filter.getValues().length);
174 		super.assertEquals("=%!myname%", filter.getValues()[0]);
175 		super.assertEquals("%your\\name%", filter.getValues()[1]);
176 		super.assertEquals("1", filter.getValues()[2]);
177 		info.getFilters().clear();
178 		
179 	}
180 
181 	/**
182 	 * Test method for {@link net.smartlab.web.DataAccessObject.SearchInfo#setOrder(java.lang.String)}.
183 	 */
184 	public void testSetOrder() {
185 		info.setOrder("property");
186 		super.assertEquals("property", info.getOrder());
187 		super.assertFalse(info.isDescendant());
188 
189 		info.setOrder("!property");
190 		super.assertEquals("property", info.getOrder());
191 		super.assertTrue(info.isDescendant());
192 		
193 		info.setOrder("");
194 		super.assertEquals(null, info.getOrder());
195 	}
196 
197 	/**
198 	 * Test method for {@link net.smartlab.web.DataAccessObject.SearchInfo#setUnion(java.lang.String)}.
199 	 */
200 	public void testSetUnion() {
201 		info.setUnion("AND");
202 		super.assertFalse(info.isUnion());
203 
204 		info.setUnion("OR");
205 		super.assertTrue(info.isUnion());
206 		
207 		info.setUnion("Or");
208 		super.assertTrue(info.isUnion());
209 		
210 		info.setUnion("or");
211 		super.assertTrue(info.isUnion());
212 		
213 		info.setUnion("true");
214 		super.assertTrue(info.isUnion());
215 		
216 		info.setUnion("x");
217 		super.assertFalse(info.isUnion());
218 	}
219 }