From bf6a98e9b90b99cbc12e84be278dddbf697087f1 Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Fri, 6 Aug 2004 15:56:53 +0000 Subject: Don't comment out the fallback, it break the test. (Wow, the testsuite * gobject/pygflags.c (pyg_flags_from_gtype): Don't comment out the fallback, it break the test. (Wow, the testsuite caught another bug!) * tests/enum.py: Additional tests. * gobject/pygenum.c (pyg_enum_repr): Don't use g_enum_get_value, use enum_class->values[n].value_name instead. Also check if the value is NULL or not. This makes gtk.icon_size_register work a little bit better. --- gobject/pygenum.c | 20 +++++++++++++------- gobject/pygflags.c | 7 +------ tests/enum.py | 11 +++++++++-- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/gobject/pygenum.c b/gobject/pygenum.c index 80d241a..17888c8 100644 --- a/gobject/pygenum.c +++ b/gobject/pygenum.c @@ -52,16 +52,17 @@ static PyObject * pyg_enum_repr(PyGEnum *self) { GEnumClass *enum_class; - GEnumValue *enum_value; + char *value; static char tmp[256]; enum_class = g_type_class_ref(self->gtype); g_assert(G_IS_ENUM_CLASS(enum_class)); - - enum_value = g_enum_get_value(enum_class, self->parent.ob_ival); - g_assert(enum_value != 0); - - sprintf(tmp, "", enum_value->value_name, g_type_name(self->gtype)); + + value = enum_class->values[self->parent.ob_ival].value_name; + if (value) + sprintf(tmp, "", value, g_type_name(self->gtype)); + else + sprintf(tmp, "", self->parent.ob_ival, g_type_name(self->gtype)); g_type_class_unref(enum_class); @@ -142,7 +143,12 @@ pyg_enum_from_gtype (GType gtype, int value) retval = PyDict_GetItem(values, PyInt_FromLong(value)); if (!retval) { PyErr_Clear(); - return PyInt_FromLong(value); + retval = ((PyTypeObject *)pyclass)->tp_alloc((PyTypeObject *)pyclass, 0); + g_assert(retval != NULL); + + ((PyIntObject*)retval)->ob_ival = value; + ((PyGFlags*)retval)->gtype = gtype; + //return PyInt_FromLong(value); } Py_INCREF(retval); diff --git a/gobject/pygflags.c b/gobject/pygflags.c index 526368a..98e3a9e 100644 --- a/gobject/pygflags.c +++ b/gobject/pygflags.c @@ -80,8 +80,7 @@ pyg_flags_repr(PyGFlags *self) char *tmp, *retval; PyObject *pyretval; - tmp = generate_repr(self->gtype, - self->parent.ob_ival); + tmp = generate_repr(self->gtype, self->parent.ob_ival); retval = g_strdup_printf("", tmp, g_type_name(self->gtype)); @@ -169,15 +168,11 @@ pyg_flags_from_gtype (GType gtype, int value) if (!retval) { PyErr_Clear(); - return PyInt_FromLong(value); -#if 0 - /* This breaks repr */ retval = ((PyTypeObject *)pyclass)->tp_alloc((PyTypeObject *)pyclass, 0); g_assert(retval != NULL); ((PyIntObject*)retval)->ob_ival = value; ((PyGFlags*)retval)->gtype = gtype; -#endif } Py_INCREF(retval); diff --git a/tests/enum.py b/tests/enum.py index 2e2a2dc..052a5e9 100644 --- a/tests/enum.py +++ b/tests/enum.py @@ -73,8 +73,12 @@ class EnumTest(unittest.TestCase): assert len(klass.__enum_values__) >= 2 def testOutofBounds(self): - assert gtk.icon_size_register('fake', 24, 24) == 7 - + val = gtk.icon_size_register('fake', 24, 24) + assert isinstance(val, gobject.GEnum) + assert int(val) == 7 + assert '7' in repr(val) + assert 'GtkIconSize' in repr(val) + class FlagsTest(unittest.TestCase): def testFlags(self): assert issubclass(gobject.GFlags, int) @@ -100,16 +104,19 @@ class FlagsTest(unittest.TestCase): def testFlagOperations(self): a = gdk.BUTTON_PRESS_MASK + assert isinstance(a, gobject.GFlags) assert a.first_value_name == 'GDK_BUTTON_PRESS_MASK' assert a.first_value_nick == 'button-press-mask' assert a.value_names == ['GDK_BUTTON_PRESS_MASK'], a.value_names assert a.value_nicks == ['button-press-mask'], a.value_names b = gdk.BUTTON_PRESS_MASK | gdk.BUTTON_RELEASE_MASK + assert isinstance(b, gobject.GFlags) assert b.first_value_name == 'GDK_BUTTON_PRESS_MASK' assert b.first_value_nick == 'button-press-mask' assert b.value_names == ['GDK_BUTTON_PRESS_MASK', 'GDK_BUTTON_RELEASE_MASK'] assert b.value_nicks == ['button-press-mask', 'button-release-mask'] c = gdk.BUTTON_PRESS_MASK | gdk.BUTTON_RELEASE_MASK | gdk.ENTER_NOTIFY_MASK + assert isinstance(c, gobject.GFlags) assert c.first_value_name == 'GDK_BUTTON_PRESS_MASK' assert c.first_value_nick == 'button-press-mask' assert c.value_names == ['GDK_BUTTON_PRESS_MASK', 'GDK_BUTTON_RELEASE_MASK', -- cgit