functions: revert the function init order to make pylint happy again. See #217
[pygobject.git] / tests / test_fields.py
blob0181d2887860e8da0754ea5f388dd481f58214ec
1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # coding=utf-8
4 from __future__ import absolute_import
6 import math
7 import unittest
9 from gi.repository import GLib
10 from gi.repository import Regress
11 from gi.repository import GIMarshallingTests
14 class Number(object):
16 def __init__(self, value):
17 self.value = value
19 def __int__(self):
20 return int(self.value)
22 def __float__(self):
23 return float(self.value)
26 class TestFields(unittest.TestCase):
28 def test_int8(self):
29 s = Regress.TestStructA()
30 s.some_int8 = 21
31 self.assertEqual(s.some_int8, 21)
33 s.some_int8 = b"\x42"
34 self.assertEqual(s.some_int8, 0x42)
36 self.assertRaises(TypeError, setattr, s, "some_int8", b"ab")
37 self.assertRaises(TypeError, setattr, s, "some_int8", None)
38 self.assertRaises(OverflowError, setattr, s, "some_int8", 128)
39 self.assertRaises(OverflowError, setattr, s, "some_int8", -129)
41 s.some_int8 = 3.6
42 self.assertEqual(s.some_int8, 3)
44 s.some_int8 = Number(55)
45 self.assertEqual(s.some_int8, 55)
47 def test_int(self):
48 s = Regress.TestStructA()
49 s.some_int = GLib.MAXINT
50 self.assertEqual(s.some_int, GLib.MAXINT)
52 self.assertRaises(TypeError, setattr, s, "some_int", b"a")
53 self.assertRaises(TypeError, setattr, s, "some_int", None)
54 self.assertRaises(
55 OverflowError, setattr, s, "some_int", GLib.MAXINT + 1)
56 self.assertRaises(
57 OverflowError, setattr, s, "some_int", GLib.MININT - 1)
59 s.some_int = 3.6
60 self.assertEqual(s.some_int, 3)
62 s.some_int = Number(GLib.MININT)
63 self.assertEqual(s.some_int, GLib.MININT)
65 def test_long(self):
66 s = GIMarshallingTests.SimpleStruct()
67 s.long_ = GLib.MAXLONG
68 self.assertEqual(s.long_, GLib.MAXLONG)
70 self.assertRaises(TypeError, setattr, s, "long_", b"a")
71 self.assertRaises(TypeError, setattr, s, "long_", None)
72 self.assertRaises(OverflowError, setattr, s, "long_", GLib.MAXLONG + 1)
73 self.assertRaises(OverflowError, setattr, s, "long_", GLib.MINLONG - 1)
75 s.long_ = 3.6
76 self.assertEqual(s.long_, 3)
78 s.long_ = Number(GLib.MINLONG)
79 self.assertEqual(s.long_, GLib.MINLONG)
81 def test_double(self):
82 s = Regress.TestStructA()
83 s.some_double = GLib.MAXDOUBLE
84 self.assertEqual(s.some_double, GLib.MAXDOUBLE)
85 s.some_double = GLib.MINDOUBLE
86 self.assertEqual(s.some_double, GLib.MINDOUBLE)
88 s.some_double = float("nan")
89 self.assertTrue(math.isnan(s.some_double))
91 self.assertRaises(TypeError, setattr, s, "some_double", b"a")
92 self.assertRaises(TypeError, setattr, s, "some_double", None)
94 def test_gtype(self):
95 s = Regress.TestStructE()
97 s.some_type = Regress.TestObj
98 self.assertEqual(s.some_type, Regress.TestObj.__gtype__)
100 self.assertRaises(TypeError, setattr, s, "some_type", 42)
102 def test_unichar(self):
103 # I can't find a unichar field..
104 pass
106 def test_utf8(self):
107 s = GIMarshallingTests.BoxedStruct()
108 s.string_ = "hello"
109 self.assertEqual(s.string_, "hello")
111 s.string_ = u"hello"
112 self.assertEqual(s.string_, u"hello")
114 s.string_ = None
115 self.assertEqual(s.string_, None)
117 self.assertRaises(TypeError, setattr, s, "string_", 42)
119 def test_array_of_structs(self):
120 s = Regress.TestStructD()
121 self.assertEqual(s.array1, [])
122 self.assertEqual(s.array2, [])
124 def test_interface(self):
125 s = Regress.TestStructC()
127 obj = Regress.TestObj()
128 s.obj = obj
129 self.assertTrue(s.obj is obj)
131 s.obj = None
132 self.assertTrue(s.obj is None)
134 self.assertRaises(TypeError, setattr, s, "obj", object())
136 def test_glist(self):
137 s = Regress.TestStructD()
138 self.assertEqual(s.list, [])
140 self.assertRaises(TypeError, setattr, s, "list", [object()])
142 def test_gpointer(self):
143 glist = GLib.List()
145 glist.data = 123
146 self.assertEqual(glist.data, 123)
148 glist.data = None
149 self.assertEqual(glist.data, 0)
151 def test_gptrarray(self):
152 s = Regress.TestStructD()
153 self.assertEqual(s.garray, [])
155 self.assertRaises(TypeError, setattr, s, "garray", [object()])
157 def test_enum(self):
158 s = Regress.TestStructA()
160 s.some_enum = Regress.TestEnum.VALUE3
161 self.assertEqual(s.some_enum, Regress.TestEnum.VALUE3)
163 self.assertRaises(TypeError, setattr, s, "some_enum", object())
165 s.some_enum = 0
166 self.assertEqual(s.some_enum, Regress.TestEnum.VALUE1)
168 def test_union(self):
169 s = Regress.TestStructE()
170 self.assertEqual(s.some_union, [None, None])
172 def test_struct(self):
173 s = GIMarshallingTests.NestedStruct()
175 # FIXME: segfaults
176 # https://bugzilla.gnome.org/show_bug.cgi?id=747002
177 # s.simple_struct = None
179 self.assertRaises(TypeError, setattr, s, "simple_struct", object())
181 sub = GIMarshallingTests.SimpleStruct()
182 sub.long_ = 42
183 s.simple_struct = sub
184 self.assertEqual(s.simple_struct.long_, 42)
186 def test_ghashtable(self):
187 obj = Regress.TestObj()
188 self.assertTrue(obj.hash_table is None)