pygtk r2997 - in trunk: . gtk tests



Author: paulp
Date: Sun Jun 22 20:17:18 2008
New Revision: 2997
URL: http://svn.gnome.org/viewvc/pygtk?rev=2997&view=rev

Log:
2008-06-22  Paul Pogonyshev  <pogonyshev gmx net>

	* gtk/gtk.override (_wrap_gtk_action_set_menu_item_type)
	(_wrap_gtk_action_set_tool_item_type): Check that argument is a
	subclass of gtk.MenuItem or gtk.ToolItem correspondingly (bug
	#533644).

	* tests/test_actiongroup.py (ActionTest.testSetItemClasses): New
	test for the added type check.


Modified:
   trunk/ChangeLog
   trunk/gtk/gtk.override
   trunk/tests/test_actiongroup.py

Modified: trunk/gtk/gtk.override
==============================================================================
--- trunk/gtk/gtk.override	(original)
+++ trunk/gtk/gtk.override	Sun Jun 22 20:17:18 2008
@@ -8283,15 +8283,23 @@
 				     &py_menu_item_type))
 	return NULL;
 
-     if ((gtype = pyg_type_from_object(cls)) == 0)
-         return NULL;
-     if ((menu_item_type = pyg_type_from_object(py_menu_item_type)) == 0)
-         return NULL;
-     klass = (GtkActionClass *) g_type_class_ref(gtype);
-     klass->menu_item_type = menu_item_type;
-     g_type_class_unref(klass);
-     Py_INCREF(Py_None);
-     return Py_None;
+    if ((gtype = pyg_type_from_object(cls)) == 0)
+        return NULL;
+
+    if (!PyType_Check(py_menu_item_type)
+        || !PyType_IsSubtype((PyTypeObject *) py_menu_item_type, &PyGtkMenuItem_Type)) {
+        PyErr_SetString(PyExc_TypeError, "argument must be a subtype of gtk.MenuItem");
+        return NULL;
+    }
+
+    if ((menu_item_type = pyg_type_from_object(py_menu_item_type)) == 0)
+        return NULL;
+
+    klass = (GtkActionClass *) g_type_class_ref(gtype);
+    klass->menu_item_type = menu_item_type;
+    g_type_class_unref(klass);
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 
 %%
@@ -8311,15 +8319,23 @@
 				     &py_tool_item_type))
 	return NULL;
 
-     if ((gtype = pyg_type_from_object(cls)) == 0)
-         return NULL;
-     if ((tool_item_type = pyg_type_from_object(py_tool_item_type)) == 0)
-         return NULL;
-     klass = (GtkActionClass *) g_type_class_ref(gtype);
-     klass->toolbar_item_type = tool_item_type;
-     g_type_class_unref(klass);
-     Py_INCREF(Py_None);
-     return Py_None;
+    if ((gtype = pyg_type_from_object(cls)) == 0)
+        return NULL;
+
+    if (!PyType_Check(py_tool_item_type)
+        || !PyType_IsSubtype((PyTypeObject *) py_tool_item_type, &PyGtkToolItem_Type)) {
+        PyErr_SetString(PyExc_TypeError, "argument must be a subtype of gtk.ToolItem");
+        return NULL;
+    }
+
+    if ((tool_item_type = pyg_type_from_object(py_tool_item_type)) == 0)
+        return NULL;
+
+    klass = (GtkActionClass *) g_type_class_ref(gtype);
+    klass->toolbar_item_type = tool_item_type;
+    g_type_class_unref(klass);
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 %%
 override gtk_accel_map_foreach kwargs

Modified: trunk/tests/test_actiongroup.py
==============================================================================
--- trunk/tests/test_actiongroup.py	(original)
+++ trunk/tests/test_actiongroup.py	Sun Jun 22 20:17:18 2008
@@ -145,6 +145,28 @@
         myaction = MyAction()
         myaction.activate()
         self.assertEqual(myaction._activated, True)
+
+    def testSetItemClasses(self):
+
+        class MyAction(gtk.Action):
+            def __init__(self):
+                gtk.Action.__init__(self, 'name', 'label', None, None)
+
+        def set_menu_item_type(type):
+            MyAction.set_menu_item_type(type)
+
+        def set_tool_item_type(type):
+            MyAction.set_tool_item_type(type)
+
+        self.assertRaises(TypeError, lambda: set_menu_item_type(None))
+        self.assertRaises(TypeError, lambda: set_menu_item_type(gtk.Button))
+        set_menu_item_type(gtk.ImageMenuItem)
+        self.assert_(isinstance(MyAction().create_menu_item(), gtk.ImageMenuItem))
+
+        self.assertRaises(TypeError, lambda: set_tool_item_type(None))
+        self.assertRaises(TypeError, lambda: set_tool_item_type(gtk.Button))
+        set_tool_item_type(gtk.SeparatorToolItem)
+        self.assert_(isinstance(MyAction().create_tool_item(), gtk.SeparatorToolItem))
         
 
 if __name__ == '__main__':



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]