# -*- Mode: Python -*- # vi:si:et:sw=4:sts=4:ts=4 # # Copyright (C) 2005 Johan Dahlin # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA import unittest from common import gst, TestCase class IteratorTest(TestCase): # XXX: Elements def testBinIterateElements(self): pipeline = gst.parse_launch("fakesrc name=src ! fakesink name=sink") elements = list(pipeline.elements()) fakesrc = pipeline.get_by_name("src") fakesink = pipeline.get_by_name("sink") self.assertEqual(len(elements), 2) self.failUnless(fakesrc in elements) self.failUnless(fakesink in elements) pipeline.remove(fakesrc) elements = list(pipeline.elements()) self.assertEqual(len(elements), 1) self.failUnless(not fakesrc in pipeline) # XXX : There seems to be a problem about the GType # set in gst_bin_iterated_sorted def testBinIterateSorted(self): pipeline = gst.parse_launch("fakesrc name=src ! fakesink name=sink") elements = list(pipeline.sorted()) fakesrc = pipeline.get_by_name("src") fakesink = pipeline.get_by_name("sink") self.assertEqual(elements[0], fakesink) self.assertEqual(elements[1], fakesrc) def testBinIterateRecurse(self): pipeline = gst.parse_launch("fakesrc name=src ! fakesink name=sink") elements = list(pipeline.recurse()) fakesrc = pipeline.get_by_name("src") fakesink = pipeline.get_by_name("sink") self.assertEqual(elements[0], fakesink) self.assertEqual(elements[1], fakesrc) def testBinIterateSinks(self): pipeline = gst.parse_launch("fakesrc name=src ! fakesink name=sink") elements = list(pipeline.sinks()) fakesrc = pipeline.get_by_name("src") fakesink = pipeline.get_by_name("sink") self.assertEqual(len(elements), 1) self.failUnless(fakesink in elements) self.failUnless(not fakesrc in elements) def testIteratePadsFakeSrc(self): fakesrc = gst.element_factory_make('fakesrc') pads = list(fakesrc.pads()) srcpad = fakesrc.get_pad('src') self.assertEqual(len(pads), 1) self.assertEqual(pads[0], srcpad) srcpads = list(fakesrc.src_pads()) self.assertEqual(len(srcpads), 1) self.assertEqual(srcpads[0], srcpad) sinkpads = list(fakesrc.sink_pads()) self.assertEqual(sinkpads, []) self.assertEqual(len(list(fakesrc)), 1) for pad in fakesrc: self.assertEqual(pad, srcpad) break else: raise AssertionError def testIteratePadsFakeSink(self): fakesink = gst.element_factory_make('fakesink') pads = list(fakesink.pads()) sinkpad = fakesink.get_pad('sink') self.assertEqual(len(pads), 1) self.assertEqual(pads[0], sinkpad) srcpads = list(fakesink.src_pads()) self.assertEqual(srcpads, []) sinkpads = list(fakesink.sink_pads()) self.assertEqual(len(sinkpads), 1) self.assertEqual(sinkpads[0], sinkpad) self.assertEqual(len(list(fakesink)), 1) for pad in fakesink: self.assertEqual(pad, sinkpad) break else: raise AssertionError def testInvalidIterator(self): p = gst.Pad("p", gst.PAD_SRC) # The C function will return NULL, we should # therefore have an exception raised self.assertRaises(TypeError, p.iterate_internal_links) del p