diff options
author | Johan Dahlin <johan@src.gnome.org> | 2005-05-09 20:55:00 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2005-05-09 20:55:00 +0000 |
commit | b13370bf66267a86be0ef60fe7ecb94c3ef96b6b (patch) | |
tree | 2bc430c6a215593fec6fd0d23eb686ff8dd4d143 | |
parent | 3e83d10112186467b6ce670d59b8fb7ccceedada (diff) | |
download | pygtk-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-- | ChangeLog | 9 | ||||
-rw-r--r-- | gtk/gtk.override | 67 | ||||
-rw-r--r-- | tests/test_radiobutton.py | 91 |
3 files changed, 136 insertions, 31 deletions
@@ -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() |