KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > test > jdk5 > Jdk5EnumTest


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.test.jdk5;
22
23 import java.util.*;
24
25 import com.db4o.*;
26 import com.db4o.query.*;
27 import com.db4o.test.*;
28
29 public class Jdk5EnumTest {
30     private final static int NUMRUNS=1;
31     
32     public void testSingleStoreRetrieve() {
33         ObjectContainer db = reopen();
34         
35         // We make sure the Jdk5Enum class is already loaded, otherwise
36
// we may get the side effect that storing it will load the class
37
// and overwrite our changes exactly when we store them.
38
db.set(Jdk5Enum.A);
39         
40         Jdk5Data<String JavaDoc> data=new Jdk5Data<String JavaDoc>("Test",Jdk5Enum.A);
41         Jdk5Enum.A.reset();
42         Test.ensure(Jdk5Enum.A.getCount() == 0);
43         Jdk5Enum.A.incCount();
44         
45         // The Jdk5Enum object may already be stored on the server, so we
46
// can't persist by reachability. We have to store the object
47
// explicitely.
48
db.set(Jdk5Enum.A);
49         
50         Test.ensure(Jdk5Enum.A.getCount() == 1);
51         Test.ensure(Jdk5Enum.B.getCount() == 0);
52         Test.ensure(data.getType() == Jdk5Enum.A);
53         Test.ensure(data.getSize() == 0);
54         Test.ensure(data.getMax() == Integer.MIN_VALUE);
55         data.add(2,4,6,1,3,5);
56         Test.ensure(data.getSize() == 6);
57         Test.ensure(data.getMax() == 6);
58         Test.ensure(Jdk5Data.class.isAnnotationPresent(Jdk5Annotation.class));
59         
60         db.set(data);
61         db = reopen();
62         data=null;
63         
64         Query query=db.query();
65         query.constrain(Jdk5Data.class);
66         Query sub=query.descend("type");
67         sub.constrain(Jdk5Enum.class);
68         sub.constrain(Jdk5Enum.A);
69         sub.descend("type").constrain("A");
70         sub.descend("count").constrain(Integer.valueOf(1));
71
72         ObjectSet result=query.execute();
73         Test.ensure(result.size() == 1);
74         data=(Jdk5Data<String JavaDoc>)result.next();
75         Test.ensure(data.getItem().equals("Test"));
76         Test.ensure(Jdk5Enum.A == data.getType());
77         Test.ensure(Jdk5Enum.A.name().equals(data.getType().name()));
78         Test.ensure(data.getSize() == 6);
79         Test.ensure(data.getMax() == 6);
80         Test.ensure(result.size() == 1);
81
82         ensureEnumInstancesInDB(db);
83         
84         Test.deleteAllInstances(data);
85     }
86
87     public void testMultipleStoreRetrieve() {
88         ObjectContainer db=reopen();
89         for(int i=0;i<NUMRUNS;i++) {
90             Jdk5Data<Integer JavaDoc> data=new Jdk5Data<Integer JavaDoc>(Integer.valueOf(i),nthEnum(i));
91             db.set(data);
92         }
93
94         db=reopen();
95         ObjectSet result=db.get(Jdk5Data.class);
96         Test.ensure(result.size()==NUMRUNS);
97         Comparator<Jdk5Data<Integer JavaDoc>> comp=new Comparator<Jdk5Data<Integer JavaDoc>>() {
98             public int compare(Jdk5Data<Integer JavaDoc> d1, Jdk5Data<Integer JavaDoc> d2) {
99                 return d1.getItem().compareTo(d2.getItem());
100             }
101         };
102         SortedSet<Jdk5Data<Integer JavaDoc>> sorted=new TreeSet<Jdk5Data<Integer JavaDoc>>(comp);
103         while(result.hasNext()) {
104             sorted.add((Jdk5Data<Integer JavaDoc>)result.next());
105         }
106         int count=0;
107         for(Jdk5Data<Integer JavaDoc> data : sorted) {
108             Test.ensure(data.getItem().intValue()==count);
109             Test.ensure(data.getType()==nthEnum(count));
110             count++;
111         }
112         ensureEnumInstancesInDB(db);
113
114         Test.deleteAllInstances(Jdk5Data.class);
115     }
116     
117     public void testEnumsInCollections() {
118         final boolean withDb4oCollections=true;
119
120         ObjectContainer db=reopen();
121
122         class CollectionHolder {
123             public List<Jdk5Enum> list;
124             public List<Jdk5Enum> db4olist;
125             public Set<Jdk5Enum> set;
126             public Map<Jdk5Enum,String JavaDoc> keymap;
127             public Map<String JavaDoc,Jdk5Enum> valmap;
128             public Map<Jdk5Enum,String JavaDoc> db4okeymap;
129             public Map<String JavaDoc,Jdk5Enum> db4ovalmap;
130             public Jdk5Enum[] array;
131         }
132
133         CollectionHolder holder=new CollectionHolder();
134         holder.list=new ArrayList<Jdk5Enum>(NUMRUNS);
135         Comparator<Jdk5Enum> comp=new Comparator<Jdk5Enum>() {
136             public int compare(Jdk5Enum e1, Jdk5Enum e2) {
137                 return e1.name().compareTo(e2.name());
138             }
139         };
140         holder.set=new TreeSet<Jdk5Enum>(comp);
141         holder.keymap=new HashMap<Jdk5Enum,String JavaDoc>(NUMRUNS);
142         holder.valmap=new HashMap<String JavaDoc,Jdk5Enum>(NUMRUNS);
143         holder.array=new Jdk5Enum[NUMRUNS];
144         holder.db4olist=db.ext().collections().newLinkedList();
145         holder.db4okeymap=db.ext().collections().newHashMap(2);
146         holder.db4ovalmap=db.ext().collections().newHashMap(2);
147         for(int i=0;i<NUMRUNS;i++) {
148             Jdk5Enum curenum=nthEnum(i);
149             holder.list.add(curenum);
150             if(withDb4oCollections) {
151                 holder.db4olist.add(curenum);
152             }
153             holder.array[i]=curenum;
154         }
155         holder.set.add(Jdk5Enum.A);
156         holder.set.add(Jdk5Enum.B);
157         holder.keymap.put(Jdk5Enum.A,Jdk5Enum.A.name());
158         holder.keymap.put(Jdk5Enum.B,Jdk5Enum.B.name());
159         holder.valmap.put(Jdk5Enum.A.name(),Jdk5Enum.A);
160         holder.valmap.put(Jdk5Enum.B.name(),Jdk5Enum.B);
161         if(withDb4oCollections) {
162             holder.db4okeymap.put(Jdk5Enum.A,Jdk5Enum.A.name());
163             holder.db4okeymap.put(Jdk5Enum.B,Jdk5Enum.B.name());
164             holder.db4ovalmap.put(Jdk5Enum.A.name(),Jdk5Enum.A);
165             holder.db4ovalmap.put(Jdk5Enum.B.name(),Jdk5Enum.B);
166         }
167         db.set(holder);
168         
169         db=reopen();
170         ObjectSet result=db.get(CollectionHolder.class);
171         Test.ensure(result.size()==1);
172         holder=(CollectionHolder)result.next();
173
174         Test.ensure(holder.list.size()==NUMRUNS);
175         Test.ensure(holder.set.size()==2);
176         Test.ensure(holder.keymap.size()==2);
177         Test.ensure(holder.valmap.size()==2);
178         Test.ensure(holder.array.length==NUMRUNS);
179         if(withDb4oCollections) {
180             Test.ensure(holder.db4olist.size()==NUMRUNS);
181             Test.ensure(holder.db4okeymap.size()==2);
182             Test.ensure(holder.db4ovalmap.size()==2);
183         }
184         ensureEnumInstancesInDB(db);
185         
186         Test.deleteAllInstances(CollectionHolder.class);
187     }
188     
189     private ObjectContainer reopen() {
190         Test.reOpen();
191         return Test.objectContainer();
192     }
193     
194     private void ensureEnumInstancesInDB(ObjectContainer db) {
195         Query query;
196         ObjectSet result;
197         query=db.query();
198         query.constrain(Jdk5Enum.class);
199         result=query.execute();
200         // We should have all enum members once in the database, since they're
201
// statically referenced by the Enum subclass.
202
if(result.size()!=2) {
203             System.err.println("# instances in db: "+result.size());
204             while(result.hasNext()) {
205                 Jdk5Enum curenum=(Jdk5Enum)result.next();
206                 long id = db.ext().getID(curenum);
207                 System.err.println(curenum+" : ihc "+System.identityHashCode(curenum) + " : id " + id);
208             }
209             
210         }
211         Test.ensure(result.size()==2);
212     }
213     
214     private Jdk5Enum nthEnum(int n) {
215         return (n%2==0 ? Jdk5Enum.A : Jdk5Enum.B);
216     }
217 }
218
Popular Tags