2 # vi:si:et:sw=4:sts=4:ts=4
4 # gst-python - Python bindings for GStreamer
5 # Copyright (C) 2007 Johan Dahlin
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 from common import TestCase
28 gi.require_version("Gst", "1.0")
29 from gi.repository import Gst
32 Gst.DoubleRange = Gst.DoubleRange
34 class TestDoubleRange(TestCase):
35 def testConstructor(self):
38 Gst.DoubleRange = Gst.DoubleRange(1.2, 3.4)
39 self.assertEqual(r.start, 1.2)
40 self.assertEqual(r.stop, 3.4)
41 self.assertRaises(TypeError, Gst.DoubleRange, {}, 2)
42 self.assertRaises(TypeError, Gst.DoubleRange, 2, ())
43 self.assertRaises(TypeError, Gst.DoubleRange, 2, 1)
44 self.assertRaises(TypeError, Gst.DoubleRange)
49 self.assertEqual(repr(Gst.DoubleRange(1,2)), '<Gst.DoubleRange [1.0,2.0]>')
51 def testGetValue(self):
54 st = Gst.Structure.new_empty("video/x-raw")
55 st["range"] = Gst.DoubleRange(1,2)
58 self.assertEqual(value.start, 1.0)
59 self.assertEqual(value.stop, 2.0)
62 class TestFraction(TestCase):
63 def testConstructor(self):
66 frac = Gst.Fraction(1, 2)
67 self.assertEqual(frac.num, 1)
68 self.assertEqual(frac.denom, 2)
70 frac = Gst.Fraction(1)
71 self.assertEqual(frac.num, 1)
72 self.assertEqual(frac.denom, 1)
74 self.assertRaises(TypeError, Gst.Fraction)
79 self.assertEqual(repr(Gst.Fraction(1, 2)), '<Gst.Fraction 1/2>')
84 frac = Gst.Fraction(1, 2)
85 self.assertEqual(frac, frac)
86 self.assertEqual(Gst.Fraction(1, 2), Gst.Fraction(1, 2))
87 self.assertEqual(Gst.Fraction(2, 4), Gst.Fraction(1, 2))
89 self.assertNotEqual(Gst.Fraction(1, 3), Gst.Fraction(1, 2))
90 self.assertNotEqual(Gst.Fraction(2, 1), Gst.Fraction(1, 2))
95 self.assertEqual(Gst.Fraction(1, 2) * Gst.Fraction(1, 2), Gst.Fraction(1, 4))
96 self.assertEqual(Gst.Fraction(2, 3) * Gst.Fraction(4, 5), Gst.Fraction(8, 15))
97 self.assertEqual(Gst.Fraction(1, 3) * Gst.Fraction(4), Gst.Fraction(4, 3))
98 self.assertEqual(Gst.Fraction(1, 3) * 4, Gst.Fraction(4, 3))
103 self.assertEqual(2 * Gst.Fraction(1, 2), Gst.Fraction(1))
104 self.assertEqual(4 * Gst.Fraction(1, 2), Gst.Fraction(2))
105 self.assertEqual(-10 * Gst.Fraction(1, 2), Gst.Fraction(-5))
110 self.assertEqual(Gst.Fraction(1, 3) / Gst.Fraction(1, 4), Gst.Fraction(4, 3))
111 self.assertEqual(Gst.Fraction(2, 3) / Gst.Fraction(4, 5), Gst.Fraction(10, 12))
113 self.assertEqual(Gst.Fraction(1, 3) / Gst.Fraction(4), Gst.Fraction(1, 12))
114 self.assertEqual(Gst.Fraction(1, 3) / 4, Gst.Fraction(1, 12))
115 self.assertEqual(Gst.Fraction(1, 3) / 2, Gst.Fraction(1, 6))
116 self.assertEqual(Gst.Fraction(1, 5) / -4, Gst.Fraction(1, -20))
121 self.assertEqual(2 / Gst.Fraction(1, 3), Gst.Fraction(6, 1))
122 self.assertEqual(-4 / Gst.Fraction(1, 5), Gst.Fraction(-20, 1))
127 self.assertEqual(float(Gst.Fraction(1, 2)), 0.5)
129 def testPropertyMarshalling(self):
132 obj = Gst.ElementFactory.make("rawvideoparse")
134 obj = Gst.ElementFactory.make("rawvideoparse")
137 # no (raw)videoparse and I don't know of any elements in core or -base using
138 # fraction properties. Skip this test.
141 value = obj.props.framerate
142 self.assertEqual(value.num, 25)
143 self.assertEqual(value.denom, 1)
145 obj.props.framerate = Gst.Fraction(2, 1)
146 value = obj.props.framerate
147 self.assertEqual(value.num, 2)
148 self.assertEqual(value.denom, 1)
151 obj.props.framerate = 1
152 self.assertRaises(TypeError, bad)
154 value = obj.props.framerate
155 self.assertEqual(value.num, 2)
156 self.assertEqual(value.denom, 1)
158 def testGetFractionValue(self):
161 st = Gst.Structure.from_string("video/x-raw,framerate=10/1")[0]
162 value = st["framerate"]
164 self.assertEqual(value.num, 10)
165 self.assertEqual(value.denom, 1)
168 class TestFractionRange(TestCase):
169 def testConstructor(self):
172 r = Gst.FractionRange(Gst.Fraction(1, 30), Gst.Fraction(1, 2))
173 self.assertEqual(r.start, Gst.Fraction(1, 30))
174 self.assertEqual(r.stop, Gst.Fraction(1, 2))
175 self.assertRaises(TypeError, Gst.FractionRange, Gst.Fraction(1, 2), Gst.Fraction(1, 30))
176 self.assertRaises(TypeError, Gst.FractionRange, 2, Gst.Fraction(1, 2))
177 self.assertRaises(TypeError, Gst.FractionRange, Gst.Fraction(1, 2), 2)
178 self.assertRaises(TypeError, Gst.FractionRange)
183 self.assertEqual(repr(Gst.FractionRange(Gst.Fraction(1,30), Gst.Fraction(1,2))),
184 '<Gst.FractionRange [1/30,1/2]>')
186 def testGetValue(self):
189 st = Gst.Structure.new_empty("video/x-raw")
190 st["range"] = Gst.FractionRange(Gst.Fraction(1, 30), Gst.Fraction(1, 2))
193 self.assertEqual(value.start, Gst.Fraction(1, 30))
194 self.assertEqual(value.stop, Gst.Fraction(1, 2))
196 class TestDoubleRange(TestCase):
197 def testConstructor(self):
200 r = Gst.DoubleRange(1.2, 3.4)
201 self.assertEqual(r.start, 1.2)
202 self.assertEqual(r.stop, 3.4)
203 self.assertRaises(TypeError, Gst.DoubleRange, {}, 2)
204 self.assertRaises(TypeError, Gst.DoubleRange, 2, ())
205 self.assertRaises(TypeError, Gst.DoubleRange, 2, 1)
206 self.assertRaises(TypeError, Gst.DoubleRange)
211 self.assertEqual(repr(Gst.DoubleRange(1,2)), '<Gst.DoubleRange [1.0,2.0]>')
213 def testGetValue(self):
216 st = Gst.Structure.new_empty("video/x-raw")
217 st["range"] = Gst.DoubleRange(1,2)
220 self.assertEqual(value.start, 1.0)
221 self.assertEqual(value.stop, 2.0)
224 class TestInt64Range(TestCase):
225 @unittest.skipUnless(sys.version_info >= (3, 0), "requires Python 3")
226 def testConstructor(self):
229 r = Gst.Int64Range(range(0, 10, 2))
230 self.assertEqual(r.range, range(0, 10, 2))
231 self.assertRaises(TypeError, Gst.Int64Range, range(1, 10, 2))
232 self.assertRaises(TypeError, Gst.Int64Range, range(0, 9, 2))
233 self.assertRaises(TypeError, Gst.Int64Range, range(10, 0))
234 self.assertRaises(TypeError, Gst.Int64Range, 1)
235 self.assertRaises(TypeError, Gst.Int64Range)
237 @unittest.skipUnless(sys.version_info >= (3, 0), "requires Python 3")
241 self.assertEqual(repr(Gst.Int64Range(range(0, 10, 2))), '<Gst.Int64Range [0,10,2]>')
243 @unittest.skipUnless(sys.version_info >= (3, 0), "requires Python 3")
244 def testGetValue(self):
247 st = Gst.Structure.new_empty("video/x-raw")
248 st["range"] = Gst.Int64Range(range(0, 10, 2))
251 self.assertEqual(value, range(0, 10, 2))
254 class TestValueArray(TestCase):
255 def testConstructor(self):
258 a = Gst.ValueArray((1,2,3))
259 self.assertEqual(a.array, [1,2,3])
261 self.assertRaises(TypeError, Gst.ValueArray, 1)
262 self.assertRaises(TypeError, Gst.ValueArray)
267 self.assertEqual(repr(Gst.ValueArray([1,2,3])), '<Gst.ValueArray <1,2,3>>')
269 def testPropertyMarshalling(self):
272 obj = Gst.ElementFactory.make("rawvideoparse")
275 # no rawvideoparse and I don't know of any elements in core or -base using
276 # fraction properties. Skip this test.
279 value = obj.props.plane_strides
280 self.assertEqual(value[0], 320)
281 self.assertEqual(value[1], 160)
282 self.assertEqual(value[2], 160)
284 obj.props.plane_strides = Gst.ValueArray([640,320,320])
286 value = obj.props.plane_strides
287 self.assertEqual(value[0], 640)
288 self.assertEqual(value[1], 320)
289 self.assertEqual(value[2], 320)
292 obj.props.plane_strides = 1
293 self.assertRaises(TypeError, bad)
295 value = obj.props.plane_strides
296 self.assertEqual(value[0], 640)
297 self.assertEqual(value[1], 320)
298 self.assertEqual(value[2], 320)
300 def testGetValue(self):
303 st = Gst.Structure.new_empty("video/x-raw")
304 st["array"] = Gst.ValueArray([Gst.Fraction(1, 30), Gst.Fraction(1, 2)])
306 st["array"] = Gst.ValueArray(value)
308 self.assertEqual(value[0], Gst.Fraction(1, 30))
309 self.assertEqual(value[1], Gst.Fraction(1, 2))
311 st["matrix"] = Gst.ValueArray([Gst.ValueArray([0, 1]), Gst.ValueArray([-1, 0])])
314 self.assertEqual(value[0][0], 0)
315 self.assertEqual(value[0][1], 1)
316 self.assertEqual(value[1][0], -1)
317 self.assertEqual(value[1][1], 0)
320 class TestValueList(TestCase):
321 def testConstructor(self):
324 a = Gst.ValueList((1,2,3))
325 self.assertEqual(a.array, [1,2,3])
327 self.assertRaises(TypeError, Gst.ValueList, 1)
328 self.assertRaises(TypeError, Gst.ValueList)
333 self.assertEqual(repr(Gst.ValueList([1,2,3])), '<Gst.ValueList {1,2,3}>')
335 def testGetValue(self):
338 st = Gst.Structure.new_empty("video/x-raw")
339 st["framerate"] = Gst.ValueList([Gst.Fraction(1, 30), Gst.Fraction(1, 2)])
340 value = st["framerate"]
342 self.assertEqual(value[0], Gst.Fraction(1, 30))
343 self.assertEqual(value[1], Gst.Fraction(1, 2))
345 st["matrix"] = Gst.ValueList([Gst.ValueList([0, 1]), Gst.ValueList([-1 ,0])])
348 self.assertEqual(value[0][0], 0)
349 self.assertEqual(value[0][1], 1)
350 self.assertEqual(value[1][0], -1)
351 self.assertEqual(value[1][1], 0)
353 class TestIntRange(TestCase):
354 @unittest.skipUnless(sys.version_info >= (3, 0), "requires Python 3")
355 def testConstructor(self):
358 r = Gst.IntRange(range(0, 10, 2))
359 self.assertEqual(r.range, range(0, 10, 2))
360 self.assertRaises(TypeError, Gst.IntRange, range(1, 10, 2))
361 self.assertRaises(TypeError, Gst.IntRange, range(0, 9, 2))
362 self.assertRaises(TypeError, Gst.IntRange, range(10, 0))
363 self.assertRaises(TypeError, Gst.IntRange, 1)
364 self.assertRaises(TypeError, Gst.IntRange)
366 @unittest.skipUnless(sys.version_info >= (3, 0), "requires Python 3")
370 self.assertEqual(repr(Gst.IntRange(range(0, 10, 2))), '<Gst.IntRange [0,10,2]>')
372 @unittest.skipUnless(sys.version_info >= (3, 0), "requires Python 3")
373 def testGetValue(self):
376 st = Gst.Structure.new_empty("video/x-raw")
377 st["range"] = Gst.IntRange(range(0, 10, 2))
380 self.assertEqual(value, range(0, 10, 2))
383 class TestBitmask(TestCase):
384 def testConstructor(self):
387 r = Gst.Bitmask(1 << 5)
388 self.assertEqual(r, 1 << 5)
390 def testGetValue(self):
393 self.assertEqual(Gst.Structure('test,test=(bitmask)0x20')['test'], 1 << 5)
398 r = Gst.Bitmask(1 << 5)
399 if sys.version_info >= (3, 0):
400 self.assertEqual(str(r), '0x20')
402 self.assertEqual(str(r), '0x20L')