1 # -*- Mode: Python; py-indent-offset: 4 -*-
3 # vim: tabstop=4 shiftwidth=4 expandtab
8 sys.path.insert(0, "../")
9 from sys import getrefcount
13 from gi.repository import GObject
14 from gi.repository import Regress as Everything
16 if sys.version_info < (3, 0):
17 UNICHAR = "\xe2\x99\xa5"
18 PY2_UNICODE_UNICHAR = unicode(UNICHAR, 'UTF-8')
23 class TestEverything(unittest.TestCase):
25 def test_cairo_context(self):
26 context = Everything.test_cairo_context_full_return()
27 self.assertTrue(isinstance(context, cairo.Context))
29 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 10, 10)
30 context = cairo.Context(surface)
31 Everything.test_cairo_context_none_in(context)
33 def test_cairo_surface(self):
34 surface = Everything.test_cairo_surface_none_return()
35 self.assertTrue(isinstance(surface, cairo.ImageSurface))
36 self.assertTrue(isinstance(surface, cairo.Surface))
37 self.assertEquals(surface.get_format(), cairo.FORMAT_ARGB32)
38 self.assertEquals(surface.get_width(), 10)
39 self.assertEquals(surface.get_height(), 10)
41 surface = Everything.test_cairo_surface_full_return()
42 self.assertTrue(isinstance(surface, cairo.ImageSurface))
43 self.assertTrue(isinstance(surface, cairo.Surface))
44 self.assertEquals(surface.get_format(), cairo.FORMAT_ARGB32)
45 self.assertEquals(surface.get_width(), 10)
46 self.assertEquals(surface.get_height(), 10)
48 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 10, 10)
49 Everything.test_cairo_surface_none_in(surface)
51 surface = Everything.test_cairo_surface_full_out()
52 self.assertTrue(isinstance(surface, cairo.ImageSurface))
53 self.assertTrue(isinstance(surface, cairo.Surface))
54 self.assertEquals(surface.get_format(), cairo.FORMAT_ARGB32)
55 self.assertEquals(surface.get_width(), 10)
56 self.assertEquals(surface.get_height(), 10)
58 def test_unichar(self):
59 self.assertEquals("c", Everything.test_unichar("c"))
61 if sys.version_info < (3, 0):
62 self.assertEquals(UNICHAR, Everything.test_unichar(PY2_UNICODE_UNICHAR))
63 self.assertEquals(UNICHAR, Everything.test_unichar(UNICHAR))
64 self.assertRaises(TypeError, Everything.test_unichar, "")
65 self.assertRaises(TypeError, Everything.test_unichar, "morethanonechar")
68 def test_floating(self):
69 e = Everything.TestFloating()
70 self.assertEquals(e.__grefcount__, 1)
72 e = GObject.new(Everything.TestFloating)
73 self.assertEquals(e.__grefcount__, 1)
75 e = Everything.TestFloating.new()
76 self.assertEquals(e.__grefcount__, 1)
78 def test_caller_allocates(self):
79 struct_a = Everything.TestStructA()
80 struct_a.some_int = 10
81 struct_a.some_int8 = 21
82 struct_a.some_double = 3.14
83 struct_a.some_enum = Everything.TestEnum.VALUE3
85 struct_a_clone = struct_a.clone()
86 self.assertTrue(struct_a != struct_a_clone)
87 self.assertEquals(struct_a.some_int, struct_a_clone.some_int)
88 self.assertEquals(struct_a.some_int8, struct_a_clone.some_int8)
89 self.assertEquals(struct_a.some_double, struct_a_clone.some_double)
90 self.assertEquals(struct_a.some_enum, struct_a_clone.some_enum)
92 struct_b = Everything.TestStructB()
93 struct_b.some_int8 = 8
94 struct_b.nested_a.some_int = 20
95 struct_b.nested_a.some_int8 = 12
96 struct_b.nested_a.some_double = 333.3333
97 struct_b.nested_a.some_enum = Everything.TestEnum.VALUE2
99 struct_b_clone = struct_b.clone()
100 self.assertTrue(struct_b != struct_b_clone)
101 self.assertEquals(struct_b.some_int8, struct_b_clone.some_int8)
102 self.assertEquals(struct_b.nested_a.some_int, struct_b_clone.nested_a.some_int)
103 self.assertEquals(struct_b.nested_a.some_int8, struct_b_clone.nested_a.some_int8)
104 self.assertEquals(struct_b.nested_a.some_double, struct_b_clone.nested_a.some_double)
105 self.assertEquals(struct_b.nested_a.some_enum, struct_b_clone.nested_a.some_enum)
107 def test_wrong_type_of_arguments(self):
109 Everything.test_int8()
111 (e_type, e) = sys.exc_info()[:2]
112 self.assertEquals(e.args, ("test_int8() takes exactly 1 argument(s) (0 given)",))
114 def test_gtypes(self):
115 gchararray_gtype = GObject.type_from_name('gchararray')
116 gtype = Everything.test_gtype(str)
117 self.assertEquals(gchararray_gtype, gtype)
118 gtype = Everything.test_gtype('gchararray')
119 self.assertEquals(gchararray_gtype, gtype)
120 gobject_gtype = GObject.GObject.__gtype__
121 gtype = Everything.test_gtype(GObject.GObject)
122 self.assertEquals(gobject_gtype, gtype)
123 gtype = Everything.test_gtype('GObject')
124 self.assertEquals(gobject_gtype, gtype)
125 self.assertRaises(TypeError, Everything.test_gtype, 'invalidgtype')
127 class NotARegisteredClass(object):
130 self.assertRaises(TypeError, Everything.test_gtype, NotARegisteredClass)
132 class ARegisteredClass(GObject.GObject):
133 __gtype_name__ = 'EverythingTestsARegisteredClass'
135 gtype = Everything.test_gtype('EverythingTestsARegisteredClass')
136 self.assertEquals(ARegisteredClass.__gtype__, gtype)
137 gtype = Everything.test_gtype(ARegisteredClass)
138 self.assertEquals(ARegisteredClass.__gtype__, gtype)
139 self.assertRaises(TypeError, Everything.test_gtype, 'ARegisteredClass')
142 attr_list = dir(Everything)
144 # test that typelib attributes are listed
145 self.assertTrue('TestStructA' in attr_list)
147 # test that class attributes and methods are listed
148 self.assertTrue('__class__' in attr_list)
149 self.assertTrue('__dir__' in attr_list)
150 self.assertTrue('__repr__' in attr_list)
152 # test that instance members are listed
153 self.assertTrue('_namespace' in attr_list)
154 self.assertTrue('_version' in attr_list)
156 # test that there are no duplicates returned
157 self.assertEqual(len(attr_list), len(set(attr_list)))
159 class TestNullableArgs(unittest.TestCase):
160 def test_in_nullable_hash(self):
161 Everything.test_ghash_null_in(None)
163 def test_in_nullable_list(self):
164 Everything.test_gslist_null_in(None)
165 Everything.test_glist_null_in(None)
166 Everything.test_gslist_null_in([])
167 Everything.test_glist_null_in([])
169 def test_in_nullable_array(self):
170 Everything.test_array_int_null_in(None)
171 Everything.test_array_int_null_in([])
173 def test_in_nullable_string(self):
174 Everything.test_utf8_null_in(None)
176 def test_in_nullable_object(self):
177 Everything.func_obj_null_in(None)
179 def test_out_nullable_hash(self):
180 self.assertEqual(None, Everything.test_ghash_null_out())
182 def test_out_nullable_list(self):
183 self.assertEqual([], Everything.test_gslist_null_out())
184 self.assertEqual([], Everything.test_glist_null_out())
186 def test_out_nullable_array(self):
187 self.assertEqual([], Everything.test_array_int_null_out())
189 def test_out_nullable_string(self):
190 self.assertEqual(None, Everything.test_utf8_null_out())
192 def test_out_nullable_object(self):
193 self.assertEqual(None, Everything.TestObj.null_out())
196 class TestCallbacks(unittest.TestCase):
198 main_loop = GObject.MainLoop()
200 def testCallback(self):
201 TestCallbacks.called = False
203 TestCallbacks.called = True
205 Everything.test_simple_callback(callback)
206 self.assertTrue(TestCallbacks.called)
208 def testCallbackException(self):
210 This test ensures that we get errors from callbacks correctly
211 and in particular that we do not segv when callbacks fail
217 Everything.test_simple_callback(callback)
218 except ZeroDivisionError:
221 def testDoubleCallbackException(self):
223 This test ensures that we get errors from callbacks correctly
224 and in particular that we do not segv when callbacks fail
230 Everything.test_boolean(True)
231 Everything.test_boolean(False)
232 Everything.test_simple_callback(badcallback())
235 Everything.test_simple_callback(callback)
236 except ZeroDivisionError:
239 def testReturnValueCallback(self):
240 TestCallbacks.called = False
242 TestCallbacks.called = True
245 self.assertEquals(Everything.test_callback(callback), 44)
246 self.assertTrue(TestCallbacks.called)
248 def testCallbackAsync(self):
249 TestCallbacks.called = False
251 TestCallbacks.called = True
254 Everything.test_callback_async(callback, 44);
255 i = Everything.test_callback_thaw_async();
256 self.assertEquals(44, i);
257 self.assertTrue(TestCallbacks.called)
259 def testCallbackScopeCall(self):
260 TestCallbacks.called = 0
262 TestCallbacks.called += 1
265 Everything.test_multi_callback(callback)
266 self.assertEquals(TestCallbacks.called, 2)
268 def testCallbackUserdata(self):
269 TestCallbacks.called = 0
270 def callback(userdata):
271 self.assertEquals(userdata, "Test%d" % TestCallbacks.called)
272 TestCallbacks.called += 1
273 return TestCallbacks.called
276 val = Everything.test_callback_user_data(callback, "Test%d" % i)
277 self.assertEquals(val, i+1)
279 self.assertEquals(TestCallbacks.called, 100)
281 def testCallbackUserdataRefCount(self):
282 TestCallbacks.called = False
283 def callback(userdata):
284 TestCallbacks.called = True
287 ud = "Test User Data"
289 start_ref_count = getrefcount(ud)
291 Everything.test_callback_destroy_notify(callback, ud)
293 Everything.test_callback_thaw_notifications()
294 end_ref_count = getrefcount(ud)
296 self.assertEquals(start_ref_count, end_ref_count)
298 def testAsyncReadyCallback(self):
299 TestCallbacks.called = False
300 TestCallbacks.main_loop = GObject.MainLoop()
302 def callback(obj, result, user_data):
303 TestCallbacks.main_loop.quit()
304 TestCallbacks.called = True
306 Everything.test_async_ready_callback(callback)
308 TestCallbacks.main_loop.run()
310 self.assertTrue(TestCallbacks.called)
312 def testCallbackDestroyNotify(self):
313 def callback(user_data):
314 TestCallbacks.called = True
317 TestCallbacks.called = False
318 self.assertEquals(Everything.test_callback_destroy_notify(callback, 42), 42)
319 self.assertTrue(TestCallbacks.called)
320 self.assertEquals(Everything.test_callback_thaw_notifications(), 42)
322 def testCallbackInMethods(self):
323 object_ = Everything.TestObj()
326 TestCallbacks.called = True
329 TestCallbacks.called = False
330 object_.instance_method_callback(callback)
331 self.assertTrue(TestCallbacks.called)
333 TestCallbacks.called = False
334 Everything.TestObj.static_method_callback(callback)
335 self.assertTrue(TestCallbacks.called)
337 def callbackWithUserData(user_data):
338 TestCallbacks.called = True
341 TestCallbacks.called = False
342 obj_ = Everything.TestObj.new_callback(callbackWithUserData, None)
343 self.assertTrue(TestCallbacks.called)
345 def testCallbackNone(self):
346 # make sure this doesn't assert or crash
347 Everything.test_simple_callback(None)
350 class TestProperties(unittest.TestCase):
352 def test_basic(self):
353 object_ = Everything.TestObj()
355 self.assertEquals(object_.props.int, 0)
356 object_.props.int = 42
357 self.assertTrue(isinstance(object_.props.int, int))
358 self.assertEquals(object_.props.int, 42)
360 self.assertEquals(object_.props.float, 0.0)
361 object_.props.float = 42.42
362 self.assertTrue(isinstance(object_.props.float, float))
363 self.assertAlmostEquals(object_.props.float, 42.42, places=5)
365 self.assertEquals(object_.props.double, 0.0)
366 object_.props.double = 42.42
367 self.assertTrue(isinstance(object_.props.double, float))
368 self.assertAlmostEquals(object_.props.double, 42.42, places=5)
370 self.assertEquals(object_.props.string, None)
371 object_.props.string = 'mec'
372 self.assertTrue(isinstance(object_.props.string, str))
373 self.assertEquals(object_.props.string, 'mec')
375 def test_hash_table(self):
376 object_ = Everything.TestObj()
377 self.assertEquals(object_.props.hash_table, None)
379 object_.props.hash_table = {'mec': 56}
380 self.assertTrue(isinstance(object_.props.hash_table, dict))
381 self.assertEquals(list(object_.props.hash_table.items())[0], ('mec', 56))
384 object_ = Everything.TestObj()
385 self.assertEquals(object_.props.list, [])
387 object_.props.list = ['1', '2', '3']
388 self.assertTrue(isinstance(object_.props.list, list))
389 self.assertEquals(object_.props.list, ['1', '2', '3'])
391 def test_boxed(self):
392 object_ = Everything.TestObj()
393 self.assertEquals(object_.props.boxed, None)
395 boxed = Everything.TestBoxed()
397 object_.props.boxed = boxed
399 self.assertTrue(isinstance(object_.props.boxed, Everything.TestBoxed))
400 self.assertEquals(object_.props.boxed.some_int8, 42)
402 class TestTortureProfile(unittest.TestCase):
403 def test_torture_profile(self):
407 object_ = Everything.TestObj()
408 sys.stdout.write("\ttorture test 1 (10000 iterations): ")
410 start_time = time.clock()
411 for i in range(10000):
412 (y,z,q) = object_.torture_signature_0(5000,
416 end_time = time.clock()
417 delta_time = end_time - start_time
418 total_time += delta_time
419 print("%f secs" % delta_time)
421 sys.stdout.write("\ttorture test 2 (10000 iterations): ")
423 start_time = time.clock()
424 for i in range(10000):
425 (y,z,q) = Everything.TestObj().torture_signature_0(5000,
429 end_time = time.clock()
430 delta_time = end_time - start_time
431 total_time += delta_time
432 print("%f secs" % delta_time)
435 sys.stdout.write("\ttorture test 3 (10000 iterations): ")
436 start_time = time.clock()
437 for i in range(10000):
439 (y,z,q) = object_.torture_signature_1(5000,
444 end_time = time.clock()
445 delta_time = end_time - start_time
446 total_time += delta_time
447 print("%f secs" % delta_time)
449 sys.stdout.write("\ttorture test 4 (10000 iterations): ")
450 def callback(userdata):
454 start_time = time.clock()
455 for i in range(10000):
456 (y,z,q) = Everything.test_torture_signature_2(5000,
461 end_time = time.clock()
462 delta_time = end_time - start_time
463 total_time += delta_time
464 print("%f secs" % delta_time)
466 print("\tTotal: %f sec" % total_time)