diff options
Diffstat (limited to 'tests/test_pygtkcompat.py')
-rw-r--r-- | tests/test_pygtkcompat.py | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/tests/test_pygtkcompat.py b/tests/test_pygtkcompat.py new file mode 100644 index 0000000..c01892a --- /dev/null +++ b/tests/test_pygtkcompat.py @@ -0,0 +1,339 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +# vim: tabstop=4 shiftwidth=4 expandtab + +import unittest +import base64 + +import pytest +import gi +import pygtkcompat +from pygtkcompat.pygtkcompat import _disable_all as disable_all + +from .helper import capture_gi_deprecation_warnings, capture_glib_warnings + +try: + from gi.repository import Gtk, Gdk +except ImportError: + Gtk = None +else: + if Gtk._version != "3.0": + Gtk = None + + +class TestGlibCompat(unittest.TestCase): + + def setUp(self): + pygtkcompat.enable() + + def tearDown(self): + disable_all() + + def test_import(self): + import glib + import gio + glib, gio + + +@unittest.skipUnless(Gtk, 'Gtk not available') +class TestMultipleEnable(unittest.TestCase): + + def tearDown(self): + disable_all() + + def test_main(self): + pygtkcompat.enable() + pygtkcompat.enable() + + def test_gtk(self): + pygtkcompat.enable_gtk("3.0") + pygtkcompat.enable_gtk("3.0") + import gtk + + # https://bugzilla.gnome.org/show_bug.cgi?id=759009 + w = gtk.Window() + w.realize() + self.assertEqual(len(w.window.get_origin()), 2) + w.destroy() + + def test_gtk_no_4(self): + self.assertRaises(ValueError, pygtkcompat.enable_gtk, version='4.0') + + def test_gtk_version_conflict(self): + pygtkcompat.enable_gtk("3.0") + self.assertRaises(ValueError, pygtkcompat.enable_gtk, version='2.0') + + +@unittest.skipUnless(Gtk, 'Gtk not available') +class TestATKCompat(unittest.TestCase): + + def setUp(self): + pygtkcompat.enable_gtk("3.0") + + def tearDown(self): + disable_all() + + def test_object(self): + import atk + self.assertTrue(hasattr(atk, 'Object')) + + +@unittest.skipUnless(Gtk, 'Gtk not available') +class TestPangoCompat(unittest.TestCase): + + def setUp(self): + pygtkcompat.enable_gtk("3.0") + + def tearDown(self): + disable_all() + + def test_layout(self): + import pango + self.assertTrue(hasattr(pango, 'Layout')) + + +@unittest.skipUnless(Gtk, 'Gtk not available') +class TestPangoCairoCompat(unittest.TestCase): + + def setUp(self): + pygtkcompat.enable_gtk("3.0") + + def tearDown(self): + disable_all() + + def test_error_underline_path(self): + import pangocairo + self.assertTrue(hasattr(pangocairo, 'error_underline_path')) + + +@unittest.skipUnless(Gtk, 'Gtk not available') +class TestGTKCompat(unittest.TestCase): + + def setUp(self): + pygtkcompat.enable_gtk("3.0") + + def tearDown(self): + disable_all() + + def test_window_get_frame_extents(self): + import gtk + import gtk.gdk + w = gtk.Window() + w.realize() + rect = w.window.get_frame_extents() + assert isinstance(rect, gtk.gdk.Rectangle) + + def test_window_get_geometry(self): + import gtk + w = gtk.Window() + w.realize() + with capture_gi_deprecation_warnings(): + geo = w.window.get_geometry() + assert isinstance(geo, tuple) + assert len(geo) == 5 + + def test_action_set_tool_item_type(self): + import gtk + with pytest.warns(gi.PyGIDeprecationWarning): + gtk.Action().set_tool_item_type(gtk.Action) + + def test_treeviewcolumn_pack(self): + import gtk + col = gtk.TreeViewColumn() + col.pack_end(gtk.CellRendererText()) + col.pack_start(gtk.CellRendererText()) + + def test_cell_layout_pack(self): + import gtk + layout = gtk.EntryCompletion() + layout.pack_end(gtk.CellRendererText()) + layout.pack_start(gtk.CellRendererText()) + + def test_cell_layout_cell_data_func(self): + import gtk + + def func(*args): + pass + + layout = gtk.EntryCompletion() + render = gtk.CellRendererText() + layout.set_cell_data_func(render, func) + + def test_combo_row_separator_func(self): + import gtk + + def func(*args): + pass + + combo = gtk.ComboBox() + combo.set_row_separator_func(func) + + def test_container_install_child_property(self): + import gtk + + box = gtk.Box() + with pytest.warns(gi.PyGIDeprecationWarning): + box.install_child_property(0, None) + + def test_combo_box_new_text(self): + import gtk + + combo = gtk.combo_box_new_text() + assert isinstance(combo, gtk.ComboBox) + combo.append_text("foo") + + def test_scale(self): + import gtk + + adjustment = gtk.Adjustment() + assert gtk.HScale() + assert gtk.HScale(adjustment).get_adjustment() == adjustment + adjustment = gtk.Adjustment() + assert gtk.VScale() + assert gtk.VScale(adjustment).get_adjustment() == adjustment + + def test_stock_add(self): + import gtk + + gtk.stock_add([]) + + def test_text_view_scroll_to_mark(self): + import gtk + + view = gtk.TextView() + buf = view.get_buffer() + mark = gtk.TextMark(name="foo") + buf.add_mark(mark, buf.get_end_iter()) + view.scroll_to_mark(mark, 0.0) + + def test_window_set_geometry_hints(self): + import gtk + + w = gtk.Window() + w.set_geometry_hints(None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + w.set_geometry_hints(None, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1) + with pytest.raises(TypeError): + w.set_geometry_hints(None, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + + def test_buttons(self): + import gtk.gdk + self.assertEqual(gtk.gdk._2BUTTON_PRESS, 5) + self.assertEqual(gtk.gdk.BUTTON_PRESS, 4) + + def test_enums(self): + import gtk + self.assertEqual(gtk.WINDOW_TOPLEVEL, Gtk.WindowType.TOPLEVEL) + self.assertEqual(gtk.PACK_START, Gtk.PackType.START) + + def test_flags(self): + import gtk + self.assertEqual(gtk.EXPAND, Gtk.AttachOptions.EXPAND) + self.assertEqual(gtk.gdk.SHIFT_MASK, Gdk.ModifierType.SHIFT_MASK) + + def test_keysyms(self): + import gtk.keysyms + self.assertEqual(gtk.keysyms.Escape, Gdk.KEY_Escape) + self.assertTrue(gtk.keysyms._0, Gdk.KEY_0) + + def test_style(self): + import gtk + widget = gtk.Button() + with capture_gi_deprecation_warnings(): + widget.get_style_context().set_state(gtk.STATE_NORMAL) + self.assertTrue(isinstance(widget.style.base[gtk.STATE_NORMAL], + gtk.gdk.Color)) + + def test_alignment(self): + import gtk + # Creation of pygtk.Alignment causes hard warnings, ignore this in testing. + with capture_glib_warnings(allow_warnings=True): + a = gtk.Alignment() + + self.assertEqual(a.props.xalign, 0.0) + self.assertEqual(a.props.yalign, 0.0) + self.assertEqual(a.props.xscale, 0.0) + self.assertEqual(a.props.yscale, 0.0) + + def test_box(self): + import gtk + box = gtk.Box() + child = gtk.Button() + + box.pack_start(child) + expand, fill, padding, pack_type = box.query_child_packing(child) + self.assertTrue(expand) + self.assertTrue(fill) + self.assertEqual(padding, 0) + self.assertEqual(pack_type, gtk.PACK_START) + + child = gtk.Button() + box.pack_end(child) + expand, fill, padding, pack_type = box.query_child_packing(child) + self.assertTrue(expand) + self.assertTrue(fill) + self.assertEqual(padding, 0) + self.assertEqual(pack_type, gtk.PACK_END) + + def test_combobox_entry(self): + import gtk + liststore = gtk.ListStore(int, str) + liststore.append((1, 'One')) + liststore.append((2, 'Two')) + liststore.append((3, 'Three')) + # might cause a Pango warning, do not break on this + with capture_glib_warnings(allow_warnings=True): + combo = gtk.ComboBoxEntry(model=liststore) + combo.set_text_column(1) + combo.set_active(0) + self.assertEqual(combo.get_text_column(), 1) + self.assertEqual(combo.get_child().get_text(), 'One') + combo = gtk.combo_box_entry_new() + combo.set_model(liststore) + combo.set_text_column(1) + combo.set_active(0) + self.assertEqual(combo.get_text_column(), 1) + self.assertEqual(combo.get_child().get_text(), 'One') + combo = gtk.combo_box_entry_new_with_model(liststore) + combo.set_text_column(1) + combo.set_active(0) + self.assertEqual(combo.get_text_column(), 1) + self.assertEqual(combo.get_child().get_text(), 'One') + + def test_size_request(self): + import gtk + box = gtk.Box() + with capture_gi_deprecation_warnings(): + self.assertEqual(box.size_request(), [0, 0]) + + def test_pixbuf(self): + import gtk.gdk + gtk.gdk.Pixbuf() + + def test_pixbuf_loader(self): + import gtk.gdk + # load a 1x1 pixel PNG from memory + data = base64.b64decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP4n8Dw' + 'HwAGIAJf85Z3XgAAAABJRU5ErkJggg==') + loader = gtk.gdk.PixbufLoader('png') + loader.write(data) + loader.close() + + pixbuf = loader.get_pixbuf() + self.assertEqual(pixbuf.get_width(), 1) + self.assertEqual(pixbuf.get_height(), 1) + + def test_pixbuf_formats(self): + import gtk.gdk + formats = gtk.gdk.pixbuf_get_formats() + self.assertEqual(type(formats[0]), dict) + self.assertTrue('name' in formats[0]) + self.assertTrue('description' in formats[0]) + self.assertTrue('mime_types' in formats[0]) + self.assertEqual(type(formats[0]['extensions']), list) + + def test_gdk_window(self): + import gtk + w = gtk.Window() + w.realize() + origin = w.get_window().get_origin() + self.assertTrue(isinstance(origin, tuple)) + self.assertEqual(len(origin), 2) |