655225674261e871f6675563ce48d4fe8e9866e7
[platform/upstream/pygobject2.git] / tests / compat_test_pygtk.py
1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # vim: tabstop=4 shiftwidth=4 expandtab
3
4 import unittest
5 import base64
6
7 try:
8     from gi.repository import Gtk
9     from gi.repository import Pango
10     from gi.repository import Atk
11     from gi.repository import Gdk
12     (Atk, Gtk, Pango)  # pyflakes
13
14     import pygtkcompat
15
16     pygtkcompat.enable()
17     pygtkcompat.enable_gtk(version=Gtk._version)
18
19     import atk
20     import pango
21     import pangocairo
22     import gtk
23     import gtk.gdk
24 except (ValueError, ImportError):
25     Gtk = None
26
27 from helper import capture_gi_deprecation_warnings, capture_glib_warnings
28
29
30 @unittest.skipUnless(Gtk, 'Gtk not available')
31 class TestMultipleEnable(unittest.TestCase):
32
33     def test_main(self):
34         pygtkcompat.enable()
35         pygtkcompat.enable()
36
37     def test_gtk(self):
38         pygtkcompat.enable_gtk("3.0")
39         pygtkcompat.enable_gtk("3.0")
40
41         # https://bugzilla.gnome.org/show_bug.cgi?id=759009
42         w = gtk.Window()
43         w.realize()
44         self.assertEqual(len(w.window.get_origin()), 2)
45         w.destroy()
46
47     def test_gtk_version_conflict(self):
48         self.assertRaises(ValueError, pygtkcompat.enable_gtk, version='2.0')
49
50
51 @unittest.skipUnless(Gtk, 'Gtk not available')
52 class TestATKCompat(unittest.TestCase):
53     def test_object(self):
54         self.assertTrue(hasattr(atk, 'Object'))
55
56
57 @unittest.skipUnless(Gtk, 'Gtk not available')
58 class TestPangoCompat(unittest.TestCase):
59     def test_layout(self):
60         self.assertTrue(hasattr(pango, 'Layout'))
61
62
63 @unittest.skipUnless(Gtk, 'Gtk not available')
64 class TestPangoCairoCompat(unittest.TestCase):
65     def test_error_underline_path(self):
66         self.assertTrue(hasattr(pangocairo, 'error_underline_path'))
67
68
69 @unittest.skipUnless(Gtk, 'Gtk not available')
70 class TestGTKCompat(unittest.TestCase):
71     def test_buttons(self):
72         self.assertEqual(Gdk._2BUTTON_PRESS, 5)
73         self.assertEqual(Gdk.BUTTON_PRESS, 4)
74
75     def test_enums(self):
76         self.assertEqual(gtk.WINDOW_TOPLEVEL, Gtk.WindowType.TOPLEVEL)
77         self.assertEqual(gtk.PACK_START, Gtk.PackType.START)
78
79     def test_flags(self):
80         self.assertEqual(gtk.EXPAND, Gtk.AttachOptions.EXPAND)
81         self.assertEqual(gtk.gdk.SHIFT_MASK, Gdk.ModifierType.SHIFT_MASK)
82
83     def test_keysyms(self):
84         import gtk.keysyms
85         self.assertEqual(gtk.keysyms.Escape, Gdk.KEY_Escape)
86         self.assertTrue(gtk.keysyms._0, Gdk.KEY_0)
87
88     def test_style(self):
89         widget = gtk.Button()
90         with capture_gi_deprecation_warnings():
91             widget.get_style_context().set_state(gtk.STATE_NORMAL)
92             self.assertTrue(isinstance(widget.style.base[gtk.STATE_NORMAL],
93                                        gtk.gdk.Color))
94
95     def test_alignment(self):
96         # Creation of pygtk.Alignment causes hard warnings, ignore this in testing.
97         with capture_glib_warnings(allow_warnings=True):
98             a = gtk.Alignment()
99
100         self.assertEqual(a.props.xalign, 0.0)
101         self.assertEqual(a.props.yalign, 0.0)
102         self.assertEqual(a.props.xscale, 0.0)
103         self.assertEqual(a.props.yscale, 0.0)
104
105     def test_box(self):
106         box = gtk.Box()
107         child = gtk.Button()
108
109         box.pack_start(child)
110         expand, fill, padding, pack_type = box.query_child_packing(child)
111         self.assertTrue(expand)
112         self.assertTrue(fill)
113         self.assertEqual(padding, 0)
114         self.assertEqual(pack_type, gtk.PACK_START)
115
116         child = gtk.Button()
117         box.pack_end(child)
118         expand, fill, padding, pack_type = box.query_child_packing(child)
119         self.assertTrue(expand)
120         self.assertTrue(fill)
121         self.assertEqual(padding, 0)
122         self.assertEqual(pack_type, gtk.PACK_END)
123
124     def test_combobox_entry(self):
125         liststore = gtk.ListStore(int, str)
126         liststore.append((1, 'One'))
127         liststore.append((2, 'Two'))
128         liststore.append((3, 'Three'))
129         # might cause a Pango warning, do not break on this
130         with capture_glib_warnings(allow_warnings=True):
131             combo = gtk.ComboBoxEntry(model=liststore)
132         combo.set_text_column(1)
133         combo.set_active(0)
134         self.assertEqual(combo.get_text_column(), 1)
135         self.assertEqual(combo.get_child().get_text(), 'One')
136         combo = gtk.combo_box_entry_new()
137         combo.set_model(liststore)
138         combo.set_text_column(1)
139         combo.set_active(0)
140         self.assertEqual(combo.get_text_column(), 1)
141         self.assertEqual(combo.get_child().get_text(), 'One')
142         combo = gtk.combo_box_entry_new_with_model(liststore)
143         combo.set_text_column(1)
144         combo.set_active(0)
145         self.assertEqual(combo.get_text_column(), 1)
146         self.assertEqual(combo.get_child().get_text(), 'One')
147
148     def test_size_request(self):
149         box = gtk.Box()
150         with capture_gi_deprecation_warnings():
151             self.assertEqual(box.size_request(), [0, 0])
152
153     def test_pixbuf(self):
154         gtk.gdk.Pixbuf()
155
156     def test_pixbuf_loader(self):
157         # load a 1x1 pixel PNG from memory
158         data = base64.b64decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP4n8Dw'
159                                 'HwAGIAJf85Z3XgAAAABJRU5ErkJggg==')
160         loader = gtk.gdk.PixbufLoader('png')
161         loader.write(data)
162         loader.close()
163
164         pixbuf = loader.get_pixbuf()
165         self.assertEqual(pixbuf.get_width(), 1)
166         self.assertEqual(pixbuf.get_height(), 1)
167
168     def test_pixbuf_formats(self):
169         formats = gtk.gdk.pixbuf_get_formats()
170         self.assertEqual(type(formats[0]), dict)
171         self.assertTrue('name' in formats[0])
172         self.assertTrue('description' in formats[0])
173         self.assertTrue('mime_types' in formats[0])
174         self.assertEqual(type(formats[0]['extensions']), list)
175
176     def test_gdk_window(self):
177         w = gtk.Window()
178         w.realize()
179         origin = w.get_window().get_origin()
180         self.assertTrue(isinstance(origin, tuple))
181         self.assertEqual(len(origin), 2)