1 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 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 [] DEFAULT = { "wow", "cool", "great" }; 54 55 static final String 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 { 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 { 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 str = (String ) 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 [] arr = data.i_map.keySet().toArray(); 137 tDefaultArray(arr); 138 139 String [] cmp = new String [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 str = (String ) 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 str = (String ) 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 [] strArr = new String [1]; 203 strArr = (String []) 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 key = (String ) 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 [] arr) { 296 Assert.areEqual(DEFAULT.length,arr.length); 297 String str[] = new String [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 |