From 04a182516c0b42c1a087919faf985380ffd2acdd Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Sun, 4 Feb 2007 10:23:38 +0000 Subject: [PATCH] Fully implement GstPropertyProbe interface, with unit test. Original commit message from CVS: reviewed by: Edward Hervey * gst/interfaces.defs: * gst/interfaces.override: * testsuite/test_interface.py: Fully implement GstPropertyProbe interface, with unit test. Fixes #376996 --- ChangeLog | 10 +++++++ gst/interfaces.defs | 6 ++-- gst/interfaces.override | 73 +++++++++++++++++++++++++++++++++++++++++++++ testsuite/test_interface.py | 27 +++++++++++++++++ 4 files changed, 113 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index dd15d7c..0b6aecc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-02-04 Johan Dahlin + + reviewed by: Edward Hervey + + * gst/interfaces.defs: + * gst/interfaces.override: + * testsuite/test_interface.py: + Fully implement GstPropertyProbe interface, with unit test. + Fixes #376996 + 2007-01-31 Edward Hervey * configure.ac: diff --git a/gst/interfaces.defs b/gst/interfaces.defs index bcca757..ad7eef3 100644 --- a/gst/interfaces.defs +++ b/gst/interfaces.defs @@ -438,13 +438,13 @@ (return-type "GType") ) -(define-method get_properties +(define-method probe_get_properties (of-object "GstPropertyProbe") (c-name "gst_property_probe_get_properties") (return-type "const-GList*") ) -(define-method get_property +(define-method probe_get_property (of-object "GstPropertyProbe") (c-name "gst_property_probe_get_property") (return-type "const-GParamSpec*") @@ -498,7 +498,7 @@ ) ) -(define-method get_values_name +(define-method probe_get_values_name (of-object "GstPropertyProbe") (c-name "gst_property_probe_get_values_name") (return-type "GValueArray*") diff --git a/gst/interfaces.override b/gst/interfaces.override index 0032829..12d8f55 100644 --- a/gst/interfaces.override +++ b/gst/interfaces.override @@ -245,3 +245,76 @@ _wrap_gst_mixer_get_volume (PyGObject *self, PyObject *args, PyObject *kwargs) return py_tuple; } + +%% +override gst_property_probe_get_property args +static PyObject * +_wrap_gst_property_probe_get_property (PyGObject *self, PyObject *args) +{ + const char *name; + const GParamSpec *spec; + + if (!PyArg_ParseTuple(args, "s:ProbeProperty.get_property", &name)) + return NULL; + + spec = gst_property_probe_get_property (GST_PROPERTY_PROBE (self->obj), + name); + if (!spec) { + PyErr_Format(PyExc_ValueError, "unknown property: %s", name); + return NULL; + } + + return pyg_param_spec_new((GParamSpec*)spec); +} +%% +override gst_property_probe_get_properties noargs +static PyObject * +_wrap_gst_property_probe_get_properties (PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_PROPERTY_PROBE (self->obj), PyList_New(0)); + + list = gst_property_probe_get_properties (GST_PROPERTY_PROBE (self->obj)); + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GParamSpec *spec = (GParamSpec*)l->data; + PyObject *py_gspec = pyg_param_spec_new((GParamSpec*)spec); + PyList_Append(py_list, py_gspec); + Py_DECREF(py_gspec); + } + + return py_list; +} +%% +override gst_property_probe_get_values_name args +static PyObject * +_wrap_gst_property_probe_get_values_name (PyGObject *self, PyObject *args) +{ + const char *name; + GValueArray *array; + PyObject *py_list; + int i; + + g_return_val_if_fail (GST_IS_PROPERTY_PROBE (self->obj), PyList_New(0)); + + if (!PyArg_ParseTuple(args, "s:ProbeProperty.get_values_name", &name)) + return NULL; + + array = gst_property_probe_get_values_name (GST_PROPERTY_PROBE (self->obj), + name); + py_list = PyList_New(0); + + for (i = 0; i < array->n_values; i++) { + GValue *value = g_value_array_get_nth(array, i); + PyObject *py_value = pyg_value_as_pyobject(value, TRUE); + PyList_Append(py_list, py_value); + Py_DECREF(py_value); + + } + g_value_array_free(array); + + return py_list; +} diff --git a/testsuite/test_interface.py b/testsuite/test_interface.py index 8e826f1..f34d6d2 100644 --- a/testsuite/test_interface.py +++ b/testsuite/test_interface.py @@ -43,5 +43,32 @@ class FunctionCall(TestCase): assert isinstance(element, gst.interfaces.XOverlay) element.set_xwindow_id(0L) +class MixerTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.mixer = gst.element_factory_make('alsasrc', '') + assert self.mixer + + def tearDown(self): + del self.mixer + TestCase.tearDown(self) + + def testGetProperty(self): + self.failUnless(self.mixer.probe_get_property('device')) + self.assertRaises(ValueError, + self.mixer.probe_get_property, 'non-existent') + + def testGetProperties(self): + properties = self.mixer.probe_get_properties() + self.failUnless(properties) + self.assertEqual(type(properties), list) + prop = properties[0] + self.assertEqual(prop.name, 'device') + self.assertEqual(prop.value_type, gobject.TYPE_STRING) + + def testGetValuesName(self): + values = self.mixer.probe_get_values_name('device') + self.assertEqual(type(values), list) + if __name__ == "__main__": unittest.main() -- 2.7.4