2 import vapoursynth
as vs
5 class PropDictTest(unittest
.TestCase
):
8 self
.core
.num_threads
= 1
9 self
.frame
= self
.core
.std
.BlankClip().get_frame(0)
10 self
.props
= self
.frame
.props
12 self
.frame_copy
= self
.frame
.copy()
13 self
.props_rw
= self
.frame_copy
.props
15 def test_video_props(self
):
16 self
.core
.std
.BlankClip().get_frame(0).props
18 def test_audio_props(self
):
19 self
.core
.std
.BlankAudio().get_frame(0).props
21 def test_item_access(self
):
22 self
.assertEqual(self
.props
['_DurationDen'], 24)
23 with self
.assertRaises(KeyError):
24 self
.props
['_NonExistent']
26 with self
.assertRaises(vs
.Error
):
27 self
.props
['_DurationDen'] = 1
29 with self
.assertRaises(vs
.Error
):
30 del self
.props
['_DurationDen']
32 self
.assertEqual(self
.props
['_DurationDen'], 24)
34 self
.assertEqual(self
.props_rw
['_DurationDen'], 24)
35 self
.props_rw
['_DurationDen'] = 1
36 self
.assertEqual(self
.props_rw
['_DurationDen'], 1)
37 del self
.props_rw
['_DurationDen']
38 self
.assertFalse('_DurationDen' in self
.props_rw
)
40 def test_length(self
):
41 self
.assertCountEqual(self
.props
, self
.props_rw
)
42 self
.assertEqual(len(self
.props_rw
), 2)
43 del self
.props_rw
['_DurationDen']
44 self
.assertEqual(len(self
.props_rw
), 1)
45 self
.props_rw
['_DurationDen'] = 1
46 self
.assertEqual(len(self
.props_rw
), 2)
47 self
.props_rw
['TestEntry'] = "123"
48 self
.assertEqual(len(self
.props_rw
), 3)
50 def test_iterators(self
):
51 self
.assertEqual(list(self
.props
.keys()), list(self
.props
))
52 self
.assertEqual(self
.props
.keys(), set(['_DurationDen', '_DurationNum']))
53 self
.assertEqual(list(self
.props
.values()), [24, 1])
54 self
.assertEqual(self
.props
.items(), {('_DurationDen', 24), ('_DurationNum', 1)})
55 self
.assertEqual(dict(self
.props
), dict(self
.props_rw
))
56 self
.assertEqual(dict(self
.props
), {'_DurationDen': 24, '_DurationNum': 1})
58 def test_get_pop(self
):
59 self
.assertEqual(self
.props
.get('_DurationDen'), 24)
60 self
.assertEqual(self
.props
.get('_NonExistent'), None)
61 self
.assertEqual(self
.props
.get('_NonExistent', "Testificate"), "Testificate")
63 with self
.assertRaises(KeyError):
64 self
.props
.pop("_NonExistent")
67 self
.assertTrue(self
.props
.pop("_NonExistent", x
) is x
)
68 self
.assertEqual(self
.props
.pop("_NonExistent", None), None)
69 self
.assertEqual(self
.props
.pop("_NonExistent", "Testificate"), "Testificate")
71 self
.assertEqual(self
.props_rw
.pop("_DurationDen"), 24)
72 with self
.assertRaises(KeyError):
73 self
.props_rw
.pop("_DurationDen")
74 self
.assertEqual(self
.props_rw
.pop("_DurationDen", "Test"), "Test")
75 self
.assertEqual(self
.props_rw
.popitem(), ("_DurationNum", 1))
77 def test_setdefault(self
):
78 self
.assertEqual(self
.props_rw
.setdefault("_DurationDen"), 24)
79 self
.assertFalse("_NonExistent1" in self
.props_rw
)
80 self
.assertEqual(self
.props_rw
.setdefault("_NonExistent1"), 0)
81 self
.assertEqual(self
.props_rw
["_NonExistent1"], 0)
83 self
.assertEqual(self
.props_rw
.setdefault("_NonExistent2", b
"Testificate"), b
"Testificate")
84 self
.assertEqual(self
.props_rw
["_NonExistent2"], b
"Testificate")
86 def test_attr_access(self
):
87 self
.assertEqual(self
.props
._DurationDen
, 24)
88 with self
.assertRaises(AttributeError):
89 self
.props
._NonExistent
91 with self
.assertRaises(vs
.Error
):
92 self
.props
._DurationDen
= 1
94 with self
.assertRaises(vs
.Error
):
95 del self
.props
._DurationDen
97 self
.assertEqual(self
.props
._DurationDen
, 24)
99 self
.assertEqual(self
.props_rw
._DurationDen
, 24)
100 self
.props_rw
._DurationDen
= 1
101 self
.assertEqual(self
.props_rw
._DurationDen
, 1)
102 del self
.props_rw
._DurationDen
103 self
.assertFalse(hasattr(self
.props_rw
, '_DurationDen'))
105 def test_data_props(self
):
106 self
.props_rw
.DataPropStr
= 'hello'
107 self
.props_rw
.DataPropBytes
= b
'hello'
108 self
.assertEqual(type(self
.props_rw
.DataPropStr
), str)
109 self
.assertEqual(type(self
.props_rw
.DataPropBytes
), bytes
)
112 if __name__
== '__main__':