jl165 merging heads
[LibreOffice.git] / testtools / source / bridgetest / cli / cli_bridgetest_inprocess.cs
blobc527946b633d4942a4c62c8105eeadb5364c9a78
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
28 using System;
29 using System.Collections;
30 using uno;
31 using uno.util;
32 using unoidl.com.sun.star.uno;
33 using unoidl.com.sun.star.lang;
34 using unoidl.com.sun.star.container;
37 //==============================================================================
38 internal class Factory :
39 WeakComponentBase, XSingleComponentFactory, XServiceInfo
41 private String m_service;
42 private Type m_type;
43 private System.Reflection.ConstructorInfo m_ctor;
45 public Factory( Type type, String service )
47 m_service = service;
48 m_type = type;
49 m_ctor = type.GetConstructor(
50 new Type [] { typeof (XComponentContext) } );
53 public Object createInstanceWithContext( XComponentContext xContext )
55 return m_ctor.Invoke( new Object [] { xContext } );
58 public Object createInstanceWithArgumentsAndContext(
59 uno.Any [] args, XComponentContext xContext )
61 return m_ctor.Invoke( new Object [] { xContext } );
64 public bool supportsService( String name )
66 return m_service.Equals( name );
69 public String [] getSupportedServiceNames()
71 return new String [] { m_service };
74 public String getImplementationName()
76 return m_type.ToString();
81 /** This executable does the same as the batch file starting via uno.exe,
82 but via bootstrapping native UNO.
84 public class BridgeTest
86 public static int Main( String [] args )
88 // System.Diagnostics.Debugger.Launch();
89 try
91 string bootstrap_ini = "cli_bridgetest_inprocess.ini";
92 if (args.Length > 0)
94 if (args[0] == "/?")
96 Console.WriteLine(
97 "\n\ncli_bridgetest_inprocess [bootstrap file] \n\n"
98 + "bootstrap file \n"
99 + "\t contains the entries UNO_TYPES and UNO_SERVICES.\n"
100 + "\t If a file is not provided than it is assumed that a\n"
101 + "\t cli_bridgetest_inprocess.ini file can be found in the\n "
102 + "\t current working directory.\n"
104 return 0;
106 else
108 bootstrap_ini = args[0];
112 // bootstrap native UNO
113 XComponentContext xContext =
114 Bootstrap.defaultBootstrap_InitialComponentContext(
115 bootstrap_ini, null );
117 using (new uno.util.DisposeGuard( (XComponent) xContext ))
119 XSet xSet = (XSet) xContext.getServiceManager();
120 xSet.insert(
121 new uno.Any(
122 typeof (XSingleComponentFactory),
123 new Factory(
124 typeof (cs_testobj.BridgeTestObject),
125 "com.sun.star.test.bridge.cli_uno.CsTestObject" ) ) );
126 xSet.insert(
127 new uno.Any(
128 typeof (XSingleComponentFactory),
129 new Factory(
130 typeof (vb_testobj.VBBridgeTestObject),
131 "com.sun.star.test.bridge.cli_uno.VbTestObject" ) ) );
132 xSet.insert(
133 new uno.Any(
134 typeof (XSingleComponentFactory),
135 new Factory(
136 typeof (cpp_bridgetest.BridgeTest),
137 "com.sun.star.test.bridge.cli_uno.CppBridgeTest" ) ) );
138 xSet.insert(
139 new uno.Any(
140 typeof (XSingleComponentFactory),
141 new Factory(
142 typeof (cs_testobj.BridgeTest),
143 "com.sun.star.test.bridge.cli_uno.CsBridgeTest" ) ) );
144 xSet.insert(
145 new uno.Any(
146 typeof (XSingleComponentFactory),
147 new Factory(
148 typeof (vb_bridetest.BridgeTest),
149 "com.sun.star.test.bridge.cli_uno.VbBridgeTest" ) ) );
151 // I.
152 // direct unbridged test
153 // get client object via singleton entry
154 Object test_client;
155 XMain xClient;
156 test_client = new cs_testobj.BridgeTest( xContext );
157 xClient = (XMain) test_client;
158 Console.WriteLine(
159 "\n[cli bridgetest] 1. C# client calls C# object");
160 // run with CLI target object
161 xClient.run(
162 new String [] {
163 "com.sun.star.test.bridge.cli_uno.CsTestObject" } );
165 // II:
166 // uno -ro uno_services.rdb -ro uno_types.rdb
167 // -s com.sun.star.test.bridge.BridgeTest
168 // -- com.sun.star.test.bridge.cli_uno.TestObject
170 // get native client
171 test_client =
172 xContext.getServiceManager().createInstanceWithContext(
173 "com.sun.star.test.bridge.BridgeTest", xContext );
174 xClient = (XMain) test_client;
175 Console.WriteLine(
176 "\n[cli bridgetest] 2. C++ client (native) calls C# object");
177 // run with CLI target object
178 xClient.run(
179 new String [] {
180 "com.sun.star.test.bridge.cli_uno.CsTestObject",
181 "noCurrentContext"} );
183 // III:
184 // uno -ro uno_services.rdb -ro uno_types.rdb
185 // -s com.sun.star.test.bridge.cli_uno.BridgeTest
186 // -- com.sun.star.test.bridge.CppTestObject
188 // get CLI client
189 test_client =
190 xContext.getServiceManager().createInstanceWithContext(
191 "com.sun.star.test.bridge.cli_uno.CsBridgeTest",
192 xContext );
193 xClient = (XMain) test_client;
194 Console.WriteLine(
195 "\n[cli bridgetest] 3. C# client calls C++ object (native)");
196 // run with native target object
197 xClient.run(
198 new String [] { "com.sun.star.test.bridge.CppTestObject" } );
200 // IV:
201 // uno -ro uno_services.rdb -ro uno_types.rdb
202 // -s com.sun.star.test.bridge.cli_uno.VbBridgeTest
203 // -- com.sun.star.test.bridge.CppTestObject
204 // get CLI client
205 test_client =
206 xContext.getServiceManager().createInstanceWithContext(
207 "com.sun.star.test.bridge.cli_uno.VbBridgeTest",
208 xContext );
209 xClient = (XMain) test_client;
210 Console.WriteLine(
211 "\n[cli bridgetest] 4. Visual Basic client calls C++ (native) object" );
212 // run with native target object
213 xClient.run(
214 new String [] { "com.sun.star.test.bridge.CppTestObject" } );
216 // V:
217 // uno -ro uno_services.rdb -ro uno_types.rdb
218 // -s com.sun.star.test.bridge.BridgeTest
219 // -- com.sun.star.test.bridge.cli_uno.VbTestObject
220 // get CLI client
221 // test_client =
222 // xContext.getServiceManager().createInstanceWithContext(
223 // "com.sun.star.test.bridge.BridgeTest", xContext );
224 // xClient = (XMain) test_client;
225 // Console.WriteLine(
226 // "[cli bridgetest] Visual Basic client: {0}",
227 // xClient.ToString() );
228 // // run with native target object
229 // xClient.run(
230 // new String [] {
231 // "com.sun.star.test.bridge.cli_uno.VbTestObject" } );
233 // VI:
234 // uno -ro uno_services.rdb -ro uno_types.rdb
235 // -s com.sun.star.test.bridge.cli_uno.CppBridgeTest
236 // -- com.sun.star.test.bridge.CppTestObject
237 test_client =
238 xContext.getServiceManager().createInstanceWithContext(
239 "com.sun.star.test.bridge.cli_uno.CppBridgeTest",
240 xContext );
241 xClient = (XMain) test_client;
242 Console.WriteLine(
243 "\n[cli bridgetest] 6. CLI C++ client calls C++ object (native)");
244 // run with native target object
245 xClient.run(
246 new String [] { "com.sun.star.test.bridge.CppTestObject" } );
249 catch (System.Exception exc)
251 GC.WaitForPendingFinalizers();
252 System.Console.WriteLine( exc );
253 return -1;
256 GC.WaitForPendingFinalizers();
257 System.Console.WriteLine( "====> all tests ok." );
258 return 0;