1 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 db.set(Jdk5Enum.A); 39 40 Jdk5Data<String > data=new Jdk5Data<String >("Test",Jdk5Enum.A); 41 Jdk5Enum.A.reset(); 42 Test.ensure(Jdk5Enum.A.getCount() == 0); 43 Jdk5Enum.A.incCount(); 44 45 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 >)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 > data=new Jdk5Data<Integer >(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 >> comp=new Comparator<Jdk5Data<Integer >>() { 98 public int compare(Jdk5Data<Integer > d1, Jdk5Data<Integer > d2) { 99 return d1.getItem().compareTo(d2.getItem()); 100 } 101 }; 102 SortedSet<Jdk5Data<Integer >> sorted=new TreeSet<Jdk5Data<Integer >>(comp); 103 while(result.hasNext()) { 104 sorted.add((Jdk5Data<Integer >)result.next()); 105 } 106 int count=0; 107 for(Jdk5Data<Integer > 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 > keymap; 127 public Map<String ,Jdk5Enum> valmap; 128 public Map<Jdk5Enum,String > db4okeymap; 129 public Map<String ,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 >(NUMRUNS); 142 holder.valmap=new HashMap<String ,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 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 |