1 21 package com.db4o.test; 22 23 import java.util.*; 24 25 import com.db4o.*; 26 import com.db4o.query.*; 27 28 29 30 33 public class CallConstructors { 34 35 static Hashtable constructorCalledByClass = new Hashtable(); 36 37 static void constructorCalled(Object obj){ 38 constructorCalledByClass.put(obj.getClass(), obj); 39 } 40 41 static Object [] cases = new Object []{ 42 new CallGlobal(), 43 new CallLocalYes(), 44 new CallLocalNo() 45 }; 46 47 public void configure(){ 48 Db4o.configure().callConstructors(false); 49 Db4o.configure().objectClass(new CallLocalYes()).callConstructor(true); 50 Db4o.configure().objectClass(new CallLocalNo()).callConstructor(false); 51 } 52 53 public void store(){ 54 for (int i = 0; i < cases.length; i++) { 55 Test.store(cases[i]); 56 } 57 } 58 59 public void test(){ 60 if(! Test.clientServer){ 61 check(new CallLocalYes(), true); 62 check(new CallLocalNo(), false); 63 check(new CallGlobal(), false); 64 } 65 Db4o.configure().callConstructors(true); 66 Test.reOpen(); 67 check(new CallLocalYes(), true); 68 check(new CallLocalNo(), false); 69 check(new CallGlobal(), true); 70 Db4o.configure().callConstructors(false); 71 Test.reOpen(); 72 check(new CallLocalYes(), true); 73 check(new CallLocalNo(), false); 74 check(new CallGlobal(), false); 75 76 } 77 78 private void check(Object obj, boolean expected){ 79 constructorCalledByClass.clear(); 80 Query q = Test.query(); 81 q.constrain(obj.getClass()); 82 ObjectSet os = q.execute(); 83 Test.ensure(os.hasNext()); 84 while(os.hasNext()){ 85 os.next(); 86 } 87 boolean called = constructorCalledByClass.get(obj.getClass()) != null; 88 Test.ensure(called == expected); 89 } 90 91 92 public static class CallCommonBase{ 93 public CallCommonBase(){ 94 constructorCalled(this); 95 } 96 } 97 98 public static class CallGlobal extends CallCommonBase{ 99 } 100 101 public static class CallLocalYes extends CallCommonBase{ 102 } 103 104 public static class CallLocalNo extends CallCommonBase{ 105 } 106 } 107 | Popular Tags |