1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # vim: tabstop=4 shiftwidth=4 expandtab
10 sys.path.insert(0, "../")
12 from gi.repository import GLib
13 from gi.repository import GObject
14 from gi.repository import Gdk
15 from gi.repository import Gtk
16 import gi.overrides as overrides
18 class TestGLib(unittest.TestCase):
20 def test_gvariant(self):
21 variant = GLib.Variant('i', 42)
22 self.assertTrue(isinstance(variant, GLib.Variant))
23 self.assertEquals(variant.get_int32(), 42)
25 variant = GLib.Variant('(ss)', 'mec', 'mac')
26 self.assertTrue(isinstance(variant, GLib.Variant))
27 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
28 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
29 self.assertEquals(variant.get_child_value(0).get_string(), 'mec')
30 self.assertEquals(variant.get_child_value(1).get_string(), 'mac')
32 variant = GLib.Variant('a{si}', {'key1': 1, 'key2': 2})
33 self.assertTrue(isinstance(variant, GLib.Variant))
34 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
35 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
36 # Looks like order is not preserved
37 self.assertEquals(variant.get_child_value(1).get_child_value(0).get_string(), 'key1')
38 self.assertEquals(variant.get_child_value(1).get_child_value(1).get_int32(), 1)
39 self.assertEquals(variant.get_child_value(0).get_child_value(0).get_string(), 'key2')
40 self.assertEquals(variant.get_child_value(0).get_child_value(1).get_int32(), 2)
42 class TestGdk(unittest.TestCase):
45 color = Gdk.Color(100, 200, 300)
46 self.assertEquals(color.red, 100)
47 self.assertEquals(color.green, 200)
48 self.assertEquals(color.blue, 300)
51 event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
52 self.assertEquals(event.type, Gdk.EventType.CONFIGURE)
53 self.assertEquals(event.send_event, 0)
55 event = Gdk.Event.new(Gdk.EventType.DRAG_MOTION)
56 event.x_root, event.y_root = 0, 5
57 self.assertEquals(event.x_root, 0)
58 self.assertEquals(event.y_root, 5)
60 class TestGtk(unittest.TestCase):
61 def test_uimanager(self):
62 self.assertEquals(Gtk.UIManager, overrides.Gtk.UIManager)
64 ui.add_ui_from_string(
67 <menubar name="menubar1"></menubar>
71 menubar = ui.get_widget("/menubar1")
72 self.assertEquals(type(menubar), Gtk.MenuBar)
74 def test_actiongroup(self):
75 self.assertEquals(Gtk.ActionGroup, overrides.Gtk.ActionGroup)
76 action_group = Gtk.ActionGroup (name = 'TestActionGroup')
77 callback_data = "callback data"
79 def test_action_callback_data(action, user_data):
80 self.assertEquals(user_data, callback_data);
82 def test_radio_action_callback_data(action, current, user_data):
83 self.assertEquals(user_data, callback_data);
85 action_group.add_actions ([
86 ('test-action1', None, 'Test Action 1',
87 None, None, test_action_callback_data),
88 ('test-action2', Gtk.STOCK_COPY, 'Test Action 2',
89 None, None, test_action_callback_data)], callback_data)
90 action_group.add_toggle_actions([
91 ('test-toggle-action1', None, 'Test Toggle Action 1',
92 None, None, test_action_callback_data, False),
93 ('test-toggle-action2', Gtk.STOCK_COPY, 'Test Toggle Action 2',
94 None, None, test_action_callback_data, True)], callback_data)
95 action_group.add_radio_actions([
96 ('test-radio-action1', None, 'Test Radio Action 1'),
97 ('test-radio-action2', Gtk.STOCK_COPY, 'Test Radio Action 2')], 1,
98 test_radio_action_callback_data,
101 expected_results = (('test-action1', Gtk.Action),
102 ('test-action2', Gtk.Action),
103 ('test-toggle-action1', Gtk.ToggleAction),
104 ('test-toggle-action2', Gtk.ToggleAction),
105 ('test-radio-action1', Gtk.RadioAction),
106 ('test-radio-action2', Gtk.RadioAction))
108 for action, cmp in zip(action_group.list_actions(), expected_results):
109 a = (action.get_name(), type(action))
110 self.assertEquals(a,cmp)
113 def test_builder(self):
114 self.assertEquals(Gtk.Builder, overrides.Gtk.Builder)
116 class SignalTest(GObject.GObject):
117 __gtype_name__ = "GIOverrideSignalTest"
119 "test-signal": (GObject.SIGNAL_RUN_FIRST,
129 def on_signal_1(self, *args):
132 def on_signal_3(self, *args):
135 signal_checker = SignalCheck()
136 builder = Gtk.Builder()
138 # add object1 to the builder
139 builder.add_from_string(
142 <object class="GIOverrideSignalTest" id="object1">
143 <signal name="test-signal" handler="on_signal_1" />
148 # only add object3 to the builder
149 builder.add_objects_from_string(
152 <object class="GIOverrideSignalTest" id="object2">
153 <signal name="test-signal" handler="on_signal_2" />
155 <object class="GIOverrideSignalTest" id="object3">
156 <signal name="test-signal" handler="on_signal_3" />
158 <object class="GIOverrideSignalTest" id="object4">
159 <signal name="test-signal" handler="on_signal_4" />
167 builder.connect_signals(signal_checker)
169 # call their notify signals and check sentinel
170 objects = builder.get_objects()
171 self.assertEquals(len(objects), 2)
173 obj.emit('test-signal')
175 self.assertEquals(signal_checker.sentinel, 4)
177 def test_dialog(self):
178 self.assertEquals(Gtk.Dialog, overrides.Gtk.Dialog)
179 dialog = Gtk.Dialog (title='Foo',
180 flags=Gtk.DialogFlags.MODAL,
181 buttons=('test-button1', 1))
183 dialog.add_buttons ('test-button2', 2, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
185 self.assertEquals('Foo', dialog.get_title())
186 self.assertTrue(dialog.get_modal())
187 button = dialog.get_widget_for_response (1)
188 self.assertEquals('test-button1', button.get_label())
189 button = dialog.get_widget_for_response (2)
190 self.assertEquals('test-button2', button.get_label())
191 button = dialog.get_widget_for_response (Gtk.ResponseType.CLOSE)
192 self.assertEquals(Gtk.STOCK_CLOSE, button.get_label())
194 class TestClass(GObject.GObject):
195 __gtype_name__ = "GIOverrideTreeAPITest"
197 def __init__(self, tester, int_value, string_value):
198 super(TestGtk.TestClass, self).__init__()
200 self.int_value = int_value
201 self.string_value = string_value
203 def check(self, int_value, string_value):
204 self.tester.assertEquals(int_value, self.int_value)
205 self.tester.assertEquals(string_value, self.string_value)
207 def test_tree_store(self):
208 self.assertEquals(Gtk.TreeStore, overrides.Gtk.TreeStore)
209 self.assertEquals(Gtk.ListStore, overrides.Gtk.ListStore)
210 self.assertEquals(Gtk.TreeModel, overrides.Gtk.TreeModel)
211 self.assertEquals(Gtk.TreeViewColumn, overrides.Gtk.TreeViewColumn)
213 tree_store = Gtk.TreeStore(int, 'gchararray', TestGtk.TestClass)
216 label = 'this is child #%d' % i
217 testobj = TestGtk.TestClass(self, i, label)
218 parent = tree_store.append(parent, (i, label, testobj))
220 # len gets the number of children in the root node
221 # since we kept appending to the previous node
222 # there should only be one child of the root
223 self.assertEquals(len(tree_store), 1)
225 # walk the tree to see if the values were stored correctly
229 (has_children, treeiter) = tree_store.iter_children(parent)
230 while (has_children):
231 i = tree_store.get_value(treeiter, 0)
232 s = tree_store.get_value(treeiter, 1)
233 obj = tree_store.get_value(treeiter, 2)
236 (has_children, treeiter) = tree_store.iter_children(parent)
238 self.assertEquals(i, 99)
240 def test_list_store(self):
241 list_store = Gtk.ListStore(int, str, 'GIOverrideTreeAPITest')
243 label = 'this is row #%d' % i
244 testobj = TestGtk.TestClass(self, i, label)
245 parent = list_store.append((i, label, testobj))
247 self.assertEquals(len(list_store), 100)
249 # walk the list to see if the values were stored correctly
251 (has_more, treeiter) = list_store.get_iter_first()
254 i = list_store.get_value(treeiter, 0)
255 s = list_store.get_value(treeiter, 1)
256 obj = list_store.get_value(treeiter, 2)
258 has_more = list_store.iter_next(treeiter)
260 self.assertEquals(i, 99)
262 def test_tree_view_column(self):
263 cell = Gtk.CellRendererText()
264 column = Gtk.TreeViewColumn(title='This is just a test',
269 def test_text_buffer(self):
270 self.assertEquals(Gtk.TextBuffer, overrides.Gtk.TextBuffer)
271 buffer = Gtk.TextBuffer()
272 tag = buffer.create_tag ('title', font = 'Sans 18')
274 self.assertEquals(tag.props.name, 'title')
275 self.assertEquals(tag.props.font, 'Sans 18')
277 (start, end) = buffer.get_bounds()
279 buffer.insert(end, 'HelloHello')
280 buffer.insert(end, ' Bob')
282 cursor_iter = end.copy()
283 cursor_iter.backward_chars(9)
284 buffer.place_cursor(cursor_iter)
285 buffer.insert_at_cursor(' Jane ')
287 (start, end) = buffer.get_bounds()
288 text = buffer.get_text(start, end, False)
290 self.assertEquals(text, 'Hello Jane Hello Bob')
292 def test_buttons(self):
293 self.assertEquals(Gtk.Button, overrides.Gtk.Button)
296 button = Gtk.Button()
297 button = Gtk.Button(stock=Gtk.STOCK_CLOSE)
298 self.assertEquals(Gtk.STOCK_CLOSE, button.get_label())
299 self.assertTrue(button.get_use_stock())
300 self.assertTrue(button.get_use_underline())