KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > db4ounit > jre12 > collections > custom > Db4oHashMapTestCase


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

21 package com.db4o.db4ounit.jre12.collections.custom;
22
23 import java.util.*;
24
25 import com.db4o.*;
26 import com.db4o.db4ounit.common.sampledata.*;
27 import com.db4o.ext.*;
28 import com.db4o.query.*;
29 import com.db4o.types.*;
30
31 import db4ounit.*;
32 import db4ounit.extensions.*;
33
34 /**
35  *
36  */

37 public class Db4oHashMapTestCase extends AbstractDb4oTestCase {
38
39     public static class Data {
40         Map i_map;
41         Db4oHashMapHelper i_helper;
42     }
43     
44     public static class Db4oHashMapHelper {
45         public Db4oHashMapHelper i_child;
46
47         public List i_childList;
48
49     }
50
51     static final int COUNT = 10;
52
53     static final String JavaDoc[] DEFAULT = { "wow", "cool", "great" };
54
55     static final String JavaDoc MORE = "more and more ";
56
57
58     protected void store() {
59         Data data=new Data();
60         data.i_map = db().collections().newHashMap(10);
61         setDefaultValues(data.i_map);
62         data.i_helper = helper(10);
63         store(data);
64     }
65
66     private Db4oHashMapHelper helper(int a_depth) {
67         if (a_depth > 0) {
68             Db4oHashMapHelper helper = new Db4oHashMapHelper();
69             helper.i_childList = db().collections().newLinkedList();
70             helper.i_childList.add("hi");
71             helper.i_child = helper(a_depth - 1);
72             return helper;
73         }
74         return null;
75     }
76
77     private void setDefaultValues(Map a_map) {
78         for (int i = 0; i < DEFAULT.length; i++) {
79             a_map.put(DEFAULT[i], new AtomData(DEFAULT[i]));
80         }
81     }
82
83     public void test() throws Exception JavaDoc {
84         Data data=(Data)retrieveOnlyInstance(Data.class);
85         
86         checkHelper(data.i_helper);
87         runElementTest(data,true);
88
89         store(data);
90         store(data.i_helper);
91         db().commit();
92
93         checkHelper(data.i_helper);
94         runElementTest(data,false);
95     }
96
97     private void runElementTest(Data data,boolean onOriginal) throws Exception JavaDoc {
98
99         Map otherMap = new HashMap();
100
101         AtomData atom = null;
102
103         tDefaultValues(data);
104
105         int itCount = 0;
106         Iterator i = data.i_map.keySet().iterator();
107         while (i.hasNext()) {
108             String JavaDoc str = (String JavaDoc) i.next();
109             itCount++;
110             atom = (AtomData) data.i_map.get(str);
111             Assert.areEqual(str,atom.name);
112             otherMap.put(str, atom);
113         }
114         Assert.areEqual(DEFAULT.length,itCount);
115
116         Assert.areEqual(DEFAULT.length,data.i_map.size());
117         Assert.isFalse(data.i_map.isEmpty());
118         db().deactivate(data.i_map, Integer.MAX_VALUE);
119         data.i_map.get("great");
120         Assert.areEqual("great",((AtomData) data.i_map.get("great")).name);
121         db().deactivate(data.i_map, Integer.MAX_VALUE);
122
123         if (onOriginal) {
124             Query q = newQuery();
125             Data template = new Data();
126             template.i_map = db().collections().newHashMap(1);
127             template.i_map.put("cool", new AtomData("cool"));
128             q.constrain(template);
129             ObjectSet qResult = q.execute();
130             Assert.areEqual(1,qResult.size());
131             Assert.areEqual(data,qResult.next());
132         }
133
134         Assert.isTrue(data.i_map.keySet().containsAll(otherMap.keySet()));
135
136         Object JavaDoc[] arr = data.i_map.keySet().toArray();
137         tDefaultArray(arr);
138
139         String JavaDoc[] cmp = new String JavaDoc[DEFAULT.length];
140         System.arraycopy(DEFAULT, 0, cmp, 0, DEFAULT.length);
141
142         i = data.i_map.keySet().iterator();
143         while (i.hasNext()) {
144             String JavaDoc str = (String JavaDoc) i.next();
145             boolean found = false;
146             for (int j = 0; j < cmp.length; j++) {
147                 if (str.equals(cmp[j])) {
148                     cmp[j] = null;
149                     found = true;
150                 }
151             }
152             Assert.isTrue(found);
153         }
154
155         for (int j = 0; j < cmp.length; j++) {
156             Assert.isNull(cmp[j]);
157         }
158
159         db().deactivate(data.i_map, Integer.MAX_VALUE);
160         Assert.isFalse(data.i_map.isEmpty());
161         db().deactivate(data.i_map, Integer.MAX_VALUE);
162         data.i_map.put("yup", new AtomData("yup"));
163
164         db().set(this);
165         db().set(this);
166         db().set(this);
167         db().set(data.i_map);
168         db().set(data.i_map);
169         db().set(data.i_map);
170         db().set(data.i_helper);
171         db().set(data.i_helper);
172         db().set(data.i_helper);
173         db().commit();
174
175         Assert.areEqual(4,data.i_map.size());
176
177         atom = (AtomData) data.i_map.get("yup");
178         Assert.areEqual("yup",atom.name);
179
180         AtomData removed = (AtomData) data.i_map.remove("great");
181
182         Assert.areEqual("great",removed.name);
183         Assert.isNull(data.i_map.remove("great"));
184         db().deactivate(data.i_map, Integer.MAX_VALUE);
185         Assert.areEqual(3,data.i_map.size());
186
187         Assert.isTrue(data.i_map.keySet().removeAll(otherMap.keySet()));
188         db().deactivate(data.i_map, Integer.MAX_VALUE);
189         Assert.isFalse(data.i_map.keySet().removeAll(otherMap.keySet()));
190         Assert.areEqual(1,data.i_map.size());
191         i = data.i_map.keySet().iterator();
192         String JavaDoc str = (String JavaDoc) i.next();
193         Assert.areEqual("yup",str);
194         Assert.isFalse(i.hasNext());
195
196         data.i_map.clear();
197         Assert.isTrue(data.i_map.isEmpty());
198         Assert.areEqual(0,data.i_map.size());
199
200         setDefaultValues(data.i_map);
201
202         String JavaDoc[] strArr = new String JavaDoc[1];
203         strArr = (String JavaDoc[]) data.i_map.keySet().toArray(strArr);
204         tDefaultArray(strArr);
205
206         data.i_map.clear();
207         data.i_map.put("zero", "zero");
208
209         for (int j = 0; j < COUNT; j++) {
210             data.i_map.put(MORE + j, new AtomData(MORE + j));
211         }
212         Assert.areEqual(COUNT + 1,data.i_map.size());
213         lookupLast(data);
214
215         db().deactivate(data.i_map, Integer.MAX_VALUE);
216         lookupLast(data);
217         lookupLast(data);
218
219         reopen();
220         restoreMembers(data);
221         lookupLast(data);
222
223         atom = new AtomData("double");
224
225         data.i_map.put("double", atom);
226
227         int previousSize = data.i_map.size();
228
229         db().deactivate(data.i_map, Integer.MAX_VALUE);
230
231         AtomData doubleAtom = (AtomData) data.i_map.put("double", new AtomData("double"));
232         Assert.areSame(atom,doubleAtom);
233
234         Assert.areEqual(previousSize,data.i_map.size());
235         data.i_map.put("double", doubleAtom);
236
237         db().commit();
238
239         data.i_map.put("rollBack", "rollBack");
240         data.i_map.put("double", new AtomData("nono"));
241
242         db().rollback();
243         Assert.isNull(data.i_map.get("rollBack"));
244         Assert.areEqual(previousSize,data.i_map.size());
245         atom = (AtomData) data.i_map.get("double");
246         Assert.areSame(atom,doubleAtom);
247         Assert.isTrue(data.i_map.containsKey("double"));
248         Assert.isFalse(data.i_map.containsKey("rollBack"));
249
250         otherMap.clear();
251         otherMap.put("other1", doubleAtom);
252         otherMap.put("other2", doubleAtom);
253
254         data.i_map.putAll(otherMap);
255         db().deactivate(data.i_map, Integer.MAX_VALUE);
256
257         Assert.areSame(doubleAtom,data.i_map.get("other1"));
258         Assert.areSame(doubleAtom,data.i_map.get("other2"));
259
260         data.i_map.clear();
261         Assert.areEqual(0,data.i_map.size());
262         setDefaultValues(data.i_map);
263
264         int j = 0;
265         i = data.i_map.keySet().iterator();
266         while (i.hasNext()) {
267             String JavaDoc key = (String JavaDoc) i.next();
268             if (key.equals("cool")) {
269                 i.remove();
270             }
271             j++;
272         }
273         Assert.areEqual(2,data.i_map.size());
274         Assert.isFalse(data.i_map.containsKey("cool"));
275         Assert.areEqual(3,j);
276
277         data.i_map.put("double", doubleAtom);
278         ((Db4oMap) data.i_map).deleteRemoved(true);
279         data.i_map.keySet().remove("double");
280         Assert.isFalse(db().isStored(doubleAtom));
281         ((Db4oMap) data.i_map).deleteRemoved(false);
282
283         data.i_map.clear();
284         Assert.areEqual(0,data.i_map.size());
285         setDefaultValues(data.i_map);
286     }
287
288     private void tDefaultValues(Data data) {
289         for (int i = 0; i < DEFAULT.length; i++) {
290             AtomData atom = (AtomData) data.i_map.get(DEFAULT[i]);
291             Assert.areEqual(DEFAULT[i],atom.name);
292         }
293     }
294
295     private void tDefaultArray(Object JavaDoc[] arr) {
296         Assert.areEqual(DEFAULT.length,arr.length);
297         String JavaDoc str[] = new String JavaDoc[DEFAULT.length];
298         System.arraycopy(DEFAULT, 0, str, 0, DEFAULT.length);
299         for (int i = 0; i < arr.length; i++) {
300             boolean found = false;
301             for (int j = 0; j < str.length; j++) {
302                 if (arr[i].equals(str[j])) {
303                     str[j] = null;
304                     found = true;
305                 }
306             }
307             Assert.isTrue(found);
308         }
309         for (int j = 0; j < str.length; j++) {
310             Assert.isNull(str[j]);
311         }
312     }
313
314     private void restoreMembers(Data data) {
315         Query q = newQuery(Data.class);
316         ObjectSet objectSet = q.execute();
317         Data rdata=(Data) objectSet.next();
318         data.i_map = rdata.i_map;
319         data.i_helper = rdata.i_helper;
320     }
321
322     private void lookupLast(Data data) {
323         AtomData atom = (AtomData) data.i_map.get(MORE + (COUNT - 1));
324         Assert.areEqual(MORE + (COUNT - 1),atom.name);
325     }
326
327     void checkHelper(Db4oHashMapHelper helper) {
328         ExtObjectContainer con = db();
329         if (con.isActive(helper)) {
330             Assert.areEqual("hi",helper.i_childList.get(0));
331             checkHelper(helper.i_child);
332         }
333     }
334
335 }
336
Popular Tags