1620ba73aSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3620ba73aSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4620ba73aSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5620ba73aSAndrew Rist  * distributed with this work for additional information
6620ba73aSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7620ba73aSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8620ba73aSAndrew Rist  * "License"); you may not use this file except in compliance
9620ba73aSAndrew Rist  * with the License.  You may obtain a copy of the License at
10620ba73aSAndrew Rist  *
11620ba73aSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12620ba73aSAndrew Rist  *
13620ba73aSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14620ba73aSAndrew Rist  * software distributed under the License is distributed on an
15620ba73aSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16620ba73aSAndrew Rist  * KIND, either express or implied.  See the License for the
17620ba73aSAndrew Rist  * specific language governing permissions and limitations
18620ba73aSAndrew Rist  * under the License.
19620ba73aSAndrew Rist  *
20620ba73aSAndrew Rist  *************************************************************/
21620ba73aSAndrew Rist 
22620ba73aSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package com.sun.star.lib.uno.bridges.javaremote;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import com.sun.star.bridge.XInstanceProvider;
27cdf0e10cSrcweir import com.sun.star.lib.TestBed;
28cdf0e10cSrcweir import com.sun.star.lib.uno.typeinfo.MethodTypeInfo;
29cdf0e10cSrcweir import com.sun.star.lib.uno.typeinfo.TypeInfo;
30cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
31cdf0e10cSrcweir import com.sun.star.uno.XComponentContext;
32cdf0e10cSrcweir import com.sun.star.uno.XInterface;
33cdf0e10cSrcweir 
34*9e878ba5SDamjan Jovanovic import org.junit.Test;
35*9e878ba5SDamjan Jovanovic import static org.junit.Assert.*;
36cdf0e10cSrcweir 
37*9e878ba5SDamjan Jovanovic public final class Bug92174_Test {
38*9e878ba5SDamjan Jovanovic     @Test
test()39cdf0e10cSrcweir     public void test() throws Exception {
40*9e878ba5SDamjan Jovanovic         assertTrue("test",
41cdf0e10cSrcweir                new TestBed().execute(new Provider(), false, Client.class, 0));
42cdf0e10cSrcweir     }
43cdf0e10cSrcweir 
44cdf0e10cSrcweir     public static final class Client extends TestBed.Client {
main(String[] args)45cdf0e10cSrcweir         public static void main(String[] args) {
46cdf0e10cSrcweir             new Client().execute();
47cdf0e10cSrcweir         }
48cdf0e10cSrcweir 
run(XComponentContext context)49cdf0e10cSrcweir         protected boolean run(XComponentContext context) throws Throwable {
50cdf0e10cSrcweir             XTransport t = UnoRuntime.queryInterface(
51cdf0e10cSrcweir                 XTransport.class, getBridge(context).getInstance("Transport"));
52cdf0e10cSrcweir             t.setDerived(new XDerived() {
53cdf0e10cSrcweir                     public void fn() {}
54cdf0e10cSrcweir                 });
55cdf0e10cSrcweir             t.getBase().fn();
56cdf0e10cSrcweir             return true;
57cdf0e10cSrcweir         }
58cdf0e10cSrcweir     }
59cdf0e10cSrcweir 
60cdf0e10cSrcweir     private static final class Provider implements XInstanceProvider {
getInstance(String instanceName)61cdf0e10cSrcweir         public Object getInstance(String instanceName) {
62cdf0e10cSrcweir             return new XTransport() {
63cdf0e10cSrcweir                     public XBase getBase() {
64cdf0e10cSrcweir                         return derived;
65cdf0e10cSrcweir                     }
66cdf0e10cSrcweir 
67cdf0e10cSrcweir                     public synchronized void setDerived(XDerived derived) {
68cdf0e10cSrcweir                         this.derived = derived;
69cdf0e10cSrcweir                     }
70cdf0e10cSrcweir 
71cdf0e10cSrcweir                     private XDerived derived = null;
72cdf0e10cSrcweir                 };
73cdf0e10cSrcweir         }
74cdf0e10cSrcweir     }
75cdf0e10cSrcweir 
76cdf0e10cSrcweir     public interface XBase extends XInterface {
77cdf0e10cSrcweir         void fn();
78cdf0e10cSrcweir 
79cdf0e10cSrcweir         TypeInfo[] UNOTYPEINFO = { new MethodTypeInfo("fn", 0, 0) };
80cdf0e10cSrcweir     }
81cdf0e10cSrcweir 
82cdf0e10cSrcweir     public interface XDerived extends XBase {
83cdf0e10cSrcweir         TypeInfo[] UNOTYPEINFO = null;
84cdf0e10cSrcweir     }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir     public interface XTransport extends XInterface {
87cdf0e10cSrcweir         XBase getBase();
88cdf0e10cSrcweir 
89cdf0e10cSrcweir         void setDerived(XDerived derived);
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         TypeInfo[] UNOTYPEINFO = { new MethodTypeInfo("getBase", 0, 0),
92cdf0e10cSrcweir                                    new MethodTypeInfo("setDerived", 1, 0) };
93cdf0e10cSrcweir     }
94cdf0e10cSrcweir }
95