| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| package com.sun.star.lib.uno.helper; |
| import com.sun.star.lib.uno.environments.java.java_environment; |
| import java.util.List; |
| import com.sun.star.uno.XWeak; |
| import com.sun.star.lang.XTypeProvider; |
| import java.util.ArrayList; |
| import com.sun.star.uno.Type; |
| import com.sun.star.lib.uno.typedesc.TypeDescription; |
| import com.sun.star.uno.UnoRuntime; |
| //import com.sun.star.lib.uno.environments.java.Proxy; |
| import com.sun.star.uno.XInterface; |
| import com.sun.star.lang.XSingleComponentFactory; |
| |
| public class MultiTypeInterfaceContainer_Test |
| { |
| // java_environment env= new java_environment(null); |
| /** Creates a new instance of InterfaceContainerTest */ |
| AWeakBase obj1,obj2,obj3,obj4; |
| Object proxyObj1Weak1; |
| Object proxyObj3Weak1; |
| Object proxyObj3Weak2; |
| Object proxyObj3TypeProv; |
| Object proxyObj2TypeProv; |
| //contains original objects |
| List list1; |
| //contains original objects + proxies |
| List list2; |
| //contains original object + proxies + null value |
| List list3; |
| |
| /** Creates a new instance of MultiTypeInterfaceContainer_Test */ |
| public MultiTypeInterfaceContainer_Test() |
| { |
| obj1= new AWeakBase(); |
| obj2= new AWeakBase(); |
| obj3= new AWeakBase(); |
| obj4= new AWeakBase(); |
| |
| proxyObj1Weak1= ProxyProvider.createProxy(obj1, XWeak.class); |
| proxyObj3Weak1= ProxyProvider.createProxy(obj3, XWeak.class); |
| proxyObj3Weak2= ProxyProvider.createProxy(obj3, XWeak.class); |
| proxyObj2TypeProv= ProxyProvider.createProxy(obj2, XTypeProvider.class); |
| proxyObj3TypeProv= ProxyProvider.createProxy(obj3, XTypeProvider.class); |
| |
| list1= new ArrayList(); |
| list1.add(obj1); |
| list1.add(obj2); |
| list1.add(obj3); |
| list2= new ArrayList(); |
| list2.add(obj1); |
| list2.add(proxyObj2TypeProv); |
| list2.add(proxyObj3TypeProv); |
| list3= new ArrayList(); |
| list3.add(obj1); |
| list3.add(null); |
| list3.add(proxyObj2TypeProv); |
| list3.add(proxyObj3Weak1); |
| } |
| /** returns Holder proxy objects for the specified interface. If the method is called |
| * several times with the same arguments then each time a new HolderProxy is returned. |
| * Then all HolderProxy s refer to the same Proxy object. |
| * The proxy can be queried for XEventListener. On the returned proxy disposing can be called |
| * |
| */ |
| // public Object getHolderProxy(Object obj, Class iface) |
| // { |
| // Object retVal= null; |
| // if (obj == null || iface == null || iface.isInstance(obj) == false ) |
| // return retVal; |
| // |
| // Type type= new Type(TypeDescription.getTypeDescription(iface)); |
| // Type evtType= new Type(TypeDescription.getTypeDescription(com.sun.star.lang.XEventListener.class)); |
| // // find the object identifier |
| // String sOid= UnoRuntime.generateOid(obj); |
| // retVal= env.getRegisteredInterface(sOid, type); |
| // // if retVal == null then probably not registered |
| // if (retVal == null) |
| // { |
| // // create the XEventListener proxy |
| // Requester eventRequester = new Requester(false, false, null); |
| // Object aProxyEvt = Proxy.create(eventRequester, sOid, evtType, false, false); |
| // String[] arOid= new String[]{sOid}; |
| // retVal= env.registerInterface(aProxyEvt, arOid, evtType); |
| // |
| // Requester requester = new Requester(false, false, aProxyEvt); |
| // Object aProxy = Proxy.create(requester, sOid, type, false, false); |
| // arOid= new String[] {sOid}; |
| // retVal= env.registerInterface(aProxy, arOid, type); |
| // } |
| // return retVal; |
| // } |
| |
| public boolean addInterface() |
| { |
| System.out.println("Testing MultiTypeInterfaceContainer.addInterface"); |
| MultiTypeInterfaceContainer cont= new MultiTypeInterfaceContainer(); |
| boolean r[]= new boolean[200]; |
| int i= 0; |
| |
| int ci= 0; |
| ci= cont.addInterface(new Type(XInterface.class), obj1); |
| ci= cont.addInterface(new Type(XInterface.class), obj2); |
| ci= cont.addInterface(new Type(XInterface.class), obj3); |
| r[i++]= ci == 3; |
| ci= cont.addInterface(new Type(XWeak.class), obj1); |
| ci= cont.addInterface(new Type(XWeak.class), obj2); |
| r[i++]= ci ==2; |
| ci= cont.addInterface(null,obj1); |
| r[i++]= ci == 1; |
| ci= cont.addInterface(new Type(XTypeProvider.class), null); |
| r[i++]= ci == 0; |
| |
| cont= new MultiTypeInterfaceContainer(); |
| AWeakBase[] arObj= new AWeakBase[100]; |
| for (int c= 0; c < 100; c++) |
| { |
| arObj[c]= new AWeakBase(); |
| ci= cont.addInterface(new Type(XInterface.class), arObj[c]); |
| } |
| Type[] arT= cont.getContainedTypes(); |
| for (int c=0; c < 100; c++) |
| { |
| ci= cont.removeInterface(new Type(XInterface.class), arObj[c]); |
| r[i++]= ci == 100 -c -1; |
| |
| } |
| boolean bOk= true; |
| for (int c= 0; c < i; c++) |
| bOk= bOk && r[c]; |
| if (bOk == false) |
| System.out.println("Failed"); |
| else |
| System.out.println("Ok"); |
| return bOk; |
| } |
| |
| public boolean getContainedTypes() |
| { |
| System.out.println("Testing MultiTypeInterfaceContainer.getContainedTypes"); |
| MultiTypeInterfaceContainer cont= new MultiTypeInterfaceContainer(); |
| boolean r[]= new boolean[50]; |
| int i= 0; |
| |
| cont.addInterface(new Type(XInterface.class), obj1); |
| cont.addInterface(new Type(XWeak.class), obj1); |
| cont.addInterface(null, obj1); |
| cont.addInterface(new Type(XTypeProvider.class), null); |
| Object aObj= new Object(); |
| cont.addInterface(aObj, obj1); |
| cont.addInterface(XSingleComponentFactory.class, obj1); |
| Type[] types= cont.getContainedTypes(); |
| // 3 types and no XTypeProvider |
| r[i++]= types.length == 5; |
| for (int c= 0; c < types.length; c++) |
| { |
| if (types[c] == null) |
| r[i++]= true; |
| else if(types[c].equals( new Type(XTypeProvider.class))) |
| r[i++]= false; |
| else if(types[c].equals(new Type(XInterface.class))) |
| r[i++]= true; |
| else if (types[c].equals(new Type(XWeak.class))) |
| r[i++]= true; |
| else if (types[c].equals(new Type())) |
| r[i++]= true; |
| else if (types[c].equals(new Type( aObj.getClass()))) |
| r[i++]= true; |
| else if (types[c].equals(new Type(XSingleComponentFactory.class))) |
| r[i++]= true; |
| else |
| r[i++]= false; |
| } |
| boolean bOk= true; |
| for (int c= 0; c < i; c++) |
| bOk= bOk && r[c]; |
| if (bOk == false) |
| System.out.println("Failed"); |
| else |
| System.out.println("Ok"); |
| return bOk; |
| } |
| |
| public boolean getContainer() |
| { |
| System.out.println("Testing MultiTypeInterfaceContainer.getContainedTypes"); |
| MultiTypeInterfaceContainer cont= new MultiTypeInterfaceContainer(); |
| boolean r[]= new boolean[50]; |
| int i= 0; |
| |
| int ci= 0; |
| ci= cont.addInterface(new Type(XInterface.class), obj1); |
| ci= cont.addInterface(new Type(XInterface.class), obj2); |
| ci= cont.addInterface(new Type(XInterface.class), obj3); |
| ci= cont.addInterface(new Type(XWeak.class), obj1); |
| ci= cont.addInterface(new Type(XWeak.class), obj2); |
| ci= cont.addInterface(null, obj1); |
| ci= cont.addInterface(new Type(XTypeProvider.class), null); |
| |
| InterfaceContainer icont= null; |
| icont= cont.getContainer( new Type(XTypeProvider.class)); |
| r[i++]= icont.size() == 0; |
| icont= cont.getContainer(new Type(XWeak.class)); |
| r[i++]= icont.size() == 2; |
| icont= cont.getContainer(null); |
| r[i++]= icont.size() == 1; |
| |
| boolean bOk= true; |
| for (int c= 0; c < i; c++) |
| bOk= bOk && r[c]; |
| if (bOk == false) |
| System.out.println("Failed"); |
| else |
| System.out.println("Ok"); |
| return bOk; |
| } |
| |
| public boolean removeInterface() |
| { |
| System.out.println("Testing MultiTypeInterfaceContainer.removeInterface"); |
| MultiTypeInterfaceContainer cont= new MultiTypeInterfaceContainer(); |
| boolean r[]= new boolean[50]; |
| int i= 0; |
| |
| int count= 0; |
| count= cont.removeInterface( new Type(XTypeProvider.class), obj1); |
| r[i++]= count == 0; |
| count= cont.removeInterface( new Type(XTypeProvider.class), null); |
| r[i++]= count == 0; |
| count= cont.removeInterface(null, obj2); |
| r[i++]= count == 0; |
| |
| cont.addInterface(new Type(XInterface.class), obj1); |
| cont.addInterface(null, obj1); |
| count= cont.removeInterface(null, obj2); |
| // count must still be 1 |
| r[i++]= count == 1; |
| count= cont.removeInterface(null, obj1); |
| r[i++]= count == 0; |
| count= cont.removeInterface(new Type(XInterface.class), obj1); |
| r[i++]= count == 0; |
| |
| boolean bOk= true; |
| for (int c= 0; c < i; c++) |
| bOk= bOk && r[c]; |
| if (bOk == false) |
| System.out.println("Failed"); |
| else |
| System.out.println("Ok"); |
| return bOk; |
| } |
| |
| public boolean clear() |
| { |
| System.out.println("Testing MultiTypeInterfaceContainer.clear"); |
| MultiTypeInterfaceContainer cont= new MultiTypeInterfaceContainer(); |
| boolean r[]= new boolean[50]; |
| int i= 0; |
| |
| int count= 0; |
| cont.clear(); |
| Type[] types= cont.getContainedTypes(); |
| r[i++]= types.length == 0; |
| int ci; |
| ci= cont.addInterface(new Type(XInterface.class), obj1); |
| ci= cont.addInterface(new Type(XInterface.class), obj2); |
| ci= cont.addInterface(new Type(XInterface.class), obj3); |
| ci= cont.addInterface(new Type(XWeak.class), obj1); |
| ci= cont.addInterface(new Type(XWeak.class), obj2); |
| ci= cont.addInterface(null, obj1); |
| ci= cont.addInterface(new Type(XTypeProvider.class), null); |
| types= cont.getContainedTypes(); |
| r[i++]= types.length == 3; |
| cont.clear(); |
| types= cont.getContainedTypes(); |
| r[i++]= types.length == 0; |
| |
| boolean bOk= true; |
| for (int c= 0; c < i; c++) |
| bOk= bOk && r[c]; |
| if (bOk == false) |
| System.out.println("Failed"); |
| else |
| System.out.println("Ok"); |
| return bOk; |
| } |
| |
| public boolean disposeAndClear() |
| { |
| System.out.println("Testing MultiTypeInterfaceContainer.disposeAndClear"); |
| MultiTypeInterfaceContainer cont= new MultiTypeInterfaceContainer(); |
| boolean r[]= new boolean[50]; |
| int i= 0; |
| obj1.nDisposingCalled= 0; |
| obj2.nDisposingCalled= 0; |
| obj3.nDisposingCalled= 0; |
| cont.addInterface(new Type(XInterface.class), null); |
| cont.addInterface(new Type(XInterface.class), obj1); |
| cont.addInterface(new Type(XInterface.class), obj2); |
| cont.addInterface(new Type(XInterface.class), obj3); |
| cont.addInterface(new Type(XWeak.class),obj1); |
| cont.addInterface(new Type(XWeak.class), obj2); |
| cont.addInterface(new Type(XTypeProvider.class), obj1); |
| cont.disposeAndClear(new com.sun.star.lang.EventObject("blabla")); |
| |
| r[i++]= obj1.nDisposingCalled == 3; |
| r[i++]= obj2.nDisposingCalled == 2; |
| r[i++]= obj3.nDisposingCalled == 1; |
| Type[] types= cont.getContainedTypes(); |
| r[i++]= types.length == 0; |
| |
| boolean bOk= true; |
| for (int c= 0; c < i; c++) |
| bOk= bOk && r[c]; |
| if (bOk == false) |
| System.out.println("Failed"); |
| else |
| System.out.println("Ok"); |
| return bOk; |
| } |
| |
| |
| public static void main(String[] args) |
| { |
| MultiTypeInterfaceContainer_Test test= new MultiTypeInterfaceContainer_Test(); |
| boolean r[]= new boolean[50]; |
| int i= 0; |
| r[i++]= test.addInterface(); |
| r[i++]= test.getContainedTypes(); |
| r[i++]= test.getContainer(); |
| r[i++]= test.removeInterface(); |
| r[i++]= test.clear(); |
| r[i++]= test.disposeAndClear(); |
| boolean bOk= true; |
| for (int c= 0; c < i; c++) |
| bOk= bOk && r[c]; |
| if ( ! bOk ) |
| System.out.println("Test finished.\nErrors occurred!!!"); |
| else |
| System.out.println("Test finished. \nNo errors."); |
| |
| } |
| } |
| |
| |
| |