summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Dahlin <johan@src.gnome.org>2005-05-09 20:55:00 +0000
committerJohan Dahlin <johan@src.gnome.org>2005-05-09 20:55:00 +0000
commitb13370bf66267a86be0ef60fe7ecb94c3ef96b6b (patch)
tree2bc430c6a215593fec6fd0d23eb686ff8dd4d143
parent3e83d10112186467b6ce670d59b8fb7ccceedada (diff)
downloadpygtk-b13370bf66267a86be0ef60fe7ecb94c3ef96b6b.tar.gz
Allow None to be passed in to: set_group for RadioAction.set_group(),
* gtk/gtk.override: Allow None to be passed in to: set_group for RadioAction.set_group(), RadioToolButton.set_group() and RadioMenuItem.set_group(). * tests/test_radiobutton.py: Refactor and add unittests for RadioAction, RadioToolButton and RadioMenuItem.
-rw-r--r--ChangeLog9
-rw-r--r--gtk/gtk.override67
-rw-r--r--tests/test_radiobutton.py91
3 files changed, 136 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index 9522855d..6b6a9a46 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2005-05-09 Johan Dahlin <jdahlin@async.com.br>
+
+ * gtk/gtk.override: Allow None to be passed in to:
+ set_group for RadioAction.set_group(), RadioToolButton.set_group()
+ and RadioMenuItem.set_group().
+
+ * tests/test_radiobutton.py: Refactor and add unittests for
+ RadioAction, RadioToolButton and RadioMenuItem.
+
2005-05-09 Mark McLoughlin <mark@skynet.ie>
Fix for bug #303573 - "exceptions raised in a child watch
diff --git a/gtk/gtk.override b/gtk/gtk.override
index 6d5458e7..bfd6dc2d 100644
--- a/gtk/gtk.override
+++ b/gtk/gtk.override
@@ -3580,17 +3580,26 @@ _wrap_gtk_radio_menu_item_set_group(PyGObject *self, PyObject *args,
GtkRadioMenuItem *group;
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
- "O!:GtkRadioMenuItem.set_group",
- kwlist, &PyGtkRadioMenuItem_Type,
- &py_group))
- return NULL;
- group = GTK_RADIO_MENU_ITEM(pygobject_get(py_group));
- list = gtk_radio_menu_item_get_group(group);
- if (list == gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(self->obj))) {
- PyErr_SetString(PyExc_ValueError, "radio menu item already in group");
+ "O:GtkRadioMenuItem.set_group",
+ kwlist, &py_group))
return NULL;
+
+ if (pygobject_check(py_group, &PyGtkRadioMenuItem_Type)) {
+ group = GTK_RADIO_MENU_ITEM(pygobject_get(py_group));
+ list = gtk_radio_menu_item_get_group(group);
+ if (list == gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(self->obj))) {
+ PyErr_SetString(PyExc_ValueError, "radio menu item already in group");
+ return NULL;
+ }
+ } else if (py_group == Py_None) {
+ list = NULL;
+ } else {
+ PyErr_SetString(PyExc_TypeError, "group must be a RadioMenuItem or None");
+ return NULL;
}
+
gtk_radio_menu_item_set_group(GTK_RADIO_MENU_ITEM(self->obj), list);
+
Py_INCREF(Py_None);
return Py_None;
}
@@ -5294,13 +5303,26 @@ _wrap_gtk_radio_action_set_group(PyGObject *self, PyObject *args,
PyObject *py_group;
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
- "O!:GtkRadioAction.set_group", kwlist,
- &PyGtkRadioAction_Type, &py_group))
+ "O:GtkRadioAction.set_group",
+ kwlist, &py_group))
return NULL;
- group = GTK_RADIO_ACTION(pygobject_get(py_group));
- list = gtk_radio_action_get_group(group);
+ if (pygobject_check(py_group, &PyGtkRadioAction_Type)) {
+ group = GTK_RADIO_ACTION(pygobject_get(py_group));
+ list = gtk_radio_action_get_group(group);
+ if (list == gtk_radio_action_get_group(GTK_RADIO_ACTION(self->obj))) {
+ PyErr_SetString(PyExc_ValueError, "radio action already in group");
+ return NULL;
+ }
+ } else if (py_group == Py_None) {
+ list = NULL;
+ } else {
+ PyErr_SetString(PyExc_TypeError, "group must be a RadioAction or None");
+ return NULL;
+ }
+
gtk_radio_action_set_group(GTK_RADIO_ACTION(self->obj), list);
+
Py_INCREF(Py_None);
return Py_None;
}
@@ -5389,13 +5411,26 @@ _wrap_gtk_radio_tool_button_set_group(PyGObject *self, PyObject *args,
PyObject *py_group;
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
- "O!:GtkRadioToolButton.set_group", kwlist,
- &PyGtkRadioToolButton_Type, &py_group))
+ "O:GtkRadioToolButton.set_group",
+ kwlist, &py_group))
return NULL;
- group = GTK_RADIO_TOOL_BUTTON(pygobject_get(py_group));
- list = gtk_radio_tool_button_get_group(group);
+ if (pygobject_check(py_group, &PyGtkRadioToolButton_Type)) {
+ group = GTK_RADIO_TOOL_BUTTON(pygobject_get(py_group));
+ list = gtk_radio_tool_button_get_group(group);
+ if (list == gtk_radio_tool_button_get_group(GTK_RADIO_TOOL_BUTTON(self->obj))) {
+ PyErr_SetString(PyExc_ValueError, "radio tool button already in group");
+ return NULL;
+ }
+ } else if (py_group == Py_None) {
+ list = NULL;
+ } else {
+ PyErr_SetString(PyExc_TypeError, "group must be a RadioToolButton or None");
+ return NULL;
+ }
+
gtk_radio_tool_button_set_group(GTK_RADIO_TOOL_BUTTON(self->obj), list);
+
Py_INCREF(Py_None);
return Py_None;
}
diff --git a/tests/test_radiobutton.py b/tests/test_radiobutton.py
index 791f8b29..61caeec0 100644
--- a/tests/test_radiobutton.py
+++ b/tests/test_radiobutton.py
@@ -2,30 +2,91 @@ import unittest
from common import gtk
-class RadioButtonTest(unittest.TestCase):
+class RadioTest(unittest.TestCase):
+ widget_type = None
+ constructor_args = ()
+
+ def new(self):
+ return self.widget_type(*self.constructor_args)
+
+ def new_with_label(self, label):
+ return self.widget_type(None, label)
+
+ def new_with_group(self, group):
+ return self.widget_type(group)
+
+ def get_label(self, obj):
+ return obj.get_property('label')
+
+ def compareGroups(self, group1, group2):
+ return self.assertEqual(group1, group2)
+
def testCreate(self):
- radio = gtk.RadioButton()
- self.assert_(isinstance(radio, gtk.RadioButton))
+ if self.widget_type is None:
+ return
+ radio = self.new()
+ self.assert_(isinstance(radio, self.widget_type))
def testLabel(self):
- radio = gtk.RadioButton(None, 'test-radio')
- self.assertEqual(radio.get_label(), 'test-radio')
+ if self.widget_type is None:
+ return
+ radio = self.new_with_label('test-radio')
+ self.assertEqual(self.get_label(radio), 'test-radio')
def testGroup(self):
- radio = gtk.RadioButton()
- radio2 = gtk.RadioButton(radio)
- self.assertEqual(radio.get_group(), radio2.get_group())
+ if self.widget_type is None:
+ return
+ radio = self.new()
+ radio2 = self.new_with_group(radio)
+ self.compareGroups(radio.get_group(), radio2.get_group())
+ self.compareGroups(radio2.get_group(), radio.get_group())
def testEmptyGroup(self):
- radio = gtk.RadioButton()
- radio2 = gtk.RadioButton()
- self.assertEqual(radio.get_group(), [radio])
- self.assertEqual(radio2.get_group(), [radio2])
+ if self.widget_type is None:
+ return
+ radio = self.new()
+ radio2 = self.new()
+ self.compareGroups(radio.get_group(), [radio])
+ self.compareGroups(radio2.get_group(), [radio2])
radio2.set_group(radio)
- self.assertEqual(radio.get_group(), radio2.get_group())
+ self.compareGroups(radio.get_group(), radio2.get_group())
+ self.compareGroups(radio2.get_group(), radio.get_group())
radio2.set_group(None)
- self.assertEqual(radio.get_group(), [radio])
- self.assertEqual(radio2.get_group(), [radio2])
+ self.compareGroups(radio.get_group(), [radio])
+ self.compareGroups(radio2.get_group(), [radio2])
+
+class RadioButtonTest(RadioTest):
+ widget_type = gtk.RadioButton
+
+class RadioActionTest(RadioTest):
+ widget_type = gtk.RadioAction
+ constructor_args = ('RadioAction', 'test-radio-action', '', '', 0)
+
+ def new_with_group(self, radio):
+ obj = self.new()
+ obj.set_group(radio)
+ return obj
+
+ def new_with_label(self, label):
+ return gtk.RadioAction('RadioAction', label, '', '', 0)
+
+class RadioToolButtonTest(RadioTest):
+ widget_type = gtk.RadioToolButton
+
+ def compareGroups(self, group1, group2):
+ return cmp(map(id, group1),
+ map(id, group2))
+
+ def new_with_label(self, label):
+ radio = gtk.RadioToolButton(None)
+ radio.set_label(label)
+ return radio
+
+class RadioMenuItem(RadioTest):
+ widget_type = gtk.RadioMenuItem
+
+ def get_label(self, obj):
+ return obj.get_children()[0].get_text()
if __name__ == '__main__':
unittest.main()