1a0428e9eSAndrew Rist#**************************************************************
2a0428e9eSAndrew Rist#
3a0428e9eSAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
4a0428e9eSAndrew Rist#  or more contributor license agreements.  See the NOTICE file
5a0428e9eSAndrew Rist#  distributed with this work for additional information
6a0428e9eSAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
7a0428e9eSAndrew Rist#  to you under the Apache License, Version 2.0 (the
8a0428e9eSAndrew Rist#  "License"); you may not use this file except in compliance
9a0428e9eSAndrew Rist#  with the License.  You may obtain a copy of the License at
10a0428e9eSAndrew Rist#
11a0428e9eSAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
12a0428e9eSAndrew Rist#
13a0428e9eSAndrew Rist#  Unless required by applicable law or agreed to in writing,
14a0428e9eSAndrew Rist#  software distributed under the License is distributed on an
15a0428e9eSAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16a0428e9eSAndrew Rist#  KIND, either express or implied.  See the License for the
17a0428e9eSAndrew Rist#  specific language governing permissions and limitations
18a0428e9eSAndrew Rist#  under the License.
19a0428e9eSAndrew Rist#
20a0428e9eSAndrew Rist#**************************************************************
21cdf0e10cSrcweirimport pyuno
22cdf0e10cSrcweirimport uno
23cdf0e10cSrcweirimport unittest
24cdf0e10cSrcweirimport exceptions
25cdf0e10cSrcweirimport types
26cdf0e10cSrcweir
27cdf0e10cSrcweirdef suite(ctx):
28cdf0e10cSrcweir    suite = unittest.TestSuite()
29cdf0e10cSrcweir    suite.addTest(TestCase("testErrors",ctx))
30cdf0e10cSrcweir    suite.addTest(TestCase("testBaseTypes",ctx))
31cdf0e10cSrcweir    suite.addTest(TestCase("testOutparam",ctx))
32cdf0e10cSrcweir    suite.addTest(TestCase("testStruct",ctx))
33cdf0e10cSrcweir    suite.addTest(TestCase("testType",ctx))
34cdf0e10cSrcweir    suite.addTest(TestCase("testEnum",ctx))
35cdf0e10cSrcweir    suite.addTest(TestCase("testBool",ctx))
36cdf0e10cSrcweir    suite.addTest(TestCase("testChar",ctx))
37cdf0e10cSrcweir    suite.addTest(TestCase("testUnicode",ctx))
38cdf0e10cSrcweir    suite.addTest(TestCase("testConstant",ctx))
39cdf0e10cSrcweir    suite.addTest(TestCase("testExceptions",ctx))
40cdf0e10cSrcweir    suite.addTest(TestCase("testInterface",ctx))
41cdf0e10cSrcweir    suite.addTest(TestCase("testByteSequence",ctx))
42cdf0e10cSrcweir    suite.addTest(TestCase("testInvoke",ctx))
43cdf0e10cSrcweir    return suite
44cdf0e10cSrcweir
45cdf0e10cSrcweirdef equalsEps( a,b,eps ):
46cdf0e10cSrcweir    if a - eps <= b and a+eps >= b:
47cdf0e10cSrcweir       return 1
48cdf0e10cSrcweir    return 0
49cdf0e10cSrcweir
50cdf0e10cSrcweirdef assign( rData, bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper,\
51cdf0e10cSrcweir              nUHyper, fFloat, fDouble, eEnum, rStr, xTest, rAny  ):
52cdf0e10cSrcweir    rData.Bool = bBool;
53cdf0e10cSrcweir    rData.Char = cChar;
54cdf0e10cSrcweir    rData.Byte = nByte;
55cdf0e10cSrcweir    rData.Short = nShort;
56cdf0e10cSrcweir    rData.UShort = nUShort;
57cdf0e10cSrcweir    rData.Long = nLong;
58cdf0e10cSrcweir    rData.ULong = nULong;
59cdf0e10cSrcweir    rData.Hyper = nHyper;
60cdf0e10cSrcweir    rData.UHyper = nUHyper;
61cdf0e10cSrcweir    rData.Float = fFloat;
62cdf0e10cSrcweir    rData.Double = fDouble;
63cdf0e10cSrcweir    rData.Enum = eEnum;
64cdf0e10cSrcweir    rData.String = rStr;
65cdf0e10cSrcweir    rData.Interface = xTest;
66cdf0e10cSrcweir    rData.Any = rAny;
67cdf0e10cSrcweir
68cdf0e10cSrcweir
69cdf0e10cSrcweirclass PythonTransporter:
70cdf0e10cSrcweir    def __init__( self ):
71cdf0e10cSrcweir        pass
72cdf0e10cSrcweir
73cdf0e10cSrcweir    def transportAny( self, arg ):
74cdf0e10cSrcweir        return arg
75cdf0e10cSrcweir
76cdf0e10cSrcweirclass TestCase( unittest.TestCase):
77cdf0e10cSrcweir
78cdf0e10cSrcweir      def __init__(self,method,ctx):
79cdf0e10cSrcweir          unittest.TestCase.__init__(self,method)
80cdf0e10cSrcweir          self.ctx = ctx
81cdf0e10cSrcweir
82cdf0e10cSrcweir      def setUp(self):
83cdf0e10cSrcweir         # the testcomponent from the testtools project
84cdf0e10cSrcweir         self.tobj = self.ctx.ServiceManager.createInstanceWithContext(
85cdf0e10cSrcweir                                'com.sun.star.test.bridge.CppTestObject' , self.ctx )
86cdf0e10cSrcweir
87cdf0e10cSrcweir         self.tobj.Bool = 1
88cdf0e10cSrcweir         self.tobj.Char = 'h'
89cdf0e10cSrcweir         self.tobj.Byte = 43
90cdf0e10cSrcweir         self.tobj.Short = -42
91cdf0e10cSrcweir         self.tobj.UShort = 44
92cdf0e10cSrcweir         self.tobj.Long = 42
93cdf0e10cSrcweir         self.tobj.ULong = 41
94cdf0e10cSrcweir         self.tobj.Hyper = 46
95cdf0e10cSrcweir         self.tobj.UHyper = 47
96cdf0e10cSrcweir         self.tobj.Float  = 4.3
97cdf0e10cSrcweir         self.tobj.Double = 4.2
98cdf0e10cSrcweir         self.tobj.Enum = 4
99cdf0e10cSrcweir         self.tobj.String = "yabadabadoo"
100cdf0e10cSrcweir         self.tobj.Interface = self.ctx
101cdf0e10cSrcweir         self.tobj.Any = self.tobj.String
102cdf0e10cSrcweir         mystruct = uno.createUnoStruct( "test.testtools.bridgetest.TestData" )
103cdf0e10cSrcweir         assign( mystruct, 1, 'h', 43, -42,44,42,41,46,47,4.3,4.2,4,"yabadabadoo",self.ctx,"yabadabadoo")
104cdf0e10cSrcweir         self.tobj.Struct = mystruct
105cdf0e10cSrcweir
106cdf0e10cSrcweir         self.testElement = uno.createUnoStruct( "test.testtools.bridgetest.TestElement" )
107cdf0e10cSrcweir         self.testElement.String = "foo"
108cdf0e10cSrcweir         self.testElement2 = uno.createUnoStruct( "test.testtools.bridgetest.TestElement" )
109cdf0e10cSrcweir         self.testElement2.String = "42"
110cdf0e10cSrcweir         self.tobj.Sequence = (self.testElement,self.testElement2)
111cdf0e10cSrcweir
112cdf0e10cSrcweir      def testBaseTypes(self):
113cdf0e10cSrcweir          self.failUnless( 42 == self.tobj.Long , "Long attribute" )
114cdf0e10cSrcweir          self.failUnless( 41 == self.tobj.ULong , "ULong attribute" )
115cdf0e10cSrcweir          self.failUnless( 43 == self.tobj.Byte , "Byte attribute" )
116cdf0e10cSrcweir          self.failUnless( 44 == self.tobj.UShort , "UShort attribute" )
117cdf0e10cSrcweir          self.failUnless( -42 == self.tobj.Short , "Short attribute" )
118cdf0e10cSrcweir          self.failUnless( 46 == self.tobj.Hyper , "Hyper attribute" )
119cdf0e10cSrcweir          self.failUnless( 47 == self.tobj.UHyper , "UHyper attribute" )
120cdf0e10cSrcweir          self.failUnless( self.tobj.Bool , "Bool attribute2" )
121cdf0e10cSrcweir          self.failUnless( "yabadabadoo" == self.tobj.String , "String attribute" )
122cdf0e10cSrcweir          self.failUnless( self.tobj.Sequence[0] == self.testElement , "Sequence test")
123cdf0e10cSrcweir          self.failUnless( self.tobj.Sequence[1] == self.testElement2 , "Sequence2 test")
124cdf0e10cSrcweir          self.failUnless( equalsEps( 4.3,self.tobj.Float,0.0001) , "float test" )
125cdf0e10cSrcweir          self.failUnless( 4.2 == self.tobj.Double , "double test" )
126cdf0e10cSrcweir          self.failUnless( self.ctx == self.tobj.Interface ,
127cdf0e10cSrcweir                          "object identity test with C++ object" )
128cdf0e10cSrcweir          self.failUnless( not self.ctx == self.tobj , "object not identical test " )
129cdf0e10cSrcweir          self.failUnless( 42 == self.tobj.transportAny( 42 ), "transportAny long" )
130cdf0e10cSrcweir          self.failUnless( "woo, this is python" == self.tobj.transportAny( "woo, this is python" ), \
131cdf0e10cSrcweir                  "string roundtrip via any test"  )
132cdf0e10cSrcweir
133cdf0e10cSrcweir      def testEnum( self ):
134cdf0e10cSrcweir          e1 = uno.Enum( "com.sun.star.uno.TypeClass" , "LONG" )
135cdf0e10cSrcweir          e2 = uno.Enum( "com.sun.star.uno.TypeClass" , "LONG" )
136cdf0e10cSrcweir          e3 = uno.Enum( "com.sun.star.uno.TypeClass" , "UNSIGNED_LONG" )
137cdf0e10cSrcweir          e4 = uno.Enum( "test.testtools.bridgetest.TestEnum" , "TWO" )
138cdf0e10cSrcweir          self.failUnless( e1 == e2 , "equal enum test" )
139cdf0e10cSrcweir          self.failUnless( not (e1 == e3) , "different enums test" )
140cdf0e10cSrcweir          self.failUnless( self.tobj.transportAny( e3 ) == e3, "enum roundtrip test" )
141cdf0e10cSrcweir          self.tobj.Enum = e4
142cdf0e10cSrcweir          self.failUnless( e4 == self.tobj.Enum , "enum assignment failed" )
143cdf0e10cSrcweir
144cdf0e10cSrcweir      def testType(self ):
145cdf0e10cSrcweir          t1 = uno.getTypeByName( "com.sun.star.lang.XComponent" )
146cdf0e10cSrcweir          t2 = uno.getTypeByName( "com.sun.star.lang.XComponent" )
147cdf0e10cSrcweir          t3 = uno.getTypeByName( "com.sun.star.lang.EventObject" )
148cdf0e10cSrcweir          self.failUnless( t1.typeClass == \
149cdf0e10cSrcweir              uno.Enum( "com.sun.star.uno.TypeClass", "INTERFACE" ), "typeclass of type test" )
150cdf0e10cSrcweir          self.failUnless( t3.typeClass == \
151cdf0e10cSrcweir              uno.Enum( "com.sun.star.uno.TypeClass", "STRUCT" ), "typeclass of type test")
152cdf0e10cSrcweir          self.failUnless( t1 == t2 , "equal type test" )
153cdf0e10cSrcweir          self.failUnless( t1 == t2 , "equal type test" )
154cdf0e10cSrcweir          self.failUnless( t1 == self.tobj.transportAny( t1 ), "type rountrip test" )
155cdf0e10cSrcweir
156cdf0e10cSrcweir      def testBool( self ):
157cdf0e10cSrcweir          self.failUnless( uno.Bool(1) , "uno.Bool true test" )
158cdf0e10cSrcweir          self.failUnless( not uno.Bool(0) , "uno.Bool false test" )
159cdf0e10cSrcweir          self.failUnless( uno.Bool( "true") , "uno.Bool true1 test" )
160cdf0e10cSrcweir          self.failUnless( not uno.Bool( "false") , "uno.Bool true1 test" )
161cdf0e10cSrcweir
162cdf0e10cSrcweir          self.tobj.Bool = uno.Bool(1)
163cdf0e10cSrcweir          self.failUnless( self.tobj.Bool , "bool true attribute test" )
164cdf0e10cSrcweir          self.tobj.Bool = uno.Bool(0)
165cdf0e10cSrcweir          self.failUnless( not self.tobj.Bool , "bool true attribute test" )
166cdf0e10cSrcweir
167cdf0e10cSrcweir          # new boolean semantic
168cdf0e10cSrcweir          self.failUnless( id( self.tobj.transportAny( True ) ) == id(True)  , "boolean preserve test")
169cdf0e10cSrcweir          self.failUnless( id( self.tobj.transportAny( False ) ) == id(False) , "boolean preserve test" )
170cdf0e10cSrcweir          self.failUnless( id( self.tobj.transportAny(1) ) != id( True ), "boolean preserve test" )
171cdf0e10cSrcweir          self.failUnless( id( self.tobj.transportAny(0) ) != id( False ), "boolean preserve test" )
172cdf0e10cSrcweir
173cdf0e10cSrcweir      def testChar( self ):
174cdf0e10cSrcweir          self.tobj.Char = uno.Char( u'h' )
175cdf0e10cSrcweir          self.failUnless( self.tobj.Char == uno.Char( u'h' ), "char type test" )
176cdf0e10cSrcweir          self.failUnless( isinstance( self.tobj.transportAny( uno.Char(u'h') ),uno.Char),"char preserve test" )
177cdf0e10cSrcweir
178cdf0e10cSrcweir      def testStruct( self ):
179cdf0e10cSrcweir          mystruct = uno.createUnoStruct( "test.testtools.bridgetest.TestData" )
180cdf0e10cSrcweir          assign( mystruct, 1, 'h', 43, -42,44,42,41,46,47,4.3,4.2,4,"yabadabadoo",self.ctx,"yabadabadoo")
181cdf0e10cSrcweir          self.tobj.Struct = mystruct
182cdf0e10cSrcweir          aSecondStruct = self.tobj.Struct
183cdf0e10cSrcweir
184cdf0e10cSrcweir          self.failUnless( self.tobj.Struct == mystruct, "struct roundtrip for equality test" )
185cdf0e10cSrcweir          self.failUnless( aSecondStruct == mystruct, "struct roundtrip for equality test2" )
186cdf0e10cSrcweir          aSecondStruct.Short = 720
187cdf0e10cSrcweir          self.failUnless( not aSecondStruct == mystruct , "different structs equality test" )
188cdf0e10cSrcweir          self.failUnless( not self.ctx == mystruct , "object is not equal to struct test" )
189cdf0e10cSrcweir          self.failUnless( mystruct == self.tobj.transportAny( mystruct ), "struct roundtrip with any test" )
190cdf0e10cSrcweir          my2ndstruct = uno.createUnoStruct( "test.testtools.bridgetest.TestData", \
191cdf0e10cSrcweir                      1, 'h', 43, -42,44,42,41,46,47,4.3,4.2,4,"yabadabadoo",self.ctx,"yabadabadoo",())
192cdf0e10cSrcweir          self.failUnless( my2ndstruct == mystruct, "struct non-default ctor test" )
193cdf0e10cSrcweir      def testUnicode( self ):
194cdf0e10cSrcweir          uni = u'\0148'
195cdf0e10cSrcweir          self.tobj.String = uni
196cdf0e10cSrcweir          self.failUnless( uni == self.tobj.String )
197cdf0e10cSrcweir
198cdf0e10cSrcweir
199cdf0e10cSrcweir          self.tobj.String = u'dubidu'
200cdf0e10cSrcweir          self.failUnless( u'dubidu' == self.tobj.String , "unicode comparison test")
201cdf0e10cSrcweir          self.failUnless( 'dubidu' == self.tobj.String , "unicode vs. string comparison test" )
202cdf0e10cSrcweir
203cdf0e10cSrcweir      def testConstant( self ):
204cdf0e10cSrcweir          self.failUnless( uno.getConstantByName( "com.sun.star.beans.PropertyConcept.ATTRIBUTES" ) == 4,\
205cdf0e10cSrcweir                                           "constant retrieval test" )
206cdf0e10cSrcweir
207cdf0e10cSrcweir      def testExceptions( self ):
208cdf0e10cSrcweir          unoExc = uno.getClass( "com.sun.star.uno.Exception" )
209cdf0e10cSrcweir          ioExc = uno.getClass( "com.sun.star.io.IOException" )
210cdf0e10cSrcweir          dispExc = uno.getClass( "com.sun.star.lang.DisposedException" )
211cdf0e10cSrcweir          wasHere = 0
212cdf0e10cSrcweir          try:
213cdf0e10cSrcweir                raise ioExc( "huhuh" , self.tobj )
214*7d9fa7c3SPedro Giffuni          except unoExc as instance:
215cdf0e10cSrcweir                wasHere = 1
216cdf0e10cSrcweir                self.failUnless( wasHere , "exceptiont test 1" )
217cdf0e10cSrcweir
218cdf0e10cSrcweir          wasHere = 0
219cdf0e10cSrcweir          try:
220cdf0e10cSrcweir                raise ioExc
221cdf0e10cSrcweir          except ioExc:
222cdf0e10cSrcweir                wasHere = 1
223cdf0e10cSrcweir          else:
224cdf0e10cSrcweir                self.failUnless( wasHere, "exception test 2" )
225cdf0e10cSrcweir
226cdf0e10cSrcweir          wasHere = 0
227cdf0e10cSrcweir          try:
228cdf0e10cSrcweir                raise dispExc
229cdf0e10cSrcweir          except ioExc:
230cdf0e10cSrcweir                 pass
231cdf0e10cSrcweir          except unoExc:
232cdf0e10cSrcweir                wasHere = 1
233cdf0e10cSrcweir          self.failUnless(wasHere, "exception test 3")
234cdf0e10cSrcweir
235cdf0e10cSrcweir          illegalArg = uno.getClass( "com.sun.star.lang.IllegalArgumentException" )
236cdf0e10cSrcweir          wasHere = 0
237cdf0e10cSrcweir          try:
238cdf0e10cSrcweir                self.tobj.raiseException( 1 , "foo" , self.tobj )
239cdf0e10cSrcweir                self.failUnless( 0 , "exception test 5a" )
240cdf0e10cSrcweir          except ioExc:
241cdf0e10cSrcweir                self.failUnless( 0 , "exception test 5b" )
242*7d9fa7c3SPedro Giffuni          except illegalArg as i:
243cdf0e10cSrcweir                self.failUnless( 1 == i.ArgumentPosition , "exception member test" )
244cdf0e10cSrcweir                self.failUnless( "foo" == i.Message , "exception member test 2 " )
245cdf0e10cSrcweir                wasHere = 1
246cdf0e10cSrcweir          else:
247cdf0e10cSrcweir                self.failUnless( 0, "except test 5c" )
248cdf0e10cSrcweir                self.failUnless( wasHere, "illegal argument exception test failed" )
249cdf0e10cSrcweir
250cdf0e10cSrcweir      def testInterface(self):
251cdf0e10cSrcweir          clazz = uno.getClass( "com.sun.star.lang.XComponent" )
252cdf0e10cSrcweir          self.failUnless( "com.sun.star.lang.XComponent" == clazz.__pyunointerface__ )
253cdf0e10cSrcweir          self.failUnless( issubclass( clazz, uno.getClass( "com.sun.star.uno.XInterface" ) ) )
254cdf0e10cSrcweir          self.tobj.Interface = None
255cdf0e10cSrcweir
256cdf0e10cSrcweir
257cdf0e10cSrcweir      def testOutparam( self):
258cdf0e10cSrcweir          # outparameter
259cdf0e10cSrcweir          struct, mybool,mychar,mybyte,myshort,myushort,mylong,myulong,myhyper,myuhyper,myfloat,        \
260cdf0e10cSrcweir              mydouble,myenum,mystring,myinterface,myany,myseq,my2ndstruct = self.tobj.getValues(       \
261cdf0e10cSrcweir              None,None,None,None,None,None,None,None,None,None,                \
262cdf0e10cSrcweir              None,None,None,None,None,None,None)
263cdf0e10cSrcweir          self.failUnless(struct == self.tobj.Struct, "outparam 1 test")
264cdf0e10cSrcweir          self.failUnless(self.tobj.Bool, "outparam 2 test")
265cdf0e10cSrcweir          self.failUnless(mychar == self.tobj.Char, "outparam 3 test")
266cdf0e10cSrcweir          self.failUnless(mybyte == self.tobj.Byte, "outparam 4 test")
267cdf0e10cSrcweir          self.failUnless(myshort == self.tobj.Short, "outparam 5 test")
268cdf0e10cSrcweir          self.failUnless(myushort == self.tobj.UShort, "outparam 6 test")
269cdf0e10cSrcweir          self.failUnless(mylong == self.tobj.Long, "outparam 7 test")
270cdf0e10cSrcweir          self.failUnless(myulong == self.tobj.ULong, "outparam 8 test")
271cdf0e10cSrcweir          self.failUnless(myhyper == self.tobj.Hyper, "outparam 9 test")
272cdf0e10cSrcweir          self.failUnless(myuhyper == self.tobj.UHyper, "outparam 10 test")
273cdf0e10cSrcweir          self.failUnless(myfloat == self.tobj.Float, "outparam 11 test")
274cdf0e10cSrcweir          self.failUnless(mydouble == self.tobj.Double, "outparam 12 test")
275cdf0e10cSrcweir          self.failUnless(myenum == self.tobj.Enum, "outparam 13 test")
276cdf0e10cSrcweir          self.failUnless(mystring == self.tobj.String, "outparam 14 test")
277cdf0e10cSrcweir          self.failUnless(myinterface == self.tobj.Interface, "outparam 15 test")
278cdf0e10cSrcweir          self.failUnless(myany == self.tobj.Any, "outparam 16 test")
279cdf0e10cSrcweir          self.failUnless(myseq == self.tobj.Sequence, "outparam 17 test")
280cdf0e10cSrcweir          self.failUnless(my2ndstruct == struct, "outparam 18 test")
281cdf0e10cSrcweir
282cdf0e10cSrcweir# should work, debug on windows, why not
283cdf0e10cSrcweir#    struct, mybool,mychar,mybyte,myshort,myushort,mylong,myulong,myhyper,myuhyper,myfloat,\
284cdf0e10cSrcweir#              mydouble,myenum,mystring,myinterface,myany,myseq,my2ndstruct = self.tobj.setValues2( \
285cdf0e10cSrcweir#             mybool,mychar,mybyte,myshort,myushort,mylong,myulong,myhyper,myuhyper,myfloat,\
286cdf0e10cSrcweir#              mydouble,myenum,mystring,myinterface,myany,myseq,my2ndstruct)
287cdf0e10cSrcweir#    self.failUnless(struct == self.tobj.Struct, "outparam 1 test")
288cdf0e10cSrcweir#    self.failUnless( mybool and self.tobj.Bool, "outparam 2 test")
289cdf0e10cSrcweir#    self.failUnless(mychar == self.tobj.Char, "outparam 3 test")
290cdf0e10cSrcweir#    self.failUnless(mybyte == self.tobj.Byte, "outparam 4 test")
291cdf0e10cSrcweir#    self.failUnless(myshort == self.tobj.Short, "outparam 5 test")
292cdf0e10cSrcweir#    self.failUnless(myushort == self.tobj.UShort, "outparam 6 test")
293cdf0e10cSrcweir#    self.failUnless(mylong == self.tobj.Long, "outparam 7 test")
294cdf0e10cSrcweir#    self.failUnless(myulong == self.tobj.ULong, "outparam 8 test")
295cdf0e10cSrcweir#    self.failUnless(myhyper == self.tobj.Hyper, "outparam 9 test")
296cdf0e10cSrcweir#    self.failUnless(myuhyper == self.tobj.UHyper, "outparam 10 test")
297cdf0e10cSrcweir#    self.failUnless(myfloat == self.tobj.Float, "outparam 11 test")
298cdf0e10cSrcweir#    self.failUnless(mydouble == self.tobj.Double, "outparam 12 test")
299cdf0e10cSrcweir#    self.failUnless(myenum == self.tobj.Enum, "outparam 13 test")
300cdf0e10cSrcweir#    self.failUnless(mystring == self.tobj.String, "outparam 14 test")
301cdf0e10cSrcweir#    self.failUnless(myinterface == self.tobj.Interface, "outparam 15 test")
302cdf0e10cSrcweir#    self.failUnless(myany == self.tobj.Any, "outparam 16 test")
303cdf0e10cSrcweir#    self.failUnless(myseq == self.tobj.Sequence, "outparam 17 test")
304cdf0e10cSrcweir#    self.failUnless(my2ndstruct == struct, "outparam 18 test")
305cdf0e10cSrcweir
306cdf0e10cSrcweir      def testErrors( self ):
307cdf0e10cSrcweir
308cdf0e10cSrcweir          wasHere = 0
309cdf0e10cSrcweir          try:
310cdf0e10cSrcweir                self.tobj.a = 5
311cdf0e10cSrcweir                self.fail("attribute a shouldn't exist")
312cdf0e10cSrcweir          except AttributeError:
313cdf0e10cSrcweir                 wasHere = 1
314cdf0e10cSrcweir          except IllegalArgumentException:
315cdf0e10cSrcweir                 wasHere = 1
316cdf0e10cSrcweir          self.failUnless( wasHere, "wrong attribute test" )
317cdf0e10cSrcweir
318cdf0e10cSrcweir          IllegalArgumentException = uno.getClass("com.sun.star.lang.IllegalArgumentException" )
319cdf0e10cSrcweir          RuntimeException = uno.getClass("com.sun.star.uno.RuntimeException" )
320cdf0e10cSrcweir
321cdf0e10cSrcweir# TODO: Remove this once it is done
322cdf0e10cSrcweir# wrong number of arguments bug !?
323cdf0e10cSrcweir          self.failUnlessRaises( IllegalArgumentException, self.tobj.transportAny, 42, 43 )
324cdf0e10cSrcweir          self.failUnlessRaises( IllegalArgumentException, self.tobj.transportAny )
325cdf0e10cSrcweir          self.failUnlessRaises( RuntimeException, uno.getClass, "a.b" )
326cdf0e10cSrcweir          self.failUnlessRaises( RuntimeException, uno.getClass, "com.sun.star.uno.TypeClass" )
327cdf0e10cSrcweir
328cdf0e10cSrcweir          self.failUnlessRaises( RuntimeException, uno.Enum,  "a" , "b" )
329cdf0e10cSrcweir          self.failUnlessRaises( RuntimeException, uno.Enum, "com.sun.star.uno.TypeClass" , "b" )
330cdf0e10cSrcweir          self.failUnlessRaises( RuntimeException, uno.Enum, "com.sun.star.uno.XInterface" , "b" )
331cdf0e10cSrcweir
332cdf0e10cSrcweir          tcInterface =uno.Enum( "com.sun.star.uno.TypeClass" , "INTERFACE" )
333cdf0e10cSrcweir          self.failUnlessRaises( RuntimeException, uno.Type, "a", tcInterface )
334cdf0e10cSrcweir          self.failUnlessRaises( RuntimeException, uno.Type, "com.sun.star.uno.Exception", tcInterface )
335cdf0e10cSrcweir
336cdf0e10cSrcweir          self.failUnlessRaises( (RuntimeException,exceptions.RuntimeError), uno.getTypeByName, "a" )
337cdf0e10cSrcweir
338cdf0e10cSrcweir          self.failUnlessRaises( (RuntimeException), uno.getConstantByName, "a" )
339cdf0e10cSrcweir          self.failUnlessRaises( (RuntimeException), uno.getConstantByName, "com.sun.star.uno.XInterface" )
340cdf0e10cSrcweir
341cdf0e10cSrcweir      def testByteSequence( self ):
342cdf0e10cSrcweir          s = uno.ByteSequence( "ab" )
343cdf0e10cSrcweir          self.failUnless( s == uno.ByteSequence( "ab" ) )
344cdf0e10cSrcweir          self.failUnless( uno.ByteSequence( "abc" ) == s + uno.ByteSequence( "c" ) )
345cdf0e10cSrcweir          self.failUnless( uno.ByteSequence( "abc" ) == s + "c" )
346cdf0e10cSrcweir          self.failUnless( s + "c"  == "abc" )
347cdf0e10cSrcweir          self.failUnless( s == uno.ByteSequence( s ) )
348cdf0e10cSrcweir          self.failUnless( s[0] == 'a' )
349cdf0e10cSrcweir          self.failUnless( s[1] == 'b' )
350cdf0e10cSrcweir
351cdf0e10cSrcweir
352cdf0e10cSrcweir      def testInvoke( self ):
353cdf0e10cSrcweir          self.failUnless( 5 == uno.invoke( self.tobj , "transportAny" , (uno.Any("byte", 5),) ) )
354cdf0e10cSrcweir          self.failUnless( 5 == uno.invoke(
355cdf0e10cSrcweir              PythonTransporter(), "transportAny" , (uno.Any( "byte", 5 ),) ) )
356cdf0e10cSrcweir          t = uno.getTypeByName( "long" )
357cdf0e10cSrcweir          mystruct = uno.createUnoStruct(
358cdf0e10cSrcweir              "com.sun.star.beans.PropertyValue", "foo",0,uno.Any(t,2),0 )
359cdf0e10cSrcweir          mystruct.Value = uno.Any(t, 1)
360cdf0e10cSrcweir
361cdf0e10cSrcweir
362