1*a5b190bfSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*a5b190bfSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*a5b190bfSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*a5b190bfSAndrew Rist  * distributed with this work for additional information
6*a5b190bfSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*a5b190bfSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*a5b190bfSAndrew Rist  * "License"); you may not use this file except in compliance
9*a5b190bfSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*a5b190bfSAndrew Rist  *
11*a5b190bfSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*a5b190bfSAndrew Rist  *
13*a5b190bfSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*a5b190bfSAndrew Rist  * software distributed under the License is distributed on an
15*a5b190bfSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*a5b190bfSAndrew Rist  * KIND, either express or implied.  See the License for the
17*a5b190bfSAndrew Rist  * specific language governing permissions and limitations
18*a5b190bfSAndrew Rist  * under the License.
19*a5b190bfSAndrew Rist  *
20*a5b190bfSAndrew Rist  *************************************************************/
21*a5b190bfSAndrew Rist 
22*a5b190bfSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package com.sun.star.lib.uno.helper;
25cdf0e10cSrcweir import com.sun.star.uno.XWeak;
26cdf0e10cSrcweir import com.sun.star.lang.XTypeProvider;
27cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
28cdf0e10cSrcweir import com.sun.star.lang.XEventListener;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir public class ComponentBase_Test
31cdf0e10cSrcweir {
32cdf0e10cSrcweir     AWeakBase obj1, obj2, obj3;
33cdf0e10cSrcweir     Object proxyObj1Weak1;
34cdf0e10cSrcweir     Object proxyObj3Weak1;
35cdf0e10cSrcweir     Object proxyObj3Weak2;
36cdf0e10cSrcweir     Object proxyObj3TypeProv;
37cdf0e10cSrcweir     Object proxyObj2TypeProv;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir     /** Creates a new instance of ComponentBase_Test */
ComponentBase_Test()40cdf0e10cSrcweir     public ComponentBase_Test()
41cdf0e10cSrcweir     {
42cdf0e10cSrcweir         obj1= new AWeakBase();
43cdf0e10cSrcweir         obj2= new AWeakBase();
44cdf0e10cSrcweir         obj3= new AWeakBase();
45cdf0e10cSrcweir         proxyObj1Weak1= ProxyProvider.createProxy(obj1, XWeak.class);
46cdf0e10cSrcweir         proxyObj3Weak1= ProxyProvider.createProxy(obj3, XWeak.class);
47cdf0e10cSrcweir         proxyObj3Weak2= ProxyProvider.createProxy(obj3, XWeak.class);
48cdf0e10cSrcweir         proxyObj2TypeProv= ProxyProvider.createProxy(obj2, XTypeProvider.class);
49cdf0e10cSrcweir         proxyObj3TypeProv= ProxyProvider.createProxy(obj3, XTypeProvider.class);
50cdf0e10cSrcweir     }
51cdf0e10cSrcweir 
dispose()52cdf0e10cSrcweir     public boolean dispose()
53cdf0e10cSrcweir     {
54cdf0e10cSrcweir         System.out.println("Testing ComponentBase");
55cdf0e10cSrcweir         ComponentBase comp= new ComponentBase();
56cdf0e10cSrcweir         boolean r[]= new boolean[50];
57cdf0e10cSrcweir         int i= 0;
58cdf0e10cSrcweir         // addEventListener
59cdf0e10cSrcweir 
60cdf0e10cSrcweir         comp.addEventListener(obj1);
61cdf0e10cSrcweir         comp.addEventListener(obj2);
62cdf0e10cSrcweir         comp.addEventListener(obj3);
63cdf0e10cSrcweir         comp.addEventListener(UnoRuntime.queryInterface(XEventListener.class, proxyObj1Weak1));
64cdf0e10cSrcweir         comp.addEventListener(UnoRuntime.queryInterface(XEventListener.class, proxyObj3Weak2));
65cdf0e10cSrcweir         comp.addEventListener(UnoRuntime.queryInterface(XEventListener.class, proxyObj3TypeProv));
66cdf0e10cSrcweir         obj1.nDisposingCalled = 0;
67cdf0e10cSrcweir         obj2.nDisposingCalled = 0;
68cdf0e10cSrcweir         obj3.nDisposingCalled = 0;
69cdf0e10cSrcweir 
70cdf0e10cSrcweir         comp.dispose();
71cdf0e10cSrcweir         r[i++]= obj1.nDisposingCalled == 1;
72cdf0e10cSrcweir         r[i++]= obj2.nDisposingCalled == 1;
73cdf0e10cSrcweir         r[i++]= obj3.nDisposingCalled == 1;
74cdf0e10cSrcweir         // adding a listener after dispose, causes a immediate call to the listerner
75cdf0e10cSrcweir         obj1.nDisposingCalled= 0;
76cdf0e10cSrcweir         comp.addEventListener(obj1);
77cdf0e10cSrcweir         r[i++]= obj1.nDisposingCalled == 1;
78cdf0e10cSrcweir         //calling dispose again must not notify the listeners again
79cdf0e10cSrcweir         obj1.nDisposingCalled= 0;
80cdf0e10cSrcweir         obj2.nDisposingCalled= 0;
81cdf0e10cSrcweir         obj3.nDisposingCalled= 0;
82cdf0e10cSrcweir         comp.dispose(); // allready disposed;
83cdf0e10cSrcweir         r[i++]= obj1.nDisposingCalled == 0;
84cdf0e10cSrcweir 
85cdf0e10cSrcweir         boolean bOk= true;
86cdf0e10cSrcweir         for (int c= 0; c < i; c++)
87cdf0e10cSrcweir             bOk= bOk && r[c];
88cdf0e10cSrcweir         if (bOk == false)
89cdf0e10cSrcweir             System.out.println("Failed");
90cdf0e10cSrcweir         else
91cdf0e10cSrcweir             System.out.println("Ok");
92cdf0e10cSrcweir         return bOk;
93cdf0e10cSrcweir     }
94cdf0e10cSrcweir 
test_finalize()95cdf0e10cSrcweir     public boolean test_finalize()
96cdf0e10cSrcweir     {
97cdf0e10cSrcweir         System.out.println("Testing ComponentBase");
98cdf0e10cSrcweir         ComponentBase comp= new ComponentBase();
99cdf0e10cSrcweir         boolean r[]= new boolean[50];
100cdf0e10cSrcweir         int i= 0;
101cdf0e10cSrcweir         obj1.nDisposingCalled = 0;
102cdf0e10cSrcweir         comp.addEventListener(obj1);
103cdf0e10cSrcweir 
104cdf0e10cSrcweir         comp= null;
105cdf0e10cSrcweir         System.out.println("Waiting 10s");
106cdf0e10cSrcweir         for(int c= 0; c < 100; c++)
107cdf0e10cSrcweir         {
108cdf0e10cSrcweir             try
109cdf0e10cSrcweir             {
110cdf0e10cSrcweir                 Thread.currentThread().sleep(100);
111cdf0e10cSrcweir                 System.gc();
112cdf0e10cSrcweir                 System.runFinalization();
113cdf0e10cSrcweir             }catch (InterruptedException ie)
114cdf0e10cSrcweir             {
115cdf0e10cSrcweir             }
116cdf0e10cSrcweir         }
117cdf0e10cSrcweir         r[i++]= obj1.nDisposingCalled == 1;
118cdf0e10cSrcweir 
119cdf0e10cSrcweir         boolean bOk= true;
120cdf0e10cSrcweir         for (int c= 0; c < i; c++)
121cdf0e10cSrcweir             bOk= bOk && r[c];
122cdf0e10cSrcweir         if (bOk == false)
123cdf0e10cSrcweir             System.out.println("Failed");
124cdf0e10cSrcweir         else
125cdf0e10cSrcweir             System.out.println("Ok");
126cdf0e10cSrcweir         return bOk;
127cdf0e10cSrcweir     }
128cdf0e10cSrcweir 
main(String[] args)129cdf0e10cSrcweir     public static void main(String[] args)
130cdf0e10cSrcweir     {
131cdf0e10cSrcweir         ComponentBase_Test test= new ComponentBase_Test();
132cdf0e10cSrcweir 
133cdf0e10cSrcweir         boolean r[]= new boolean[50];
134cdf0e10cSrcweir         int i= 0;
135cdf0e10cSrcweir         r[i++]= test.dispose();
136cdf0e10cSrcweir         r[i++]= test.test_finalize();
137cdf0e10cSrcweir 
138cdf0e10cSrcweir         boolean bOk= true;
139cdf0e10cSrcweir         for (int c= 0; c < i; c++)
140cdf0e10cSrcweir             bOk= bOk && r[c];
141cdf0e10cSrcweir         if (bOk == false)
142cdf0e10cSrcweir             System.out.println("Errors occured!");
143cdf0e10cSrcweir         else
144cdf0e10cSrcweir             System.out.println("No errors.");
145cdf0e10cSrcweir 
146cdf0e10cSrcweir     }
147cdf0e10cSrcweir 
148cdf0e10cSrcweir }
149cdf0e10cSrcweir 
150