1 #*************************************************************************
3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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 #*************************************************************************
34 suite
= unittest
.TestSuite()
35 suite
.addTest(TestCase("testErrors",ctx
))
36 suite
.addTest(TestCase("testBaseTypes",ctx
))
37 suite
.addTest(TestCase("testOutparam",ctx
))
38 suite
.addTest(TestCase("testStruct",ctx
))
39 suite
.addTest(TestCase("testType",ctx
))
40 suite
.addTest(TestCase("testEnum",ctx
))
41 suite
.addTest(TestCase("testBool",ctx
))
42 suite
.addTest(TestCase("testChar",ctx
))
43 suite
.addTest(TestCase("testUnicode",ctx
))
44 suite
.addTest(TestCase("testConstant",ctx
))
45 suite
.addTest(TestCase("testExceptions",ctx
))
46 suite
.addTest(TestCase("testInterface",ctx
))
47 suite
.addTest(TestCase("testByteSequence",ctx
))
48 suite
.addTest(TestCase("testInvoke",ctx
))
51 def equalsEps( a
,b
,eps
):
52 if a
- eps
<= b
and a
+eps
>= b
:
56 def assign( rData
, bBool
, cChar
, nByte
, nShort
, nUShort
, nLong
, nULong
, nHyper
,\
57 nUHyper
, fFloat
, fDouble
, eEnum
, rStr
, xTest
, rAny
):
62 rData
.UShort
= nUShort
;
66 rData
.UHyper
= nUHyper
;
68 rData
.Double
= fDouble
;
71 rData
.Interface
= xTest
;
75 class PythonTransporter
:
79 def transportAny( self
, arg
):
82 class TestCase( unittest
.TestCase
):
84 def __init__(self
,method
,ctx
):
85 unittest
.TestCase
.__init
__(self
,method
)
89 # the testcomponent from the testtools project
90 self
.tobj
= self
.ctx
.ServiceManager
.createInstanceWithContext(
91 'com.sun.star.test.bridge.CppTestObject' , self
.ctx
)
101 self
.tobj
.UHyper
= 47
102 self
.tobj
.Float
= 4.3
103 self
.tobj
.Double
= 4.2
105 self
.tobj
.String
= "yabadabadoo"
106 self
.tobj
.Interface
= self
.ctx
107 self
.tobj
.Any
= self
.tobj
.String
108 mystruct
= uno
.createUnoStruct( "test.testtools.bridgetest.TestData" )
109 assign( mystruct
, 1, 'h', 43, -42,44,42,41,46,47,4.3,4.2,4,"yabadabadoo",self
.ctx
,"yabadabadoo")
110 self
.tobj
.Struct
= mystruct
112 self
.testElement
= uno
.createUnoStruct( "test.testtools.bridgetest.TestElement" )
113 self
.testElement
.String
= "foo"
114 self
.testElement2
= uno
.createUnoStruct( "test.testtools.bridgetest.TestElement" )
115 self
.testElement2
.String
= "42"
116 self
.tobj
.Sequence
= (self
.testElement
,self
.testElement2
)
118 def testBaseTypes(self
):
119 self
.failUnless( 42 == self
.tobj
.Long
, "Long attribute" )
120 self
.failUnless( 41 == self
.tobj
.ULong
, "ULong attribute" )
121 self
.failUnless( 43 == self
.tobj
.Byte
, "Byte attribute" )
122 self
.failUnless( 44 == self
.tobj
.UShort
, "UShort attribute" )
123 self
.failUnless( -42 == self
.tobj
.Short
, "Short attribute" )
124 self
.failUnless( 46 == self
.tobj
.Hyper
, "Hyper attribute" )
125 self
.failUnless( 47 == self
.tobj
.UHyper
, "UHyper attribute" )
126 self
.failUnless( self
.tobj
.Bool
, "Bool attribute2" )
127 self
.failUnless( "yabadabadoo" == self
.tobj
.String
, "String attribute" )
128 self
.failUnless( self
.tobj
.Sequence
[0] == self
.testElement
, "Sequence test")
129 self
.failUnless( self
.tobj
.Sequence
[1] == self
.testElement2
, "Sequence2 test")
130 self
.failUnless( equalsEps( 4.3,self
.tobj
.Float
,0.0001) , "float test" )
131 self
.failUnless( 4.2 == self
.tobj
.Double
, "double test" )
132 self
.failUnless( self
.ctx
== self
.tobj
.Interface
,
133 "object identity test with C++ object" )
134 self
.failUnless( not self
.ctx
== self
.tobj
, "object not identical test " )
135 self
.failUnless( 42 == self
.tobj
.transportAny( 42 ), "transportAny long" )
136 self
.failUnless( "woo, this is python" == self
.tobj
.transportAny( "woo, this is python" ), \
137 "string roundtrip via any test" )
139 def testEnum( self
):
140 e1
= uno
.Enum( "com.sun.star.uno.TypeClass" , "LONG" )
141 e2
= uno
.Enum( "com.sun.star.uno.TypeClass" , "LONG" )
142 e3
= uno
.Enum( "com.sun.star.uno.TypeClass" , "UNSIGNED_LONG" )
143 e4
= uno
.Enum( "test.testtools.bridgetest.TestEnum" , "TWO" )
144 self
.failUnless( e1
== e2
, "equal enum test" )
145 self
.failUnless( not (e1
== e3
) , "different enums test" )
146 self
.failUnless( self
.tobj
.transportAny( e3
) == e3
, "enum roundtrip test" )
148 self
.failUnless( e4
== self
.tobj
.Enum
, "enum assignment failed" )
151 t1
= uno
.getTypeByName( "com.sun.star.lang.XComponent" )
152 t2
= uno
.getTypeByName( "com.sun.star.lang.XComponent" )
153 t3
= uno
.getTypeByName( "com.sun.star.lang.EventObject" )
154 self
.failUnless( t1
.typeClass
== \
155 uno
.Enum( "com.sun.star.uno.TypeClass", "INTERFACE" ), "typeclass of type test" )
156 self
.failUnless( t3
.typeClass
== \
157 uno
.Enum( "com.sun.star.uno.TypeClass", "STRUCT" ), "typeclass of type test")
158 self
.failUnless( t1
== t2
, "equal type test" )
159 self
.failUnless( t1
== t2
, "equal type test" )
160 self
.failUnless( t1
== self
.tobj
.transportAny( t1
), "type rountrip test" )
162 def testBool( self
):
163 self
.failUnless( uno
.Bool(1) , "uno.Bool true test" )
164 self
.failUnless( not uno
.Bool(0) , "uno.Bool false test" )
165 self
.failUnless( uno
.Bool( "true") , "uno.Bool true1 test" )
166 self
.failUnless( not uno
.Bool( "false") , "uno.Bool true1 test" )
168 self
.tobj
.Bool
= uno
.Bool(1)
169 self
.failUnless( self
.tobj
.Bool
, "bool true attribute test" )
170 self
.tobj
.Bool
= uno
.Bool(0)
171 self
.failUnless( not self
.tobj
.Bool
, "bool true attribute test" )
173 # new boolean semantic
174 self
.failUnless( id( self
.tobj
.transportAny( True ) ) == id(True) , "boolean preserve test")
175 self
.failUnless( id( self
.tobj
.transportAny( False ) ) == id(False) , "boolean preserve test" )
176 self
.failUnless( id( self
.tobj
.transportAny(1) ) != id( True ), "boolean preserve test" )
177 self
.failUnless( id( self
.tobj
.transportAny(0) ) != id( False ), "boolean preserve test" )
179 def testChar( self
):
180 self
.tobj
.Char
= uno
.Char( u
'h' )
181 self
.failUnless( self
.tobj
.Char
== uno
.Char( u
'h' ), "char type test" )
182 self
.failUnless( isinstance( self
.tobj
.transportAny( uno
.Char(u
'h') ),uno
.Char
),"char preserve test" )
184 def testStruct( self
):
185 mystruct
= uno
.createUnoStruct( "test.testtools.bridgetest.TestData" )
186 assign( mystruct
, 1, 'h', 43, -42,44,42,41,46,47,4.3,4.2,4,"yabadabadoo",self
.ctx
,"yabadabadoo")
187 self
.tobj
.Struct
= mystruct
188 aSecondStruct
= self
.tobj
.Struct
190 self
.failUnless( self
.tobj
.Struct
== mystruct
, "struct roundtrip for equality test" )
191 self
.failUnless( aSecondStruct
== mystruct
, "struct roundtrip for equality test2" )
192 aSecondStruct
.Short
= 720
193 self
.failUnless( not aSecondStruct
== mystruct
, "different structs equality test" )
194 self
.failUnless( not self
.ctx
== mystruct
, "object is not equal to struct test" )
195 self
.failUnless( mystruct
== self
.tobj
.transportAny( mystruct
), "struct roundtrip with any test" )
196 my2ndstruct
= uno
.createUnoStruct( "test.testtools.bridgetest.TestData", \
197 1, 'h', 43, -42,44,42,41,46,47,4.3,4.2,4,"yabadabadoo",self
.ctx
,"yabadabadoo",())
198 self
.failUnless( my2ndstruct
== mystruct
, "struct non-default ctor test" )
199 def testUnicode( self
):
201 self
.tobj
.String
= uni
202 self
.failUnless( uni
== self
.tobj
.String
)
205 self
.tobj
.String
= u
'dubidu'
206 self
.failUnless( u
'dubidu' == self
.tobj
.String
, "unicode comparison test")
207 self
.failUnless( 'dubidu' == self
.tobj
.String
, "unicode vs. string comparison test" )
209 def testConstant( self
):
210 self
.failUnless( uno
.getConstantByName( "com.sun.star.beans.PropertyConcept.ATTRIBUTES" ) == 4,\
211 "constant retrieval test" )
213 def testExceptions( self
):
214 unoExc
= uno
.getClass( "com.sun.star.uno.Exception" )
215 ioExc
= uno
.getClass( "com.sun.star.io.IOException" )
216 dispExc
= uno
.getClass( "com.sun.star.lang.DisposedException" )
219 raise ioExc( "huhuh" , self
.tobj
)
220 except unoExc
, instance
:
222 self
.failUnless( wasHere
, "exceptiont test 1" )
230 self
.failUnless( wasHere
, "exception test 2" )
239 self
.failUnless(wasHere
, "exception test 3")
241 illegalArg
= uno
.getClass( "com.sun.star.lang.IllegalArgumentException" )
244 self
.tobj
.raiseException( 1 , "foo" , self
.tobj
)
245 self
.failUnless( 0 , "exception test 5a" )
247 self
.failUnless( 0 , "exception test 5b" )
248 except illegalArg
, i
:
249 self
.failUnless( 1 == i
.ArgumentPosition
, "exception member test" )
250 self
.failUnless( "foo" == i
.Message
, "exception member test 2 " )
253 self
.failUnless( 0, "except test 5c" )
254 self
.failUnless( wasHere
, "illegal argument exception test failed" )
256 def testInterface(self
):
257 clazz
= uno
.getClass( "com.sun.star.lang.XComponent" )
258 self
.failUnless( "com.sun.star.lang.XComponent" == clazz
.__pyunointerface
__ )
259 self
.failUnless( issubclass( clazz
, uno
.getClass( "com.sun.star.uno.XInterface" ) ) )
260 self
.tobj
.Interface
= None
263 def testOutparam( self
):
265 struct
, mybool
,mychar
,mybyte
,myshort
,myushort
,mylong
,myulong
,myhyper
,myuhyper
,myfloat
, \
266 mydouble
,myenum
,mystring
,myinterface
,myany
,myseq
,my2ndstruct
= self
.tobj
.getValues( \
267 None,None,None,None,None,None,None,None,None,None, \
268 None,None,None,None,None,None,None)
269 self
.failUnless(struct
== self
.tobj
.Struct
, "outparam 1 test")
270 self
.failUnless(self
.tobj
.Bool
, "outparam 2 test")
271 self
.failUnless(mychar
== self
.tobj
.Char
, "outparam 3 test")
272 self
.failUnless(mybyte
== self
.tobj
.Byte
, "outparam 4 test")
273 self
.failUnless(myshort
== self
.tobj
.Short
, "outparam 5 test")
274 self
.failUnless(myushort
== self
.tobj
.UShort
, "outparam 6 test")
275 self
.failUnless(mylong
== self
.tobj
.Long
, "outparam 7 test")
276 self
.failUnless(myulong
== self
.tobj
.ULong
, "outparam 8 test")
277 self
.failUnless(myhyper
== self
.tobj
.Hyper
, "outparam 9 test")
278 self
.failUnless(myuhyper
== self
.tobj
.UHyper
, "outparam 10 test")
279 self
.failUnless(myfloat
== self
.tobj
.Float
, "outparam 11 test")
280 self
.failUnless(mydouble
== self
.tobj
.Double
, "outparam 12 test")
281 self
.failUnless(myenum
== self
.tobj
.Enum
, "outparam 13 test")
282 self
.failUnless(mystring
== self
.tobj
.String
, "outparam 14 test")
283 self
.failUnless(myinterface
== self
.tobj
.Interface
, "outparam 15 test")
284 self
.failUnless(myany
== self
.tobj
.Any
, "outparam 16 test")
285 self
.failUnless(myseq
== self
.tobj
.Sequence
, "outparam 17 test")
286 self
.failUnless(my2ndstruct
== struct
, "outparam 18 test")
288 # should work, debug on windows, why not
289 # struct, mybool,mychar,mybyte,myshort,myushort,mylong,myulong,myhyper,myuhyper,myfloat,\
290 # mydouble,myenum,mystring,myinterface,myany,myseq,my2ndstruct = self.tobj.setValues2( \
291 # mybool,mychar,mybyte,myshort,myushort,mylong,myulong,myhyper,myuhyper,myfloat,\
292 # mydouble,myenum,mystring,myinterface,myany,myseq,my2ndstruct)
293 # self.failUnless(struct == self.tobj.Struct, "outparam 1 test")
294 # self.failUnless( mybool and self.tobj.Bool, "outparam 2 test")
295 # self.failUnless(mychar == self.tobj.Char, "outparam 3 test")
296 # self.failUnless(mybyte == self.tobj.Byte, "outparam 4 test")
297 # self.failUnless(myshort == self.tobj.Short, "outparam 5 test")
298 # self.failUnless(myushort == self.tobj.UShort, "outparam 6 test")
299 # self.failUnless(mylong == self.tobj.Long, "outparam 7 test")
300 # self.failUnless(myulong == self.tobj.ULong, "outparam 8 test")
301 # self.failUnless(myhyper == self.tobj.Hyper, "outparam 9 test")
302 # self.failUnless(myuhyper == self.tobj.UHyper, "outparam 10 test")
303 # self.failUnless(myfloat == self.tobj.Float, "outparam 11 test")
304 # self.failUnless(mydouble == self.tobj.Double, "outparam 12 test")
305 # self.failUnless(myenum == self.tobj.Enum, "outparam 13 test")
306 # self.failUnless(mystring == self.tobj.String, "outparam 14 test")
307 # self.failUnless(myinterface == self.tobj.Interface, "outparam 15 test")
308 # self.failUnless(myany == self.tobj.Any, "outparam 16 test")
309 # self.failUnless(myseq == self.tobj.Sequence, "outparam 17 test")
310 # self.failUnless(my2ndstruct == struct, "outparam 18 test")
312 def testErrors( self
):
317 self
.fail("attribute a shouldn't exist")
318 except AttributeError:
320 except IllegalArgumentException
:
322 self
.failUnless( wasHere
, "wrong attribute test" )
324 IllegalArgumentException
= uno
.getClass("com.sun.star.lang.IllegalArgumentException" )
325 RuntimeException
= uno
.getClass("com.sun.star.uno.RuntimeException" )
327 # TODO: Remove this once it is done
328 # wrong number of arguments bug !?
329 self
.failUnlessRaises( IllegalArgumentException
, self
.tobj
.transportAny
, 42, 43 )
330 self
.failUnlessRaises( IllegalArgumentException
, self
.tobj
.transportAny
)
331 self
.failUnlessRaises( RuntimeException
, uno
.getClass
, "a.b" )
332 self
.failUnlessRaises( RuntimeException
, uno
.getClass
, "com.sun.star.uno.TypeClass" )
334 self
.failUnlessRaises( RuntimeException
, uno
.Enum
, "a" , "b" )
335 self
.failUnlessRaises( RuntimeException
, uno
.Enum
, "com.sun.star.uno.TypeClass" , "b" )
336 self
.failUnlessRaises( RuntimeException
, uno
.Enum
, "com.sun.star.uno.XInterface" , "b" )
338 tcInterface
=uno
.Enum( "com.sun.star.uno.TypeClass" , "INTERFACE" )
339 self
.failUnlessRaises( RuntimeException
, uno
.Type
, "a", tcInterface
)
340 self
.failUnlessRaises( RuntimeException
, uno
.Type
, "com.sun.star.uno.Exception", tcInterface
)
342 self
.failUnlessRaises( (RuntimeException
,exceptions
.RuntimeError), uno
.getTypeByName
, "a" )
344 self
.failUnlessRaises( (RuntimeException
), uno
.getConstantByName
, "a" )
345 self
.failUnlessRaises( (RuntimeException
), uno
.getConstantByName
, "com.sun.star.uno.XInterface" )
347 def testByteSequence( self
):
348 s
= uno
.ByteSequence( "ab" )
349 self
.failUnless( s
== uno
.ByteSequence( "ab" ) )
350 self
.failUnless( uno
.ByteSequence( "abc" ) == s
+ uno
.ByteSequence( "c" ) )
351 self
.failUnless( uno
.ByteSequence( "abc" ) == s
+ "c" )
352 self
.failUnless( s
+ "c" == "abc" )
353 self
.failUnless( s
== uno
.ByteSequence( s
) )
354 self
.failUnless( s
[0] == 'a' )
355 self
.failUnless( s
[1] == 'b' )
358 def testInvoke( self
):
359 self
.failUnless( 5 == uno
.invoke( self
.tobj
, "transportAny" , (uno
.Any("byte", 5),) ) )
360 self
.failUnless( 5 == uno
.invoke(
361 PythonTransporter(), "transportAny" , (uno
.Any( "byte", 5 ),) ) )
362 t
= uno
.getTypeByName( "long" )
363 mystruct
= uno
.createUnoStruct(
364 "com.sun.star.beans.PropertyValue", "foo",0,uno
.Any(t
,2),0 )
365 mystruct
.Value
= uno
.Any(t
, 1)